From b3b8a40f77f7d71eaf3904c20424e6f7d31e78be Mon Sep 17 00:00:00 2001 From: byons Date: Tue, 25 Aug 2026 10:37:57 +0800 Subject: [PATCH] First commit --- .gitattributes | 63 + .gitignore | 231 + 0/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 0/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 0/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 0/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 0/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 0/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 0/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 0/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 0/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 0/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 0/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 0/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 0/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 0/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 0/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 0/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 1/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 1/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 1/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 1/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 1/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 1/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 1/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 1/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 1/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 1/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 1/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 1/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 1/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 1/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 1/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 1/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 10/image/QRV21.bmp | Bin 0 -> 1650 bytes 10/image/QRV25.bmp | Bin 0 -> 2254 bytes 10/image/QRV25X21.bmp | Bin 0 -> 1650 bytes 10/image/QRV29.bmp | Bin 0 -> 2954 bytes 10/image/QRV33.bmp | Bin 0 -> 3750 bytes 10/image/QRV37.bmp | Bin 0 -> 4642 bytes 100/EXPIRYXX.xcf | Bin 0 -> 1386 bytes 100/digitalWidth4.bmp | Bin 0 -> 486 bytes 100/expiryDate8.bmp | Bin 0 -> 1426 bytes 100/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 100/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 100/image/digitalWidth8 (____).bmp | Bin 0 -> 918 bytes 100/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 100/image/digitalWidth8.xcf | Bin 0 -> 1083 bytes 100/image/digitalWidth88.bmp | Bin 0 -> 918 bytes 100/image/expiryDate8.bmp | Bin 0 -> 918 bytes 100/image/expiryDate875.bmp | Bin 0 -> 918 bytes 100/image/expiryDate875_backup.bmp | Bin 0 -> 918 bytes 100/image/expiryDate8_backup.bmp | Bin 0 -> 918 bytes 101/EXPIRYXX.xcf | Bin 0 -> 1386 bytes 101/digitalWidth1.bmp | Bin 0 -> 174 bytes 101/digitalWidth4.bmp | Bin 0 -> 486 bytes 101/expiryDate8.bmp | Bin 0 -> 1426 bytes 101/image/curDate1.bmp | Bin 0 -> 174 bytes 101/image/curDate8.bmp | Bin 0 -> 918 bytes 101/image/curDate875.bmp | Bin 0 -> 918 bytes 101/image/curDate8_backup.bmp | Bin 0 -> 918 bytes 101/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 101/image/digitalWidth8 (____).bmp | Bin 0 -> 918 bytes 101/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 101/image/digitalWidth8.xcf | Bin 0 -> 1083 bytes 101/image/digitalWidth88.bmp | Bin 0 -> 918 bytes 101/image/expiryDate8.bmp | Bin 0 -> 918 bytes 101/image/expiryDate875.bmp | Bin 0 -> 918 bytes 11/image/BARV105.bmp | Bin 0 -> 2894 bytes 11/image/BARV107.bmp | Bin 0 -> 4030 bytes 11/image/BARV109.bmp | Bin 0 -> 5166 bytes 11/image/BARV112.bmp | Bin 0 -> 6870 bytes 11/image/BARV116.bmp | Bin 0 -> 9142 bytes 11/image/BARV12.bmp | Bin 0 -> 6390 bytes 11/image/BARV124.bmp | Bin 0 -> 13686 bytes 11/image/BARV16.bmp | Bin 0 -> 8502 bytes 11/image/BARV205.bmp | Bin 0 -> 3354 bytes 11/image/BARV207.bmp | Bin 0 -> 4674 bytes 11/image/BARV209.bmp | Bin 0 -> 5994 bytes 11/image/BARV212.bmp | Bin 0 -> 7974 bytes 11/image/BARV216.bmp | Bin 0 -> 10614 bytes 11/image/BARV224.bmp | Bin 0 -> 15894 bytes 11/image/BARV24.bmp | Bin 0 -> 13494 bytes 11/image/BARV5.bmp | Bin 0 -> 2694 bytes 11/image/BARV7.bmp | Bin 0 -> 3750 bytes 11/image/BARV9.bmp | Bin 0 -> 4806 bytes 12/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 12/image/digitalWidth10.bmp | Bin 0 -> 1134 bytes 12/image/digitalWidth1075.bmp | Bin 0 -> 1134 bytes 12/image/digitalWidth11.bmp | Bin 0 -> 1254 bytes 12/image/digitalWidth1175.bmp | Bin 0 -> 1254 bytes 12/image/digitalWidth12.bmp | Bin 0 -> 1350 bytes 12/image/digitalWidth1275.bmp | Bin 0 -> 1350 bytes 12/image/digitalWidth13.bmp | Bin 0 -> 1470 bytes 12/image/digitalWidth1375.bmp | Bin 0 -> 1470 bytes 12/image/digitalWidth14.bmp | Bin 0 -> 1566 bytes 12/image/digitalWidth1475.bmp | Bin 0 -> 1566 bytes 12/image/digitalWidth15.bmp | Bin 0 -> 1686 bytes 12/image/digitalWidth1575.bmp | Bin 0 -> 1686 bytes 12/image/digitalWidth16.bmp | Bin 0 -> 1782 bytes 12/image/digitalWidth1675.bmp | Bin 0 -> 1782 bytes 12/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 12/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 12/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 12/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 12/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 12/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 12/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 12/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 12/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 12/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 12/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 12/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 12/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 12/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 12/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 12/image/digitalWidth9.bmp | Bin 0 -> 1038 bytes 12/image/digitalWidth975.bmp | Bin 0 -> 1038 bytes 13/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 13/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 13/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 13/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 13/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 13/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 13/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 13/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 13/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 13/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 13/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 13/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 13/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 13/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 13/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 13/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 14/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 14/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 14/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 14/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 14/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 14/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 14/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 14/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 14/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 14/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 14/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 14/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 14/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 14/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 14/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 14/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 15/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 15/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 15/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 15/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 15/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 15/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 15/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 15/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 15/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 15/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 15/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 15/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 15/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 15/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 15/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 15/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 2/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 2/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 2/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 2/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 2/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 2/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 2/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 2/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 2/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 2/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 2/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 2/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 2/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 2/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 2/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 2/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 20/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 20/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 20/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 20/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 20/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 20/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 20/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 20/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 20/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 20/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 20/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 20/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 20/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 20/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 20/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 20/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 21/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 21/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 21/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 21/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 21/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 21/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 21/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 21/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 21/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 21/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 21/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 21/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 21/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 21/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 21/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 21/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 22/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 22/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 22/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 22/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 22/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 22/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 22/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 22/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 22/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 22/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 22/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 22/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 22/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 22/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 22/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 22/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 23/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 23/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 23/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 23/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 23/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 23/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 23/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 23/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 23/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 23/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 23/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 23/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 23/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 23/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 23/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 23/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 24/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 24/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 24/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 24/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 24/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 24/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 24/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 24/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 24/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 24/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 24/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 24/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 24/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 24/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 24/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 24/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 25/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 25/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 25/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 25/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 25/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 25/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 25/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 25/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 25/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 25/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 25/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 25/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 25/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 25/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 25/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 25/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 26/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 26/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 26/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 26/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 26/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 26/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 26/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 26/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 26/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 26/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 26/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 26/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 26/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 26/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 26/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 26/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 27/image (复件)/digitalWidth1.bmp | Bin 0 -> 174 bytes 27/image (复件)/digitalWidth175.bmp | Bin 0 -> 174 bytes 27/image (复件)/digitalWidth2.bmp | Bin 0 -> 270 bytes 27/image (复件)/digitalWidth275.bmp | Bin 0 -> 270 bytes 27/image (复件)/digitalWidth3.bmp | Bin 0 -> 390 bytes 27/image (复件)/digitalWidth375.bmp | Bin 0 -> 390 bytes 27/image (复件)/digitalWidth4.bmp | Bin 0 -> 486 bytes 27/image (复件)/digitalWidth475.bmp | Bin 0 -> 486 bytes 27/image (复件)/digitalWidth5.bmp | Bin 0 -> 606 bytes 27/image (复件)/digitalWidth575.bmp | Bin 0 -> 606 bytes 27/image (复件)/digitalWidth6.bmp | Bin 0 -> 702 bytes 27/image (复件)/digitalWidth675.bmp | Bin 0 -> 702 bytes 27/image (复件)/digitalWidth7.bmp | Bin 0 -> 822 bytes 27/image (复件)/digitalWidth775.bmp | Bin 0 -> 822 bytes 27/image (复件)/digitalWidth8.bmp | Bin 0 -> 918 bytes 27/image (复件)/digitalWidth875.bmp | Bin 0 -> 918 bytes 27/image.tar.gz | Bin 0 -> 760 bytes 27/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 27/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 27/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 27/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 27/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 27/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 27/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 27/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 27/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 27/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 27/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 27/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 27/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 27/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 27/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 27/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 28/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 28/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 28/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 28/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 28/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 28/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 28/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 28/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 28/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 28/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 28/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 28/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 28/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 28/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 28/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 28/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 3/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 3/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 3/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 3/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 3/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 3/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 3/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 3/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 3/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 3/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 3/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 3/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 3/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 3/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 3/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 3/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 30/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 30/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 30/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 30/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 30/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 30/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 30/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 30/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 30/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 30/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 30/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 30/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 30/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 30/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 30/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 30/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 31/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 31/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 31/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 31/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 31/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 31/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 31/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 31/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 31/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 31/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 31/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 31/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 31/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 31/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 31/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 31/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 32/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 32/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 32/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 32/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 32/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 32/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 32/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 32/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 32/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 32/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 32/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 32/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 32/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 32/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 32/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 32/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 33/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 33/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 33/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 33/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 33/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 33/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 33/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 33/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 33/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 33/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 33/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 33/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 33/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 33/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 33/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 33/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 34/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 34/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 34/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 34/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 34/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 34/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 34/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 34/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 34/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 34/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 34/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 34/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 34/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 34/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 34/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 34/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 35/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 35/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 35/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 35/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 35/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 35/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 35/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 35/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 35/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 35/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 35/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 35/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 35/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 35/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 35/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 35/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 36/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 36/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 36/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 36/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 36/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 36/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 36/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 36/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 36/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 36/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 36/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 36/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 36/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 36/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 36/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 36/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 37/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 37/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 37/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 37/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 37/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 37/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 37/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 37/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 37/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 37/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 37/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 37/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 37/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 37/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 37/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 37/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 38/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 38/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 38/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 38/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 38/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 38/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 38/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 38/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 38/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 38/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 38/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 38/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 38/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 38/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 38/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 38/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 4/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 4/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 4/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 4/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 4/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 4/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 4/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 4/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 4/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 4/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 4/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 4/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 4/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 4/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 4/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 4/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 40/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 40/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 40/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 40/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 40/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 40/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 40/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 40/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 40/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 40/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 40/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 40/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 40/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 40/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 40/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 40/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 41/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 41/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 41/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 41/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 41/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 41/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 41/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 41/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 41/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 41/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 41/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 41/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 41/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 41/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 41/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 41/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 42/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 42/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 42/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 42/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 42/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 42/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 42/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 42/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 42/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 42/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 42/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 42/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 42/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 42/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 42/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 42/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 43/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 43/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 43/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 43/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 43/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 43/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 43/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 43/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 43/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 43/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 43/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 43/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 43/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 43/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 43/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 43/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 44/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 44/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 44/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 44/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 44/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 44/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 44/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 44/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 44/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 44/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 44/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 44/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 44/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 44/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 44/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 44/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 45/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 45/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 45/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 45/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 45/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 45/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 45/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 45/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 45/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 45/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 45/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 45/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 45/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 45/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 45/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 45/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 46/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 46/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 46/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 46/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 46/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 46/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 46/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 46/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 46/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 46/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 46/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 46/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 46/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 46/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 46/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 46/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 47/image (复件)/digitalWidth1.bmp | Bin 0 -> 174 bytes 47/image (复件)/digitalWidth175.bmp | Bin 0 -> 174 bytes 47/image (复件)/digitalWidth2.bmp | Bin 0 -> 270 bytes 47/image (复件)/digitalWidth275.bmp | Bin 0 -> 270 bytes 47/image (复件)/digitalWidth3.bmp | Bin 0 -> 390 bytes 47/image (复件)/digitalWidth375.bmp | Bin 0 -> 390 bytes 47/image (复件)/digitalWidth4.bmp | Bin 0 -> 486 bytes 47/image (复件)/digitalWidth475.bmp | Bin 0 -> 486 bytes 47/image (复件)/digitalWidth5.bmp | Bin 0 -> 606 bytes 47/image (复件)/digitalWidth575.bmp | Bin 0 -> 606 bytes 47/image (复件)/digitalWidth6.bmp | Bin 0 -> 702 bytes 47/image (复件)/digitalWidth675.bmp | Bin 0 -> 702 bytes 47/image (复件)/digitalWidth7.bmp | Bin 0 -> 822 bytes 47/image (复件)/digitalWidth775.bmp | Bin 0 -> 822 bytes 47/image (复件)/digitalWidth8.bmp | Bin 0 -> 918 bytes 47/image (复件)/digitalWidth875.bmp | Bin 0 -> 918 bytes 47/image.tar.gz | Bin 0 -> 760 bytes 47/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 47/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 47/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 47/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 47/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 47/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 47/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 47/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 47/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 47/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 47/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 47/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 47/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 47/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 47/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 47/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 48/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 48/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 48/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 48/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 48/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 48/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 48/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 48/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 48/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 48/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 48/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 48/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 48/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 48/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 48/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 48/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 5/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 5/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 5/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 5/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 5/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 5/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 5/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 5/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 5/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 5/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 5/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 5/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 5/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 5/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 5/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 5/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 50/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 50/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 50/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 50/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 50/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 50/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 50/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 50/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 50/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 50/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 50/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 50/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 50/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 50/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 50/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 50/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 51/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 51/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 51/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 51/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 51/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 51/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 51/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 51/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 51/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 51/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 51/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 51/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 51/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 51/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 51/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 51/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 52/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 52/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 52/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 52/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 52/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 52/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 52/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 52/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 52/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 52/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 52/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 52/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 52/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 52/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 52/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 52/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 53/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 53/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 53/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 53/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 53/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 53/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 53/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 53/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 53/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 53/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 53/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 53/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 53/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 53/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 53/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 53/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 54/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 54/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 54/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 54/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 54/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 54/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 54/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 54/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 54/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 54/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 54/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 54/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 54/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 54/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 54/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 54/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 55/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 55/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 55/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 55/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 55/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 55/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 55/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 55/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 55/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 55/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 55/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 55/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 55/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 55/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 55/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 55/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 56/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 56/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 56/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 56/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 56/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 56/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 56/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 56/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 56/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 56/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 56/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 56/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 56/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 56/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 56/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 56/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 57/image (复件)/digitalWidth1.bmp | Bin 0 -> 174 bytes 57/image (复件)/digitalWidth175.bmp | Bin 0 -> 174 bytes 57/image (复件)/digitalWidth2.bmp | Bin 0 -> 270 bytes 57/image (复件)/digitalWidth275.bmp | Bin 0 -> 270 bytes 57/image (复件)/digitalWidth3.bmp | Bin 0 -> 390 bytes 57/image (复件)/digitalWidth375.bmp | Bin 0 -> 390 bytes 57/image (复件)/digitalWidth4.bmp | Bin 0 -> 486 bytes 57/image (复件)/digitalWidth475.bmp | Bin 0 -> 486 bytes 57/image (复件)/digitalWidth5.bmp | Bin 0 -> 606 bytes 57/image (复件)/digitalWidth575.bmp | Bin 0 -> 606 bytes 57/image (复件)/digitalWidth6.bmp | Bin 0 -> 702 bytes 57/image (复件)/digitalWidth675.bmp | Bin 0 -> 702 bytes 57/image (复件)/digitalWidth7.bmp | Bin 0 -> 822 bytes 57/image (复件)/digitalWidth775.bmp | Bin 0 -> 822 bytes 57/image (复件)/digitalWidth8.bmp | Bin 0 -> 918 bytes 57/image (复件)/digitalWidth875.bmp | Bin 0 -> 918 bytes 57/image.tar.gz | Bin 0 -> 760 bytes 57/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 57/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 57/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 57/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 57/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 57/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 57/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 57/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 57/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 57/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 57/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 57/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 57/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 57/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 57/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 57/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 58/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 58/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 58/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 58/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 58/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 58/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 58/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 58/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 58/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 58/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 58/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 58/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 58/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 58/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 58/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 58/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 6/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 6/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 6/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 6/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 6/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 6/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 6/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 6/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 6/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 6/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 6/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 6/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 6/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 6/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 6/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 6/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 66/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 66/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 66/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 66/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 66/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 66/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 66/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 66/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 66/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 66/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 66/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 66/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 66/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 66/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 66/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 66/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 7/image (复件)/digitalWidth1.bmp | Bin 0 -> 174 bytes 7/image (复件)/digitalWidth175.bmp | Bin 0 -> 174 bytes 7/image (复件)/digitalWidth2.bmp | Bin 0 -> 270 bytes 7/image (复件)/digitalWidth275.bmp | Bin 0 -> 270 bytes 7/image (复件)/digitalWidth3.bmp | Bin 0 -> 390 bytes 7/image (复件)/digitalWidth375.bmp | Bin 0 -> 390 bytes 7/image (复件)/digitalWidth4.bmp | Bin 0 -> 486 bytes 7/image (复件)/digitalWidth475.bmp | Bin 0 -> 486 bytes 7/image (复件)/digitalWidth5.bmp | Bin 0 -> 606 bytes 7/image (复件)/digitalWidth575.bmp | Bin 0 -> 606 bytes 7/image (复件)/digitalWidth6.bmp | Bin 0 -> 702 bytes 7/image (复件)/digitalWidth675.bmp | Bin 0 -> 702 bytes 7/image (复件)/digitalWidth7.bmp | Bin 0 -> 822 bytes 7/image (复件)/digitalWidth775.bmp | Bin 0 -> 822 bytes 7/image (复件)/digitalWidth8.bmp | Bin 0 -> 918 bytes 7/image (复件)/digitalWidth875.bmp | Bin 0 -> 918 bytes 7/image.tar.gz | Bin 0 -> 760 bytes 7/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 7/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 7/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 7/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 7/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 7/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 7/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 7/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 7/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 7/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 7/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 7/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 7/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 7/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 7/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 7/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 8/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 8/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 8/image/digitalWidth2.bmp | Bin 0 -> 270 bytes 8/image/digitalWidth275.bmp | Bin 0 -> 270 bytes 8/image/digitalWidth3.bmp | Bin 0 -> 390 bytes 8/image/digitalWidth375.bmp | Bin 0 -> 390 bytes 8/image/digitalWidth4.bmp | Bin 0 -> 486 bytes 8/image/digitalWidth475.bmp | Bin 0 -> 486 bytes 8/image/digitalWidth5.bmp | Bin 0 -> 606 bytes 8/image/digitalWidth575.bmp | Bin 0 -> 606 bytes 8/image/digitalWidth6.bmp | Bin 0 -> 702 bytes 8/image/digitalWidth675.bmp | Bin 0 -> 702 bytes 8/image/digitalWidth7.bmp | Bin 0 -> 822 bytes 8/image/digitalWidth775.bmp | Bin 0 -> 822 bytes 8/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 8/image/digitalWidth875.bmp | Bin 0 -> 918 bytes 80/EXPIRYXX.xcf | Bin 0 -> 1386 bytes 80/digitalWidth4.bmp | Bin 0 -> 486 bytes 80/expiryDate8.bmp | Bin 0 -> 1426 bytes 80/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 80/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 80/image/digitalWidth8 (____).bmp | Bin 0 -> 918 bytes 80/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 80/image/digitalWidth8.xcf | Bin 0 -> 1083 bytes 80/image/digitalWidth88.bmp | Bin 0 -> 918 bytes 80/image/expiryDate8.bmp | Bin 0 -> 918 bytes 80/image/expiryDate875.bmp | Bin 0 -> 918 bytes 80/image/expiryDate875_backup.bmp | Bin 0 -> 918 bytes 80/image/expiryDate8_backup.bmp | Bin 0 -> 918 bytes 81/EXPIRYXX.xcf | Bin 0 -> 1386 bytes 81/digitalWidth1.bmp | Bin 0 -> 174 bytes 81/digitalWidth4.bmp | Bin 0 -> 486 bytes 81/expiryDate8.bmp | Bin 0 -> 1426 bytes 81/image/curDate1.bmp | Bin 0 -> 174 bytes 81/image/curDate8.bmp | Bin 0 -> 918 bytes 81/image/curDate875.bmp | Bin 0 -> 918 bytes 81/image/curDate8_backup.bmp | Bin 0 -> 918 bytes 81/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 81/image/digitalWidth8 (____).bmp | Bin 0 -> 918 bytes 81/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 81/image/digitalWidth8.xcf | Bin 0 -> 1083 bytes 81/image/digitalWidth88.bmp | Bin 0 -> 918 bytes 81/image/expiryDate8.bmp | Bin 0 -> 918 bytes 81/image/expiryDate875.bmp | Bin 0 -> 918 bytes 82/digitalWidth1.bmp | Bin 0 -> 174 bytes 82/digitalWidth4.bmp | Bin 0 -> 486 bytes 82/expiryDate8.bmp | Bin 0 -> 1426 bytes 82/image/class1.bmp | Bin 0 -> 174 bytes 82/image/class91.bmp | Bin 0 -> 270 bytes 82/image/curDate8.bmp | Bin 0 -> 918 bytes 82/image/curDate875.bmp | Bin 0 -> 918 bytes 82/image/curDate8_backup.bmp | Bin 0 -> 918 bytes 82/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 82/image/digitalWidth8 (____).bmp | Bin 0 -> 918 bytes 82/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 82/image/digitalWidth8.xcf | Bin 0 -> 1083 bytes 82/image/digitalWidth88.bmp | Bin 0 -> 918 bytes 82/image/expiryDate8.bmp | Bin 0 -> 918 bytes 82/image/expiryDate875.bmp | Bin 0 -> 918 bytes 9/image/DMTV10.bmp | Bin 0 -> 414 bytes 9/image/DMTV12.bmp | Bin 0 -> 582 bytes 9/image/DMTV14.bmp | Bin 0 -> 726 bytes 9/image/DMTV16.bmp | Bin 0 -> 950 bytes 9/image/DMTV18.bmp | Bin 0 -> 1134 bytes 9/image/DMTV20.bmp | Bin 0 -> 1414 bytes 9/image/DMTV22.bmp | Bin 0 -> 1638 bytes 9/image/DMTV24.bmp | Bin 0 -> 1974 bytes 9/image/DMTV26.bmp | Bin 0 -> 2238 bytes 9/image/DMTV32.bmp | Bin 0 -> 3382 bytes 90/EXPIRYXX.xcf | Bin 0 -> 1386 bytes 90/digitalWidth4.bmp | Bin 0 -> 486 bytes 90/expiryDate8.bmp | Bin 0 -> 1426 bytes 90/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 90/image/digitalWidth175.bmp | Bin 0 -> 174 bytes 90/image/digitalWidth8 (____).bmp | Bin 0 -> 918 bytes 90/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 90/image/digitalWidth8.xcf | Bin 0 -> 1083 bytes 90/image/digitalWidth88.bmp | Bin 0 -> 918 bytes 90/image/expiryDate8.bmp | Bin 0 -> 918 bytes 90/image/expiryDate875.bmp | Bin 0 -> 918 bytes 90/image/expiryDate875_backup.bmp | Bin 0 -> 918 bytes 90/image/expiryDate8_backup.bmp | Bin 0 -> 918 bytes 91/EXPIRYXX.xcf | Bin 0 -> 1386 bytes 91/digitalWidth1.bmp | Bin 0 -> 174 bytes 91/digitalWidth4.bmp | Bin 0 -> 486 bytes 91/expiryDate8.bmp | Bin 0 -> 1426 bytes 91/image/curDate1.bmp | Bin 0 -> 174 bytes 91/image/curDate8.bmp | Bin 0 -> 918 bytes 91/image/curDate875.bmp | Bin 0 -> 918 bytes 91/image/curDate8_backup.bmp | Bin 0 -> 918 bytes 91/image/digitalWidth1.bmp | Bin 0 -> 174 bytes 91/image/digitalWidth8 (____).bmp | Bin 0 -> 918 bytes 91/image/digitalWidth8.bmp | Bin 0 -> 918 bytes 91/image/digitalWidth8.xcf | Bin 0 -> 1083 bytes 91/image/digitalWidth88.bmp | Bin 0 -> 918 bytes 91/image/expiryDate8.bmp | Bin 0 -> 918 bytes 91/image/expiryDate875.bmp | Bin 0 -> 918 bytes Aes/TAesClass.cpp | 529 + Aes/TAesClass.h | 134 + BarCode/barcode.h | 119 + BarCode/cmdline.c | 177 + BarCode/cmdline.h | 58 + BarCode/codabar.c | 182 + BarCode/code128.c | 618 + BarCode/code39.c | 173 + BarCode/code93.c | 213 + BarCode/ean.c | 774 + BarCode/i25.c | 164 + BarCode/library.c | 247 + BarCode/msi.c | 155 + BarCode/pcl.c | 200 + BarCode/plessey.c | 164 + BarCode/ps.c | 273 + BarCode/rr/QBarCode.cpp | 178 + BarCode/rr/QBarCode.h | 44 + BarCode/rr/QBarCode.ui | 147 + Binarization/Binarization.cpp | 141 + Binarization/Binarization.h | 24 + CN/mainwindow.ui | 3813 ++++ ClickLabel.cpp | 6 + ClickLabel.h | 20 + DacDisplayAndEdit.cpp | 96 + DacDisplayAndEdit.h | 45 + DevOp.cpp | 7408 +++++++ DevOp.h | 453 + DialogAuthorization.cpp | 28 + DialogAuthorization.h | 25 + DialogAuthorizationPrint.cpp | 28 + DialogAuthorizationPrint.h | 25 + DialogFileOperation.cpp | 341 + DialogFileOperation.h | 68 + DialogFontSize.cpp | 346 + DialogFontSize.h | 37 + DialogInputTxt.cpp | 14 + DialogInputTxt.h | 22 + DialogInputTxt.ui | 78 + DialogInsertVari.cpp | 233 + DialogInsertVari.h | 33 + DialogLineSpace.cpp | 73 + DialogLineSpace.h | 24 + DialogSaveFile.cpp | 239 + DialogSaveFile.h | 54 + DigitalInput.cpp | 67 + DigitalInput.h | 33 + EN/mainwindow.ui | 3873 ++++ Expiry.bmp | Bin 0 -> 1248262 bytes HtmlDelegate.cpp | 36 + HtmlDelegate.h | 23 + InkJetPrinter.cpp | 3252 +++ InkJetPrinter.h | 137 + InputMethod.cpp | 1985 ++ InputMethod.h | 161 + InputMethod.ui | 2848 +++ InsertSpaceNumDialog.cpp | 19 + InsertSpaceNumDialog.h | 22 + K(bypm0718wx) | Bin 0 -> 2521852 bytes LicenseManger/LicenseManger.cpp | 438 + LicenseManger/LicenseManger.h | 92 + Log/dualfilelogger.cpp | 21 + Log/dualfilelogger.h | 35 + Log/filelogger.cpp | 276 + Log/filelogger.h | 62 + Log/logger.cpp | 240 + Log/logger.h | 76 + Log/logglobal.h | 23 + Log/logmessage.cpp | 78 + Log/logmessage.h | 44 + LogInfo.cpp | 477 + LogInfo.h | 56 + Matrix/common.cpp | 397 + Matrix/common.h | 53 + Matrix/dm200.cpp | 959 + Matrix/dm200.h | 162 + Matrix/drawmatrix.cpp | 68 + Matrix/reedsol.cpp | 173 + Matrix/reedsol.h | 40 + Matrix/zint.h | 209 + MemDisplayAndEdit.cpp | 148 + MemDisplayAndEdit.h | 56 + MyFileDialog.cpp | 57 + MyFileDialog.h | 28 + MyInputMethod.cpp | 134 + MyInputMethod.h | 58 + MyTextEdit.cpp | 144 + MyTextEdit.h | 40 + Network/IPEdit/IPEdit.cpp | 160 + Network/IPEdit/IPEdit.h | 44 + Network/IPEdit/README.md | 9 + Network/NetworkManager.cpp | 2018 ++ Network/NetworkManager.h | 143 + Network/NetworkManager.ui | 827 + Network/wpa_gui-qt4_/.gitignore | 4 + Network/wpa_gui-qt4_/addinterface.cpp | 245 + Network/wpa_gui-qt4_/addinterface.h | 45 + Network/wpa_gui-qt4_/eventhistory.cpp | 130 + Network/wpa_gui-qt4_/eventhistory.h | 63 + Network/wpa_gui-qt4_/eventhistory.ui | 61 + Network/wpa_gui-qt4_/icons.qrc | 9 + Network/wpa_gui-qt4_/icons/README | 74 + Network/wpa_gui-qt4_/icons/ap.svg | 832 + Network/wpa_gui-qt4_/icons/group.svg | 616 + Network/wpa_gui-qt4_/icons/invitation.svg | 374 + Network/wpa_gui-qt4_/icons/laptop.svg | 1568 ++ Network/wpa_gui-qt4_/icons/wpa_gui.svg | 256 + Network/wpa_gui-qt4_/icons_png.qrc | 9 + Network/wpa_gui-qt4_/lang/.gitignore | 1 + Network/wpa_gui-qt4_/lang/wpa_gui_de.ts | 1262 ++ Network/wpa_gui-qt4_/main.cpp | 82 + Network/wpa_gui-qt4_/networkconfig.cpp | 858 + Network/wpa_gui-qt4_/networkconfig.h | 61 + Network/wpa_gui-qt4_/networkconfig.ui | 435 + Network/wpa_gui-qt4_/peers.cpp | 1889 ++ Network/wpa_gui-qt4_/peers.h | 96 + Network/wpa_gui-qt4_/peers.ui | 40 + Network/wpa_gui-qt4_/scanresults.cpp | 144 + Network/wpa_gui-qt4_/scanresults.h | 46 + Network/wpa_gui-qt4_/scanresults.ui | 94 + Network/wpa_gui-qt4_/stringquery.cpp | 37 + Network/wpa_gui-qt4_/stringquery.h | 34 + Network/wpa_gui-qt4_/userdatarequest.cpp | 100 + Network/wpa_gui-qt4_/userdatarequest.h | 46 + Network/wpa_gui-qt4_/userdatarequest.ui | 109 + Network/wpa_gui-qt4_/wpa_gui.desktop | 10 + Network/wpa_gui-qt4_/wpa_gui.pro | 68 + Network/wpa_gui-qt4_/wpagui.cpp | 1748 ++ Network/wpa_gui-qt4_/wpagui.h | 150 + Network/wpa_gui-qt4_/wpagui.ui | 524 + Network/wpa_gui-qt4_/wpamsg.h | 41 + Network/wpamsg.h | 41 + OtherInfo.cpp | 274 + OtherInfo.h | 48 + ParaSettingUI.cpp | 43 + ParaSettingUI.h | 31 + PhaseGraphic.cpp | 125 + PhaseGraphic.h | 40 + PicEdit.cpp | 956 + PicEdit.h | 137 + PicWidget.cpp | 1953 ++ PicWidget.h | 245 + PrintSetting.cpp | 2313 +++ PrintSetting.h | 194 + PrintTextDisplay.cpp | 398 + PrintTextDisplay.h | 47 + Public.cpp | 431 + Public.h | 44 + PulseNumFix.cpp | 109 + PulseNumFix.h | 39 + QBarCode.cpp | 867 + QBarCode.h | 100 + QBarCode.ui | 382 + QbarCodemage.bmp | Bin 0 -> 5602 bytes QbarCodemage1.bmp | Bin 0 -> 7494 bytes QbarCodemage2.bmp | Bin 0 -> 9270 bytes QtQREnCode/121.pro | 49 + QtQREnCode/bistream.h | 43 + QtQREnCode/bitstream.cpp | 180 + QtQREnCode/form.ui | 19 + QtQREnCode/main.cpp | 11 + QtQREnCode/mainwindow.cpp | 1 + QtQREnCode/mainwindow.h | 25 + QtQREnCode/mainwindow.ui | 173 + QtQREnCode/mask.cpp | 257 + QtQREnCode/mask.h | 37 + QtQREnCode/qrenc.cpp | 216 + QtQREnCode/qrencode.cpp | 419 + QtQREnCode/qrencode.h | 205 + QtQREnCode/qrencode_inner.cpp | 1 + QtQREnCode/qrencode_inner.h | 72 + QtQREnCode/qrinput.cpp | 776 + QtQREnCode/qrinput.h | 112 + QtQREnCode/qrspec.cpp | 574 + QtQREnCode/qrspec.h | 193 + QtQREnCode/rscode.cpp | 291 + QtQREnCode/rscode.h | 47 + QtQREnCode/split.cpp | 213 + QtQREnCode/split.h | 40 + QtUI.pro | 394 + SecondThread/SecondThread.cpp | 107 + SecondThread/SecondThread.h | 44 + SysPara.cpp | 747 + SysPara.h | 1216 ++ SystemManage.cpp | 1553 ++ SystemManage.h | 125 + SystemSetting.cpp | 894 + SystemSetting.h | 68 + TextEditOption.cpp | 1559 ++ TextEditOption.h | 154 + TextEditOption_backup.cpp | 1366 ++ Tftp/filetranseceiver.cpp | 437 + Tftp/filetranseceiver.h | 92 + TimeSettingDialog.cpp | 53 + TimeSettingDialog.h | 34 + TouchScreenConf/calibrate_Capacitance | Bin 0 -> 1199 bytes TouchScreenConf/calibrate_Resistance | Bin 0 -> 1205 bytes TouchScreenConf/qtui_Capacitance | 49 + TouchScreenConf/qtui_Resistance | 49 + TriggerCtrl.cpp | 741 + TriggerCtrl.h | 86 + VerBVersion.h | 20 + VerBVersion.h.r24 | 0 WINPY_utf8.txt | 20915 +++++++++++++++++++ WINPY_utf8.txt.backup | 21660 ++++++++++++++++++++ YN_utf8.txt | 21061 +++++++++++++++++++ ZkEdit.cpp | 265 + ZkEdit.h | 73 + arm_build | 3 + calibrate | Bin 0 -> 960 bytes chinese.qm | Bin 0 -> 797 bytes chinese.ts | 7936 +++++++ conf/VoltDataStd21.bin | Bin 0 -> 6536 bytes conf/VoltDataStd25.bin | Bin 0 -> 6536 bytes conf/VoltDataStd32.bin | Bin 0 -> 6536 bytes conf/VoltDataStd5Row5Dot.bin | Bin 0 -> 6536 bytes conf/VoltParaHi.bin | Bin 0 -> 2240 bytes conf/VoltePara_No73.bin | Bin 0 -> 3424 bytes conf/config.ini | 11 + dacdisplayandedit.ui | 272 + dialogAuthorizationPrint.ui | 93 + dialogauthorization.ui | 93 + dialogcycleprint.cpp | 163 + dialogcycleprint.h | 64 + dialogcycleprint.ui | 416 + dialogfileoperation.ui | 350 + dialogfontsize.ui | 251 + dialoginputpasswd.ui | 91 + dialoginsertvari.ui | 612 + dialoglinespace.ui | 222 + dialogmodifypasswd.cpp | 26 + dialogmodifypasswd.h | 25 + dialogmodifypasswd.ui | 91 + dialogpointdistanceadjust.ui | 304 + dialogsavefile.ui | 247 + dialogshowcounter.cpp | 165 + dialogshowcounter.h | 53 + dialogshowcounter.ui | 279 + digitalinput.ui | 420 + dlgQrCode.cpp | 614 + dlgQrCode.h | 65 + dlgQrCode.ui | 353 + dlgdrawinit.cpp | 37 + dlgdrawinit.h | 31 + dlgdrawinit.ui | 73 + dlginputaddr.cpp | 847 + dlginputaddr.h | 84 + dlginputaddr.ui | 290 + dlgmutilanguage.cpp | 135 + dlgmutilanguage.h | 28 + dlgmutilanguage.ui | 154 + dlgmywarring.cpp | 34 + dlgmywarring.h | 26 + dlgmywarring.ui | 166 + dlgselectinputlanguage.cpp | 33 + dlgselectinputlanguage.h | 28 + dlgselectinputlanguage.ui | 55 + dlgshowmsg.cpp | 36 + dlgshowmsg.h | 25 + dlgshowmsg.ui | 68 + dlgvarlength.cpp | 44 + dlgvarlength.h | 32 + dlgvarlength.ui | 202 + emergency | Bin 0 -> 41521 bytes english-0412-2OK.ts | 4100 ++++ english-1.ts | 5362 +++++ english.qm | Bin 0 -> 135006 bytes english.ts | 9179 +++++++++ english0417.ts | 4210 ++++ english0524.ts | 4223 ++++ english20141023-ok.ts | 4401 ++++ english20141023.ts | 4399 ++++ english24-1.ts | 4223 ++++ farsi.qm | Bin 0 -> 125601 bytes icon/10008.ico | Bin 0 -> 99678 bytes icon/BarCode1.png | Bin 0 -> 308 bytes icon/Epauseprint.png | Bin 0 -> 8349 bytes icon/Epauseprint1.png | Bin 0 -> 5520 bytes icon/Epauseprint2.png | Bin 0 -> 8498 bytes icon/Estartprint.png | Bin 0 -> 6932 bytes icon/Estartprint1.png | Bin 0 -> 5453 bytes icon/Estartprint2.png | Bin 0 -> 6440 bytes icon/Estartprint3.png | Bin 0 -> 5717 bytes icon/EstopPrint2.png | Bin 0 -> 8318 bytes icon/EstopPrint3.png | Bin 0 -> 6349 bytes icon/Hint.bmp | Bin 0 -> 3126 bytes icon/TEXT.PNG | Bin 0 -> 543 bytes icon/a9.ico | Bin 0 -> 92854 bytes icon/apply.png | Bin 0 -> 4177 bytes icon/arrowdown.png | Bin 0 -> 4059 bytes icon/arrowleft.png | Bin 0 -> 4057 bytes icon/arrowright.png | Bin 0 -> 4037 bytes icon/arrowup.png | Bin 0 -> 4062 bytes icon/bypm.png | Bin 0 -> 465 bytes icon/cleanup.png | Bin 0 -> 4496 bytes icon/closereclaimtanl.png | Bin 0 -> 2958 bytes icon/controlbyhand.png | Bin 0 -> 4457 bytes icon/counter.png | Bin 0 -> 5790 bytes icon/edit.png | Bin 0 -> 1280 bytes icon/exit.png | Bin 0 -> 4191 bytes icon/export.png | Bin 0 -> 4186 bytes icon/exportpdf.png | Bin 0 -> 1059 bytes icon/factorysetting.png | Bin 0 -> 4257 bytes icon/filedelete.png | Bin 0 -> 1458 bytes icon/filedelete2.png | Bin 0 -> 4112 bytes icon/fileimport.png | Bin 0 -> 3712 bytes icon/filenew.png | Bin 0 -> 768 bytes icon/fileopen.png | Bin 0 -> 1662 bytes icon/fileoperation.png | Bin 0 -> 4067 bytes icon/filesave.png | Bin 0 -> 1205 bytes icon/filesaveas.png | Bin 0 -> 4085 bytes icon/font.png | Bin 0 -> 4135 bytes icon/ghost.png | Bin 0 -> 4268 bytes icon/import.png | Bin 0 -> 3798 bytes icon/insert.png | Bin 0 -> 4220 bytes icon/keybackspace.png | Bin 0 -> 1040 bytes icon/keydelete.png | Bin 0 -> 4125 bytes icon/keydown.png | Bin 0 -> 1044 bytes icon/keyend.png | Bin 0 -> 2923 bytes icon/keyenter.png | Bin 0 -> 1127 bytes icon/keyhide.png | Bin 0 -> 1085 bytes icon/keyhome.png | Bin 0 -> 2897 bytes icon/keyinput.png | Bin 0 -> 1561 bytes icon/keyleft.png | Bin 0 -> 1042 bytes icon/keyright.png | Bin 0 -> 1049 bytes icon/keyshift.png | Bin 0 -> 1621 bytes icon/keyup.png | Bin 0 -> 1039 bytes icon/lastpage.png | Bin 0 -> 3657 bytes icon/leftright.png | Bin 0 -> 4155 bytes icon/linespace.png | Bin 0 -> 2908 bytes icon/localdisk.png | Bin 0 -> 4190 bytes icon/lockphase.png | Bin 0 -> 3755 bytes icon/nextpage.png | Bin 0 -> 3662 bytes icon/openreclaimtanl.png | Bin 0 -> 3065 bytes icon/pauseprint.png | Bin 0 -> 38632 bytes icon/pauseprint1.png | Bin 0 -> 7105 bytes icon/pauseprint2.png | Bin 0 -> 7643 bytes icon/poweroff.png | Bin 0 -> 17259 bytes icon/preview.png | Bin 0 -> 937 bytes icon/pulse.png | Bin 0 -> 4155 bytes icon/screenfix.png | Bin 0 -> 3071 bytes icon/searchsuitablefrequency.png | Bin 0 -> 1075 bytes icon/searchsuitablevoltage.png | Bin 0 -> 4268 bytes icon/specialchar.png | Bin 0 -> 3004 bytes icon/startprint.png | Bin 0 -> 41097 bytes icon/startprint1.png | Bin 0 -> 6918 bytes icon/startprint2.png | Bin 0 -> 7214 bytes icon/stopprint.png | Bin 0 -> 48195 bytes icon/stopprint1.png | Bin 0 -> 6550 bytes icon/stopprint2.png | Bin 0 -> 6945 bytes icon/sure.png | Bin 0 -> 3830 bytes icon/textbold.png | Bin 0 -> 1134 bytes icon/time.png | Bin 0 -> 4431 bytes icon/udisk.png | Bin 0 -> 3233 bytes icon/updatefont.png | Bin 0 -> 4007 bytes icon/updatesoftware.png | Bin 0 -> 4569 bytes icon/updown.png | Bin 0 -> 4172 bytes icon/vari.png | Bin 0 -> 3797 bytes icon/zoomin.png | Bin 0 -> 1208 bytes icon/zoomout.png | Bin 0 -> 1226 bytes image.qrc | 1008 + image/AH12.png | Bin 0 -> 1605 bytes image/AH13.png | Bin 0 -> 1792 bytes image/ALARMBlue.PNG | Bin 0 -> 2268 bytes image/ALARMGreen.PNG | Bin 0 -> 2984 bytes image/ALARMRed.PNG | Bin 0 -> 2865 bytes image/ALARMYellow.PNG | Bin 0 -> 2803 bytes image/DMTV10X10.bmp | Bin 0 -> 374 bytes image/DMTV12X12.bmp | Bin 0 -> 486 bytes image/DMTV14X14.bmp | Bin 0 -> 670 bytes image/DMTV16X16.bmp | Bin 0 -> 822 bytes image/DMTV18X18.bmp | Bin 0 -> 1062 bytes image/DMTV20X20.bmp | Bin 0 -> 1254 bytes image/DMTV22X22.bmp | Bin 0 -> 1550 bytes image/DMTV24X24.bmp | Bin 0 -> 1782 bytes image/DMTV26X26.bmp | Bin 0 -> 2134 bytes image/MIV12.png | Bin 0 -> 2527 bytes image/MIV13.png | Bin 0 -> 3153 bytes image/QRV25X21.bmp | Bin 0 -> 1650 bytes image/QRV29X25.bmp | Bin 0 -> 2254 bytes image/QRV33X29.bmp | Bin 0 -> 2954 bytes image/Turkey_logo.png | Bin 0 -> 51588 bytes image/ZFKD.png | Bin 0 -> 1033 bytes image/ZFKD2.png | Bin 0 -> 1562 bytes image/arabic2.png | Bin 0 -> 544 bytes image/arabicc.png | Bin 0 -> 562 bytes image/arabicl.png | Bin 0 -> 411 bytes image/arabicz.png | Bin 0 -> 696 bytes image/atxt0.png | Bin 0 -> 1020 bytes image/atxt1.png | Bin 0 -> 1065 bytes image/atxt2.png | Bin 0 -> 951 bytes image/atxt3.png | Bin 0 -> 991 bytes image/atxt4.png | Bin 0 -> 1017 bytes image/atxt5.png | Bin 0 -> 1054 bytes image/atxt6.png | Bin 0 -> 1071 bytes image/atxt7.png | Bin 0 -> 1018 bytes image/atxt8.png | Bin 0 -> 968 bytes image/counter.png | Bin 0 -> 3752 bytes image/counterz.png | Bin 0 -> 3618 bytes image/dd.txt | 1 + image/exit.png | Bin 0 -> 3936 bytes image/exit1.png | Bin 0 -> 2734 bytes image/g | Bin 0 -> 136 bytes image/gg | Bin 0 -> 132 bytes image/h | Bin 0 -> 132 bytes image/h12 | Bin 0 -> 136 bytes image/h2 | Bin 0 -> 124 bytes image/jetOFF.png | Bin 0 -> 7219 bytes image/jetOFF1.png | Bin 0 -> 2369 bytes image/jetON.png | Bin 0 -> 4695 bytes image/jetON1.png | Bin 0 -> 1994 bytes image/keyboard1.png | Bin 0 -> 1674 bytes image/keyboard2.png | Bin 0 -> 1601 bytes image/keyboard3.png | Bin 0 -> 1661 bytes image/prduct.png | Bin 0 -> 4848 bytes image/qtopia | 32 + image/qtopia1 | 32 + image/reset.png | Bin 0 -> 4125 bytes image/send | 1 + image/speed.png | Bin 0 -> 858 bytes image/suction.png | Bin 0 -> 1794 bytes image/suctionOFF.png | Bin 0 -> 3603 bytes image/suctionOFF1.png | Bin 0 -> 3565 bytes image/suctionON.png | Bin 0 -> 3594 bytes image/suctionON1.png | Bin 0 -> 3515 bytes image/textEdit.html | 5 + image/txt0.png | Bin 0 -> 163 bytes image/txt1.png | Bin 0 -> 3322 bytes image/txt11.png | Bin 0 -> 4157 bytes image/txt12.png | Bin 0 -> 3830 bytes image/txt13.png | Bin 0 -> 4236 bytes image/txt14.png | Bin 0 -> 3631 bytes image/txt2.png | Bin 0 -> 2992 bytes image/txt3.png | Bin 0 -> 3417 bytes image/txt4.png | Bin 0 -> 3183 bytes image/txt5.png | Bin 0 -> 3393 bytes image/txt6.png | Bin 0 -> 1928 bytes image/txt7.png | Bin 0 -> 2136 bytes image/txt8.png | Bin 0 -> 4127 bytes image/txt9.png | Bin 0 -> 3873 bytes image/txta.png | Bin 0 -> 3242 bytes image/txtb.png | Bin 0 -> 2890 bytes image/txtc.png | Bin 0 -> 5867 bytes image/txtd.png | Bin 0 -> 2734 bytes image/u2 | 5 + image/udisk.png | Bin 0 -> 3208 bytes image/update | 9 + image/xinxi.png | Bin 0 -> 3792 bytes image/显示屏1.jpg | Bin 0 -> 319847 bytes image/显示屏2.jpg | Bin 0 -> 304320 bytes image/显示屏3.jpg | Bin 0 -> 325488 bytes inkjetprinter.ui | 2594 +++ insertspacenumdialog.ui | 103 + latest/InkJetPrinter.cpp | 3511 ++++ latest/InkJetPrinter.h | 179 + loginfo.ui | 299 + logo_form.cpp | 30 + logo_form.h | 26 + logo_form.ui | 32 + main.cpp | 278 + mainwindow.cpp | 5460 +++++ mainwindow.h | 326 + mainwindow.ui | 3977 ++++ memdisplayandedit.ui | 430 + modbus/demo.c | 284 + modbus/demo.h | 27 + modbus/modbus/ascii/mbascii.c | 486 + modbus/modbus/ascii/mbascii.h | 56 + modbus/modbus/functions/mbfunccoils.c | 270 + modbus/modbus/functions/mbfuncdiag.c | 29 + modbus/modbus/functions/mbfuncdisc.c | 125 + modbus/modbus/functions/mbfuncholding.c | 308 + modbus/modbus/functions/mbfuncinput.c | 122 + modbus/modbus/functions/mbfuncother.c | 88 + modbus/modbus/functions/mbutils.c | 141 + modbus/modbus/include/mb.h | 417 + modbus/modbus/include/mbconfig.h | 132 + modbus/modbus/include/mbframe.h | 87 + modbus/modbus/include/mbfunc.h | 80 + modbus/modbus/include/mbport.h | 129 + modbus/modbus/include/mbproto.h | 83 + modbus/modbus/include/mbutils.h | 108 + modbus/modbus/mb.c | 413 + modbus/modbus/rtu/mbcrc.c | 98 + modbus/modbus/rtu/mbcrc.h | 36 + modbus/modbus/rtu/mbrtu.c | 355 + modbus/modbus/rtu/mbrtu.h | 51 + modbus/modbus/tcp/mbtcp.c | 158 + modbus/modbus/tcp/mbtcp.h | 53 + modbus/modbusserial.cpp | 469 + modbus/modbusserial.h | 69 + modbus/modbustcp.cpp | 290 + modbus/modbustcp.h | 67 + modbus/port/port.h | 81 + modbus/port/portevent.c | 72 + modbus/port/portother.c | 69 + modbus/port/portserial.c | 364 + modbus/port/porttcp.c | 385 + modbus/port/porttimer.c | 97 + moveinput.cpp | 43 + moveinput.h | 28 + moveinput.ui | 181 + mycom.cpp | 198 + mycom.h | 33 + myinclude.h | 121 + otherinfo.ui | 478 + picedit.ui | 832 + posix_qextserialport.cpp | 1128 + posix_qextserialport.h | 63 + printImage.bmp | Bin 0 -> 3798 bytes printImageScene.bmp | Bin 0 -> 29798 bytes printSceneView.png | Bin 0 -> 301 bytes print_net.cpp | 454 + print_net.h | 56 + printsetting.ui | 3644 ++++ pulsenumfix.ui | 231 + qextserialbase.cpp | 226 + qextserialbase.h | 258 + qjson/qjson-backport_global.h | 12 + qjson/qjson.cpp | 427 + qjson/qjson_p.h | 765 + qjson/qjsonarray.cpp | 1017 + qjson/qjsonarray.h | 224 + qjson/qjsondocument.cpp | 537 + qjson/qjsondocument.h | 146 + qjson/qjsonexport.h | 16 + qjson/qjsonobject.cpp | 1022 + qjson/qjsonobject.h | 219 + qjson/qjsonparser.cpp | 801 + qjson/qjsonparser_p.h | 120 + qjson/qjsonvalue.cpp | 592 + qjson/qjsonvalue.h | 192 + qjson/qjsonwriter.cpp | 280 + qjson/qjsonwriter_p.h | 73 + qjson/upQJson.pri | 24 + qt_zh_CN.qm | 1 + rcS | 60 + rfid/rfidfunction.cpp | 639 + rfid/rfidfunction.h | 171 + rfid/sm3.cpp | 310 + rfid/sm3.h | 37 + rfid/sm4.cpp | 231 + rfid/sm4.h | 34 + scene/SceneEditOption.cpp | 874 + scene/SceneEditOption.h | 117 + scene/formscenedlg.cpp | 550 + scene/formscenedlg.h | 127 + scene/formscenedlg.ui | 866 + scene/myview.cpp | 64 + scene/myview.h | 28 + scene/picscene.cpp | 172 + scene/picscene.h | 76 + scene/pictextitem.cpp | 149 + scene/pictextitem.h | 44 + scene/sceneEditOption.ui | 186 + scene/sceneviewwidget.cpp | 8 + scene/sceneviewwidget.h | 18 + serial.cpp | 126 + serial.h | 19 + spanish.qm | Bin 0 -> 145660 bytes spanish.ts | 8185 ++++++++ systemmanage.ui | 872 + systemsetting.ui | 1027 + textEdit2.html | 5 + textEdit3.html | 5 + textEditnew.html | 5 + textEditnew3.html | 5 + texteditoption.ui | 376 + thai.qm | Bin 0 -> 122304 bytes thai.ts | 9074 ++++++++ timesettingdialog.ui | 242 + triggerctrl.ui | 1035 + tty1 | 0 turkey.qm | Bin 0 -> 124908 bytes turkey.ts | 8212 ++++++++ vena.qm | Bin 0 -> 127994 bytes vena.ts | 8976 ++++++++ x86_build | 2 + zkWidget.cpp | 359 + zkWidget.h | 73 + zkedit.ui | 439 + 压力调节算法迁移.md | 66 + 1601 files changed, 275999 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 0/image/digitalWidth1.bmp create mode 100644 0/image/digitalWidth175.bmp create mode 100644 0/image/digitalWidth2.bmp create mode 100644 0/image/digitalWidth275.bmp create mode 100644 0/image/digitalWidth3.bmp create mode 100644 0/image/digitalWidth375.bmp create mode 100644 0/image/digitalWidth4.bmp create mode 100644 0/image/digitalWidth475.bmp create mode 100644 0/image/digitalWidth5.bmp create mode 100644 0/image/digitalWidth575.bmp create mode 100644 0/image/digitalWidth6.bmp create mode 100644 0/image/digitalWidth675.bmp create mode 100644 0/image/digitalWidth7.bmp create mode 100644 0/image/digitalWidth775.bmp create mode 100644 0/image/digitalWidth8.bmp create mode 100644 0/image/digitalWidth875.bmp create mode 100644 1/image/digitalWidth1.bmp create mode 100644 1/image/digitalWidth175.bmp create mode 100644 1/image/digitalWidth2.bmp create mode 100644 1/image/digitalWidth275.bmp create mode 100644 1/image/digitalWidth3.bmp create mode 100644 1/image/digitalWidth375.bmp create mode 100644 1/image/digitalWidth4.bmp create mode 100644 1/image/digitalWidth475.bmp create mode 100644 1/image/digitalWidth5.bmp create mode 100644 1/image/digitalWidth575.bmp create mode 100644 1/image/digitalWidth6.bmp create mode 100644 1/image/digitalWidth675.bmp create mode 100644 1/image/digitalWidth7.bmp create mode 100644 1/image/digitalWidth775.bmp create mode 100644 1/image/digitalWidth8.bmp create mode 100644 1/image/digitalWidth875.bmp create mode 100644 10/image/QRV21.bmp create mode 100644 10/image/QRV25.bmp create mode 100644 10/image/QRV25X21.bmp create mode 100644 10/image/QRV29.bmp create mode 100644 10/image/QRV33.bmp create mode 100644 10/image/QRV37.bmp create mode 100644 100/EXPIRYXX.xcf create mode 100644 100/digitalWidth4.bmp create mode 100644 100/expiryDate8.bmp create mode 100644 100/image/digitalWidth1.bmp create mode 100644 100/image/digitalWidth175.bmp create mode 100644 100/image/digitalWidth8 (____).bmp create mode 100644 100/image/digitalWidth8.bmp create mode 100644 100/image/digitalWidth8.xcf create mode 100644 100/image/digitalWidth88.bmp create mode 100644 100/image/expiryDate8.bmp create mode 100644 100/image/expiryDate875.bmp create mode 100644 100/image/expiryDate875_backup.bmp create mode 100644 100/image/expiryDate8_backup.bmp create mode 100644 101/EXPIRYXX.xcf create mode 100644 101/digitalWidth1.bmp create mode 100644 101/digitalWidth4.bmp create mode 100644 101/expiryDate8.bmp create mode 100644 101/image/curDate1.bmp create mode 100644 101/image/curDate8.bmp create mode 100644 101/image/curDate875.bmp create mode 100644 101/image/curDate8_backup.bmp create mode 100644 101/image/digitalWidth1.bmp create mode 100644 101/image/digitalWidth8 (____).bmp create mode 100644 101/image/digitalWidth8.bmp create mode 100644 101/image/digitalWidth8.xcf create mode 100644 101/image/digitalWidth88.bmp create mode 100644 101/image/expiryDate8.bmp create mode 100644 101/image/expiryDate875.bmp create mode 100644 11/image/BARV105.bmp create mode 100644 11/image/BARV107.bmp create mode 100644 11/image/BARV109.bmp create mode 100644 11/image/BARV112.bmp create mode 100644 11/image/BARV116.bmp create mode 100644 11/image/BARV12.bmp create mode 100644 11/image/BARV124.bmp create mode 100644 11/image/BARV16.bmp create mode 100644 11/image/BARV205.bmp create mode 100644 11/image/BARV207.bmp create mode 100644 11/image/BARV209.bmp create mode 100644 11/image/BARV212.bmp create mode 100644 11/image/BARV216.bmp create mode 100644 11/image/BARV224.bmp create mode 100644 11/image/BARV24.bmp create mode 100644 11/image/BARV5.bmp create mode 100644 11/image/BARV7.bmp create mode 100644 11/image/BARV9.bmp create mode 100644 12/image/digitalWidth1.bmp create mode 100644 12/image/digitalWidth10.bmp create mode 100644 12/image/digitalWidth1075.bmp create mode 100644 12/image/digitalWidth11.bmp create mode 100644 12/image/digitalWidth1175.bmp create mode 100644 12/image/digitalWidth12.bmp create mode 100644 12/image/digitalWidth1275.bmp create mode 100644 12/image/digitalWidth13.bmp create mode 100644 12/image/digitalWidth1375.bmp create mode 100644 12/image/digitalWidth14.bmp create mode 100644 12/image/digitalWidth1475.bmp create mode 100644 12/image/digitalWidth15.bmp create mode 100644 12/image/digitalWidth1575.bmp create mode 100644 12/image/digitalWidth16.bmp create mode 100644 12/image/digitalWidth1675.bmp create mode 100644 12/image/digitalWidth175.bmp create mode 100644 12/image/digitalWidth2.bmp create mode 100644 12/image/digitalWidth275.bmp create mode 100644 12/image/digitalWidth3.bmp create mode 100644 12/image/digitalWidth375.bmp create mode 100644 12/image/digitalWidth4.bmp create mode 100644 12/image/digitalWidth475.bmp create mode 100644 12/image/digitalWidth5.bmp create mode 100644 12/image/digitalWidth575.bmp create mode 100644 12/image/digitalWidth6.bmp create mode 100644 12/image/digitalWidth675.bmp create mode 100644 12/image/digitalWidth7.bmp create mode 100644 12/image/digitalWidth775.bmp create mode 100644 12/image/digitalWidth8.bmp create mode 100644 12/image/digitalWidth875.bmp create mode 100644 12/image/digitalWidth9.bmp create mode 100644 12/image/digitalWidth975.bmp create mode 100644 13/image/digitalWidth1.bmp create mode 100644 13/image/digitalWidth175.bmp create mode 100644 13/image/digitalWidth2.bmp create mode 100644 13/image/digitalWidth275.bmp create mode 100644 13/image/digitalWidth3.bmp create mode 100644 13/image/digitalWidth375.bmp create mode 100644 13/image/digitalWidth4.bmp create mode 100644 13/image/digitalWidth475.bmp create mode 100644 13/image/digitalWidth5.bmp create mode 100644 13/image/digitalWidth575.bmp create mode 100644 13/image/digitalWidth6.bmp create mode 100644 13/image/digitalWidth675.bmp create mode 100644 13/image/digitalWidth7.bmp create mode 100644 13/image/digitalWidth775.bmp create mode 100644 13/image/digitalWidth8.bmp create mode 100644 13/image/digitalWidth875.bmp create mode 100644 14/image/digitalWidth1.bmp create mode 100644 14/image/digitalWidth175.bmp create mode 100644 14/image/digitalWidth2.bmp create mode 100644 14/image/digitalWidth275.bmp create mode 100644 14/image/digitalWidth3.bmp create mode 100644 14/image/digitalWidth375.bmp create mode 100644 14/image/digitalWidth4.bmp create mode 100644 14/image/digitalWidth475.bmp create mode 100644 14/image/digitalWidth5.bmp create mode 100644 14/image/digitalWidth575.bmp create mode 100644 14/image/digitalWidth6.bmp create mode 100644 14/image/digitalWidth675.bmp create mode 100644 14/image/digitalWidth7.bmp create mode 100644 14/image/digitalWidth775.bmp create mode 100644 14/image/digitalWidth8.bmp create mode 100644 14/image/digitalWidth875.bmp create mode 100644 15/image/digitalWidth1.bmp create mode 100644 15/image/digitalWidth175.bmp create mode 100644 15/image/digitalWidth2.bmp create mode 100644 15/image/digitalWidth275.bmp create mode 100644 15/image/digitalWidth3.bmp create mode 100644 15/image/digitalWidth375.bmp create mode 100644 15/image/digitalWidth4.bmp create mode 100644 15/image/digitalWidth475.bmp create mode 100644 15/image/digitalWidth5.bmp create mode 100644 15/image/digitalWidth575.bmp create mode 100644 15/image/digitalWidth6.bmp create mode 100644 15/image/digitalWidth675.bmp create mode 100644 15/image/digitalWidth7.bmp create mode 100644 15/image/digitalWidth775.bmp create mode 100644 15/image/digitalWidth8.bmp create mode 100644 15/image/digitalWidth875.bmp create mode 100644 2/image/digitalWidth1.bmp create mode 100644 2/image/digitalWidth175.bmp create mode 100644 2/image/digitalWidth2.bmp create mode 100644 2/image/digitalWidth275.bmp create mode 100644 2/image/digitalWidth3.bmp create mode 100644 2/image/digitalWidth375.bmp create mode 100644 2/image/digitalWidth4.bmp create mode 100644 2/image/digitalWidth475.bmp create mode 100644 2/image/digitalWidth5.bmp create mode 100644 2/image/digitalWidth575.bmp create mode 100644 2/image/digitalWidth6.bmp create mode 100644 2/image/digitalWidth675.bmp create mode 100644 2/image/digitalWidth7.bmp create mode 100644 2/image/digitalWidth775.bmp create mode 100644 2/image/digitalWidth8.bmp create mode 100644 2/image/digitalWidth875.bmp create mode 100644 20/image/digitalWidth1.bmp create mode 100644 20/image/digitalWidth175.bmp create mode 100644 20/image/digitalWidth2.bmp create mode 100644 20/image/digitalWidth275.bmp create mode 100644 20/image/digitalWidth3.bmp create mode 100644 20/image/digitalWidth375.bmp create mode 100644 20/image/digitalWidth4.bmp create mode 100644 20/image/digitalWidth475.bmp create mode 100644 20/image/digitalWidth5.bmp create mode 100644 20/image/digitalWidth575.bmp create mode 100644 20/image/digitalWidth6.bmp create mode 100644 20/image/digitalWidth675.bmp create mode 100644 20/image/digitalWidth7.bmp create mode 100644 20/image/digitalWidth775.bmp create mode 100644 20/image/digitalWidth8.bmp create mode 100644 20/image/digitalWidth875.bmp create mode 100644 21/image/digitalWidth1.bmp create mode 100644 21/image/digitalWidth175.bmp create mode 100644 21/image/digitalWidth2.bmp create mode 100644 21/image/digitalWidth275.bmp create mode 100644 21/image/digitalWidth3.bmp create mode 100644 21/image/digitalWidth375.bmp create mode 100644 21/image/digitalWidth4.bmp create mode 100644 21/image/digitalWidth475.bmp create mode 100644 21/image/digitalWidth5.bmp create mode 100644 21/image/digitalWidth575.bmp create mode 100644 21/image/digitalWidth6.bmp create mode 100644 21/image/digitalWidth675.bmp create mode 100644 21/image/digitalWidth7.bmp create mode 100644 21/image/digitalWidth775.bmp create mode 100644 21/image/digitalWidth8.bmp create mode 100644 21/image/digitalWidth875.bmp create mode 100644 22/image/digitalWidth1.bmp create mode 100644 22/image/digitalWidth175.bmp create mode 100644 22/image/digitalWidth2.bmp create mode 100644 22/image/digitalWidth275.bmp create mode 100644 22/image/digitalWidth3.bmp create mode 100644 22/image/digitalWidth375.bmp create mode 100644 22/image/digitalWidth4.bmp create mode 100644 22/image/digitalWidth475.bmp create mode 100644 22/image/digitalWidth5.bmp create mode 100644 22/image/digitalWidth575.bmp create mode 100644 22/image/digitalWidth6.bmp create mode 100644 22/image/digitalWidth675.bmp create mode 100644 22/image/digitalWidth7.bmp create mode 100644 22/image/digitalWidth775.bmp create mode 100644 22/image/digitalWidth8.bmp create mode 100644 22/image/digitalWidth875.bmp create mode 100644 23/image/digitalWidth1.bmp create mode 100644 23/image/digitalWidth175.bmp create mode 100644 23/image/digitalWidth2.bmp create mode 100644 23/image/digitalWidth275.bmp create mode 100644 23/image/digitalWidth3.bmp create mode 100644 23/image/digitalWidth375.bmp create mode 100644 23/image/digitalWidth4.bmp create mode 100644 23/image/digitalWidth475.bmp create mode 100644 23/image/digitalWidth5.bmp create mode 100644 23/image/digitalWidth575.bmp create mode 100644 23/image/digitalWidth6.bmp create mode 100644 23/image/digitalWidth675.bmp create mode 100644 23/image/digitalWidth7.bmp create mode 100644 23/image/digitalWidth775.bmp create mode 100644 23/image/digitalWidth8.bmp create mode 100644 23/image/digitalWidth875.bmp create mode 100644 24/image/digitalWidth1.bmp create mode 100644 24/image/digitalWidth175.bmp create mode 100644 24/image/digitalWidth2.bmp create mode 100644 24/image/digitalWidth275.bmp create mode 100644 24/image/digitalWidth3.bmp create mode 100644 24/image/digitalWidth375.bmp create mode 100644 24/image/digitalWidth4.bmp create mode 100644 24/image/digitalWidth475.bmp create mode 100644 24/image/digitalWidth5.bmp create mode 100644 24/image/digitalWidth575.bmp create mode 100644 24/image/digitalWidth6.bmp create mode 100644 24/image/digitalWidth675.bmp create mode 100644 24/image/digitalWidth7.bmp create mode 100644 24/image/digitalWidth775.bmp create mode 100644 24/image/digitalWidth8.bmp create mode 100644 24/image/digitalWidth875.bmp create mode 100644 25/image/digitalWidth1.bmp create mode 100644 25/image/digitalWidth175.bmp create mode 100644 25/image/digitalWidth2.bmp create mode 100644 25/image/digitalWidth275.bmp create mode 100644 25/image/digitalWidth3.bmp create mode 100644 25/image/digitalWidth375.bmp create mode 100644 25/image/digitalWidth4.bmp create mode 100644 25/image/digitalWidth475.bmp create mode 100644 25/image/digitalWidth5.bmp create mode 100644 25/image/digitalWidth575.bmp create mode 100644 25/image/digitalWidth6.bmp create mode 100644 25/image/digitalWidth675.bmp create mode 100644 25/image/digitalWidth7.bmp create mode 100644 25/image/digitalWidth775.bmp create mode 100644 25/image/digitalWidth8.bmp create mode 100644 25/image/digitalWidth875.bmp create mode 100644 26/image/digitalWidth1.bmp create mode 100644 26/image/digitalWidth175.bmp create mode 100644 26/image/digitalWidth2.bmp create mode 100644 26/image/digitalWidth275.bmp create mode 100644 26/image/digitalWidth3.bmp create mode 100644 26/image/digitalWidth375.bmp create mode 100644 26/image/digitalWidth4.bmp create mode 100644 26/image/digitalWidth475.bmp create mode 100644 26/image/digitalWidth5.bmp create mode 100644 26/image/digitalWidth575.bmp create mode 100644 26/image/digitalWidth6.bmp create mode 100644 26/image/digitalWidth675.bmp create mode 100644 26/image/digitalWidth7.bmp create mode 100644 26/image/digitalWidth775.bmp create mode 100644 26/image/digitalWidth8.bmp create mode 100644 26/image/digitalWidth875.bmp create mode 100644 27/image (复件)/digitalWidth1.bmp create mode 100644 27/image (复件)/digitalWidth175.bmp create mode 100644 27/image (复件)/digitalWidth2.bmp create mode 100644 27/image (复件)/digitalWidth275.bmp create mode 100644 27/image (复件)/digitalWidth3.bmp create mode 100644 27/image (复件)/digitalWidth375.bmp create mode 100644 27/image (复件)/digitalWidth4.bmp create mode 100644 27/image (复件)/digitalWidth475.bmp create mode 100644 27/image (复件)/digitalWidth5.bmp create mode 100644 27/image (复件)/digitalWidth575.bmp create mode 100644 27/image (复件)/digitalWidth6.bmp create mode 100644 27/image (复件)/digitalWidth675.bmp create mode 100644 27/image (复件)/digitalWidth7.bmp create mode 100644 27/image (复件)/digitalWidth775.bmp create mode 100644 27/image (复件)/digitalWidth8.bmp create mode 100644 27/image (复件)/digitalWidth875.bmp create mode 100644 27/image.tar.gz create mode 100644 27/image/digitalWidth1.bmp create mode 100644 27/image/digitalWidth175.bmp create mode 100644 27/image/digitalWidth2.bmp create mode 100644 27/image/digitalWidth275.bmp create mode 100644 27/image/digitalWidth3.bmp create mode 100644 27/image/digitalWidth375.bmp create mode 100644 27/image/digitalWidth4.bmp create mode 100644 27/image/digitalWidth475.bmp create mode 100644 27/image/digitalWidth5.bmp create mode 100644 27/image/digitalWidth575.bmp create mode 100644 27/image/digitalWidth6.bmp create mode 100644 27/image/digitalWidth675.bmp create mode 100644 27/image/digitalWidth7.bmp create mode 100644 27/image/digitalWidth775.bmp create mode 100644 27/image/digitalWidth8.bmp create mode 100644 27/image/digitalWidth875.bmp create mode 100644 28/image/digitalWidth1.bmp create mode 100644 28/image/digitalWidth175.bmp create mode 100644 28/image/digitalWidth2.bmp create mode 100644 28/image/digitalWidth275.bmp create mode 100644 28/image/digitalWidth3.bmp create mode 100644 28/image/digitalWidth375.bmp create mode 100644 28/image/digitalWidth4.bmp create mode 100644 28/image/digitalWidth475.bmp create mode 100644 28/image/digitalWidth5.bmp create mode 100644 28/image/digitalWidth575.bmp create mode 100644 28/image/digitalWidth6.bmp create mode 100644 28/image/digitalWidth675.bmp create mode 100644 28/image/digitalWidth7.bmp create mode 100644 28/image/digitalWidth775.bmp create mode 100644 28/image/digitalWidth8.bmp create mode 100644 28/image/digitalWidth875.bmp create mode 100644 3/image/digitalWidth1.bmp create mode 100644 3/image/digitalWidth175.bmp create mode 100644 3/image/digitalWidth2.bmp create mode 100644 3/image/digitalWidth275.bmp create mode 100644 3/image/digitalWidth3.bmp create mode 100644 3/image/digitalWidth375.bmp create mode 100644 3/image/digitalWidth4.bmp create mode 100644 3/image/digitalWidth475.bmp create mode 100644 3/image/digitalWidth5.bmp create mode 100644 3/image/digitalWidth575.bmp create mode 100644 3/image/digitalWidth6.bmp create mode 100644 3/image/digitalWidth675.bmp create mode 100644 3/image/digitalWidth7.bmp create mode 100644 3/image/digitalWidth775.bmp create mode 100644 3/image/digitalWidth8.bmp create mode 100644 3/image/digitalWidth875.bmp create mode 100644 30/image/digitalWidth1.bmp create mode 100644 30/image/digitalWidth175.bmp create mode 100644 30/image/digitalWidth2.bmp create mode 100644 30/image/digitalWidth275.bmp create mode 100644 30/image/digitalWidth3.bmp create mode 100644 30/image/digitalWidth375.bmp create mode 100644 30/image/digitalWidth4.bmp create mode 100644 30/image/digitalWidth475.bmp create mode 100644 30/image/digitalWidth5.bmp create mode 100644 30/image/digitalWidth575.bmp create mode 100644 30/image/digitalWidth6.bmp create mode 100644 30/image/digitalWidth675.bmp create mode 100644 30/image/digitalWidth7.bmp create mode 100644 30/image/digitalWidth775.bmp create mode 100644 30/image/digitalWidth8.bmp create mode 100644 30/image/digitalWidth875.bmp create mode 100644 31/image/digitalWidth1.bmp create mode 100644 31/image/digitalWidth175.bmp create mode 100644 31/image/digitalWidth2.bmp create mode 100644 31/image/digitalWidth275.bmp create mode 100644 31/image/digitalWidth3.bmp create mode 100644 31/image/digitalWidth375.bmp create mode 100644 31/image/digitalWidth4.bmp create mode 100644 31/image/digitalWidth475.bmp create mode 100644 31/image/digitalWidth5.bmp create mode 100644 31/image/digitalWidth575.bmp create mode 100644 31/image/digitalWidth6.bmp create mode 100644 31/image/digitalWidth675.bmp create mode 100644 31/image/digitalWidth7.bmp create mode 100644 31/image/digitalWidth775.bmp create mode 100644 31/image/digitalWidth8.bmp create mode 100644 31/image/digitalWidth875.bmp create mode 100644 32/image/digitalWidth1.bmp create mode 100644 32/image/digitalWidth175.bmp create mode 100644 32/image/digitalWidth2.bmp create mode 100644 32/image/digitalWidth275.bmp create mode 100644 32/image/digitalWidth3.bmp create mode 100644 32/image/digitalWidth375.bmp create mode 100644 32/image/digitalWidth4.bmp create mode 100644 32/image/digitalWidth475.bmp create mode 100644 32/image/digitalWidth5.bmp create mode 100644 32/image/digitalWidth575.bmp create mode 100644 32/image/digitalWidth6.bmp create mode 100644 32/image/digitalWidth675.bmp create mode 100644 32/image/digitalWidth7.bmp create mode 100644 32/image/digitalWidth775.bmp create mode 100644 32/image/digitalWidth8.bmp create mode 100644 32/image/digitalWidth875.bmp create mode 100644 33/image/digitalWidth1.bmp create mode 100644 33/image/digitalWidth175.bmp create mode 100644 33/image/digitalWidth2.bmp create mode 100644 33/image/digitalWidth275.bmp create mode 100644 33/image/digitalWidth3.bmp create mode 100644 33/image/digitalWidth375.bmp create mode 100644 33/image/digitalWidth4.bmp create mode 100644 33/image/digitalWidth475.bmp create mode 100644 33/image/digitalWidth5.bmp create mode 100644 33/image/digitalWidth575.bmp create mode 100644 33/image/digitalWidth6.bmp create mode 100644 33/image/digitalWidth675.bmp create mode 100644 33/image/digitalWidth7.bmp create mode 100644 33/image/digitalWidth775.bmp create mode 100644 33/image/digitalWidth8.bmp create mode 100644 33/image/digitalWidth875.bmp create mode 100644 34/image/digitalWidth1.bmp create mode 100644 34/image/digitalWidth175.bmp create mode 100644 34/image/digitalWidth2.bmp create mode 100644 34/image/digitalWidth275.bmp create mode 100644 34/image/digitalWidth3.bmp create mode 100644 34/image/digitalWidth375.bmp create mode 100644 34/image/digitalWidth4.bmp create mode 100644 34/image/digitalWidth475.bmp create mode 100644 34/image/digitalWidth5.bmp create mode 100644 34/image/digitalWidth575.bmp create mode 100644 34/image/digitalWidth6.bmp create mode 100644 34/image/digitalWidth675.bmp create mode 100644 34/image/digitalWidth7.bmp create mode 100644 34/image/digitalWidth775.bmp create mode 100644 34/image/digitalWidth8.bmp create mode 100644 34/image/digitalWidth875.bmp create mode 100644 35/image/digitalWidth1.bmp create mode 100644 35/image/digitalWidth175.bmp create mode 100644 35/image/digitalWidth2.bmp create mode 100644 35/image/digitalWidth275.bmp create mode 100644 35/image/digitalWidth3.bmp create mode 100644 35/image/digitalWidth375.bmp create mode 100644 35/image/digitalWidth4.bmp create mode 100644 35/image/digitalWidth475.bmp create mode 100644 35/image/digitalWidth5.bmp create mode 100644 35/image/digitalWidth575.bmp create mode 100644 35/image/digitalWidth6.bmp create mode 100644 35/image/digitalWidth675.bmp create mode 100644 35/image/digitalWidth7.bmp create mode 100644 35/image/digitalWidth775.bmp create mode 100644 35/image/digitalWidth8.bmp create mode 100644 35/image/digitalWidth875.bmp create mode 100644 36/image/digitalWidth1.bmp create mode 100644 36/image/digitalWidth175.bmp create mode 100644 36/image/digitalWidth2.bmp create mode 100644 36/image/digitalWidth275.bmp create mode 100644 36/image/digitalWidth3.bmp create mode 100644 36/image/digitalWidth375.bmp create mode 100644 36/image/digitalWidth4.bmp create mode 100644 36/image/digitalWidth475.bmp create mode 100644 36/image/digitalWidth5.bmp create mode 100644 36/image/digitalWidth575.bmp create mode 100644 36/image/digitalWidth6.bmp create mode 100644 36/image/digitalWidth675.bmp create mode 100644 36/image/digitalWidth7.bmp create mode 100644 36/image/digitalWidth775.bmp create mode 100644 36/image/digitalWidth8.bmp create mode 100644 36/image/digitalWidth875.bmp create mode 100644 37/image/digitalWidth1.bmp create mode 100644 37/image/digitalWidth175.bmp create mode 100644 37/image/digitalWidth2.bmp create mode 100644 37/image/digitalWidth275.bmp create mode 100644 37/image/digitalWidth3.bmp create mode 100644 37/image/digitalWidth375.bmp create mode 100644 37/image/digitalWidth4.bmp create mode 100644 37/image/digitalWidth475.bmp create mode 100644 37/image/digitalWidth5.bmp create mode 100644 37/image/digitalWidth575.bmp create mode 100644 37/image/digitalWidth6.bmp create mode 100644 37/image/digitalWidth675.bmp create mode 100644 37/image/digitalWidth7.bmp create mode 100644 37/image/digitalWidth775.bmp create mode 100644 37/image/digitalWidth8.bmp create mode 100644 37/image/digitalWidth875.bmp create mode 100644 38/image/digitalWidth1.bmp create mode 100644 38/image/digitalWidth175.bmp create mode 100644 38/image/digitalWidth2.bmp create mode 100644 38/image/digitalWidth275.bmp create mode 100644 38/image/digitalWidth3.bmp create mode 100644 38/image/digitalWidth375.bmp create mode 100644 38/image/digitalWidth4.bmp create mode 100644 38/image/digitalWidth475.bmp create mode 100644 38/image/digitalWidth5.bmp create mode 100644 38/image/digitalWidth575.bmp create mode 100644 38/image/digitalWidth6.bmp create mode 100644 38/image/digitalWidth675.bmp create mode 100644 38/image/digitalWidth7.bmp create mode 100644 38/image/digitalWidth775.bmp create mode 100644 38/image/digitalWidth8.bmp create mode 100644 38/image/digitalWidth875.bmp create mode 100644 4/image/digitalWidth1.bmp create mode 100644 4/image/digitalWidth175.bmp create mode 100644 4/image/digitalWidth2.bmp create mode 100644 4/image/digitalWidth275.bmp create mode 100644 4/image/digitalWidth3.bmp create mode 100644 4/image/digitalWidth375.bmp create mode 100644 4/image/digitalWidth4.bmp create mode 100644 4/image/digitalWidth475.bmp create mode 100644 4/image/digitalWidth5.bmp create mode 100644 4/image/digitalWidth575.bmp create mode 100644 4/image/digitalWidth6.bmp create mode 100644 4/image/digitalWidth675.bmp create mode 100644 4/image/digitalWidth7.bmp create mode 100644 4/image/digitalWidth775.bmp create mode 100644 4/image/digitalWidth8.bmp create mode 100644 4/image/digitalWidth875.bmp create mode 100644 40/image/digitalWidth1.bmp create mode 100644 40/image/digitalWidth175.bmp create mode 100644 40/image/digitalWidth2.bmp create mode 100644 40/image/digitalWidth275.bmp create mode 100644 40/image/digitalWidth3.bmp create mode 100644 40/image/digitalWidth375.bmp create mode 100644 40/image/digitalWidth4.bmp create mode 100644 40/image/digitalWidth475.bmp create mode 100644 40/image/digitalWidth5.bmp create mode 100644 40/image/digitalWidth575.bmp create mode 100644 40/image/digitalWidth6.bmp create mode 100644 40/image/digitalWidth675.bmp create mode 100644 40/image/digitalWidth7.bmp create mode 100644 40/image/digitalWidth775.bmp create mode 100644 40/image/digitalWidth8.bmp create mode 100644 40/image/digitalWidth875.bmp create mode 100644 41/image/digitalWidth1.bmp create mode 100644 41/image/digitalWidth175.bmp create mode 100644 41/image/digitalWidth2.bmp create mode 100644 41/image/digitalWidth275.bmp create mode 100644 41/image/digitalWidth3.bmp create mode 100644 41/image/digitalWidth375.bmp create mode 100644 41/image/digitalWidth4.bmp create mode 100644 41/image/digitalWidth475.bmp create mode 100644 41/image/digitalWidth5.bmp create mode 100644 41/image/digitalWidth575.bmp create mode 100644 41/image/digitalWidth6.bmp create mode 100644 41/image/digitalWidth675.bmp create mode 100644 41/image/digitalWidth7.bmp create mode 100644 41/image/digitalWidth775.bmp create mode 100644 41/image/digitalWidth8.bmp create mode 100644 41/image/digitalWidth875.bmp create mode 100644 42/image/digitalWidth1.bmp create mode 100644 42/image/digitalWidth175.bmp create mode 100644 42/image/digitalWidth2.bmp create mode 100644 42/image/digitalWidth275.bmp create mode 100644 42/image/digitalWidth3.bmp create mode 100644 42/image/digitalWidth375.bmp create mode 100644 42/image/digitalWidth4.bmp create mode 100644 42/image/digitalWidth475.bmp create mode 100644 42/image/digitalWidth5.bmp create mode 100644 42/image/digitalWidth575.bmp create mode 100644 42/image/digitalWidth6.bmp create mode 100644 42/image/digitalWidth675.bmp create mode 100644 42/image/digitalWidth7.bmp create mode 100644 42/image/digitalWidth775.bmp create mode 100644 42/image/digitalWidth8.bmp create mode 100644 42/image/digitalWidth875.bmp create mode 100644 43/image/digitalWidth1.bmp create mode 100644 43/image/digitalWidth175.bmp create mode 100644 43/image/digitalWidth2.bmp create mode 100644 43/image/digitalWidth275.bmp create mode 100644 43/image/digitalWidth3.bmp create mode 100644 43/image/digitalWidth375.bmp create mode 100644 43/image/digitalWidth4.bmp create mode 100644 43/image/digitalWidth475.bmp create mode 100644 43/image/digitalWidth5.bmp create mode 100644 43/image/digitalWidth575.bmp create mode 100644 43/image/digitalWidth6.bmp create mode 100644 43/image/digitalWidth675.bmp create mode 100644 43/image/digitalWidth7.bmp create mode 100644 43/image/digitalWidth775.bmp create mode 100644 43/image/digitalWidth8.bmp create mode 100644 43/image/digitalWidth875.bmp create mode 100644 44/image/digitalWidth1.bmp create mode 100644 44/image/digitalWidth175.bmp create mode 100644 44/image/digitalWidth2.bmp create mode 100644 44/image/digitalWidth275.bmp create mode 100644 44/image/digitalWidth3.bmp create mode 100644 44/image/digitalWidth375.bmp create mode 100644 44/image/digitalWidth4.bmp create mode 100644 44/image/digitalWidth475.bmp create mode 100644 44/image/digitalWidth5.bmp create mode 100644 44/image/digitalWidth575.bmp create mode 100644 44/image/digitalWidth6.bmp create mode 100644 44/image/digitalWidth675.bmp create mode 100644 44/image/digitalWidth7.bmp create mode 100644 44/image/digitalWidth775.bmp create mode 100644 44/image/digitalWidth8.bmp create mode 100644 44/image/digitalWidth875.bmp create mode 100644 45/image/digitalWidth1.bmp create mode 100644 45/image/digitalWidth175.bmp create mode 100644 45/image/digitalWidth2.bmp create mode 100644 45/image/digitalWidth275.bmp create mode 100644 45/image/digitalWidth3.bmp create mode 100644 45/image/digitalWidth375.bmp create mode 100644 45/image/digitalWidth4.bmp create mode 100644 45/image/digitalWidth475.bmp create mode 100644 45/image/digitalWidth5.bmp create mode 100644 45/image/digitalWidth575.bmp create mode 100644 45/image/digitalWidth6.bmp create mode 100644 45/image/digitalWidth675.bmp create mode 100644 45/image/digitalWidth7.bmp create mode 100644 45/image/digitalWidth775.bmp create mode 100644 45/image/digitalWidth8.bmp create mode 100644 45/image/digitalWidth875.bmp create mode 100644 46/image/digitalWidth1.bmp create mode 100644 46/image/digitalWidth175.bmp create mode 100644 46/image/digitalWidth2.bmp create mode 100644 46/image/digitalWidth275.bmp create mode 100644 46/image/digitalWidth3.bmp create mode 100644 46/image/digitalWidth375.bmp create mode 100644 46/image/digitalWidth4.bmp create mode 100644 46/image/digitalWidth475.bmp create mode 100644 46/image/digitalWidth5.bmp create mode 100644 46/image/digitalWidth575.bmp create mode 100644 46/image/digitalWidth6.bmp create mode 100644 46/image/digitalWidth675.bmp create mode 100644 46/image/digitalWidth7.bmp create mode 100644 46/image/digitalWidth775.bmp create mode 100644 46/image/digitalWidth8.bmp create mode 100644 46/image/digitalWidth875.bmp create mode 100644 47/image (复件)/digitalWidth1.bmp create mode 100644 47/image (复件)/digitalWidth175.bmp create mode 100644 47/image (复件)/digitalWidth2.bmp create mode 100644 47/image (复件)/digitalWidth275.bmp create mode 100644 47/image (复件)/digitalWidth3.bmp create mode 100644 47/image (复件)/digitalWidth375.bmp create mode 100644 47/image (复件)/digitalWidth4.bmp create mode 100644 47/image (复件)/digitalWidth475.bmp create mode 100644 47/image (复件)/digitalWidth5.bmp create mode 100644 47/image (复件)/digitalWidth575.bmp create mode 100644 47/image (复件)/digitalWidth6.bmp create mode 100644 47/image (复件)/digitalWidth675.bmp create mode 100644 47/image (复件)/digitalWidth7.bmp create mode 100644 47/image (复件)/digitalWidth775.bmp create mode 100644 47/image (复件)/digitalWidth8.bmp create mode 100644 47/image (复件)/digitalWidth875.bmp create mode 100644 47/image.tar.gz create mode 100644 47/image/digitalWidth1.bmp create mode 100644 47/image/digitalWidth175.bmp create mode 100644 47/image/digitalWidth2.bmp create mode 100644 47/image/digitalWidth275.bmp create mode 100644 47/image/digitalWidth3.bmp create mode 100644 47/image/digitalWidth375.bmp create mode 100644 47/image/digitalWidth4.bmp create mode 100644 47/image/digitalWidth475.bmp create mode 100644 47/image/digitalWidth5.bmp create mode 100644 47/image/digitalWidth575.bmp create mode 100644 47/image/digitalWidth6.bmp create mode 100644 47/image/digitalWidth675.bmp create mode 100644 47/image/digitalWidth7.bmp create mode 100644 47/image/digitalWidth775.bmp create mode 100644 47/image/digitalWidth8.bmp create mode 100644 47/image/digitalWidth875.bmp create mode 100644 48/image/digitalWidth1.bmp create mode 100644 48/image/digitalWidth175.bmp create mode 100644 48/image/digitalWidth2.bmp create mode 100644 48/image/digitalWidth275.bmp create mode 100644 48/image/digitalWidth3.bmp create mode 100644 48/image/digitalWidth375.bmp create mode 100644 48/image/digitalWidth4.bmp create mode 100644 48/image/digitalWidth475.bmp create mode 100644 48/image/digitalWidth5.bmp create mode 100644 48/image/digitalWidth575.bmp create mode 100644 48/image/digitalWidth6.bmp create mode 100644 48/image/digitalWidth675.bmp create mode 100644 48/image/digitalWidth7.bmp create mode 100644 48/image/digitalWidth775.bmp create mode 100644 48/image/digitalWidth8.bmp create mode 100644 48/image/digitalWidth875.bmp create mode 100644 5/image/digitalWidth1.bmp create mode 100644 5/image/digitalWidth175.bmp create mode 100644 5/image/digitalWidth2.bmp create mode 100644 5/image/digitalWidth275.bmp create mode 100644 5/image/digitalWidth3.bmp create mode 100644 5/image/digitalWidth375.bmp create mode 100644 5/image/digitalWidth4.bmp create mode 100644 5/image/digitalWidth475.bmp create mode 100644 5/image/digitalWidth5.bmp create mode 100644 5/image/digitalWidth575.bmp create mode 100644 5/image/digitalWidth6.bmp create mode 100644 5/image/digitalWidth675.bmp create mode 100644 5/image/digitalWidth7.bmp create mode 100644 5/image/digitalWidth775.bmp create mode 100644 5/image/digitalWidth8.bmp create mode 100644 5/image/digitalWidth875.bmp create mode 100644 50/image/digitalWidth1.bmp create mode 100644 50/image/digitalWidth175.bmp create mode 100644 50/image/digitalWidth2.bmp create mode 100644 50/image/digitalWidth275.bmp create mode 100644 50/image/digitalWidth3.bmp create mode 100644 50/image/digitalWidth375.bmp create mode 100644 50/image/digitalWidth4.bmp create mode 100644 50/image/digitalWidth475.bmp create mode 100644 50/image/digitalWidth5.bmp create mode 100644 50/image/digitalWidth575.bmp create mode 100644 50/image/digitalWidth6.bmp create mode 100644 50/image/digitalWidth675.bmp create mode 100644 50/image/digitalWidth7.bmp create mode 100644 50/image/digitalWidth775.bmp create mode 100644 50/image/digitalWidth8.bmp create mode 100644 50/image/digitalWidth875.bmp create mode 100644 51/image/digitalWidth1.bmp create mode 100644 51/image/digitalWidth175.bmp create mode 100644 51/image/digitalWidth2.bmp create mode 100644 51/image/digitalWidth275.bmp create mode 100644 51/image/digitalWidth3.bmp create mode 100644 51/image/digitalWidth375.bmp create mode 100644 51/image/digitalWidth4.bmp create mode 100644 51/image/digitalWidth475.bmp create mode 100644 51/image/digitalWidth5.bmp create mode 100644 51/image/digitalWidth575.bmp create mode 100644 51/image/digitalWidth6.bmp create mode 100644 51/image/digitalWidth675.bmp create mode 100644 51/image/digitalWidth7.bmp create mode 100644 51/image/digitalWidth775.bmp create mode 100644 51/image/digitalWidth8.bmp create mode 100644 51/image/digitalWidth875.bmp create mode 100644 52/image/digitalWidth1.bmp create mode 100644 52/image/digitalWidth175.bmp create mode 100644 52/image/digitalWidth2.bmp create mode 100644 52/image/digitalWidth275.bmp create mode 100644 52/image/digitalWidth3.bmp create mode 100644 52/image/digitalWidth375.bmp create mode 100644 52/image/digitalWidth4.bmp create mode 100644 52/image/digitalWidth475.bmp create mode 100644 52/image/digitalWidth5.bmp create mode 100644 52/image/digitalWidth575.bmp create mode 100644 52/image/digitalWidth6.bmp create mode 100644 52/image/digitalWidth675.bmp create mode 100644 52/image/digitalWidth7.bmp create mode 100644 52/image/digitalWidth775.bmp create mode 100644 52/image/digitalWidth8.bmp create mode 100644 52/image/digitalWidth875.bmp create mode 100644 53/image/digitalWidth1.bmp create mode 100644 53/image/digitalWidth175.bmp create mode 100644 53/image/digitalWidth2.bmp create mode 100644 53/image/digitalWidth275.bmp create mode 100644 53/image/digitalWidth3.bmp create mode 100644 53/image/digitalWidth375.bmp create mode 100644 53/image/digitalWidth4.bmp create mode 100644 53/image/digitalWidth475.bmp create mode 100644 53/image/digitalWidth5.bmp create mode 100644 53/image/digitalWidth575.bmp create mode 100644 53/image/digitalWidth6.bmp create mode 100644 53/image/digitalWidth675.bmp create mode 100644 53/image/digitalWidth7.bmp create mode 100644 53/image/digitalWidth775.bmp create mode 100644 53/image/digitalWidth8.bmp create mode 100644 53/image/digitalWidth875.bmp create mode 100644 54/image/digitalWidth1.bmp create mode 100644 54/image/digitalWidth175.bmp create mode 100644 54/image/digitalWidth2.bmp create mode 100644 54/image/digitalWidth275.bmp create mode 100644 54/image/digitalWidth3.bmp create mode 100644 54/image/digitalWidth375.bmp create mode 100644 54/image/digitalWidth4.bmp create mode 100644 54/image/digitalWidth475.bmp create mode 100644 54/image/digitalWidth5.bmp create mode 100644 54/image/digitalWidth575.bmp create mode 100644 54/image/digitalWidth6.bmp create mode 100644 54/image/digitalWidth675.bmp create mode 100644 54/image/digitalWidth7.bmp create mode 100644 54/image/digitalWidth775.bmp create mode 100644 54/image/digitalWidth8.bmp create mode 100644 54/image/digitalWidth875.bmp create mode 100644 55/image/digitalWidth1.bmp create mode 100644 55/image/digitalWidth175.bmp create mode 100644 55/image/digitalWidth2.bmp create mode 100644 55/image/digitalWidth275.bmp create mode 100644 55/image/digitalWidth3.bmp create mode 100644 55/image/digitalWidth375.bmp create mode 100644 55/image/digitalWidth4.bmp create mode 100644 55/image/digitalWidth475.bmp create mode 100644 55/image/digitalWidth5.bmp create mode 100644 55/image/digitalWidth575.bmp create mode 100644 55/image/digitalWidth6.bmp create mode 100644 55/image/digitalWidth675.bmp create mode 100644 55/image/digitalWidth7.bmp create mode 100644 55/image/digitalWidth775.bmp create mode 100644 55/image/digitalWidth8.bmp create mode 100644 55/image/digitalWidth875.bmp create mode 100644 56/image/digitalWidth1.bmp create mode 100644 56/image/digitalWidth175.bmp create mode 100644 56/image/digitalWidth2.bmp create mode 100644 56/image/digitalWidth275.bmp create mode 100644 56/image/digitalWidth3.bmp create mode 100644 56/image/digitalWidth375.bmp create mode 100644 56/image/digitalWidth4.bmp create mode 100644 56/image/digitalWidth475.bmp create mode 100644 56/image/digitalWidth5.bmp create mode 100644 56/image/digitalWidth575.bmp create mode 100644 56/image/digitalWidth6.bmp create mode 100644 56/image/digitalWidth675.bmp create mode 100644 56/image/digitalWidth7.bmp create mode 100644 56/image/digitalWidth775.bmp create mode 100644 56/image/digitalWidth8.bmp create mode 100644 56/image/digitalWidth875.bmp create mode 100644 57/image (复件)/digitalWidth1.bmp create mode 100644 57/image (复件)/digitalWidth175.bmp create mode 100644 57/image (复件)/digitalWidth2.bmp create mode 100644 57/image (复件)/digitalWidth275.bmp create mode 100644 57/image (复件)/digitalWidth3.bmp create mode 100644 57/image (复件)/digitalWidth375.bmp create mode 100644 57/image (复件)/digitalWidth4.bmp create mode 100644 57/image (复件)/digitalWidth475.bmp create mode 100644 57/image (复件)/digitalWidth5.bmp create mode 100644 57/image (复件)/digitalWidth575.bmp create mode 100644 57/image (复件)/digitalWidth6.bmp create mode 100644 57/image (复件)/digitalWidth675.bmp create mode 100644 57/image (复件)/digitalWidth7.bmp create mode 100644 57/image (复件)/digitalWidth775.bmp create mode 100644 57/image (复件)/digitalWidth8.bmp create mode 100644 57/image (复件)/digitalWidth875.bmp create mode 100644 57/image.tar.gz create mode 100644 57/image/digitalWidth1.bmp create mode 100644 57/image/digitalWidth175.bmp create mode 100644 57/image/digitalWidth2.bmp create mode 100644 57/image/digitalWidth275.bmp create mode 100644 57/image/digitalWidth3.bmp create mode 100644 57/image/digitalWidth375.bmp create mode 100644 57/image/digitalWidth4.bmp create mode 100644 57/image/digitalWidth475.bmp create mode 100644 57/image/digitalWidth5.bmp create mode 100644 57/image/digitalWidth575.bmp create mode 100644 57/image/digitalWidth6.bmp create mode 100644 57/image/digitalWidth675.bmp create mode 100644 57/image/digitalWidth7.bmp create mode 100644 57/image/digitalWidth775.bmp create mode 100644 57/image/digitalWidth8.bmp create mode 100644 57/image/digitalWidth875.bmp create mode 100644 58/image/digitalWidth1.bmp create mode 100644 58/image/digitalWidth175.bmp create mode 100644 58/image/digitalWidth2.bmp create mode 100644 58/image/digitalWidth275.bmp create mode 100644 58/image/digitalWidth3.bmp create mode 100644 58/image/digitalWidth375.bmp create mode 100644 58/image/digitalWidth4.bmp create mode 100644 58/image/digitalWidth475.bmp create mode 100644 58/image/digitalWidth5.bmp create mode 100644 58/image/digitalWidth575.bmp create mode 100644 58/image/digitalWidth6.bmp create mode 100644 58/image/digitalWidth675.bmp create mode 100644 58/image/digitalWidth7.bmp create mode 100644 58/image/digitalWidth775.bmp create mode 100644 58/image/digitalWidth8.bmp create mode 100644 58/image/digitalWidth875.bmp create mode 100644 6/image/digitalWidth1.bmp create mode 100644 6/image/digitalWidth175.bmp create mode 100644 6/image/digitalWidth2.bmp create mode 100644 6/image/digitalWidth275.bmp create mode 100644 6/image/digitalWidth3.bmp create mode 100644 6/image/digitalWidth375.bmp create mode 100644 6/image/digitalWidth4.bmp create mode 100644 6/image/digitalWidth475.bmp create mode 100644 6/image/digitalWidth5.bmp create mode 100644 6/image/digitalWidth575.bmp create mode 100644 6/image/digitalWidth6.bmp create mode 100644 6/image/digitalWidth675.bmp create mode 100644 6/image/digitalWidth7.bmp create mode 100644 6/image/digitalWidth775.bmp create mode 100644 6/image/digitalWidth8.bmp create mode 100644 6/image/digitalWidth875.bmp create mode 100644 66/image/digitalWidth1.bmp create mode 100644 66/image/digitalWidth175.bmp create mode 100644 66/image/digitalWidth2.bmp create mode 100644 66/image/digitalWidth275.bmp create mode 100644 66/image/digitalWidth3.bmp create mode 100644 66/image/digitalWidth375.bmp create mode 100644 66/image/digitalWidth4.bmp create mode 100644 66/image/digitalWidth475.bmp create mode 100644 66/image/digitalWidth5.bmp create mode 100644 66/image/digitalWidth575.bmp create mode 100644 66/image/digitalWidth6.bmp create mode 100644 66/image/digitalWidth675.bmp create mode 100644 66/image/digitalWidth7.bmp create mode 100644 66/image/digitalWidth775.bmp create mode 100644 66/image/digitalWidth8.bmp create mode 100644 66/image/digitalWidth875.bmp create mode 100644 7/image (复件)/digitalWidth1.bmp create mode 100644 7/image (复件)/digitalWidth175.bmp create mode 100644 7/image (复件)/digitalWidth2.bmp create mode 100644 7/image (复件)/digitalWidth275.bmp create mode 100644 7/image (复件)/digitalWidth3.bmp create mode 100644 7/image (复件)/digitalWidth375.bmp create mode 100644 7/image (复件)/digitalWidth4.bmp create mode 100644 7/image (复件)/digitalWidth475.bmp create mode 100644 7/image (复件)/digitalWidth5.bmp create mode 100644 7/image (复件)/digitalWidth575.bmp create mode 100644 7/image (复件)/digitalWidth6.bmp create mode 100644 7/image (复件)/digitalWidth675.bmp create mode 100644 7/image (复件)/digitalWidth7.bmp create mode 100644 7/image (复件)/digitalWidth775.bmp create mode 100644 7/image (复件)/digitalWidth8.bmp create mode 100644 7/image (复件)/digitalWidth875.bmp create mode 100644 7/image.tar.gz create mode 100644 7/image/digitalWidth1.bmp create mode 100644 7/image/digitalWidth175.bmp create mode 100644 7/image/digitalWidth2.bmp create mode 100644 7/image/digitalWidth275.bmp create mode 100644 7/image/digitalWidth3.bmp create mode 100644 7/image/digitalWidth375.bmp create mode 100644 7/image/digitalWidth4.bmp create mode 100644 7/image/digitalWidth475.bmp create mode 100644 7/image/digitalWidth5.bmp create mode 100644 7/image/digitalWidth575.bmp create mode 100644 7/image/digitalWidth6.bmp create mode 100644 7/image/digitalWidth675.bmp create mode 100644 7/image/digitalWidth7.bmp create mode 100644 7/image/digitalWidth775.bmp create mode 100644 7/image/digitalWidth8.bmp create mode 100644 7/image/digitalWidth875.bmp create mode 100644 8/image/digitalWidth1.bmp create mode 100644 8/image/digitalWidth175.bmp create mode 100644 8/image/digitalWidth2.bmp create mode 100644 8/image/digitalWidth275.bmp create mode 100644 8/image/digitalWidth3.bmp create mode 100644 8/image/digitalWidth375.bmp create mode 100644 8/image/digitalWidth4.bmp create mode 100644 8/image/digitalWidth475.bmp create mode 100644 8/image/digitalWidth5.bmp create mode 100644 8/image/digitalWidth575.bmp create mode 100644 8/image/digitalWidth6.bmp create mode 100644 8/image/digitalWidth675.bmp create mode 100644 8/image/digitalWidth7.bmp create mode 100644 8/image/digitalWidth775.bmp create mode 100644 8/image/digitalWidth8.bmp create mode 100644 8/image/digitalWidth875.bmp create mode 100644 80/EXPIRYXX.xcf create mode 100644 80/digitalWidth4.bmp create mode 100644 80/expiryDate8.bmp create mode 100644 80/image/digitalWidth1.bmp create mode 100644 80/image/digitalWidth175.bmp create mode 100644 80/image/digitalWidth8 (____).bmp create mode 100644 80/image/digitalWidth8.bmp create mode 100644 80/image/digitalWidth8.xcf create mode 100644 80/image/digitalWidth88.bmp create mode 100644 80/image/expiryDate8.bmp create mode 100644 80/image/expiryDate875.bmp create mode 100644 80/image/expiryDate875_backup.bmp create mode 100644 80/image/expiryDate8_backup.bmp create mode 100644 81/EXPIRYXX.xcf create mode 100644 81/digitalWidth1.bmp create mode 100644 81/digitalWidth4.bmp create mode 100644 81/expiryDate8.bmp create mode 100644 81/image/curDate1.bmp create mode 100644 81/image/curDate8.bmp create mode 100644 81/image/curDate875.bmp create mode 100644 81/image/curDate8_backup.bmp create mode 100644 81/image/digitalWidth1.bmp create mode 100644 81/image/digitalWidth8 (____).bmp create mode 100644 81/image/digitalWidth8.bmp create mode 100644 81/image/digitalWidth8.xcf create mode 100644 81/image/digitalWidth88.bmp create mode 100644 81/image/expiryDate8.bmp create mode 100644 81/image/expiryDate875.bmp create mode 100644 82/digitalWidth1.bmp create mode 100644 82/digitalWidth4.bmp create mode 100644 82/expiryDate8.bmp create mode 100644 82/image/class1.bmp create mode 100644 82/image/class91.bmp create mode 100644 82/image/curDate8.bmp create mode 100644 82/image/curDate875.bmp create mode 100644 82/image/curDate8_backup.bmp create mode 100644 82/image/digitalWidth1.bmp create mode 100644 82/image/digitalWidth8 (____).bmp create mode 100644 82/image/digitalWidth8.bmp create mode 100644 82/image/digitalWidth8.xcf create mode 100644 82/image/digitalWidth88.bmp create mode 100644 82/image/expiryDate8.bmp create mode 100644 82/image/expiryDate875.bmp create mode 100644 9/image/DMTV10.bmp create mode 100644 9/image/DMTV12.bmp create mode 100644 9/image/DMTV14.bmp create mode 100644 9/image/DMTV16.bmp create mode 100644 9/image/DMTV18.bmp create mode 100644 9/image/DMTV20.bmp create mode 100644 9/image/DMTV22.bmp create mode 100644 9/image/DMTV24.bmp create mode 100644 9/image/DMTV26.bmp create mode 100644 9/image/DMTV32.bmp create mode 100644 90/EXPIRYXX.xcf create mode 100644 90/digitalWidth4.bmp create mode 100644 90/expiryDate8.bmp create mode 100644 90/image/digitalWidth1.bmp create mode 100644 90/image/digitalWidth175.bmp create mode 100644 90/image/digitalWidth8 (____).bmp create mode 100644 90/image/digitalWidth8.bmp create mode 100644 90/image/digitalWidth8.xcf create mode 100644 90/image/digitalWidth88.bmp create mode 100644 90/image/expiryDate8.bmp create mode 100644 90/image/expiryDate875.bmp create mode 100644 90/image/expiryDate875_backup.bmp create mode 100644 90/image/expiryDate8_backup.bmp create mode 100644 91/EXPIRYXX.xcf create mode 100644 91/digitalWidth1.bmp create mode 100644 91/digitalWidth4.bmp create mode 100644 91/expiryDate8.bmp create mode 100644 91/image/curDate1.bmp create mode 100644 91/image/curDate8.bmp create mode 100644 91/image/curDate875.bmp create mode 100644 91/image/curDate8_backup.bmp create mode 100644 91/image/digitalWidth1.bmp create mode 100644 91/image/digitalWidth8 (____).bmp create mode 100644 91/image/digitalWidth8.bmp create mode 100644 91/image/digitalWidth8.xcf create mode 100644 91/image/digitalWidth88.bmp create mode 100644 91/image/expiryDate8.bmp create mode 100644 91/image/expiryDate875.bmp create mode 100644 Aes/TAesClass.cpp create mode 100644 Aes/TAesClass.h create mode 100644 BarCode/barcode.h create mode 100644 BarCode/cmdline.c create mode 100644 BarCode/cmdline.h create mode 100644 BarCode/codabar.c create mode 100644 BarCode/code128.c create mode 100644 BarCode/code39.c create mode 100644 BarCode/code93.c create mode 100644 BarCode/ean.c create mode 100644 BarCode/i25.c create mode 100644 BarCode/library.c create mode 100644 BarCode/msi.c create mode 100644 BarCode/pcl.c create mode 100644 BarCode/plessey.c create mode 100644 BarCode/ps.c create mode 100644 BarCode/rr/QBarCode.cpp create mode 100644 BarCode/rr/QBarCode.h create mode 100644 BarCode/rr/QBarCode.ui create mode 100644 Binarization/Binarization.cpp create mode 100644 Binarization/Binarization.h create mode 100644 CN/mainwindow.ui create mode 100644 ClickLabel.cpp create mode 100644 ClickLabel.h create mode 100644 DacDisplayAndEdit.cpp create mode 100644 DacDisplayAndEdit.h create mode 100644 DevOp.cpp create mode 100644 DevOp.h create mode 100644 DialogAuthorization.cpp create mode 100644 DialogAuthorization.h create mode 100644 DialogAuthorizationPrint.cpp create mode 100644 DialogAuthorizationPrint.h create mode 100644 DialogFileOperation.cpp create mode 100644 DialogFileOperation.h create mode 100644 DialogFontSize.cpp create mode 100644 DialogFontSize.h create mode 100644 DialogInputTxt.cpp create mode 100644 DialogInputTxt.h create mode 100644 DialogInputTxt.ui create mode 100644 DialogInsertVari.cpp create mode 100644 DialogInsertVari.h create mode 100644 DialogLineSpace.cpp create mode 100644 DialogLineSpace.h create mode 100644 DialogSaveFile.cpp create mode 100644 DialogSaveFile.h create mode 100644 DigitalInput.cpp create mode 100644 DigitalInput.h create mode 100644 EN/mainwindow.ui create mode 100644 Expiry.bmp create mode 100644 HtmlDelegate.cpp create mode 100644 HtmlDelegate.h create mode 100644 InkJetPrinter.cpp create mode 100644 InkJetPrinter.h create mode 100644 InputMethod.cpp create mode 100644 InputMethod.h create mode 100644 InputMethod.ui create mode 100644 InsertSpaceNumDialog.cpp create mode 100644 InsertSpaceNumDialog.h create mode 100644 K(bypm0718wx) create mode 100644 LicenseManger/LicenseManger.cpp create mode 100644 LicenseManger/LicenseManger.h create mode 100644 Log/dualfilelogger.cpp create mode 100644 Log/dualfilelogger.h create mode 100644 Log/filelogger.cpp create mode 100644 Log/filelogger.h create mode 100644 Log/logger.cpp create mode 100644 Log/logger.h create mode 100644 Log/logglobal.h create mode 100644 Log/logmessage.cpp create mode 100644 Log/logmessage.h create mode 100644 LogInfo.cpp create mode 100644 LogInfo.h create mode 100644 Matrix/common.cpp create mode 100644 Matrix/common.h create mode 100644 Matrix/dm200.cpp create mode 100644 Matrix/dm200.h create mode 100644 Matrix/drawmatrix.cpp create mode 100644 Matrix/reedsol.cpp create mode 100644 Matrix/reedsol.h create mode 100644 Matrix/zint.h create mode 100644 MemDisplayAndEdit.cpp create mode 100644 MemDisplayAndEdit.h create mode 100644 MyFileDialog.cpp create mode 100644 MyFileDialog.h create mode 100644 MyInputMethod.cpp create mode 100644 MyInputMethod.h create mode 100644 MyTextEdit.cpp create mode 100644 MyTextEdit.h create mode 100644 Network/IPEdit/IPEdit.cpp create mode 100644 Network/IPEdit/IPEdit.h create mode 100644 Network/IPEdit/README.md create mode 100644 Network/NetworkManager.cpp create mode 100644 Network/NetworkManager.h create mode 100644 Network/NetworkManager.ui create mode 100644 Network/wpa_gui-qt4_/.gitignore create mode 100644 Network/wpa_gui-qt4_/addinterface.cpp create mode 100644 Network/wpa_gui-qt4_/addinterface.h create mode 100644 Network/wpa_gui-qt4_/eventhistory.cpp create mode 100644 Network/wpa_gui-qt4_/eventhistory.h create mode 100644 Network/wpa_gui-qt4_/eventhistory.ui create mode 100644 Network/wpa_gui-qt4_/icons.qrc create mode 100644 Network/wpa_gui-qt4_/icons/README create mode 100644 Network/wpa_gui-qt4_/icons/ap.svg create mode 100644 Network/wpa_gui-qt4_/icons/group.svg create mode 100644 Network/wpa_gui-qt4_/icons/invitation.svg create mode 100644 Network/wpa_gui-qt4_/icons/laptop.svg create mode 100644 Network/wpa_gui-qt4_/icons/wpa_gui.svg create mode 100644 Network/wpa_gui-qt4_/icons_png.qrc create mode 100644 Network/wpa_gui-qt4_/lang/.gitignore create mode 100644 Network/wpa_gui-qt4_/lang/wpa_gui_de.ts create mode 100644 Network/wpa_gui-qt4_/main.cpp create mode 100644 Network/wpa_gui-qt4_/networkconfig.cpp create mode 100644 Network/wpa_gui-qt4_/networkconfig.h create mode 100644 Network/wpa_gui-qt4_/networkconfig.ui create mode 100644 Network/wpa_gui-qt4_/peers.cpp create mode 100644 Network/wpa_gui-qt4_/peers.h create mode 100644 Network/wpa_gui-qt4_/peers.ui create mode 100644 Network/wpa_gui-qt4_/scanresults.cpp create mode 100644 Network/wpa_gui-qt4_/scanresults.h create mode 100644 Network/wpa_gui-qt4_/scanresults.ui create mode 100644 Network/wpa_gui-qt4_/stringquery.cpp create mode 100644 Network/wpa_gui-qt4_/stringquery.h create mode 100644 Network/wpa_gui-qt4_/userdatarequest.cpp create mode 100644 Network/wpa_gui-qt4_/userdatarequest.h create mode 100644 Network/wpa_gui-qt4_/userdatarequest.ui create mode 100644 Network/wpa_gui-qt4_/wpa_gui.desktop create mode 100644 Network/wpa_gui-qt4_/wpa_gui.pro create mode 100644 Network/wpa_gui-qt4_/wpagui.cpp create mode 100644 Network/wpa_gui-qt4_/wpagui.h create mode 100644 Network/wpa_gui-qt4_/wpagui.ui create mode 100644 Network/wpa_gui-qt4_/wpamsg.h create mode 100644 Network/wpamsg.h create mode 100644 OtherInfo.cpp create mode 100644 OtherInfo.h create mode 100644 ParaSettingUI.cpp create mode 100644 ParaSettingUI.h create mode 100644 PhaseGraphic.cpp create mode 100644 PhaseGraphic.h create mode 100644 PicEdit.cpp create mode 100644 PicEdit.h create mode 100644 PicWidget.cpp create mode 100644 PicWidget.h create mode 100644 PrintSetting.cpp create mode 100644 PrintSetting.h create mode 100644 PrintTextDisplay.cpp create mode 100644 PrintTextDisplay.h create mode 100644 Public.cpp create mode 100644 Public.h create mode 100644 PulseNumFix.cpp create mode 100644 PulseNumFix.h create mode 100644 QBarCode.cpp create mode 100644 QBarCode.h create mode 100644 QBarCode.ui create mode 100644 QbarCodemage.bmp create mode 100644 QbarCodemage1.bmp create mode 100644 QbarCodemage2.bmp create mode 100644 QtQREnCode/121.pro create mode 100644 QtQREnCode/bistream.h create mode 100644 QtQREnCode/bitstream.cpp create mode 100644 QtQREnCode/form.ui create mode 100644 QtQREnCode/main.cpp create mode 100644 QtQREnCode/mainwindow.cpp create mode 100644 QtQREnCode/mainwindow.h create mode 100644 QtQREnCode/mainwindow.ui create mode 100644 QtQREnCode/mask.cpp create mode 100644 QtQREnCode/mask.h create mode 100644 QtQREnCode/qrenc.cpp create mode 100644 QtQREnCode/qrencode.cpp create mode 100644 QtQREnCode/qrencode.h create mode 100644 QtQREnCode/qrencode_inner.cpp create mode 100644 QtQREnCode/qrencode_inner.h create mode 100644 QtQREnCode/qrinput.cpp create mode 100644 QtQREnCode/qrinput.h create mode 100644 QtQREnCode/qrspec.cpp create mode 100644 QtQREnCode/qrspec.h create mode 100644 QtQREnCode/rscode.cpp create mode 100644 QtQREnCode/rscode.h create mode 100644 QtQREnCode/split.cpp create mode 100644 QtQREnCode/split.h create mode 100644 QtUI.pro create mode 100644 SecondThread/SecondThread.cpp create mode 100644 SecondThread/SecondThread.h create mode 100644 SysPara.cpp create mode 100644 SysPara.h create mode 100644 SystemManage.cpp create mode 100644 SystemManage.h create mode 100644 SystemSetting.cpp create mode 100644 SystemSetting.h create mode 100644 TextEditOption.cpp create mode 100644 TextEditOption.h create mode 100644 TextEditOption_backup.cpp create mode 100644 Tftp/filetranseceiver.cpp create mode 100644 Tftp/filetranseceiver.h create mode 100644 TimeSettingDialog.cpp create mode 100644 TimeSettingDialog.h create mode 100644 TouchScreenConf/calibrate_Capacitance create mode 100644 TouchScreenConf/calibrate_Resistance create mode 100644 TouchScreenConf/qtui_Capacitance create mode 100644 TouchScreenConf/qtui_Resistance create mode 100644 TriggerCtrl.cpp create mode 100644 TriggerCtrl.h create mode 100644 VerBVersion.h create mode 100644 VerBVersion.h.r24 create mode 100644 WINPY_utf8.txt create mode 100644 WINPY_utf8.txt.backup create mode 100644 YN_utf8.txt create mode 100644 ZkEdit.cpp create mode 100644 ZkEdit.h create mode 100644 arm_build create mode 100644 calibrate create mode 100644 chinese.qm create mode 100644 chinese.ts create mode 100644 conf/VoltDataStd21.bin create mode 100644 conf/VoltDataStd25.bin create mode 100644 conf/VoltDataStd32.bin create mode 100644 conf/VoltDataStd5Row5Dot.bin create mode 100644 conf/VoltParaHi.bin create mode 100644 conf/VoltePara_No73.bin create mode 100644 conf/config.ini create mode 100644 dacdisplayandedit.ui create mode 100644 dialogAuthorizationPrint.ui create mode 100644 dialogauthorization.ui create mode 100644 dialogcycleprint.cpp create mode 100644 dialogcycleprint.h create mode 100644 dialogcycleprint.ui create mode 100644 dialogfileoperation.ui create mode 100644 dialogfontsize.ui create mode 100644 dialoginputpasswd.ui create mode 100644 dialoginsertvari.ui create mode 100644 dialoglinespace.ui create mode 100644 dialogmodifypasswd.cpp create mode 100644 dialogmodifypasswd.h create mode 100644 dialogmodifypasswd.ui create mode 100644 dialogpointdistanceadjust.ui create mode 100644 dialogsavefile.ui create mode 100644 dialogshowcounter.cpp create mode 100644 dialogshowcounter.h create mode 100644 dialogshowcounter.ui create mode 100644 digitalinput.ui create mode 100644 dlgQrCode.cpp create mode 100644 dlgQrCode.h create mode 100644 dlgQrCode.ui create mode 100644 dlgdrawinit.cpp create mode 100644 dlgdrawinit.h create mode 100644 dlgdrawinit.ui create mode 100644 dlginputaddr.cpp create mode 100644 dlginputaddr.h create mode 100644 dlginputaddr.ui create mode 100644 dlgmutilanguage.cpp create mode 100644 dlgmutilanguage.h create mode 100644 dlgmutilanguage.ui create mode 100644 dlgmywarring.cpp create mode 100644 dlgmywarring.h create mode 100644 dlgmywarring.ui create mode 100644 dlgselectinputlanguage.cpp create mode 100644 dlgselectinputlanguage.h create mode 100644 dlgselectinputlanguage.ui create mode 100644 dlgshowmsg.cpp create mode 100644 dlgshowmsg.h create mode 100644 dlgshowmsg.ui create mode 100644 dlgvarlength.cpp create mode 100644 dlgvarlength.h create mode 100644 dlgvarlength.ui create mode 100644 emergency create mode 100644 english-0412-2OK.ts create mode 100644 english-1.ts create mode 100644 english.qm create mode 100644 english.ts create mode 100644 english0417.ts create mode 100644 english0524.ts create mode 100644 english20141023-ok.ts create mode 100644 english20141023.ts create mode 100644 english24-1.ts create mode 100644 farsi.qm create mode 100644 icon/10008.ico create mode 100644 icon/BarCode1.png create mode 100644 icon/Epauseprint.png create mode 100644 icon/Epauseprint1.png create mode 100644 icon/Epauseprint2.png create mode 100644 icon/Estartprint.png create mode 100644 icon/Estartprint1.png create mode 100644 icon/Estartprint2.png create mode 100644 icon/Estartprint3.png create mode 100644 icon/EstopPrint2.png create mode 100644 icon/EstopPrint3.png create mode 100644 icon/Hint.bmp create mode 100644 icon/TEXT.PNG create mode 100644 icon/a9.ico create mode 100644 icon/apply.png create mode 100644 icon/arrowdown.png create mode 100644 icon/arrowleft.png create mode 100644 icon/arrowright.png create mode 100644 icon/arrowup.png create mode 100644 icon/bypm.png create mode 100644 icon/cleanup.png create mode 100644 icon/closereclaimtanl.png create mode 100644 icon/controlbyhand.png create mode 100644 icon/counter.png create mode 100644 icon/edit.png create mode 100644 icon/exit.png create mode 100644 icon/export.png create mode 100644 icon/exportpdf.png create mode 100644 icon/factorysetting.png create mode 100644 icon/filedelete.png create mode 100644 icon/filedelete2.png create mode 100644 icon/fileimport.png create mode 100644 icon/filenew.png create mode 100644 icon/fileopen.png create mode 100644 icon/fileoperation.png create mode 100644 icon/filesave.png create mode 100644 icon/filesaveas.png create mode 100644 icon/font.png create mode 100644 icon/ghost.png create mode 100644 icon/import.png create mode 100644 icon/insert.png create mode 100644 icon/keybackspace.png create mode 100644 icon/keydelete.png create mode 100644 icon/keydown.png create mode 100644 icon/keyend.png create mode 100644 icon/keyenter.png create mode 100644 icon/keyhide.png create mode 100644 icon/keyhome.png create mode 100644 icon/keyinput.png create mode 100644 icon/keyleft.png create mode 100644 icon/keyright.png create mode 100644 icon/keyshift.png create mode 100644 icon/keyup.png create mode 100644 icon/lastpage.png create mode 100644 icon/leftright.png create mode 100644 icon/linespace.png create mode 100644 icon/localdisk.png create mode 100644 icon/lockphase.png create mode 100644 icon/nextpage.png create mode 100644 icon/openreclaimtanl.png create mode 100644 icon/pauseprint.png create mode 100644 icon/pauseprint1.png create mode 100644 icon/pauseprint2.png create mode 100644 icon/poweroff.png create mode 100644 icon/preview.png create mode 100644 icon/pulse.png create mode 100644 icon/screenfix.png create mode 100644 icon/searchsuitablefrequency.png create mode 100644 icon/searchsuitablevoltage.png create mode 100644 icon/specialchar.png create mode 100644 icon/startprint.png create mode 100644 icon/startprint1.png create mode 100644 icon/startprint2.png create mode 100644 icon/stopprint.png create mode 100644 icon/stopprint1.png create mode 100644 icon/stopprint2.png create mode 100644 icon/sure.png create mode 100644 icon/textbold.png create mode 100644 icon/time.png create mode 100644 icon/udisk.png create mode 100644 icon/updatefont.png create mode 100644 icon/updatesoftware.png create mode 100644 icon/updown.png create mode 100644 icon/vari.png create mode 100644 icon/zoomin.png create mode 100644 icon/zoomout.png create mode 100644 image.qrc create mode 100644 image/AH12.png create mode 100644 image/AH13.png create mode 100644 image/ALARMBlue.PNG create mode 100644 image/ALARMGreen.PNG create mode 100644 image/ALARMRed.PNG create mode 100644 image/ALARMYellow.PNG create mode 100644 image/DMTV10X10.bmp create mode 100644 image/DMTV12X12.bmp create mode 100644 image/DMTV14X14.bmp create mode 100644 image/DMTV16X16.bmp create mode 100644 image/DMTV18X18.bmp create mode 100644 image/DMTV20X20.bmp create mode 100644 image/DMTV22X22.bmp create mode 100644 image/DMTV24X24.bmp create mode 100644 image/DMTV26X26.bmp create mode 100644 image/MIV12.png create mode 100644 image/MIV13.png create mode 100644 image/QRV25X21.bmp create mode 100644 image/QRV29X25.bmp create mode 100644 image/QRV33X29.bmp create mode 100644 image/Turkey_logo.png create mode 100644 image/ZFKD.png create mode 100644 image/ZFKD2.png create mode 100644 image/arabic2.png create mode 100644 image/arabicc.png create mode 100644 image/arabicl.png create mode 100644 image/arabicz.png create mode 100644 image/atxt0.png create mode 100644 image/atxt1.png create mode 100644 image/atxt2.png create mode 100644 image/atxt3.png create mode 100644 image/atxt4.png create mode 100644 image/atxt5.png create mode 100644 image/atxt6.png create mode 100644 image/atxt7.png create mode 100644 image/atxt8.png create mode 100644 image/counter.png create mode 100644 image/counterz.png create mode 100644 image/dd.txt create mode 100644 image/exit.png create mode 100644 image/exit1.png create mode 100644 image/g create mode 100644 image/gg create mode 100644 image/h create mode 100644 image/h12 create mode 100644 image/h2 create mode 100644 image/jetOFF.png create mode 100644 image/jetOFF1.png create mode 100644 image/jetON.png create mode 100644 image/jetON1.png create mode 100644 image/keyboard1.png create mode 100644 image/keyboard2.png create mode 100644 image/keyboard3.png create mode 100644 image/prduct.png create mode 100644 image/qtopia create mode 100644 image/qtopia1 create mode 100644 image/reset.png create mode 100644 image/send create mode 100644 image/speed.png create mode 100644 image/suction.png create mode 100644 image/suctionOFF.png create mode 100644 image/suctionOFF1.png create mode 100644 image/suctionON.png create mode 100644 image/suctionON1.png create mode 100644 image/textEdit.html create mode 100644 image/txt0.png create mode 100644 image/txt1.png create mode 100644 image/txt11.png create mode 100644 image/txt12.png create mode 100644 image/txt13.png create mode 100644 image/txt14.png create mode 100644 image/txt2.png create mode 100644 image/txt3.png create mode 100644 image/txt4.png create mode 100644 image/txt5.png create mode 100644 image/txt6.png create mode 100644 image/txt7.png create mode 100644 image/txt8.png create mode 100644 image/txt9.png create mode 100644 image/txta.png create mode 100644 image/txtb.png create mode 100644 image/txtc.png create mode 100644 image/txtd.png create mode 100644 image/u2 create mode 100644 image/udisk.png create mode 100644 image/update create mode 100644 image/xinxi.png create mode 100644 image/显示屏1.jpg create mode 100644 image/显示屏2.jpg create mode 100644 image/显示屏3.jpg create mode 100644 inkjetprinter.ui create mode 100644 insertspacenumdialog.ui create mode 100644 latest/InkJetPrinter.cpp create mode 100644 latest/InkJetPrinter.h create mode 100644 loginfo.ui create mode 100644 logo_form.cpp create mode 100644 logo_form.h create mode 100644 logo_form.ui create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui create mode 100644 memdisplayandedit.ui create mode 100644 modbus/demo.c create mode 100644 modbus/demo.h create mode 100644 modbus/modbus/ascii/mbascii.c create mode 100644 modbus/modbus/ascii/mbascii.h create mode 100644 modbus/modbus/functions/mbfunccoils.c create mode 100644 modbus/modbus/functions/mbfuncdiag.c create mode 100644 modbus/modbus/functions/mbfuncdisc.c create mode 100644 modbus/modbus/functions/mbfuncholding.c create mode 100644 modbus/modbus/functions/mbfuncinput.c create mode 100644 modbus/modbus/functions/mbfuncother.c create mode 100644 modbus/modbus/functions/mbutils.c create mode 100644 modbus/modbus/include/mb.h create mode 100644 modbus/modbus/include/mbconfig.h create mode 100644 modbus/modbus/include/mbframe.h create mode 100644 modbus/modbus/include/mbfunc.h create mode 100644 modbus/modbus/include/mbport.h create mode 100644 modbus/modbus/include/mbproto.h create mode 100644 modbus/modbus/include/mbutils.h create mode 100644 modbus/modbus/mb.c create mode 100644 modbus/modbus/rtu/mbcrc.c create mode 100644 modbus/modbus/rtu/mbcrc.h create mode 100644 modbus/modbus/rtu/mbrtu.c create mode 100644 modbus/modbus/rtu/mbrtu.h create mode 100644 modbus/modbus/tcp/mbtcp.c create mode 100644 modbus/modbus/tcp/mbtcp.h create mode 100644 modbus/modbusserial.cpp create mode 100644 modbus/modbusserial.h create mode 100644 modbus/modbustcp.cpp create mode 100644 modbus/modbustcp.h create mode 100644 modbus/port/port.h create mode 100644 modbus/port/portevent.c create mode 100644 modbus/port/portother.c create mode 100644 modbus/port/portserial.c create mode 100644 modbus/port/porttcp.c create mode 100644 modbus/port/porttimer.c create mode 100644 moveinput.cpp create mode 100644 moveinput.h create mode 100644 moveinput.ui create mode 100644 mycom.cpp create mode 100644 mycom.h create mode 100644 myinclude.h create mode 100644 otherinfo.ui create mode 100644 picedit.ui create mode 100644 posix_qextserialport.cpp create mode 100644 posix_qextserialport.h create mode 100644 printImage.bmp create mode 100644 printImageScene.bmp create mode 100644 printSceneView.png create mode 100644 print_net.cpp create mode 100644 print_net.h create mode 100644 printsetting.ui create mode 100644 pulsenumfix.ui create mode 100644 qextserialbase.cpp create mode 100644 qextserialbase.h create mode 100644 qjson/qjson-backport_global.h create mode 100644 qjson/qjson.cpp create mode 100644 qjson/qjson_p.h create mode 100644 qjson/qjsonarray.cpp create mode 100644 qjson/qjsonarray.h create mode 100644 qjson/qjsondocument.cpp create mode 100644 qjson/qjsondocument.h create mode 100644 qjson/qjsonexport.h create mode 100644 qjson/qjsonobject.cpp create mode 100644 qjson/qjsonobject.h create mode 100644 qjson/qjsonparser.cpp create mode 100644 qjson/qjsonparser_p.h create mode 100644 qjson/qjsonvalue.cpp create mode 100644 qjson/qjsonvalue.h create mode 100644 qjson/qjsonwriter.cpp create mode 100644 qjson/qjsonwriter_p.h create mode 100644 qjson/upQJson.pri create mode 100644 qt_zh_CN.qm create mode 100644 rcS create mode 100644 rfid/rfidfunction.cpp create mode 100644 rfid/rfidfunction.h create mode 100644 rfid/sm3.cpp create mode 100644 rfid/sm3.h create mode 100644 rfid/sm4.cpp create mode 100644 rfid/sm4.h create mode 100644 scene/SceneEditOption.cpp create mode 100644 scene/SceneEditOption.h create mode 100644 scene/formscenedlg.cpp create mode 100644 scene/formscenedlg.h create mode 100644 scene/formscenedlg.ui create mode 100644 scene/myview.cpp create mode 100644 scene/myview.h create mode 100644 scene/picscene.cpp create mode 100644 scene/picscene.h create mode 100644 scene/pictextitem.cpp create mode 100644 scene/pictextitem.h create mode 100644 scene/sceneEditOption.ui create mode 100644 scene/sceneviewwidget.cpp create mode 100644 scene/sceneviewwidget.h create mode 100644 serial.cpp create mode 100644 serial.h create mode 100644 spanish.qm create mode 100644 spanish.ts create mode 100644 systemmanage.ui create mode 100644 systemsetting.ui create mode 100644 textEdit2.html create mode 100644 textEdit3.html create mode 100644 textEditnew.html create mode 100644 textEditnew3.html create mode 100644 texteditoption.ui create mode 100644 thai.qm create mode 100644 thai.ts create mode 100644 timesettingdialog.ui create mode 100644 triggerctrl.ui create mode 100644 tty1 create mode 100644 turkey.qm create mode 100644 turkey.ts create mode 100644 vena.qm create mode 100644 vena.ts create mode 100644 x86_build create mode 100644 zkWidget.cpp create mode 100644 zkWidget.h create mode 100644 zkedit.ui create mode 100644 压力调节算法迁移.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..beb00b2 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +# 所有文本文件在提交时自动转为 LF +* text=auto eol=lf + +# 明确指定源码文件类型(提交时转 LF) +*.c text eol=lf +*.cpp text eol=lf +*.h text eol=lf +*.hpp text eol=lf +*.hxx text eol=lf +*.cc text eol=lf +*.cxx text eol=lf +*.inl text eol=lf + +# 脚本和配置 +*.py text eol=lf +*.sh text eol=lf +*.bash text eol=lf +*.cmake text eol=lf +CMakeLists.txt text eol=lf + +# 文档和配置 +*.txt text eol=lf +*.md text eol=lf +*.json text eol=lf +*.xml text eol=lf +*.yaml text eol=lf +*.yml text eol=lf +*.toml text eol=lf +*.conf text eol=lf +*.cfg text eol=lf +*.ini text eol=lf + +# Makefile 特别注意(必须 LF) +Makefile text eol=lf +*.mk text eol=lf + +# Qt 相关 +*.pro text eol=lf +*.pri text eol=lf +*.qrc text eol=lf +*.ui text eol=lf + +# 二进制文件(不要碰) +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.bmp binary +*.ico binary +*.pdf binary +*.zip binary +*.tar.gz binary +*.o binary +*.obj binary +*.exe binary +*.dll binary +*.so binary +*.a binary +*.lib binary +*.dylib binary +*.pyc binary +*.pdb binary +*.db binary \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b56c700 --- /dev/null +++ b/.gitignore @@ -0,0 +1,231 @@ +# ============================================ +# Qt Creator IDE 相关(这些坚决不要提交) +# ============================================ +*.user +*.user.* +*.creator +*.creator.user +*.creator.user.* +*.files +*.includes +*.config +*.stash +*.cbp +*.autosave +*.session +*.session.lock +*.workspace +*.wsp +*.wsp.user +*.wsp.user.* + +# CMake 在 Qt Creator 中生成的文件 +CMakeLists.txt.user +CMakeLists.txt.user.* +CMakeLists.txt.*.user +*.cmake.user + +# ============================================ +# 编译输出目录(所有构建产物) +# ============================================ +# QMake 默认构建目录 +build-*/ +*-build/ +debug/ +release/ +Debug/ +Release/ +build/ +out/ + +# ============================================ +# Qt 编译生成的文件 +# ============================================ +# 临时文件 +*.o +*.obj +*.lo +*.la +*.lst +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.rcc +*.res +*.pdb +*.ilk +*.exp +*.dylib +*.dylib.* +*.dSYM/ +*.exe +*.app +*.framework/ +*.qmlc +*.jsc + +# 中间文件 +*.gcno +*.gcda +*.gcov +*.d +*.dep +*.prl +*.pc + +# ============================================ +# Windows 系统文件 +# ============================================ +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db +desktop.ini +*.tmp +*.temp +*.cache +*.log +*.vs/ +.vs/ + +# ============================================ +# Linux/Unix 系统文件 +# ============================================ +.DS_Store +.AppleDouble +.LSOverride +._* +.document_revisions/ +.fseventsd/ +.Spotlight-V100/ +.Trashes/ +*.swp +*.swo +*~ +*.pid +*.lock +*.socket + +# ============================================ +# VSCode(如果你用 VSCode 写 Qt 代码) +# ============================================ +.vscode/ +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# ============================================ +# 版本控制和依赖管理 +# ============================================ +.git/ +.svn/ +.svnignore +.cvs/ +.hg/ +.hgignore + +# ============================================ +# 测试和覆盖率 +# ============================================ +*.gcov +*.gcda +*.gcno +coverage/ +htmlcov/ +*.coverage +*.coverage.* +.coveragerc + +# ============================================ +# 日志和调试文件 +# ============================================ +*.log +*.debug +*.trace +*.dump +core.* +core/ +vld.log +*.vld + +# ============================================ +# 临时 IDE 文件 +# ============================================ +*.kdev4/ +*.kate-swp +*.kate-temp +*.project +*.pydevproject +*.classpath +*.settings/ +*.cproject +*.autotools + +# ============================================ +# 翻译文件(选择性忽略,建议保留 .ts 提交 .qm 忽略) +# ============================================ +*.qph +*.qch +*.qhc + +# ============================================ +# Qt 部署相关 +# ============================================ +*.rcc +*.qrc.depends + +# ============================================ +# Conan / vcpkg 等包管理(如果有) +# ============================================ +conaninfo.txt +conanbuildinfo.* +conan.lock +vcpkg_installed/ +vcpkg-manifest-install.log + +# ============================================ +# 共享目录 VMware 相关(你的特殊场景) +# ============================================ +.vmx? +*.vmdk? +*.vmsd +*.vmsn +*.vmss +*.vmem +*.nvram +*.vbox +*.vbox-prev +*.vdi +*.vhd +*.vhdx + +# ============================================ +# 用户本地配置(不要提交) +# ============================================ +*.pri.user +*.pri.user.* +*.pro.user +*.pro.user.* +*.pro.stash +*.pri.stash + +# ============================================ +# Makefile 文件和中间产物,本项目使用qmake,因此不需要提交这些 +# ============================================ +Makefile +Makefile.* + +qt4 +QtUI +DevOp.cpp(2) +clear_svn.bat +*varRam.png +buge_*.* +dbg.* +Public (2).h +*_bak \ No newline at end of file diff --git a/0/image/digitalWidth1.bmp b/0/image/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4a8b3640cf4c5c0a9fc90273af08ca3179fa5260 GIT binary patch literal 174 zcmZ?rUB>_cW_cW4 literal 0 HcmV?d00001 diff --git a/0/image/digitalWidth675.bmp b/0/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/0/image/digitalWidth7.bmp b/0/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/0/image/digitalWidth775.bmp b/0/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/0/image/digitalWidth8.bmp b/0/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/1/image/digitalWidth675.bmp b/1/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/1/image/digitalWidth7.bmp b/1/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/1/image/digitalWidth775.bmp b/1/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/1/image/digitalWidth8.bmp b/1/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86J&wXK5QR-cv*ij2I?6r4R#fy{hWksq&wloo@gzZD;bHv##!2pv=drZ)tNNpT z(LQM(%2~CPoA~c9?*^z`|4PwsbAelvlx8OiMMTjtBe52UMOhn*Ky98BhJteK>LIVQ zm|+<+Mt=W)D+{xm^^F|1k!7e880HpPDG0h*=$- zjp-i|yn3CrS8c<*Co{f$muSPRM!HlRFqNE@X5x1Pn~qGXjYZK(A9eJwYUq2&>#P(J kj~{0-IXQiV-ME*bPK>u6ZQN_EtQ1Z>G#D(SBA~JIA1bUYF8}}l literal 0 HcmV?d00001 diff --git a/10/image/QRV25.bmp b/10/image/QRV25.bmp new file mode 100644 index 0000000000000000000000000000000000000000..505f4a64c51e2960e01c36d0b8aee68a1256b7f9 GIT binary patch literal 2254 zcmbV|J5B^K5Cu(!L`VVw5+Ntx0OZ_{Q*ouG+vO?udPf#ut=rG<=h1$Ae&4sg-ebPS zeu@1Y`>s93Z0#%b#|L&NV!U2ji{I&z*CP{tFp?8KB`Cq-FkgY@0ARt4*Is0;A&EO2 z*BQR~Ec_Y#P4DtRjfkn5g$jg2Kyw1HX--pFWSt4L0-Q<=(}Q0; z*piIB`B70PMKvhKM%yS=Glr>7C4uVb>i2=A0Ck4#RE4Kh1J@Z*sEvVfoX%6y$S52~ z_ROyn>xN0wv6dh-WTr&=lD%G)ss8G!@$}a_SKO%`3oKKw3mJ)ElH_nwmBJwj^q_W2 zuK-bJYH=@D!*n^d@hY>b$7dgJT2u)Gi&}YcfW#b|iN|L$)7K`F9^~P@KB(Bw>qOp0 zp}hbn4q`#pD_GJ=KsA*ozK{aVd0aEZ5Ujc8d&fq Rm69#Q>Qu5qRY^vG^aBsuh?f8W literal 0 HcmV?d00001 diff --git a/10/image/QRV25X21.bmp b/10/image/QRV25X21.bmp new file mode 100644 index 0000000000000000000000000000000000000000..54da2a715d6fdec91ddcfbfcb6d479589041277b GIT binary patch literal 1650 zcmaizJ5B>Z5JZ=Rgb*RY4LAW25jmIP{t|TW8^100f>~+W)%BaTC4YQ=-EaHzR`a#a zOP!}WciVH#ZF?{M@qx1wHNN-fvR!?aqCpIU&+GzYXRVo;(U`0Lj=DGg50!7MzSpz-UaeQpbBK2wILOSMD2gbq&@vs@hqr zQ;*=6_d=sZUx6%Ag;HI^ zj_~F0470kF2N)L&b*%Hf@}0_B>v^Wf%i2aa8Sri9hV!b+3;UAzEx==9PUrt!Sz(f* lDdjghJ7B2D;exaV;zX^KArAn1WHuUqMBeie*helbK?L2 literal 0 HcmV?d00001 diff --git a/10/image/QRV29.bmp b/10/image/QRV29.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2c9295ab3bb96d63793d47b497c64876e07ee0d1 GIT binary patch literal 2954 zcmb7?J96VN5Jc&CLnltQYMuE6K7ey)KGj~@9^g?Atsy0sP~xc3KY%KIeE$El&GlaM zt)AC<{?_xfz0};cuhO6QXA(93eQ#TRP8a-fYHm_(VKA^AjDl1$>2B3cGH&N$j*Xbo zDlP!N1(JW@jEsS6db3n5ZD6@eaDlNFX$C{`Moz)*%z#}5YUN~mhauZ+JE=BWuNRHQ zB>*R*A<4pi7LrPkd3df-SP7ttH1)mw@)egw)?@|1ZFXUHa-OrFL2}9Y%CiH5Cjo5F z?J5CbBHvn0x1^kThE+=iDHJG%d6cHIULD)%ymDG3FmvULAB{_3BbAd>s{K;r&1e;1 zU|SQ=$lMNG50tYpct+X9oKDCo_Ce1u+la;O&@L)uPR#=S$JBlX`4+(KRJ{cnPjH-_ z?U>T)?Ew0dPmCewQ0w6%*3lTcicCJY7+TvPrEtp-$clzDh*_os_qW>Nn`&tu44KZo zoUi*ci>#28xm9xVTM;Jt&@?ExdJnqtB8?$--;ioy8`gWk+J(by=2sYb{&CVTCiVLn zwp-0@_WV3XX70w289*y6rgUIXRkBE+Cz(OkV+`Dw@}%vEVdO25S!Wd0mhJ*9L2Xfw K{BE6JczysNaT1{b literal 0 HcmV?d00001 diff --git a/10/image/QRV33.bmp b/10/image/QRV33.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ecf6ded322d118be1fed7c1623c5aa4a9968cab8 GIT binary patch literal 3750 zcmb7=L9*093`4`3s=r~w5*Aeb6L0|b+=WwdO>pORUMudIDd?JbWLc6s`SJ7j+i{-n zRp0CRR?pXZJ{+H`9>=emfBMLC5>>wZIga{0Jo0J;=u=S4K7~Oxr;3~}h4vW{{R-h@vVmO|bT97L=$C6;ejBfWM}}+muVKEkQbFU*PGvG)AW-NqLN;1-T}f#3>uLZDor0DfVGpC@^GA6(j)5G_lhH z;IZZkU+;I4v!IZ<8RE^9HBhYl?u{W*p?_5Yk$8~vtvoGkAX(s*1P7W z#6y|39V-xIdXbIKc265#*x}nwM*lC~!mdT`16a$D7=JN&Y!iU1=C53|*WcNjm7XO% z$J3_Np!<{rRJSz!PZduRW8;KGnXW))07QUY(FD7=F|8%A$d!`{aATCFP30N2E{!-X TJ_UM2z4sByp2w literal 0 HcmV?d00001 diff --git a/10/image/QRV37.bmp b/10/image/QRV37.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8082eb3ce15a894d1daf461a180649fd2fc7bf0c GIT binary patch literal 4642 zcmb`GF|yP!5JU|r5s(m5MHO6t1CVq7OK=Am>B&!R$=;u!T912rx_i9d|9}1d`swKB zXVvd@{iy3(UGI)BRgdG($K&|?fvXc$-v2$0`rICP1+Re#$nX}qyC%8J(y4!{&#ZK@ z^@%YA0qqcv+x6S4AeY_NCxDBo34+Dd__}gj3?$VNGTKFuBQZ)Vz)WOs@77jMjtqbx zY6+a4^3{c=$aL&hF8K78YGFp-uGHzKj0w*@>Eg%7}E|j!4BR$TZ7=oXnabo_dK|n(%n%V$t338>7fhU0 zkTOE3lLuiayns%$CtZ$=mQ)rgpSU#1&o_W5>mH{wA4Q9LWdOy=H(ZyLB7svFm9K%* z%qc8ipy6@rDlwpq&$Ex1rUtFdtp#$7E=_muo}!DiK7llL`S@bF!kh-uplIOvGT)!%SaANiXf$X3 z-lQ9}N66fQg(NL&3Doc$Z|p`yL^^xUDEkx!uP)S=(c6maOC#$NaTR2svhkSb|IW}X mQrh&Sz{NYcq^lGx$!&!xngwkfCzXx>w#aP-5z}Dt_4x-0IYz1g literal 0 HcmV?d00001 diff --git a/100/EXPIRYXX.xcf b/100/EXPIRYXX.xcf new file mode 100644 index 0000000000000000000000000000000000000000..a1674a691d4b7caaac7a940d728a342ae2c15525 GIT binary patch literal 1386 zcmZ`%OODe(5bbW;Bn*uBqh7GEdX-sZ6d!;MEJiGlxI!jzJeKkqB}PnEAhAMX!In$F ztq>PTlsIULS7mn+L{jo|Jy+N7+0OFOb$rts#Djd8D%d&DU;=vtXpP$wp!w>XQViHr zAOv0l&uh+k&yarsf106fyEhq)(s6-j#fOhyPt$IZ_TvwEaTQ;@dHaq}9!hFH>Sk#> zo92CvAzQ1~te6kecs3d4{j-zSAnQ$rlWE)%*PdpV-MDk!5j#MV`sfU$mj_Dyd3>C3 z>CNoA+snsUocLJ?&JP9aSo{4rFXDXMyGmzVKN$>WX|Y|9tN#yGk$+41J=CUucn04A zngGAi#_!Kxe|`T6rVQU;cL4q}1aKO2PQ6=mIQ3$WpX~8_d;I<$Ki%UGz`3tC{#AGe zoBu2PE(jUx-@Ns8d{52)TENx(L6aNR_zl*TKINo z>SveL0K)^&O>YOV216@fvfIFKf*oa1O^{5XC=ua!4n++FgBw9h&;tWi`O?0Cdya0a)x0*3fq4 it9DEHWpFOLYKw1%e7r@G!9Jj{<{`LYNs0ZaKha-&3uK7^ literal 0 HcmV?d00001 diff --git a/100/digitalWidth4.bmp b/100/digitalWidth4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87ee020d4ca30bfed9469983c7045eceede5b8f GIT binary patch literal 486 zcmZ?rea6TD24+A~1BfMnm<@;-!7K)b4M2HeZU_bnL%^T!3=IDmm@p8-e+J^ve=qi zzj+&r+m%q^RwY}xnfMkc?!0twXtF?wQGkKRq@bsCTH=d?&;-w zJGrgz&a-f`ya7FP&5=<}`<{=M_rhbIsY2^Eluwz}cd-)<&K?jQL}hy^fG==` BzqbGY literal 0 HcmV?d00001 diff --git a/100/image/digitalWidth1.bmp b/100/image/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/100/image/digitalWidth175.bmp b/100/image/digitalWidth175.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/100/image/digitalWidth8 (____).bmp b/100/image/digitalWidth8 (____).bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86sqoi|s3FNcF+X*FbILw%G6 zHKi^tn+cUJ@|hp%sgfi2FNn)J(Q4k~R2NcD!*QHbeU>D7TzoZ1)!(I0WwVs_V2wXJ z247wJaioxYp$8tDEH$XXLUBL0(3g4^n{R%$- zr*oZcgSh(Yt=qV`v&2o%LaPs(n$YyULdQlJ&RPu+=83&9WB${_8+vs!T$>fOD;PJe h2CSK(Q{HL(Up};@zs%=9cU_Kkg^|1(tXJ$3@(1R>D5C%X literal 0 HcmV?d00001 diff --git a/100/image/digitalWidth88.bmp b/100/image/digitalWidth88.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e806c6cfd6b092e5c459ba9ef365543ae47edaa7 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86PTlsIULS7mn+L{jo|Jy+N7+0OFOb$rts#Djd8D%d&DU;=vtXpP$wp!w>XQViHr zAOv0l&uh+k&yarsf106fyEhq)(s6-j#fOhyPt$IZ_TvwEaTQ;@dHaq}9!hFH>Sk#> zo92CvAzQ1~te6kecs3d4{j-zSAnQ$rlWE)%*PdpV-MDk!5j#MV`sfU$mj_Dyd3>C3 z>CNoA+snsUocLJ?&JP9aSo{4rFXDXMyGmzVKN$>WX|Y|9tN#yGk$+41J=CUucn04A zngGAi#_!Kxe|`T6rVQU;cL4q}1aKO2PQ6=mIQ3$WpX~8_d;I<$Ki%UGz`3tC{#AGe zoBu2PE(jUx-@Ns8d{52)TENx(L6aNR_zl*TKINo z>SveL0K)^&O>YOV216@fvfIFKf*oa1O^{5XC=ua!4n++FgBw9h&;tWi`O?0Cdya0a)x0*3fq4 it9DEHWpFOLYKw1%e7r@G!9Jj{<{`LYNs0ZaKha-&3uK7^ literal 0 HcmV?d00001 diff --git a/101/digitalWidth1.bmp b/101/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/101/digitalWidth4.bmp b/101/digitalWidth4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87ee020d4ca30bfed9469983c7045eceede5b8f GIT binary patch literal 486 zcmZ?rea6TD24+A~1BfMnm<@;-!7K)b4M2HeZU_bnL%^T!3=IDmm@p8-e+J^ve=qi zzj+&r+m%q^RwY}xnfMkc?!0twXtF?wQGkKRq@bsCTH=d?&;-w zJGrgz&a-f`ya7FP&5=<}`<{=M_rhbIsY2^Eluwz}cd-)<&K?jQL}hy^fG==` BzqbGY literal 0 HcmV?d00001 diff --git a/101/image/curDate1.bmp b/101/image/curDate1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bc9c77f62567c6627a9fe9fee051b3c426d38b84 GIT binary patch literal 174 zcmZ?rUB>_cW_cWsqoi|s3FNcF+X*FbILw%G6 zHKi^tn+cUJ@|hp%sgfi2FNn)J(Q4k~R2NcD!*QHbeU>D7TzoZ1)!(I0WwVs_V2wXJ z247wJaioxYp$8tDEH$XXLUBL0(3g4^n{R%$- zr*oZcgSh(Yt=qV`v&2o%LaPs(n$YyULdQlJ&RPu+=83&9WB${_8+vs!T$>fOD;PJe h2CSK(Q{HL(Up};@zs%=9cU_Kkg^|1(tXJ$3@(1R>D5C%X literal 0 HcmV?d00001 diff --git a/101/image/digitalWidth88.bmp b/101/image/digitalWidth88.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e806c6cfd6b092e5c459ba9ef365543ae47edaa7 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86 zeL8NnAIGiq*ZB^jw)@XBa4hzM0UmrPIfvtX#|sf|RugH6h%9^?Xm@)H4|7SMwv|6>H9iJXb? zkp!=ZMwe&+sD!ZqING|jWFo~KRC}d{jXMC`uq2nwo&t9eg&2z8NZ2~qq+IGjF|`By z4xSa3Gt4uh&m7Kw60yi@0}Th(Zj- zZzOCTY*H@upqSbLeh1GA%Ngbw(Ps|lKZ#i6HFAJAh;#|FOW*=paRdh9VStzON(~#e l05>ejWwWQi9Yi69;x`hu4mK&5dQeR50KbE0h2;#hBEN4wM2i3b literal 0 HcmV?d00001 diff --git a/11/image/BARV107.bmp b/11/image/BARV107.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f0d6e4b70e093d880d7928a7f7d9a89afd1eaac2 GIT binary patch literal 4030 zcmeH`J5s|y5JW{pKtMpk5eSJm06F*KQgAhBspaSP%z8_SGjHkB(?4y=^5@s@^RlfE zUEg&6=zP@qu)ONJEZ@>!o_ubEF7JQK!l7B1>jp1I)B+qSq(|B``bdUgmxfGcWytt8 zo%f$=v2`g8s7V^bl#$3m&~3LXq`7Qfdzf!SepWj7pl|ySU1S6t1Ee`6<5XReJh-%# zl*eMeHj*u!9!X(KrbLDw{H2f)!$Ht(eH)Y?0h29sMYbE}OjoHb zAf1V^L5g8P3i!BxH`~AG^g8yJ691neqZcaP*EA%F+CjJ3gR>jvOjju^Af1V^L5g8P z3i!BxH}wnP9qFx|U(@A>VyPR*&OujiS4cCv1*(7)#M>cbkH%UC6puIpvOKHEcEgx-YA(Ch7U+nB0_dGGL{L@mIPLb{}zO3!2nc4^9F zR)&o4)!2Wk#nz=XpeAVyQ%WKo5b2T_$SWH5rCDVm<(6dgfb^bkB?!&rJ+c3>1n-E; zl;{9(6G{Pa>DHwwQ&Q}~ZO_zVV-J8dOv!2IOo0oaq-_GQZEN%Yc(P&dMu&w|I>>3W z-%>rF_hww>aVT-W@5l7W^rPfh3!qdVFaXj_=P>}*p0sr*t1P6_K~9_fmg@PuH_v-B zP9U$y?Y8mMN0CDhJ9&PSx9V89tNcMd@Dg{ zCdp)prvUmC;3jDX(^d?#lZBas>||l4rQ?#$RP)#bU<@dy9{kvPsz^NolK^~0 zL$=gcSx9M?%>z=vb9^&2S&fg>DDf2FNFiyGJeXC)Fgsb8Y3aD6Gu1pc0T=_ysRuu{ zo+?t0z$5@)(U2|mRTfg3W%Ga(@EqR^O;+P0HA*}MI8sQOBoAg4G0aXDW?DKf=}a|` jO#sG#a_Yg4t*46ABQOcTS2ScxeU*ijX4yO-1w6k1svQ%q literal 0 HcmV?d00001 diff --git a/11/image/BARV112.bmp b/11/image/BARV112.bmp new file mode 100644 index 0000000000000000000000000000000000000000..35ffc37be19400da2efd26f614317a4871e4c9da GIT binary patch literal 6870 zcmb`FL9WzV5JQ{sXT}8m6)2Yn%~FyeYky|^LG0={-^)+dkp6I`sa4znfqwYhumFpLnsnMU1^)E9-k0w z>u}=P0X+V={d<3R18d6xTpvm^i7OEVjV~dzoPKG-DAuZAqztT0t?tJ^awq|RxmsOLRQ3a5vv9Vn(0X_0zjM; zUbMh^S8Rctd0WIsxDIla^^};6++FsIl{s8CDa|EZZ@tedSpWok9#-_6T(P2)rHEb; z5vm{$C!JzNTU5Pdy{nL=BV5N@^=FFL2`ub>Md5k7$CxWZ7KR1{7O-3B5qgBJV0Zw8 ztcc?xRt*j`)00>PfH*0m~%sCvnIS0PJBxQ@5#&lIl{SlIoF!t-{IF;|2v z3=Ie@V7JgC^axwQ@Bj!|5ywTW8XRb*C$R_saZ-5E0_$C|1#;$X5g*|?$W_);Vm5Mj z*)LY+aM`3ZmvFuHKC5H_5bSwa(Q|UeicXdydPPL2f;^mbiWO~9^^*0jLY9tj9dFg2 zDPAYAu=^E-=j|S2t_WEe8W32(ZlOo$5w?Qi0T8kxj*D0|IM7T_Vi5r1r0}8z*1KX0 z=Y&*z>TW=j4hNoh(K4iil7Jc{u45 zE83#!CF@;6 z@FX^f%x}3$-i1;MLhG``Ih0sp_N#h?BB1EJRXU|vl*u`WZve$)dg_S1=2)EE;_BSb zlh{x)zvU`<7fLAzt;-VUP-2PMuj&zsfTHtO>6B(sCg&i&0Th$zsU!B9V{vket8+h3 zVnfONmaF7lD5W5@E=!z4i6v&gsz)dSiq2c5Q<_DYoP+oVP)w$$j@WCC#mOzM&iy=z z4JGqiu9A15l!DN@EO8DcmYDsj9-#;*I&YOuX%=O24&oa?F`1q^Vy`(CC%3pd_wyt+ zl+16rO5TN13PS6$#5t5$V)m8T_3nqzTti>q@#PhvyK z{FbZaT_~j>v@T1WLy0A3zp6(l0*cOCrBj+knVf_822f0X9>uFm~Di47(5 zTdtCKp_GEqx-4-HC6<`|sve;TC^~PIPH7fpat`7fKrxw~I%2Om7ALp3I`{J=Hk8b7 zxk}!JQVK%rvcx%*SYr08dW0gN=)6@rrCF58If!on#bkQwh`r`moZRB-+|QHPP%^*e zDtQ-5DG06066a82iP^8}5sHAK^H%AUW>F^RAie<3EWpWPU8$dCco;qT$ITk0kxH|XqBsP@HZ@Eg| zg;EMa>$1c-lvrZ+t9pbYpy<3+I;B~Z$vKE`0L5f_>WIDOSe)GA>fFzh*ibUR zN+}4f%M#~MVu{(W>Jf^7qVrbilx9&T=ODfT6qD(xBlenOadL~Rb3adFL&^M>tK?lM sr69B}OPoWAC1$^>M<@b{&ReBZnnjtMgZKteOs1!f*lUi($t||?UqM++)c^nh literal 0 HcmV?d00001 diff --git a/11/image/BARV12.bmp b/11/image/BARV12.bmp new file mode 100644 index 0000000000000000000000000000000000000000..57a3151e4641ad38fb5b52884fab0e9cb0504b9d GIT binary patch literal 6390 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 FPSEr`ifbQV1)YLNuRQZdU6Y&6ZGrOw)~| pG+$UDFQap5MVlRYO=C07ZkkPJIr5sWKv<3mGS%gjQ->Q7%ojyUKuG`q literal 0 HcmV?d00001 diff --git a/11/image/BARV207.bmp b/11/image/BARV207.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1feb715bcb165aed834ee8cb03571850dc091630 GIT binary patch literal 4674 zcmeH`F;eY73vryJ@EW^$J2fOYj)TeJrbs))COx z$tX<56KL9zk++p03r)+Z3QPyBiP(|PUvLe`XM)`g0$DT#FyWn2xJ9Q#OOruZO6oMgQW7!p<}n!tsY@II$(S!}&LSb1rVTeag|I?C*U@c*KLW{*vD0pvsU1(V Tbe1w+OaP2BP5d=a_ltQ4b&d$@ literal 0 HcmV?d00001 diff --git a/11/image/BARV209.bmp b/11/image/BARV209.bmp new file mode 100644 index 0000000000000000000000000000000000000000..60df46ea317afed457de7d986a630d2b9b9fc6ae GIT binary patch literal 5994 zcmeH|F>Vx55JZO%5fZ==2ni4eAm<`nnZrQuyxr$={he7^cIcHos;+)j|7&c+uit;Z zZ2RZuJipEN-}(MH-ygQG^W3%{v;X{w@7(B&b(mc|_7N%3?l=xB8oFt4sD*=KP*VH#RXGs8e!#xy|!` zi-bpbAF!1aFa=X&jR_||nvcK;zHXbok^qq!CzU>O#GD%58KuwJTV1YCu>s= zP)u$|*O)LXpBFURXigrjBcQL7RhTp*Z zNaC6ZR|G-9+Sf$QkON@^|bE0v5#Swr{iB-ZG*EC|vVDh<5VB)WAc-Xcc;fX2GI$4`~fMRkx Uy2gZA`MjXfMsxCL9f95X55v9YX#fBK literal 0 HcmV?d00001 diff --git a/11/image/BARV212.bmp b/11/image/BARV212.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a49ff4fa5b629b880fa401c68d5f7dc75dccdbe4 GIT binary patch literal 7974 zcmcJNF^&^a5JZOKMRj&lQ}QrS6t9O~Z_K0=C~M_y609R>4#gVOX&Wn9qPZ*EL(=mY4o?s`On7+H^Ow%xrMASVOr zT-S7^rs@(?>yYG`$=3)^(GKe#9(hScLE!K?zdpCM16*;7*nFB?1(I(|Gu>@8@`qus za=ipP37Gh3dlk($+-}I&$qG=0AvBYzaD{$}9l}#IQMM@Fy27H>!Q93fE$lNhYF7~W zw#+A^#>~8df;0Q@!SmBn;md}7X*EJg?op56M?v^u6!;E$Uw%;i6XO}>cQ=U%s6{~=p45)Km)0LX4OH8dp zl4mAgBRoYrtb2ImB^3pM!{_|^+|~|o#Vumt`vzAepkx6#NShP}%566hpg;-l?V zG~aN$A!8>iKpBS6Os2vW`XzPZ_9i#YRt?#Y9^>`K@)S!0FICp zh81qfZ21hRb6v9$GShTRUPZ{ui`iP{4Tk|%5}W$v3NKmFAkXu34B)gU*a;`5?`}EM zG|XrxVEc^{e|8BJIpyh8U$F|v$$&c7HC?Hxy2R8vBzb1?HNsQ0!@7q@UQ$sIIDF2p O&u#4hSKK1DZT|q}SxT$` literal 0 HcmV?d00001 diff --git a/11/image/BARV216.bmp b/11/image/BARV216.bmp new file mode 100644 index 0000000000000000000000000000000000000000..031eda969877eb3cfd0148e08cf765989c26f109 GIT binary patch literal 10614 zcmeH{F>c*f6hy!4GzQXS2}zgAb>KeR@n*f46=RP zYz2&@g(fZ^Y-{Bwryuh2O*pAG3TvyVDiO1~5|v=g~r8oy5@d z=1Evyb7h{n?O(8YATtP1KBVsqR!>#YbHN{WCO?`Z@3pXeVf}Q<^tQ>=iW%|f&ygUG zIx$UzBZdA5VW#s=QxgB94VgM?c3qXbT0keOZdqXoyIhol5tmFJ#~_h9CVvRXOCs<~ z%T($bw#4`d^aNAvr2~7MK8{X5rZegjb1$6R~x2&*) zT`o$&XhyeQw4gnda^TxS`We{6te=7B~Uw`!%0IMg0fK+F{Cc=?I ze}pj8d8a9f|Ivm_oi)3z%3Up>lU28@u!LPMO2LRrCXZu~NF9?u1mqkf&XH6&BIE^}9dw_Vq{afBM)?Q04rG4$$ZZR*U{ zUPt;V){;j!0ePT@9?* zSM@qKj!++7N#GE>WrZc|a#0FK+yBP?Fj@h9_yi`0saTJU_6=|T(Y|P7MFOeU!gSEt z!0KdZOAAtDkpEomp24=p=T_3QO4Kq7;mV zos>5YGj1d_3# z%<^e_e*yJX`f?ATNo) zFD+B4YuFOwBhV8}v7cW4Fw(bQfFO*dZHZ|bF=a6MoF*{wUu<|!^SXtlt`^YAOWv}= z5_Y*L1*0K(7_ERld;$~1RIEovt~dl_n9dvL8kRw9nfqPmGIiGMx+-_IfKFE3vceK}xhMrAE}1-zK_Ycb{t%FtMBtZ}snj)W xiSZHW38vUjpMR5lhBse^50&3aCr$L0+@Jcrlv&3roGEer6pUzq^qs*y@;{v*48H&X literal 0 HcmV?d00001 diff --git a/11/image/BARV224.bmp b/11/image/BARV224.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5003d9048ec87918090cb0acc11b4001d7b9271c GIT binary patch literal 15894 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 E19)94IsgCw literal 0 HcmV?d00001 diff --git a/11/image/BARV5.bmp b/11/image/BARV5.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a8b28b5ac47ba869a4c7cc2d8729814d6e411bf7 GIT binary patch literal 2694 zcmaKtF-`3GkdGsk=s*tZ+7n=Uk}Iid7JZP z-tT$u=e;|g=RA(jxqo`(y&7}8{v3xt%o*pwRIDRc7xWL#AeyTi0JR0n8y|tr6`1&F z+LA0^IQQoEY#?i-#w52585G8Z$5hi_CgWOFsWZTJ@UGbMcCyq+`dOI1+7;tys@;pT z0_h98G@UZ38WUfUD=-1%6HsToOyX8K4kn4bI}9OD9{@Yjao1-87M zEX|GfC}48jb`~I$E6%jACFzvu*CtaRIafUTGZMs6Csw8r7)KfyiKufVB`l)=&WJGL zHb6gZ=uFiXfi3T%wZR?*Ope>m0%UTktaW8t4raVk_?Pzo|K00|4DE-)baYWZN4#UtQV$Y9J$)j3!FhTR||mJ2Fn{SfzB0} z_-NXaY`$>r&F$Gh)<_$ZoHk@o7&G~-6}u6D7j7GAK4VM?;Iz?Bd`6iZB}db&%%Wk0 zEi_&NU2uwH+W&PGXFxIq*T@^4aT_ob5W|#2Xy#}n&C~!bdm~U7?<{enV#?%->`^D+ z<0-&$MAwO!0$eQsx9=^-w^Q&uoTJ(NtAM<a5L9;RVpv z6?wK=Uq;6goHiyu1>_|W_)W{S)Ec(LcnNd`QykO3Kf)P+Pu2!ud&+615g5lLiEyPa zsb6B$nEGwI%~OC~jiFHUj2QtO`2^gq0Lu|wCt?b4wE*0{w_JV;1kb~HT<*V=X7jHC z^4Xxycr$qz05MESgl3LL(o7A|vNr;S@y-%ADyB@X$R2e9KAr+BM|7QtDZteNaQohJ z`MD8159e|D_ubv4uP`+Y(#&azBo3pd5mqyOHa3?o1Aq&!intn4+miw!BS2Hb_``OjfYJUFu`}tab zKj!>4-#_#HINuM~*Ez52_uPN^#CI8UeE)Y{elTa8KTO3wa`ix8a0by_9RO+zmNz~E zohvZ$(X=I5zHsi%?b$%qNR3I}He^s3Q{E9rUvUP+M(`C1^lW|vMTwM)}MASJFWZkYS zvIoyV@~%MKUikoO9W$cN2A`n-%Mm>%;uhfQ0J#0p^7_Rgcn{~gJpH@h1njYPggWD8 z@)!UyOi6@hjz-c{S43ZN2E<12DSjVuJQJYJDn`k@zj(>)EG^@f0@4?jNvBL6GbX+w zABhPdpMW~!WfHf_aWF{)SNf9rBT743wUB4C+Rj`=_Lh-{$ut}C(!&p`67K-^yW0BRjG zqRs}Np#aMfJtyK8;OYRl{n7IJ#UXeP=ej)oyWa%tv37(y<7M&~05MESgl3LL(o|PO zUvUP+M(`C1^lW|vMTwM)}MASJFWZkYSvIoyV@~%MKUikoO9V7A|^Z8eM literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth1.bmp b/12/image/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4a8b3640cf4c5c0a9fc90273af08ca3179fa5260 GIT binary patch literal 174 zcmZ?rUB>_cWy%m&1a3=%++fx!YOFU$?WU;z;E_ZtJl|Dl5Zg8|635GNzM ce6Wf@-3)Xd#I-|#G3sVeT+u$hhHiQW08#3Jwg3PC literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth1075.bmp b/12/image/digitalWidth1075.bmp new file mode 100644 index 0000000000000000000000000000000000000000..36f45320ab5be3e5fb3c56413734fc7c812874f8 GIT binary patch literal 1134 zcmZ?r&0}Ez12Z700mL>y%m&1a3=%++fx!YOFU$?WU;z;E_ZtJl|Dl5Zg8|635GNzM ce6Wf@-3)Xd#I-|#G3sVeT+u$hhHiQW08#3Jwg3PC literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth11.bmp b/12/image/digitalWidth11.bmp new file mode 100644 index 0000000000000000000000000000000000000000..171d07015b632f565fd13a7ad1cde2bf0c93ea36 GIT binary patch literal 1254 zcmZ?rea6B724+A~1Bjh~m<@;-867d9|HB*o2Lq62|3kfs r>|==Mhl>c@uRw1>{4{(SqkaXa-C-BO@OT9#V6YESil^Zv0`n^XXrS%> literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth1375.bmp b/12/image/digitalWidth1375.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0fa65a5f70d756251169b5c936ece0a91aab224b GIT binary patch literal 1470 zcmZ?r-N(uR24+A~1Bm^Am<@;-867d9|HB*o2Lq62|3kfs r>|==Mhl>c@uRw1>{4{(SqkaXa-C-BO@OT9#V6YESil^Zv0`n^XXrS%> literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth14.bmp b/12/image/digitalWidth14.bmp new file mode 100644 index 0000000000000000000000000000000000000000..939c6c4b320661b0e4d317de6338d5976854eedb GIT binary patch literal 1566 zcmZ?rm1AQ712Z700mLCd3=(2wkN}bl3@=z27=*bY7%TuH{(fU%_&?Ine=q>~8sc^2 m5E$+vP`?Ac3GwwvVvPD76z3y0-hmz;?ztOLlEZuoN%H`G%n`5v literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth1475.bmp b/12/image/digitalWidth1475.bmp new file mode 100644 index 0000000000000000000000000000000000000000..939c6c4b320661b0e4d317de6338d5976854eedb GIT binary patch literal 1566 zcmZ?rm1AQ712Z700mLCd3=(2wkN}bl3@=z27=*bY7%TuH{(fU%_&?Ine=q>~8sc^2 m5E$+vP`?Ac3GwwvVvPD76z3y0-hmz;?ztOLlEZuoN%H`G%n`5v literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth15.bmp b/12/image/digitalWidth15.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b6beec9f6bf2acd5ccf49cd1dd74dc1ed37be7ee GIT binary patch literal 1686 zcmZ?royNuh24+A~1Bj!57$n5VAOR#97!rUSVQvTp3xJ5f-xwJFkD~uz01A-*(BME0 t6-WS$BoTOc0KE?J_sC|9h6gYeASHp(@W2rs5Mg*ofx>JgmMF0F0RZ_!HG=>E literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth1575.bmp b/12/image/digitalWidth1575.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b6beec9f6bf2acd5ccf49cd1dd74dc1ed37be7ee GIT binary patch literal 1686 zcmZ?royNuh24+A~1Bj!57$n5VAOR#97!rUSVQvTp3xJ5f-xwJFkD~uz01A-*(BME0 t6-WS$BoTOc0KE?J_sC|9h6gYeASHp(@W2rs5Mg*ofx>JgmMF0F0RZ_!HG=>E literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth16.bmp b/12/image/digitalWidth16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2a30f7307a6d4efe421794046eaa2584bf619e0d GIT binary patch literal 1782 zcmZ?r{l>-s24+A~1BerV7$n5VAOR#97!CkA!rTxH761`{zcDcUA4QlU@E;67;*j7$ z4y92M21xLL0|yc^z%UtQAO!+6{UC{qh7Tx#z!J%5_#lS{JXqiiX!rmX0Rs&lZV=9> I2(0`8003B8B>(^b literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth1675.bmp b/12/image/digitalWidth1675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2a30f7307a6d4efe421794046eaa2584bf619e0d GIT binary patch literal 1782 zcmZ?r{l>-s24+A~1BerV7$n5VAOR#97!CkA!rTxH761`{zcDcUA4QlU@E;67;*j7$ z4y92M21xLL0|yc^z%UtQAO!+6{UC{qh7Tx#z!J%5_#lS{JXqiiX!rmX0Rs&lZV=9> I2(0`8003B8B>(^b literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth175.bmp b/12/image/digitalWidth175.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4a8b3640cf4c5c0a9fc90273af08ca3179fa5260 GIT binary patch literal 174 zcmZ?rUB>_cW4 literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth675.bmp b/12/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth7.bmp b/12/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth775.bmp b/12/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth8.bmp b/12/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86TB!DCX!wqHz24QXp1`B|Qzuy=b{tr&{9}GZ_{10^^ qvP&V39%vD`8-dP&xMlD$M%@TbD-=fzJRE@$4K@)a+YAm7m>U6wMqU#D literal 0 HcmV?d00001 diff --git a/12/image/digitalWidth975.bmp b/12/image/digitalWidth975.bmp new file mode 100644 index 0000000000000000000000000000000000000000..da843874de78ed16c13765dcca0e4e2b31c83b63 GIT binary patch literal 1038 zcmZ?rTB!DCX!wqHz24QXp1`B|Qzuy=b{tr&{9}GZ_{10^^ qvP&V39%vD`8-dP&xMlD$M%@TbD-=fzJRE@$4K@)a+YAm7m>U6wMqU#D literal 0 HcmV?d00001 diff --git a/13/image/digitalWidth1.bmp b/13/image/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4a8b3640cf4c5c0a9fc90273af08ca3179fa5260 GIT binary patch literal 174 zcmZ?rUB>_cW_cW4 literal 0 HcmV?d00001 diff --git a/13/image/digitalWidth675.bmp b/13/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/13/image/digitalWidth7.bmp b/13/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/13/image/digitalWidth775.bmp b/13/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/13/image/digitalWidth8.bmp b/13/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/14/image/digitalWidth675.bmp b/14/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/14/image/digitalWidth7.bmp b/14/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/14/image/digitalWidth775.bmp b/14/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/14/image/digitalWidth8.bmp b/14/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/15/image/digitalWidth675.bmp b/15/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/15/image/digitalWidth7.bmp b/15/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/15/image/digitalWidth775.bmp b/15/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/15/image/digitalWidth8.bmp b/15/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/2/image/digitalWidth675.bmp b/2/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/2/image/digitalWidth7.bmp b/2/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/2/image/digitalWidth775.bmp b/2/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/2/image/digitalWidth8.bmp b/2/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/20/image/digitalWidth675.bmp b/20/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/20/image/digitalWidth7.bmp b/20/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/20/image/digitalWidth775.bmp b/20/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/20/image/digitalWidth8.bmp b/20/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/21/image/digitalWidth675.bmp b/21/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/21/image/digitalWidth7.bmp b/21/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/21/image/digitalWidth775.bmp b/21/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/21/image/digitalWidth8.bmp b/21/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/22/image/digitalWidth675.bmp b/22/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/22/image/digitalWidth7.bmp b/22/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/22/image/digitalWidth775.bmp b/22/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/22/image/digitalWidth8.bmp b/22/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/23/image/digitalWidth675.bmp b/23/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/23/image/digitalWidth7.bmp b/23/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/23/image/digitalWidth775.bmp b/23/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/23/image/digitalWidth8.bmp b/23/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/24/image/digitalWidth675.bmp b/24/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/24/image/digitalWidth7.bmp b/24/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/24/image/digitalWidth775.bmp b/24/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/24/image/digitalWidth8.bmp b/24/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/25/image/digitalWidth675.bmp b/25/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/25/image/digitalWidth7.bmp b/25/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/25/image/digitalWidth775.bmp b/25/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/25/image/digitalWidth8.bmp b/25/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/26/image/digitalWidth675.bmp b/26/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/26/image/digitalWidth7.bmp b/26/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/26/image/digitalWidth775.bmp b/26/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/26/image/digitalWidth8.bmp b/26/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/27/image (复件)/digitalWidth675.bmp b/27/image (复件)/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/27/image (复件)/digitalWidth7.bmp b/27/image (复件)/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/27/image (复件)/digitalWidth775.bmp b/27/image (复件)/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/27/image (复件)/digitalWidth8.bmp b/27/image (复件)/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86<~}DLv(?70-l2>;5ERmo052L+r$|k|KuKxmB}O-Phy`>cgEMrPiDt&pC9GN z`F!^NRem&or=Gnz`5(hcrlexM{$ileVotE zilLmHp3ZN2-)*ngzuZ8SWyVdqzf3HfVi?%Q4=S5j+ ztDaS_Y}!Wk$BL~y@V`U*Unvv%-%9pBLTPrmSJf8&e=Ju0f3SD6|6>)(_g7`h7K$^m zDnswP&EK2VcZK{n@c7S5BK}L5{|Keo*GW}d@c)5W<^Rjc_WWT|>6Wa$4F zN$d#lw)oHM!2eDg_CG>t_IdXFry^o3inw5ov;>R$}S}L^>uQjXic-A9# zzs?_=|B3lOod3l9-zm%dM~LVDLzttt+4mSI#%ijN{|TJ`))VnR^B}36|9g1+rxU{en*EPZn*FNH|DT9e|9=C`|J!2(k|Rh)^mAXx;{~8Qw z!Q($7|I;bvKSZ4Wx!WT0f8hQn@_(G->;DjO{!h%$4KIoz@_*p@-$ee8v7G-05$FF5 zcOJPunK~av&&SiZ^9SdDV*L-!e`5X5Sib)cB3}Q)b9>zTLLM)uRYob|`Y-(cAL9D2 zv5xtV5MTd|%gMO?w9m=V{~GRptBCvm*#8iv+5MXT?}=6a{}!A2f1Pu89iPN~&vrf; zs|f$Y*Z&FsJH`255V8N+|F!&o`1%i#|8E@s{|iK%|IhjV!`pw?$A3Jk_}}h6O8zIw q_3>Z%L}~A=)KWTI@Lwxk@ZYsNtV%o1e-?|iyZQ&~G?_cW_cW4 literal 0 HcmV?d00001 diff --git a/27/image/digitalWidth675.bmp b/27/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/27/image/digitalWidth7.bmp b/27/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/27/image/digitalWidth775.bmp b/27/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/27/image/digitalWidth8.bmp b/27/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/28/image/digitalWidth675.bmp b/28/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/28/image/digitalWidth7.bmp b/28/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/28/image/digitalWidth775.bmp b/28/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/28/image/digitalWidth8.bmp b/28/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/3/image/digitalWidth675.bmp b/3/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/3/image/digitalWidth7.bmp b/3/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/3/image/digitalWidth775.bmp b/3/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/3/image/digitalWidth8.bmp b/3/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/30/image/digitalWidth675.bmp b/30/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/30/image/digitalWidth7.bmp b/30/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/30/image/digitalWidth775.bmp b/30/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/30/image/digitalWidth8.bmp b/30/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/31/image/digitalWidth675.bmp b/31/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/31/image/digitalWidth7.bmp b/31/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/31/image/digitalWidth775.bmp b/31/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/31/image/digitalWidth8.bmp b/31/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/32/image/digitalWidth675.bmp b/32/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/32/image/digitalWidth7.bmp b/32/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/32/image/digitalWidth775.bmp b/32/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/32/image/digitalWidth8.bmp b/32/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/33/image/digitalWidth675.bmp b/33/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/33/image/digitalWidth7.bmp b/33/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/33/image/digitalWidth775.bmp b/33/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/33/image/digitalWidth8.bmp b/33/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/34/image/digitalWidth675.bmp b/34/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/34/image/digitalWidth7.bmp b/34/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/34/image/digitalWidth775.bmp b/34/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/34/image/digitalWidth8.bmp b/34/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/35/image/digitalWidth675.bmp b/35/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/35/image/digitalWidth7.bmp b/35/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/35/image/digitalWidth775.bmp b/35/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/35/image/digitalWidth8.bmp b/35/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/36/image/digitalWidth675.bmp b/36/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/36/image/digitalWidth7.bmp b/36/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/36/image/digitalWidth775.bmp b/36/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/36/image/digitalWidth8.bmp b/36/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/37/image/digitalWidth675.bmp b/37/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/37/image/digitalWidth7.bmp b/37/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/37/image/digitalWidth775.bmp b/37/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/37/image/digitalWidth8.bmp b/37/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/38/image/digitalWidth675.bmp b/38/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/38/image/digitalWidth7.bmp b/38/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/38/image/digitalWidth775.bmp b/38/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/38/image/digitalWidth8.bmp b/38/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/4/image/digitalWidth675.bmp b/4/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/4/image/digitalWidth7.bmp b/4/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/4/image/digitalWidth775.bmp b/4/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/4/image/digitalWidth8.bmp b/4/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/40/image/digitalWidth675.bmp b/40/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/40/image/digitalWidth7.bmp b/40/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/40/image/digitalWidth775.bmp b/40/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/40/image/digitalWidth8.bmp b/40/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/41/image/digitalWidth675.bmp b/41/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/41/image/digitalWidth7.bmp b/41/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/41/image/digitalWidth775.bmp b/41/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/41/image/digitalWidth8.bmp b/41/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/42/image/digitalWidth675.bmp b/42/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/42/image/digitalWidth7.bmp b/42/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/42/image/digitalWidth775.bmp b/42/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/42/image/digitalWidth8.bmp b/42/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/43/image/digitalWidth675.bmp b/43/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/43/image/digitalWidth7.bmp b/43/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/43/image/digitalWidth775.bmp b/43/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/43/image/digitalWidth8.bmp b/43/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/44/image/digitalWidth675.bmp b/44/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/44/image/digitalWidth7.bmp b/44/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/44/image/digitalWidth775.bmp b/44/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/44/image/digitalWidth8.bmp b/44/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/45/image/digitalWidth675.bmp b/45/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/45/image/digitalWidth7.bmp b/45/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/45/image/digitalWidth775.bmp b/45/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/45/image/digitalWidth8.bmp b/45/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/46/image/digitalWidth675.bmp b/46/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/46/image/digitalWidth7.bmp b/46/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/46/image/digitalWidth775.bmp b/46/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/46/image/digitalWidth8.bmp b/46/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/47/image (复件)/digitalWidth675.bmp b/47/image (复件)/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/47/image (复件)/digitalWidth7.bmp b/47/image (复件)/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/47/image (复件)/digitalWidth775.bmp b/47/image (复件)/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/47/image (复件)/digitalWidth8.bmp b/47/image (复件)/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86<~}DLv(?70-l2>;5ERmo052L+r$|k|KuKxmB}O-Phy`>cgEMrPiDt&pC9GN z`F!^NRem&or=Gnz`5(hcrlexM{$ileVotE zilLmHp3ZN2-)*ngzuZ8SWyVdqzf3HfVi?%Q4=S5j+ ztDaS_Y}!Wk$BL~y@V`U*Unvv%-%9pBLTPrmSJf8&e=Ju0f3SD6|6>)(_g7`h7K$^m zDnswP&EK2VcZK{n@c7S5BK}L5{|Keo*GW}d@c)5W<^Rjc_WWT|>6Wa$4F zN$d#lw)oHM!2eDg_CG>t_IdXFry^o3inw5ov;>R$}S}L^>uQjXic-A9# zzs?_=|B3lOod3l9-zm%dM~LVDLzttt+4mSI#%ijN{|TJ`))VnR^B}36|9g1+rxU{en*EPZn*FNH|DT9e|9=C`|J!2(k|Rh)^mAXx;{~8Qw z!Q($7|I;bvKSZ4Wx!WT0f8hQn@_(G->;DjO{!h%$4KIoz@_*p@-$ee8v7G-05$FF5 zcOJPunK~av&&SiZ^9SdDV*L-!e`5X5Sib)cB3}Q)b9>zTLLM)uRYob|`Y-(cAL9D2 zv5xtV5MTd|%gMO?w9m=V{~GRptBCvm*#8iv+5MXT?}=6a{}!A2f1Pu89iPN~&vrf; zs|f$Y*Z&FsJH`255V8N+|F!&o`1%i#|8E@s{|iK%|IhjV!`pw?$A3Jk_}}h6O8zIw q_3>Z%L}~A=)KWTI@Lwxk@ZYsNtV%o1e-?|iyZQ&~G?_cW_cW4 literal 0 HcmV?d00001 diff --git a/47/image/digitalWidth675.bmp b/47/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/47/image/digitalWidth7.bmp b/47/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/47/image/digitalWidth775.bmp b/47/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/47/image/digitalWidth8.bmp b/47/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/48/image/digitalWidth675.bmp b/48/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/48/image/digitalWidth7.bmp b/48/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/48/image/digitalWidth775.bmp b/48/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/48/image/digitalWidth8.bmp b/48/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/5/image/digitalWidth675.bmp b/5/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/5/image/digitalWidth7.bmp b/5/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/5/image/digitalWidth775.bmp b/5/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/5/image/digitalWidth8.bmp b/5/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/50/image/digitalWidth675.bmp b/50/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/50/image/digitalWidth7.bmp b/50/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/50/image/digitalWidth775.bmp b/50/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/50/image/digitalWidth8.bmp b/50/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/51/image/digitalWidth675.bmp b/51/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/51/image/digitalWidth7.bmp b/51/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/51/image/digitalWidth775.bmp b/51/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/51/image/digitalWidth8.bmp b/51/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/52/image/digitalWidth675.bmp b/52/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/52/image/digitalWidth7.bmp b/52/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/52/image/digitalWidth775.bmp b/52/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/52/image/digitalWidth8.bmp b/52/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/53/image/digitalWidth675.bmp b/53/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/53/image/digitalWidth7.bmp b/53/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/53/image/digitalWidth775.bmp b/53/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/53/image/digitalWidth8.bmp b/53/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/54/image/digitalWidth675.bmp b/54/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/54/image/digitalWidth7.bmp b/54/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/54/image/digitalWidth775.bmp b/54/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/54/image/digitalWidth8.bmp b/54/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/55/image/digitalWidth675.bmp b/55/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/55/image/digitalWidth7.bmp b/55/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/55/image/digitalWidth775.bmp b/55/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/55/image/digitalWidth8.bmp b/55/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/56/image/digitalWidth675.bmp b/56/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/56/image/digitalWidth7.bmp b/56/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/56/image/digitalWidth775.bmp b/56/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/56/image/digitalWidth8.bmp b/56/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/57/image (复件)/digitalWidth675.bmp b/57/image (复件)/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/57/image (复件)/digitalWidth7.bmp b/57/image (复件)/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/57/image (复件)/digitalWidth775.bmp b/57/image (复件)/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/57/image (复件)/digitalWidth8.bmp b/57/image (复件)/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86<~}DLv(?70-l2>;5ERmo052L+r$|k|KuKxmB}O-Phy`>cgEMrPiDt&pC9GN z`F!^NRem&or=Gnz`5(hcrlexM{$ileVotE zilLmHp3ZN2-)*ngzuZ8SWyVdqzf3HfVi?%Q4=S5j+ ztDaS_Y}!Wk$BL~y@V`U*Unvv%-%9pBLTPrmSJf8&e=Ju0f3SD6|6>)(_g7`h7K$^m zDnswP&EK2VcZK{n@c7S5BK}L5{|Keo*GW}d@c)5W<^Rjc_WWT|>6Wa$4F zN$d#lw)oHM!2eDg_CG>t_IdXFry^o3inw5ov;>R$}S}L^>uQjXic-A9# zzs?_=|B3lOod3l9-zm%dM~LVDLzttt+4mSI#%ijN{|TJ`))VnR^B}36|9g1+rxU{en*EPZn*FNH|DT9e|9=C`|J!2(k|Rh)^mAXx;{~8Qw z!Q($7|I;bvKSZ4Wx!WT0f8hQn@_(G->;DjO{!h%$4KIoz@_*p@-$ee8v7G-05$FF5 zcOJPunK~av&&SiZ^9SdDV*L-!e`5X5Sib)cB3}Q)b9>zTLLM)uRYob|`Y-(cAL9D2 zv5xtV5MTd|%gMO?w9m=V{~GRptBCvm*#8iv+5MXT?}=6a{}!A2f1Pu89iPN~&vrf; zs|f$Y*Z&FsJH`255V8N+|F!&o`1%i#|8E@s{|iK%|IhjV!`pw?$A3Jk_}}h6O8zIw q_3>Z%L}~A=)KWTI@Lwxk@ZYsNtV%o1e-?|iyZQ&~G?_cW_cW4 literal 0 HcmV?d00001 diff --git a/57/image/digitalWidth675.bmp b/57/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/57/image/digitalWidth7.bmp b/57/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/57/image/digitalWidth775.bmp b/57/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/57/image/digitalWidth8.bmp b/57/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/58/image/digitalWidth675.bmp b/58/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/58/image/digitalWidth7.bmp b/58/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/58/image/digitalWidth775.bmp b/58/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/58/image/digitalWidth8.bmp b/58/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/6/image/digitalWidth675.bmp b/6/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/6/image/digitalWidth7.bmp b/6/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/6/image/digitalWidth775.bmp b/6/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/6/image/digitalWidth8.bmp b/6/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/66/image/digitalWidth675.bmp b/66/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/66/image/digitalWidth7.bmp b/66/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/66/image/digitalWidth775.bmp b/66/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/66/image/digitalWidth8.bmp b/66/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/7/image (复件)/digitalWidth675.bmp b/7/image (复件)/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/7/image (复件)/digitalWidth7.bmp b/7/image (复件)/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/7/image (复件)/digitalWidth775.bmp b/7/image (复件)/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/7/image (复件)/digitalWidth8.bmp b/7/image (复件)/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86<~}DLv(?70-l2>;5ERmo052L+r$|k|KuKxmB}O-Phy`>cgEMrPiDt&pC9GN z`F!^NRem&or=Gnz`5(hcrlexM{$ileVotE zilLmHp3ZN2-)*ngzuZ8SWyVdqzf3HfVi?%Q4=S5j+ ztDaS_Y}!Wk$BL~y@V`U*Unvv%-%9pBLTPrmSJf8&e=Ju0f3SD6|6>)(_g7`h7K$^m zDnswP&EK2VcZK{n@c7S5BK}L5{|Keo*GW}d@c)5W<^Rjc_WWT|>6Wa$4F zN$d#lw)oHM!2eDg_CG>t_IdXFry^o3inw5ov;>R$}S}L^>uQjXic-A9# zzs?_=|B3lOod3l9-zm%dM~LVDLzttt+4mSI#%ijN{|TJ`))VnR^B}36|9g1+rxU{en*EPZn*FNH|DT9e|9=C`|J!2(k|Rh)^mAXx;{~8Qw z!Q($7|I;bvKSZ4Wx!WT0f8hQn@_(G->;DjO{!h%$4KIoz@_*p@-$ee8v7G-05$FF5 zcOJPunK~av&&SiZ^9SdDV*L-!e`5X5Sib)cB3}Q)b9>zTLLM)uRYob|`Y-(cAL9D2 zv5xtV5MTd|%gMO?w9m=V{~GRptBCvm*#8iv+5MXT?}=6a{}!A2f1Pu89iPN~&vrf; zs|f$Y*Z&FsJH`255V8N+|F!&o`1%i#|8E@s{|iK%|IhjV!`pw?$A3Jk_}}h6O8zIw q_3>Z%L}~A=)KWTI@Lwxk@ZYsNtV%o1e-?|iyZQ&~G?_cW_cW4 literal 0 HcmV?d00001 diff --git a/7/image/digitalWidth675.bmp b/7/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/7/image/digitalWidth7.bmp b/7/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/7/image/digitalWidth775.bmp b/7/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/7/image/digitalWidth8.bmp b/7/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cW_cW4 literal 0 HcmV?d00001 diff --git a/8/image/digitalWidth675.bmp b/8/image/digitalWidth675.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65f3a039b9bf7b88fe2a3af2eb203ba39c419752 GIT binary patch literal 702 zcmZ?r-N(cL24+A~1Bg|Cm<@;-864 literal 0 HcmV?d00001 diff --git a/8/image/digitalWidth7.bmp b/8/image/digitalWidth7.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/8/image/digitalWidth775.bmp b/8/image/digitalWidth775.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f16e780a620565cfb4f1d733d008f6686f4d691 GIT binary patch literal 822 zcmZ?rHDhJ~12Z700mNEB%m&1a3=%*R2!Qg!+z<>A0Fr;cGcf$8Kl%>_AXof{T951s Zh=XV;0=FM%6~rF;GDhtOg}}haKL7yh6`lY9 literal 0 HcmV?d00001 diff --git a/8/image/digitalWidth8.bmp b/8/image/digitalWidth8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86PTlsIULS7mn+L{jo|Jy+N7+0OFOb$rts#Djd8D%d&DU;=vtXpP$wp!w>XQViHr zAOv0l&uh+k&yarsf106fyEhq)(s6-j#fOhyPt$IZ_TvwEaTQ;@dHaq}9!hFH>Sk#> zo92CvAzQ1~te6kecs3d4{j-zSAnQ$rlWE)%*PdpV-MDk!5j#MV`sfU$mj_Dyd3>C3 z>CNoA+snsUocLJ?&JP9aSo{4rFXDXMyGmzVKN$>WX|Y|9tN#yGk$+41J=CUucn04A zngGAi#_!Kxe|`T6rVQU;cL4q}1aKO2PQ6=mIQ3$WpX~8_d;I<$Ki%UGz`3tC{#AGe zoBu2PE(jUx-@Ns8d{52)TENx(L6aNR_zl*TKINo z>SveL0K)^&O>YOV216@fvfIFKf*oa1O^{5XC=ua!4n++FgBw9h&;tWi`O?0Cdya0a)x0*3fq4 it9DEHWpFOLYKw1%e7r@G!9Jj{<{`LYNs0ZaKha-&3uK7^ literal 0 HcmV?d00001 diff --git a/80/digitalWidth4.bmp b/80/digitalWidth4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87ee020d4ca30bfed9469983c7045eceede5b8f GIT binary patch literal 486 zcmZ?rea6TD24+A~1BfMnm<@;-!7K)b4M2HeZU_bnL%^T!3=IDmm@p8-e+J^ve=qi zzj+&r+m%q^RwY}xnfMkc?!0twXtF?wQGkKRq@bsCTH=d?&;-w zJGrgz&a-f`ya7FP&5=<}`<{=M_rhbIsY2^Eluwz}cd-)<&K?jQL}hy^fG==` BzqbGY literal 0 HcmV?d00001 diff --git a/80/image/digitalWidth1.bmp b/80/image/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/80/image/digitalWidth175.bmp b/80/image/digitalWidth175.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/80/image/digitalWidth8 (____).bmp b/80/image/digitalWidth8 (____).bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86sqoi|s3FNcF+X*FbILw%G6 zHKi^tn+cUJ@|hp%sgfi2FNn)J(Q4k~R2NcD!*QHbeU>D7TzoZ1)!(I0WwVs_V2wXJ z247wJaioxYp$8tDEH$XXLUBL0(3g4^n{R%$- zr*oZcgSh(Yt=qV`v&2o%LaPs(n$YyULdQlJ&RPu+=83&9WB${_8+vs!T$>fOD;PJe h2CSK(Q{HL(Up};@zs%=9cU_Kkg^|1(tXJ$3@(1R>D5C%X literal 0 HcmV?d00001 diff --git a/80/image/digitalWidth88.bmp b/80/image/digitalWidth88.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e806c6cfd6b092e5c459ba9ef365543ae47edaa7 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86PTlsIULS7mn+L{jo|Jy+N7+0OFOb$rts#Djd8D%d&DU;=vtXpP$wp!w>XQViHr zAOv0l&uh+k&yarsf106fyEhq)(s6-j#fOhyPt$IZ_TvwEaTQ;@dHaq}9!hFH>Sk#> zo92CvAzQ1~te6kecs3d4{j-zSAnQ$rlWE)%*PdpV-MDk!5j#MV`sfU$mj_Dyd3>C3 z>CNoA+snsUocLJ?&JP9aSo{4rFXDXMyGmzVKN$>WX|Y|9tN#yGk$+41J=CUucn04A zngGAi#_!Kxe|`T6rVQU;cL4q}1aKO2PQ6=mIQ3$WpX~8_d;I<$Ki%UGz`3tC{#AGe zoBu2PE(jUx-@Ns8d{52)TENx(L6aNR_zl*TKINo z>SveL0K)^&O>YOV216@fvfIFKf*oa1O^{5XC=ua!4n++FgBw9h&;tWi`O?0Cdya0a)x0*3fq4 it9DEHWpFOLYKw1%e7r@G!9Jj{<{`LYNs0ZaKha-&3uK7^ literal 0 HcmV?d00001 diff --git a/81/digitalWidth1.bmp b/81/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/81/digitalWidth4.bmp b/81/digitalWidth4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87ee020d4ca30bfed9469983c7045eceede5b8f GIT binary patch literal 486 zcmZ?rea6TD24+A~1BfMnm<@;-!7K)b4M2HeZU_bnL%^T!3=IDmm@p8-e+J^ve=qi zzj+&r+m%q^RwY}xnfMkc?!0twXtF?wQGkKRq@bsCTH=d?&;-w zJGrgz&a-f`ya7FP&5=<}`<{=M_rhbIsY2^Eluwz}cd-)<&K?jQL}hy^fG==` BzqbGY literal 0 HcmV?d00001 diff --git a/81/image/curDate1.bmp b/81/image/curDate1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bc9c77f62567c6627a9fe9fee051b3c426d38b84 GIT binary patch literal 174 zcmZ?rUB>_cW_cWsqoi|s3FNcF+X*FbILw%G6 zHKi^tn+cUJ@|hp%sgfi2FNn)J(Q4k~R2NcD!*QHbeU>D7TzoZ1)!(I0WwVs_V2wXJ z247wJaioxYp$8tDEH$XXLUBL0(3g4^n{R%$- zr*oZcgSh(Yt=qV`v&2o%LaPs(n$YyULdQlJ&RPu+=83&9WB${_8+vs!T$>fOD;PJe h2CSK(Q{HL(Up};@zs%=9cU_Kkg^|1(tXJ$3@(1R>D5C%X literal 0 HcmV?d00001 diff --git a/81/image/digitalWidth88.bmp b/81/image/digitalWidth88.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e806c6cfd6b092e5c459ba9ef365543ae47edaa7 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/82/digitalWidth4.bmp b/82/digitalWidth4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87ee020d4ca30bfed9469983c7045eceede5b8f GIT binary patch literal 486 zcmZ?rea6TD24+A~1BfMnm<@;-!7K)b4M2HeZU_bnL%^T!3=IDmm@p8-e+J^ve=qi zzj+&r+m%q^RwY}xnfMkc?!0twXtF?wQGkKRq@bsCTH=d?&;-w zJGrgz&a-f`ya7FP&5=<}`<{=M_rhbIsY2^Eluwz}cd-)<&K?jQL}hy^fG==` BzqbGY literal 0 HcmV?d00001 diff --git a/82/image/class1.bmp b/82/image/class1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..39926a53352106591fb4576570d7ae8cf8af0421 GIT binary patch literal 174 zcmZ?rUB>_cWqTWJ~RLT literal 0 HcmV?d00001 diff --git a/82/image/class91.bmp b/82/image/class91.bmp new file mode 100644 index 0000000000000000000000000000000000000000..007cc6e4445cf64155e6a4cc719d6fdd2697adaa GIT binary patch literal 270 zcmZ?r_cWsqoi|s3FNcF+X*FbILw%G6 zHKi^tn+cUJ@|hp%sgfi2FNn)J(Q4k~R2NcD!*QHbeU>D7TzoZ1)!(I0WwVs_V2wXJ z247wJaioxYp$8tDEH$XXLUBL0(3g4^n{R%$- zr*oZcgSh(Yt=qV`v&2o%LaPs(n$YyULdQlJ&RPu+=83&9WB${_8+vs!T$>fOD;PJe h2CSK(Q{HL(Up};@zs%=9cU_Kkg^|1(tXJ$3@(1R>D5C%X literal 0 HcmV?d00001 diff --git a/82/image/digitalWidth88.bmp b/82/image/digitalWidth88.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e806c6cfd6b092e5c459ba9ef365543ae47edaa7 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86JQ40BgtKw{wpF5m!m{@^NJEmke8sDVm$6UT9ToOeMxJ9#4}Vjv1uGH`Le zj6xGgbA7A7n+AEzQZmN`O{K&|DsHpiTPiwsniDW6bz*1SfC+AO76`IBc@I(i%Dv+s#XAbUXGo`C5?|#DM4#O`4HY z8d0A*h8yOcS^d8qBa6%j9TL>RAuAiAS_C`?X;8IgAIy@aAyz_o7!+9@K*7?B6~(z6 on$37tH9CThMV9^QpkPPIs!|DVOE!PheHQ_-$=_@)KEK=83!GM4Z2$lO literal 0 HcmV?d00001 diff --git a/9/image/DMTV14.bmp b/9/image/DMTV14.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f7975bbbbb233854933a069fe8263069b21d03cb GIT binary patch literal 726 zcma)#!3~2j6hnWxR;rM=FhVC_fZo}$Q*|A%V)109IS}z3$KN)e{Wn!RoA9lfH80Jh zR$kd+Er6b(yD legOzd@mo`OQy74lsiFs!=0jZs)@CN$63J(r9$7L6-2t{kmmB~9 literal 0 HcmV?d00001 diff --git a/9/image/DMTV18.bmp b/9/image/DMTV18.bmp new file mode 100644 index 0000000000000000000000000000000000000000..04025e9decf11d9a9691d6ac662e94a33b8d95ad GIT binary patch literal 1134 zcmb7;I}XAy7=wev#)5!>BX9!5%+6J~|JGXhgt7ias8o${{3_4ad*AwV7v6L(Iwzf7 zy9!%-$Uh%AT@W0X5Bv95MR(0n3gTMKt3QgXD{j%<%|JW68}lWYdsX>{6i(t(N1 z40RNEBBw`2kpC3I81>1UtqPNjbnA;vyON+Xz`0=(y4ti#jJuYp`0XH^09aL5R39UDoUMn1ajoww~taT=%ig zq0YX}YF5*9s{U@nDSLjl_ow>jTM#%Y0P0scc3ny<138!|IRqr=k0Rl&V9@d%P2Xhl z)!Bt?D+T&p0LZve-!08y#BSs3e<>W#U&{(waJ-2TFlJXLV@Ym)l{n)KbMC+VmssJ( z47gpG-JcAn?CE#VVvt>m8mNw(iVzV1)`yw(0% z>!sFnt-Ib&r_a)#9#}>9^Y}gJ@1I>oU+p`n6Ce|KERij^Bp7v>UH}GdrnVb|a$Jtl z`@y)wj+73PMzs|i6xiyiA@1o@@xTR>4nh%h>mlj zc|~<|zt)txzh>wAVu7}1DV8_A7J}DJWVyq2Y~*U{V4eXeAP0i literal 0 HcmV?d00001 diff --git a/9/image/DMTV26.bmp b/9/image/DMTV26.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6b0a4280dec5346125f689ef2f7be29a1e8f42ea GIT binary patch literal 2238 zcmb`B!A%1}5Co4O5+5W!2oZoIZ~*+ti>OG=jIZQUtJmBIth>41?wVeIe11P}`|mvS zH1GSoZ}UEEuQRvpYx0*T-rbn-e7ULr`c9#pY8?Ibt|A5SO~)7M^2!7?be#@_4O}8qAS!eR4?WBq{ znY<#k%(^m8rgt@e@;958z9KsmIH$s?wKH-#rnMod#uM+PBq z*B_Io*4Z*mQIY*LI2G3a)N`5sM&|D(QaKfga%mjD0& literal 0 HcmV?d00001 diff --git a/9/image/DMTV32.bmp b/9/image/DMTV32.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e4a7b66aff10aa51640ffde2e5d22e21959e7445 GIT binary patch literal 3382 zcmcJMK~BU#3)mBsuT@{_ zd9LTFo}0^K)w-(xaLa>nx!iwD^?!fI3ip&~cWtI?1=!yRKwbcTbU`p0D3!vD6ofQq z%>*&YRr)#zd?Is7%)wPSmm;+RyAZRbQzG?xqPh0Ze_BhDDc=^t7NY79>uF5QtETZK z3gC|K(QY6|Bkj(B!^p0FiWSKWrjtci%@)Vuoj%=k29scBY~cCQ&3A@2YWLu(*BvXHu)*(I!zHDcfp>*;JVN-JYh+f88_Ya>UBP92jK-~Gt= z`l-d}ni;8kd~+OSIx>z98yrzgcr%uXBVk-(irG2-rirFonmZ6#g{(<9R!M|>9h)-^ mCx~od1{<(5hS18o?#UNop%phJ{R(t}O!08JB literal 0 HcmV?d00001 diff --git a/90/EXPIRYXX.xcf b/90/EXPIRYXX.xcf new file mode 100644 index 0000000000000000000000000000000000000000..a1674a691d4b7caaac7a940d728a342ae2c15525 GIT binary patch literal 1386 zcmZ`%OODe(5bbW;Bn*uBqh7GEdX-sZ6d!;MEJiGlxI!jzJeKkqB}PnEAhAMX!In$F ztq>PTlsIULS7mn+L{jo|Jy+N7+0OFOb$rts#Djd8D%d&DU;=vtXpP$wp!w>XQViHr zAOv0l&uh+k&yarsf106fyEhq)(s6-j#fOhyPt$IZ_TvwEaTQ;@dHaq}9!hFH>Sk#> zo92CvAzQ1~te6kecs3d4{j-zSAnQ$rlWE)%*PdpV-MDk!5j#MV`sfU$mj_Dyd3>C3 z>CNoA+snsUocLJ?&JP9aSo{4rFXDXMyGmzVKN$>WX|Y|9tN#yGk$+41J=CUucn04A zngGAi#_!Kxe|`T6rVQU;cL4q}1aKO2PQ6=mIQ3$WpX~8_d;I<$Ki%UGz`3tC{#AGe zoBu2PE(jUx-@Ns8d{52)TENx(L6aNR_zl*TKINo z>SveL0K)^&O>YOV216@fvfIFKf*oa1O^{5XC=ua!4n++FgBw9h&;tWi`O?0Cdya0a)x0*3fq4 it9DEHWpFOLYKw1%e7r@G!9Jj{<{`LYNs0ZaKha-&3uK7^ literal 0 HcmV?d00001 diff --git a/90/digitalWidth4.bmp b/90/digitalWidth4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87ee020d4ca30bfed9469983c7045eceede5b8f GIT binary patch literal 486 zcmZ?rea6TD24+A~1BfMnm<@;-!7K)b4M2HeZU_bnL%^T!3=IDmm@p8-e+J^ve=qi zzj+&r+m%q^RwY}xnfMkc?!0twXtF?wQGkKRq@bsCTH=d?&;-w zJGrgz&a-f`ya7FP&5=<}`<{=M_rhbIsY2^Eluwz}cd-)<&K?jQL}hy^fG==` BzqbGY literal 0 HcmV?d00001 diff --git a/90/image/digitalWidth1.bmp b/90/image/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/90/image/digitalWidth175.bmp b/90/image/digitalWidth175.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/90/image/digitalWidth8 (____).bmp b/90/image/digitalWidth8 (____).bmp new file mode 100644 index 0000000000000000000000000000000000000000..121914bc9284919b250ebeac3bcd2301f0c21746 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86sqoi|s3FNcF+X*FbILw%G6 zHKi^tn+cUJ@|hp%sgfi2FNn)J(Q4k~R2NcD!*QHbeU>D7TzoZ1)!(I0WwVs_V2wXJ z247wJaioxYp$8tDEH$XXLUBL0(3g4^n{R%$- zr*oZcgSh(Yt=qV`v&2o%LaPs(n$YyULdQlJ&RPu+=83&9WB${_8+vs!T$>fOD;PJe h2CSK(Q{HL(Up};@zs%=9cU_Kkg^|1(tXJ$3@(1R>D5C%X literal 0 HcmV?d00001 diff --git a/90/image/digitalWidth88.bmp b/90/image/digitalWidth88.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e806c6cfd6b092e5c459ba9ef365543ae47edaa7 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86PTlsIULS7mn+L{jo|Jy+N7+0OFOb$rts#Djd8D%d&DU;=vtXpP$wp!w>XQViHr zAOv0l&uh+k&yarsf106fyEhq)(s6-j#fOhyPt$IZ_TvwEaTQ;@dHaq}9!hFH>Sk#> zo92CvAzQ1~te6kecs3d4{j-zSAnQ$rlWE)%*PdpV-MDk!5j#MV`sfU$mj_Dyd3>C3 z>CNoA+snsUocLJ?&JP9aSo{4rFXDXMyGmzVKN$>WX|Y|9tN#yGk$+41J=CUucn04A zngGAi#_!Kxe|`T6rVQU;cL4q}1aKO2PQ6=mIQ3$WpX~8_d;I<$Ki%UGz`3tC{#AGe zoBu2PE(jUx-@Ns8d{52)TENx(L6aNR_zl*TKINo z>SveL0K)^&O>YOV216@fvfIFKf*oa1O^{5XC=ua!4n++FgBw9h&;tWi`O?0Cdya0a)x0*3fq4 it9DEHWpFOLYKw1%e7r@G!9Jj{<{`LYNs0ZaKha-&3uK7^ literal 0 HcmV?d00001 diff --git a/91/digitalWidth1.bmp b/91/digitalWidth1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b0bef10c9c6ea68a8cce377da718a3a012046f7 GIT binary patch literal 174 zcmZ?rUB>_cWN)Nt8Z0 literal 0 HcmV?d00001 diff --git a/91/digitalWidth4.bmp b/91/digitalWidth4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87ee020d4ca30bfed9469983c7045eceede5b8f GIT binary patch literal 486 zcmZ?rea6TD24+A~1BfMnm<@;-!7K)b4M2HeZU_bnL%^T!3=IDmm@p8-e+J^ve=qi zzj+&r+m%q^RwY}xnfMkc?!0twXtF?wQGkKRq@bsCTH=d?&;-w zJGrgz&a-f`ya7FP&5=<}`<{=M_rhbIsY2^Eluwz}cd-)<&K?jQL}hy^fG==` BzqbGY literal 0 HcmV?d00001 diff --git a/91/image/curDate1.bmp b/91/image/curDate1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bc9c77f62567c6627a9fe9fee051b3c426d38b84 GIT binary patch literal 174 zcmZ?rUB>_cW_cWsqoi|s3FNcF+X*FbILw%G6 zHKi^tn+cUJ@|hp%sgfi2FNn)J(Q4k~R2NcD!*QHbeU>D7TzoZ1)!(I0WwVs_V2wXJ z247wJaioxYp$8tDEH$XXLUBL0(3g4^n{R%$- zr*oZcgSh(Yt=qV`v&2o%LaPs(n$YyULdQlJ&RPu+=83&9WB${_8+vs!T$>fOD;PJe h2CSK(Q{HL(Up};@zs%=9cU_Kkg^|1(tXJ$3@(1R>D5C%X literal 0 HcmV?d00001 diff --git a/91/image/digitalWidth88.bmp b/91/image/digitalWidth88.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e806c6cfd6b092e5c459ba9ef365543ae47edaa7 GIT binary patch literal 918 zcmZ?royN=n24+A~1BeZPm<@;-86 6 && (row % Nk == 4) ) //这个还没有搞清楚 + { + temp = SubWord(temp); + } + + // w[row] = w[row-Nk] xor temp + w[4*row+0] = (byte) ( (int) w[4*(row-Nk)+0] ^ (int)temp[0] ); + w[4*row+1] = (byte) ( (int) w[4*(row-Nk)+1] ^ (int)temp[1] ); + w[4*row+2] = (byte) ( (int) w[4*(row-Nk)+2] ^ (int)temp[2] ); + w[4*row+3] = (byte) ( (int) w[4*(row-Nk)+3] ^ (int)temp[3] ); + } // for loop + +} +//////////////////////////////////////////////////////////////////////////////////////////////// +//密钥移位函数 +unsigned char* Aes::RotWord(unsigned char* word) +{ + byte* temp = new byte[4]; + temp[0] = word[1]; + temp[1] = word[2]; + temp[2] = word[3]; + temp[3] = word[0]; + return temp; +} +//////////////////////////////////////////////////////////////////////////////////////////////// +//密钥字代换函数 +unsigned char* Aes::SubWord(unsigned char* word) +{ + byte* temp = new byte[4]; + for(int j=0;j<4;j++) + { + temp[j] = AesSbox[16*(word[j] >> 4)+(word[j] & 0x0f)]; //实际上也可以写成AesSbox[[j]];因为两者相等 + } + return temp; + +} +//////////////////////////////////////////////////////////////////////////////////////////////// +//Aes加密函数 +void Aes::Cipher(unsigned char* input, unsigned char* output) +{ + memset(&State[0][0],0,16); + for(int i=0;i<4*Nb;i++) //这里是先写列后写行的,即输入是一列一列的进来的 + { + State[i%4][i/4]=input[i]; //换成先写行后写列也是可以的,只要在输出时也是这样就可以了 + } + AddRoundKey(0); //轮密钥加 + + for (int round = 1; round <= (Nr - 1); round++) // main round loop + { + SubBytes(); //字节代换 + ShiftRows(); //行移位 + MixColumns(); //列混淆 + AddRoundKey(round); //轮密钥加 + } // main round loop + + SubBytes(); //字节代换 + ShiftRows(); //行移位 + AddRoundKey(Nr); //轮密钥加 + + // output = state + for (int i = 0; i < (4 * Nb); i++) + { + output[i] = State[i % 4][ i / 4]; + } + +} +//////////////////////////////////////////////////////////////////////////////////////////////// +//Aes解密函数 +void Aes::InvCipher(unsigned char* input,unsigned char* output) +{ + memset(&State[0][0],0,16); + for (int i = 0; i < (4 * Nb); i++) + { + State[i % 4][ i / 4] = input[i]; + } + + AddRoundKey(Nr); + + for (int round = Nr-1; round >= 1; round--) // main round loop + { + InvShiftRows(); + InvSubBytes(); + AddRoundKey(round); + InvMixColumns(); + } // end main round loop for InvCipher + + InvShiftRows(); + InvSubBytes(); + AddRoundKey(0); + + // output = state + for (int i = 0; i < (4 * Nb); i++) + { + output[i] = State[i % 4][ i / 4]; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////// +//轮密钥加 +void Aes::AddRoundKey(int round) +{ + int i,j; //i行 j列 //因为密钥w是一列一列排列的,即 k0 k4 k8 k12 + for(j=0;j<4;j++) // k1 k5 k9 k13 + { // k2 k6 k10k14 + for(i=0;i<4;i++) // k3 k7 k11k15 + { // 所以i行j列的下标是4*((round*4)+j)+i即16*round+4*j+i + State[i][j]=(unsigned char)((int)State[i][j]^(int)w[4*((round*4)+j)+i]); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////// +//字节代换函数 +void Aes::SubBytes() //Page 103 +{ + int i,j; + for(j=0;j<4;j++) + { + for(i=0;i<4;i++) + { + State[i][j]=AesSbox[State[i][j]]; + //因为 16*(State[i][j]>>4)+State[i][j]&0x0f=State[i][j] + + + } + } +} + +void Aes::InvSubBytes() +{ + int i,j; + for(j=0;j<4;j++) + { + for(i=0;i<4;i++) + { + State[i][j]=AesiSbox[State[i][j]]; //因为 16*(State[i][j]>>4)+State[i][j]&0x0f=State[i][j] + } + } + +} +//////////////////////////////////////////////////////////////////////////////////////////////// +void Aes::ShiftRows() +{ + unsigned char temp[4*4]; //Page105 + int i,j; + for(j=0;j<4;j++) + { + for(i=0;i<4;i++) + { + temp[4*i+j]=State[i][j]; + } + } + for(i=1;i<4;i++) + { + for(j=0;j<4;j++) + { + if(i==1)State[i][j]=temp[4*i+(j+1)%4]; //第一行左移1位 + else if(i==2)State[i][j]=temp[4*i+(j+2)%4]; //第二行左移2位 + else if(i==3)State[i][j]=temp[4*i+(j+3)%4]; //第三行左移3位 + } + } + +} +void Aes::InvShiftRows() +{ + unsigned char temp[4*4]; + int i,j; + for(j=0;j<4;j++) + { + for(i=0;i<4;i++) + { + temp[4*i+j]=State[i][j]; + } + } + for(i=1;i<4;i++) + { + for(j=0;j<4;j++) + { + //if(i==1)State[i][j]=temp[4*i+(j-1)%4]; 在此犯了一个错误 -1%4=-1 而不是3,所以采用了下面再加一个4的做法 + if(i==1)State[i][j]=temp[4*i+(j+3)%4]; //第一行右移1位 j-1+4=j+3 + else if(i==2)State[i][j]=temp[4*i+(j+2)%4]; //第二行右移2位 j-2+4=j+2 + else if(i==3)State[i][j]=temp[4*i+(j+1)%4]; //第三行右移3位 j-3+4=j+2 + } + } + +} +//////////////////////////////////////////////////////////////////////////////////////////////// +void Aes::MixColumns() +{ + unsigned char temp[4*4]; + int i,j; + for(j=0;j<4;j++) //2 3 1 1 列混淆矩阵 Page107 + { //1 2 3 1 + for(i=0;i<4;i++) //1 1 2 3 + { //3 1 1 2 + temp[4*i+j]=State[i][j]; + } + } + for(j=0;j<4;j++) + { + State[0][j] = (unsigned char) ( (int)gfmultby02(temp[0+j]) ^ (int)gfmultby03(temp[4*1+j]) ^ + (int)gfmultby01(temp[4*2+j]) ^ (int)gfmultby01(temp[4*3+j]) ); + State[1][j] = (unsigned char) ( (int)gfmultby01(temp[0+j]) ^ (int)gfmultby02(temp[4*1+j]) ^ + (int)gfmultby03(temp[4*2+j]) ^ (int)gfmultby01(temp[4*3+j]) ); + State[2][j] = (unsigned char) ( (int)gfmultby01(temp[0+j]) ^ (int)gfmultby01(temp[4*1+j]) ^ + (int)gfmultby02(temp[4*2+j]) ^ (int)gfmultby03(temp[4*3+j]) ); + State[3][j] = (unsigned char) ( (int)gfmultby03(temp[0+j]) ^ (int)gfmultby01(temp[4*1+j]) ^ + (int)gfmultby01(temp[4*2+j]) ^ (int)gfmultby02(temp[4*3+j]) ); + } + +} +void Aes::InvMixColumns() +{ + unsigned char temp[4*4]; + int i,j; + for (i = 0; i < 4; i++) // copy State into temp[] + { + for (j = 0; j < 4; j++) //0e 0b 0d 09 逆变换矩阵 Page108 + { //09 0e 0b 0d + temp[4*i+j] = State[i][j]; //0d 09 0e 0b + } //0b 0d 09 0e + } + + for (j = 0; j < 4; j++) + { + State[0][j] = (unsigned char) ( (int)gfmultby0e(temp[j]) ^ (int)gfmultby0b(temp[4+j]) ^ + (int)gfmultby0d(temp[4*2+j]) ^ (int)gfmultby09(temp[4*3+j]) ); + State[1][j] = (unsigned char) ( (int)gfmultby09(temp[j]) ^ (int)gfmultby0e(temp[4+j]) ^ + (int)gfmultby0b(temp[4*2+j]) ^ (int)gfmultby0d(temp[4*3+j]) ); + State[2][j] = (unsigned char) ( (int)gfmultby0d(temp[j]) ^ (int)gfmultby09(temp[4+j]) ^ + (int)gfmultby0e(temp[4*2+j]) ^ (int)gfmultby0b(temp[4*3+j]) ); + State[3][j] = (unsigned char) ( (int)gfmultby0b(temp[j]) ^ (int)gfmultby0d(temp[4+j]) ^ + (int)gfmultby09(temp[4*2+j]) ^ (int)gfmultby0e(temp[4*3+j]) ); + } +} +//////////////////////////////////////////////////////////////////////////////////////////////// +unsigned char Aes::gfmultby01(unsigned char b) +{ + return b; +} +unsigned char Aes::gfmultby02(unsigned char b) +{ + if (b < 0x80) + return (unsigned char)(int)(b <<1); + else + return (unsigned char)( (int)(b << 1) ^ (int)(0x1b) ); +} + +unsigned char Aes::gfmultby03(unsigned char b) +{ + return (unsigned char) ( (int)gfmultby02(b) ^ (int)b ); +} + +unsigned char Aes::gfmultby09(unsigned char b) +{ + return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)b ); +} + +unsigned char Aes::gfmultby0b(unsigned char b) +{ + return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^ + (int)gfmultby02(b) ^ (int)b ); +} + +unsigned char Aes::gfmultby0d(unsigned char b) +{ + return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^ + (int)gfmultby02(gfmultby02(b)) ^ (int)(b) ); +} + +unsigned char Aes::gfmultby0e(unsigned char b) +{ + return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^ + (int)gfmultby02(gfmultby02(b)) ^(int)gfmultby02(b) ); +} + +TAesClass::TAesClass() +{ + m_lpAes=NULL; + InitializePrivateKey(16,(unsigned char*)"\x49\x76\x48\x6B\x27\x66\x7E\x65\x72\x35\x73\x15\x8C\x3B\x80\x40"); +} + +TAesClass::~TAesClass() +{ + if (m_lpAes!=NULL) + { + delete m_lpAes; + } +} +//------------------------------------------------------------------------------------------------------------ +// 编写人员:wfnhddd +// +// 函数名称:InitializeAes +// +// 函数描述:初始化AES 密钥,密钥用于加密解密 +// +// 调用参数:详细说明参考 MSDN 中的相关描述或相关的开发文档 +// +// 返回数值:无 +// +// 最近修改:2009 年 08 月 07 日 +//------------------------------------------------------------------------------------------------------------ + + +VOID TAesClass::InitializePrivateKey(DWORD KeySize,UCHAR *KeyBytes) +{ + if (m_lpAes) + { + delete m_lpAes; + m_lpAes=NULL; + } + m_lpAes=new Aes(KeySize,KeyBytes); + +} + +//------------------------------------------------------------------------------------------------------------ +// 编写人员:wfnhddd +// +// 函数名称:OnAesEncrypt +// +// 函数描述:用AES加密算法加密数据 +// +// 调用参数:详细说明参考 MSDN 中的相关描述或相关的开发文档 +// +// 返回数值:加密后的数据大小 ,错误返回值 0 +// +// 最近修改:2009 年 08 月 07 日 +//------------------------------------------------------------------------------------------------------------ + +DWORD TAesClass::OnAesEncrypt(LPVOID InBuffer,DWORD InLength,LPVOID OutBuffer) +{ + DWORD OutLength=0; + if (m_lpAes==NULL||OutBuffer==NULL) + { + return 0; + } + + UCHAR *lpCurInBuff=(UCHAR *)InBuffer; + UCHAR *lpCurOutBuff=(UCHAR *)OutBuffer; + long blocknum=InLength/16; + long leftnum=InLength%16; + for(long i=0;iCipher(lpCurInBuff,lpCurOutBuff); + lpCurInBuff+=16; + lpCurOutBuff+=16; + OutLength+=16; + } + if(leftnum) //多余出leftnum 字节 则加密时 多出16-leftnum 个字节 + { + UCHAR inbuff[16]; + memset(inbuff,0,16); + memcpy(inbuff,lpCurInBuff,leftnum); + m_lpAes->Cipher(inbuff,lpCurOutBuff); + lpCurOutBuff+=16; + OutLength+=16; + } + //新增16个字节,用以确定增加的字节数 + UCHAR extrabuff[16]; + memset(extrabuff,0,16); + *((LPDWORD)extrabuff)=16+(16-leftnum)%16; //多出16+(16-leftnum)%16个字节 + m_lpAes->Cipher(extrabuff,lpCurOutBuff); + OutLength+=16; + return OutLength; + +} + + +//------------------------------------------------------------------------------------------------------------ +// 编写人员:wfnhddd +// +// 函数名称:OnAesUncrypt +// +// 函数描述:用AES加密算法解密数据 +// +// 调用参数:详细说明参考 MSDN 中的相关描述或相关的开发文档 +// +// 返回数值:解密后的数据大小 ,错误返回值 0 +// +// 最近修改:2009 年 08 月 07 日 +//------------------------------------------------------------------------------------------------------------ +DWORD TAesClass::OnAesUncrypt(LPVOID InBuffer,DWORD InLength,LPVOID OutBuffer) +{ + DWORD OutLength=0; + if (m_lpAes==NULL||OutBuffer==NULL) + { + return 0; + } + UCHAR *lpCurInBuff=(UCHAR *)InBuffer; + UCHAR *lpCurOutBuff=(UCHAR *)OutBuffer; + long blocknum=InLength/16; + long leftnum=InLength%16; + if(leftnum) + { + return 0; + } + for(long i=0;iInvCipher(lpCurInBuff,lpCurOutBuff); + lpCurInBuff+=16; + lpCurOutBuff+=16; + OutLength+=16; + } + + UCHAR *lpExtraInBuff=lpCurOutBuff-16; + DWORD dwExtraBytes=*((LPDWORD)lpExtraInBuff); + return (OutLength-dwExtraBytes); + +} diff --git a/Aes/TAesClass.h b/Aes/TAesClass.h new file mode 100644 index 0000000..8e5ae9a --- /dev/null +++ b/Aes/TAesClass.h @@ -0,0 +1,134 @@ +#ifndef __TAESCLASS_H__ +#define __TAESCLASS_H__ +#include +#include +#include +#include + +typedef unsigned long DWORD; +typedef unsigned char UCHAR,*PUCHAR; +typedef void *PVOID,*LPVOID; +typedef unsigned char byte; +typedef DWORD *PDWORD,*LPDWORD; + +#ifndef VOID +#define VOID void +#endif + +//#pragma once + +//enum KeySize { Bits128, Bits192, Bits256 }; // key size, in bits, for construtor +#define Bits128 16 +#define Bits192 24 +#define Bits256 32 +#if 0 +static unsigned char AesSbox[16*16]= +{// populate the Sbox matrix + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /*0*/ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + /*1*/ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + /*2*/ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + /*3*/ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + /*4*/ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + /*5*/ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + /*6*/ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + /*7*/ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + /*8*/ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + /*9*/ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + /*a*/ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + /*b*/ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + /*c*/ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + /*d*/ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + /*e*/ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + /*f*/ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +}; + +static unsigned char AesiSbox[16*16]= +{ + // populate the iSbox matrix + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /*0*/ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + /*1*/ 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + /*2*/ 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + /*3*/ 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + /*4*/ 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + /*5*/ 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + /*6*/ 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + /*7*/ 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + /*8*/ 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + /*9*/ 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + /*a*/ 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + /*b*/ 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + /*c*/ 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + /*d*/ 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + /*e*/ 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + /*f*/ 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d +}; +static unsigned char AesRcon[11*4]= +{ + 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00 +}; +#endif +extern unsigned char AesSbox[16*16]; +extern unsigned char AesiSbox[16*16]; +extern unsigned char AesRcon[11*4]; +class Aes // Advanced Encryption Standard +{ +public: + ~Aes(); + Aes(); + Aes(int keySize, unsigned char* keyBytes); + unsigned char State[4][4]; + void Cipher(unsigned char* input, unsigned char* output); // encipher 16-bit input + void InvCipher(unsigned char* input, unsigned char* output); // decipher 16-bit input +private: + int Nb; // block size in 32-bit words. Always 4 for AES. (128 bits). + int Nk; // key size in 32-bit words. 4, 6, 8. (128, 192, 256 bits). + int Nr; // number of rounds. 10, 12, 14. + + unsigned char key[32]; + unsigned char w[16*15]; + + void SetNbNkNr(int keySize); + void AddRoundKey(int round); //轮密钥加 + void SubBytes(); //S盒字节代换 + void InvSubBytes(); //逆S盒字节代换 + void ShiftRows(); //行移位 + void InvShiftRows(); + void MixColumns(); //列混淆 + void InvMixColumns(); + unsigned char gfmultby01(unsigned char b); + unsigned char gfmultby02(unsigned char b); + unsigned char gfmultby03(unsigned char b); + unsigned char gfmultby09(unsigned char b); + unsigned char gfmultby0b(unsigned char b); + unsigned char gfmultby0d(unsigned char b); + unsigned char gfmultby0e(unsigned char b); + void KeyExpansion(); //密钥扩展 + unsigned char* SubWord(unsigned char* word); //密钥S盒字代换 + unsigned char* RotWord(unsigned char* word); //密钥移位 + +}; + +class TAesClass +{ +public: + TAesClass(); + ~TAesClass(); + void InitializePrivateKey(DWORD KeySize,UCHAR *KeyBytes); //AES 密钥初始化 + DWORD OnAesEncrypt(LPVOID InBuffer,DWORD InLength,LPVOID OutBuffer); //AES 加密数据 + DWORD OnAesUncrypt(LPVOID InBuffer,DWORD InLength,LPVOID OutBuffer); //AES 解密数据 +private: + Aes * m_lpAes; +}; +#endif diff --git a/BarCode/barcode.h b/BarCode/barcode.h new file mode 100644 index 0000000..6b9bdf4 --- /dev/null +++ b/BarCode/barcode.h @@ -0,0 +1,119 @@ +/* + * barcode.h -- definitions for libbarcode + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _BARCODE_H_ +#define _BARCODE_H_ + +#include + +#define BARCODE_VERSION "0.98" +#define BARCODE_VERSION_INT 9800 + +/* + * The object + */ +struct Barcode_Item { + int flags; /* type of encoding and decoding */ + char *ascii; /* malloced */ + char *partial; /* malloced too */ + char *textinfo; /* information about text positioning */ + char *encoding; /* code name, filled by encoding engine */ + int width, height; /* output units */ + int xoff, yoff; /* output units */ + int margin; /* output units */ + double scalef; /* requested scaling for barcode */ + int error; /* an errno-like value, in case of failure */ +}; + +/* + * The flags field + */ +#define BARCODE_DEFAULT_FLAGS 0x00000000 + +#define BARCODE_ENCODING_MASK 0x000000ff /* 256 possibilites... */ +#define BARCODE_NO_ASCII 0x00000100 /* avoid text in output */ +#define BARCODE_NO_CHECKSUM 0x00000200 /* avoid checksum in output */ + +#define BARCODE_OUTPUT_MASK 0x000ff000 /* 256 output types */ +#define BARCODE_OUT_EPS 0x00001000 +#define BARCODE_OUT_PS 0x00002000 +#define BARCODE_OUT_PCL 0x00004000 /* by Andrea Scopece */ +/* PCL_III 0x00008000 */ +#define BARCODE_OUT_PCL_III 0x0000C000 +#define BARCODE_OUT_NOHEADERS 0x00100000 /* no header nor footer */ + +enum { + BARCODE_ANY = 0, /* choose best-fit */ + BARCODE_EAN, + BARCODE_UPC, /* upc == 12-digit ean */ + BARCODE_ISBN, /* isbn numbers (still EAN13) */ + BARCODE_39, /* code 39 */ + BARCODE_128, /* code 128 (a,b,c: autoselection) */ + BARCODE_128C, /* code 128 (compact form for digits) */ + BARCODE_128B, /* code 128, full printable ascii */ + BARCODE_I25, /* interleaved 2 of 5 (only digits) */ + BARCODE_128RAW, /* Raw code 128 (by Leonid A. Broukhis) */ + BARCODE_CBR, /* Codabar (by Leonid A. Broukhis) */ + BARCODE_MSI, /* MSI (by Leonid A. Broukhis) */ + BARCODE_PLS, /* Plessey (by Leonid A. Broukhis) */ + BARCODE_93 /* code 93 (by Nathan D. Holmes) */ +}; + +#define BARCODE_DEFAULT_MARGIN 10 + +#ifdef __cplusplus +extern "C" { +#endif +/* + * Create and destroy barcode structures + */ +extern struct Barcode_Item *Barcode_Create(char *text); +extern int Barcode_Delete(struct Barcode_Item *bc); + +/* + * Encode and print + */ +extern int Barcode_Encode(struct Barcode_Item *bc, int flags); +extern int Barcode_Print(struct Barcode_Item *bc, FILE *f, int flags); + +/* + * Choose the position + */ +extern int Barcode_Position(struct Barcode_Item *bc, int wid, int hei, + int xoff, int yoff, double scalef); + +/* + * Do it all in one step + */ +extern int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, + int xoff, int yoff, int flags); + + +/* + * Return current version (integer and string) + */ +extern int Barcode_Version(char *versionname); + +#ifdef __cplusplus +} +#endif + +#endif /* _BARCODE_H_ */ diff --git a/BarCode/cmdline.c b/BarCode/cmdline.c new file mode 100644 index 0000000..a69a825 --- /dev/null +++ b/BarCode/cmdline.c @@ -0,0 +1,177 @@ +/* + * cmdline.c -- parse a command line using getopt, environment and defaults + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + * Changes: + * Michele Comitini (mcm@glisco.it): better handling of numeric type args. + */ + +#include +#include +#include + +#ifdef NO_GETOPT + /* use replacement */ + #include "compat/getopt.h" +#else + #include +#endif + +#include "cmdline.h" + +/* In case of error, print help string and return error (-1) */ +int commandline_errormsg(FILE *f, struct commandline *args, + char *prgname, char *messagehead) +{ + char *buffer; + char *buffer2; + int len; + struct commandline *ptr; + + if (!messagehead) { + fprintf(f,"%s: Error in cmdline\nPossible options:\n",prgname); + } else { + fprintf(f,"%s: %s",prgname,messagehead); + } + + for (ptr = args; ptr->option; ptr++) { + if (ptr->descrip) { + len = strlen(ptr->descrip); + len += ptr->default_v ? strlen(ptr->default_v) : 6; + len += ptr->env ? strlen(ptr->env) : 6; + buffer2 = malloc(len+3); /* 3 to be safe :) */ + len += 32; + if (buffer2) { + buffer = malloc(len); + if (buffer) { + sprintf(buffer2, ptr->descrip, + ptr->default_v ? ptr->default_v : "(none)", + ptr->env ? ptr->env : "(none)"); + sprintf(buffer, " -%c %s %s", ptr->option, + ptr->type ? "" : " ", buffer2); + fprintf(f, "%s\n",buffer); + free(buffer); + } + free(buffer2); + } + } + } + return -1; +} + +/* + * Associate formats to type. + */ +struct type_fmt { + enum option_type type; + char *fmt; +}; +static struct type_fmt formats[] = { + {CMDLINE_I, "%i%s"}, /* the trailing "%s" is used for error check */ + {CMDLINE_D, "%d%s"}, + {CMDLINE_X, "%x%s"}, + {CMDLINE_O, "%o%s"}, + {CMDLINE_F, "%lf%s"}, + {CMDLINE_P, "%p%s"}, + {0, NULL} /* If we get here, it's CMDLINE_S: no sscanf buf strcpy() */ +}; + + +/* Parse one argument (default or provided) */ +static int commandline_oneopt(struct commandline *ptr, char *value) +{ + struct type_fmt *tptr; + char *trash = value ? strdup(value) : NULL; + + /* convert it, if needed */ + if ((ptr->type != CMDLINE_NONE) && ptr->result) { + for (tptr = formats; tptr->type; tptr++) + if (tptr->type == ptr->type) + break; + if (!tptr->type) /* not found: it is a string */ + *(char **)(ptr->result) = value; + else + if (sscanf(value, tptr->fmt, ptr->result, trash)!=1) { + free(trash); + return -1; + } + } + if (trash) + free(trash); + + if ((ptr->type == CMDLINE_NONE) && ptr->result) /* no type, just count */ + (*(int *)(ptr->result))++; + + /* call the function, if needed */ + if (ptr->fun) { + if (ptr->type) { + if (ptr->result) return ptr->fun(ptr->result); /* converted */ + return ptr->fun(value); /* type, but not converted */ + } + return ptr->fun(NULL); /* no type: just call it */ + } + return 0; +} + +/* The main function */ +int commandline(struct commandline *args, int argc, char **argv, + char *errorhead) +{ + struct commandline *ptr; + char *getopt_desc = (char *)calloc(512, 1); + int desc_offset = 0; + int opt, retval; + char *value; + + /* Build getopt string and process defaults values */ + for (ptr = args; ptr->option; ptr++) { + getopt_desc[desc_offset++] = ptr->option; + if (ptr->type) getopt_desc[desc_offset++] = ':'; + + value = NULL; + if (ptr->env) + value = getenv(ptr->env); + if (!value) + value = ptr->default_v; + if (value && (retval = commandline_oneopt(ptr, value))) { + /* + * if the function returns a specific (not -1) value, it already + * printed its message, so avoid the generic help + */ + if (retval == -1) + commandline_errormsg(stderr, args, argv[0], errorhead); + return retval; + } + } + + /* Run getopt and process material */ + while ((opt = getopt(argc, argv, getopt_desc)) != -1) { + for (ptr = args; ptr->option; ptr++) + if (opt == ptr->option) + break; + if (!ptr->option) /* unknown option */ + return commandline_errormsg(stderr, args, argv[0], errorhead); + if ( (retval = commandline_oneopt(ptr, optarg)) ) { /* wrong arg */ + if (retval == -1) + commandline_errormsg(stderr, args, argv[0], errorhead); + return retval; + } + } + return 0; +} diff --git a/BarCode/cmdline.h b/BarCode/cmdline.h new file mode 100644 index 0000000..6931991 --- /dev/null +++ b/BarCode/cmdline.h @@ -0,0 +1,58 @@ +/* + * cmdline.h -- generic commandline editing (uses getopt, only short) + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + */ + +/* + * The options may have different arguments of different type + */ +enum option_type { + CMDLINE_NONE=0, /* no argument after option */ + CMDLINE_I, /* integer (any base) */ + CMDLINE_D, /* decimal integer */ + CMDLINE_X, /* hex integer */ + CMDLINE_O, /* octal integer */ + CMDLINE_S, /* string */ + CMDLINE_F, /* double float */ + CMDLINE_P, /* pointer */ +}; + + +struct commandline { + int option; /* Single byte: option id */ + int type; /* Type of argument, used in sscanf */ + void *result; /* Store data here, if non null */ + int (*fun)(void *); /* Call if defined: arg is "result" or input string */ + char *env; /* Where to get runtime defaults, may be NULL */ + char *default_v; /* The compile-time default, may be NULL */ + char *descrip; /* For err msg. May have %s's for default and env */ +}; + +/* returns: 0 or -1. "optarg" is global (see getopt) */ +extern int commandline(struct commandline *args, + int argc, char **argv, char *errorhead); + +/* prints an error message based on "args" */ +extern int commandline_errormsg(FILE *f, struct commandline *args, + char *prgname, char *messagehead); + + + + diff --git a/BarCode/codabar.c b/BarCode/codabar.c new file mode 100644 index 0000000..7065b9e --- /dev/null +++ b/BarCode/codabar.c @@ -0,0 +1,182 @@ +/* + * codabar.c -- encoding for Codabar + * + * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + + +/* this is ordered in decades to simplify encoding */ +static char alphabet[] = + "0123456789" "-$:/.+ABCD"; + +#define CODE_A 16 +#define CODE_B 17 + +#define NARROW 12 +#define WIDE 14 + +/* Patterns */ +static char *patterns[] = { +"1111133","1111331","1113113","3311111","1131131", +"3111131","1311113","1311311","1331111","3113111", +"1113311","1133111","3111313","3131113","3131311", +"1131313","1133131","1313113","1113133","1113331" }; + +/* + * Check that the text can be encoded. Returns 0 or -1. + * If it's all lowecase convert to uppercase and accept it. + * If the first character is a letter (A to D), the last one must be too; + * no other character should be a letter. + */ +int Barcode_cbr_verify(unsigned char *text) +{ + int i, lower=0, upper=0; + int startpresent = 0; + + if (!strlen(text)) + return -1; + for (i=0; text[i]; i++) { + char * pos; + if (isupper(text[i])) upper++; + if (islower(text[i])) lower++; + pos = strchr(alphabet,toupper(text[i])); + if (!pos) + return -1; + if (i == 0 && pos - alphabet >= CODE_A) + startpresent = 1; + else if (pos - alphabet >= CODE_A && + (!startpresent || i != strlen(text) - 1)) + return -1; + } + if (lower && upper) + return -1; + return 0; +} + +static int add_one(char *ptr, int code) +{ + sprintf(ptr,"1%s", /* separator */ patterns[code]); + return 0; +} + +/* + * The encoding functions fills the "partial" and "textinfo" fields. + * Lowercase chars are converted to uppercase + */ +int Barcode_cbr_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *c, *ptr, *textptr; + int i, code, textpos, usesum, checksum = 0, startpresent; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("codabar"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + /* the partial code is 8 * (head + text + check + tail) + margin + term. */ + partial = malloc( (strlen(text) + 3) * 8 + 2); + if (!partial) { + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn:fff:c " * (strlen + check) +term */ + textinfo = malloc(10*(strlen(text) + 1) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + return -1; + } + + ptr = partial; + textptr = textinfo; + textpos = 0; + usesum = bc->flags & BARCODE_NO_CHECKSUM ? 0 : 1; + /* if no start character specified, A is used as a start character */ + if (!isalpha(text[0])) { + add_one(ptr, CODE_A); + ptr += strlen(ptr); + textpos = WIDE; + checksum = CODE_A; + startpresent = 0; + } else { + startpresent = 1; + } + for (i=0; ierror = EINVAL; /* impossible if text is verified */ + free(partial); + free(textinfo); + return -1; + } + code = c - alphabet; + add_one(ptr, code); + sprintf(textptr, "%i:12:%c ", textpos, toupper(text[i])); + textpos += code < 12 ? NARROW : WIDE; + textptr += strlen(textptr); + ptr += strlen(ptr); + checksum += code; + if (startpresent && usesum && i == strlen(text) - 2) { + /* stuff a check symbol before the stop */ + c = strchr(alphabet, toupper(text[i+1])); + if (!c) /* impossible */ + continue; + code = c - alphabet; + checksum += code; + + /* Complement to a multiple of 16 */ + checksum = (checksum + 15) / 16 * 16 - checksum; + add_one(ptr, checksum); + ptr += strlen(ptr); + } + } + if (!startpresent) { + if (usesum) { + /* if no start character specified, B is used as a stop char */ + checksum += CODE_B; + checksum = (checksum + 15) / 16 * 16 - checksum; + add_one(ptr, checksum); + ptr += strlen(ptr); + } + add_one(ptr, CODE_B); + } + bc->partial = partial; + bc->textinfo = textinfo; + + return 0; +} diff --git a/BarCode/code128.c b/BarCode/code128.c new file mode 100644 index 0000000..3eed959 --- /dev/null +++ b/BarCode/code128.c @@ -0,0 +1,618 @@ +/* + * code128.c -- encoding for code128 (A, B, C) + * + * Copyright (c) 1999,2000 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" +//0 b1a2a4 123221 223211 221132 221231 213212 223112 312131 311222 314111 b3c1a1b +static char *codeset[] = { + "212222", "222122", "222221", "121223", "121322", /* 0 - 4 */ + "131222", "122213", "122312", "132212", "221213", + "221312", "231212", "112232", "122132", "122231", /* 10 - 14 */ + "113222", "123122", "123221", "223211", "221132", + "221231", "213212", "223112", "312131", "311222", /* 20 - 24 */ + "321122", "321221", "312212", "322112", "322211", + "212123", "212321", "232121", "111323", "131123", /* 30 - 34 */ + "131321", "112313", "132113", "132311", "211313", + "231113", "231311", "112133", "112331", "132131", /* 40 - 44 */ + "113123", "113321", "133121", "313121", "211331", + "231131", "213113", "213311", "213131", "311123", /* 50 - 54 */ + "311321", "331121", "312113", "312311", "332111", + "314111", "221411", "431111", "111224", "111422", /* 60 - 64 */ + "121124", "121421", "141122", "141221", "112214", + "112412", "122114", "122411", "142112", "142211", /* 70 - 74 */ + "241211", "221114", "413111", "241112", "134111", + "111242", "121142", "121241", "114212", "124112", /* 80 - 84 */ + "124211", "411212", "421112", "421211", "212141", + "214121", "412121", "111143", "111341", "131141", /* 90 - 94 */ + "114113", "114311", "411113", "411311", "113141", + "114131", "311141", "411131", "b1a4a2", "b1a2a4", /* 100 - 104 */ + "b1a2c2", "b3c1a1b" +}; +// "114131", "311141", "411131", "211412", "211214", /* 100 - 104 */ +// "211232", "2331112" +//0 b1a2a4 123221 223211 221132 221231 213212 223112 312131 311222 314111 b3c1a1b +// 211214 2331112 +/* +1,1,4,1,3,1,// CodeB FNC4 CodeB +3,1,1,1,4,1,// FNC4 CodeA CodeA +4,1,1,1,3,1,// FNC1 FNC1 FNC1 +2,1,1,4,1,2,// StartA +2,1,1,2,1,4,// StartB +2,1,1,2,3,2,// StartC +2,3,3,1,1,1,2,// Stop +*/ +#define START_A 103 +#define START_B 104 +#define START_C 105 +#define STOP 106 +#define SHIFT 98 /* only A and B */ +#define CODE_A 101 /* only B and C */ +#define CODE_B 100 /* only A and C */ +#define CODE_C 99 /* only A and B */ +#define FUNC_1 102 /* all of them */ +#define FUNC_2 97 /* only A and B */ +#define FUNC_3 96 /* only A and B */ +/* FUNC_4 is CODE_A when in A and CODE_B when in B */ + +#define SYMBOL_WID 11 /* all of them are 11-bar wide */ + +/* + * code 128-b includes all printable ascii chars + */ + +int Barcode_128b_verify(unsigned char *text) +{ + if (text[0] == '\0') + return -1; + while (*text && *text>=32 && !(*text&0x80)) + text++; + if (*text) + return -1; /* a non-ascii char */ + return 0; /* ok */ +} + +int Barcode_128b_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *textptr; + int i, code, textpos, checksum = 0; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("code 128-B"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + /* the partial code is 6* (head + text + check + tail) + final + term. */ + partial = malloc( (strlen(text) + 4) * 6 +2); + if (!partial) { + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn:fff:c " * strlen +term */ + textinfo = malloc(10*strlen(text) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + return -1; + } + + /* up to now, it was the same code as other encodings */ + + strcpy(partial, "0"); /* the first space */ + strcat(partial, codeset[START_B]); + checksum += START_B; /* the start char is counted in the checksum */ + textptr = textinfo; + textpos = SYMBOL_WID; + + for (i=0; ierror = EINVAL; /* impossible if text is verified */ + free(partial); + free(textinfo); + return -1; + } + code = text[i]-32; + strcat(partial, codeset[code]); + checksum += code * (i+1); /* first * 1 + second * 2 + third * 3... */ + sprintf(textptr, "%i:12:%c ", textpos, text[i]); + textptr += strlen(textptr); + textpos += SYMBOL_WID; /* width of each code */ + } + /* Add the checksum, independent of BARCODE_NO_CHECKSUM */ + checksum %= 103; + strcat(partial, codeset[checksum]); + /* and the end marker */ + strcat(partial, codeset[STOP]); + + bc->partial = partial; + bc->textinfo = textinfo; + return 0; +} + +/* + * code 128-c is only digits, but two per symbol + */ + +int Barcode_128c_verify(unsigned char *text) +{ + if (text[0] == '\0') + return -1; + /* must be an even number of digits */ + if (strlen(text)%2) + return -1; + /* and must be all digits */ + for (; *text; text++) + if (!isdigit(*text)) + return -1; + return 0; +} + +int Barcode_128c_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *textptr; + int i, code, textpos, checksum = 0; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("code 128-C"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + /* the partial code is 6* (head + text + check + tail) + final + term. */ + partial = malloc( (strlen(text) + 3) * 6 +2); + if (!partial) { + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn.5:fff:c " * strlen +term */ + textinfo = malloc(12*strlen(text) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + return -1; + } + + strcpy(partial, "0"); /* the first space */ + strcat(partial, codeset[START_C]); + checksum += START_C; /* the start char is counted in the checksum */ + textptr = textinfo; + textpos = SYMBOL_WID; + + for (i=0; text[i]; i+=2) { + if (!isdigit(text[i]) || !isdigit(text[i+1])) { + bc->error = EINVAL; /* impossible if text is verified */ + free(partial); + free(textinfo); + return -1; + } + code = (text[i]-'0') * 10 + text[i+1]-'0'; + strcat(partial, codeset[code]); + checksum += code * (i/2+1); /* first * 1 + second * 2 + third * 3... */ + + /* print as "%s", because we have ".5" positions */ + sprintf(textptr, "%g:9:%c %g:9:%c ", (double)textpos, text[i], + textpos + (double)SYMBOL_WID/2, text[i+1]); + textptr += strlen(textptr); + textpos += SYMBOL_WID; /* width of each code */ + } + /* Add the checksum, independent of BARCODE_NO_CHECKSUM */ + checksum %= 103; + strcat(partial, codeset[checksum]); + /* and the end marker */ + strcat(partial, codeset[STOP]); + + bc->partial = partial; + bc->textinfo = textinfo; + + return 0; +} + +/* + * generic (full-featured) code128 implementation: it selects between + * A, B, C according to the data being encoded. F1, F2, F3, F4 are expressed + * using ascii chars 0xc1, 0xc2, 0xc3, 0xc4 (0301, 0302, 0303, 0304). + * Char '\0' is expressed by 0x80 (0200). + */ + +int Barcode_128_verify(unsigned char *text) +{ + if (text[0] == '\0') + return -1; + while (*text && (*text<=0x80 || (*text >= 0xc1 && *text <= 0xc4))) + text++; + if (*text) + return -1; /* unencodable character */ + return 0; /* ok */ +} + + +/* + * These functions are extracted from Barcode_128_encode for clarity. + * It deals with choosing the symbols used to represent the text + * and returns a dynamic array of integers, terminated by -1. + * + * The algorithm used in choosing the codes comes from App 2 of + * "El Codigo Estandar EAN/UCC 128", courtesy of AECOC, Spain. + * Thanks to Dani Pardo for getting permission and giving me a copy + * of the document + */ + +#define NEED_CODE_A(c) ((c)<32 || (c)==0x80) +#define NEED_CODE_B(c) ((c)>=96 && (c)<128) + +static int Barcode_a_or_b(unsigned char *text) +{ + for ( ; *text; text++) { + if (NEED_CODE_A(*text)) + return 'A'; + if (NEED_CODE_B(*text)) + return 'B'; + } + return 0; /* any */ +} + +/* code is either 'A' or 'B', and value must be valid */ +static int Barcode_encode_as(int code, int value) +{ + + /* first check the special chars */ + if (value == 0xC1) return FUNC_1; + if (value == 0xC2) return FUNC_2; + if (value == 0xC3) return FUNC_3; + if (value == 0xC4) { /* F4 */ + if (code == 'A') return CODE_A; + return CODE_B; + } + + /* then check ascii values */ + if (value >= 0x20 && value <= 0x5F) + return value - 0x20; /* both codes */ + if (value == 0x80) return 64; /* code A */ + if (value < 0x20) return value+64; /* code A */ + if (value >= 0x60) return value - 0x20; /* code B */ + /* can't happen */ + return -1; +} + +static int *Barcode_128_make_array(struct Barcode_Item *bc, int *lptr) +{ + int len, *codes; + unsigned char *s; + int i=0, j, code, checksum; + + /* allocate twice the text length + 5, as this is the worst case */ + len = 2 * strlen(bc->ascii) + 5; + codes = malloc(len * sizeof(int)); + s = bc->ascii; + + /* choose the starting code */ + if (s[2]=='\0' && isdigit(s[0]) && isdigit(s[1])) { + code = 'C'; + } else if (isdigit(s[0])&&isdigit(s[1]) && isdigit(s[2])&&isdigit(s[3])) { + code = 'C'; + } else { + code = Barcode_a_or_b(s); + if (!code) code = 'B'; /* default */ + } + codes[i++] = START_A + code - 'A'; + + for (s = bc->ascii; *s; /* increments are in the loop */) { + switch(code) { + + case 'C': + if (s[0] == 0xC1) { /* F1 is valid */ + codes[i++] = FUNC_1; + s++; + } else if (isdigit(s[0]) && isdigit(s[1])) { + /* encode two digits */ + codes[i++] = (s[0]-'0') * 10 + s[1]-'0'; + s += 2; + } else { + /* change code */ + code = Barcode_a_or_b(s); + if (!code) code = 'B'; + codes[i++] = (code == 'A') ? CODE_A : CODE_B; + } + break; + + case 'B': + case 'A': + for (j=0; isdigit(s[j]); j++) + ; + if (j>=4) { /* if there are 4 or more digits, turn to C */ + if (j&1) { + /* odd number: encode one first */ + codes[i++] = *(s++) - ' '; + } + codes[i++] = CODE_C; + code = 'C'; + } else if (code == 'A' && NEED_CODE_B(*s)) { + /* check whether we should use SHIFT or change code */ + j = Barcode_a_or_b(s+1); + if (j == 'B') { + codes[i++] = CODE_B; + code = 'B'; + } else { + codes[i++] = SHIFT; + codes[i++] = Barcode_encode_as('B', *s); + s++; + } + } else if (code == 'B' && NEED_CODE_A(*s)) { + /* check whether we should use SHIFT or change code */ + j = Barcode_a_or_b(s+1); + if (j == 'A') { + codes[i++] = CODE_A; + code = 'A'; + } else { + codes[i++] = SHIFT; + codes[i++] = Barcode_encode_as('A', *s); + s++; + } + } else { + codes[i++] = Barcode_encode_as(code, *s); + s++; + } + break; + } + } + /* add the checksum */ + checksum = codes[0]; + for (j=1; j len) { + fprintf(stderr, "impossible: length is > allocated len\n"); + } + *lptr = i; + return codes; +} + +/* + * Encoding is tricky, in that we cannot print the ascii + * representation in an easy way. Therefore, just skip non-printable + * chars and try to fit the rest somehow. + */ +int Barcode_128_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *textptr; + int *codes; /* dynamic */ + int i, c, len; + double textpos, size, step; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("code 128"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + + codes = Barcode_128_make_array(bc, &len); + if (!codes) return -1; + + /* the partial code is 6*codelen + ini + term (+margin) */ + partial = malloc( 6 * len + 4); + if (!partial) { + bc->error = errno; + free(codes); + return -1; + } + + /* the text information is at most "nnn.n:ff.f:c " * strlen +term */ + textptr = textinfo = malloc(13*strlen(text) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + free(codes); + return -1; + } + + /* up to now, it was almost the same code as other encodings */ + + strcpy(partial, "0"); /* the first space */ + for (i=0; i 12.0) size = 12.0; + + /* align the text to the left, using its natural size */ + step = (int)(10 * (size/18.0 * SYMBOL_WID) + .5) / 10.0; + textpos = SYMBOL_WID; + + for (i=0; i 0xc0) c = ' '; /* F code */ + sprintf(textptr, "%g:%g:%c ", textpos, size, c); + textptr += strlen(textptr); + textpos += step; + } + + bc->partial = partial; + bc->textinfo = textinfo; + free(codes); + return 0; +} + +/* + * A raw 128 code is given as a sequence of space separated numbers + * from 0 to 105, starting from the start code to be (Leonid) + */ + +int Barcode_128raw_verify(unsigned char *text) +{ + int n; + unsigned val; + + if (!strlen(text)) + return -1; + while (*text) { + if (sscanf(text, "%u%n", &val, &n) < 1) + return -1; + if (val > 105) + return -1; + text += n; + } + return 0; +} + +int Barcode_128raw_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *textptr; + int i, n, count, code, textpos, checksum = 0; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("128raw"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + /* + * length of partial code is unknown in advance, but it is + * at most 6* (1+text/2 + check + tail) + final + terminator + */ + partial = malloc( (3+ strlen(text)/2) * 6 + 2); + if (!partial) { + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn.5:fff:c " * 1+strlen/2 +term */ + textinfo = malloc(12 * (1+strlen(text)/2) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + return -1; + } + + strcpy(partial, "0"); /* the first space */ + textptr = textinfo; + textpos = 0; + + for (i=0, count = 0; i < strlen(text); count++) { + if (sscanf(text + i, "%u%n", &code, &n) < 1) { + bc->error = EINVAL; /* impossible if text is verified */ + free(partial); + free(textinfo); + return -1; + } + strcat(partial, codeset[code]); + + /* + * since the start code is part of the "raw" input, it is + * counted in the checksum by itself + */ + if (!count) checksum += code; /* the start code */ + else checksum += code * count; /* first * 1 + second * 2 ... */ + + /* + * print as "%s", because we have ".5" positions + * also, use a size of 9 like codeC above, as each symbol is + * represented by two chars + */ + sprintf(textptr, "%g:9:%c %g:9:%c ", (double)textpos, + code >= 100 ? 'A' : code/10 + '0', + textpos + (double)SYMBOL_WID/2, code%10 + '0'); + textptr += strlen(textptr); + textpos += SYMBOL_WID; /* width of each code */ + i += n; + } + /* Add the checksum, independent of BARCODE_NO_CHECKSUM */ + checksum %= 103; + strcat(partial, codeset[checksum]); + /* and the end marker */ + strcat(partial, codeset[STOP]); + + bc->partial = partial; + bc->textinfo = textinfo; + + return 0; +} + diff --git a/BarCode/code39.c b/BarCode/code39.c new file mode 100644 index 0000000..3308c95 --- /dev/null +++ b/BarCode/code39.c @@ -0,0 +1,173 @@ +/* + * code39.c -- encoding for code39 + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + + +/* this is ordered in decades to simplify encoding */ +static char alphabet[] = + "1234567890" "ABCDEFGHIJ" "KLMNOPQRST" "UVWXYZ-. *" "$/+%"; + +/* the checksum alphabet has a different order */ +static char checkbet[] = + "0123456789" "ABCDEFGHIJ" "KLMNOPQRST" "UVWXYZ-. $" "/+%"; + +/* The first 40 symbols repeat this bar pattern */ +static char *bars[] = { + "31113","13113","33111","11313","31311", + "13311","11133","31131","13131","11331"}; + +/* The first 4 decades use these space patterns */ +static char *spaces[] = {"1311","1131","1113","3111"}; + +/* the last four symbols are special */ +static char *specialbars[] = { + "11111","11111","11111","11111"}; + +static char *specialspaces[] = { + "3331","3313","3133","1333"}; + +static char *fillers[]= { + "0a3a1c1c1a", + "1a3a1c1c1a" +}; + + +/* + * Check that the text can be encoded. Returns 0 or -1. + * If it's all lowecase convert to uppercase and accept it + */ +int Barcode_39_verify(unsigned char *text) +{ + int i, lower=0, upper=0; + + if (text[0] == '\0') + return -1; + for (i=0; text[i]; i++) { + if (isupper(text[i])) upper++; + if (islower(text[i])) lower++; + if (!strchr(alphabet,toupper(text[i]))) + return -1; + } + if (lower && upper) + return -1; + return 0; +} + +static int add_one(char *ptr, int code) +{ + char *b, *s; + + if (code < 40) { + b = bars[code%10]; + s = spaces[code/10]; + } else { + b = specialbars[code-40]; + s = specialspaces[code-40]; + } + sprintf(ptr,"1%c%c%c%c%c%c%c%c%c", /* separator */ + b[0], s[0], b[1], s[1], b[2], s[2], + b[3], s[3], b[4]); + return 0; +} + +/* + * The encoding functions fills the "partial" and "textinfo" fields. + * Lowercase chars are converted to uppercase + */ +int Barcode_39_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *c, *ptr, *textptr; + int i, code, textpos, checksum = 0; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("code 39"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + /* the partial code is 10* (head + text + check + tail) + margin + term. */ + partial = malloc( (strlen(text) + 3) * 10 +2); + if (!partial) { + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn:fff:c " * strlen +term */ + textinfo = malloc(10*strlen(text) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + return -1; + } + + strcpy(partial, fillers[0]); + ptr = partial + strlen(partial); + textptr = textinfo; + textpos = 22; + + for (i=0; text[i]; i++) { + c = strchr(alphabet, toupper(text[i])); + if (!c) { + bc->error = EINVAL; /* impossible if text is verified */ + free(partial); + free(textinfo); + return -1; + } + code = c - alphabet; + add_one(ptr, code); + c = strchr(checkbet,*c); + if (c) /* the '*' is not there */ + checksum += (c-checkbet); + sprintf(textptr, "%i:12:%c ", textpos, toupper(text[i])); + + textpos += 16; /* width of each code */ + textptr += strlen(textptr); + ptr += strlen(ptr); + } + /* Add the checksum */ + if ( (bc->flags & BARCODE_NO_CHECKSUM)==0 ) { + code = (strchr(alphabet, checkbet[checksum % 43]) - alphabet); + add_one(ptr, code); + } + strcat(ptr, fillers[1]); /* end */ + bc->partial = partial; + bc->textinfo = textinfo; + + return 0; +} diff --git a/BarCode/code93.c b/BarCode/code93.c new file mode 100644 index 0000000..73f8cee --- /dev/null +++ b/BarCode/code93.c @@ -0,0 +1,213 @@ +/* + * code39.c -- encoding for code39 + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * Copyright (c) 2001 Nathan D. Holmes / FedEx Services (ndholmes@fedex.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + + +/* this is ordered in decades to simplify encoding */ +static char alphabet[] = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"; + +static char *codeset[] = { + "131112", "111213", "111312", "111411", "121113", /* 0 - 4 */ + "121212", "121311", "111114", "131211", "141111", /* 5 - 9 */ + "211113", "211212", "211311", "221112", "221211", /* A - E */ + "231111", "112113", "112212", "112311", "122112", /* F - J */ + "132111", "111123", "111222", "111321", "121122", /* K - O */ + "131121", "212112", "212211", "211122", "211221", /* P - T */ + "221121", "222111", "112122", "112221", "122121", /* U - Y */ + "123111", "121131", "311112", "311211", "321111", /* Z - $ */ + "112131", "113121", "211131", "121221", "312111", /* / - (%) */ + "311121", "122211", "111141" /* (/) - (terminator) */ +}; + + +/* 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111 */ +/* 00000000001111111111222222222233333333334444444444555555555566666666667777777777888888888899999999990000000000111111111122222222 */ +/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 */ +static char shiftset[] = + "%$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%% /// ///// / /%%%%%% %%%%%%++++++++++++++++++++++++++%%%%%"; +static char shiftset2[] = + "UABCDEFGHIJKLMNOPQRSTUVWXYZABCDE ABC FGHIJ L ZFGHIJV KLMNOWABCDEFGHIJLKMNOPQRSTUVWXYZPQRST"; + +#define START_STOP 47 +#define EXTEND_DOLLAR 43 +#define EXTEND_PERCENT 44 +#define EXTEND_SLASH 45 +#define EXTEND_PLUS 46 + +/* + * Check that the text can be encoded. Returns 0 or -1. + * All of ASCII-7 is accepted. + */ +int Barcode_93_verify(unsigned char *text) +{ + int i; + + if (!strlen(text)) + return -1; + for (i=0; text[i]; i++) { + + /* Test if beyond the range of 7-bit ASCII */ + if ((int)text[i] > 127) + return -1; + } + return 0; +} + +/* + * The encoding functions fills the "partial" and "textinfo" fields. + * Lowercase chars are converted to uppercase + */ +int Barcode_93_encode(struct Barcode_Item *bc) +{ + static unsigned char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *c, *textptr; + int *checksum_str; + int i, code, textpos, checksum_len=0; + int c_checksum = 0; + int k_checksum = 0; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("code 93"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + + /* the partial code is 6 * (head + 2* text + 2* check + tail) + margin + term. */ + partial = malloc( (strlen(text) *2 + 4) * 6 +2); + if (!partial) { + bc->error = errno; + return -1; + } + + checksum_str = (int *)malloc( (strlen(text) + 3) * 2 * sizeof(int)); + if (!checksum_str) { + free(partial); + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn:fff:c " * strlen +term */ + textinfo = malloc(10*strlen(text) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + free(checksum_str); + return -1; + } + + textptr = textinfo; + textpos = 22; + strcpy(partial, "0"); + strcat(partial, codeset[START_STOP]); + + for (i=0; iflags & BARCODE_NO_CHECKSUM)==0 ) + { + for(i=1; i<=checksum_len; i++) + { + c_checksum += i * (int)checksum_str[checksum_len - i]; + k_checksum += (i+1) * (int)checksum_str[checksum_len - i]; + } + + c_checksum = c_checksum % 47; + k_checksum += c_checksum; + k_checksum = k_checksum % 47; + + strcat(partial, codeset[c_checksum]); + strcat(partial, codeset[k_checksum]); + + } + strcat(partial, codeset[START_STOP]); /* end */ + + /* Encodes final 1-unit width bar to turn the start character into a stop char */ + strcat(partial, "1"); + bc->partial = partial; + bc->textinfo = textinfo; + + return 0; +} diff --git a/BarCode/ean.c b/BarCode/ean.c new file mode 100644 index 0000000..0801a0e --- /dev/null +++ b/BarCode/ean.c @@ -0,0 +1,774 @@ +/* + * ean.c -- encoding for ean, upc and isbn + * + * Copyright (c) 1999 Alessandro Rubini + * Copyright (c) 1999 Prosa Srl. + * Copyright (c) 2001 Boszormenyi Zoltan + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + +/* + * IMPORTANT NOTE: if you are reading this file to learn how to add a + * new encoding type, this is the wrong place as there are too many + * special cases. Please refer to code39.c instead. If you want to + * learn how UPC, EAN, ISBN work, on the other hand, I did my best to + * commend things and hope you enjoy it. + */ + +/* + * These following static arrays are used to describe the barcode. + * + * The various forms of UPC and EAN are documented as using three + * different alphabets to encode the ten digits. However, each digit + * has exactly one encoding; only, it is sometimes mirrored. Moreover, + * if you represent the width of each symbol (bar/space) instead of + * the sequence of 1's and 0's, you find that even-parity and odd-parity + * encoding are exactly the same. So, here are the digits: */ +static char *digits[] = { + "3211","2221","2122","1411","1132", + "1231","1114","1312","1213","3112"}; + +/* + * What EAN encoding does is adding a leading digit (the 13th digit). + * Such an extra digit is encoded by mirroring three of the six digits that + * appear in the left half of the UPC code. Here how mirroring works: + */ +static char *ean_mirrortab[] = { + "------","--1-11","--11-1","--111-","-1--11", + "-11--1","-111--","-1-1-1","-1-11-","-11-1-" +}; + +/* + * UPC-E (the 6-digit one), instead, encodes the check character as + * a mirroring of the symbols. This is similar, but the encoding for "0" is + * different (EAN uses no mirroring for "0" to be compatible with UPC). + * The same rule is used for UPC-5 (the supplemental digits for ISBN) + */ +static char *upc_mirrortab[] = { + "---111","--1-11","--11-1","--111-","-1--11", + "-11--1","-111--","-1-1-1","-1-11-","-11-1-" +}; + +/* + * UPC-E mirroring for encoding "1" + */ +static char *upc_mirrortab1[] = { + "111---","11-1--","11--1-","11---1","1-11--", + "1--11-","1---11","1-1-1-","1-1--1","1--1-1" +}; + +/* UPC-2 has just two digits to mirror */ +static char *upc_mirrortab2[] = { + "11","1-","-1","--" +}; + +/* + * initial, middle, final guard bars (first symbol is a a space). + * EAN-13 overwrites the first "0" with "9" to make space for the extra digit. + */ +static char *guard[] = {"0a1a","1a1a1","a1a"}; + +/* initial, final guard bars for UPC-E*/ +static char *guardE[] = {"0a1a","1a1a1a"}; + +/* initial and inter-char guard bars for supplementals (first is space) */ +static char *guardS[] = {"9112","11"}; + +/* + * These functions are shortcuts I use in the encoding engine + */ +static int ean_make_checksum(char *text, int mode) +{ + int esum = 0, osum = 0, i; + int even=1; /* last char is even */ + + if (strchr(text, ' ')) + i = strchr(text, ' ') - text; /* end of first part */ + else + i = strlen(text); /* end of all */ + + while (i-- > 0) { + if (even) esum += text[i]-'0'; + else osum += text[i]-'0'; + even = !even; + } + if (!mode) { /* standard upc/ean checksum */ + i = (3*esum + osum) % 10; + return (10-i) % 10; /* complement to 10 */ + } else { /* add-5 checksum */ + i = (3*esum + 9*osum); + return i%10; + } +} + +/* + * Check that the text can be encoded. Returns 0 or -1. + * Accept: + * 13 or 12 digits: EAN-13 w/ or w/o checksum + * or + * 8 or 7 digits: EAN-8 w/ or w/o checksum. + * For both EAN-13 and EAN-8, accept an addon of 2 or 5 digits, + * separated by ' ' + */ +int Barcode_ean_verify(unsigned char *text) +{ + int i, len0, len, addon; + unsigned char tmp[24], *spc; + + len = strlen(text); + spc = strchr(text, ' '); + if (spc) { + len0 = spc - text; + addon = len - len0 - 1; + if (addon != 2 && addon != 5) + return -1; + for (i=len0+1; i= '5' && text[10] <= '9') { + memcpy(&result[1], text+1, 5); + result[6] = text[10]; + } else { + return NULL; + } + result[7] = chksum + '0'; + + return result; +} + +/* + * UPC-A is the same as EAN, but accept + * 12 or 11 digits (UPC-A w/ or w/o checksum) + * or accept UPC-E as: + * 6 digits (w/o number system and checksum): number system '0' assumed, + * 7 digits (either w/o number system or checksum), + * 8 digits (w/ number system and checksum) + * plus the 2 or 5-digit add-on + */ +int Barcode_upc_verify(unsigned char *text) +{ + int i, len0, len, addon; + unsigned char tmp[24], *spc; + + len = strlen(text); + spc = strchr(text, ' '); + if (spc) { + len0 = spc - text; + addon = len - len0 - 1; + if (addon != 2 && addon != 5) + return -1; + for (i=len0+1; iascii) { + bc->error = EINVAL; + return -1; + } + + /* Find out whether the barcode has addon and + * the length of the barcode w/o the addon. + */ + len = strlen(bc->ascii); + spc = strchr(bc->ascii, ' '); + if (spc) { + len0 = spc - bc->ascii; + addon = strlen(spc + 1); + if (addon != 2 && addon != 5) { + bc->error = EINVAL; /* impossible, actually */ + return -1; + } + } else { + len0 = len; + addon = 0; + } + + if (!bc->encoding) { + /* ISBN already wrote what it is; if unknown, find it out */ + + /* + * Do not decide only by barcode length, it may be ambiguous. + * Anyway, either the user specified the barcode type or + * we already found a fitting one. + */ + switch(bc->flags & BARCODE_ENCODING_MASK) { + case BARCODE_EAN: + switch (len0) { + case 7: case 8: + bc->encoding = strdup("EAN-8"); + encoding = EAN8; + break; + case 12: case 13: + bc->encoding = strdup("EAN-13"); + encoding = EAN13; + break; + default: + bc->error = -EINVAL; + return -1; + } + break; + + case BARCODE_UPC: + switch (len0) { + case 6: case 7: case 8: + bc->encoding = strdup("UPC-E"); + encoding = UPCE; + break; + case 11: case 12: + bc->encoding = strdup("UPC-A"); + encoding = UPCA; + break; + default: + bc->error = -EINVAL; + return -1; + } + break; + default: + /* else, it's wrong (impossible, as the text is checked) */ + bc->error = -EINVAL; + return -1; + } + } + + /* better safe than sorry */ + if (bc->partial) free(bc->partial); bc->partial = NULL; + if (bc->textinfo) free(bc->textinfo); bc->textinfo = NULL; + + if (encoding == UPCA) { /* add the leading 0 (not printed) */ + text[0] = '0'; + strcpy(text+1, bc->ascii); + } else if (encoding == UPCE) { + strcpy(text, upc_a_to_e(upc_e_to_a(bc->ascii))); + } else { + strcpy(text, bc->ascii); + } + + /* + * build the checksum and the bars: any encoding is slightly different + */ + if (encoding == UPCA || encoding == EAN13 || encoding == ISBN) { + if (!(encoding == UPCA && len0 == 12) && + !(encoding == EAN13 && len0 == 13)) { + checksum = ean_make_checksum(text, 0); + text[12] = '0' + checksum; /* add it to the text */ + text[13] = '\0'; + } + + strcpy(partial, guard[0]); + if (encoding == EAN13 || encoding == ISBN) { /* The first digit */ + sprintf(tptr,"0:12:%c ",text[0]); + tptr += strlen(tptr); + partial[0] = '9'; /* extra space for the digit */ + } else if (encoding == UPCA) + partial[0] = '9'; /* UPC has one digit before the symbol, too */ + xpos = width_of_partial(partial); + mirror = ean_mirrortab[text[0]-'0']; + + /* left part */ + for (i=1;i<7;i++) { + ptr1 = partial + strlen(partial); /* target */ + ptr2 = digits[text[i]-'0']; /* source */ + strcpy(ptr1, ptr2); + if (mirror[i-1] == '1') { + /* mirror this */ + ptr1[0] = ptr2[3]; + ptr1[1] = ptr2[2]; + ptr1[2] = ptr2[1]; + ptr1[3] = ptr2[0]; + } + /* + * Write the ascii digit. UPC has a special case + * for the first digit, which is out of the bars + */ + if (encoding == UPCA && i==1) { + sprintf(tptr, "0:10:%c ", text[i]); + tptr += strlen(tptr); + ptr1[1] += 'a'-'1'; /* bars are long */ + ptr1[3] += 'a'-'1'; + } else { + sprintf(tptr, "%i:12:%c ", xpos, text[i]); + tptr += strlen(tptr); + } + /* count the width of the symbol */ + xpos += 7; /* width_of_partial(ptr2) */ + } + + strcat(partial, guard[1]); /* middle */ + xpos += width_of_partial(guard[1]); + + /* right part */ + for (i=7;i<13;i++) { + ptr1 = partial + strlen(partial); /* target */ + ptr2 = digits[text[i]-'0']; /* source */ + strcpy(ptr1, ptr2); + /* + * Ascii digit. Once again, UPC has a special + * case for the last digit + */ + if (encoding == UPCA && i==12) { + sprintf(tptr, "%i:10:%c ", xpos+13, text[i]); + tptr += strlen(tptr); + ptr1[0] += 'a'-'1'; /* bars are long */ + ptr1[2] += 'a'-'1'; + } else { + sprintf(tptr, "%i:12:%c ", xpos, text[i]); + tptr += strlen(tptr); + } + xpos += 7; /* width_of_partial(ptr2) */ + } + tptr[-1] = '\0'; /* overwrite last space */ + strcat(partial, guard[2]); /* end */ + xpos += width_of_partial(guard[2]); + + } else if (encoding == UPCE) { + checksum = text[7] - '0'; + + strcpy(partial, guardE[0]); + partial[0] = '9'; /* UPC-A has one digit before the symbol, too */ + xpos = width_of_partial(partial); + + /* UPC-E has the number system written before the bars. */ + sprintf(tptr, "0:10:%c ", text[0]); + tptr += strlen(tptr); + + if (text[0] == '0') + mirror = upc_mirrortab[checksum]; + else + mirror = upc_mirrortab1[checksum]; + + for (i=0;i<6;i++) { + ptr1 = partial + strlen(partial); /* target */ + ptr2 = digits[text[i+1]-'0']; /* source */ + strcpy(ptr1, ptr2); + if (mirror[i] != '1') { /* negated wrt EAN13 */ + /* mirror this */ + ptr1[0] = ptr2[3]; + ptr1[1] = ptr2[2]; + ptr1[2] = ptr2[1]; + ptr1[3] = ptr2[0]; + } + sprintf(tptr, "%i:12:%c ", xpos, text[i+1]); + tptr += strlen(tptr); + xpos += 7; /* width_of_partial(ptr2) */ + } + + sprintf(tptr, "%i:10:%c ", xpos+10, text[7]); + tptr += strlen(tptr); + ptr1[0] += 'a'-'1'; /* bars are long */ + ptr1[2] += 'a'-'1'; + + tptr[-1] = '\0'; /* overwrite last space */ + strcat(partial, guardE[1]); /* end */ + + } else { /* EAN-8 almost identical to EAN-13 but no mirroring */ + + if (len0 != 8) { + checksum = ean_make_checksum(text, 0); + text[7] = '0' + checksum; /* add it to the text */ + text[8] = '\0'; + } + + strcpy(partial, guard[0]); + xpos = width_of_partial(partial); + + /* left part */ + for (i=0;i<4;i++) { + strcpy(partial + strlen(partial), digits[text[i]-'0']); + sprintf(tptr, "%i:12:%c ", xpos, text[i]); + tptr += strlen(tptr); + xpos += 7; /* width_of_partial(digits[text[i]-'0' */ + } + strcat(partial, guard[1]); /* middle */ + xpos += width_of_partial(guard[1]); + + /* right part */ + for (i=4;i<8;i++) { + strcpy(partial + strlen(partial), digits[text[i]-'0']); + sprintf(tptr, "%i:12:%c ", xpos, text[i]); + tptr += strlen(tptr); + xpos += 7; /* width_of_partial(digits[text[i]-'0' */ + } + tptr[-1] = '\0'; /* overwrite last space */ + strcat(partial, guard[2]); /* end */ + } + + /* + * And that's it. Now, in case some add-on is specified it + * must be encoded too. Look for it. + */ + if ( (ptr1 = spc) ) { + ptr1++; + strcpy(text, ptr1); + if (strlen(ptr1)==5) { + checksum = ean_make_checksum(text, 1 /* special way */); + mirror = upc_mirrortab[checksum]+1; /* only last 5 digits */ + } else { + checksum = atoi(text)%4; + mirror = upc_mirrortab2[checksum]; + } + strcat(textinfo, " +"); strcat(partial, "+"); + tptr = textinfo + strlen(textinfo); + for (i=0; ipartial = strdup(partial); + if (!bc->partial) { + bc->error = errno; + return -1; + } + bc->textinfo = strdup(textinfo); + if (!bc->textinfo) { + bc->error = errno; + free(bc->partial); + bc->partial = NULL; + return -1; + } + if (!bc->width) + bc->width = width_of_partial(partial); + + return 0; /* success */ +} + +int Barcode_upc_encode(struct Barcode_Item *bc) +{ + return Barcode_ean_encode(bc); /* UPC is folded into EAN */ +} + +int Barcode_isbn_encode(struct Barcode_Item *bc) +{ + /* For ISBN we must normalize the string and prefix "978" */ + unsigned char *text = malloc(24); /* 13 + ' ' + 5 plus some slack */ + unsigned char *otext; + int i, j, retval; + + if (!text) { + bc->error = ENOMEM; + return -1; + } + strcpy(text, "978"); j=3; + + otext = bc->ascii; + for (i=0; otext[i]; i++) { + if (isdigit(otext[i])) + text[j++] = otext[i]; + if (j == 12) /* checksum added later */ + break; + } + text[j]='\0'; + if (strchr(otext, ' ')) + strcat(text, strchr(otext, ' ')); + bc->ascii = text; + bc->encoding = strdup("ISBN"); + retval = Barcode_ean_encode(bc); + bc->ascii = otext; /* restore ascii for the ps comments */ + free(text); + return retval; +} + diff --git a/BarCode/i25.c b/BarCode/i25.c new file mode 100644 index 0000000..72bd035 --- /dev/null +++ b/BarCode/i25.c @@ -0,0 +1,164 @@ +/* + * i25.c -- "interleaved 2 of 5" + * + * Copyright (c) 1999,2000 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + +static char *codes[] = { + "11331", "31113", "13113", "33111", "11313", + "31311", "13311", "11133", "31131", "13131" +}; + +static char *guard[] = {"a1a1", "c1a"}; /* begin end */ + +int Barcode_i25_verify(unsigned char *text) +{ + if (!text[0]) + return -1; + while (*text && isdigit(*text)) + text++; + if (*text) + return -1; /* a non-digit char */ + return 0; /* ok */ +} + +int Barcode_i25_encode(struct Barcode_Item *bc) +{ + unsigned char *text; + unsigned char *partial; /* dynamic */ + unsigned char *textinfo; /* dynamic */ + unsigned char *textptr, *p1, *p2, *pd; + int i, len, sum[2], textpos, usesum = 0; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("interleaved 2 of 5"); + + text = bc->ascii; + if (!bc->ascii) { + bc->error = EINVAL; + return -1; + } + + if ((bc->flags & BARCODE_NO_CHECKSUM)) usesum = 0; else usesum = 1; + + /* create the real text string, padded to an even number of digits */ + text = malloc(strlen(bc->ascii) + 3); /* leading 0, checksum, term. */ + if (!text) { + bc->error = errno; + return -1; + } + /* add the leading 0 if needed */ + i = strlen(bc->ascii) + usesum; + if (i % 2) { + /* add a leading 0 */ + text[0] = '0'; + strcpy(text+1, bc->ascii); + } else { + strcpy(text, bc->ascii); + } + /* add the trailing checksum if needed, the leading 0 is ignored */ + if (usesum) { + sum[0] = sum[1] = 0; + for (i=0; text[i]; i++) + sum[i%2] += text[i]-'0'; + /* + * The "even" sum must be multiplied by three, and the * + * rightmost digit is defined as "even". The digits' position + * is already correct, whether or not we added a leading zero. + * (e.g., they are in pos. 0..4 or 1..4 of the string) + */ + i = sum[0] * 3 + sum[1]; + strcat(text, "0"); + text[strlen(text)-1] += (10 - (i%10)) % 10; + } + + /* the partial code is 5 * (text + check) + 4(head) + 3(tail) + term. */ + partial = malloc( (strlen(text) + 3) * 5 +2); /* be large... */ + if (!partial) { + bc->error = errno; + free(text); + return -1; + } + + /* the text information is at most "nnn:fff:c " * (strlen+1) +term */ + textinfo = malloc(10*(strlen(text)+1) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + free(text); + return -1; + } + + + strcpy(partial, "0"); /* the first space */ + strcat(partial, guard[0]); /* start */ + textpos = 4; /* width of initial guard */ + textptr = textinfo; + + len = strlen(text); + for (i=0; ierror = EINVAL; /* impossible if text is verified */ + free(partial); + free(textinfo); + free(text); + return -1; + } + /* interleave two digits */ + p1 = codes[text[i]-'0']; + p2 = codes[text[i+1]-'0']; + pd = partial + strlen(partial); /* destination */ + while (*p1) { + *(pd++) = *(p1++); + *(pd++) = *(p2++); + } + *pd = '\0'; + /* and print the ascii text (but don't print the checksum, if any */ + if (usesum && strlen(text+i)==2) { + /* print only one digit, discard the checksum */ + sprintf(textptr, "%i:12:%c ", textpos, text[i]); + } else { + sprintf(textptr, "%i:12:%c %i:12:%c ", textpos, text[i], + textpos+9, text[i+1]); + } + textpos += 18; /* width of two codes */ + textptr += strlen(textptr); + } + strcat(partial, guard[1]); + + bc->partial = partial; + bc->textinfo = textinfo; + free(text); + + return 0; +} + diff --git a/BarCode/library.c b/BarCode/library.c new file mode 100644 index 0000000..08df802 --- /dev/null +++ b/BarCode/library.c @@ -0,0 +1,247 @@ +/* + * library.c -- external functions of libbarcode + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H /* sometimes (windows, for instance) it's missing */ +# include +#endif +#include + +#include "barcode.h" +//#include "QFile.h" +//#include "QString.h" + +/* + * This function allocates a barcode structure and strdup()s the + * text string. It returns NULL in case of error + */ +struct Barcode_Item *Barcode_Create(char *text) +{ + struct Barcode_Item *bc; + + bc = malloc(sizeof(*bc)); + if (!bc) return NULL; + + memset(bc, 0, sizeof(*bc)); + bc->ascii = strdup(text); + bc->margin = BARCODE_DEFAULT_MARGIN; /* default margin */ + return bc; +} + + +/* + * Free a barcode structure + */ +int Barcode_Delete(struct Barcode_Item *bc) +{ + if (bc->ascii) + free(bc->ascii); + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + if (bc->encoding) + free(bc->encoding); + free(bc); + return 0; /* always success */ +} + + +/* + * The various supported encodings. This might be extended to support + * dynamic addition of extra encodings + */ +extern int Barcode_ean_verify(unsigned char *text); +extern int Barcode_ean_encode(struct Barcode_Item *bc); +extern int Barcode_upc_verify(unsigned char *text); +extern int Barcode_upc_encode(struct Barcode_Item *bc); +extern int Barcode_isbn_verify(unsigned char *text); +extern int Barcode_isbn_encode(struct Barcode_Item *bc); +extern int Barcode_39_verify(unsigned char *text); +extern int Barcode_39_encode(struct Barcode_Item *bc); +extern int Barcode_128b_verify(unsigned char *text); +extern int Barcode_128b_encode(struct Barcode_Item *bc); +extern int Barcode_128c_verify(unsigned char *text); +extern int Barcode_128c_encode(struct Barcode_Item *bc); +extern int Barcode_128_verify(unsigned char *text); +extern int Barcode_128_encode(struct Barcode_Item *bc); +extern int Barcode_128raw_verify(unsigned char *text); +extern int Barcode_128raw_encode(struct Barcode_Item *bc); +extern int Barcode_i25_verify(unsigned char *text); +extern int Barcode_i25_encode(struct Barcode_Item *bc); +extern int Barcode_cbr_verify(unsigned char *text); +extern int Barcode_cbr_encode(struct Barcode_Item *bc); +extern int Barcode_msi_verify(unsigned char *text); +extern int Barcode_msi_encode(struct Barcode_Item *bc); +extern int Barcode_pls_verify(unsigned char *text); +extern int Barcode_pls_encode(struct Barcode_Item *bc); +extern int Barcode_93_verify(unsigned char *text); +extern int Barcode_93_encode(struct Barcode_Item *bc); + + +struct encoding { + int type; + int (*verify)(unsigned char *text); + int (*encode)(struct Barcode_Item *bc); +}; + +struct encoding encodings[] = { + {BARCODE_EAN, Barcode_ean_verify, Barcode_ean_encode}, + {BARCODE_UPC, Barcode_upc_verify, Barcode_upc_encode}, + {BARCODE_ISBN, Barcode_isbn_verify, Barcode_isbn_encode}, + {BARCODE_128B, Barcode_128b_verify, Barcode_128b_encode}, + {BARCODE_128C, Barcode_128c_verify, Barcode_128c_encode}, + {BARCODE_128RAW, Barcode_128raw_verify, Barcode_128raw_encode}, + {BARCODE_39, Barcode_39_verify, Barcode_39_encode}, + {BARCODE_I25, Barcode_i25_verify, Barcode_i25_encode}, + {BARCODE_128, Barcode_128_verify, Barcode_128_encode}, + {BARCODE_CBR, Barcode_cbr_verify, Barcode_cbr_encode}, + {BARCODE_PLS, Barcode_pls_verify, Barcode_pls_encode}, + {BARCODE_MSI, Barcode_msi_verify, Barcode_msi_encode}, + {BARCODE_93, Barcode_93_verify, Barcode_93_encode}, + {0, NULL, NULL} +}; + +/* + * A function to encode a string into bc->partial, ready for + * postprocessing to the output file. Meaningful bits for "flags" are + * the encoding mask and the no-checksum flag. These bits + * get saved in the data structure. + */ +int Barcode_Encode(struct Barcode_Item *bc, int flags) +{ + int validbits = BARCODE_ENCODING_MASK | BARCODE_NO_CHECKSUM; + struct encoding *cptr; + + /* If any flag is cleared in "flags", inherit it from "bc->flags" */ + if (!(flags & BARCODE_ENCODING_MASK)) + flags |= bc->flags & BARCODE_ENCODING_MASK; + if (!(flags & BARCODE_NO_CHECKSUM)) + flags |= bc->flags & BARCODE_NO_CHECKSUM; + flags = bc->flags = (flags & validbits) | (bc->flags & ~validbits); + + if (!(flags & BARCODE_ENCODING_MASK)) { + /* get the first code able to handle the text */ + for (cptr = encodings; cptr->verify; cptr++) + if (cptr->verify((unsigned char *)bc->ascii)==0) + break; + if (!cptr->verify) { + bc->error = EINVAL; /* no code can handle this text */ + return -1; + } + flags |= cptr->type; /* this works */ + bc->flags |= cptr->type; + } + for (cptr = encodings; cptr->verify; cptr++) + if (cptr->type == (flags & BARCODE_ENCODING_MASK)) + break; + if (!cptr->verify) { + bc->error = EINVAL; /* invalid barcode type */ + return -1; + } + if (cptr->verify(bc->ascii) != 0) { + bc->error = EINVAL; + return -1; + } + return cptr->encode(bc); +} + + +/* + * When multiple output formats are supported, there will + * be a jumpt table like the one for the types. Now we don't need it + */ +extern int Barcode_ps_print(struct Barcode_Item *bc, FILE *f); +extern int Barcode_pcl_print(struct Barcode_Item *bc, FILE *f); + +/* + * A function to print a partially decoded string. Meaningful bits for + * "flags" are the output mask etc. These bits get saved in the data + * structure. + */ +int Barcode_Print(struct Barcode_Item *bc, FILE *f, int flags) +{ + int validbits = BARCODE_OUTPUT_MASK | BARCODE_NO_ASCII + | BARCODE_OUT_NOHEADERS; + + /* If any flag is clear in "flags", inherit it from "bc->flags" */ + if (!(flags & BARCODE_OUTPUT_MASK)) + flags |= bc->flags & BARCODE_OUTPUT_MASK; + if (!(flags & BARCODE_NO_ASCII)) + flags |= bc->flags & BARCODE_NO_ASCII; + if (!(flags & BARCODE_OUT_NOHEADERS)) + flags |= bc->flags & BARCODE_OUT_NOHEADERS; + flags = bc->flags = (flags & validbits) | (bc->flags & ~validbits); + + if (bc->flags & BARCODE_OUT_PCL) + return Barcode_pcl_print(bc, f); + return Barcode_ps_print(bc, f); +} + +/* + * Choose the position + */ +int Barcode_Position(struct Barcode_Item *bc, int wid, int hei, + int xoff, int yoff, double scalef) +{ + bc->width = wid; bc->height = hei; + bc->xoff = xoff; bc->yoff = yoff; + bc->scalef = scalef; + return 0; +} + +/* + * Do it all in one step + */ +int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, + int xoff, int yoff, int flags) +{ + struct Barcode_Item * bc; + + if (!(bc=Barcode_Create(text))) { + errno = -ENOMEM; + return -1; + } + + if ( Barcode_Position(bc, wid, hei, xoff, yoff, 0.0) < 0 + || Barcode_Encode(bc, flags) < 0 + || Barcode_Print(bc, f, flags) < 0) { + errno = bc->error; + Barcode_Delete(bc); + return -1; + } + Barcode_Delete(bc); + return 0; +} + +/* + * Return the version + */ + +int Barcode_Version(char *vptr) +{ + if (vptr) + strcpy(vptr, BARCODE_VERSION); + return BARCODE_VERSION_INT; +} diff --git a/BarCode/msi.c b/BarCode/msi.c new file mode 100644 index 0000000..77a373b --- /dev/null +++ b/BarCode/msi.c @@ -0,0 +1,155 @@ +/* + * msi.c -- encoding for MSI-Plessey + * + * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + + +/* Patterns */ +static char *patterns[] = { "13", "31" }; + +static char *fillers[] = { "031", "131" }; + +static int width = 16 /* each character uses 4 patterns */, + startpos = 6 /* length of the first filler */; + +/* + * Check that the text can be encoded. Returns 0 or -1. + */ +int Barcode_msi_verify(unsigned char *text) +{ + int i; + + if (!strlen(text)) + return -1; + for (i=0; text[i]; i++) { + if (!isdigit(text[i])) + return -1; + } + return 0; +} + +static int add_one(char *ptr, int code) +{ + sprintf(ptr, "%s%s%s%s", + patterns[(code >> 3) & 1], + patterns[(code >> 2) & 1], + patterns[(code >> 1) & 1], + patterns[code & 1]); + return 0; +} + +/* + * The encoding functions fills the "partial" and "textinfo" fields. + * Lowercase chars are converted to uppercase + */ +int Barcode_msi_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *ptr, *textptr; + int i, code, textpos, usesum, checksum = 0; + + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("msi"); + + if ((bc->flags & BARCODE_NO_CHECKSUM)) + usesum = 0; + else + usesum = 1; + + text = bc->ascii; + + /* the partial code is head + 8 * (text + check) + tail + margin + term. */ + partial = malloc( 3 + 8 * (strlen(text) + 1) + 3 + 2 ); + if (!partial) { + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn:fff:c " * strlen +term */ + textinfo = malloc(10*strlen(text) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + return -1; + } + + strcpy(partial, fillers[0]); + ptr = partial + strlen(partial); + textptr = textinfo; + textpos = startpos; + + for (i=0; ipartial = partial; + bc->textinfo = textinfo; + + return 0; +} diff --git a/BarCode/pcl.c b/BarCode/pcl.c new file mode 100644 index 0000000..d5ec097 --- /dev/null +++ b/BarCode/pcl.c @@ -0,0 +1,200 @@ +/* + * pcl.c -- printing the "partial" bar encoding in PCL format + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * Copyright (c) 2001 Andrea Scopece (a.scopece@tin.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + +#define SHRINK_AMOUNT 0.15 /* shrink the bars to account for ink spreading */ + + +/* + * How do the "partial" and "textinfo" strings work? See file "ps.c" + */ + + +int Barcode_pcl_print(struct Barcode_Item *bc, FILE *f) +{ + int i, j, k, barlen; + double f1, f2, fsav=0; + int mode = '-'; /* text below bars */ + double scalef=1, xpos, x0, y0, yr; + unsigned char *ptr; + unsigned char c; + + char font_id[6]; /* default font, should be "scalable" */ + /* 0 Line printer, use on older LJet II, isn't scalable */ + /* 4148 Univers, use on LJet III series, and Lj 4L, 5L */ + /* 16602 Arial, default LJ family 4, 5, 6, Color, Djet */ + + if (!bc->partial || !bc->textinfo) { + bc->error = EINVAL; + return -1; + } + + /* + * Maybe this first part can be made common to several printing back-ends, + * we'll see how that works when other ouput engines are added + */ + + /* First, calculate barlen */ + barlen = bc->partial[0] - '0'; + for (ptr = bc->partial+1; *ptr; ptr++) + if (isdigit(*ptr)) + barlen += (*ptr - '0'); + else if (islower(*ptr)) + barlen += (*ptr - 'a'+1); + + /* The scale factor depends on bar length */ + if (!bc->scalef) { + if (!bc->width) bc->width = barlen; /* default */ + scalef = bc->scalef = (double)bc->width / (double)barlen; + } + + /* The width defaults to "just enough" */ + if (!bc->width) bc->width = barlen * scalef +1; + + /* But it can be too small, in this case enlarge and center the area */ + if (bc->width < barlen * scalef) { + int wid = barlen * scalef + 1; + bc->xoff -= (wid - bc->width)/2 ; + bc->width = wid; + /* Can't extend too far on the left */ + if (bc->xoff < 0) { + bc->width += -bc->xoff; + bc->xoff = 0; + } + } + + /* The height defaults to 80 points (rescaled) */ + if (!bc->height) bc->height = 80 * scalef; + +#if 0 + /* If too small (5 + text), enlarge and center */ + i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0); + if (bc->height < i * scalef ) { + int hei = i * scalef; + bc->yoff -= (hei-bc->height)/2; + bc->height = hei; + if (bc->yoff < 0) { + bc->height += -bc->yoff; + bc->yoff = 0; + } + } +#else + /* If too small (5 + text), reduce the scale factor and center */ + i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0); + if (bc->height < i * scalef ) { + double scaleg = ((double)bc->height) / i; + int wid = bc->width * scaleg / scalef; + bc->xoff += (bc->width - wid)/2; + bc->width = wid; + scalef = scaleg; + } +#endif + + /* + * deal with PCL output + */ + + xpos = bc->margin + (bc->partial[0]-'0') * scalef; + for (ptr = bc->partial+1, i=1; *ptr; ptr++, i++) { + /* special cases: '+' and '-' */ + if (*ptr == '+' || *ptr == '-') { + mode = *ptr; /* don't count it */ i++; continue; + } + + /* j is the width of this bar/space */ + if (isdigit (*ptr)) j = *ptr-'0'; + else j = *ptr-'a'+1; + if (i%2) { /* bar */ + x0 = bc->xoff + xpos; + y0 = bc->yoff + bc->margin; + yr = bc->height; + if (!(bc->flags & BARCODE_NO_ASCII)) { /* leave space for text */ + if (mode == '-') { + /* text below bars: 10 points or five points */ + yr -= (isdigit(*ptr) ? 10 : 5) * scalef; + } else { /* '+' */ + /* text above bars: 10 or 0 from bottom, and 10 from top */ + y0 += (isdigit(*ptr) ? 10 : 0) * scalef; + yr -= (isdigit(*ptr) ? 20 : 10) * scalef; + } + } + + fprintf(f,"%c&a%.0fH", 27, x0 * 10.0); + fprintf(f,"%c&a%.0fV", 27, y0 * 10.0); + fprintf(f,"%c*c%.0fH", 27, ((j*scalef)-SHRINK_AMOUNT) * 10.0); + fprintf(f,"%c*c%.0fV", 27, yr * 10.0); + fprintf(f,"%c*c0P\n", 27); + } + xpos += j * scalef; + } + + /* the text */ + + mode = '-'; /* reinstantiate default */ + if (!(bc->flags & BARCODE_NO_ASCII)) { + k=0; /* k is the "previous font size" */ + for (ptr = bc->textinfo; ptr; ptr = strchr(ptr, ' ')) { + while (*ptr == ' ') ptr++; + if (!*ptr) break; + if (*ptr == '+' || *ptr == '-') { + mode = *ptr; continue; + } + if (sscanf(ptr, "%lf:%lf:%c", &f1, &f2, &c) != 3) { + fprintf(stderr, "barcode: impossible data: %s\n", ptr); + continue; + } + + /* select a Scalable Font */ + + if (fsav != f2) + { + if ((bc->flags & BARCODE_OUT_PCL_III) == BARCODE_OUT_PCL_III) + { strcpy(font_id, "4148"); /* font Univers */ + } + else + { strcpy(font_id, "16602"); /* font Arial */ + } + + fprintf(f,"%c(8U%c(s1p%5.2fv0s0b%sT", 27, 27, f2 * scalef, font_id); + } + fsav = f2; + + fprintf(f,"%c&a%.0fH", 27, (bc->xoff + f1 * scalef + bc->margin) * 10.0); + fprintf(f,"%c&a%.0fV", 27, + mode != '-' + ? ((double)bc->yoff + bc->margin + 8*scalef) * 10.0 + : ((double)bc->yoff + bc->margin + bc->height ) * 10.0); + + fprintf(f, "%c", c); + } + + } + + return 0; +} diff --git a/BarCode/plessey.c b/BarCode/plessey.c new file mode 100644 index 0000000..ec47100 --- /dev/null +++ b/BarCode/plessey.c @@ -0,0 +1,164 @@ +/* + * plessey.c -- encoding for Plessey + * + * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + +static char * patterns[] = { "13", "31" }; + +/* this is ordered in decades to simplify encoding */ +static char alphabet[] = + "0123456789" "ABCDEF"; + +/* stop sequence may be 231311313 (barcodemill.com) */ +static char *fillers[] = { "031311331", "331311313" }; + +static int width = 16, startpos = 16; + +/* + * Check that the text can be encoded. Returns 0 or -1. + * If it's all lowecase convert to uppercase and accept it + */ +int Barcode_pls_verify(unsigned char *text) +{ + int i, upper = 0, lower = 0; + + if (!strlen(text)) + return -1; + for (i=0; text[i]; i++) { + if (!strchr(alphabet,toupper(text[i]))) + return -1; + if (isupper(text[i])) upper++; + if (islower(text[i])) lower++; + } + if (upper && lower) + return -1; + return 0; +} + +static int add_one(char *ptr, int code) +{ + sprintf(ptr, "%s%s%s%s", + patterns[code & 1], + patterns[(code >> 1) & 1], + patterns[(code >> 2) & 1], + patterns[(code >> 3) & 1] + ); + return 0; +} + +/* + * The encoding functions fills the "partial" and "textinfo" fields. + * Lowercase chars are converted to uppercase + */ +int Barcode_pls_encode(struct Barcode_Item *bc) +{ + static char *text; + static char *partial; /* dynamic */ + static char *textinfo; /* dynamic */ + char *c, *ptr, *textptr; + unsigned char *checkptr; + int i, code, textpos; + static char check[9] = {1,1,1,1,0,1,0,0,1}; + if (bc->partial) + free(bc->partial); + if (bc->textinfo) + free(bc->textinfo); + bc->partial = bc->textinfo = NULL; /* safe */ + + if (!bc->encoding) + bc->encoding = strdup("plessey"); + + text = bc->ascii; + if (!text) { + bc->error = EINVAL; + return -1; + } + /* the partial code is 8 * (head + text + check + tail) + margin + term. */ + partial = malloc( (strlen(text) + 4) * 8 + 3); + checkptr = calloc (1, strlen(text) * 4 + 8); + + if (!partial || !checkptr) { + if (partial) free(partial); + if (checkptr) free(checkptr); + bc->error = errno; + return -1; + } + + /* the text information is at most "nnn:fff:c " * strlen +term */ + textinfo = malloc(10*strlen(text) + 2); + if (!textinfo) { + bc->error = errno; + free(partial); + return -1; + } + + strcpy(partial, fillers[0]); + ptr = partial + strlen(partial); + textptr = textinfo; + textpos = startpos; + + for (i=0; ierror = EINVAL; /* impossible if text is verified */ + free(partial); + free(textinfo); + return -1; + } + code = c - alphabet; + add_one(ptr, code); + sprintf(textptr, "%i:12:%c ", textpos, toupper(text[i])); + + textpos += width; /* width of each code */ + textptr += strlen(textptr); + ptr += strlen(ptr); + checkptr[4*i] = code & 1; + checkptr[4*i+1] = (code >> 1) & 1; + checkptr[4*i+2] = (code >> 2) & 1; + checkptr[4*i+3] = (code >> 3) & 1; + } + /* The CRC checksum is required */ + for (i=0; i < 4*strlen(text); i++) { + int j; + if (checkptr[i]) + for (j = 0; j < 9; j++) + checkptr[i+j] ^= check[j]; + } + for (i = 0; i < 8; i++) { + sprintf(ptr, patterns[checkptr[strlen(text) * 4 + i]]); + ptr += 2; + } + fprintf(stderr, "CRC: "); + for (i = 0; i < 8; i++) { + fputc('0' + checkptr[strlen(text) * 4 + i], stderr); + } + fputc('\n', stderr); + strcpy(ptr, fillers[1]); + bc->partial = partial; + bc->textinfo = textinfo; + + return 0; +} diff --git a/BarCode/ps.c b/BarCode/ps.c new file mode 100644 index 0000000..c9d18d6 --- /dev/null +++ b/BarCode/ps.c @@ -0,0 +1,273 @@ +/* + * ps.c -- printing the "partial" bar encoding + * + * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) + * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + +#include "barcode.h" + +#define SHRINK_AMOUNT 0.15 /* shrink the bars to account for ink spreading */ + + +/* + * How do the "partial" and "textinfo" strings work? + * + * The first char in "partial" tells how much extra space to add to the + * left of the bars. For EAN-13, it is used to leave space to print the + * first digit, other codes may have '0' for no-extra-space-needed. + * + * The next characters are alternating bars and spaces, as multiples + * of the base dimension which is 1 unless the code is + * rescaled. Rescaling is calculated as the ratio from the requested + * width and the calculated width. Digits represent bar/space + * dimensions. Lower-case letters represent those bars that should + * extend lower than the others: 'a' is equivalent to '1', 'b' is '2' and + * so on. + * + * The "textinfo" string is made up of fields "%lf:%lf:%c" separated by + * blank space. The first integer is the x position of the character, + * the second is the font size (before rescaling) and the char item is + * the charcter to be printed. + * + * Both the "partial" and "textinfo" strings may include "-" or "+" as + * special characters (in "textinfo" the char should be a standalone + * word). They state where the text should be printed: below the bars + * ("-", default) or above the bars. This is used, for example, to + * print the add-5 and add-2 codes to the right of UPC or EAN codes + * (the add-5 extension is mostly used in ISBN codes. + */ + + +int Barcode_ps_print(struct Barcode_Item *bc, FILE *f) +{ + int i, j, k, barlen, printable=1; + double f1, f2, fsav=0; + int mode = '-'; /* text below bars */ + double scalef=1, xpos, x0, y0, yr; + unsigned char *ptr; + unsigned char c; + + if (!bc->partial || !bc->textinfo) { + bc->error = EINVAL; + return -1; + } + + + /* + * Maybe this first part can be made common to several printing back-ends, + * we'll see how that works when other ouput engines are added + */ + + /* First, calculate barlen */ + barlen = bc->partial[0] - '0'; + for (ptr = bc->partial+1; *ptr; ptr++) + if (isdigit(*ptr)) + barlen += (*ptr - '0'); + else if (islower(*ptr)) + barlen += (*ptr - 'a'+1); + + /* The scale factor depends on bar length */ + if (!bc->scalef) { + if (!bc->width) bc->width = barlen; /* default */ + scalef = bc->scalef = (double)bc->width / (double)barlen; + } + + /* The width defaults to "just enough" */ + if (!bc->width) bc->width = barlen * scalef +1; + + /* But it can be too small, in this case enlarge and center the area */ + if (bc->width < barlen * scalef) { + int wid = barlen * scalef + 1; + bc->xoff -= (wid - bc->width)/2 ; + bc->width = wid; + /* Can't extend too far on the left */ + if (bc->xoff < 0) { + bc->width += -bc->xoff; + bc->xoff = 0; + } + } + + /* The height defaults to 80 points (rescaled) */ + if (!bc->height) bc->height = 80 * scalef; + +#if 0 + /* If too small (5 + text), enlarge and center */ + i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0); + if (bc->height < i * scalef ) { + int hei = i * scalef; + bc->yoff -= (hei-bc->height)/2; + bc->height = hei; + if (bc->yoff < 0) { + bc->height += -bc->yoff; + bc->yoff = 0; + } + } +#else + /* If too small (5 + text), reduce the scale factor and center */ + i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0); + if (bc->height < i * scalef ) { + double scaleg = ((double)bc->height) / i; + int wid = bc->width * scaleg / scalef; + bc->xoff += (bc->width - wid)/2; + bc->width = wid; + scalef = scaleg; + } +#endif + + /* + * Ok, then deal with actual ps (eps) output + */ + + if (!(bc->flags & BARCODE_OUT_NOHEADERS)) { /* spit a header first */ + if (bc->flags & BARCODE_OUT_EPS) + fprintf(f, "%%!PS-Adobe-2.0 EPSF-1.2\n"); + else + fprintf(f, "%%!PS-Adobe-2.0\n"); + fprintf(f, "%%%%Creator: libbarcode\n"); + if (bc->flags & BARCODE_OUT_EPS) { + fprintf(f, "%%%%BoundingBox: %i %i %i %i\n", + bc->xoff, + bc->yoff, + bc->xoff + bc->width + 2* bc->margin, + bc->yoff + bc->height + 2* bc->margin); + } + fprintf(f, "%%%%EndComments\n"); + if (bc->flags & BARCODE_OUT_PS) { + fprintf(f, "%%%%EndProlog\n\n"); + fprintf(f, "%%%%Page: 1 1\n\n"); + } + } + + /* Print some informative comments */ + for (i=0; bc->ascii[i]; i++) + if (bc->ascii[i] < ' ') + printable = 0; + + fprintf(f,"%% Printing barcode for \"%s\", scaled %5.2f", + printable ? bc->ascii : "", scalef); + if (bc->encoding) + fprintf(f,", encoded using \"%s\"",bc->encoding); + fprintf(f, "\n"); + fprintf(f,"%% The space/bar succession is represented " + "by the following widths (space first):\n" + "%% "); + for (i=0; ipartial); i++) { + unsigned char c = bc->partial[i]; + if (isdigit(c)) putc(c, f); + if (islower(c)) putc(c-'a'+'1', f); + if (isupper(c)) putc(c-'A'+'1', f); + } + /* open array for "forall" */ + fprintf(f, "\n[\n%% height xpos ypos width" + " height xpos ypos width\n"); + + xpos = bc->margin + (bc->partial[0]-'0') * scalef; + for (ptr = bc->partial+1, i=1; *ptr; ptr++, i++) { + /* special cases: '+' and '-' */ + if (*ptr == '+' || *ptr == '-') { + mode = *ptr; /* don't count it */ i++; continue; + } + /* j is the width of this bar/space */ + if (isdigit (*ptr)) j = *ptr-'0'; + else j = *ptr-'a'+1; + if (i%2) { /* bar */ + x0 = bc->xoff + xpos + (j*scalef)/2; + y0 = bc->yoff + bc->margin; + yr = bc->height; + if (!(bc->flags & BARCODE_NO_ASCII)) { /* leave space for text */ + if (mode == '-') { + /* text below bars: 10 points or five points */ + y0 += (isdigit(*ptr) ? 10 : 5) * scalef; + yr -= (isdigit(*ptr) ? 10 : 5) * scalef; + } else { /* '+' */ + /* text above bars: 10 or 0 from bottom, and 10 from top */ + y0 += (isdigit(*ptr) ? 10 : 0) * scalef; + yr -= (isdigit(*ptr) ? 20 : 10) * scalef; + } + } + /* Define an array and then use "forall" (Hans Schou) */ + fprintf(f," [%5.2f %6.2f %6.2f %5.2f]%s", + yr, x0, y0, (j * scalef) - SHRINK_AMOUNT, + i%4 == 1 ? " " : "\n"); + } + xpos += j * scalef; + } + fprintf(f,"\n]\t{ {} forall setlinewidth moveto 0 exch rlineto stroke} " + "bind forall\n"); + + /* Then, the text */ + + mode = '-'; /* reinstantiate default */ + if (!(bc->flags & BARCODE_NO_ASCII)) { + fprintf(f, "[\n%% char xpos ypos fontsize\n"); + k=0; /* k is the "previous font size" */ + for (ptr = bc->textinfo; ptr; ptr = strchr(ptr, ' ')) { + while (*ptr == ' ') ptr++; + if (!*ptr) break; + if (*ptr == '+' || *ptr == '-') { + mode = *ptr; continue; + } + if (sscanf(ptr, "%lf:%lf:%c", &f1, &f2, &c) != 3) { + fprintf(stderr, "barcode: impossible data: %s\n", ptr); + continue; + } + + fprintf(f, " [("); + /* Both the backslash and the two parens are special */ + if (c=='\\' || c==')' || c=='(') + fprintf(f, "\\%c) ", c); + else + fprintf(f, "%c) ", c); + fprintf(f, "%6.2f %6.2f %5.2f]\n", + bc->xoff + f1 * scalef + bc->margin, + mode == '-' + ? (double)bc->yoff + bc->margin + : (double)bc->yoff + bc->margin+bc->height - 8*scalef, + fsav == f2 ? 0.0 : f2 * scalef); + fsav = f2; + } + fprintf(f,"] { {} forall dup 0.00 ne {\n\t" + "/Helvetica findfont exch scalefont setfont\n" + " } {pop} ifelse\n" + " moveto show} bind forall\n"); + + + } + + fprintf(f,"%% End barcode for \"%s\"\n\n", + printable ? bc->ascii : ""); + + if (!(bc->flags & BARCODE_OUT_NOHEADERS)) { + if (bc->flags & BARCODE_OUT_PS) { + fprintf(f,"showpage\n"); + fprintf(f, "%%%%Trailer\n\n"); + } + + } + return 0; +} + + + + diff --git a/BarCode/rr/QBarCode.cpp b/BarCode/rr/QBarCode.cpp new file mode 100644 index 0000000..1549daf --- /dev/null +++ b/BarCode/rr/QBarCode.cpp @@ -0,0 +1,178 @@ +#include "QBarCode.h" +#include "ui_myBarCode.h" +#include "QImage" +#include "QFile" +#include "QFileInfo" +#include "QDebug" +#include "stdio.h" + +QBarCode::QBarCode(QWidget *parent) : + QDialog(parent), + ui(new Ui::QBarCode) +{ + ui->setupUi(this); + + connect(ui->BarCodeGenerate,SIGNAL(pressed()),this,SLOT(onEnCodeBar())); + + ui->lineEdit->setText("12345678ABCDEFG"); + + //onEnCodeBar(); + +} + +QBarCode::~QBarCode() +{ + delete ui; +} + + +void QBarCode::onEnCodeBar(){ + + QFile f1; + //ui->lineEdit->setText("dfdsfdsfdsfdsf"); + int ps = 1, pcl = 0, oflags; + ps = 0; pcl = 0; + + oflags = BARCODE_OUT_PS | BARCODE_OUT_NOHEADERS; + +// char *txt = ui->lineEdit->text.toStdString().c_str(); + //sprintf(txt,"%s", (char *)ui->lineEdit->text().data()); + /* and my data as code-128B autodetected */ + QString txt =ui->lineEdit->text(); + Barcode_Encode_and_Print((char *)txt.toStdString().c_str(),stdout, 0, 60, 240, 510, + oflags); + + /* A few code-39 ones */ + // Barcode_Encode_and_Print("silly code",stdout, 0, 0, 40, 320, + // BARCODE_39 | oflags); + +// Barcode_Encode_and_Print("SAMPLE CODES",stdout, 100, 30, 400, 80, +// BARCODE_39 | oflags); + + /* ISBN with add-5 */ +// Barcode_Encode_and_Print("1-56592-292-1 90000",stdout, 0, 0, 40, 430, +// BARCODE_ISBN | oflags); + + +} +/* + * Do it all in one step + */ +int QBarCode::Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, + int xoff, int yoff, int flags) +{ + struct Barcode_Item * bc; + + if (!(bc=Barcode_Create(text))) { + qDebug()<<"mem less then:";//<< -ENOMEM ; + return -1; + } + + if ( Barcode_Position(bc, wid, hei, xoff, yoff, 0.0) < 0 + || Barcode_Encode(bc, flags) < 0 + //|| Barcode_Print(bc, f, flags) < 0 + ) { + qDebug()<< bc->error; + Barcode_Delete(bc); + return -1; + } + //QFile f1; + bcText = text; + bcTextinfo = bc->textinfo; + bcPartial = bc->partial; + ui->textEdit->setText(bcPartial); + + Barcode_ToImage(bc); + + Barcode_Delete(bc); + return 0; +} + +// 将条形码编码转换成点阵图形 +int QBarCode::Barcode_ToImage(Barcode_Item * bc ){ + bc->ascii; + bc->partial; + bc->textinfo; + int len =QString(bc->partial).length(); + bcWidth =6; + for(int i=0;ipartial[i]&0x0f); + // + //bcWidth = len; + bcHeight = 40; + + QImage image(bcWidth,bcHeight,QImage::Format_ARGB32); + //image.dotsPerMeterX() + //image.size().setHeight(50); + image.fill(0x00ffffff); + //QPainter painter(&image); + //ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + QString txt = bc->ascii; + + ui->textEdit->setText( QString().sprintf("W:%d,H:%d,Len:%d",ui->BarCodeView->width(),ui->BarCodeView->height(),len)); + + //0b1a2a4123221223211221132221231213212223112312131311222314111b3c1a1b + //11:12:1 22:12:2 33:12:3 44:12:4 55:12:5 66:12:6 77:12:7 88:12:8 + //02112141232212232112211322212312132122231123121313112223141112331112 + + memset(pointMap,0,sizeof(pointMap)); + unsigned char *img= image.bits(); + for(int j=0;j< 20;j++){ + int i=3; + unsigned char p=0; + for(int n=0;( npartial[n]; + if(c<0x30 || c>127) continue; + c = c-0x30; + if(n%2==1){ + for(int r=0;rlabBarCode->setPixmap(QPixmap(QString::fromUtf8(".\\imgd.BMP"))); + + //ui->widgetPrintTextDisplay->dat = pointMap; + + ShowBarCode(fileName); +} + +void QBarCode::ShowBarCode(QString fileName) +{ + /****************界面初始化********************************/ + + this->pictureName =fileName ; + scene = new QGraphicsScene; + scene->setSceneRect( -200,0,bcWidth*4+200,bcHeight); + scene->setItemIndexMethod(QGraphicsScene::NoIndex); + QPixmap pixmap(this->pictureName); + pixmap = pixmap.scaledToWidth(2.5*bcWidth); + item = scene->addPixmap(pixmap); + + /***************设置view的场景*****************************/ + ui->BarCodeView->setScene(scene); + ui->BarCodeView->setRenderHint(QPainter::Antialiasing); + ui->BarCodeView->setCacheMode(QGraphicsView::CacheBackground); + ui->BarCodeView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + ui->BarCodeView->setDragMode(QGraphicsView::ScrollHandDrag); + //ui->graphicsView->resize(400,300); + + ui->BarCodeView->setScene(scene);//设置view的场景 + +} + diff --git a/BarCode/rr/QBarCode.h b/BarCode/rr/QBarCode.h new file mode 100644 index 0000000..080b347 --- /dev/null +++ b/BarCode/rr/QBarCode.h @@ -0,0 +1,44 @@ +#ifndef QBARCODE_H +#define QBARCODE_H + +#include +#include "barcode.h" +#include "QGraphicsScene" +#include "QGraphicsPixmapItem" + +namespace Ui { + class QBarCode; +} + +class QBarCode : public QDialog +{ + Q_OBJECT + +public: + explicit QBarCode(QWidget *parent = 0); + ~QBarCode(); + unsigned char pointMap[40*1000]; + QString pictureName;//当前显示的图片 +private slots: + void onEnCodeBar(); + +private: + void ShowBarCode(QString fileName); + int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, + int xoff, int yoff, int flags); + int Barcode_ToImage(Barcode_Item * bc ); + + QGraphicsScene *scene;//声明scene + QGraphicsPixmapItem *item;//声明item + + QString bcPartial; + QString bcTextinfo; + QString bcText; + int bcWidth,bcHeight; + + +private: + Ui::QBarCode *ui; +}; + +#endif // QBARCODE_H diff --git a/BarCode/rr/QBarCode.ui b/BarCode/rr/QBarCode.ui new file mode 100644 index 0000000..ceeb9bf --- /dev/null +++ b/BarCode/rr/QBarCode.ui @@ -0,0 +1,147 @@ + + + QBarCode + + + + 0 + 0 + 680 + 316 + + + + Form + + + + + + + + + + + 条形码类型 + + + + + + + 字体 + + + + + + + 条形码高度 + + + + + + + 放大等级 + + + + + + + + + + + 120 + 0 + + + + + + + + + + + 1 + + + 10 + + + 1 + + + + + + + 插入文档 + + + + + + + 文本信息 + + + + + + + + + + + 16777215 + 60 + + + + + + + + FileName + + + + + + + 打开文件 + + + + + + + 生成条形码 + + + + + + + 关闭 + + + + + + + + + TextLabel + + + + + + + + diff --git a/Binarization/Binarization.cpp b/Binarization/Binarization.cpp new file mode 100644 index 0000000..b506c55 --- /dev/null +++ b/Binarization/Binarization.cpp @@ -0,0 +1,141 @@ +#include "Binarization.h" + +CBinarization::CBinarization( QString imgPath ) + : threshold(0) +{ + // ¼ÓÔØͼƬ + _img = new QImage(); + if (NULL != _img) + { + _img->load(imgPath); + } +} + +// Éú³ɻҶÈͼÏñ +QImage* CBinarization::grayScaleImg() +{ + if (NULL == _img) + { + return NULL; + } + int nWidth = _img->width(); + int nHeight = _img->height(); + + // ÕâÀïÁôÒ⣬ÎÒʹÓÃÁËQImage::Format_Grayscale8¸ñʽµÄͼƬ£¬ÕâÖÖͼƬÿ¸öÏñËØֻÓÃÁË8bit´洢»ҶÈÑÕɫֵ + QImage* grayImg = new QImage(nWidth, nHeight, QImage::Format_RGB888); + QRgb rgbVal = 0; + int grayVal = 0; + + for (int x = 0; x < nWidth; ++x) + { + for (int y = 0; y < nHeight; ++y) + { + rgbVal = _img->pixel(x, y); + + grayVal = qGray(rgbVal); // ÕâÀïµ÷ÓÃQtµĺ¯Êý£¬ʹÓÃ(R * 11 + G * 16 + B * 5)/32µķ½·¨¼ÆËã + + grayImg->setPixel(x, y, QColor(grayVal, grayVal, grayVal).rgb()); + } + } + + return grayImg; +} + +int CBinarization::Otsu(QImage* img) +{ + if (NULL == img) + { + return -1; + } + vector histogram = Histogram(img); + int total = 0; + for (int i = 0; i != histogram.size(); ++i) + { + total += histogram[i]; + } + + double sum = 0.0; + for (unsigned int i = 1; i < histogram.size(); ++i) + sum += i * histogram[i]; + double sumB = 0.0; + double wB = 0.0; + double wF = 0.0; + double mB = 0.0; + double mF = 0.0; + double max = 0.0; + double between = 0.0; + double threshold = 0.0; + for (int i = 0; i != 256; ++i) + { + wB += histogram[i]; + if (wB == 0) + continue; + wF = total - wB; + if (wF == 0) + break; + sumB += i * histogram[i]; + mB = sumB / wB; + mF = (sum - sumB) / wF; + between = wB * wF * (mB - mF) * (mB - mF); + if ( between > max ) + { + threshold = i; + max = between; + } + } + return threshold; +} + +QImage* CBinarization::process(QImage* img) +{ + if (NULL == img) + { + return NULL; + } + int width = img->width(); + int height = img->height(); + int bytePerLine = img->bytesPerLine(); // ÿһÐеÄ×ֽÚÊý + unsigned char *data = img->bits(); + unsigned char *binarydata = new unsigned char[bytePerLine * height]; + + unsigned char g = 0; + for (int i = 0; i < height; ++i) + { + for (int j = 0; j < width; ++j) + { + g = *(data + i * bytePerLine + j * 3); // ÕâÀïj ³ËÒÔ 3 + if(int(g) >= threshold) + { + binarydata[ i * bytePerLine + j * 3] = 0xFF; // ÿ¸öɫֵÐèҪ¶Ô3¸ö×ֽڸ³ֵ + binarydata[ i * bytePerLine + j * 3 + 1] = 0xFF; + binarydata[ i * bytePerLine + j * 3 + 2] = 0xFF; + } + else + { + binarydata[ i * bytePerLine + j * 3] = 0x00; + binarydata[ i * bytePerLine + j * 3 + 1] = 0x00; + binarydata[ i * bytePerLine + j * 3 + 2] = 0x00; + } + } + } + + QImage *ret = new QImage(binarydata, width, height, bytePerLine, QImage::Format_RGB888); + return ret; +} + +std::vector CBinarization::Histogram( QImage* img ) +{ + unsigned char* graydata = img->bits(); + vector hist(256); // 256ɫ + for (int i = 0; i != img->width(); ++i) + { + for (int j = 0; j != img->height(); ++j) + { + int index = int(*graydata); + hist[index] += 1; + graydata += 1; // step + } + } + graydata = NULL; + return hist; +} diff --git a/Binarization/Binarization.h b/Binarization/Binarization.h new file mode 100644 index 0000000..e342802 --- /dev/null +++ b/Binarization/Binarization.h @@ -0,0 +1,24 @@ +#ifndef CBINARIZATION_H +#define CBINARIZATION_H + +#include +#include + +using namespace std; + +class CBinarization +{ +public: + CBinarization(QString imgPath); + + QImage* grayScaleImg(); + int Otsu(QImage* img); + QImage* process(QImage* img); + int threshold; + +private: + QImage* _img; + + vector Histogram(QImage* img); +}; +#endif diff --git a/CN/mainwindow.ui b/CN/mainwindow.ui new file mode 100644 index 0000000..7d8be97 --- /dev/null +++ b/CN/mainwindow.ui @@ -0,0 +1,3813 @@ + + + MainWindow + + + true + + + + 0 + 0 + 640 + 460 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 5 + 5 + + + + Qt::StrongFocus + + + InkJet + + + + + 0 + 0 + 641 + 455 + + + + + 0 + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + 1 + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + + + + 0 + 50 + + + + + + 0 + 0 + 686 + 47 + + + + + + + + 0 + 45 + + + + 编辑 + + + + :/icon/edit.png:/icon/edit.png + + + + + + + + 0 + 45 + + + + 打开文件 + + + + :/icon/fileopen.png:/icon/fileopen.png + + + + + + + + 0 + 45 + + + + 二维码 + + + + :/icon/bypm.png:/icon/bypm.png + + + + + + + + 0 + 45 + + + + 条形码 + + + + :/icon/BarCode1.png:/icon/BarCode1.png + + + + + + + + 0 + 45 + + + + 缩小 + + + + :/icon/zoomout.png:/icon/zoomout.png + + + + + + + + 0 + 45 + + + + 放大 + + + + :/icon/zoomin.png:/icon/zoomin.png + + + + + + + 交替打印文件名 + + + + + + + + + + + + 0 + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 最大:[40行x 2048列] + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 140 + 25 + + + + + 140 + 25 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 同步器速度 + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + Qt::Vertical + + + + + + + + 0 + 25 + + + + + 100 + 25 + + + + 当前时间 + + + + + + + + + + + + + 640 + 107 + + + + 0 + + + + + + + + 610 + 95 + + + + + 620 + 96 + + + + BlankCursor + + + 0 + + + false + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi';"></p></body></html> + + + + + + + + + + 5 + 5 + 620 + 100 + + + + + 0 + 0 + + + + + 620 + 100 + + + + + 16777215 + 80 + + + + false + + + + + 0 + 0 + 500 + 53 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + + + + 0 + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 60 + + + + + 60 + 16777215 + + + + + + + :/image/reset.png + + + + + + + + + 0 + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨线开关 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 喷头盖开 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨水缸满 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨水液位 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 溶剂液位 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 回收故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 粘度故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 相位故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 高压故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 故障恢复 + + + + + + + + + 0 + + + 4 + + + + + 0 + + + 0 + + + 0 + + + + + + 110 + 0 + + + + + 110 + 16777215 + + + + 立即重新计米 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + 产品计数 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::WinPanel + + + QFrame::Sunken + + + + + + + + + + Qt::Horizontal + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + 产品总计数 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::WinPanel + + + QFrame::Sunken + + + + + + + + + + Qt::Horizontal + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::NoFrame + + + + + + + + + + + 110 + 40 + + + + + 110 + 16777215 + + + + Qt::LeftToRight + + + false + + + 关机 + + + + :/icon/poweroff.png:/icon/poweroff.png + + + + + + + + + 7 + + + 5 + + + 0 + + + + + 6 + + + 3 + + + 0 + + + 0 + + + 3 + + + + + 3 + + + + + 3 + + + + + + 300 + 0 + + + + + 300 + 16777215 + + + + + + + true + + + + + + + + 160 + 0 + + + + + 180 + 20 + + + + 2014-08-23 + + + Qt::AlignCenter + + + + + + + + + + + 0 + + + + + + 88 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 70 + 20 + + + + 晶振电压 + + + + + + + + 35 + 20 + + + + 粘度 + + + + + + + + 35 + 20 + + + + 压力 + + + + + + + + 64 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 88 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 70 + 20 + + + + 隔膜位置 + + + + + + + + 70 + 0 + + + + + 64 + 20 + + + + + + + + + + + + + + 0 + 60 + + + + + 80 + 16777215 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 147 + 146 + 146 + + + + + + + + 开 + + + + :/icon/openreclaimtanl.png:/icon/openreclaimtanl.png + + + + + + + + 60 + 0 + + + + + 70 + 60 + + + + + + + + + + + + 0 + 60 + + + + + 80 + 16777215 + + + + 关 + + + + :/icon/closereclaimtanl.png:/icon/closereclaimtanl.png + + + + + + + + + + + + + 3 + + + 0 + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + + + + + + 0 + 170 + 0 + + + + + + + 85 + 170 + 127 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 127 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 127 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 186 + 188 + 185 + + + + + + + 242 + 241 + 240 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/startprint2.png + :/icon/startprint1.png + :/icon/startprint1.png + :/icon/startprint.png:/icon/startprint2.png + + + + 110 + 70 + + + + false + + + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + + + + + + 170 + 0 + 0 + + + + + + + 193 + 121 + 121 + + + + + + + 170 + 0 + 0 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 241 + 176 + 165 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 241 + 176 + 165 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 209 + 199 + 189 + + + + + + + 242 + 241 + 240 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 227 + 97 + 75 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 227 + 97 + 75 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/stopprint2.png + :/icon/stopprint1.png + :/icon/stopprint1.png + :/icon/stopprint.png:/icon/stopprint2.png + + + + 110 + 70 + + + + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + + + + + + 255 + 170 + 0 + + + + + + + 206 + 186 + 124 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 209 + 206 + 203 + + + + + + + 242 + 241 + 240 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/pauseprint2.png + :/icon/pauseprint1.png + :/icon/pauseprint1.png + :/icon/pauseprint.png:/icon/pauseprint2.png + + + + 110 + 70 + + + + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + 喷嘴逆清洗 + + + + + + + + + + + + + + + + PicWidget + QWidget +
PicWidget.h
+ 1 +
+ + ClickLabel + QLabel +
ClickLabel.h
+
+ + TextEditOption + QWidget +
TextEditOption.h
+ 1 +
+ + PrintTextDisplay + QWidget +
PrintTextDisplay.h
+ 1 +
+ + MyTextEdit + QTextEdit +
MyTextEdit.h
+
+
+ + + + +
diff --git a/ClickLabel.cpp b/ClickLabel.cpp new file mode 100644 index 0000000..a95580f --- /dev/null +++ b/ClickLabel.cpp @@ -0,0 +1,6 @@ +#include +#include +void ClickLabel::mousePressEvent(QMouseEvent *evt) +{ + emit pressed(); +} diff --git a/ClickLabel.h b/ClickLabel.h new file mode 100644 index 0000000..80d46f4 --- /dev/null +++ b/ClickLabel.h @@ -0,0 +1,20 @@ +#ifndef __CLICKLABEL__ +#define __CLICKLABEL__ + +#include + +class ClickLabel:public QLabel{ + Q_OBJECT + + signals: + void pressed(void); + public: + ClickLabel(QWidget *parent=0): QLabel(parent){ + } + + protected: + void mousePressEvent( QMouseEvent* ); + +}; + +#endif diff --git a/DacDisplayAndEdit.cpp b/DacDisplayAndEdit.cpp new file mode 100644 index 0000000..b52b015 --- /dev/null +++ b/DacDisplayAndEdit.cpp @@ -0,0 +1,96 @@ + +#include "DacDisplayAndEdit.h" +#include "ui_dacdisplayandedit.h" +#include "QLatin1Char" +#include "qdebug.h" +#include "qmessagebox.h" + +DacDisplayAndEdit::DacDisplayAndEdit(QWidget *parent) : + QWidget(parent), + ui(new Ui::DacDisplayAndEdit) +{ + ui->setupUi(this); + for(int i = 0; i < DAC_GRID_MAX_ROW*DAC_GRID_MAX_COL; i++){ + memLineEdit[i] = new QLineEdit(this); + memLineEdit[i]->setAccessibleName(QString::number(i)); + memLineEdit[i]->setEnabled(false); + ui->gridLayoutMem->addWidget(memLineEdit[i],(i/DAC_GRID_MAX_COL) + 1,(i%DAC_GRID_MAX_COL) + 1); + connect(memLineEdit[i],SIGNAL(editingFinished ()),this,SLOT(onLineEditEditingFinished())); + } + for(int i = 0; i < DAC_GRID_MAX_ROW; i++){ + rowLabel[i] = new QLabel(this); + ui->gridLayoutMem->addWidget(rowLabel[i],i + 1,0); + } + editFlag = false; + writeMemBaseAddr = 0; + readMemBaseAddr = 0; + setEnabled(1); +} + +DacDisplayAndEdit::~DacDisplayAndEdit() +{ + delete ui; +} +// updateSysStatusToUI +void DacDisplayAndEdit::updateSysStatusToUI(void){ + // +} +void DacDisplayAndEdit::updateAuthorization(int auth) +{ + //qDebug ()<setText(QString(" ")); + for(int i = 1; i < DAC_GRID_MAX_ROW*DAC_GRID_MAX_COL; i++){ + if(sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK]>25)sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK]=25; + if(sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK]<5) sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK]=5; + memLineEdit[i]->setText(QString("%1").arg(sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK],2,10/*,QLatin1Char('0')*/)); + } + } +} + +void DacDisplayAndEdit::on_pushButtonEdit_pressed() +{//ddd + if(sysPara){ + editFlag = !editFlag; + for(int i = 1; i < DAC_GRID_MAX_ROW*DAC_GRID_MAX_COL; i++){ + memLineEdit[i]->setEnabled(editFlag); + if(editFlag) memLineEdit[i]->setText(QString("%1").arg(sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK],2,10,QLatin1Char('0'))); + + } + ui->pushButtonEdit->setText(editFlag?tr("完成"):tr("编辑")); + } +} +void DacDisplayAndEdit::on_pushButtonDefault_pressed()// pushButtonDefault pushButtonDefault +{ + if(sysPara){ + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("是否将点距微调参数设置为默认值?")); + QPushButton *saveButton = msgBox.addButton(tr("是"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("否"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + msgBox.exec(); + if (msgBox.clickedButton() == saveButton) { + for(int i = 1; i < DAC_GRID_MAX_ROW*DAC_GRID_MAX_COL; i++){ + sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK]=15; + memLineEdit[i]->setText(tr("%1").arg(sysPara->para.adjVolDacRate[i&MAX_RD_DAC_SIZE_MASK],2,10,QLatin1Char('0'))); + } + } + } + else qDebug()<<"sysPara not bind!"; +} + +void DacDisplayAndEdit::onLineEditEditingFinished(){ + int val,addr=0; + bool ok; + QLineEdit * edit = qobject_cast(sender()); + QString name = edit->accessibleName(); + val = edit->text().toInt(&ok,10); + if(sysPara){ + addr = name.toInt(&ok); + if(val>25)val=25; + if(val<5) val =5; + sysPara->para.adjVolDacRate[(addr)&MAX_RD_DAC_SIZE_MASK] = (unsigned char)val; + } +} diff --git a/DacDisplayAndEdit.h b/DacDisplayAndEdit.h new file mode 100644 index 0000000..8c30d84 --- /dev/null +++ b/DacDisplayAndEdit.h @@ -0,0 +1,45 @@ +#ifndef DACDISPLAYANDEDIT_H +#define DACDISPLAYANDEDIT_H + +#include +#include +#include +#include +#define DAC_GRID_MAX_ROW 4 +#define DAC_GRID_MAX_COL 10 +#define MAX_RD_DAC_SIZE_MASK 0x3f +#define MAX_WR_DAC_SIZE_MASK 0x3f +namespace Ui { +class DacDisplayAndEdit; +} + +class DacDisplayAndEdit : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit DacDisplayAndEdit(QWidget *parent = 0); + ~DacDisplayAndEdit(); + + void updateSysStatusToUI(void); + void updateSysParaToUI(void); + void updateAuthorization(int auth); + +private slots: + void on_pushButtonEdit_pressed(); + void on_pushButtonDefault_pressed(); + void onLineEditEditingFinished(); + + +private: + Ui::DacDisplayAndEdit *ui; + QLineEdit *memLineEdit[DAC_GRID_MAX_ROW*DAC_GRID_MAX_COL]; + QLabel *rowLabel[DAC_GRID_MAX_ROW]; + bool editFlag; //是否当前处于编辑模式 + int writeMemBaseAddr; + int readMemBaseAddr; +}; + +#endif +// DacDisplayANDEDIT_H + diff --git a/DevOp.cpp b/DevOp.cpp new file mode 100644 index 0000000..9366e14 --- /dev/null +++ b/DevOp.cpp @@ -0,0 +1,7408 @@ +/* + * DevOp.cpp + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin:设备操作模块,各种泵阀之类的操作都在此处 + + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "LogInfo.h" +#include +#include "InputMethod.h" +#include +#include +#include +#include +#include +#include +#ifndef Q_OS_WIN32 +#include +#include +#else +#define ioctl(a,...) (0 == 0) +#endif +#include +#include +#include +#include +#include +#include +#include "SysPara.h" +#include +#include "DevOp.h" +#include "Public.h" +#include "myinclude.h" +#include "qnamespace.h" +#include "rfid/rfidfunction.h" + +#define PRINT_CTRL_ADDR_BASE 0xa400 + +#define PRINT_DIGITAL_CHAR_BASE_ADDR (0xe000) + +#define WRITE_CALENDAR_DAT_ADDR (0xb100) + +#define RECYCLE_SLOT_STOP 0x1 +#define RECYCLE_SLOT_CLOSE 0x2 +#define RECYCLE_SLOT_OPEN 0x0 +#define PRINT_START_STOP_CTRL (PRINT_CTRL_ADDR_BASE + 0x40) +#define PRINT_RESET_PRODUCT_CNT (PRINT_CTRL_ADDR_BASE + 0x41) +#define RECYCLE_SLOT_CTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x42) +#define RESUME_FAULT_ADDR (PRINT_CTRL_ADDR_BASE + 0x43) + +#define VAR_CNT_ADDR (PRINT_CTRL_ADDR_BASE + 0x50) +#define VAR_CTRL_REG_ADDR (PRINT_CTRL_ADDR_BASE + 0x51) +#define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x59) +//#define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x5a) +#define WRITE_CNT1GROUP_COUNT 0xB13E +#define WRITE_CNT1GROUP_NUM 0xB13F +#define WRITE_CNT1GROUP_SETTING 0xB140 +#define READ_CNT1GROUP_CURR_LOOP 0x0190 +#define READ_CNT1GROUP_CURR_INDEX 0x0194 + +#define FPGA_STATUS_BASE_ADDR 0x0000 +#define FPGA_VERSOIN_NUM (FPGA_STATUS_BASE_ADDR + 0xfe) + + +#define READ_BUILD_DAT (FPGA_STATUS_BASE_ADDR + 0xf0) + +#define READ_PRINTDATA_XOR (FPGA_STATUS_BASE_ADDR + 0xf2) +#define READ_SYNC_COUNTER (FPGA_STATUS_BASE_ADDR + 0xf4) + +#define PHASE_DETECT_HIGH_VOLTAGE_TM 0x100 +#define READ_CALENDAR_DAT_ADDR 0x180 + +#define READ_RAND_FIFO_ADDR 0x200 // 读FPGA的随机码FIFO + +#define ROW_PRINT_SEQNENCE_ADDR 0xb200 //行扫描顺序 +#define DAC_TABLE_ADDR 0xb280 //每一个行点对应的DAC值 +#define NOT_GAP_DAC_TABLE_ADDR 0xb380 //每一个不隔点对应的DAC值 +#define FULL_COL_DAC_TABLE_ADDR 0xb480 //每一个不隔点对应的DAC值 + +#define MATCH_FULL_DAC_TABLE_ADDR 0xB500 // 匹配满列 DAC表 起始地址 +#define MATCH_1_DAC_TABLE_ADDR 0xB600 // 匹配单点 DAC表 起始地址 +#define MATCH_2_DAC_TABLE_ADDR 0xB700 // 匹配两点 DAC表 起始地址 +#define MATCH_3_DAC_TABLE_ADDR 0xB800 // 匹配三点 DAC表 起始地址 +#define MATCH_4_DAC_TABLE_ADDR 0xB900 // 匹配四点 DAC表 起始地址 +#define MATCH_5_DAC_TABLE_ADDR 0xBA00 // 匹配五点 DAC表 起始地址 +#define MATCH_G1_DAC_TABLE_ADDR 0xBC00 // 匹配空一点 DAC表 起始地址 +#define MATCH_G2_DAC_TABLE_ADDR 0xBC80 // 匹配空两点 DAC表 起始地址 +#define MATCH_G3_DAC_TABLE_ADDR 0xBD00 // 匹配空三点 DAC表 起始地址 +#define MATCH_G4_DAC_TABLE_ADDR 0xBD80 // 匹配空四点 DAC表 起始地址 +#define MATCH_G5_DAC_TABLE_ADDR 0xBE00 // 匹配空五点 DAC表 起始地址 +#define MATCH_G6_DAC_TABLE_ADDR 0xBE80 // 匹配空六点 DAC表 起始地址 +#define MATCH_P1_DAC_TABLE_ADDR 0xBF00 // 匹配预备一 DAC表 起始地址 +#define MATCH_P2_DAC_TABLE_ADDR 0xBF80 // 匹配预备二 DAC表 起始地址 +#define MATCH_C_DAC_TABLE_ADDR 0xC000 // 匹配复杂 DAC表 起始地址 + +#define WRITE_COUNTER3_ADDR (0xb150) +#define WRITE_COUNTER4_ADDR (0xb164) +//#define READ_CNT3_CURVALUE_ADDR 0x01b4 +#define READ_CNT3_CURVALUE_ADDR 0x1834 + +#define LOCADDR '1' + + +// 传送打印内容的数据结构 +// $D1rccccLLLLddd...ddco +struct _DataFromPC { + char keyword; // 特征字符 $ + char fun; // 功能码,固定为"D", 表示传送打印点阵信息 + char devAddr; // 默认01, (01~08) + char printRowDotNum; // 信息点阵垂直有效行数5~40点 + int printColDotNum; // 信息点阵水平有效列数8~3100列,均为8的整数倍值。 + int Length; // (printRowDotNum* (1+printColDotNum/8)) + 1字节(检验码)+1字节(结束字符) + char *dotData; // 按行列顺序排列的点阵数据,实际点阵数据总字节数为:printRowDotNum* printColDotNum/8 + char crc; // 校验字节 + char eoc; // 结束符,固定为小写字母'o' +}dataFromPC,r_dataFromPC; + +struct _TextFromPC { + char keyword; // 特征字符 ‘#’ + char fun; // 功能码,固定为‘T’, 表示传送打印点阵信息 + char devAddr; // 默认 1, (1~8) + unsigned char Length; // Head(4) + 字串长度[32] + 1字节(检验码)+1字节(结束字符) + char mStr[32]; // 定长,不足补 '\0' + char crc; // 校验字节 + char eoc; // 结束符,固定为小写字母'o' +}TextFromPC,r_TextFromPC; // 38字节 + +// 传送参数和命令的数据结构 +// &C14PPFco +struct _ParaFromPC{ + unsigned char keyword; // 特征字符 & + unsigned char fun; // 功能码,固定为"C",表示传送参数或命令 + unsigned char devAddr; // 默认01, (01~08) + unsigned char Length; // 参数长度,从参数printCmd到 eoc 的总字节数 + unsigned char printCmd; // "P"表示开始打印,"S"表示停止打印,"p"表示暂停打印, "O"表示不操作 + unsigned char printMode; // "F" 正向打印,"R" 正向打印, "U" 上下颠倒打印,"T" 上下左右同时颠倒打印 + // 还可以添加其它参数 + + unsigned char crc; // 校验字节 + unsigned char eoc; // 结束符,固定为小写字母'o' + +}paraFromPC,r_paraFromPC; +// &R14S?co 查询喷码机状态 +// &R14D?co 查询打印内容点阵 + + +// 查询喷码机状态的数据结构 +/*所有警告都是高电平警告*/ +struct _StatusToPC{ + unsigned char keyword; // 特征字符 # + unsigned char fun; // 功能码,固定为"S",表示传送喷码机状态数据 + unsigned char devAddr; // 默认01, (01~08) + unsigned char Length; // 参数长度,从参数printCmd到 eoc 的总字节数 + unsigned char printCmd; // 打印操作当前状态, "P"表示正在打印,"S"表示停止打印,"p"表示暂停打印, "C"表示回收槽未开,"W"表示等待状态 + unsigned char printMode; // 当前打印方向状态,其中:"F" 正向打印,"R" 正向打印, "U" 上下颠倒打印,"T" 上下左右同时颠倒打印 + + unsigned char statWarn:8; // {墨线开关,高压报警,回收故障,墨水液位,溶剂液位,墨水渗漏,喷头盖开,粘度故障} + + unsigned char isPumpValveControledByHand:1; // 手动控制阀泵标志,1手动,0自动 + unsigned char mainInkPumpError:1; //主墨泵故障 + unsigned char selfCheckDone:1; // 自检完成标志, 1完成,0没有完成 + unsigned char reclainTankReachEnd:1; //回收槽打开完成标志 + unsigned char beeperOnFlag:1; // 报警标志 有故障 + unsigned char lostCommuFlag:1; //失去通信 + unsigned char isPrinting:1; // 正在打印标志 + unsigned char reclaimTankBlockedAppending:1; //回收槽被卡住 + + unsigned int selfCheckCnt; // 自检时间计数器,60s倒计时 + unsigned int currReclaimTankPos; // 回收槽开位置 + //unsigned char InkLineStaus; // 0 关,1-开ing,2--关ing,3-开完成 + unsigned int productCnt; // 产品计数器 + // 还可以添加一些其它状态 + + unsigned char crc; // 校验字节 + unsigned char eoc; // 结束符,固定为小写字母'o' +}statusToPC; +// 不足4的倍数时,自动补足到4的倍数。 如statusToPC原本为 22字节,但实际的sizeof(statusToPC) = 24 + +// 传送当前打印内容点阵到PC的数据结构 +struct _DataToPC { + unsigned char keyword; // 特征字符 # + unsigned char fun; // 功能码,固定为"D", 表示传送打印点阵信息 + unsigned char devAddr; // 默认01, (01~08) + unsigned char printRowDotNum; // 信息点阵垂直有效行数5~40点 + unsigned int printColDotNum; // 信息点阵水平有效列数8~3100列,均为8的整数倍值。 + unsigned int Length; // (printRowDotNum* (1+printColDotNum/8)) + 1字节(检验码)+1字节(结束字符) + unsigned char *dotData; // 按行列顺序排列的点阵数据,实际点阵数据总字节数为:printRowDotNum* printColDotNum/8 + unsigned char crc; // 校验字节 + unsigned char eoc; // 结束符,固定为小写字母'o' +}dataToPC; + +typedef struct adjlen_strut { + + unsigned char uint8varLenHeadEn:8; // 头部使能 + unsigned int changeHeadlen:24; // 头部可变长的长度。实际长度 + unsigned int headCounter:16; // 变量1起始值+这个数,执行可变长 + unsigned int endCounter:16; // 变量1结束值-这个数,执行可变长 + unsigned char uint8varLenEndEn:8; // 尾部使能 + unsigned int changeEndlen:24; // 尾部可变长的长度。实际长度 + + // unsigned char uint8varLenEn; + // unsigned int changelen:24; +}Adjlen_strut; + +static unsigned short WireDim_mm=3745; + +void GetCRC(unsigned char *send_tab,unsigned int strlen,unsigned char *CRC_tab) //strlen为校验数组的长度,CRC_tab生成长度为的CRC数组低位在前 +{ + unsigned int CRCfull=0xffff; + unsigned char CRChigh=0xff; + unsigned char CRClow=0xff; + unsigned char CRCLSB; + unsigned int i,j; + for(i=0;i>1)&0x7fff); + if(CRCLSB==1) + { + CRCfull=(unsigned int)(CRCfull^0xa001); + } + } + + } + CRClow = (unsigned char)((CRCfull) & 0xff); + CRChigh = (unsigned char)((CRCfull>>8) & 0xFF); + CRC_tab[0]=CRClow; + CRC_tab[1]=CRChigh; +} +unsigned char ValidCRC(unsigned char *send_tab,unsigned int strlen) //strlen为校验数组的长度,CRC_tab生成长度为的CRC数组低位在前 +{ + unsigned int CRCfull=0xffff; + unsigned char CRChigh=0xff; + unsigned char CRClow=0xff; + unsigned char CRCLSB; + unsigned int i,j; + if(strlen>=2) + { + for(i=0;i>1)&0x7fff); + if(CRCLSB==1) + { + CRCfull=(unsigned int)(CRCfull^0xa001); + } + } + + } + CRClow = (unsigned char)((CRCfull) & 0xff); + CRChigh = (unsigned char)((CRCfull>>8) & 0xFF); + + if((send_tab[strlen-2]==CRClow)&&(send_tab[strlen-1]==CRChigh)) + return 1; + else return 0; + } + else return 0; +} + +int DevOp::BigDisp(unsigned char Module[],unsigned char Wirediameter[]) +{ + int Len=23; + int i; + unsigned char CrcBuf[2]; + unsigned char SendBuf[]={ + 0x01,0x10, + 0x00,0x00,0x00,0x07,//7 + 0x0e,//14 + 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x30,0x31,0x32,//10 + 0x00,0x00,0x00,0x01, + 0,0}; + for(i=0;i<10;i++) + SendBuf[7+i]=Module[i]; + for(i=0;i<4;i++) + SendBuf[17+i]=Wirediameter[i]; + GetCRC(SendBuf ,7+ SendBuf[6], CrcBuf);// + SendBuf[Len-2] = CrcBuf[0]; + SendBuf[Len-1] = CrcBuf[1]; +#ifdef UART2 + sendCom((char*)SendBuf,Len); +#endif + //showData( QByteArray((char *)SendBuf,Len)); + + //01 10 00 00 00 07 0E 63 64 65 77 73 61 20 20 20 20 0E A1 00 00 74 D0 + +} +int DevOp::SmallDisp(unsigned char Module[],unsigned char Wirediameter[]) +{ + int Len=21; + int i=0; + unsigned char CrcBuf[2]; + unsigned char SendBuf[]={ + 0x01,0x10,//2 + 0x00,0x00,0x00,0x06,//4 + 0x0c,//1 + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,//10 + 0x00,0x00,//0x00,0x01, + 0,0}; + for(i=0;i<10;i++) + SendBuf[7+i]=Module[i]; + for(i=0;i<2;i++) + SendBuf[17+i]=Wirediameter[i]; + GetCRC(SendBuf ,7+ SendBuf[6], CrcBuf);// + SendBuf[Len-2] = CrcBuf[0]; + SendBuf[Len-1] = CrcBuf[1]; +#ifdef UART2 + sendCom((char*)SendBuf,Len); +#endif + //showData( QByteArray((char *)SendBuf,Len)); +} + +int DevOp::RecDim() +{ + unsigned char CrcBuf[2]; + unsigned char SendBuf[]={ + 0x02,0x03, + 0x00,0x61,0x00,0x01, + 0,0}; + GetCRC(SendBuf ,6, CrcBuf);// + SendBuf[6] = CrcBuf[0]; + SendBuf[7] = CrcBuf[1]; +#ifdef UART2 + if(myCom==0) uart2Init(); + sendCom((char *)SendBuf,8); +#endif + //showData( QByteArray((char *)SendBuf,Len)); +} +/* +"02 03 00 61 00 01 D5 E7 " +"01 10 00 00 00 07 0E 42 41 44 43 45 46 47 30 31 32 00 00 00 01 90 4E " +"02 03 00 61 00 01 D5 E7 " +"01 10 00 00 00 06 0C 42 41 44 43 45 46 47 30 31 32 00 12 46 A6 " + +02 03 02 23 83 A4 D5 // +02 03 02 00 00 FC 44 +02 03 02 0B C0 FB 24 +02 03 02 27 11 27 B8 +02 03 02 0D E3 B9 5D +02 03 02 0D FC F8 95 +02 03 02 07 E2 7E 3D +02 03 02 00 00 FC 44 +02 03 02 00 00 FC 44 +02 03 02 35 9C EB 7D +02 03 02 0B A4 FA CF +02 03 02 15 B4 F2 A3 +02 03 02 25 0B A7 13 +// 3.745 +02 03 02 0E 9B B9 8F +02 03 02 0E 9B B9 8F +02 03 02 0E A1 39 9C +02 03 02 0E B3 B9 91 +02 03 02 0E B8 F8 56 + +01 10 00 00 00 06 0C 42 41 44 43 45 46 47 30 31 32 0E B8 C2 B9 + +*/ + +void DevOp::DatToDisp(char FileName[], bool big ) +{ + unsigned char cc[4]={0x00,0x00,0x00,0x00}; + RecDim(); + if(big){ + unsigned short m= WireDim_mm; + cc[0]=(m>>8) & 0xff; + cc[1]=(m) & 0xff; + cc[2]=(m>>8) & 0xff; + cc[3]=(m) & 0xff; + + BigDisp((unsigned char *)FileName,cc); + } + else { + unsigned short m= WireDim_mm/10; + cc[0]=(m>>8) & 0xff; + cc[1]=(m) & 0xff; + SmallDisp((unsigned char *)FileName,cc); + } + +} +void DevOp::DatToDisp2() +{ + //(char *)(QFileInfo(sysPara->para.lastOpenedFileName).baseName().toAscii().data()); + QString FileName=QFileInfo(sysPara->para.lastOpenedFileName).fileName(); + unsigned char cc[4]={0x00,0x00,0x00,0x00}; + unsigned char buf[30]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};//10 + //RecDim(); + char big =sysPara->para.ExtScreenType; + int len=FileName.length(),n; + //n=len; + while(len) + { + len--; + if(FileName.at(len)=='.') break; + } + + //qDebug()<<"send to Ping"<< (unsigned char)big; + if(big<1) return; //无外接屏时 + WdgttyUsb0Cnt++; + if(WdgttyUsb0Cnt>2){ + WdgttyUsb0Cnt=0;//myCom=0; + uart2Init(); + } + //qDebug()<<"WdgttyUsb0Cnt"<para.ExtMeterType==0) m=sysPara->status.productCnt;//总米数 + else if(sysPara->para.ExtMeterType==1)m=QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + else m= QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + + cc[0]=(m>>23) & 0xff; + cc[1]=(m>>16) & 0xff; + cc[2]=(m>>8) & 0xff; + cc[3]=(m) & 0xff; + BigDisp((unsigned char *)buf,cc); + } + else if(big==1) + { + unsigned short m= WireDim_mm/10; + cc[0]=(m>>8) & 0xff; + cc[1]=(m) & 0xff; + SmallDisp((unsigned char *)buf,cc); + } + +} + +void DevOp::uart2Init() +{ + //#ifdef ARMUART + // myCom = new Posix_QextSerialPort("/dev/ttySAC1",QextSerialBase::Polling); + //#else + static int mm=0; +#ifdef UART2 + qDebug()<< "UART2 "<isOpen())myCom->close(); + if(myCom==0) + { + myCom = new Posix_QextSerialPort("/dev/ttyUSB0",QextSerialBase::Polling); + if(myCom==0) myCom = new Posix_QextSerialPort("/dev/ttyUSB1",QextSerialBase::Polling); + } + //#endif + if(myCom->isOpen()) myCom->close(); + myCom ->open(QIODevice::ReadWrite); + + if (!myCom->isOpen()) + { + qDebug()<<"Uart2 is not open!"; + //sysPara->status.ExtScreenEn=0; + return; + } + sysPara->status.ExtScreenEn=1; + myCom->setBaudRate(BAUD9600); + myCom->setDataBits(DATA_8); + myCom->setParity(PAR_NONE); + myCom->setStopBits(STOP_1); + myCom->setFlowControl(FLOW_OFF); + myCom->setTimeout(1); + //uartThreadStart(); + sendCom("Uart Init ok."); + //qDebug()<status.ExtScreenEn; +#endif + +} + +DevOp::DevOp(SysPara * sysPara) +{ + this->sysPara = sysPara; + +#ifndef Q_OS_WIN32 + int fp; + char *pPwmMode; +#ifdef UART1 + uartThread = NULL; // 线程初始化 + +#ifdef ARMUART + //fp = open("/dev/tty1",O_RDONLY); // 改变console + //ioctl(fp,TIOCCONS); //TIOCCONS 的作用是使成为虚拟控制台 + //close(fp); + myCom = new Posix_QextSerialPort("/dev/ttySAC0",QextSerialBase::Polling); + +#else + printf("change1\n"); + fp = open("/dev/tty1",O_RDONLY); // 改变console + ioctl(fp,TIOCCONS); //TIOCCONS 的作用是使成为虚拟控制台 + close(fp); + + //myCom = new Posix_QextSerialPort("/dev/ttyS0",QextSerialBase::Polling); + // myCom = new Posix_QextSerialPort("/dev/ttyUSB0",QextSerialBase::Polling); + myCom = new Posix_QextSerialPort("/dev/ttyS1",QextSerialBase::Polling); +#endif + + data.clear(); + byteArray.clear(); + rec_cmd.mode=0; + + myCom ->open(QIODevice::ReadWrite); + if (!myCom->isOpen()) + qDebug()<<"Uart1 is not open!"; + myCom->setBaudRate(BAUD115200); + myCom->setDataBits(DATA_8); + myCom->setParity(PAR_NONE); + myCom->setStopBits(STOP_1); + myCom->setFlowControl(FLOW_OFF); + myCom->setTimeout(30); + //uartThreadStart(); + sendingEnable = true; + sendCom("The Printer Uart1 is Ok."); + //qDebug()<<("change TO TTY1.\n"); + //system("echo '123'>ttyS0"); + //qDebug()<<("change2\n"); +#endif + +#ifdef DEBUG_CNT + //qDebug()<<"QT_MAJOR_VERSION"<20) + OscillatorVoltage[i] = 68+i-50; + else if(i>11) + { + OscillatorVoltage[i] = 15+2*(i-10); + } + else + { + OscillatorVoltage[i]=11; + } + } + OscillatorVoltage[0]=0; +#endif + if(!sysPara){ + QMessageBox::critical(0,"错误","DevOp构造函数的sysParam不能为空"); //设个陷阱,防止误操作 + } +} + + +void DevOp::TTYS0ToConsole(void) +{ + int fp; +#ifdef UART1 + if(myCom->isOpen()) myCom->close(); + fp = open("/dev/tty0",O_RDONLY); //恢复console 到串口0 + ioctl(fp,TIOCCONS); + close(fp); + //qDebug()<<"ttyS0 to Console."; +#endif + +#ifdef UART2 + +#else + fp = open("/dev/tty0",O_RDONLY); //恢复console 到串口0 + ioctl(fp,TIOCCONS); + close(fp); +#endif + +} + + +DevOp::~DevOp(){ + +#ifdef UART2 + if(myCom->isOpen()) myCom->close(); +#endif + if(DAdataout >= 0) close(DAdataout); +#ifdef UART1 + if(myCom->isOpen()) myCom->close(); +#endif + + if(pwm_sp >= 0) + close(pwm_sp); + if(pwm_fd >= 0) + close(pwm_fd); + + if(Interrupt_fd >= 0) + close(Interrupt_fd); + if(iocontrl >= 0) + close(iocontrl); + + if(adc_fd >= 0) + close(adc_fd); + for(int i = 0; i < MAX_VARI_NUM; i++){ + vars_t *p_var = &sysPara->status.vars[i]; + if(p_var->original){ + if(p_var->dat) + free(p_var->dat); + } + } + if(myCom) + { + delete(myCom); + } +#ifdef __STC_POWER__ + if(comForPower) + { + comForPower->close(); + delete(comForPower); + } +#endif + //TTYS0ToConsole(); +} + +//QFile PrintDatafile("/home/plg/doc/printData.txt"); + +void DevOp::fpgaWr(int addr,unsigned char*dat,int len){ +#ifdef DEBUG_CNT + +#else + /* + for(int i = addr;i < addr + len ; i++){ + memWrMap[i%MAX_WR_MEM_SIZE] = dat[i - addr]; + } +*/ + if(DAdataout < 0) + return; + lseek(DAdataout, addr, SEEK_SET); + write(DAdataout, dat, len); +#endif +#if 0 + { + QString strtmp = "Addr:<" + QString::number(addr,16) + ">Data:"; + + //PrintDatafile.seek(0); + //file.write((char *)&jd.addr,(long long int)sizeof(jd)); + PrintDatafile.write(strtmp.toStdString().c_str()); + + //PrintDatafile.write((char *)dat,(qint64)len); + strtmp = ""; + QString strTxt; + for(int i =0; i 4){ + DisErrorMsg(); + return 0; + } + fpgaRd(addr, (unsigned char *)&data, len); + return data; +} + + +void DevOp::controlReleaseValve(bool openFlag){ + ioctl(iocontrl, openFlag, 7); + releaseValveOpenFlag = openFlag; + pumpValveCtrl(); +} + +void DevOp::controlMixValve(bool openFlag){ + ioctl(iocontrl, openFlag, 6); + mixValveFlag = openFlag; + pumpValveCtrl(); +} +void DevOp::controlInkValve(bool openFlag){ + ioctl(iocontrl, openFlag, 4); + inkValveOpenFlag = openFlag; + pumpValveCtrl(); +} +void DevOp::controlCycleValve(bool openFlag){ + ioctl(iocontrl, openFlag, 5); + cycleValveOpenFlag = openFlag; + pumpValveCtrl(); +} +void DevOp::controlCompressPump(bool openFlag){ + ioctl(iocontrl, !openFlag, 1); + compressPumpOpenFlag = openFlag; + pumpValveCtrl(); +} + +#define PWM_IOCTL_SET_FREQ 1 // PWM输出 +#define PWM_IOCTL_STOP 0 //设置为低电平输出 +#define PWM_IOCTL_HIGH 2 // 设置为高电平输出 +#define PWM_IOCTL_SET_WIDE 3 + +//#define FRE_SP 12000 +#define FRE_SP 13760 +void DevOp::controlViscosityPump(bool openFlag){ + viscosityPumpOpenFlag = openFlag; + pumpValveCtrl(); + if(openFlag){ + if(pwm_fd == -1) + pwm_fd = open("/dev/pwm", 0 |O_NONBLOCK); + ioctl(pwm_fd, PWM_IOCTL_SET_FREQ,50);//50 +#ifdef __VX__ + ioctl(pwm_fd, PWM_IOCTL_SET_WIDE,0); +#else + ioctl(pwm_fd, PWM_IOCTL_SET_WIDE,50); +#endif + //(sysPara->para.vicosityPumpType)?50:1); //50hz + } + else + { + if(pwm_fd != -1){ + ioctl(pwm_fd, PWM_IOCTL_HIGH); + close(pwm_fd); + pwm_fd = -1; + } + } + //qDebug()<<"pwm_fd"<para.reclaimPumpPWMWidth?sysPara->para.reclaimPumpPWMWidth:90)); + } + else{ + ioctl(pwm_sp, PWM_IOCTL_STOP); //PWM_IOCTL_STOP= 2 + } + reclaimPumpOpenFlag = openFlag; + if(!inkValveOpenFlag1 && reclaimPumpOpenFlag) + controlInkValvePWM2(); + pumpValveCtrl(); +} + +void DevOp::controlReclaimPump2() +{ + ioctl(pwm_sp, PWM_IOCTL_SET_FREQ, FRE_SP); //sysset.phaseByHandValue 总数100,设置成100好像无效 + ioctl(pwm_sp, PWM_IOCTL_SET_WIDE, 50); + ioctl(pwm_sp, PWM_IOCTL_STOP); //PWM_IOCTL_STOP= 2 +} +void DevOp::controlHeater(bool openFlag){ + ioctl(iocontrl, !openFlag, 11); + heaterOnFlag = openFlag; + pumpValveCtrl(); + +} + +void DevOp::controlBeeper(bool openFlag){ + ioctl(iocontrl, !openFlag, 9); + beeperOnFlag = openFlag; + +} + +void DevOp::controlRedLight(bool openFlag){ //2013-12-11 红绿黄报警灯 + ioctl(iocontrl, openFlag, 12); + RedLightOnFlag = openFlag; +} + +void DevOp::controlGreenLight(bool openFlag){ + ioctl(iocontrl, openFlag, 13); + GreenLightOnFlag = openFlag; +} + +void DevOp::controlYellowLight(bool openFlag){ + ioctl(iocontrl, openFlag, 14); + YellowLightOnFlag = openFlag; +} + +void DevOp::controlFan1(bool openFlag) +{ + ioctl(iocontrl, openFlag, 15); +} + +void DevOp::controlFan2(bool openFlag) +{ + ioctl(iocontrl, openFlag, 16); +} + +void DevOp::powerOff(void){ + ioctl(iocontrl, 0, 0); +} + + +void DevOp::controlReclaimTankOpen(bool enableFlag){ + if(enableFlag) + fpgaWrD(RECYCLE_SLOT_CTRL_ADDR,RECYCLE_SLOT_OPEN,1); + else + fpgaWrD(RECYCLE_SLOT_CTRL_ADDR,RECYCLE_SLOT_STOP,1); + + reclaimTankCloseEnableFlag = false; + reclaimTankOpenEnableFlag = enableFlag; +} + + +void DevOp::controlReclaimTankClose(bool enableFlag){ + if(enableFlag) + fpgaWrD(RECYCLE_SLOT_CTRL_ADDR,RECYCLE_SLOT_CLOSE,1); + else + fpgaWrD(RECYCLE_SLOT_CTRL_ADDR,RECYCLE_SLOT_STOP,1); + + reclaimTankOpenEnableFlag = false; + reclaimTankCloseEnableFlag = enableFlag; +} + + +bool DevOp::isReleaseValveOpen(){ + return releaseValveOpenFlag; +} +bool DevOp::isMixValveOpen(){ + return mixValveFlag; +} +bool DevOp::isInkValveOpen(){ + return inkValveOpenFlag; +} +bool DevOp::isInkValveOpen1(){ + return inkValveOpenFlag1; +} +bool DevOp::isCycleValveOpen(){ + return cycleValveOpenFlag; +} +bool DevOp::isCompressPumpOpen(){ + return compressPumpOpenFlag; +} +bool DevOp::isViscosityPumpOpen(){ + + return viscosityPumpOpenFlag; +} +bool DevOp::isMainInkPumpOpen(){ + return mainInkPumpOpenFlag; +} +bool DevOp::isReclaimPumpOpen(){ + return reclaimPumpOpenFlag; +} +bool DevOp::isReclaimTankOpenEnable(){ + return reclaimTankOpenEnableFlag; +} +bool DevOp::isReclaimTankCloseEnable(){ + return reclaimTankCloseEnableFlag; +} + +bool DevOp::isBeeperEnable(){ + return beeperOnFlag; +} +bool DevOp::isRedLightEnable(){ //2013-12-11 红绿黄报警灯 + return RedLightOnFlag; +} + +bool DevOp::isGreenLightEnable(){ + return GreenLightOnFlag; +} + +bool DevOp::isYellowLightEnable(){ + return YellowLightOnFlag; +} +bool DevOp::isHearterEnable(){ + return heaterOnFlag; +} + +void DevOp::readFgaStatus(){ + fpgaRd(FPGA_STATUS_BASE_ADDR,(unsigned char *)&sysPara->status,FPGA_STATUS_BYTE_NUM); +} + +//void DevOp::checkAuthorization(QString str){ + +// fpgaWr(0xA800,(unsigned char *) str.toStdString().c_str(),str.length()); +//} + +void DevOp::set_totalSynPulseNum(bool wren) +{ + short adjLen=0; + Adjlen_strut adjlen_strut ={0,0,0,0,0,0}; + + int val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + if(sysPara==0)return; + if(sysPara->para.varLenEn) + { +#ifdef __VX_OSC_VOL__ + adjLen = sysPara->para.varLen; + adjlen_strut.changeHeadlen = (int )( + (sysPara->para.synTriggerPrintLenMm+adjLen) + *sysPara->para.synPulseNumPerMm); + //adjlen_strut.headCounter = sysPara->para.headLen?sysPara->para.headLen:0; + adjlen_strut.headCounter = QString::number(sysPara->para.cnt1StartValue + sysPara->para.headLen).toUInt(0,16);//vx版本 + adjlen_strut.uint8varLenHeadEn = sysPara->para.headLen?1:0; + adjLen = sysPara->para.varLen1; + adjlen_strut.changeEndlen = (int )( + (sysPara->para.synTriggerPrintLenMm+adjLen) + *sysPara->para.synPulseNumPerMm); + adjlen_strut.endCounter = QString::number(sysPara->para.cnt1EndValue - sysPara->para.endLen).toUInt(0,16); + adjlen_strut.uint8varLenEndEn = sysPara->para.endLen?1:0; +#else + adjLen = sysPara->para.varLen; + adjlen_strut.changeHeadlen = (int )( + (sysPara->para.synTriggerPrintLenMm+adjLen) + *sysPara->para.synPulseNumPerMm); + adjlen_strut.headCounter = sysPara->para.headLen?sysPara->para.headLen:0; + adjlen_strut.uint8varLenHeadEn = sysPara->para.headLen?1:0; + adjLen = sysPara->para.varLen1; + adjlen_strut.changeEndlen = (int )( + (sysPara->para.synTriggerPrintLenMm+adjLen) + *sysPara->para.synPulseNumPerMm); + adjlen_strut.endCounter = sysPara->para.endLen?sysPara->para.endLen:0; + adjlen_strut.uint8varLenEndEn = sysPara->para.endLen?1:0; +#endif + + quint32* pValue =(quint32*) &adjlen_strut; + + } + if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)) + { + sysPara->para.totalSynPulseNum = (int )((sysPara->para.synTriggerPrintLenMm)*sysPara->para.synPulseNumPerMm); + } + else if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + { + sysPara->para.totalSynPulseNum = (int )((sysPara->para.elecEyeTriggerInterval)*sysPara->para.synPulseNumPerMm); + } + + // if(sysPara->para.varLenEn == 0){ + // adjlen_strut.uint8varLenEn = 0; + // }else + // { + // adjlen_strut.uint8varLenEn = 1; + // } + + fpgaWr(PRINT_CTRL_ADDR_BASE, (unsigned char *)&sysPara->para, 0x14); + fpgaWr(PRINT_CTRL_ADDR_BASE + 0x76, (unsigned char *)&adjlen_strut, sizeof(Adjlen_strut)); + + + // } + // qDebug()<<"adjlen_strut.changelen = "<para.varLen1="<para.varLen1; + // qDebug()<<"sysPara->para.varLenEn="<para.varLenEn; + // qDebug()<<"synTriggerPrintLenMm:"<para.synTriggerPrintLenMm; + // qDebug()<<"synPulseNumPerMm:"<para.synPulseNumPerMm; + // qDebug()<<"adjLen"<para.totalSynPulseNum; +#ifdef DEBUG_CNT + qDebug()<<"adjLen"<para.totalSynPulseNum; +#endif +} + +unsigned short short2BCD(unsigned short value) +{ + unsigned short bcd = 0; + bcd = (value/1000)*4096 + ((value%1000)/100)*256 + ((value%100)/10)*16 + value%10; + return bcd; +} + +int DevOp::writeFpgaPrintPara(bool ignoreWarn){ + +#ifdef SYS_LINUX + unsigned int type = sysPara->status.fpgaVersionNum >> 12; + if((sysPara->para.currPrintMode == FAST_PRINT) && !sysPara->para.charWidthSetEnable + || sysPara->status.build_dat.builTime == 73 || type == 6) + sysPara->loadVolteParaFromFile((PRINT_MODE)sysPara->para.currPrintMode); + + int currPrintCol = sysPara->status.currPrintCol + BLANK_COL_NUM; + sysPara->para.printRowDelay = sysPara->para.currPrintMode; + if(sysPara->status.isPrinting == false) + sysPara->status.pixNumPerCol = sysPara->status.currPrintRow; + else + sysPara->status.currPrintRow = sysPara->status.pixNumPerCol; + sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol; + sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100; + sysPara->para.printDirection = (sysPara->para.upDownInverse?1:0) + ((sysPara->para.leftRightInverse?1:0)<<1) + ((sysPara->para.scanInverse?1:0)<<2); + sysPara->para.dotNumPerCol = (sysPara->para.pixNumPerCol- sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.printRowDelay + 1) + + (sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.lineEndAdjustPointDelay + 1); + sysPara->para.dotNumPerCol = sysPara->para.pixNumPerCol? + ((sysPara->para.dotNumPerCol*(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum))/sysPara->para.pixNumPerCol):1; + sysPara->para.dotNumPerCol += sysPara->para.printColDelay; + + sysPara->para.dotNumPerCol =( sysPara->para.alterPrint.enable)? sysPara->para.dotNumPerCol/2:sysPara->para.dotNumPerCol; + + sysPara->para.lastLineEndPointFixedDACValue = sysPara->para.lastLineEndPointFixedValue * MAX_FPGA_DAC_VALUE/ 1000; + sysPara->para.productNumToGenerateOutputPulse = sysPara->para.pulseOutputEnable?sysPara->para.productCntPerOutputPulse:0; + sysPara->para.FullColFixDacVal = sysPara->para.FullColFixVal ; // NC + if(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum < 2 && sysPara->para.pixNumPerCol > 4){ + if(!ignoreWarn){ + QMessageBox::warning(0,tr("警告"),QString("当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!!").arg(sysPara->para.pixNumPerCol).arg(sysPara->para.reducedPixelNum)); + } + } + + int DACStep = (sysPara->status.currPrintRow && sysPara->status.currAlterPrintRow > 0)? + (sysPara->para.endVoltage - sysPara->para.startVoltage) + * MAX_FPGA_DAC_VALUE/(100 * ((sysPara->para.alterPrint.enable)?sysPara->status.currAlterPrintRow :sysPara->status.currPrintRow)) + :0; + int steal_dac_step = sysPara->status.currPrintRow > 3? + (sysPara->para.endVoltage - sysPara->para.startVoltage) + * MAX_FPGA_DAC_VALUE/(100 * ((sysPara->para.alterPrint.enable)?sysPara->status.currAlterPrintRow-1:sysPara->status.currPrintRow-1)) + :0; + + sysPara->para.steal_dac_row = steal_dac_step; + + int printVerticalButtom = sysPara->para.startVoltage * MAX_FPGA_DAC_VALUE/100; + int printVerticalTop = sysPara->para.endVoltage * MAX_FPGA_DAC_VALUE/100; + int pointAdjustVoltagePos = sysPara->para.pointVoltageAdjustPos * MAX_FPGA_DAC_VALUE/100; //点距电压调整位置 + /*---------------------------------------------------------------------------------*/ +#if 1 + /*---------------------------------------------------------------------------------*/ + // 将 满列/单点/两点/三点/四点表格 电压值 转换成 DAC(12位)值 + // unsigned int pixel_full_table[32] = { // 满点电压表 + // 60, 70, 79, 88, 96, 104, 112, 120, + // 128, 136, 144, 152, 159, 166, 173, 180, + // 187, 194, 201, 208, 215, 222, 229, 236, + // 245, 250, 257, 264, 271, 277, 283, 289 + // }; + + unsigned int pixel_1_table_64k[32] = { // 单点电压表 + 682, 745, 849, 941, 1051, 1146, 1242, 1337, + 1433, 1528, 1624, 1719, 1815, 1911, 1992, 2088, + 2184, 2279, 2375, 2457, 2538, 2620, 2702, 2784, + 2866, 2948, 3030, 3112, 3194, 3276, 3357, 3439 + }; + +#if 1 + unsigned int fast_pixel_1_table_96k[32] = { // 单点电压表 + 950, 1200, 1550, 1780, 2000, 2180, 2330, 2280, + 2450, 2620, 2730, 2870, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; +#endif + // unsigned int fast_pixel_1_table_96k[32] = { // 单点电压表 + // 920, 1130, 1400, 1560, 1680, 1810, 1920, 0, + // 0, 0, 0, 0, 0, 0, 0, 0, + // 0, 0, 0, 0, 0, 0, 0, 0, + // 0, 0, 0, 0, 0, 0, 0, 0 + // }; + + unsigned int normal_pixel_1_table_128k[32] = { // 单点电压表 + 950, 1200, 1550, 1780, 2000, 2180, 2330, 2280, + 2450, 2620, 2730, 2870, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; + + // unsigned int pixel_2_table[32][2] = { // 两点电压表 + // { 60, 69 }, { 67, 76 }, { 74, 83 }, { 81, 90 }, { 88, 97 }, { 95, 104 }, { 102, 112 }, { 109, 119 }, + // { 116, 126 }, { 123, 133 }, { 130, 140 }, { 137, 147 }, { 144, 154 }, { 151, 161 }, { 158, 168 }, { 165, 175 }, + // { 172, 182 }, { 179, 189 }, { 186, 196 }, { 193, 203 }, { 200, 210 }, { 207, 217 }, { 214, 224 }, { 221, 231 }, + // { 228, 238 }, { 235, 245 }, { 242, 252 }, { 249, 259 }, { 256, 266 }, { 263, 273 }, { 270, 280 }, { 277, 287 } + // }; + + // unsigned int pixel_3_table[32][3] = { // 三点电压表 + // { 60, 69, 76 }, { 67, 76, 83 }, { 74, 83, 90 }, { 81, 90, 97 }, + // { 88, 97, 104 }, { 95, 104, 112 }, { 102, 112, 120 }, { 109, 119, 127 }, + // { 116, 126, 134 }, { 123, 134, 142 }, { 130, 141, 149 }, { 137, 148, 156 }, + // { 144, 156, 163 }, { 151, 163, 170 }, { 158, 170, 177 }, { 165, 177, 184 }, + // { 172, 184, 191 }, { 179, 191, 197 }, { 186, 198, 205 }, { 193, 205, 212 }, + // { 200, 212, 219 }, { 207, 219, 226 }, { 214, 226, 233 }, { 221, 233, 240 }, + // { 228, 240, 247 }, { 235, 247, 254 }, { 242, 254, 261 }, { 249, 261, 268 }, + // { 256, 268, 275 }, { 263, 275, 282 }, { 270, 282, 289 }, { 277, 289, 296 } + // }; + + // unsigned int pixel_4_table[32][4] = { // 四点电压表 + // { 60, 69, 76, 83 }, { 67, 76, 83, 90 }, { 74, 83, 90, 97 }, { 81, 90, 97, 104 }, + // { 88, 97, 104, 112 }, { 95, 104, 112, 120 }, { 102, 112, 120, 127 }, { 109, 119, 127, 134 }, + // { 116, 126, 134, 142 }, { 123, 134, 142, 149 }, { 130, 141, 149, 156 }, { 137, 148, 156, 163 }, + // { 144, 156, 163, 170 }, { 151, 163, 170, 177 }, { 158, 170, 177, 184 }, { 165, 177, 184, 191 }, + // { 172, 184, 191, 197 }, { 179, 191, 197, 205 }, { 186, 198, 205, 212 }, { 193, 205, 212, 219 }, + // { 200, 212, 219, 226 }, { 207, 219, 226, 233 }, { 214, 226, 233, 240 }, { 221, 233, 240, 247 }, + // { 228, 240, 247, 254 }, { 235, 247, 254, 261 }, { 242, 254, 261, 268 }, { 249, 261, 268, 275 }, + // { 256, 268, 275, 282 }, { 263, 275, 282, 289 }, { 270, 282, 289, 296 }, { 277, 289, 296, 303 } + // }; + //#define DAC_RADIO (((float)sysPara->para.dacScale)/100) // 1V 对应的DAC,看起来13.05比较接近 + //整体阶梯缩放算法:比如缩放比例为80%,一列4个点最后一个点的比例为80%,阶梯为5%(100-80)/4=5,倒数第二个刚是75%,依此类推。 + //#define DAC_RADIO2 (nCurrPrintRow > 1 ? (((float)(100-((100-sysPara->para.dacScale)/((nCurrPrintRow-1)>0?(nCurrPrintRow-1):1)*i)))/100) : 13.05) + + int nCurrPrintRow = sysPara->status.currPrintRow; + + qint16 matchFullDACArray[40]; + qint16 matchOneDACArray[40]; + qint16 matchTwoDACArray[40][2]; + qint16 matchThreeDACArray[40][3]; + qint16 matchFourDACArray[40][4]; + qint16 matchFiveDACArray[40][5]; + qint16 matchGapDACArray[48][5]; + qint16 matchPreDACArray[16][5]; + qint16 matchComplexDACArray[32][4]; + qint16 matchOneDACArrayStandard[32]; + memset(matchFullDACArray, 0, sizeof(matchFullDACArray)); + memset(matchOneDACArray, 0, sizeof(matchOneDACArray)); + memset(matchTwoDACArray, 0, sizeof(matchTwoDACArray)); + memset(matchThreeDACArray, 0, sizeof(matchThreeDACArray)); + memset(matchFourDACArray, 0, sizeof(matchFourDACArray)); + memset(matchFiveDACArray, 0, sizeof(matchFiveDACArray)); + memset(matchGapDACArray, 0, sizeof(matchGapDACArray)); + memset(matchPreDACArray, 0, sizeof(matchPreDACArray)); + memset(matchComplexDACArray, 0, sizeof(matchComplexDACArray)); + memset(matchOneDACArrayStandard, 0, sizeof(matchOneDACArrayStandard)); + if((sysPara->para.currPrintMode == FAST_PRINT) && !sysPara->para.charWidthSetEnable){ + for (int i = 0; i < 40; i++) + { + matchFullDACArray[i] = sysPara->voltePara.pixel_full_table[i] ; + } + + for (int i = 0; i < 40; i++) + { + matchOneDACArray[i] = sysPara->voltePara.pixel_1_table[i] ; + } + + for (int i = 0; i < 40; i++) + { + for (int j = 0; j < 2; j++) + { + matchTwoDACArray[i][j] = sysPara->voltePara.pixel_2_table[i][j] ; + } + } + + for (int i = 0; i < 40; i++) + { + for (int j = 0; j < 3; j++) + { + matchThreeDACArray[i][j] = sysPara->voltePara.pixel_3_table[i][j] ; + } + } + + for (int i = 0; i < 40; i++) + { + for (int j = 0; j < 4; j++) + { + matchFourDACArray[i][j] = sysPara->voltePara.pixel_4_table[i][j] ; + } + } + + for (int i = 0; i < 40; i++) + { + for (int j = 0; j < 5; j++) + { + matchFiveDACArray[i][j] = sysPara->voltePara.pixel_5_table[i][j] ; + } + } + + for (int i = 0; i < 48; i++) + { + for (int j = 0; j < 5; j++) + { + matchGapDACArray[i][j] = sysPara->voltePara.pixel_gap_table[i][j] ; + } + } + + for (int i = 0; i < 16; i++) + { + for (int j = 0; j < 5; j++) + { + matchPreDACArray[i][j] = sysPara->voltePara.pixel_pre_table[i][j] ; + } + } + + for (int i = 0; i < 32; i++) + { + for (int j = 0; j < 4; j++) + { + matchComplexDACArray[i][j] = sysPara->voltePara.pixel_c_table[i][j] ; + } + } + + for (int i = 0; i < 16; i++) + { + sysPara->voltePara.pixel_para_table[i] = 0; + } + } + else{ +#if 1 + if (sysPara->para.oscillatoFreq == 0) { // 64K + for (int i = 0; i < 32; i++) + { + matchOneDACArrayStandard[i] = pixel_1_table_64k[i] ; + } + + } + else if (sysPara->para.oscillatoFreq == 2) { // 96K + if(sysPara->para.printRowDelay == 0) + { + for (int i = 0; i < 32; i++) + { + matchOneDACArrayStandard[i] = fast_pixel_1_table_96k[i] ; + } + } + else if(sysPara->para.printRowDelay == 1) + { + for (int i = 0; i < 32; i++) + { + matchOneDACArrayStandard[i] = fast_pixel_1_table_96k[i] ; + } + } + } + else if (sysPara->para.oscillatoFreq == 3) { // 128k + for (int i = 0; i < 32; i++) + { + matchOneDACArrayStandard[i] = normal_pixel_1_table_128k[i] ; + } + } +#endif + } + + // for (int i = 0; i < 32; i++) + // { + // for (int j = 0; j < 2; j++) + // { + // matchTwoDACArray[i][j] = pixel_2_table[i][j] *DAC_RADIO2; + // } + // } + + // for (int i = 0; i < 32; i++) + // { + // for (int j = 0; j < 3; j++) + // { + // matchThreeDACArray[i][j] = pixel_3_table[i][j] *DAC_RADIO2; + // } + // } + + // for (int i = 0; i < 32; i++) + // { + // for (int j = 0; j < 4; j++) + // { + // matchFourDACArray[i][j] = pixel_4_table[i][j] *DAC_RADIO2; + // } + // } + + // 将 满列/单点/两点/三点/四点表格 电压值 转换成 DAC(12位)值 + /*---------------------------------------------------------------------------------*/ +#endif + unsigned short DACArray[64]; + memset(DACArray,0,sizeof(DACArray)); + quint16 notGapDACArray[64]; + quint16 fullColDACArray[64]; + memset(notGapDACArray,0,sizeof(notGapDACArray)); + memset(fullColDACArray,0,sizeof(fullColDACArray)); + + //#define DAC_RADIO (14.36) // 1V 对应的DAC,看起来13.05比较接近 + //#define DAC_RADIO (13.05) // 1V 对应的DAC,看起来13.05比较接近 + //#define DAC_RADIO (13.05*sysPara->para.dacScale/100) // 1V 对应的DAC,看起来13.05比较接近 +#define DAC_RADIO (nCurrPrintRow > 1 ? (13.05*(100-((100-sysPara->para.dacScale)/((nCurrPrintRow-1)>0?(nCurrPrintRow-1):1)*i))/100) : 13.05) + if(1) + { + //int nCurrPrintRow = sysPara->status.currPrintRow; +#if 0 + + if(sysPara->para.FullColFixVal == 1) + { + //qDebug()<<"adj voltage"<status.currPrintRow; i++) + { + if (i<40) { + float temp = sysPara->para.printed_adj_dac[i] * DAC_RADIO; + // qDebug()<<"normal dac:"<status.currPrintRow; i++) + { + if (i<40) { + float temp = sysPara->para.printed_continue_col_dac[i] * DAC_RADIO; + // qDebug()<<"not gap:"<status.currPrintRow; i++) { + if (i<40) { + float temp = sysPara->para.printed_full_col_dac[i] * DAC_RADIO; + // qDebug()<<"full_col:"<status.currPrintRow; i++) + { + if(!sysPara->para.scanInverse) + DACArray[i] = printVerticalButtom + i*DACStep; + else + DACArray[i] = printVerticalTop - i*DACStep; + + if(DACArray[i] >= pointAdjustVoltagePos) { + DACArray[i] += sysPara->para.PointVoltageAdjustValue; + } + + notGapDACArray[i] = DACArray[i]; + fullColDACArray[i] = DACArray[i]; + // qDebug()<<"[writeFpgaPrintPara fun]DACArray[i]:"<status.currPrintRow; i++) + { + if(!sysPara->para.scanInverse) + DACArray[i] = printVerticalButtom + i*DACStep; + else + DACArray[i] = printVerticalTop - i*DACStep; + + if(DACArray[i] >= pointAdjustVoltagePos) { + DACArray[i] += sysPara->para.PointVoltageAdjustValue; + } + + notGapDACArray[i] = DACArray[i]; + fullColDACArray[i] = DACArray[i]; + // qDebug()<<"[writeFpgaPrintPara fun]DACArray[i]:"<para.recommendedPrintSpeed == 3){ + fast_96k_7dot_adj_default_dac[0] = 60; + fast_96k_7dot_continue_default_dac[1] = 83; + } + int fast_96k_7dot_full_default_dac_H[] = {80, 108, 125, 144, 160, 176, 186}; + int fast_96k_7dot_adj_default_dac_H[] = {76, 91, 106, 118, 132, 146, 164}; + int fast_96k_7dot_continue_default_dac_H[] = {0, 104, 120, 136, 152, 166, 184}; + + int fast_96k_7dot_full_default_dac_S[] = {80, 108, 124, 138, 152, 164, 174}; + int fast_96k_7dot_adj_default_dac_S[] = {76, 91, 102, 114, 127, 140, 152}; + int fast_96k_7dot_continue_default_dac_S[] = {0, 104, 120, 134, 147, 160, 172}; + + int fast_96k_9dot_full_default_dac[] = {68, 92, 107, 120, 132, 142, 150, 146, 154}; + if(sysPara->para.mode0211) + { + fast_96k_9dot_full_default_dac[0] = 58; + fast_96k_9dot_full_default_dac[1] = 80; + fast_96k_9dot_full_default_dac[2] = 93; + fast_96k_9dot_full_default_dac[3] = 106; + fast_96k_9dot_full_default_dac[4] = 120; + fast_96k_9dot_full_default_dac[5] = 132; + fast_96k_9dot_full_default_dac[6] = 138; + fast_96k_9dot_full_default_dac[7] = 136; + fast_96k_9dot_full_default_dac[8] = 141; + } + int fast_96k_9dot_adj_default_dac[] = {62, 73, 84, 95, 106, 117, 128, 139, 150}; + int fast_96k_9dot_continue_default_dac[] = {0, 85, 98, 111, 124, 137, 148, 146, 153}; + + int fast_96k_9dot_full_default_dac_S[] = {68, 92, 107, 120, 131, 142, 150, 160, 170}; + int fast_96k_9dot_adj_default_dac_S[] = {60, 72, 83, 94, 105, 116, 127, 138, 148}; + int fast_96k_9dot_continue_default_dac_S[] = {0, 85, 98, 113, 125, 141, 153, 164, 172}; + + int fast_96k_12dot_full_default_dac[] = {60, 82, 96, 110, 124, 138, 152, 152, 164, 176, 188, 200}; + int fast_96k_12dot_adj_default_dac[] = {57, 71, 83, 95, 107, 119, 131, 143, 155, 167, 179, 191}; + int fast_96k_12dot_continue_default_dac[] = {0, 82, 98, 113, 126, 139, 152, 152, 164, 176, 188, 200}; + + int fast_96k_12dot_full_default_dac_U[] = {68, 92, 106, 120, 132, 144, 154, 154, 166, 178, 190, 200}; + int fast_96k_12dot_adj_default_dac_U[] = {0, 65, 83, 95, 108, 120, 132, 144, 156, 168, 180, 192}; + int fast_96k_12dot_continue_default_dac_U[] = {0, 0, 95, 111, 126 , 139, 151, 153, 165, 177, 188, 200}; + + int fast_96k_12dot_full_default_dac_UD[] = {63, 85, 99, 111, 123, 135, 147, 147, 158, 169, 180, 190}; + int fast_96k_12dot_adj_default_dac_UD[] = {0, 60, 77, 88, 99, 110, 122, 134, 146, 158, 170, 182}; + int fast_96k_12dot_continue_default_dac_UD[] = {0, 0, 90, 106, 121, 134, 146, 148, 160, 171, 181, 190}; + + int fast_96k_12dot_full_default_dac_H[] = {68, 90, 108, 125, 141, 156, 170, 170, 180, 193, 204, 214}; + int fast_96k_12dot_adj_default_dac_H[] = {59, 73, 86, 99, 112, 125, 138, 151, 164, 177, 190, 203}; + int fast_96k_12dot_continue_default_dac_H[] = {0, 87, 102, 117, 131 , 145, 159, 161, 173, 186, 199, 212}; + + int fast_96k_12dot_full_default_dac_HU[] = {68, 90, 108, 125, 141, 156, 169, 170, 181, 192, 203, 212}; + int fast_96k_12dot_adj_default_dac_HU[] = {0, 70, 86, 99, 112, 125, 138, 151, 164, 177, 190, 202}; + int fast_96k_12dot_continue_default_dac_HU[] = {0, 0, 100, 117, 130, 143, 157, 160, 173, 186, 199, 211}; + + int normal_96k_5dot_full_default_dac[] = {70, 84, 96, 106, 116}; + int normal_96k_5dot_adj_default_dac[] = {70, 81, 91, 101, 111}; + int normal_96k_5dot_continue_default_dac[] = {0, 82, 94, 104, 114}; + + int normal_96k_5dot_full_default_dac_H[] = {80, 96, 110, 124, 134}; + int normal_96k_5dot_adj_default_dac_H[] = {78, 91, 105, 117, 129}; + int normal_96k_5dot_continue_default_dac_H[] = {0, 94, 108, 121, 134}; + + int normal_96k_7dot_full_default_dac[] = {70, 84, 96, 106, 116, 126, 135}; + int normal_96k_7dot_adj_default_dac[] = {69, 80, 90, 100, 110, 120, 129}; + int normal_96k_7dot_continue_default_dac[] = {0, 82, 94, 104, 114, 124, 134}; + + int normal_96k_7dot_full_default_dac_H[] = {80, 96, 110, 124, 138, 152, 162}; + int normal_96k_7dot_adj_default_dac_H[] = {78, 91, 105, 118, 131, 144, 156}; + int normal_96k_7dot_continue_default_dac_H[] = {0, 94, 108, 121, 134, 147, 160}; + + int normal_96k_9dot_full_default_dac[] = {70, 84, 94, 104, 114, 124, 134, 144, 150}; + int normal_96k_9dot_adj_default_dac[] = {68, 78, 88, 98, 107, 117, 126, 136, 143}; + int normal_96k_9dot_continue_default_dac[] = {0, 82, 92, 102, 112, 122, 132, 142, 152}; + + int normal_96k_9dot_full_default_dac_H[] = {80, 98, 112, 126, 138, 148, 158, 168, 178}; + int normal_96k_9dot_adj_default_dac_H[] = {76, 88, 100, 112, 124, 135, 146, 157, 170}; + int normal_96k_9dot_continue_default_dac_H[] = {0, 94, 108, 120, 132, 144, 155, 165, 176}; + + int normal_96k_12dot_full_default_dac[] = {70, 86, 97, 106, 115, 124, 133, 142, 151, 160, 169, 176}; + int normal_96k_12dot_adj_default_dac[] = {68, 77, 86, 95, 104, 113, 122, 131, 140, 149, 158, 167}; + int normal_96k_12dot_continue_default_dac[] = {0, 83, 92, 101, 110, 119, 128, 137, 146, 156, 165, 174}; + + int normal_96k_12dot_full_default_dac_U[] = {72, 83, 92, 101, 110, 119, 128, 137, 146, 155, 164}; + int normal_96k_12dot_adj_default_dac_U[] = {0, 74, 83, 92, 101, 110, 119, 128, 137, 146, 155, 164}; + int normal_96k_12dot_continue_default_dac_U[] = {0, 0, 92, 101, 110, 119, 128, 137, 146, 155, 164, 173}; + + int normal_96k_12dot_full_default_dac_H[] = {80, 94, 106, 118, 130, 142, 153, 163, 173, 183, 193, 200}; + int normal_96k_12dot_adj_default_dac_H[] = {76, 87, 98, 108, 118, 128, 138, 148, 158, 168, 178, 189}; + int normal_96k_12dot_continue_default_dac_H[] = {0, 92, 104, 115, 126, 137, 148, 158, 168, 178, 188, 198}; + + int normal_96k_12dot_full_default_dac_HU[] = {78, 92, 102, 112, 122, 132, 142, 152, 162, 172, 182, 190}; + int normal_96k_12dot_adj_default_dac_HU[] = {0, 72, 83, 93, 103, 113, 123, 134, 146, 158, 170, 180}; + int normal_96k_12dot_continue_default_dac_HU[] = {0, 0, 92, 102, 112, 122, 132, 143, 155, 167, 179, 188}; + + int normal_96k_16dot_full_default_dac[] = {70, 80, 88, 98, 107, 116, 125, 134, 143, 153, 162, 171, 180, 189, 198, 205}; + int normal_96k_16dot_adj_default_dac[] = {64, 74, 88, 89, 97, 105, 113, 121, 129, 138, 147, 156, 165, 174, 183, 192}; + int normal_96k_16dot_continue_default_dac[] = {0, 77, 86, 95, 104, 113, 121, 130, 139, 147, 156, 166, 175, 185, 194,200}; + + int normal_96k_16dot_full_default_dac_H[] = {80, 96, 108, 118, 128, 138, 148, 158, 168, 178, 188, 198, 208, 218, 228, 236}; + int normal_96k_16dot_adj_default_dac_H[] = {76, 87, 98, 108, 118, 128, 137, 146, 155, 164, 173, 183, 193, 203, 214, 224}; + int normal_96k_16dot_continue_default_dac_H[] = {0, 92, 104, 114, 124, 134, 144, 154, 164, 174, 184, 194, 204, 214, 224, 234}; + + int slow1_96k_5dot_full_default_dac[] = {70, 80, 88, 97, 104}; + int slow1_96k_5dot_adj_default_dac[] = {68, 76, 85, 93, 101}; + int slow1_96k_5dot_continue_default_dac[] = {0, 79, 88, 96, 103}; + + int slow1_96k_7dot_full_default_dac[] = {70, 80, 88, 97, 104, 111, 118}; + int slow1_96k_7dot_adj_default_dac[] = {68, 76, 85, 93, 101, 108, 113}; + int slow1_96k_7dot_continue_default_dac[] = {0, 79, 88, 96, 103, 110, 117}; + + int slow1_96k_9dot_full_default_dac[] = {70, 81, 88, 97, 104, 112, 119, 126, 133}; + int slow1_96k_9dot_adj_default_dac[] = {68, 76, 84, 91, 99, 106, 113, 120, 127}; + int slow1_96k_9dot_continue_default_dac[] = {0, 79, 88, 96, 103, 110, 117, 124, 131}; + + int slow1_96k_12dot_full_default_dac[] = {70, 81, 88, 97, 104, 112, 119, 126, 133, 140, 147, 155}; + int slow1_96k_12dot_adj_default_dac[] = {68, 76, 84, 91, 99, 106, 113, 120, 127, 134, 141, 147}; + int slow1_96k_12dot_continue_default_dac[] = {0, 79, 88, 96, 103, 110, 117, 124, 131, 138, 145, 152}; + + int slow1_96k_16dot_full_default_dac[] = {70, 81, 88, 97, 104, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 181}; + int slow1_96k_16dot_adj_default_dac[] = {68, 76, 84, 91, 99, 106, 113, 120, 127, 134, 141, 148, 155, 162, 169, 176}; + int slow1_96k_16dot_continue_default_dac[] = {0, 79, 88, 96, 103, 110, 117, 124, 131, 138, 145, 152, 159, 166, 173, 180}; + + int slow1_96k_24dot_full_default_dac[] = {70, 80 , 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 173, 181, 187,194,201,208,215,222,229,236,242}; + int slow1_96k_24dot_adj_default_dac[] = {69, 76, 84, 91, 98, 106, 114, 121, 128, 136, 143, 150, 157, 164, 171, 177,183,190,196,203,209,215,221,227}; + int slow1_96k_24dot_continue_default_dac[] = {0, 79, 87, 95, 103, 110, 118, 125, 133, 140, 148, 155, 161, 169, 175, 181,186,195,200,208,215,222,228,234}; + + int fast_96k_5dot_full_default_dac_F[] = {70, 92, 107, 120, 130}; + int fast_96k_7dot_full_default_dac_F[] = {70, 92, 107, 120, 132, 142, 151}; + int normal_96k_5dot_full_default_dac_F[] = {70, 85, 95, 106, 116}; + int normal_96k_7dot_full_default_dac_F[] = {70, 85, 95, 107, 117, 126, 135}; + /* ==============96k end ========================*/ + + /* ==============128k ========================*/ + int fast_128k_5dot_full_default_dac[] = {80, 106, 121, 135, 145}; + int fast_128k_5dot_adj_default_dac[] = {77, 87, 100, 111, 122}; + int fast_128k_5dot_continue_default_dac[] = {0, 101, 114, 128, 142}; + int fast_128k_7dot_full_default_dac[] = {79, 105, 122, 140, 155, 169, 178}; + int fast_128k_7dot_adj_default_dac[] = {75, 87, 102, 113, 130, 142, 157}; + int fast_128k_7dot_continue_default_dac[] = { 0, 101, 119, 134, 149, 164, 178}; + int fast_128k_7dot_full_default_dac_A[] = {79, 105, 122, 137, 149, 164, 175}; + int fast_128k_7dot_adj_default_dac_A[] = {73, 84, 98, 112, 126, 140, 154}; + int fast_128k_7dot_continue_default_dac_A[] = { 0, 100, 117, 132, 147, 162, 175}; + int fast_128k_5dot_full_default_dac_A[] = {80, 106, 121, 140, 154}; + int fast_128k_5dot_adj_default_dac_A[] = {75, 90, 106, 120, 134}; + int fast_128k_5dot_continue_default_dac_A[] = {0, 105, 127, 142, 158}; + int fast_128k_5dot_full_default_dac_B[] = {83, 110, 123, 140, 148}; + int fast_128k_5dot_adj_default_dac_B[] = {78, 90, 103, 114, 126}; + int fast_128k_5dot_continue_default_dac_B[] = {0, 105, 118, 133, 146}; + int fast_128k_7dot_full_default_dac_B[] = {79, 105, 122, 140, 156, 167, 178}; + int fast_128k_7dot_adj_default_dac_B[] = {75, 87, 101, 114, 128, 142, 156}; + int fast_128k_7dot_continue_default_dac_B[] = { 0, 105, 120, 135, 150, 165, 180}; + int fast_128k_7dot_full_default_dac_C[] = {79, 105, 120, 135, 145, 155, 165}; + int fast_128k_7dot_adj_default_dac_C[] = {71, 85, 96, 107, 120, 133, 143}; + int fast_128k_7dot_continue_default_dac_C[] = { 0, 97, 113, 126, 139, 152, 165}; + int fast_128k_9dot_full_default_dac_A[] = {74, 99, 115, 130, 140, 150, 163, 158, 166}; + int fast_128k_9dot_adj_default_dac_A[] = {72, 82, 92, 104, 115, 127, 138, 149, 160}; + int fast_128k_9dot_continue_default_dac_A[] = {0, 95, 108, 121, 133, 145, 158, 157, 169}; + int fast_128k_9dot_full_default_dac_C[] = {78, 108, 125, 143, 158, 172, 185, 180, 191}; + int fast_128k_9dot_adj_default_dac_C[] = {73, 86, 99, 112, 125, 138, 151, 164, 178}; + int fast_128k_9dot_continue_default_dac_C[] = {0, 100, 116, 132, 144, 158, 174, 176, 191}; + int fast_128k_9dot_full_default_dac_D[] = {80, 106, 123, 137, 150, 163, 173, 185, 192}; + int fast_128k_9dot_adj_default_dac_D[] = {73, 84, 96, 106, 116, 126, 136, 146, 156}; + int fast_128k_9dot_continue_default_dac_D[] = {0, 102, 116, 134, 144, 158, 168, 182, 192}; + int fast_128k_9dot_full_default_dac_B[] = {74, 100, 120, 140, 155, 170, 190, 188, 199}; + int fast_128k_9dot_adj_default_dac_B[] = {70, 86, 102, 117, 132, 147, 162, 177, 190}; + int fast_128k_9dot_continue_default_dac_B[] = {0, 100, 120, 136, 152, 168, 185, 187, 200}; + if(sysPara->para.reducedPixelNumRatio >=20){ + fast_128k_7dot_continue_default_dac_B[2] = 115; + fast_128k_9dot_continue_default_dac_B[2] = 115; + fast_128k_9dot_full_default_dac_B[8] = 202; + } + if(sysPara->para.recommendedPrintSpeed == 3){ + fast_128k_7dot_full_default_dac[0] = 78; + fast_128k_7dot_continue_default_dac[1] = 100; + fast_128k_7dot_continue_default_dac[2] = 116; + fast_128k_7dot_continue_default_dac[3] = 132; + fast_128k_7dot_adj_default_dac[0] = 72; + } + int fast_128k_9dot_full_default_dac[9] = {74, 99, 115, 130, 140, 153, 163, 158, 166}; + if(sysPara->para.mode0211) + { + fast_128k_9dot_full_default_dac[0] = 74; + fast_128k_9dot_full_default_dac[1] = 99; + fast_128k_9dot_full_default_dac[2] = 117; + fast_128k_9dot_full_default_dac[3] = 134; + fast_128k_9dot_full_default_dac[4] = 145; + fast_128k_9dot_full_default_dac[5] = 158; + fast_128k_9dot_full_default_dac[6] = 171; + fast_128k_9dot_full_default_dac[7] = 163; + fast_128k_9dot_full_default_dac[8] = 166; + } + int fast_128k_9dot_adj_default_dac[] = {72, 83, 96, 106, 118, 127, 138, 149, 158}; + int fast_128k_9dot_continue_default_dac[] = {0, 95, 108, 121, 133, 145, 158, 157, 167}; + if(sysPara->para.recommendedPrintSpeed == 1){ + fast_128k_5dot_full_default_dac[3] = 133; + fast_128k_5dot_full_default_dac[4] = 143; + fast_128k_5dot_adj_default_dac[1] = 89; + fast_128k_5dot_adj_default_dac[2] = 102; + fast_128k_5dot_adj_default_dac[3] = 114; + fast_128k_5dot_adj_default_dac[4] = 126; + + fast_128k_7dot_full_default_dac[0] = 74; + fast_128k_7dot_full_default_dac[1] = 99; + fast_128k_7dot_full_default_dac[2] = 115; + fast_128k_7dot_full_default_dac[3] = 130; + fast_128k_7dot_full_default_dac[4] = 140; + fast_128k_7dot_full_default_dac[5] = 150; + fast_128k_7dot_full_default_dac[6] = 160; + + fast_128k_7dot_adj_default_dac[0] = 72; + fast_128k_7dot_adj_default_dac[1] = 83; + fast_128k_7dot_adj_default_dac[2] = 96; + fast_128k_7dot_adj_default_dac[3] = 106; + fast_128k_7dot_adj_default_dac[4] = 118; + fast_128k_7dot_adj_default_dac[5] = 130; + fast_128k_7dot_adj_default_dac[6] = 142; + + fast_128k_7dot_continue_default_dac[1] = 95; + fast_128k_7dot_continue_default_dac[2] = 108; + fast_128k_7dot_continue_default_dac[3] = 121; + fast_128k_7dot_continue_default_dac[4] = 133; + fast_128k_7dot_continue_default_dac[5] = 146; + fast_128k_7dot_continue_default_dac[6] = 158; + + fast_128k_9dot_full_default_dac[5] = 152; + fast_128k_9dot_full_default_dac[6] = 162; + fast_128k_9dot_full_default_dac[7] = 160; + + if(sysPara->para.mode0211) + { + fast_128k_9dot_full_default_dac[0] = 74; + fast_128k_9dot_full_default_dac[1] = 99; + fast_128k_9dot_full_default_dac[2] = 117; + fast_128k_9dot_full_default_dac[3] = 134; + fast_128k_9dot_full_default_dac[4] = 145; + fast_128k_9dot_full_default_dac[5] = 158; + fast_128k_9dot_full_default_dac[6] = 171; + fast_128k_9dot_full_default_dac[7] = 163; + fast_128k_9dot_full_default_dac[8] = 166; + } + fast_128k_9dot_adj_default_dac[0] = 70; + fast_128k_9dot_adj_default_dac[1] = 81; + fast_128k_9dot_adj_default_dac[2] = 92; + fast_128k_9dot_adj_default_dac[3] = 103; + fast_128k_9dot_adj_default_dac[4] = 114; + fast_128k_9dot_adj_default_dac[5] = 125; + fast_128k_9dot_adj_default_dac[6] = 136; + fast_128k_9dot_adj_default_dac[7] = 147; + fast_128k_9dot_adj_default_dac[8] = 158; + } + int normal_128k_5dot_full_default_dac[] = {80, 96, 107, 118, 128}; + int normal_128k_5dot_adj_default_dac[] = {77, 87, 98, 108, 118}; + int normal_128k_5dot_continue_default_dac[] = {0, 94, 105, 116, 127}; + int normal_128k_7dot_full_default_dac[] = {80, 96, 107, 118, 128, 137, 143}; + int normal_128k_7dot_adj_default_dac[] = {77, 87, 98, 108, 116, 127, 134}; + int normal_128k_7dot_continue_default_dac[] = {0, 94, 104, 115, 126, 135, 144}; + int normal_128k_9dot_full_default_dac[] = {80, 96, 107, 118, 128, 137, 143, 154, 162}; + int normal_128k_9dot_adj_default_dac[] = {77, 87, 98, 108, 118, 128, 137, 147, 156}; + int normal_128k_9dot_continue_default_dac[] = {0, 93, 104, 115, 126, 135, 140, 151, 161}; + /* ==============128k end ========================*/ + +#endif + for(int i = 0; i < sysPara->status.currPrintRow; i++) + { + if(!sysPara->para.scanInverse) + DACArray[i] = printVerticalButtom + i*DACStep; + else + DACArray[i] = printVerticalTop - i*DACStep; + + if(DACArray[i] >= pointAdjustVoltagePos) { + DACArray[i] += sysPara->para.PointVoltageAdjustValue; + } + + notGapDACArray[i] = DACArray[i]; + fullColDACArray[i] = DACArray[i]; + // qDebug()<<"[writeFpgaPrintPara fun]DACArray[i]:"<para.FullColFixVal == 1) + { + if (sysPara->status.currPrintRow <= 5) { + for(int i = 0; i < sysPara->status.currPrintRow; i++) + { + if (sysPara->para.oscillatoFreq == 0) { // 64K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_64k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_64k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_64k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_64k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_64k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.oscillatoFreq == 2) { // 96 + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_96k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_96k_5dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_5dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_5dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + if(!sysPara->para.Vol1of8En && sysPara->para.FullColFixVal){ + full_dac_temp = fast_96k_5dot_full_default_dac_F[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_96k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = normal_96k_5dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_5dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_5dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + if(!sysPara->para.Vol1of8En && sysPara->para.FullColFixVal){ + full_dac_temp = normal_96k_5dot_full_default_dac_F[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_96k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + } + else if (sysPara->para.oscillatoFreq == 3) { // 128k + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_128k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_128k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_128k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_128k_5dot_adj_default_dac_A[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_5dot_continue_default_dac_A[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_5dot_full_default_dac_A[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 2){ + adj_dac_temp = fast_128k_5dot_adj_default_dac_B[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_5dot_continue_default_dac_B[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_5dot_full_default_dac_B[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_128k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_128k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_128k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 2) { + // float adj_dac_temp = slow1_128k_5dot_adj_default_dac[i] * DAC_RADIO; + // DACArray[i] = adj_dac_temp; + // float continue_dac_temp = slow1_128k_5dot_continue_default_dac[i] * DAC_RADIO; + // notGapDACArray[i] = continue_dac_temp; + // float full_dac_temp = slow1_128k_5dot_full_default_dac[i] * DAC_RADIO; + // fullColDACArray[i] = full_dac_temp; + } + } + } + } + else if (sysPara->status.currPrintRow <= 7) { + for(int i = 0; i < sysPara->status.currPrintRow; i++) + { + if (sysPara->para.oscillatoFreq == 0) { // 64K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_64k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_64k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_64k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_64k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_64k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.oscillatoFreq == 2) { // 96K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_96k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_96k_7dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_7dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_7dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + if(sysPara->para.recommendedPrintSpeed == 2){ + adj_dac_temp = fast_96k_7dot_adj_default_dac_S[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_7dot_continue_default_dac_S[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_7dot_full_default_dac_S[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + if(!sysPara->para.Vol1of8En && sysPara->para.FullColFixVal){ + full_dac_temp = fast_96k_7dot_full_default_dac_F[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_96k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = normal_96k_7dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_7dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_7dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + if(!sysPara->para.Vol1of8En && sysPara->para.FullColFixVal){ + full_dac_temp = normal_96k_7dot_full_default_dac_F[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_96k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + } + else if (sysPara->para.oscillatoFreq == 3) { // 128K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_128k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_128k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_128k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 2){ + adj_dac_temp = fast_128k_7dot_adj_default_dac_A[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_7dot_continue_default_dac_A[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_7dot_full_default_dac_A[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_128k_7dot_adj_default_dac_B[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_7dot_continue_default_dac_B[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_7dot_full_default_dac_B[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 3){ + adj_dac_temp = fast_128k_7dot_adj_default_dac_C[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_7dot_continue_default_dac_C[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_7dot_full_default_dac_C[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 25; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_128k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_128k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_128k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + // float adj_dac_temp = slow1_128k_7dot_adj_default_dac[i] * DAC_RADIO; + // DACArray[i] = adj_dac_temp; + // float continue_dac_temp = slow1_128k_7dot_continue_default_dac[i] * DAC_RADIO; + // notGapDACArray[i] = continue_dac_temp; + // float full_dac_temp = slow1_128k_7dot_full_default_dac[i] * DAC_RADIO; + // fullColDACArray[i] = full_dac_temp; + } + } + } + } + else if (sysPara->status.currPrintRow <= 9) { + for(int i = 0; i < sysPara->status.currPrintRow; i++) + { + if (sysPara->para.oscillatoFreq == 0) { // 64K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_64k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_64k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_64k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_64k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_64k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.oscillatoFreq == 2) { // 96K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_96k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_96k_9dot_adj_default_dac_S[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_9dot_continue_default_dac_S[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_9dot_full_default_dac_S[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 25; + sysPara->voltePara.pixel_para_table[5] = 15; + } + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_96k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = normal_96k_9dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_9dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_9dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + // sysPara->voltePara.pixel_para_table[0] = 20; + // sysPara->voltePara.pixel_para_table[1] = 20; + // sysPara->voltePara.pixel_para_table[2] = 30; + // sysPara->voltePara.pixel_para_table[3] = 30; + // sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_96k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + if (sysPara->para.oscillatoFreq == 3) { // 128K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_128k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_128k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_128k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_128k_9dot_adj_default_dac_A[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_9dot_continue_default_dac_A[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_9dot_full_default_dac_A[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 2){ + adj_dac_temp = fast_128k_9dot_adj_default_dac_B[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_9dot_continue_default_dac_B[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_9dot_full_default_dac_B[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 3){ + adj_dac_temp = fast_128k_9dot_adj_default_dac_C[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_128k_9dot_continue_default_dac_C[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_128k_9dot_full_default_dac_C[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 25; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_128k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_128k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_128k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + // float adj_dac_temp = slow1_128k_9dot_adj_default_dac[i] * DAC_RADIO; + // DACArray[i] = adj_dac_temp; + // float continue_dac_temp = slow1_128k_9dot_continue_default_dac[i] * DAC_RADIO; + // notGapDACArray[i] = continue_dac_temp; + // float full_dac_temp = slow1_128k_9dot_full_default_dac[i] * DAC_RADIO; + // fullColDACArray[i] = full_dac_temp; + } + } + } + } + else if (sysPara->status.currPrintRow <= 12) { + for(int i = 0; i < sysPara->status.currPrintRow; i++) + { + if (sysPara->para.oscillatoFreq == 0) { // 64K + if ((sysPara->para.printRowDelay == 0) && (i < 5)) {//交替 + float adj_dac_temp = fast_64k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_64k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_64k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_64k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.alterPrint.enable){ + adj_dac_temp = normal_64k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_64k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_64k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_64k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.alterPrint.enable){ + adj_dac_temp = slow1_64k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = slow1_64k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = slow1_64k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + } + else if (sysPara->para.oscillatoFreq == 2) { // 96K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_96k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if((sysPara->para.recommendedPrintSpeed == 1) && (sysPara->para.upDownInverse)){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_HU[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_HU[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_HU[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.upDownInverse){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_U[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_U[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_U[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + if((sysPara->para.recommendedPrintSpeed == 2) && (sysPara->para.upDownInverse)){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_UD[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_UD[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_UD[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + sysPara->voltePara.pixel_para_table[0] = 30; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 25; + } + if ((sysPara->para.printRowDelay == 0) && (i < 5) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = fast_96k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if ((sysPara->para.printRowDelay == 1) && (i < 5) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = normal_96k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if ((sysPara->para.printRowDelay == 2) && (i < 5) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = slow1_96k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_96k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if((sysPara->para.recommendedPrintSpeed == 1) && (sysPara->para.upDownInverse)){ + adj_dac_temp = normal_96k_12dot_adj_default_dac_HU[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_12dot_continue_default_dac_HU[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_12dot_full_default_dac_HU[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = normal_96k_12dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_12dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_12dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if((sysPara->para.recommendedPrintSpeed == 2) && (sysPara->para.upDownInverse)){ + adj_dac_temp = normal_96k_12dot_adj_default_dac_U[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_12dot_continue_default_dac_U[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_12dot_full_default_dac_U[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_96k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + if ((sysPara->para.oscillatoFreq == 3) && (i < 5) && sysPara->para.alterPrint.enable) { // 128K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_128k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_128k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_128k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_128k_5dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_128k_5dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_128k_5dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 2) { + // float adj_dac_temp = slow1_128k_9dot_adj_default_dac[i] * DAC_RADIO; + // DACArray[i] = adj_dac_temp; + // float continue_dac_temp = slow1_128k_9dot_continue_default_dac[i] * DAC_RADIO; + // notGapDACArray[i] = continue_dac_temp; + // float full_dac_temp = slow1_128k_9dot_full_default_dac[i] * DAC_RADIO; + // fullColDACArray[i] = full_dac_temp; + } + } + } + } + else if (sysPara->status.currPrintRow <= 16) { + for(int i = 0; i < sysPara->status.currPrintRow; i++) + { + if (sysPara->para.oscillatoFreq == 0) { // 64K + if ((sysPara->para.printRowDelay == 0) && (i < 7) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = fast_64k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_64k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_64k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_64k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_16dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 20; + sysPara->voltePara.pixel_para_table[1] = 20; + sysPara->voltePara.pixel_para_table[2] = 30; + sysPara->voltePara.pixel_para_table[3] = 30; + sysPara->voltePara.pixel_para_table[4] = 10; + if(sysPara->para.alterPrint.enable){ + adj_dac_temp = normal_64k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_64k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_64k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_64k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_16dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.alterPrint.enable){ + adj_dac_temp = slow1_64k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = slow1_64k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = slow1_64k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + } + else if (sysPara->para.oscillatoFreq == 2) { // 96K + if ((sysPara->para.printRowDelay == 0) && (i < 7) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = fast_96k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if ((sysPara->para.printRowDelay == 1) && (i < 7) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = normal_96k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if ((sysPara->para.printRowDelay == 2) && (i < 7) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = slow1_96k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_96k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_16dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = normal_96k_16dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_16dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_16dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + // sysPara->voltePara.pixel_para_table[4] = 38; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_96k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_16dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + if ((sysPara->para.oscillatoFreq == 3) && (i < 7) && sysPara->para.alterPrint.enable) { // 128K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_128k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_128k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_128k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_128k_7dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_128k_7dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_128k_7dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + // float adj_dac_temp = slow1_128k_9dot_adj_default_dac[i] * DAC_RADIO; + // DACArray[i] = adj_dac_temp; + // float continue_dac_temp = slow1_128k_9dot_continue_default_dac[i] * DAC_RADIO; + // notGapDACArray[i] = continue_dac_temp; + // float full_dac_temp = slow1_128k_9dot_full_default_dac[i] * DAC_RADIO; + // fullColDACArray[i] = full_dac_temp; + } + } + } + } + else if (sysPara->status.currPrintRow <= 24) { + for(int i = 0; i < sysPara->status.currPrintRow; i++) + { + if (sysPara->para.oscillatoFreq == 0) { // 64K + if ((sysPara->para.printRowDelay == 0) && (i < 9) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = fast_64k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_64k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_64k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_64k_24dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_24dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_24dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.alterPrint.enable){ + adj_dac_temp = normal_64k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_64k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_64k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_64k_24dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_24dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_24dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if(sysPara->para.alterPrint.enable){ + adj_dac_temp = slow1_64k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = slow1_64k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = slow1_64k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + } + else if (sysPara->para.oscillatoFreq == 2) { // 96K + if ((sysPara->para.printRowDelay == 0) && (i < 9) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = fast_96k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + // sysPara->voltePara.pixel_para_table[0] = 20; + // sysPara->voltePara.pixel_para_table[1] = 20; + // sysPara->voltePara.pixel_para_table[2] = 15; + // sysPara->voltePara.pixel_para_table[3] = 15; + // sysPara->voltePara.pixel_para_table[4] = 15; + } + else if ((sysPara->para.printRowDelay == 1) && (i < 9) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = normal_96k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + // sysPara->voltePara.pixel_para_table[0] = 20; + // sysPara->voltePara.pixel_para_table[1] = 20; + // sysPara->voltePara.pixel_para_table[2] = 30; + // sysPara->voltePara.pixel_para_table[3] = 30; + // sysPara->voltePara.pixel_para_table[4] = 10; + } + else if ((sysPara->para.printRowDelay == 2) && (i < 9) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = slow1_96k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + // sysPara->voltePara.pixel_para_table[0] = 20; + // sysPara->voltePara.pixel_para_table[1] = 20; + // sysPara->voltePara.pixel_para_table[2] = 30; + // sysPara->voltePara.pixel_para_table[3] = 30; + // sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + float adj_dac_temp = slow1_96k_24dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_24dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_24dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + if ((sysPara->para.oscillatoFreq == 3) && (i < 9) && sysPara->para.alterPrint.enable) { // 128K + if (sysPara->para.printRowDelay == 0) { + float adj_dac_temp = fast_128k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_128k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_128k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 1) { + float adj_dac_temp = normal_128k_9dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_128k_9dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_128k_9dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + sysPara->voltePara.pixel_para_table[0] = 15; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 10; + } + else if (sysPara->para.printRowDelay == 2) { + // float adj_dac_temp = slow1_128k_9dot_adj_default_dac[i] * DAC_RADIO; + // DACArray[i] = adj_dac_temp; + // float continue_dac_temp = slow1_128k_9dot_continue_default_dac[i] * DAC_RADIO; + // notGapDACArray[i] = continue_dac_temp; + // float full_dac_temp = slow1_128k_9dot_full_default_dac[i] * DAC_RADIO; + // fullColDACArray[i] = full_dac_temp; + } + } + } + } + else if (sysPara->status.currPrintRow <= 32) { + for(int i = 0; i < sysPara->status.currPrintRow; i++){ + if (sysPara->para.oscillatoFreq == 0) { + if((sysPara->para.printRowDelay == 1) && (sysPara->para.alterPrint.enable)){ + float adj_dac_temp = normal_64k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if((sysPara->para.printRowDelay == 2) && (sysPara->para.alterPrint.enable)){ + float adj_dac_temp = slow1_64k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.oscillatoFreq == 2) { + if ((sysPara->para.printRowDelay == 0) && (i <= 12) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = fast_96k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = fast_96k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = fast_96k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if((sysPara->para.recommendedPrintSpeed == 1) && (sysPara->para.upDownInverse)){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_HU[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_HU[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_HU[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.upDownInverse){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_U[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_U[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_U[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + if((sysPara->para.recommendedPrintSpeed == 2) && (sysPara->para.upDownInverse)){ + adj_dac_temp = fast_96k_12dot_adj_default_dac_UD[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = fast_96k_12dot_continue_default_dac_UD[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = fast_96k_12dot_full_default_dac_UD[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if ((sysPara->para.printRowDelay == 1) && (i <= 12) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = normal_96k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + if((sysPara->para.recommendedPrintSpeed == 1) && (sysPara->para.upDownInverse)){ + adj_dac_temp = normal_96k_12dot_adj_default_dac_HU[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_12dot_continue_default_dac_HU[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_12dot_full_default_dac_HU[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if(sysPara->para.recommendedPrintSpeed == 1){ + adj_dac_temp = normal_96k_12dot_adj_default_dac_H[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_12dot_continue_default_dac_H[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_12dot_full_default_dac_H[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if((sysPara->para.recommendedPrintSpeed == 2) && (sysPara->para.upDownInverse)){ + adj_dac_temp = normal_96k_12dot_adj_default_dac_U[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + continue_dac_temp = normal_96k_12dot_continue_default_dac_U[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + full_dac_temp = normal_96k_12dot_full_default_dac_U[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if ((sysPara->para.printRowDelay == 2) && (i <= 12) && sysPara->para.alterPrint.enable) {//交替 + float adj_dac_temp = slow1_96k_12dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_12dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + sysPara->voltePara.pixel_para_table[0] = 30; + sysPara->voltePara.pixel_para_table[1] = 15; + sysPara->voltePara.pixel_para_table[2] = 15; + sysPara->voltePara.pixel_para_table[3] = 15; + sysPara->voltePara.pixel_para_table[4] = 25; + } + } + } + else{ + for(int i = 0; i < sysPara->status.currPrintRow; i++){ + if (sysPara->para.oscillatoFreq == 0) { + if((sysPara->para.printRowDelay == 1) && (sysPara->para.alterPrint.enable)){ + float adj_dac_temp = normal_64k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_64k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_64k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if((sysPara->para.printRowDelay == 2) && (sysPara->para.alterPrint.enable)){ + float adj_dac_temp = slow1_64k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_64k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_64k_16dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + else if (sysPara->para.oscillatoFreq == 2) { + if((sysPara->para.printRowDelay == 1) && (sysPara->para.alterPrint.enable)){ + float adj_dac_temp = normal_96k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = normal_96k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = normal_96k_12dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + else if((sysPara->para.printRowDelay == 2) && (sysPara->para.alterPrint.enable)){ + float adj_dac_temp = slow1_96k_16dot_adj_default_dac[i] * DAC_RADIO; + DACArray[i] = adj_dac_temp; + float continue_dac_temp = slow1_96k_16dot_continue_default_dac[i] * DAC_RADIO; + notGapDACArray[i] = continue_dac_temp; + float full_dac_temp = slow1_96k_16dot_full_default_dac[i] * DAC_RADIO; + fullColDACArray[i] = full_dac_temp; + } + } + } + } + } + /* sysPara->para.FullColFixVal == 1 */ +#endif + +#ifdef FXCHG + if(sysPara->para.alterPrint.enable) { + for(int i = 0; i < sysPara->status.currPrintRow/2+1 && (i+sysPara->status.currPrintRow/2+1<40); i++) + { + DACArray[i+sysPara->status.currPrintRow/2+1] =(i < sysPara->status.currPrintRow )?DACArray[i]:0; + } + } +#endif + } + else { // "Vol 1167 6984 13909 19726 25543 26928 " 1167 1491 1815 2139 2463 2787 3111 + + int DacVolRang=printVerticalTop-printVerticalButtom; + int DacRateRang=0; + + for(int i = 1; i < ((sysPara->para.alterPrint.enable)?sysPara->status.currAlterPrintRow :sysPara->status.currPrintRow); i++) + DacRateRang+=sysPara->para.adjVolDacRate[i]; + + if(DacRateRang<5) DacRateRang=5*sysPara->status.currPrintRow; // + + //QString strv="Vol\n"; + /* ===0 */ + if(!sysPara->para.scanInverse) DACArray[0]=printVerticalButtom; + else DACArray[0]=printVerticalTop; + if(DACArray[0] >= pointAdjustVoltagePos) DACArray[0] += sysPara->para.PointVoltageAdjustValue; + /* 1 -- n */ + for(int i = 1; i < ((sysPara->para.alterPrint.enable)?sysPara->status.currAlterPrintRow :sysPara->status.currPrintRow); i++) + { + if(!sysPara->para.scanInverse) + DACArray[i] = DACArray[i-1]+ sysPara->para.adjVolDacRate[i] *DacVolRang/DacRateRang; + else + DACArray[i] = DACArray[i-1] - sysPara->para.adjVolDacRate[i] *DacVolRang/DacRateRang; + + if(DACArray[i] >= pointAdjustVoltagePos) + DACArray[i] += sysPara->para.PointVoltageAdjustValue; + } +#ifdef FXCHG + if(sysPara->para.alterPrint.enable) { + for(int i = 0; i < sysPara->status.currPrintRow/2+1 && (i+sysPara->status.currPrintRow/2+1<40); i++) + { + DACArray[i+sysPara->status.currPrintRow/2+1] =(i < sysPara->status.currPrintRow )?DACArray[i]:0; + } + } +#endif + } + + unsigned short fast_128k_7dot_dac[]={ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 900, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1050, 0, 0, 0, 0, 0, 0, 0, + 920,1240, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1240, 0, 0, 0, 0, 0, 0, + 940, 0,1350, 0, 0, 0, 0, 0, 0, + 0,1050,1400, 0, 0, 0, 0, 0, 0, + 950,1280,1460, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1380, 0, 0, 0, 0, 0, + 920, 0, 0,1510, 0, 0, 0, 0, 0, + 0,1050, 0,1510, 0, 0, 0, 0, 0, + + 950,1280, 0,1600, 0, 0, 0, 0, 0, + 0, 0,1220,1600, 0, 0, 0, 0, 0, + 940, 0,1380,1600, 0, 0, 0, 0, 0, + 0,1050,1400,1600, 0, 0, 0, 0, 0, + 950,1290,1490,1630, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1550, 0, 0, 0, 0, + 950, 0, 0, 0,1670, 0, 0, 0, 0, + 0,1050, 0, 0,1700, 0, 0, 0, 0, + 950,1280, 0, 0,1730, 0, 0, 0, 0, + 0, 0,1240, 0,1730, 0, 0, 0, 0, + +// 950, 0,1400, 0,1760, 0, 0, 0, 0, +// 0,1050,1400, 0,1770, 0, 0, 0, 0, +// 950,1290,1490, 0,1770, 0, 0, 0, 0, +// 0, 0, 0,1370,1770, 0, 0, 0, 0, +// 950, 0, 0,1540,1820, 0, 0, 0, 0, +// 0,1070, 0,1560,1820, 0, 0, 0, 0, +// 940,1280, 0,1620,1820, 0, 0, 0, 0, +// 0, 0,1260,1640,1820, 0, 0, 0, 0, +// 950, 0,1400,1640,1820, 0, 0, 0, 0, +// 0,1070,1400,1640,1820, 0, 0, 0, 0, + 940, 0,1400, 1,1600, 0, 0, 0, 0, + 0,1050,1400, 1,1600, 0, 0, 0, 0, + 930,1280,1480, 1,1600, 0, 0, 0, 0, + 0, 0, 0,5460,1600, 0, 0, 0, 0, + 950, 0, 0,5626,1620, 0, 0, 0, 0, + 0,1070, 0,5626,1620, 0, 0, 0, 0, + 940,1280, 0,5696,1620, 0, 0, 0, 0, + 0, 0,1260,5706,1620, 0, 0, 0, 0, + 950, 0,1400,5746,1620, 0, 0, 0, 0, + 0,1070,1440,5746,1620, 0, 0, 0, 0, + +// 950,1290,1490,1700,1840, 0, 0, 0, 0, +// 950,1290,1490,1680,1800, 0, 0, 0, 0, +// 0, 0, 0, 0, 0,1720, 0, 0, 0, +// 940, 0, 0, 0, 0,1830, 0, 0, 0, +// 0,1050, 0, 0, 0,1840, 0, 0, 0, +// 940,1280, 0, 0, 0,1880, 0, 0, 0, +// 0, 0,1240, 0, 0,1880, 0, 0, 0, +// 940, 0,1390, 0, 0,1920, 0, 0, 0, +// 0,1070,1420, 0, 0,1920, 0, 0, 0, +// 950,1280,1480, 0, 0,1940, 0, 0, 0, +// 0, 0, 0,1430, 0,1940, 0, 0, 0, + 950,1290,1480,5746,1620, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1700, 0, 0, 0, + 940, 0, 0, 0, 0,1830, 0, 0, 0, + 0,1050, 0, 0, 0,1840, 0, 0, 0, + 940,1260, 0, 0, 0,1760, 0, 0, 0, + 0, 0,1240, 0, 0,1880, 0, 0, 0, + 940, 0,1380, 0, 1,1780, 0, 0, 0, + 0,1060,1400, 0, 1,1780, 0, 0, 0, + 940,1260,1440, 0, 1,1780, 0, 0, 0, + 0, 0, 0,1400, 1,1780, 0, 0, 0, + +// 940, 0, 0,1560, 0,1970, 0, 0, 0, +// 0,1060, 0,1580, 0,1970, 0, 0, 0, +// 950,1280, 0,1640, 0,1970, 0, 0, 0, +// 0, 0,1240,1640, 0,1970, 0, 0, 0, +// 950, 0,1400,1650, 0,1970, 0, 0, 0, +// 0,1070,1420,1650, 0,1970, 0, 0, 0, +// 950,1290,1490,1690, 0,1970, 0, 0, 0, +// 0, 0, 0, 0,1560,1970, 0, 0, 0, +// 940, 0, 0, 0,1710,2000, 0, 0, 0, +// 0,1060, 0, 0,1710,1990, 0, 0, 0, + 940, 0, 0,1500, 1,1780, 0, 0, 0, + 0,1060, 0,1540, 1,1780, 0, 0, 0, + 940,1280, 0,1600, 1,1780, 0, 0, 0, + 0, 0,1240,1600, 1,1780, 0, 0, 0, + 940, 0,1400,1640, 1,1780, 0, 0, 0, + 0,1060,1430,1640, 1,1780, 0, 0, 0, + 940,1260,1480,1660, 1,1780, 0, 0, 0, + 0, 0, 0, 0,5646,1780, 0, 0, 0, + 940, 0, 0, 0,5796,1800, 0, 0, 0, + 0,1060, 0, 0,5796,1800, 0, 0, 0, + +// 940,1280, 0, 0,1790,2020, 0, 0, 0, +// 0, 0,1240, 0,1790,2020, 0, 0, 0, +// 950, 0,1400, 0,1790,2000, 0, 0, 0, +// 0,1060,1420, 0,1810,2000, 0, 0, 0, +// 950,1280,1480, 0,1820,2000, 0, 0, 0, +// 0, 0, 0,1400,1810,2020, 0, 0, 0, +// 940, 0, 0,1600,1860,2020, 0, 0, 0, +// 0,1050, 0,1600,1860,2020, 0, 0, 0, +// 950,1280, 0,1660,1860,2020, 0, 0, 0, +// 0, 0,1290,1660,1860,2020, 0, 0, 0, + 940,1260, 0, 0,5856,1800, 0, 0, 0, + 0, 0,1240, 0,5856,1800, 0, 0, 0, + 940, 0,1400, 0,5866,1800, 0, 0, 0, + 0,1060,1420, 0,5866,1800, 0, 0, 0, + 940,1280,1480, 0,5876,1800, 0, 0, 0, + 0, 0, 0,1390,5876,1800, 0, 0, 0, + 940, 0, 0,1540,5896,1800, 0, 0, 0, + 0,1050, 0,1540,5896,1800, 0, 0, 0, + 940,1260, 0,1660,5916,1800, 0, 0, 0, + 0, 0,1240,1660,5916,1800, 0, 0, 0, + +// 950, 0,1410,1660,5940,1820, 0, 0, 0, +// 0,1070,1440,1660,5940,1820, 0, 0, 0, +// 950,1290,1510,1710,5960,1820, 0, 0, 0, +// 0, 0, 0, 0, 0, 0,1830, 0, 0, +// 930, 0, 0, 0, 0, 0,1830, 0, 0, +// 0,1050, 0, 0, 0, 0,1950, 0, 0, +// 940,1280, 0, 0, 0, 0,1980, 0, 0, +// 0, 0,1240, 0, 0, 0,1980, 0, 0, +// 940, 0,1380, 0, 0, 0,2000, 0, 0, +// 0,1060,1420, 0, 0, 0,2000, 0, 0, + 950, 0,1400,1670,5926,1800, 0, 0, 0, + 0,1060,1420,1670,5926,1800, 0, 0, 0, + 950,1260,1460,1670,5926,1800, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1830, 0, 0, + 930, 0, 0, 0, 0, 0,1830, 0, 0, + 0,1050, 0, 0, 0, 0,1950, 0, 0, + 940,1280, 0, 0, 0, 0,1980, 0, 0, + 0, 0,1240, 0, 0, 0,1980, 0, 0, + 940, 0,1380, 0, 0, 0,2000, 0, 0, + 0,1060,1420, 0, 0, 0,2000, 0, 0, + +// 950,1280,1480, 0, 0, 0,2000, 0, 0, +// 0, 0, 0,1390, 0, 0,2000, 0, 0, +// 940, 0, 0,1530, 0, 0,2020, 0, 0, +// 0,1060, 0,1550, 0, 0,2020, 0, 0, +// 950,1280, 0,1630, 0, 0,2040, 0, 0, +// 0, 0,1240,1620, 0, 0,2040, 0, 0, +// 930, 0,1410,1660, 0, 0,2040, 0, 0, +// 0,1070,1440,1660, 0, 0,2060, 0, 0, +// 950,1290,1500,1680, 0, 0,2060, 0, 0, +// 0, 0, 0, 0,1570, 1,1900, 0, 0, + 940,1260,1440, 0, 0, 0,2000, 0, 0, + 0, 0, 0,1390, 0, 0,2000, 0, 0, + 940, 0, 0,1530, 0, 0,2000, 0, 0, + 0,1060, 0,1540, 0, 0,2000, 0, 0, + 940,1260, 0,1600, 0, 1,1870, 0, 0, + 0, 0,1240,1620, 0, 0,2000, 0, 0, + 940, 0,1410,1620, 0, 1,1900, 0, 0, + 0,1060,1420,1620, 0, 1,1900, 0, 0, + 940,1260,1460,1640, 0, 1,1900, 0, 0, + 0, 0, 0, 0,1570, 1,1900, 0, 0, + + 950, 0, 0, 0,1700, 1,1900, 0, 0, + 0,1060, 0, 0,1710, 1,1900, 0, 0, + 940,1280, 0, 0,1750, 1,1900, 0, 0, + 0, 0,1260, 0,1750, 1,1900, 0, 0, + 940, 0,1400, 0,1770, 1,1900, 0, 0, + 0,1060,1420, 0,1770, 1,1900, 0, 0, + 950,1280,1480, 0,1810, 1,1900, 0, 0, + 0, 0, 0,1400,1800, 1,1910, 0, 0, + 950, 0, 0,1560,1830, 1,1920, 0, 0, + 0,1060, 0,1580,1830, 1,1920, 0, 0, + + 940,1280, 0,1630,1830, 1,1920, 0, 0, + 0, 0,1260,1630,1830, 1,1920, 0, 0, + 950, 0,1420,1650,1840, 1,1920, 0, 0, + 0,1070,1430,1650,1840, 1,1920, 0, 0, + 950,1280,1480,1680,1850, 1,1920, 0, 0, + 0, 0, 0, 0, 0,5776,1930, 0, 0, + 940, 0, 0, 0, 0,5896,1930, 0, 0, + 0,1070, 0, 0, 1,5816,1930, 0, 0, + 950,1280, 0, 0, 1,5836,1930, 0, 0, + 0, 0,1240, 0, 1,5836,1930, 0, 0, + + 950, 0,1380, 0, 1,5836,1930, 0, 0, + 0,1070,1420, 0, 1,5836,1930, 0, 0, + 950,1280,1480, 0, 1,5836,1930, 0, 0, + 0, 0, 0,1480, 1,5876,1930, 0, 0, + 940, 0, 0,1550, 1,5876,1930, 0, 0, + 0,1070, 0,1550, 1,5876,1930, 0, 0, + 940,1280, 0,1620, 1,5876,1930, 0, 0, + 0, 0,1240,1620, 1,5876,1930, 0, 0, + 940, 0,1380,1620, 1,5876,1930, 0, 0, + 0,1070,1440,1660, 1,5876,1930, 0, 0, + + 950,1290,1490,1680, 1,1780,2080, 0, 0, + 0, 0, 0, 0,5656,5876,1930, 0, 0, + 950, 0, 0, 1,5676,5876,1930, 0, 0, + 0,1070, 0, 1,5676,5876,1930, 0, 0, + 940,1280, 0, 1,1580,6036,1930, 0, 0, + 0, 0,1240, 1,1580,6036,1930, 0, 0, + 940, 0,1400, 1,1580,6036,1930, 0, 0, + 0,1060,1440, 1,1580,6036,1930, 0, 0, + 950,1280,1480, 0,1780,6056,1930, 0, 0, + 0, 0, 0,1420,1790,6056,1930, 0, 0, + + 950, 0, 1,1400,1770,6056,1930, 0, 0, + 0,1070, 1,1400,1770,6056,1930, 0, 0, + 950,1280, 0,1630,1850,6091,1940, 0, 0, + 0, 0,1290,1650,1850,6091,1940, 0, 0, + 950, 0,1400,1670,1850,6091,1940, 0, 0, + 0,1100,1460,1670,1850,6091,1940, 0, 0, + 960,1320,1570,1760,1980, 1,1940, 0, 0 + }; + unsigned short normal_128k_7dot_dac[]={ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 970, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1115, 0, 0, 0, 0, 0, 0, 0, + 5066,1180, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1245, 0, 0, 0, 0, 0, 0, + 970, 1,1310, 0, 0, 0, 0, 0, 0, + 0,5211,1340, 0, 0, 0, 0, 0, 0, + 5086,5296,1340, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1385, 0, 0, 0, 0, 0, + 970, 1, 0,1430, 0, 0, 0, 0, 0, + 0,1120, 1,1450, 0, 0, 0, 0, 0, + + 5076,1200, 1,1460, 0, 0, 0, 0, 0, + 0, 0,5356,1490, 0, 0, 0, 0, 0, + 980, 1,5416,1490, 0, 0, 0, 0, 0, + 0,5256,5456,1480, 0, 0, 0, 0, 0, + 5086,5316,5456,1480, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1535, 0, 0, 0, 0, + 980, 1, 0, 0,1560, 0, 0, 0, 0, + 0,1140, 1, 0,1580, 0, 0, 0, 0, + 5076,1200, 1, 0,1580, 0, 0, 0, 0, + 0, 0,1275, 1,1585, 0, 0, 0, 0, + + 980, 1,1310, 1,1585, 0, 0, 0, 0, + 0,5246,1360, 1,1585, 0, 0, 0, 0, + 5076,5296,1360, 1,1620, 0, 0, 0, 0, + 0, 0, 0,5521,1645, 0, 0, 0, 0, + 980, 1, 0,5546,1635, 0, 0, 0, 0, + 0,1140, 1,5566,1635, 0, 0, 0, 0, + 5076,1200, 1,5576,1635, 0, 0, 0, 0, + 0, 0,5406,5626,1635, 0, 0, 0, 0, + 980, 1,5436,5616,1635, 0, 0, 0, 0, + 0,5276,5476,5596,1635, 0, 0, 0, 0, + + 5086,5316,5456,5596,1635, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1680, 0, 0, 0, + 980, 1, 0, 0, 0,1700, 0, 0, 0, + 0,1130, 1, 0, 0,1700, 0, 0, 0, + 5076,1200, 1, 0, 0,1720, 0, 0, 0, + 0, 0,1280, 1, 0,1720, 0, 0, 0, + 980, 1,1315, 1, 0,1720, 0, 0, 0, + 0,5236,1360, 1, 0,1740, 0, 0, 0, + 5086,5296,1360, 1, 0,1750, 0, 0, 0, + 0, 0, 0,1430, 1,1750, 0, 0, 0, + + 980, 1, 0,1460, 1,1750, 0, 0, 0, + 0,1140, 1,1470, 1,1750, 0, 0, 0, + 5076,1200, 1,1480, 1,1750, 0, 0, 0, + 0, 0,5396,1500, 1,1760, 0, 0, 0, + 980, 1,5426,1510, 1,1760, 0, 0, 0, + 0,5256,5456,1510, 1,1760, 0, 0, 0, + 5076,5316,5456,1510, 1,1770, 0, 0, 0, + 0, 0, 0, 0,5666,1780, 0, 0, 0, + 980, 1, 0, 0,5676,1780, 0, 0, 0, + 0,1130, 1, 0,5686,1780, 0, 0, 0, + + 5076,1200, 1, 0,5696,1780, 0, 0, 0, + 0, 0,1290, 1,5716,1780, 0, 0, 0, + 980, 1,1330, 1,5756,1780, 0, 0, 0, + 0,5236,1360, 1,5756,1780, 0, 0, 0, + 5076,5296,1360, 1,5756,1780, 0, 0, 0, + 0, 0, 0,5526,5746,1780, 0, 0, 0, + 980, 1, 0,5556,5756,1780, 0, 0, 0, + 0,1130, 1,5586,5756,1780, 0, 0, 0, + 5076,1200, 1,5586,5756,1780, 0, 0, 0, + 0, 0,5386,5601,5756,1780, 0, 0, 0, + + 980, 1,5436,5601,5756,1780, 0, 0, 0, + 0,5246,5466,5601,5756,1780, 0, 0, 0, + 5086,5306,5476,5601,5756,1780, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1810, 0, 0, + 980, 1, 0, 0, 0, 0,1810, 0, 0, + 0,1130, 1, 0, 0, 0,1840, 0, 0, + 5076,1200, 1, 0, 0, 0,1840, 0, 0, + 0, 0,1290, 1, 0, 0,1850, 0, 0, + 980, 1,1330, 1, 0, 0,1850, 0, 0, + 0,5231,1360, 1, 0, 0,1850, 0, 0, + + 5076,5296,1360, 1, 0, 0,1850, 0, 0, + 0, 0, 0,1410, 1, 0,1850, 0, 0, + 980, 1, 0,1440, 1, 0,1860, 0, 0, + 0,1135, 1,1470, 1, 0,1860, 0, 0, + 5076,1200, 1,1480, 1, 0,1870, 0, 0, + 0, 0,5381,1505, 1, 0,1870, 0, 0, + 980, 1,5416,1510, 1, 0,1870, 0, 0, + 0,5236,5456,1510, 1, 0,1870, 0, 0, + 5086,5296,5456,1510, 1, 0,1880, 0, 0, + 0, 0, 0, 0,1550, 1,1880, 0, 0, + + 980, 1, 0, 0,1570, 1,1880, 0, 0, + 0,1130, 1, 0,1590, 1,1880, 0, 0, + 5076,1200, 1, 0,1610, 1,1890, 0, 0, + 0, 0,1300, 1,1620, 1,1890, 0, 0, + 980, 1,1330, 1,1620, 1,1890, 0, 0, + 0,5236,1360, 1,1630, 1,1890, 0, 0, + 5076,5296,1360, 1,1640, 1,1890, 0, 0, + 0, 0, 0,5506,1640, 1,1900, 0, 0, + 980, 1, 0,5546,1640, 1,1900, 0, 0, + 0,1135, 1,5556,1640, 1,1900, 0, 0, + + 5076,1200, 1,5556,1640, 1,1900, 0, 0, + 0, 0,5386,5596,1640, 1,1900, 0, 0, + 980, 1,5436,5606,1650, 1,1910, 0, 0, + 0,5226,5456,5606,1650, 1,1910, 0, 0, + 5086,5306,5466,5606,1650, 1,1910, 0, 0, + 0, 0, 0, 0, 0,5791,1910, 0, 0, + 980, 1, 0, 0, 0,5816,1910, 0, 0, + 0,1130, 1, 0, 0,5816,1910, 0, 0, + 5076,1200, 1, 0, 0,5816,1910, 0, 0, + 0, 0,1290, 1, 0,5816,1910, 0, 0, + + 990, 1,1320, 1, 0,5816,1910, 0, 0, + 0,5226,1360, 1, 0,5836,1910, 0, 0, + 5086,5306,1360, 1, 0,5836,1910, 0, 0, + 0, 0, 0,1420, 1,5846,1910, 0, 0, + 980, 1, 0,1450, 1,5846,1910, 0, 0, + 0,1130, 1,1450, 1,5846,1910, 0, 0, + 5076,1200, 1,1480, 1,5866,1910, 0, 0, + 0, 0,5386,1480, 1,5866,1910, 0, 0, + 980, 1,5426,1510, 1,5876,1920, 0, 0, + 0,5236,5476,1510, 1,5886,1920, 0, 0, + + 5086,5306,5456,1510, 1,5886,1920, 0, 0, + 0, 0, 0, 0,5641,5886,1920, 0, 0, + 980, 1, 0, 0,5646,5886,1920, 0, 0, + 0,1130, 1, 0,5676,5886,1920, 0, 0, + 5076,1200, 1, 0,5696,5886,1920, 0, 0, + 0, 0,1290, 1,5706,5896,1920, 0, 0, + 980, 1,1310, 1,5706,5896,1920, 0, 0, + 0,5226,1350, 1,5706,5896,1920, 0, 0, + 5086,5306,1350, 1,5706,5896,1920, 0, 0, + 0, 0, 0,5506,5736,5896,1920, 0, 0, + + 980, 1, 0,5526,5736,5896,1920, 0, 0, + 0,1130, 1,5546,5736,5896,1920, 0, 0, + 5076,1200, 1,5546,5736,5896,1920, 0, 0, + 0, 0,5386,5586,5736,5896,1920, 0, 0, + 980, 1,5406,5586,5736,5896,1920, 0, 0, + 0,5226,5456,5606,5756,5896,1920, 0, 0, +// 1000,1220,1360,1510,1660,1810,1940, 0, 0 + 5096,5316,5456,5606,5756,5906,1940, 0, 0 + }; + + unsigned short fast_128k_9dot_dac[]={ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 950, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1070, 0, 0, 0, 0, 0, 0, 0, + 970,1300, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1240, 0, 0, 0, 0, 0, 0, + 970, 0,1410, 0, 0, 0, 0, 0, 0, + 0,1090,1450, 0, 0, 0, 0, 0, 0, + 970,1320,1500, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1440, 0, 0, 0, 0, 0, + 970, 0, 0,1540, 0, 0, 0, 0, 0, + 0,1090, 0,1560, 0, 0, 0, 0, 0, + + 970,1320, 0,1630, 0, 0, 0, 0, 0, + 0, 0,1250,1630, 0, 0, 0, 0, 0, + 970, 0,1430,1660, 0, 0, 0, 0, 0, + 0,1090,1460,1660, 0, 0, 0, 0, 0, + 990,1340,1540,1700, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1580, 0, 0, 0, 0, + 970, 0, 0, 0,1700, 0, 0, 0, 0, + 0,1090, 0, 0,1700, 0, 0, 0, 0, + 970,1320, 0, 0,1770, 0, 0, 0, 0, + 0, 0,1300, 0,1770, 0, 0, 0, 0, + + 970, 0,1430, 0,1770, 0, 0, 0, 0, + 0,1090,1460, 0,1800, 0, 0, 0, 0, + 990,1340,1540, 0,1830, 0, 0, 0, 0, + 0, 0, 0,1440,1830, 0, 0, 0, 0, + 970, 0, 0,1560,1830, 0, 0, 0, 0, + 0,1090, 0,1590,1830, 0, 0, 0, 0, + 990,1340, 0,1650,1840, 0, 0, 0, 0, + 0, 0,1300,1680,1840, 0, 0, 0, 0, + 990, 0,1440,1680,1840, 0, 0, 0, 0, + 0,1120,1480,1680,1840, 0, 0, 0, 0, + + 990,1340,1540,1720,1860, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1720, 0, 0, 0, + 970, 0, 0, 0, 0,1860, 0, 0, 0, + 0,1090, 0, 0, 0,1860, 0, 0, 0, + 990,1340, 0, 0, 0,1900, 0, 0, 0, + 0, 0,1300, 0, 0,1900, 0, 0, 0, + 990, 0,1430, 0, 0,1900, 0, 0, 0, + 0,1090,1460, 0, 0,1920, 0, 0, 0, + 990,1340,1540, 0, 0,1920, 0, 0, 0, + 0, 0, 0,1440, 0,1920, 0, 0, 0, + + 990, 0, 0,1600, 0,1940, 0, 0, 0, + 0,1120, 0,1600, 0,1940, 0, 0, 0, + 990,1320, 0,1660, 0,1940, 0, 0, 0, + 0, 0,1260,1660, 0,1960, 0, 0, 0, + 990, 0,1460,1700, 0,1960, 0, 0, 0, + 0,1120,1480,1700, 0,1980, 0, 0, 0, + 990,1340,1540,1720, 0,1980, 0, 0, 0, + 0, 0, 0, 0,1570,1980, 0, 0, 0, + 990, 0, 0, 0,1710,2010, 0, 0, 0, + 0,1120, 0, 0,1730,2010, 0, 0, 0, + + 990,1340, 0, 0,1800,2010, 0, 0, 0, + 0, 0,1260, 0,1780,2010, 0, 0, 0, + 990, 0,1460, 0,1820,2010, 0, 0, 0, + 0,1120,1500, 0,1830,2010, 0, 0, 0, + 990,1340,1540, 0,1850,2020, 0, 0, 0, + 0, 0, 0,1480,1880,2020, 0, 0, 0, + 990, 0, 0,1600,1880,2020, 0, 0, 0, + 0,1120, 0,1620,1880,2020, 0, 0, 0, + 990,1340, 0,1670,1880,2020, 0, 0, 0, + 0, 0,1280,1670,1880,2020, 0, 0, 0, + + 990, 0,1440,1710,5976,1820, 0, 0, 0, + 0,1120,1500,1740,5976,1820, 0, 0, 0, + 990,1340,1540,1740,5976,1820, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1820, 0, 0, + 970, 0, 0, 0, 0, 0,1960, 0, 0, + 0,1120, 0, 0, 0, 0,1980, 0, 0, + 990,1320, 0, 0, 0, 0,2020, 0, 0, + 0, 0,1260, 0, 0, 0,2020, 0, 0, + 990, 0,1440, 0, 0, 0,2060, 0, 0, + 0,1120,1500, 0, 0, 0,2060, 0, 0, + + 990,1340,1540, 0, 0, 0,2060, 0, 0, + 0, 0, 0,1480, 0, 0,2060, 0, 0, + 990, 0, 0,1580, 0, 0,2080, 0, 0, + 0,1120, 0,1620, 0, 0,2080, 0, 0, + 990,1320, 0,1680, 0, 0,2080, 0, 0, + 0, 0,1260,1680, 0, 0,2080, 0, 0, + 990, 0,1480,1700, 0, 0,2100, 0, 0, + 0,1120,1500,1700, 0, 0,2100, 0, 0, + 990,1340,1540,1720, 0, 0,2100, 0, 0, + 0, 0, 0, 0,1700, 1,1940, 0, 0, + + 990, 0, 0, 0,1740, 1,1940, 0, 0, + 0,1120, 0, 0,1760, 1,1940, 0, 0, + 990,1320, 0, 0,1780, 1,1940, 0, 0, + 0, 0,1320, 0,1800, 1,1940, 0, 0, + 990, 0,1480, 0,1830, 1,1940, 0, 0, + 0,1120,1500, 0,1840, 1,1940, 0, 0, + 990,1340,1540, 0,1860, 1,1940, 0, 0, + 0, 0, 0,1440,1860, 1,1940, 0, 0, + 990, 0, 0,1580,1860, 1,1940, 0, 0, + 0,1120, 0,1600,1860, 1,1940, 0, 0, + + 990,1320, 0,1660,1860, 1,1940, 0, 0, + 0, 0,1240,1660,1860, 1,1940, 0, 0, + 990, 1,1320,1660,1860, 1,1940, 0, 0, + 0,1120,1500,1660,1860, 1,1940, 0, 0, + 990,1340,1540,1660,1860, 1,1940, 0, 0, + 0, 0, 0, 0, 0,5776,1940, 0, 0, + 990, 0, 0, 0, 0,5956,1940, 0, 0, + 0,1120, 0, 0, 0,5956,1940, 0, 0, + 990,1320, 0, 0, 0,5996,1940, 0, 0, + 0, 0,1240, 0, 0,5996,1940, 0, 0, + + 990, 0,1440, 0, 0,5996,1940, 0, 0, + 0,1120,1500, 0, 0,5996,1940, 0, 0, + 990,1340,1540, 0, 0,5996,1940, 0, 0, + 0, 0, 0,1440, 0,5996,1940, 0, 0, + 990, 0, 0,1600, 0,5996,1940, 0, 0, + 0,1120, 0,1630, 0,5996,1940, 0, 0, + 990,1320, 0,1650, 0,5996,1940, 0, 0, + 0, 0,1240,1660, 0,5996,1940, 0, 0, + 990, 0,1460,1660, 0,5996,1940, 0, 0, + 0,1120,1500,1680, 0,5996,1940, 0, 0, + + 990,1340,1540,1680, 0,5996,1940, 0, 0, + 0, 0, 0, 0,5656,5876,1940, 0, 0, + 990, 0, 0, 0,5676,5876,1940, 0, 0, + 0,1120, 0, 0,5676,5876,1940, 0, 0, + 990,1320, 0, 1,1580,6036,1940, 0, 0, + 0, 0,1240, 1,1580,6036,1940, 0, 0, + 990, 0,1460, 1,1580,6036,1940, 0, 0, + 0,1120,1500, 1,1580,6036,1940, 0, 0, + 990,1340,1540, 1,1600,6036,1940, 0, 0, + 0, 0, 0,1420,1800,6056,1940, 0, 0, + + 990, 0, 1,1400,1700,6065,1940, 0, 0, + 0,1120, 1,1460,1700,6065,1940, 0, 0, + 990,1320, 1,1500,1700,6065,1940, 0, 0, + 0, 0,1320,1660,1860,6091,1940, 0, 0, + 990, 0,1400,1680,1860,6091,1940, 0, 0, + 0,1120,1480,1680,1880,6091,1940, 0, 0, + 990,1340,1540,1680,1880,6091,1940, 0, 0, + 0, 0, 0, 0, 0, 0, 0,2000, 0, + 990, 0, 0, 0, 0, 0, 0,2000, 0, + 0,1120, 0, 0, 0, 0, 0,2000, 0, + + 990,1320, 0, 0, 0, 0, 0,2000, 0, + 0, 0,1240, 0, 0, 0, 0,2000, 0, + 990, 0,1440, 0, 0, 0, 0,2180, 0, + 0,1120,1500, 0, 0, 0, 0,2180, 0, + 990,1340,1540, 0, 0, 0, 0,2180, 0, + 0, 0, 0,1400, 0, 0, 0,2180, 0, + 990, 0, 0,1560, 0, 0, 0,2180, 0, + 0,1120, 0,1600, 0, 0, 0,2180, 0, + 990,1320, 0,1660, 0, 0, 0,2180, 0, + 0, 0,1240,1680, 0, 0, 0,2180, 0, + + 990, 0,1440,1680, 0, 0, 0,2200, 0, + 0,1120,1500,1680, 0, 0, 0,2200, 0, + 990,1340,1540,1700, 0, 0, 0,2200, 0, + 0, 0, 0, 0,1600, 0, 0,2200, 0, + 990, 0, 0, 0,1720, 0, 0,2200, 0, + 0,1120, 0, 0,1720, 0, 0,2200, 0, + 990,1320, 0, 0,1740, 0, 0,2200, 0, + 0, 0,1240, 0,1760, 0, 0,2200, 0, + 990, 0,1480, 0,1780, 0, 0,2200, 0, + 0,1120,1500, 0,1780, 0, 1,2040, 0, + + 990,1340,1540, 0,1820, 0, 1,2040, 0, + 0, 0, 0,1420,1840, 0, 1,2040, 0, + 990, 0, 0,1560,1860, 0, 1,2040, 0, + 0,1120, 0,1600,1880, 0, 1,2040, 0, + 990,1320, 0,1620,1900, 0, 1,2040, 0, + 0, 0,1240,1660,1900, 0, 1,2040, 0, + 990, 0,1440,1680,1900, 0, 1,2040, 0, + 0,1120,1500,1700,1900, 0, 1,2040, 0, + 990,1340,1540,1720,1900, 0, 1,2040, 0, + 0, 0, 0, 0, 0,1720, 1,2040, 0, + + 990, 0, 0, 0, 0,1880, 1,2040, 0, + 0,1120, 0, 0, 0,1880, 1,2040, 0, + 990,1320, 0, 0, 0,1900, 1,2040, 0, + 0, 0,1240, 0, 0,1900, 1,2040, 0, + 990, 0,1480, 0, 0,1900, 1,2040, 0, + 0,1120,1500, 0, 0,1900, 1,2040, 0, + 990,1340,1540, 0, 0,1900, 1,2040, 0, + 0, 0, 0,1400, 0,1980, 1,2040, 0, + 990, 0, 0,1600, 0,1980, 1,2040, 0, + 0,1120, 0,1600, 0,1980, 1,2040, 0, + + 990,1320, 0,1660, 0,1980, 1,2040, 0, + 0, 0,1260,1660, 0,1980, 1,2040, 0, + 990, 0,1440,1700, 0,1980, 1,2040, 0, + 0,1120,1500,1700, 0,1980, 1,2040, 0, + 990,1340,1540,1720, 0,1980, 1,2040, 0, + 0, 0, 0, 0,1600,2040, 1,2040, 0, + 990, 0, 0, 0,1740,2040, 1,2080, 0, + 0,1120, 0, 0,1800,2040, 1,2080, 0, + 990,1320, 0, 0,1800,2040, 1,2080, 0, + 0, 0,1260, 0,1800,2040, 1,2080, 0, + + 990, 0,1440, 0,1880,2040, 1,2080, 0, + 0,1120,1500, 0,1880,2040, 1,2080, 0, + 990,1340,1540, 0,1880,2040, 1,2080, 0, + 0, 0, 0,1440,1880,2040, 1,2080, 0, + 990, 0, 0,1620,1880,2040, 1,2080, 0, + 0,1120, 0,1640,1880,2040, 1,2080, 0, + 990,1320, 0,1660,1880,2040, 1,2080, 0, + 0, 0,1260,1680,1880,2040, 1,2080, 0, + 990, 0,1460,1680,1880,2040, 1,2080, 0, + 0,1120,1500,1680,1880,2040, 1,2080, 0, + + 990,1340,1540,1680,1880,2040, 1,2080, 0, + 0, 0, 0, 0, 0, 0,5900,2080, 0, + 990, 0, 0, 0, 0, 0,6040,2080, 0, + 0,1120, 0, 0, 0, 0,6040,2080, 0, + 990,1320, 0, 0, 0, 0,6040,2080, 0, + 0, 0,1260, 0, 0, 0,6040,2080, 0, + 990, 0,1440, 0, 0, 0,6040,2080, 0, + 0,1120,1500, 0, 0, 0,6040,2080, 0, + 990,1340,1540, 0, 0, 0,6040,2080, 0, + 0, 0, 0,1440, 0, 0,6040,2080, 0, + + 990, 0, 0,1580, 0, 1,5960,2120, 0, + 0,1120, 0,1600, 0, 1,5960,2120, 0, + 990,1320, 0,1640, 0, 1,5960,2120, 0, + 0, 0,1260,1660, 0, 1,5960,2120, 0, + 990, 0,1440,1660, 0, 1,6020,2120, 0, + 0,1120,1500,1700, 0, 1,6020,2120, 0, + 990,1340,1540,1720, 0, 1,6020,2120, 0, + 0, 0, 0, 0,1600, 1,6020,2120, 0, + 990, 0, 0, 0,1740, 1,6020,2120, 0, + 0,1120, 0, 0,1760, 1,6020,2120, 0, + + 990,1320, 0, 0,1800, 1,6020,2120, 0, + 0, 0,1260, 0,1800, 1,6020,2120, 0, + 990, 0,1440, 0,1800, 1,6020,2120, 0, + 0,1120,1500, 0,1800, 1,6020,2120, 0, + 990,1340,1540, 0,1800, 1,6020,2120, 0, + 0, 0, 0,1400,1820, 1,6020,2120, 0, + 990, 0, 0,1560,1860, 1,6020,2120, 0, + 0,1120, 0,1580,1860, 1,6020,2120, 0, + 990,1320, 0,1620,1860, 1,6020,2120, 0, + 0, 0,1260,1660,1860, 1,6020,2120, 0, + + 990, 0,1440,5800,1860, 1,6020,2120, 0, + 0,1120,1500,5800,1860, 1,6020,2120, 0, + 990,1340,1540,5820,1860, 1,6020,2120, 0, + 0, 0, 0, 0, 0,5790,6020,2120, 0, + 990, 0, 0, 0, 0,5860,6020,2120, 0, + 0,1120, 0, 0, 0,5880,6020,2120, 0, + 990,1320, 0, 0, 0,5900,6020,2120, 0, + 0, 0,1260, 0, 0,5920,6020,2120, 0, + 990, 0,1440, 0, 0,5940,6020,2120, 0, + 0,1120,1500, 0, 0,5960,6020,2120, 0, + + 990,1340,1540, 0, 0,5980,6020,2120, 0, + 0, 0, 0,1380, 1,5840,6020,2120, 0, + 990, 0, 0,1540, 1,5840,6020,2120, 0, + 0,1120, 0,1560, 1,5840,6020,2120, 0, + 990,1320, 0,1580, 1,5840,6020,2120, 0, + 0, 0,1260,1660, 1,5840,6020,2120, 0, + 990, 0,1420,1660, 1,5840,6020,2120, 0, + 0,1120,1500,1700, 1,5840,6020,2120, 0, + 990,1340,1540,1720, 1,5840,6020,2120, 0, + 0, 0, 0, 0,5600,5840,6020,2120, 0, + + 990, 0, 0, 1,5680,5900,6060,2120, 0, + 0,1120, 0, 1,5680,5900,6060,2120, 0, + 990,1320, 0, 1,5680,5900,6060,2120, 0, + 0, 0,1260, 1,5680,5900,6060,2120, 0, + 990, 0,1440, 1,5680,5900,6060,2120, 0, + 0,1120,1500, 1,5680,5900,6060,2120, 0, + 990,1340,1540, 1,5680,5900,6060,2120, 0, + 0, 0, 0,5520,5760,5900,6060,2120, 0, + 990, 0, 0,5640,5780,5900,6100,2120, 0, + 0,1120, 0,5680,5780,5900,6100,2120, 0, + + 990,1320, 0,5680,5780,5900,6100,2120, 0, + 0, 0,5430,5680,5780,5900,6100,2120, 0, + 990, 1,5460,5680,5780,5900,6100,2120, 0, + 0,5216,5460,5680,5780,5900,6100,2120, 0, + 990,1360,1640,1860,2020,2180, 1,2100, 0, + 0, 0, 0, 0, 0, 0, 0, 0,2100, + 990, 0, 0, 0, 0, 0, 0, 0,2100, + 0,1120, 0, 0, 0, 0, 0, 0,2220, + 990,1320, 0, 0, 0, 0, 0, 0,2260, + 0, 0,1260, 0, 0, 0, 0, 0,2260, + + 990, 0,1440, 0, 0, 0, 0, 0,2300, + 0,1120,1500, 0, 0, 0, 0, 0,2300, + 990,1340,1540, 0, 0, 0, 0, 0,2300, + 0, 0, 0,1420, 0, 0, 0, 0,2300, + 990, 0, 0,1580, 0, 0, 0, 0,2300, + 0,1120, 0,1600, 0, 0, 0, 0,2300, + 990,1320, 0,1660, 0, 0, 0, 1,2200, + 0, 0,1260,1660, 0, 0, 0, 1,2200, + 990, 0,1440,1680, 0, 0, 0, 1,2200, + 0,1120,1500,1700, 0, 0, 0, 1,2200, + + 990,1340,1540,1720, 0, 0, 0, 1,2200, + 0, 0, 0, 0,1480, 0, 0, 1,2200, + 990, 0, 0, 0,1740, 0, 0, 1,2200, + 0,1120, 0, 0,1760, 0, 0, 1,2200, + 990,1320, 0, 0,1780, 0, 0, 1,2200, + 0, 0,1260, 0,1800, 0, 0, 1,2200, + 990, 0,1440, 0,1820, 0, 0, 1,2200, + 0,1120,1500, 0,1840, 0, 0, 1,2200, + 990,1340,1540, 0,1860, 0, 0, 1,2200, + 0, 0, 0,1440,1860, 0, 0, 1,2200, + + 990, 0, 0,1620,1880, 0, 0, 1,2200, + 0,1120, 0,1620,1880, 0, 0, 1,2200, + 990,1320, 0,1660,1880, 0, 0, 1,2200, + 0, 0,1260,1680,1880, 0, 0, 1,2200, + 990, 0,1460,1700,1880, 0, 0, 1,2200, + 0,1120,1500,1720,1880, 0, 0, 1,2200, + 990,1340,1540,1740,1880, 0, 0, 1,2200, + 0, 0, 0, 0, 0,1740, 0, 1,2200, + 990, 0, 0, 0, 0,1860, 0, 1,2200, + 0,1120, 0, 0, 0,1860, 0, 1,2200, + + 990,1320, 0, 0, 0,1880, 0, 1,2200, + 0, 0,1260, 0, 0,1880, 0, 1,2200, + 990, 0,1440, 0, 0,1960, 0, 1,2200, + 0,1120,1500, 0, 0,1960, 0, 1,2200, + 990,1340,1540, 0, 0,1960, 0, 1,2200, + 0, 0, 0,1440, 0,1960, 0, 1,2200, + 990, 0, 0,1580, 0,1980, 0, 1,2200, + 0,1120, 0,1600, 0,1980, 0, 1,2200, + 990,1320, 0,1660, 0,1980, 0, 1,2200, + 0, 0,1260,1660, 0,1980, 0, 1,2200, + + 990, 0,1440,1680, 0,2020, 0, 1,2200, + 0,1120,1500,1700, 0,2020, 0, 1,2200, + 990,1340,1540,1720, 0,2020, 0, 1,2200, + 0, 0, 0, 0,1580,2040, 0, 1,2200, + 990, 0, 0, 0,5820,1860, 0, 1,2200, + 0,1120, 0, 0,5860,1860, 0, 1,2200, + 990,1320, 0, 0,5880,1860, 0, 1,2200, + 0, 0,1260, 0,5900,1860, 0, 1,2200, + 990, 0,1440, 0,5920,1860, 0, 1,2200, + 0,1120,1500, 0,5920,1860, 0, 1,2200, + + 990,1340,1540, 0,5920,1860, 0, 1,2200, + 0, 0, 0,1400,5940,1860, 0, 1,2200, + 990, 0, 0,1600,5940,1860, 0, 1,2200, + 0,1120, 0,1620,5940,1860, 0, 1,2200, + 990,1320, 0,1640,5940,1860, 0, 1,2200, + 0, 0,1260,1660,5960,1860, 0, 1,2200, + 990, 0,1420,1680,5960,1860, 0, 1,2200, + 0,1120,1500,1700,5960,1860, 0, 1,2200, + 990,1340,1540,1720,5960,1860, 0, 1,2200, + 0, 0, 0, 0, 0, 0,1880, 1,2200, + + 990, 0, 0, 0, 0, 0,2020, 1,2200, + 0,1120, 0, 0, 0, 0,2020, 1,2200, + 990,1320, 0, 0, 0, 0,2060, 1,2200, + 0, 0,1260, 0, 0, 0,2060, 1,2200, + 990, 0,1440, 0, 0, 0,2080, 1,2200, + 0,1120,1500, 0, 0, 0,2080, 1,2200, + 990,1340,1540, 0, 0, 0,2080, 1,2200, + 0, 0, 0,1440, 0, 0,2080, 1,2200, + 990, 0, 0,1580, 0, 0,2080, 1,2200, + 0,1120, 0,1620, 0, 0,2080, 1,2200, + + 990,1320, 0,1640, 0, 0,2080, 1,2200, + 0, 0,1260,1660, 0, 0,2080, 1,2200, + 990, 0,1440,1680, 0, 0,2120, 1,2200, + 0,1120,1500,1700, 0, 0,2120, 1,2200, + 990,1340,1540,1720, 0, 0,2120, 1,2200, + 0, 0, 0, 0,1600, 0,2120, 1,2200, + 990, 0, 0, 0,1800, 0,2160, 1,2200, + 0,1120, 0, 0,1820, 0,2160, 1,2200, + 990,1320, 0, 0,1860, 0,2160, 1,2200, + 0, 0,1260, 0,1860, 0,2160, 1,2200, + + 990, 0,1460, 0,1860, 0,2160, 1,2200, + 0,1120,1500, 0,1860, 0,2160, 1,2200, + 990,1340,1540, 0,1860, 0,2160, 1,2200, + 0, 0, 0,1420,1860, 0,2160, 1,2200, + 990, 0, 0,1580,1860, 1,2000, 1,2200, + 0,1120, 0,1600,1860, 1,2000, 1,2200, + 990,1320, 0,1660,1860, 1,2000, 1,2200, + 0, 0,1260,1660,1860, 1,2000, 1,2200, + 990, 0,1460,1700,1900, 1,2000, 1,2200, + 0,1120,1500,1760,1900, 1,2000, 1,2200, + + 990,1340,1540,1780,1900, 1,2000, 1,2200, + 0, 0, 0, 0, 0,5840,2000, 1,2200, + 990, 0, 0, 0, 1,5870,2000, 1,2200, + 0,1120, 0, 0, 1,5870,2000, 1,2200, + 990,1320, 0, 0, 1,5870,2000, 1,2220, + 0, 0,1260, 0, 1,5870,2000, 1,2220, + 990, 0,1480, 0, 1,5880,2000, 1,2220, + 0,1120,1500, 0, 1,5880,2000, 1,2220, + 990,1340,1540, 0, 1,5900,2000, 1,2220, + 0, 0, 0,1440, 1,5900,2000, 1,2220, + + 990, 0, 0,1600, 1,5900,2000, 1,2220, + 0,1120, 0,1600, 1,5900,2000, 1,2220, + 990,1340, 0,1660, 1,5920,2000, 1,2220, + 0, 0,1260,1660, 1,5920,2000, 1,2220, + 990, 0,1480,1700, 1,5920,2000, 1,2220, + 0,1120,1500,1720, 1,5920,2000, 1,2220, + 990,1340,1540,1740, 1,5920,2000, 1,2220, + 0, 0, 0, 0,5680,5920,2000, 1,2220, + 990, 0, 0, 1,5700,5920,2000, 1,2220, + 0,1120, 0, 1,5700,5920,2000, 1,2220, + + 990,1320, 0, 1,5700,5920,2000, 1,2220, + 0, 0,1260, 1,5700,5920,2000, 1,2220, + 990, 0,1480, 1,5700,5920,2000, 1,2220, + 0,1120,1500, 1,5700,5920,2000, 1,2220, + 990,1340,1540, 1,5740,5920,2000, 1,2220, + 0, 0, 0,5500,5740,5920,2000, 1,2220, + 990, 0, 1,5560,5780,5920,2000, 1,2220, + 0,1120, 1,5560,5780,5920,2000, 1,2220, + 990,1320, 1,5580,5780,5920,2000, 1,2220, + 0, 0,5360,5580,5780,5920,2000, 1,2220, + + 990, 1,5420,5620,5780,5960,2020, 1,2240, + 0,5126,5460,5620,5780,5960,2020, 1,2240, + 990,5420,5460,5640,5820,5980,2020, 1,2240, + 0, 0, 0, 0, 0, 0, 0,6080,2260, + 990, 0, 0, 0, 0, 0, 1,6100,2240, + 0,1120, 0, 0, 0, 0, 1,6100,2240, + 990,1320, 0, 0, 0, 0, 1,6120,2240, + 0, 0,1260, 0, 0, 0, 1,6120,2240, + 990, 0,1440, 0, 0, 0, 1,6120,2240, + 0,1120,1500, 0, 0, 0, 1,6120,2240, + + 990,1340,1540, 0, 0, 0, 1,6120,2240, + 0, 0, 0,1440, 0, 0, 1,6120,2240, + 990, 0, 0,1620, 0, 0, 1,6120,2240, + 0,1120, 0,1620, 0, 0, 1,6120,2240, + 990,1320, 0,1660, 0, 0, 1,6120,2240, + 0, 0,1260,1660, 0, 0, 1,6120,2240, + 990, 0,1440,1680, 0, 0, 1,6120,2240, + 0,1120,1500,1700, 0, 0, 1,6120,2240, + 990,1340,1540,1740, 0, 0, 1,6120,2240, + 0, 0, 0, 0,1600, 0, 1,6120,2240, + + 990, 0, 0, 0,1740, 0, 1,6120,2240, + 0,1120, 0, 0,1760, 0, 1,6120,2240, + 990,1320, 0, 0,1800, 0, 1,6120,2240, + 0, 0,1260, 0,1800, 0, 1,6120,2240, + 990, 0,1460, 0,1840, 0, 1,6120,2240, + 0,1120,1500, 0,1860, 0, 1,6120,2240, + 990,1340,1540, 0,1880, 0, 1,6140,2240, + 0, 0, 0,1440,1880, 0, 1,6140,2240, + 990, 0, 0,1600,1880, 0, 1,6140,2240, + 0,1120, 0,1620,1880, 0, 1,6140,2240, + + 990,1320, 0,1660,1880, 0, 1,6140,2240, + 0, 0,1260,1660,1880, 0, 1,6140,2240, + 990, 0,1460,1700,1900, 0, 1,6140,2240, + 0,1120,1500,1700,1900, 0, 1,6140,2240, + 990,1340,1540,1710,1900, 0, 1,6140,2240, + 0, 0, 0, 0, 0,1720, 1,6140,2240, + 990, 0, 0, 0, 0,1920, 1,6140,2240, + 0,1120, 0, 0, 0,1920, 1,6140,2240, + 990,1340, 0, 0, 0,1940, 1,6140,2240, + 0, 0,1260, 0, 0,1940, 1,6140,2240, + + 990, 0,1440, 0, 0,2000, 1,6140,2240, + 0,1120,1500, 0, 0,2000, 1,6140,2240, + 990,1340,1540, 0, 0,2020, 1,6140,2240, + 0, 0, 0,1440, 0,2020, 1,6140,2240, + 990, 0, 0,1600, 0,2020, 1,6140,2240, + 0,1120, 0,1620, 0,2020, 1,6140,2240, + 990,1320, 0,1660, 0,2020, 1,6140,2240, + 0, 0,1260,1660, 0,2020, 1,6140,2240, + 990, 0,1440,1700, 0,2020, 1,6140,2240, + 0,1120,1500,1700, 0,2020, 1,6140,2240, + + 990,1340,1540,1740, 0,2020, 1,6140,2240, + 0, 0, 0, 0,1560,2020, 1,6140,2240, + 990, 0, 0, 0,1700,2020, 1,6140,2240, + 0,1120, 0, 0,1720,2020, 1,6140,2240, + 990,1340, 0, 0,1780,2020, 1,6140,2240, + 0, 0,1260, 0,1780,2020, 1,6140,2240, + 990, 0,1440, 0,1820,2020, 1,6140,2240, + 0,1120,1500, 0,1820,2020, 1,6140,2240, + 990,1340,1540, 1,1660,2020, 1,6140,2240, + 0, 0, 0,5540,5786,1800, 1,6140,2240, + + 990, 0, 1,5560,5776,1820, 1,6200,2240, + 0,1120, 1,5560,5776,1820, 1,6200,2240, + 990,1320, 1,5560,5776,1840, 1,6200,2240, + 0, 0,5356,5570,5776,1840, 1,6200,2240, + 990, 1,5396,5600,5786,1840, 1,6200,2240, + 0,5200,5435,5600,5786,1840, 1,6200,2240, + 990,5390,5435,5600,5786,1840, 1,6200,2240, + 0, 0, 0, 0, 0, 0,10076,10286,2180, + 990, 0, 0, 0, 0, 1,5971,6220,2240, + 0,1120, 0, 0, 0, 1,5971,6220,2240, + + 990,1320, 0, 0, 0, 1,5971,6220,2240, + 0, 0,1260, 0, 0, 1,5971,6220,2240, + 990, 0,1440, 0, 0, 1,5989,6220,2240, + 0,1120,1500, 0, 0, 1,5989,6220,2240, + 990,1340,1540, 0, 0, 1,5999,6220,2240, + 0, 0, 0,1440, 0, 1,5999,6220,2240, + 990, 0, 0,1580, 0, 1,5999,6220,2240, + 0,1120, 0,1600, 0, 1,5999,6220,2240, + 990,1320, 0,1660, 0, 1,6011,6220,2240, + 0, 0,1260,1660, 0, 1,6011,6220,2240, + + 990, 0,1440,1680, 0, 1,6011,6220,2240, + 0,1120,1500,1700, 0, 1,6011,6220,2240, + 990,1340,1540,1740, 0, 1,6019,6220,2240, + 0, 0, 0, 0,1600, 1,6019,6220,2240, + 990, 0, 0, 0,1780, 1,6019,6220,2240, + 0,1120, 0, 0,1780, 1,6019,6220,2240, + 990,1320, 0, 0,1820, 1,6019,6220,2240, + 0, 0,1260, 0,1820, 1,6019,6220,2240, + 990, 0,1440, 0,1820, 1,6019,6220,2240, + 0,1120,1500, 0,1820, 1,6019,6220,2240, + + 990,1340,1540, 0,1860, 1,6019,6220,2240, + 0, 0, 0,1400,1860, 1,6019,6220,2240, + 990, 0, 0,1600,1860, 1,6019,6220,2240, + 0,1120, 0,1600,1860, 1,6019,6220,2240, + 990,1340, 0,1640,1860, 1,6029,6220,2240, + 0, 0,1260,1660,1860, 1,6029,6220,2240, + 990, 0,1440,1700,1860, 1,6029,6220,2240, + 0,1120,1480,1700,1860, 1,6029,6220,2240, + 990,1350,1570,1720,1920, 1,6029,6220,2240, + 0, 0, 0, 0, 0,9920,6029,6220,2240, + + 990, 0, 0, 0, 1,5810,6029,6220,2240, + 0,1120, 0, 0, 1,5810,6029,6220,2240, + 990,1340, 0, 0, 1,5820,6029,6220,2240, + 0, 0,1260, 0, 1,5820,6029,6220,2240, + 990, 0,1440, 0, 1,5820,6029,6220,2240, + 0,1120,1500, 0, 1,5820,6029,6220,2240, + 990,1340,1540, 0, 1,5840,6029,6220,2240, + 0, 0, 0,1440, 1,5820,6029,6220,2240, + 990, 0, 0,1600, 1,5820,6029,6220,2240, + 0,1120, 0,1600, 1,5820,6029,6220,2240, + + 990,1320, 0,1660, 1,5820,6029,6220,2240, + 0, 0,1260,1660, 1,5820,6029,6220,2240, + 990, 0,1440,1680, 1,5820,6029,6220,2240, + 0,1120,1500,1700, 1,5820,6029,6220,2240, + 990,1340,1540,1720, 1,5820,6029,6220,2240, + 0, 0, 0, 0,5580,5820,6029,6220,2240, + 990, 0, 0, 1,5620,5820,6029,6220,2240, + 0,1120, 0, 1,5620,5820,6029,6220,2240, + 990,1320, 0, 1,5640,5820,6029,6220,2240, + 0, 0,1260, 1,5640,5820,6029,6220,2240, + + 990, 0,1440, 1,5640,5820,6029,6220,2240, + 0,1120,1500, 1,5640,5820,6029,6220,2240, + 990,1340,1540, 1,5660,5820,6029,6220,2240, + 0, 0, 0,5400,5660,5820,6029,6220,2240, + 990, 0, 1,5460,5660,5820,6029,6220,2240, + 0,1120, 1,5460,5660,5820,6029,6220,2240, + 990,1340, 1,5460,5660,5820,6029,6220,2240, + 0, 0, 0,5460,5660,5820,6029,6220,2240, + 990, 0, 1,5460,5660,5820,6029,6220,2240, + 0,1120, 1,5460,5660,5820,6029,6220,2240, + + 1020,1400,1660,1860,2060,2240,2350, 1,2250 + }; + unsigned short normal_128k_9dot_dac[]={ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 960, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1100, 0, 0, 0, 0, 0, 0, 0, + 980,1280, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1250, 0, 0, 0, 0, 0, 0, + 980, 0,1390, 0, 0, 0, 0, 0, 0, + 0,1130,1440, 0, 0, 0, 0, 0, 0, + 980,1320,1480, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1400, 0, 0, 0, 0, 0, + 980, 0, 0,1510, 0, 0, 0, 0, 0, + 0,1130, 0,1530, 0, 0, 0, 0, 0, + + 980,1320, 0,1580, 0, 0, 0, 0, 0, + 0, 0,1260,1580, 0, 0, 0, 0, 0, + 980, 1,1300,1580, 0, 0, 0, 0, 0, + 0,5246,5446,1460, 0, 0, 0, 0, 0, + 5076,5296,5446,1460, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1520, 0, 0, 0, 0, + 980, 0, 0, 0,1620, 0, 0, 0, 0, + 0,1130, 0, 0,1640, 0, 0, 0, 0, + 980,1320, 0, 0,1690, 0, 0, 0, 0, + 0, 0,1280, 0,1680, 0, 0, 0, 0, + + 1000, 0,1430, 1,1570, 0, 0, 0, 0, + 0,1090,1460, 1,1570, 0, 0, 0, 0, + 990,1340,1540, 1,1580, 0, 0, 0, 0, + 0, 0, 0,5496,1600, 0, 0, 0, 0, + 970, 0, 1,5546,1600, 0, 0, 0, 0, + 0,1140, 1,5546,1600, 0, 0, 0, 0, + 1000,1320, 1,5546,1600, 0, 0, 0, 0, + 0, 0,5346,5566,1600, 0, 0, 0, 0, + 1000, 1,5416,5586,1600, 0, 0, 0, 0, + 0,5226,5446,5586,1600, 0, 0, 0, 0, + + 5076,5286,5446,5586,1600, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1640, 0, 0, 0, + 980, 0, 0, 0, 0,1760, 0, 0, 0, + 0,1130, 0, 0, 0,1780, 0, 0, 0, + 980,1320, 0, 0, 1,1680, 0, 0, 0, + 0, 0,1280, 0, 0,1800, 0, 0, 0, + 980, 0,1420, 0, 1,1680, 0, 0, 0, + 0,1130,1460, 0, 1,1680, 0, 0, 0, + 1000,1320,1480, 0, 1,1680, 0, 0, 0, + 0, 0, 0,1380, 1,1680, 0, 0, 0, + + 980, 0, 0,1540, 1,1700, 0, 0, 0, + 0,1130, 0,1580, 1,1700, 0, 0, 0, + 1000,1320, 0,1620, 1,1700, 0, 0, 0, + 0, 0,5346,1480, 1,1700, 0, 0, 0, + 980, 1,5386,1480, 1,1700, 0, 0, 0, + 0,5246,5446,1480, 1,1700, 0, 0, 0, + 5076,5296,5446,1480, 1,1700, 0, 0, 0, + 0, 0, 0, 0,5616,1740, 0, 0, 0, + 980, 0, 0, 1,5636,1740, 0, 0, 0, + 0,1130, 0, 1,5646,1740, 0, 0, 0, + + 1000,1320, 0, 1,5656,1740, 0, 0, 0, + 0, 0,1280, 1,5666,1740, 0, 0, 0, + 980, 0,1420, 1,5676,1740, 0, 0, 0, + 0,1130,1460, 1,5676,1740, 0, 0, 0, + 1000,1320,1480, 1,5676,1740, 0, 0, 0, + 0, 0, 0,5498,5726,1740, 0, 0, 0, + 980, 0, 1,5526,5706,1740, 0, 0, 0, + 0,1130, 1,5526,5706,1740, 0, 0, 0, + 1000,1320, 1,5526,5706,1740, 0, 0, 0, + 0, 0,5356,5576,5706,1740, 0, 0, 0, + + 980, 1,5406,5576,5726,1740, 0, 0, 0, + 0,5216,5416,5576,5726,1740, 0, 0, 0, + 5076,5296,5446,5576,5726,1740, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1760, 0, 0, + 980, 0, 0, 0, 0, 1,1780, 0, 0, + 0,1130, 0, 0, 0, 1,1790, 0, 0, + 1000,1320, 0, 0, 0, 1,1800, 0, 0, + 0, 0,1280, 0, 0, 1,1800, 0, 0, + 980, 0,1420, 0, 0, 1,1820, 0, 0, + 0,1130,1460, 0, 0, 1,1820, 0, 0, + + 1000,1320,1480, 0, 0, 1,1820, 0, 0, + 0, 0, 0,1400, 0, 1,1820, 0, 0, + 980, 0, 0,1540, 0, 1,1820, 0, 0, + 0,1130, 0,1560, 0, 1,1820, 0, 0, + 1000,1320, 0,1610, 0, 1,1830, 0, 0, + 0, 0,1280,1620, 0, 1,1830, 0, 0, + 980, 1,5386,1480, 0, 1,1840, 0, 0, + 0,5246,5446,1480, 0, 1,1840, 0, 0, + 5076,5296,5446,1480, 0, 1,1840, 0, 0, + 0, 0, 0, 0,1540, 1,1860, 0, 0, + + 980, 0, 0, 0,1690, 1,1840, 0, 0, + 0,1130, 0, 0,1700, 1,1840, 0, 0, + 1000,1320, 0, 0,1730, 1,1840, 0, 0, + 0, 0,1280, 0,1730, 1,1850, 0, 0, + 980, 0,1420, 1,1580, 1,1850, 0, 0, + 0,1130,1460, 1,1580, 1,1850, 0, 0, + 1000,1320,1480, 1,1580, 1,1850, 0, 0, + 0, 0, 0,5486,1600, 1,1850, 0, 0, + 980, 0, 1,5516,1610, 1,1850, 0, 0, + 0,1130, 1,5526,1610, 1,1850, 0, 0, + + 1000,1320, 1,5546,1610, 1,1850, 0, 0, + 0, 0,5326,5586,1610, 1,1850, 0, 0, + 980, 1,5396,5596,1630, 1,1850, 0, 0, + 0,5246,5446,5596,1630, 1,1850, 0, 0, + 5076,5296,5446,5596,1630, 1,1850, 0, 0, + 0, 0, 0, 0, 0,5776,1880, 0, 0, + 980, 0, 0, 0, 1,5796,1880, 0, 0, + 0,1130, 0, 0, 1,5796,1880, 0, 0, + 1000,1320, 0, 0, 1,5796,1880, 0, 0, + 0, 0,1280, 0, 1,5796,1880, 0, 0, + + 980, 0,1430, 0, 1,5796,1880, 0, 0, + 0,1130,1470, 0, 1,5796,1880, 0, 0, + 1000,1320,1490, 0, 1,5796,1880, 0, 0, + 0, 0, 0,1400, 1,5796,1880, 0, 0, + 980, 0, 0,1600, 1,5796,1880, 0, 0, + 0,1130, 0,1620, 1,5806,1880, 0, 0, + 1000,1320, 0,1640, 1,5816,1880, 0, 0, + 0, 0,1290,1660, 1,5816,1880, 0, 0, + 980, 1,5396,1500, 1,5826,1890, 0, 0, + 0,5246,5446,1500, 1,5826,1890, 0, 0, + + 5076,5296,5446,1500, 1,5826,1890, 0, 0, + 0, 0, 0, 0,5616,5846,1890, 0, 0, + 980, 0, 0, 1,5646,5866,1900, 0, 0, + 0,1130, 0, 1,5656,5866,1900, 0, 0, + 1000,1320, 0, 1,5666,5866,1900, 0, 0, + 0, 0,1280, 1,5666,5866,1900, 0, 0, + 980, 0,1430, 1,5686,5876,1900, 0, 0, + 0,1120,1470, 1,5696,5876,1900, 0, 0, + 1000,1320,1490, 1,5706,5876,1900, 0, 0, + 0, 0, 0,5466,5706,5876,1900, 0, 0, + + 980, 0, 1,5536,5746,5896,1900, 0, 0, + 0,1130, 1,5546,5746,5896,1900, 0, 0, + 1000,1320, 1,5566,5746,5896,1900, 0, 0, + 0, 0,5366,5596,5746,5896,1900, 0, 0, + 980, 1,5396,5596,5746,5896,1900, 0, 0, + 0,5206,5446,5596,5746,5896,1900, 0, 0, + 5076,5296,5446,5596,5746,5896,1900, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1920, 0, + 980, 0, 0, 0, 0, 0, 1,1920, 0, + 0,1130, 0, 0, 0, 0, 1,1930, 0, + + 1000,1320, 0, 0, 0, 0, 1,1940, 0, + 0, 0,1280, 0, 0, 0, 1,1940, 0, + 980, 0,1410, 0, 0, 0, 1,1940, 0, + 0,1130,1460, 0, 0, 0, 1,1940, 0, + 1000,1320,1490, 0, 0, 0, 1,1940, 0, + 0, 0, 0,1390, 0, 0, 1,1940, 0, + 980, 0, 0,1540, 0, 0, 1,1950, 0, + 0,1130, 0,1560, 0, 0, 1,1950, 0, + 1000,1320, 0,1600, 0, 0, 1,1950, 0, + 0, 0,1280,1620, 0, 0, 1,1960, 0, + + 980, 1,5386,1480, 0, 0, 1,1960, 0, + 0,5246,5446,1480, 0, 0, 1,1960, 0, + 5076,5296,5446,1480, 0, 0, 1,1960, 0, + 0, 0, 0, 0,1540, 0, 1,1960, 0, + 980, 0, 0, 1,1540, 0, 1,1960, 0, + 0,1130, 0, 1,1550, 0, 1,1960, 0, + 1000,1320, 0, 1,1560, 0, 1,1960, 0, + 0, 0,1280, 1,1580, 0, 1,1960, 0, + 980, 0,1420, 1,1590, 0, 1,1960, 0, + 0,1130,1460, 1,1600, 0, 1,1960, 0, + + 1000,1320,1490, 1,1620, 0, 1,1960, 0, + 0, 0, 0,5496,1640, 0, 1,1960, 0, + 980, 0, 1,5516,1620, 0, 1,1960, 0, + 0,1130, 1,5526,1620, 0, 1,1960, 0, + 1000,1320, 1,5526,1620, 0, 1,1960, 0, + 0, 0,5246,5536,1620, 0, 1,1960, 0, + 980, 1,5386,5596,1620, 0, 1,1970, 0, + 0,5206,5446,5596,1620, 0, 1,1970, 0, + 5076,5296,5446,5596,1620, 0, 1,1970, 0, + 0, 0, 0, 0, 0,1660, 1,1970, 0, + + 980, 0, 0, 0, 1,1700, 1,1980, 0, + 0,1130, 0, 0, 1,1700, 1,1980, 0, + 1000,1320, 0, 0, 1,1700, 1,1980, 0, + 0, 0,1280, 0, 1,1710, 1,1980, 0, + 980, 0,1430, 0, 1,1720, 1,1980, 0, + 0,1130,1470, 0, 1,1720, 1,1980, 0, + 1000,1320,1490, 0, 1,1720, 1,1980, 0, + 0, 0, 0,1420, 1,1720, 1,1980, 0, + 980, 0, 1,1430, 1,1720, 1,1980, 0, + 0,1130, 1,1460, 1,1720, 1,1980, 0, + + 1000,1320, 1,1480, 1,1720, 1,1980, 0, + 0, 0,5356,1480, 1,1720, 1,1980, 0, + 990, 1,5386,1480, 1,1730, 1,1990, 0, + 0,5246,5446,1480, 1,1730, 1,1990, 0, + 5076,5296,5446,1480, 1,1730, 1,1990, 0, + 0, 0, 0, 0,5616,1750, 1,1990, 0, + 980, 0, 0, 1,5636,1760, 1,1990, 0, + 0,1130, 0, 1,5646,1760, 1,1990, 0, + 1000,1320, 0, 1,5666,1760, 1,1990, 0, + 0, 0,1280, 1,5666,1760, 1,1990, 0, + + 980, 0,1430, 1,5666,1760, 1,1990, 0, + 0,1130,1470, 1,5666,1760, 1,1990, 0, + 1000,1320,1490, 1,5696,1780, 1,1990, 0, + 0, 0, 0,5496,5706,1770, 1,1990, 0, + 980, 0, 1,5516,5706,1780, 1,2020, 0, + 0,1130, 1,5526,5716,1780, 1,2020, 0, + 1000,1320, 1,5546,5726,1780, 1,2020, 0, + 0, 0,5356,5546,5726,1780, 1,2020, 0, + 980, 1,5396,5596,5746,1780, 1,2020, 0, + 0,5206,5446,5596,5746,1780, 1,2020, 0, + + 5076,5296,5446,5596,5746,1780, 1,2020, 0, + 0, 0, 0, 0, 0, 0,5896,2020, 0, + 980, 0, 0, 0, 0, 1,5886,2020, 0, + 0,1120, 0, 0, 0, 1,5896,2020, 0, + 1000,1320, 0, 0, 0, 1,5896,2020, 0, + 0, 0,1280, 0, 0, 1,5896,2020, 0, + 980, 0,1430, 0, 0, 1,5946,2020, 0, + 0,1130,1470, 0, 0, 1,5946,2020, 0, + 1000,1320,1490, 0, 0, 1,5956,2020, 0, + 0, 0, 0,1400, 0, 1,5946,2020, 0, + + 980, 0, 1,1430, 0, 1,5956,2030, 0, + 0,1140, 1,1450, 0, 1,5956,2030, 0, + 1000,1320, 1,1460, 0, 1,5956,2030, 0, + 0, 0,5366,1480, 0, 1,5956,2030, 0, + 980, 1,5386,1480, 0, 1,5956,2030, 0, + 0,5246,5446,1480, 0, 1,5956,2030, 0, + 5076,5296,5446,1480, 0, 1,5956,2030, 0, + 0, 0, 0, 0,1580, 1,5956,2030, 0, + 980, 0, 0, 1,1590, 1,5976,2050, 0, + 0,1140, 0, 1,1600, 1,5976,2050, 0, + + 1000,1320, 0, 1,1600, 1,5976,2050, 0, + 0, 0,1300, 1,1600, 1,5976,2050, 0, + 980, 0,1440, 1,1610, 1,5976,2050, 0, + 0,1140,1480, 1,1620, 1,5976,2050, 0, + 1000,1330,1500, 1,1620, 1,5976,2050, 0, + 0, 0, 0,5496,1620, 1,5976,2050, 0, + 980, 0, 1,5526,1620, 1,5996,2050, 0, + 0,1140, 1,5546,1630, 1,5996,2050, 0, + 1000,1330, 1,5546,1630, 1,5996,2050, 0, + 0, 0,5346,5586,1630, 1,5996,2050, 0, + + 980, 1,5386,5596,1630, 1,5996,2050, 0, + 0,5246,5446,5596,1630, 1,5996,2050, 0, + 5076,5296,5446,5596,1630, 1,5996,2050, 0, + 0, 0, 0, 0, 0,5766,6006,2050, 0, + 980, 0, 0, 0, 1,5806,6006,2050, 0, + 0,1140, 0, 0, 1,5806,6006,2050, 0, + 1000,1320, 0, 0, 1,5816,6006,2050, 0, + 0, 0,1280, 0, 1,5806,6006,2050, 0, + 980, 0,1440, 0, 1,5816,6006,2050, 0, + 0,1140,1480, 0, 1,5826,6006,2050, 0, + + 1000,1320,1490, 0, 1,5826,6006,2050, 0, + 0, 0, 0,1430, 1,5826,6006,2050, 0, + 980, 0, 1,1450, 1,5826,6006,2050, 0, + 0,1140, 1,1460, 1,5836,6006,2050, 0, + 1000,1320, 1,1480, 1,5846,6006,2050, 0, + 0, 0,5366,1500, 1,5846,6006,2050, 0, + 980, 1,5406,1500, 1,5866,6026,2050, 0, + 0,5246,5446,1500, 1,5866,6026,2050, 0, + 5076,5296,5446,1500, 1,5866,6026,2050, 0, + 0, 0, 0, 0,5626,5886,6026,2050, 0, + + 980, 0, 0, 1,5676,5886,6026,2050, 0, + 0,1140, 0, 1,5676,5886,6026,2050, 0, + 1000,1320, 0, 1,5696,5886,6026,2050, 0, + 0, 0,1290, 1,5696,5886,6026,2050, 0, + 980, 0,1440, 1,5696,5896,6026,2050, 0, + 0,1140,1480, 1,5696,5896,6026,2050, 0, + 1000,1320,1500, 1,5716,5896,6026,2050, 0, + 0, 0, 0,5466,5716,5896,6026,2050, 0, + 980, 0, 1,5516,5726,5896,6026,2050, 0, + 0,1140, 1,5526,5726,5896,6026,2050, 0, + + 1000,1320, 1,5566,5726,5896,6026,2050, 0, + 0, 0,5356,5566,5726,5896,6026,2050, 0, + 980, 1,5376,5566,5726,5896,6026,2050, 0, + 0,5246,5446,5566,5726,5896,6026,2050, 0, + 5076,5296,5446,5566,5726,5896,6026,2050, 0, + 0, 0, 0, 0, 0, 0, 0, 0,2040, + 980, 0, 0, 0, 0, 0, 0, 1,2050, + 0,1130, 0, 0, 0, 0, 0, 1,2060, + 1000,1320, 0, 0, 0, 0, 0, 1,2070, + 0, 0,1280, 0, 0, 0, 0, 1,2070, + + 980, 0,1420, 0, 0, 0, 0, 1,2070, + 0,1130,1470, 0, 0, 0, 0, 1,2070, + 1000,1320,1490, 0, 0, 0, 0, 1,2070, + 0, 0, 0,1400, 0, 0, 0, 1,2070, + 980, 0, 0,1530, 0, 0, 0, 1,2080, + 0,1130, 0,1570, 0, 0, 0, 1,2080, + 1000,1320, 0,1610, 0, 0, 0, 1,2090, + 0, 0,1280,1630, 0, 0, 0, 1,2080, + 980, 1,5386,1480, 0, 0, 0, 1,2090, + 0,5246,5446,1480, 0, 0, 0, 1,2090, + + 5076,5296,5446,1490, 0, 0, 0, 1,2090, + 0, 0, 0, 0,1530, 0, 0, 1,2090, + 980, 0, 0, 1,1550, 0, 0, 1,2090, + 0,1130, 0, 1,1560, 0, 0, 1,2090, + 1000,1320, 0, 1,1580, 0, 0, 1,2090, + 0, 0,1280, 1,1580, 0, 0, 1,2090, + 980, 0,1430, 1,1580, 0, 0, 1,2090, + 0,1130,1470, 1,1590, 0, 0, 1,2090, + 1000,1320,1490, 1,1600, 0, 0, 1,2090, + 0, 0, 0,5496,1620, 0, 0, 1,2090, + + 980, 0, 1,5536,1620, 0, 0, 1,2100, + 0,1130, 1,5546,1620, 0, 0, 1,2100, + 1000,1320, 1,5566,1620, 0, 0, 1,2100, + 0, 0,5366,5586,1620, 0, 0, 1,2100, + 980, 1,5376,5566,1620, 0, 0, 1,2100, + 0,5246,5446,5566,1620, 0, 0, 1,2100, + 5096,5296,5446,5566,1620, 0, 0, 1,2100, + 0, 0, 0, 0, 0,1660, 0, 1,2100, + 980, 0, 0, 0, 1,1670, 0, 1,2100, + 0,1130, 0, 0, 1,1680, 0, 1,2100, + + 1000,1320, 0, 0, 1,1700, 0, 1,2100, + 0, 0,1280, 0, 1,1700, 0, 1,2100, + 980, 0,1430, 0, 1,1710, 0, 1,2110, + 0,1130,1470, 0, 1,1720, 0, 1,2110, + 1000,1320,1490, 0, 1,1730, 0, 1,2110, + 0, 0, 0,1400, 1,1720, 0, 1,2110, + 980, 0, 1,1420, 1,1720, 0, 1,2110, + 0,1130, 1,1440, 1,1720, 0, 1,2110, + 1000,1320, 1,1460, 1,1730, 0, 1,2110, + 0, 0,5346,1460, 1,1730, 0, 1,2110, + + 980, 1,5386,1480, 1,1740, 0, 1,2120, + 0,5246,5446,1480, 1,1740, 0, 1,2120, + 5076,5296,5446,1500, 1,1740, 0, 1,2120, + 0, 0, 0, 0,5616,1740, 0, 1,2120, + 980, 0, 0, 1,5626,1750, 0, 1,2120, + 0,1130, 0, 1,5636,1750, 0, 1,2120, + 1000,1320, 0, 1,5656,1750, 0, 1,2120, + 0, 0,1280, 1,5666,1750, 0, 1,2120, + 980, 0,1440, 1,5666,1750, 0, 1,2120, + 0,1130,1480, 1,5666,1750, 0, 1,2120, + + 1000,1320,1490, 1,5686,1750, 0, 1,2120, + 0, 0, 0,5486,5726,1750, 0, 1,2120, + 980, 0, 1,5496,5726,1750, 0, 1,2130, + 0,1140, 1,5526,5726,1750, 0, 1,2130, + 1000,1320, 1,5546,5726,1760, 0, 1,2130, + 0, 0,5356,5576,5726,1760, 0, 1,2130, + 980, 1,5376,5566,5726,1760, 0, 1,2130, + 0,5246,5446,5566,5726,1760, 0, 1,2130, + 5076,5296,5446,5566,5726,1760, 0, 1,2130, + 0, 0, 0, 0, 0, 0,1810, 1,2130, + + 980, 0, 0, 0, 0, 1,1820, 1,2130, + 0,1130, 0, 0, 0, 1,1820, 1,2130, + 1000,1320, 0, 0, 0, 1,1830, 1,2130, + 0, 0,1280, 0, 0, 1,1830, 1,2130, + 980, 0,1430, 0, 0, 1,1830, 1,2130, + 0,1130,1470, 0, 0, 1,1830, 1,2130, + 1000,1320,1490, 0, 0, 1,1830, 1,2130, + 0, 0, 0,1400, 0, 1,1830, 1,2130, + 980, 0, 1,1420, 0, 1,1850, 1,2130, + 0,1130, 1,1440, 0, 1,1850, 1,2130, + + 1000,1320, 1,1460, 0, 1,1850, 1,2130, + 0, 0,5346,1460, 0, 1,1850, 1,2130, + 980, 1,5386,1480, 0, 1,1860, 1,2130, + 0,5246,5446,1480, 0, 1,1860, 1,2130, + 5076,5296,5446,1500, 0, 1,1870, 1,2130, + 0, 0, 0, 0,1530, 1,1860, 1,2130, + 980, 0, 0, 1,1560, 1,1870, 1,2130, + 0,1130, 0, 1,1570, 1,1870, 1,2130, + 1000,1320, 0, 1,1580, 1,1870, 1,2130, + 0, 0,1280, 1,1580, 1,1870, 1,2130, + + 980, 0,1430, 1,1600, 1,1880, 1,2140, + 0,1130,1470, 1,1610, 1,1880, 1,2140, + 1000,1320,1490, 1,1610, 1,1880, 1,2140, + 0, 0, 0,5486,1620, 1,1880, 1,2140, + 980, 0, 1,5516,1620, 1,1890, 1,2140, + 0,1130, 1,5536,1620, 1,1890, 1,2140, + 1000,1320, 1,5566,1620, 1,1890, 1,2140, + 0, 0,5366,5586,1620, 1,1890, 1,2140, + 980, 1,5376,5566,1630, 1,1900, 1,2140, + 0,5246,5466,5566,1630, 1,1900, 1,2140, + + 5076,5296,5446,5566,1630, 1,1900, 1,2140, + 0, 0, 0, 0, 0,5376,1900, 1,2140, + 980, 0, 0, 0, 1,5776,1900, 1,2150, + 0,1130, 0, 0, 1,5796,1900, 1,2150, + 1000,1320, 0, 0, 1,5796,1900, 1,2150, + 0, 0,1280, 0, 1,5796,1900, 1,2150, + 980, 0,1440, 0, 1,5796,1900, 1,2150, + 0,1130,1480, 0, 1,5806,1900, 1,2150, + 1000,1320,1500, 0, 1,5806,1900, 1,2150, + 0, 0, 0,1430, 1,5806,1900, 1,2150, + + 980, 0, 1,1450, 1,5806,1910, 1,2160, + 0,1130, 1,1460, 1,5806,1910, 1,2160, + 1000,1320, 1,1470, 1,5816,1910, 1,2160, + 0, 0,5346,1480, 1,5816,1910, 1,2160, + 980, 1,5386,1480, 1,5816,1910, 1,2160, + 0,5246,5446,1480, 1,5816,1910, 1,2160, + 5076,5296,5446,1500, 1,5816,1910, 1,2160, + 0, 0, 0, 0,5586,5836,1910, 1,2160, + 980, 0, 0, 1,5626,5836,1910, 1,2160, + 0,1140, 0, 1,5636,5836,1910, 1,2160, + + 1000,1320, 0, 1,5646,5836,1910, 1,2160, + 0, 0,1290, 1,5646,5836,1910, 1,2160, + 980, 0,1430, 1,5646,5836,1910, 1,2160, + 0,1140,1480, 1,5656,5836,1910, 1,2160, + 1000,1320,1500, 1,5686,5836,1910, 1,2160, + 0, 0, 0,5446,5686,5836,1910, 1,2160, + 980, 0, 1,5516,5716,5856,1920, 1,2160, + 0,1140, 1,5536,5716,5856,1920, 1,2160, + 1000,1320, 1,5566,5726,5856,1920, 1,2160, + 0, 0,5366,5586,5736,5856,1920, 1,2160, + + 980, 1,5376,5566,5726,5856,1930, 1,2170, + 0,5246,5446,5566,5726,5856,1930, 1,2170, + 5076,5296,5446,5566,5726,5856,1930, 1,2170, + 0, 0, 0, 0, 0, 0, 0,6046,2170, + 980, 0, 0, 0, 0, 0, 1,6076,2180, + 0,1130, 0, 0, 0, 0, 1,6086,2180, + 1000,1320, 0, 0, 0, 0, 1,6086,2180, + 0, 0,1280, 0, 0, 0, 1,6086,2180, + 980, 0,1420, 0, 0, 0, 1,6086,2180, + 0,1130,1470, 0, 0, 0, 1,6086,2180, + + 1000,1320,1490, 0, 0, 0, 1,6086,2180, + 0, 0, 0,1400, 0, 0, 1,6086,2180, + 980, 0, 1,1420, 0, 0, 1,6086,2180, + 0,1130, 1,1440, 0, 0, 1,6086,2180, + 1000,1320, 1,1460, 0, 0, 1,6086,2180, + 0, 0,5346,1460, 0, 0, 1,6086,2180, + 980, 1,5386,1480, 0, 0, 1,6096,2180, + 0,5246,5446,1480, 0, 0, 1,6096,2180, + 5076,5296,5446,1500, 0, 0, 1,6096,2180, + 0, 0, 0, 0,1540, 0, 1,6096,2180, + + 980, 0, 0, 1,1570, 0, 1,6106,2180, + 0,1130, 0, 1,1580, 0, 1,6106,2180, + 1000,1320, 0, 1,1600, 0, 1,6106,2180, + 0, 0,1280, 1,1600, 0, 1,6106,2180, + 980, 0,1430, 1,1600, 0, 1,6106,2180, + 0,1130,1470, 1,1600, 0, 1,6106,2180, + 1000,1320,1490, 1,1610, 0, 1,6106,2180, + 0, 0, 0,5486,1610, 0, 1,6106,2180, + 980, 0, 1,5526,1620, 0, 1,6106,2180, + 0,1130, 1,5546,1620, 0, 1,6106,2180, + + 1000,1320, 1,5546,1630, 0, 1,6106,2180, + 0, 0,5346,5586,1630, 0, 1,6106,2180, + 980, 1,5376,5566,1630, 0, 1,6116,2180, + 0,5246,5446,5566,1630, 0, 1,6116,2180, + 5076,5296,5446,5566,1630, 0, 1,6116,2180, + 0, 0, 0, 0, 0,1700, 1,6116,2180, + 980, 0, 0, 0, 1,1720, 1,6116,2180, + 0,1130, 0, 0, 1,1730, 1,6116,2180, + 1000,1320, 0, 0, 1,1730, 1,6116,2180, + 0, 0,1280, 0, 1,1730, 1,6116,2180, + + 980, 0,1430, 0, 1,1740, 1,6116,2180, + 0,1130,1470, 0, 1,1740, 1,6116,2180, + 1000,1320,1490, 0, 1,1740, 1,6116,2180, + 0, 0, 0,1430, 1,1740, 1,6116,2180, + 980, 0, 1,1430, 1,1740, 1,6116,2180, + 0,1130, 1,1450, 1,1740, 1,6116,2180, + 1000,1320, 1,1460, 1,1740, 1,6116,2180, + 0, 0,5366,1470, 1,1740, 1,6116,2180, + 980, 1,5386,1480, 1,1750, 1,6116,2180, + 0,5246,5446,1480, 1,1750, 1,6116,2180, + + 5076,5296,5446,1500, 1,1750, 1,6116,2180, + 0, 0, 0, 0,5616,1750, 1,6116,2180, + 980, 0, 0, 1,5616,1770, 1,6126,2190, + 0,1130, 0, 1,5636,1770, 1,6126,2190, + 1000,1320, 0, 1,5646,1770, 1,6126,2190, + 0, 0,1280, 1,5646,1770, 1,6126,2190, + 980, 0,1430, 1,5646,1770, 1,6126,2190, + 0,1130,1480, 1,5666,1770, 1,6126,2190, + 1000,1320,1500, 1,5686,1770, 1,6126,2190, + 0, 0, 0,5446,5686,1770, 1,6126,2190, + + 980, 0, 1,5516,5716,1770, 1,6126,2190, + 0,1130, 1,5536,5726,1770, 1,6126,2190, + 1000,1320, 1,5566,5726,1770, 1,6126,2190, + 0, 0,5366,5586,5736,1770, 1,6126,2190, + 980, 1,5376,5566,5726,1780, 1,6136,2190, + 0,5246,5446,5566,5726,1780, 1,6136,2190, + 5076,5296,5446,5566,5726,1780, 1,6136,2190, + 0, 0, 0, 0, 0, 0,5886,6136,2190, + 980, 0, 0, 0, 0, 1,5906,6156,2190, + 0,1130, 0, 0, 0, 1,5916,6156,2190, + + 1000,1320, 0, 0, 0, 1,5936,6156,2190, + 0, 0,1280, 0, 0, 1,5916,6156,2190, + 980, 0,1430, 0, 0, 1,5946,6176,2190, + 0,1130,1470, 0, 0, 1,5956,6176,2190, + 1000,1320,1490, 0, 0, 1,5956,6176,2190, + 0, 0, 0,1420, 0, 1,5966,6176,2190, + 980, 0, 1,1430, 0, 1,5966,6166,2190, + 0,1130, 1,1450, 0, 1,5966,6166,2190, + 1000,1320, 1,1460, 0, 1,5966,6166,2190, + 0, 0,5366,1470, 0, 1,5966,6166,2190, + + 980, 1,5376,1480, 0, 1,5966,6166,2190, + 0,5246,5446,1480, 0, 1,5966,6166,2190, + 5076,5296,5446,1500, 0, 1,5966,6166,2190, + 0, 0, 0, 0,1580, 1,5966,6166,2190, + 980, 0, 0, 1,1600, 1,5976,6166,2190, + 0,1130, 0, 1,1600, 1,5976,6166,2190, + 1000,1320, 0, 1,1600, 1,5976,6166,2190, + 0, 0,1280, 1,1600, 1,5976,6166,2190, + 980, 0,1430, 1,1600, 1,5976,6166,2190, + 0,1130,1480, 1,1600, 1,5976,6166,2190, + + 1000,1320,1490, 1,1610, 1,5976,6166,2190, + 0, 0, 0,5446,1620, 1,5976,6166,2190, + 980, 0, 1,5526,1620, 1,5986,6166,2190, + 0,1130, 1,5546,1620, 1,5986,6166,2190, + 1000,1320, 1,5546,1630, 1,5986,6166,2190, + 0, 0,5346,5566,1630, 1,5986,6166,2190, + 980, 1,5376,5566,1630, 1,5986,6166,2190, + 0,5246,5446,5566,1630, 1,5986,6166,2190, + 5076,5296,5446,5566,1630, 1,5986,6166,2190, + 0, 0, 0, 0, 0,9876,10080,10240,2160, + + 980, 0, 0, 0, 1,5776,6016,6166,2190, + 0,1130, 0, 0, 1,5786,6016,6166,2190, + 1000,1320, 0, 0, 1,5796,6016,6166,2190, + 0, 0,1280, 0, 1,5786,6016,6166,2190, + 980, 0,1440, 0, 1,5796,6016,6166,2190, + 0,1130,1480, 0, 1,5796,6016,6166,2190, + 1000,1320,1490, 0, 1,5796,6016,6166,2190, + 0, 0, 0,1430, 1,5796,6016,6166,2190, + 980, 0, 1,1430, 1,5796,6016,6166,2190, + 0,1130, 1,1450, 1,5796,6016,6166,2190, + + 1000,1320, 1,1460, 1,5796,6016,6166,2190, + 0, 0,5366,1470, 1,5816,6016,6166,2190, + 980, 1,5376,1480, 1,5826,6016,6166,2200, + 0,5246,5446,1480, 1,5836,6016,6166,2200, + 5076,5296,5446,1500, 1,5836,6016,6166,2200, + 0, 0, 0, 0,9736,5836,6016,6166,2200, + 980, 0, 0, 1,9736,5846,6016,6166,2200, + 0,1130, 0, 1,9736,5846,6016,6166,2200, + 1000,1320, 0, 1,9736,5846,6016,6166,2200, + 0, 0,1290, 1,9736,5846,6016,6166,2200, + + 980, 0,1440, 1,9756,5846,6016,6166,2200, + 0,1130,1480, 1,9756,5846,6016,6166,2200, + 1000,1320,1500, 1,9756,5846,6016,6166,2200, + 0, 0, 0,9586, 1,5746,5986,6146,2200, + 980, 0, 1,9576,5666,5866,6016,6166,2210, + 0,1130, 1,9586,5666,5866,6016,6166,2210, + 1000,1320, 1,9596,5666,5866,6016,6166,2210, + 0, 0,9486, 1,5626,5846,6016,6166,2210, + 980, 1,5386,5566,5726,5866,6016,6166,2210, + 0,5246, 1,5436,5666,5856,6006,6166,2210, + + 5100,5300,5450,5600,5750,5900,6050,6200,2200 + }; + +// if(sysPara->para.solventNumber < 400){ + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0){ + int a = 0; + fpgaWrD(0xa4e0,(unsigned int )a,1); + a=3; + fpgaWrD(0xa4e1,(unsigned int )a,1); + a=2; + fpgaWrD(0xa4e2,(unsigned int )a,1); + a=5; + fpgaWrD(0xa4e3,(unsigned int )a,1); + } +// } + if(sysPara->para.flagOfFastMode && sysPara->status.FPGAVersionType == 0) + { + if ((sysPara->para.currPrintMode == FAST_PRINT) && (sysPara->status.currPrintRow <= 7)) + fpgaWr(0xB500,(unsigned char *)fast_128k_7dot_dac,2304); + else if((sysPara->para.currPrintMode == STANDARD_PRINT) && (sysPara->status.currPrintRow <= 7)) + fpgaWr(0xB500,(unsigned char *)normal_128k_7dot_dac,2304); + else if((sysPara->para.currPrintMode == FAST_PRINT) && (sysPara->status.currPrintRow <= 9)) + fpgaWr(0xB500,(unsigned char *)normal_128k_9dot_dac,9216); + else if((sysPara->para.currPrintMode == STANDARD_PRINT) && (sysPara->status.currPrintRow <= 9)) + fpgaWr(0xB500,(unsigned char *)normal_128k_9dot_dac,9216); + } + else if(type == 6){ + writeDacValue2Fpga_No72NewVoltData(); + } + else if(sysPara->status.FPGAVersionType == 1 || (sysPara->status.FPGAVersionType == 2 && sysPara->para.flagOfFastMode)) + { + if ((sysPara->para.currPrintMode == FAST_PRINT) && (sysPara->status.currPrintRow <= 7)) + fpgaWr(0xB200,(unsigned char *)fast_128k_7dot_dac,2304); + else if((sysPara->para.currPrintMode == STANDARD_PRINT) && (sysPara->status.currPrintRow <= 7)) + fpgaWr(0xB200,(unsigned char *)normal_128k_7dot_dac,2304); + else if((sysPara->para.currPrintMode == FAST_PRINT) && (sysPara->status.currPrintRow <= 9)) + fpgaWr(0xB200,(unsigned char *)normal_128k_9dot_dac,9216); + else if((sysPara->para.currPrintMode == STANDARD_PRINT) && (sysPara->status.currPrintRow <= 9)) + fpgaWr(0xB200,(unsigned char *)normal_128k_9dot_dac,9216); + } + else if(sysPara->status.build_dat.builTime == 73) + writeDacValue2Fpga(); + else{ + fpgaWr(DAC_TABLE_ADDR,(unsigned char *)DACArray,sizeof(DACArray)); /* DAC vol: 0xB280 */ + fpgaWr(NOT_GAP_DAC_TABLE_ADDR,(unsigned char *)notGapDACArray,sizeof(notGapDACArray)); /* DAC vol: 0xB380 */ + fpgaWr(FULL_COL_DAC_TABLE_ADDR,(unsigned char *)fullColDACArray,sizeof(fullColDACArray)); /* DAC vol: 0xB480 */ + + if((sysPara->para.currPrintMode == FAST_PRINT) && !sysPara->para.charWidthSetEnable){ + fpgaWr(MATCH_FULL_DAC_TABLE_ADDR, (unsigned char *)matchFullDACArray, sizeof(matchFullDACArray));// 写入 匹配满列 DAC表 + fpgaWr(MATCH_1_DAC_TABLE_ADDR, (unsigned char *)matchOneDACArray, sizeof(matchOneDACArray));// 写入 匹配单点 DAC表 + fpgaWr(MATCH_2_DAC_TABLE_ADDR, (unsigned char *)matchTwoDACArray, sizeof(matchTwoDACArray));// 写入 匹配两点 DAC表 + fpgaWr(MATCH_3_DAC_TABLE_ADDR, (unsigned char *)matchThreeDACArray, sizeof(matchThreeDACArray));// 写入 匹配三点 DAC表 + fpgaWr(MATCH_4_DAC_TABLE_ADDR, (unsigned char *)matchFourDACArray, sizeof(matchFourDACArray));// 写入 匹配四点 DAC表 + fpgaWr(0xA4C0, (unsigned char *)sysPara->voltePara.pixel_para_table, sizeof(sysPara->voltePara.pixel_para_table));// 写入8个 + fpgaWr(MATCH_5_DAC_TABLE_ADDR, (unsigned char *)matchFiveDACArray, sizeof(matchFiveDACArray));// 写入 匹配五点 DAC表 + + fpgaWr(MATCH_G1_DAC_TABLE_ADDR, (unsigned char *)(matchGapDACArray[0]), (40 * 2));// 写入 匹配空一点 DAC表 + fpgaWr(MATCH_G2_DAC_TABLE_ADDR, (unsigned char *)(matchGapDACArray[8]), (40 * 2));// 写入 匹配空两点 DAC表 + fpgaWr(MATCH_G3_DAC_TABLE_ADDR, (unsigned char *)(matchGapDACArray[16]), (40 * 2));// 写入 匹配空三点 DAC表 + fpgaWr(MATCH_G4_DAC_TABLE_ADDR, (unsigned char *)(matchGapDACArray[24]), (40 * 2));// 写入 匹配空四点 DAC表 + fpgaWr(MATCH_G5_DAC_TABLE_ADDR, (unsigned char *)(matchGapDACArray[32]), (40 * 2));// 写入 匹配空五点 DAC表 + fpgaWr(MATCH_G6_DAC_TABLE_ADDR, (unsigned char *)(matchGapDACArray[40]), (40 * 2));// 写入 匹配空六点 DAC表 + + fpgaWr(MATCH_P1_DAC_TABLE_ADDR, (unsigned char *)(matchPreDACArray[0]), (40 * 2));// 写入 匹配预备一 DAC表 + fpgaWr(MATCH_P2_DAC_TABLE_ADDR, (unsigned char *)(matchPreDACArray[8]), (40 * 2));// 写入 匹配预备二 DAC表 + + fpgaWr(MATCH_C_DAC_TABLE_ADDR, (unsigned char *)(matchComplexDACArray), sizeof(matchComplexDACArray));// 写入 匹配复杂 DAC表 + } + else + fpgaWr(MATCH_1_DAC_TABLE_ADDR, (unsigned char *)matchOneDACArrayStandard, sizeof(matchOneDACArrayStandard));// 写入 匹配单点 DAC表 + } + /*---------------------------------------------------------------------------------*/ + unsigned char sequenceArray[64]; + memset(sequenceArray,0,sizeof(sequenceArray)); + int sequenceNum = 0; + int startSequencePos = 0; + int currSequencePos = 0; + int rowSequenceMode = sysPara->para.rowSequenceMode?sysPara->para.rowSequenceMode:1; + for(int i = 0; i < sysPara->status.currPrintRow; i++){ + sequenceArray[i] = currSequencePos; + currSequencePos += rowSequenceMode; + if(currSequencePos >= sysPara->status.currPrintRow){ + startSequencePos ++; + currSequencePos = startSequencePos; + } + sequenceNum ++; + if(sequenceNum >= sysPara->status.currPrintRow) + break; + } + + if(!sysPara->para.flagOfFastMode) + fpgaWr(ROW_PRINT_SEQNENCE_ADDR,(unsigned char *)sequenceArray,sizeof(sequenceArray)); /* 0xB200 */ + /*---------------------------------------------------------------------------------*/ + + sysPara->para.phase_detect_high_cnt = (50*sysPara->para.divideRatio*2)/100; + sysPara->para.phase_detect_voltage = sysPara->para.phaseDetectVol* MAX_FPGA_DAC_VALUE/1000; + if(( sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && (sysPara->para.eleEyeClearCntInSynMode ) ) + || ((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + || sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.synClearCntInEleEyeMode)) + sysPara->para.extClearAllCntEnable = sysPara->para.eleEyeClearCntInSynMode; // 01 10 11 + else sysPara->para.extClearAllCntEnable = 0; // 0 + /*-----------------------------------------------------------------------------------------------*/ + unsigned int timeTpDly=sysPara->para.printDelayMs; + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME){ + if((sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_END_TO_HEAD)){ + int dotNumPerCol = sysPara->para.dotNumPerCol; + long printTmMs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000); + timeTpDly +=printTmMs; + } + } + sysPara->para.timeTriggerPrintDelayMs = timeTpDly; // 20150112 + sysPara->para.timeTriggerPrintDelayMsH=timeTpDly>>16; + /*---------------------------------------线性平均拟合---------------------------------*/ + int currHighVoltageIndex = sysPara->para.HighVoltageAmplitude/10; + if((unsigned int)currHighVoltageIndex >= ARRAY_SIZE(sysPara->para.highVoltageRecord)){ + if(!ignoreWarn){ + QMessageBox::warning(NULL,tr("警告"),tr("字高超出范围")); + } + } + else { + int expected_voltage_DAC = sysPara->para.highVoltageRecord[currHighVoltageIndex]; + int highVoltageStep = 0; + if((unsigned int)currHighVoltageIndex < (ARRAY_SIZE(sysPara->para.highVoltageRecord) - 1)){ + highVoltageStep = sysPara->para.highVoltageRecord[currHighVoltageIndex + 1] - sysPara->para.highVoltageRecord[currHighVoltageIndex]; + } + else + highVoltageStep = sysPara->para.highVoltageRecord[currHighVoltageIndex] - sysPara->para.highVoltageRecord[currHighVoltageIndex - 1]; + + expected_voltage_DAC += highVoltageStep*(sysPara->para.HighVoltageAmplitude%10)/10; + if(!expected_voltage_DAC){ + sysPara->para.maxHighVoltageDAC = 0; //为零时,逻辑将忽略所有高压故障 +#ifndef DEBUG_CNT + if(!ignoreWarn && (PRODUCT_VERSION(sysPara->status.fpgaVersionNum) != JETV1)) + QMessageBox::warning(NULL,tr("警告"),tr("字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误")); +#endif + } + else + sysPara->para.maxHighVoltageDAC = expected_voltage_DAC + sysPara->para.highVoltageLevel; + } + + if(sysPara->status.isPrinting==false){ + sysPara->para.printTotalColNum = currPrintCol; + sysPara->status.printTotalColNum = currPrintCol; + } + else + sysPara->para.printTotalColNum = sysPara->status.printTotalColNum; + + set_totalSynPulseNum(0); + + if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + { + unsigned int displayAreaTotalSynNum; + if(sysPara->para.sysTriggerPrintMode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH) + { +#define MIN_CHAR_WIDTH 0.1 //0.1mm/列 +#define MAX_CHAR_WIDTH 4.0 //4.0mm/列 + displayAreaTotalSynNum = (int )( + (MIN_CHAR_WIDTH +sysPara->para.printColDelay*(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100) + *currPrintCol*sysPara->para.synPulseNumPerMm + ); + if(displayAreaTotalSynNum >= 99*sysPara->para.totalSynPulseNum/100){ + displayAreaTotalSynNum = 99*sysPara->para.totalSynPulseNum/100; + if(!ignoreWarn && currPrintCol) + QMessageBox::warning(NULL,tr("警告"),tr("喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短!")); + } + } + else + displayAreaTotalSynNum = (int )(sysPara->para.totalSynPulseNum*sysPara->para.synTriggerPrintLenRatio/100); + + if(!displayAreaTotalSynNum){ + if(!ignoreWarn && currPrintCol) + QMessageBox::critical(NULL,tr("错误"),tr("在同步计米的情况下无打印串或显示区域为零")); + } + else { + if(currPrintCol){ + int synNumPerCol = displayAreaTotalSynNum*(1<<8)/(currPrintCol*(1 + sysPara->para.charBold)); + //加宽的时候,相当于列数翻倍 + if(displayAreaTotalSynNum >= (1<<24)){ + if(!ignoreWarn) + QMessageBox::critical(NULL,tr("错误"),tr("在同步计米的情况下喷印同步脉冲数过多,请检查你的配置")); + } + if(synNumPerCol >= (1<< 16)){ + if(!ignoreWarn) + QMessageBox::critical(NULL,tr("警告"),tr("喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度")); + } + if(synNumPerCol < 5){ + if(!ignoreWarn) + QMessageBox::critical(NULL,tr("警告"),tr("喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度")); + } + sysPara->para.synNumPerCol = synNumPerCol; + } + if(sysPara->para.synPulseNumPerMm<1 || sysPara->para.synPulseNumPerMm>50) { + } + sysPara->para.synPulsePerMmX8 = (unsigned short)((unsigned int)sysPara->para.synPulseNumPerMm <<8); + qDebug ()<<"s-"<para.synNumPerCol<<"-"<para.synPulsePerMmX8 ; + } + } + sysPara->para.magicNum = FPGA_MAGIC_NUM_AFTER_CONF; //用来做验证的 + /*-----------------------------------临时处理一下------------------------------------------------*/ + unsigned char tmpHighVoltageAmplitude = sysPara->para.HighVoltageAmplitude; + short phaseShift = sysPara->para.phaseShift; + if(phaseShift < 0){ + sysPara->para.phaseShift += 2*sysPara->para.divideRatio; + } + if(!sysPara->status.reclainTankReachEnd){ + sysPara->para.HighVoltageAmplitude = 0; + } + +#if 0 /* 原始值发给FPGA */ + if(sysPara->para.SynCntEn) sysPara->para.SynCntEn1 = sysPara->para.SynCntEn; + else { + sysPara->para.SynCntEn1 = sysPara->status.isPrinting; + } +#else + sysPara->para.SynCntEn1 = sysPara->para.SynCntEn; +#endif + if(sysPara->para.diaphramOffset == 0 || sysPara->para.diaphramOffset > 60) { + sysPara->para.diaphramOffset = 10; + } + fpgaWr(PRINT_CTRL_ADDR_BASE+0x72,(unsigned char *)&sysPara->para.diaphramOffset,2); //发送隔膜位置偏移量 + fpgaWr(PRINT_CTRL_ADDR_BASE+0x74,(unsigned char *)&sysPara->para.steal_dac_row,2); + fpgaWr(PRINT_CTRL_ADDR_BASE,(unsigned char *)&sysPara->para,FPGA_PRINT_PARA_BYTE_NUM); //0x3C + fpgaWr(PRINT_CTRL_ADDR_BASE+0x3C,(unsigned char *)&sysPara->para.eleMaskTime,4); //0x3C 3D 3E 3F LockTime Alt-MirrorGap + +#ifdef ALT16 + fpgaWr(PRINT_CTRL_ADDR_BASE+0x44,(unsigned char *)&sysPara->para.alterPrint,12); // Send AltePrit and cntNatureValue option 2017-7-18 + fpgaWr(PRINT_CTRL_ADDR_BASE+0x68,(unsigned char *)&sysPara->para.stepPrint,sizeof(sysPara->para.stepPrint)); // Send StepPring 2017-7-18 +#else + fpgaWr(PRINT_CTRL_ADDR_BASE+0x44,(unsigned char *)&sysPara->para.stepPrint,12); // Send StepPring and AltePrit and cntNatureValue option 2014-2-23 +#endif + sysPara->devOp->pumpValveCtrl(); // send data to A45A~5B Ctrl Para //20140423 + unsigned int volGap = (int )(sysPara->para.outputPulseDelayMs *sysPara->para.synPulseNumPerMm); + fpgaWr(PRINT_CTRL_ADDR_BASE+0x64,(unsigned char *)&volGap,4);// 0x64~0x68 // 发送卷间隔 + unsigned short pulseOutputAfterCnt1Printed = sysPara->para.pulse_sinal_value*10*sysPara->para.synPulseNumPerMm; + sysPara->devOp->fpgaWr(PRINT_CTRL_ADDR_BASE + 0x88, (unsigned char *)&pulseOutputAfterCnt1Printed, 2); + unsigned short pulseOutputAfterCnt1Print = short2BCD(sysPara->para.productNumToGenerateOutputPulse); + fpgaWr(PRINT_CTRL_ADDR_BASE+0x90,(unsigned char *)&pulseOutputAfterCnt1Print,2); + + unsigned char reg_adv[40]; + unsigned int v[32]; + QString str="ADJ:"; + str+= QString().sprintf("%d,",DACStep); + v[0]=0; + for(int i=0;i<32;i++) + { + v[0] =v[0]+(DACStep/(2+i*i)); + str+= QString().sprintf("%d,",v[0]); + } + + sysPara->para.HighVoltageAmplitude = tmpHighVoltageAmplitude; + sysPara->para.phaseShift = phaseShift; + if(sysPara->para.OuputPulseCol > 200) + sysPara->para.OuputPulseCol = 200; + quint16 chargeDivideRatio = sysPara->para.OuputPulseCol; + /*---------------------------------------------------------------------------------------*/ +#ifdef DEBUG1 + qDebug()<<"writeFpgaPrintPara"<para.oscillatorVoltage); //因为经过调整参数,所以开机也要多发送一次 +#endif + sysPara->saveParaToFile(); + sysPara->status.configDone = 1; +#ifdef DEBUG1 + qDebug()<<"writeFpgaPrintPara"<<"12"; +#endif +#endif + return 0; +} +void DevOp::writeDacValue2Fpga() +{ + LogInfo::setRunStatusText(tr("No73 send DAC Data.")); +// quint16 head1_base_table[48] = { 803, 960, 1090, 1221, 1338, 1469, 1586, 1717, 1847, 1978, 2121, 2252,1502,1580,1659,1737,1802,1868,1946,2024,2103,2181,2246,2325,2390,2468,2534,2599,2677,2743,2821,2886,2952,3017}; +// quint16 head2_base_table[48] = { 0, 1077, 1247, 1404, 1534, 1678, 1782, 1782, 1939, 2069, 2200, 2330,1502,1580,1659,1737,1802,1868,1946,2024,2103,2181,2246,2325,2390,2468,2534,2599,2677,2743,2821,2886,2952,3017}; +// quint16 head3_base_table[48] = { 0, 1077, 1247, 1404, 1534, 1678, 1782, 1782, 1939, 2069, 2200, 2330,1502,1580,1659,1737,1802,1868,1946,2024,2103,2181,2246,2325,2390,2468,2534,2599,2677,2743,2821,2886,2952,3017}; +// quint16 tail2_base_table[48] = { 0, 1077, 1247, 1404, 1534, 1678, 1782, 1782, 1939, 2069, 2200, 2330,1502,1580,1659,1737,1802,1868,1946,2024,2103,2181,2246,2325,2390,2468,2534,2599,2677,2743,2821,2886,2952,3017}; +// quint16 tail1_base_table[48] = { 0, 1077, 1247, 1404, 1534, 1678, 1782, 1782, 1939, 2069, 2200, 2330,1502,1580,1659,1737,1802,1868,1946,2024,2103,2181,2246,2325,2390,2468,2534,2599,2677,2743,2821,2886,2952,3017}; + + quint16 matchFullDACArray[48]; + quint16 matchStealDACArray[48]; + quint16 matchContinousDACArray[48]; + + quint16 rowDelayArray[64]; + quint16 head1RowDelayArray[64]; + + quint8 adjDACParameter[64]; + + quint8 matchTotalTableDACArray[15][64]; + quint8* matchOneDACArray = &matchTotalTableDACArray[0][0]; + quint8* matchTwoDACArray = &matchTotalTableDACArray[1][0]; + quint8* matchThreeDACArray = &matchTotalTableDACArray[3][0]; + quint8* matchFourDACArray = &matchTotalTableDACArray[6][0]; + quint8* matchFiveDACArray = &matchTotalTableDACArray[10][0]; + + quint8 matchPrevious1DotDACArray[48]; + quint8 matchPrevious2DotDACArray[48]; + quint8 matchPrevious3DotDACArray[48]; + quint8 matchPrevious4DotDACArray[48]; + quint8 matchPrevious5DotDACArray[48]; + quint8 matchGapDACArray[64][5]; + quint8 matchP3dotGapDACArray[64][5]; + + memset(matchFullDACArray, 0, sizeof(matchFullDACArray)); + memset(matchStealDACArray, 0, sizeof(matchStealDACArray)); + memset(matchContinousDACArray, 0, sizeof(matchContinousDACArray)); + memset(rowDelayArray, 0, sizeof(rowDelayArray)); + memset(head1RowDelayArray, 0, sizeof(head1RowDelayArray)); + + memset(matchTotalTableDACArray, 0, sizeof(matchTotalTableDACArray)); + + memset(matchPrevious1DotDACArray, 0, sizeof(matchPrevious1DotDACArray)); + memset(matchPrevious2DotDACArray, 0, sizeof(matchPrevious2DotDACArray)); + memset(matchPrevious3DotDACArray, 0, sizeof(matchPrevious3DotDACArray)); + memset(matchPrevious4DotDACArray, 0, sizeof(matchPrevious4DotDACArray)); + memset(matchPrevious5DotDACArray, 0, sizeof(matchPrevious5DotDACArray)); + memset(matchGapDACArray, 0, sizeof(matchGapDACArray)); + memset(matchP3dotGapDACArray, 0, sizeof(matchP3dotGapDACArray)); + memset(adjDACParameter, 0, sizeof(adjDACParameter)); + + QFile file("./conf/full_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + matchFullDACArray[i] = sysPara->voltePara_No73.pixel_full_table[i] ; + out << sysPara->voltePara_No73.pixel_full_table[i]<< "\n"; + } + file.close(); + + file.setFileName("./conf/steal_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + matchStealDACArray[i] = sysPara->voltePara_No73.pixel_steal_table[i]; + out << sysPara->voltePara_No73.pixel_steal_table[i]<< "\n"; + } + file.close(); + + file.setFileName("./conf/continous_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + matchContinousDACArray[i] = sysPara->voltePara_No73.pixel_continous_table[i]; + out << sysPara->voltePara_No73.pixel_continous_table[i]<< "\n"; + } + file.close(); + + file.setFileName("./conf/row_delay.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + rowDelayArray[i] = sysPara->voltePara_No73.row_delay_table[i]; + out << sysPara->voltePara_No73.row_delay_table[i]<< "\n"; + } + file.close(); + + file.setFileName("./conf/head1_row_delay.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + head1RowDelayArray[i] = sysPara->voltePara_No73.head1_row_delay_table[i]; + out << sysPara->voltePara_No73.head1_row_delay_table[i]<< "\n"; + } + file.close(); + file.setFileName("./conf/1_table_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + *matchOneDACArray = sysPara->voltePara_No73.pixel_1_table[i];// - head1_base_table[i]; + out << sysPara->voltePara_No73.pixel_1_table[i] <<" "<< *matchOneDACArray << "\n"; + ++matchOneDACArray; + } + file.close(); + + file.setFileName("./conf/2_table_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + *matchTwoDACArray = sysPara->voltePara_No73.pixel_2_table[i][0];// - head1_base_table[i]; + ++matchTwoDACArray; + *matchTwoDACArray = sysPara->voltePara_No73.pixel_2_table[i][1];// - tail1_base_table[i]; + ++matchTwoDACArray; + out << sysPara->voltePara_No73.pixel_2_table[i][0]; + out << ","; + out << sysPara->voltePara_No73.pixel_2_table[i][1]; + out << "\n"; + } + file.close(); + + file.setFileName("./conf/3_table_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + *matchThreeDACArray = sysPara->voltePara_No73.pixel_3_table[i][0];// - head1_base_table[i]; + ++matchThreeDACArray; + *matchThreeDACArray = sysPara->voltePara_No73.pixel_3_table[i][1];// - head2_base_table[i]; + ++matchThreeDACArray; + *matchThreeDACArray = sysPara->voltePara_No73.pixel_3_table[i][2];// - tail1_base_table[i]; + ++matchThreeDACArray; + out << sysPara->voltePara_No73.pixel_3_table[i][0]; + out << ","; + out << sysPara->voltePara_No73.pixel_3_table[i][1]; + out << ","; + out << sysPara->voltePara_No73.pixel_3_table[i][2]; + out << "\n"; + } + file.close(); + + file.setFileName("./conf/4_table_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + *matchFourDACArray = sysPara->voltePara_No73.pixel_4_table[i][0];// - head1_base_table[i]; + ++matchFourDACArray; + *matchFourDACArray = sysPara->voltePara_No73.pixel_4_table[i][1];// - head2_base_table[i]; + ++matchFourDACArray; + *matchFourDACArray = sysPara->voltePara_No73.pixel_4_table[i][2];// - head3_base_table[i]; + ++matchFourDACArray; + *matchFourDACArray = sysPara->voltePara_No73.pixel_4_table[i][3];// - tail1_base_table[i]; + ++matchFourDACArray; + out << sysPara->voltePara_No73.pixel_4_table[i][0]; + out << ","; + out << sysPara->voltePara_No73.pixel_4_table[i][1]; + out << ","; + out << sysPara->voltePara_No73.pixel_4_table[i][2]; + out << ","; + out << sysPara->voltePara_No73.pixel_4_table[i][3]; + out << "\n"; + } + file.close(); + + file.setFileName("./conf/5_table_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + QTextStream out(&file); + *matchFiveDACArray = sysPara->voltePara_No73.pixel_5_table[i][0];// - head1_base_table[i]; + ++matchFiveDACArray; + *matchFiveDACArray = sysPara->voltePara_No73.pixel_5_table[i][1];// - head2_base_table[i]; + ++matchFiveDACArray; + *matchFiveDACArray = sysPara->voltePara_No73.pixel_5_table[i][2];// - head3_base_table[i]; + ++matchFiveDACArray; + *matchFiveDACArray = sysPara->voltePara_No73.pixel_5_table[i][3];// - tail2_base_table[i]; + ++matchFiveDACArray; + *matchFiveDACArray = sysPara->voltePara_No73.pixel_5_table[i][4];// - tail1_base_table[i]; + ++matchFiveDACArray; + out << sysPara->voltePara_No73.pixel_5_table[i][0]; + out << ","; + out << sysPara->voltePara_No73.pixel_5_table[i][1]; + out << ","; + out << sysPara->voltePara_No73.pixel_5_table[i][2]; + out << ","; + out << sysPara->voltePara_No73.pixel_5_table[i][3]; + out << ","; + out << sysPara->voltePara_No73.pixel_5_table[i][4]; + out << "\n"; + } + file.close(); + + file.setFileName("./conf/gap_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + for (int j = 0; j < 5; j++) + { + matchGapDACArray[i][j] = sysPara->voltePara_No73.pixel_gap_table[i][j]; + } + QTextStream out(&file); + out << sysPara->voltePara_No73.pixel_gap_table[i][0]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_table[i][1]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_table[i][2]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_table[i][3]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_table[i][4]; + out << "\n"; + } + file.close(); + + file.setFileName("./conf/p3dot_gap_dac_raw.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < 48; i++) + { + for (int j = 0; j < 5; j++) + { + matchP3dotGapDACArray[i][j] = sysPara->voltePara_No73.pixel_gap_post_3dot_table[i][j]; + } + QTextStream out(&file); + out << sysPara->voltePara_No73.pixel_gap_post_3dot_table[i][0]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_post_3dot_table[i][1]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_post_3dot_table[i][2]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_post_3dot_table[i][3]; + out << ","; + out << sysPara->voltePara_No73.pixel_gap_post_3dot_table[i][4]; + out << "\n"; + } + file.close(); + + file.setFileName("./conf/general_dac_parameter.txt"); + file.open(QIODevice::WriteOnly); + for (int i = 0; i < sizeof(sysPara->voltePara_No73.pixel_general_dac_parameter)/sizeof(sysPara->voltePara_No73.pixel_general_dac_parameter[0]); i++) + { + adjDACParameter[i] = sysPara->voltePara_No73.pixel_general_dac_parameter[i]; + QTextStream out(&file); + out << adjDACParameter[i]; + out << "\n"; + } + file.close(); + + fpgaWr(0xB300, (unsigned char *)(matchFullDACArray), sizeof (matchFullDACArray)); + fpgaWr(0xB380, (unsigned char *)(matchContinousDACArray), sizeof (matchContinousDACArray)); + + fpgaWr(0xB400, (unsigned char *)(&rowDelayArray[0]), sizeof (rowDelayArray)); + fpgaWr(0xB480, (unsigned char *)(&head1RowDelayArray[0]), sizeof (head1RowDelayArray)); + + fpgaWr(0xB500, (unsigned char *)(matchTotalTableDACArray[0]), sizeof (matchTotalTableDACArray)); + fpgaWr(0xBC00, (unsigned char *)(matchP3dotGapDACArray[0]), sizeof (matchP3dotGapDACArray)); + fpgaWr(0xBE00, (unsigned char *)(matchGapDACArray[0]), sizeof (matchGapDACArray)); + fpgaWr(0xC000, (unsigned char *)sysPara->voltePara_No73.pixel_big_table, sizeof(sysPara->voltePara_No73.pixel_big_table));// 写入8个 big data + fpgaWr(0xC100, (unsigned char *)adjDACParameter, sizeof(adjDACParameter));// 写入8个 + +} +// 齿轮泵设置 +void DevOp::WriteMoterPump(void) +{ + fpgaWr(PRINT_CTRL_ADDR_BASE+0x70, (unsigned char *)&sysPara->para.gearPumpValue, 2); +} +void DevOp::ReadSomeDataForLostPrint(void) +{ +#ifdef SYS_LINUX + fpgaRd(FPGA_STATUS_BASE_ADDR+0x46,(unsigned char *)&sysPara->status.r_print_q, 14); +#endif +} + +void DevOp::ReadCnt1GroupStatus(void) +{ +#ifdef SYS_LINUX +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + fpgaRd(READ_CNT1GROUP_CURR_LOOP,(unsigned char *)&sysPara->status.cnt1GroupCurrentLoop,sizeof(sysPara->status.cnt1GroupCurrentLoop)); + fpgaRd(READ_CNT1GROUP_CURR_INDEX,(unsigned char *)&sysPara->status.cnt1GroupRunningIndex,sizeof(sysPara->status.cnt1GroupRunningIndex)); +#endif +#endif +} +void DevOp::writeCnt1GroupSetting(bool bCntByGroupEnable){ +#ifdef SYS_LINUX +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + struct { + unsigned char cnt1GroupNum; + int StartValue; + int EndValue; + int LoopTimes; + }cnt1GroupSettingSend; + if(sysPara->para.cnt1ByGroupEnalbe) + { + fpgaWr(WRITE_CNT1GROUP_COUNT,(unsigned char *)&sysPara->para.Cnt1ByGroup.cnt1GroupCnt,sizeof(sysPara->para.Cnt1ByGroup.cnt1GroupCnt)); + + for(int i=0;ipara.Cnt1ByGroup.cnt1GroupCnt;i++) + { + cnt1GroupSettingSend.cnt1GroupNum = (unsigned char)i; + //memcpy((unsigned char *)&cnt1GroupSettingSend.cnt1GroupSettings, &sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i], sizeof(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i])); + + cnt1GroupSettingSend.StartValue = QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue).toUInt(0,16);//bcd + cnt1GroupSettingSend.EndValue = QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue).toUInt(0,16); + cnt1GroupSettingSend.LoopTimes = sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes; + fpgaWr(WRITE_CNT1GROUP_NUM,(unsigned char *)&cnt1GroupSettingSend.cnt1GroupNum,1); + fpgaWr(WRITE_CNT1GROUP_SETTING,(unsigned char *)&cnt1GroupSettingSend.StartValue,12); +#if 0 + qDebug()<<"index "<status.calandar_and_dat,16); + + fpgaRd((READ_CALENDAR_DAT_ADDR + 0x34) ,(unsigned char *)&sysPara->status.Status_Counter3.cnt3CurrValue,4); + fpgaRd((READ_CALENDAR_DAT_ADDR + 0x38) ,(unsigned char *)&sysPara->status.XXXDay,2); +} + +void DevOp::writeFpgaCalandar(bool Enable){ + Q_UNUSED(Enable); +#ifdef SYS_LINUX + time_t rawtime; + struct tm *pTm; + char buffer[20]; + time( &rawtime ); + pTm = localtime( &rawtime ); + strftime(buffer, sizeof buffer, "%U", pTm);//%U 从星期天算,%W 从星期一算 + + QTime t = QTime::currentTime(); + QDate d = QDate::currentDate(); + int year = d.year(); + sysPara->para.calandar_and_dat.leap_year = (year%400 == 0) || ((year%4 == 0) && (year%100 != 0)); + //sysPara->para.calandar_and_dat.week = d.weekNumber();// + sysPara->para.calandar_and_dat.dayofweek = d.dayOfWeek(); + // sysPara->para.calandar_and_dat.week = QString(buffer).toInt(); + sysPara->para.calandar_and_dat.week = d.weekNumber(); + sysPara->para.calandar_and_dat.year = d.year(); + sysPara->para.calandar_and_dat.month = d.month(); + sysPara->para.calandar_and_dat.day = d.day(); + sysPara->para.calandar_and_dat.hour = t.hour(); + sysPara->para.calandar_and_dat.minute = t.minute(); + sysPara->para.calandar_and_dat.second = t.second(); + + //将变量初始值写入寄存器 + + sysPara->para.calandar_and_dat.cnt1InitValue = QString::number(sysPara->para.cnt1StartValue).toUInt(0,16); //bcd + sysPara->para.calandar_and_dat.cnt1End = QString::number(sysPara->para.cnt1EndValue).toUInt(0,16); + sysPara->para.calandar_and_dat.cnt1Repeat = sysPara->para.cnt1RepeateValue; + sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->para.cnt1CurrValue).toUInt(0,16); + + int step = sysPara->para.cnt1StepValue; + if (step == 0) + step = 1; + step = step < 0?(100000000 + step):step; //务必对负数的值小心处理 + sysPara->para.calandar_and_dat.cnt1Step = QString::number(step).toUInt(0,16); + + sysPara->para.calandar_and_dat.cnt2InitValue = QString::number(sysPara->para.cnt2StartValue).toUInt(0,16); + sysPara->para.calandar_and_dat.cnt2End = QString::number(sysPara->para.cnt2EndValue).toUInt(0,16); + sysPara->para.calandar_and_dat.cnt2Repeat = sysPara->para.cnt2RepeateValue; + sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->para.cnt2CurrValue).toUInt(0,16); + + step = sysPara->para.cnt2StepValue; + if (step == 0) + step = 1; + step = step < 0?(100000000 + step):step; + sysPara->para.calandar_and_dat.cnt2Step = QString::number(step).toUInt(0,16); + + sysPara->para.calandar_and_dat.cntCurrValueInitEnable = + (sysPara->status.cnt3CurrentValueInitDoneFlag?0:4)+ + (sysPara->status.cnt2CurrentValueInitDoneFlag?0:2) + + (sysPara->status.cnt1CurrentValueInitDoneFlag?0:1); + + fpgaWr(WRITE_CALENDAR_DAT_ADDR,(unsigned char *)&sysPara->para.calandar_and_dat,sizeof(sysPara->para.calandar_and_dat)); + + /*write counter3*/ + sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->para.cnt3CurrValue).toUInt(0,16); + // qDebug()<<"cnt3CurrValue:"<para.cnt3CurrValue; + // qDebug()<<"sysPara->status.cnt3CurrentValueInitDoneFlag:"<status.cnt3CurrentValueInitDoneFlag; + sysPara->para.Counter3.cnt3End = QString::number(sysPara->para.cnt3EndValue).toUInt(0,16); + sysPara->para.Counter3.cnt3InitValue = QString::number(sysPara->para.cnt3StartValue).toUInt(0,16); + sysPara->para.Counter3.cnt3Repeat = sysPara->para.cnt3RepeateValue; + step = sysPara->para.cnt3StepValue; + if (step == 0) + step = 1; + step = step < 0?(100000000 + step):step; + sysPara->para.Counter3.cnt3Step = QString::number(step).toUInt(0,16); + fpgaWr(WRITE_COUNTER3_ADDR,(unsigned char *)&sysPara->para.Counter3,sizeof(sysPara->para.Counter3)); + sysPara->para.Counter4.cnt4CurrValue= QString::number(sysPara->para.cnt4CurrValue).toUInt(0,16); //计数器4当前值用于隐藏功能 + fpgaWr(WRITE_COUNTER4_ADDR,(unsigned char *)&sysPara->para.Counter4,sizeof(sysPara->para.Counter4)); + + + //qDebug()<<"sizeof(sysPara->para.Counter3):"<para.Counter3); + /*write counter3 end*/ + + sysPara->status.cnt3CurrentValueInitDoneFlag = true; + sysPara->status.cnt2CurrentValueInitDoneFlag = true; + sysPara->status.cnt1CurrentValueInitDoneFlag = true; + + //qDebug()<<"year:"<para.calandar_and_dat.year; +#endif +} + +void DevOp::writeFpgaVariCtrl(void){ +#ifdef SYS_LINUX + writeFpgaCalandar(0); + fpgaWrD(VAR_CNT_ADDR,sysPara->status.variNum,1); /* 0xa450 变量个数 */ + reg_var_print_ctrl_t reg_var_print_ctrl; + for(int i = 0; i < sysPara->status.variNum; i++){ + vars_t *p_var = &sysPara->status.vars[i]; + if(p_var->original && p_var->dat){ + fpgaWr(PRINT_DIGITAL_CHAR_BASE_ADDR + p_var->bassAddr,p_var->dat,p_var->datWidth *p_var->rowByteNum); + } + memset((char *)®_var_print_ctrl,0,sizeof(reg_var_print_ctrl)); + reg_var_print_ctrl.charColNum = p_var->digitalNum?p_var->width/p_var->digitalNum:0; + reg_var_print_ctrl.charRamBaseAddr = p_var->bassAddr; + reg_var_print_ctrl.charRowNum = p_var->endRowPos - p_var->startRowPos; + reg_var_print_ctrl.horizonWidth = p_var->width;//字模的宽度 + reg_var_print_ctrl.colOffset = p_var->startColPos+BLANK_COL_NUM; + reg_var_print_ctrl.verticalOffset = p_var->startRowPos; + reg_var_print_ctrl.varDigitalNum = p_var->digitalNum; + // reg_var_print_ctrl.varTypeSel = p_var->type %20; + reg_var_print_ctrl.varTypeSel = Public::getType(p_var->type) %20; + fpgaWr(VAR_CTRL_REG_ADDR,(unsigned char *)®_var_print_ctrl,sizeof(reg_var_print_ctrl)); + + } +#endif +} + +void DevOp::printCtrl(int cmd){ + //printCtrl2(cmd); + fpgaWrD(PRINT_START_STOP_CTRL,cmd,1); +} + +void DevOp::printCtrl2(int cmd){ + if(sysPara->para.SynCntEn) sysPara->para.SynCntEn1 = sysPara->para.SynCntEn; + else { + sysPara->para.SynCntEn1 = sysPara->status.isPrinting; + } +#ifdef ALT16 + fpgaWr(PRINT_CTRL_ADDR_BASE+0x44,(unsigned char *)&sysPara->para.alterPrint,12); // Send AltePrit and cntNatureValue option 2017-7-18 + fpgaWr(PRINT_CTRL_ADDR_BASE+0x68,(unsigned char *)&sysPara->para.stepPrint,sizeof(sysPara->para.stepPrint)); // Send StepPring 2017-7-18 +#else + fpgaWr(PRINT_CTRL_ADDR_BASE+0x44,(unsigned char *)&sysPara->para.stepPrint,12); // Send StepPring and AltePrit and cntNatureValue option 2014-2-23 +#endif + cmd=1; +} + +unsigned int DevOp::readFpgaVersionNum(){ + fpgaRd(0x00EC,&sysPara->status.FPGAChipType,1); + return (sysPara->status.fpgaVersionNum = fpgaRdD(FPGA_VERSOIN_NUM,2)); +} + +void DevOp::readbuilDat(void){ + fpgaRd(READ_BUILD_DAT,(unsigned char *)&sysPara->status.build_dat,sizeof(sysPara->status.build_dat)); + fpgaRd(FPGA_STATUS_BASE_ADDR + 0xed,(unsigned char *)&sysPara->status.build_dat.year,sizeof(sysPara->status.build_dat.year)); + fpgaRd(FPGA_STATUS_BASE_ADDR + 0xee,(unsigned char *)&sysPara->status.build_dat.month,sizeof(sysPara->status.build_dat.month)); + fpgaRd(FPGA_STATUS_BASE_ADDR + 0xef,(unsigned char *)&sysPara->status.build_dat.day,sizeof(sysPara->status.build_dat.day)); +} + +void DevOp::readPrintDataXor(void){ + fpgaRd(READ_PRINTDATA_XOR, (unsigned char *)&sysPara->status.xor_sync, 2); +} + +void DevOp::readSyncCounterAtZero(void){ + fpgaRd(READ_SYNC_COUNTER, (unsigned char *)&sysPara->status.xor_sync.sync_counter_at_zero, sizeof(sysPara->status.xor_sync.sync_counter_at_zero)); +} + +void DevOp::clearProductCnt(unsigned int mode){ + fpgaWrD(PRINT_RESET_PRODUCT_CNT,mode,1); +} + +void DevOp::resumeFault(){ + fpgaWrD(RESUME_FAULT_ADDR,1,1); +} + + +void DevOp::highVoltageCtrl(int val){ + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.HighVoltageAmplitude) - (unsigned int)(&sysPara->para),(unsigned int)val,1); + //qDebug()<<"highVoltageCtrl"<status.waitHightVolOn =0; + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.maxHighVoltageDAC) - (unsigned int)(&sysPara->para),(unsigned int)val,2); + +} + +void DevOp::setPhaseByHand(int val){ + sysPara->para.phaseByHand = val; + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.phaseByHand) - (unsigned int)(&sysPara->para),(unsigned int)val,1); +} + +void DevOp::readPhaseDetectHighTm(void){ + fpgaRd(PHASE_DETECT_HIGH_VOLTAGE_TM,(unsigned char *)&sysPara->status.phaseDetectHighTm,sizeof(sysPara->status.phaseDetectHighTm)); + +} + +void DevOp::setPhaseDetectVoltageDutyCycle(int duty){ + unsigned value = (duty * sysPara->para.divideRatio * 2) / 100; + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.phase_detect_high_cnt) - (unsigned int)(&sysPara->para),value,2); + //qDebug()<<"WriteFPGA:"<para.phaseHighLowRatio<para.divideRatio; +} + +void DevOp::setBlickLightPeriod(int value){ + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.blinkLightPeriod) - (unsigned int)(&sysPara->para),value,2); +} + +void DevOp::setOscillatorVoltage(int value){ +#ifdef __VX_OSC_VOL__ + if(value<100) + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.oscillatorVoltage) - (unsigned int)(&sysPara->para),OscillatorVoltage[value],1); +#else + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.oscillatorVoltage) - (unsigned int)(&sysPara->para),value,1); +#endif +} + +void DevOp::setDivideRatio(int value){ + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.divideRatio) - (unsigned int)(&sysPara->para),value,2); +} + +void DevOp::setLastLineEndPointFixedValue(int value){ + fpgaWrD(PRINT_CTRL_ADDR_BASE + (unsigned int)(&sysPara->para.lastLineEndPointFixedDACValue) - (unsigned int)(&sysPara->para),value*MAX_FPGA_DAC_VALUE/1000,2); +} +void DevOp::mainInkCtrl() +{ + fpgaWrD(MAININKCTRL_ADDR,(isReleaseValveOpen()?(1<<3):0)+(isMainInkPumpOpen()?(1<<2):0) + (sysPara->status.selfCheckDone?(1<<1):0) + (sysPara->status.isPumpValveControledByHand?1:0),1); +} + +void DevOp::pumpValveCtrl(int viscosityAdjustByTemp)//20140423 OK +{ + char buf[20]; + int i=0; + int viscostyRealValue, tempOffset; + static int hadGetIndoorTemperature=0; + memset(buf,0,sizeof(buf)); + + buf[i++]=(isReleaseValveOpen()?(1<<3):0) + +(isMainInkPumpOpen()?(1<<2):0) + + (sysPara->status.selfCheckDone?(1<<1):0) + + (sysPara->status.isPumpValveControledByHand?1:0); + if(!sysPara->para.gearPumpEnable) { + buf[i++] = (sysPara->para.pressure/5)&0xff; + //buf[i++]=((sysPara->para.pressure/5)/256)&0xff; + buf[i++] = ((sysPara->para.pressure/5)>>8)&0xff; + } + else { + buf[i++] = (sysPara->para.pressure)&0xff; + //buf[i++]=((sysPara->para.pressure/5)/256)&0xff; + buf[i++] = (sysPara->para.pressure>>8)&0xff; + } + buf[i++]=(sysPara->para.viscosityPumpInterval*100)&0xff; + //buf[i++]=((sysPara->para.viscosityPumpInterval*100)/256)&0xff; + buf[i++]=((sysPara->para.viscosityPumpInterval*100)>>8)&0xff; + if(!hadGetIndoorTemperature) + { + hadGetIndoorTemperature = viscosityAdjustByTemp; + } + if(!hadGetIndoorTemperature) + { + buf[i++]=(sysPara->para.viscosity)&0xff; + //buf[i++]=((sysPara->para.viscosity)/256)&0xff; + buf[i++]=((sysPara->para.viscosity)>>8)&0xff; + } + else + { + tempOffset = sysPara->status.indoorTemperature-35; + if(tempOffset>5)//超过40度就按照40度计算 + { + tempOffset = 5; + } + if(tempOffset>0) + { + if(sysPara->para.viscosityAdjust==1)//0.6% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(tempOffset*3)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(tempOffset*3)/500; + } + else if(sysPara->para.viscosityAdjust==2)//1.0% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(tempOffset*5)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*tempOffset/100; + } + else if(sysPara->para.viscosityAdjust==3)//1.6% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(tempOffset*8)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*tempOffset*8/500; + } + else if(sysPara->para.viscosityAdjust==3)//2.0% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(tempOffset*10)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*tempOffset*2/100; + } + else + { + viscostyRealValue = sysPara->para.viscosity; + } + } + else + { + viscostyRealValue = sysPara->para.viscosity; + } + buf[i++]=viscostyRealValue&0xff; + buf[i++]=(viscostyRealValue>>8)&0xff; + } + buf[i++]=(sysPara->para.reclaimPumpPWMWidth)&0xff; + buf[i++]=((sysPara->para.temperature))&0xff; + buf[i++]=(sysPara->devOp->isReclaimPumpOpen()?(1<<0):0) + | (sysPara->devOp->isCompressPumpOpen()?(1<<1):0) + | (sysPara->devOp->isViscosityPumpOpen()?(1<<2):0) + | (sysPara->devOp->isCycleValveOpen()?(1<<3):0) + | (sysPara->devOp->isInkValveOpen()?(1<<4):0) + | (sysPara->devOp->isMixValveOpen()?(1<<5):0); + + // fpgaWrD(MAININKCTRL_ADDR,(isReleaseValveOpen()?(1<<3):0)+(isMainInkPumpOpen()?(1<<2):0) + (sysPara->status.selfCheckDone?(1<<1):0) + (sysPara->status.isPumpValveControledByHand?1:0),1); + fpgaWr(MAININKCTRL_ADDR,(unsigned char *)buf,i);// //20140423 5A,5B + + /* +`ifdef AUTOCTRL + 8'h5c: reg_set_viscosityPumpInterval[0+:8]<= ctrl_reg_dat; // 粘度泵动作时间间隔(默认值60s) + 8'h5d: reg_set_viscosityPumpInterval[8+:6]<= ctrl_reg_dat[5:0]; // 粘度泵动作时间间隔, 上位机 *100后再传送 + 8'h5e: reg_set_viscosity[0+:8] <= {ctrl_reg_dat}; // 粘度设定值 + 8'h5f: reg_set_viscosity[8+:8] <= {ctrl_reg_dat}; // 粘度设定值 + 8'h60: reg_set_reclaimPumpPWMWidth <= ctrl_reg_dat; // 回收泵力度PWM 0~90 + 8'h61: reg_set_temperature <= ctrl_reg_dat; // 喷头温度设定值 + 8'h62: {reg_is_MixValve_open,reg_is_InkValve_open, reg_is_CycleValve_open,reg_is_ViscoPump_open, + reg_is_CompressPump_open,reg_is_ReclaimPump_open}<=ctrl_reg_dat; + // 混合阀//供墨阀// 循环阀//粘度泵 // 压缩机// 回收泵 + +`endif + */ + +} +#ifdef __STC_POWER__ + +#include +#include +#include +//#include +#define STC_CHIP_ADDR 0x50 + +int DevOp::Heartbeat(char bPowerOn) +{ + // int flag = bPowerOn; + // qDebug()<<"Heartbeat: "<isOpen()) + { + int n = comForPower->write(temp); + //qDebug()<<"power com send "<isOpen()) + { + int n; +#if 0 + n= comForPower->bytesAvailable(); + if(n>0) + { + recResponse.append(comForPower->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<write(temp); + qDebug()<<"set wake up "<bytesAvailable(); + if(n>0) + { + recResponse.append(comForPower->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<isOpen()) + { + int n = comForPower->bytesAvailable(); + if(n>0) + { + recResponse.append(comForPower->read(n)); + } + n = comForPower->write(temp); + // QElapsedTimer timer; + // timer.start(); + // while(timer.elapsed()<50) + // { + // ; + // } + MySleep(200); + n = comForPower->bytesAvailable(); + if(n<=0) + { + + return 0; + } + + // 接收数据 + recResponse.append(comForPower->read(n)); + //qDebug()<<"n" << n<<" power by:"< +#include +#include +#include +#include + +qint8 DevOp::GetTemp(QString ainFile, quint8 *pTemp) +{ + int value; + qint8 ret = 0; + FILE *fp; + std::string ain_str = ainFile.toStdString(); + const char *file_path = ain_str.c_str(); + //sprintf(pChar, "%s", BOART_TEMP_DEVICE); + fp = fopen(file_path, "r" ); + if( fp==NULL ) + { + //qDebug()<<"open file fail:"<status.ExtScreenEn; +} + +#ifdef UART2 +//======================================================================================= +void DevOp::sendCom(char *buf,int len) +{ + QByteArray temp; + temp.append(buf,len); + if(sysPara->status.ExtScreenEn && (myCom->isOpen())) + myCom->write(temp); +} + +void DevOp::sendCom(QString s) +{ + if(sysPara->status.ExtScreenEn && (myCom->isOpen())) + { + myCom->write(s.toAscii()); + } +} + +int DevOp::recUart2() +{ + if(!sysPara->status.ExtScreenEn)return 0; + + int n=myCom->bytesAvailable(); + if(n<=0) + { + + if(recData.length()) + { + //showData(recData); + //recData.constBegin() + readCom(recData.at(1),recData,recData.at(0)); + recData.clear(); + } + return 0; + } + if (!myCom->isOpen()) return 0; + // 接收数据 + recData.append(myCom->read(n)); + return recData.length(); +} + +void DevOp::readCom(char mode,QByteArray rec,int addr) +{ + //qDebug() << "read11:"<< rec.length(); + recLen = rec.length(); + recData = rec; + int len=recData.length(); + if(mode== 'R' || mode== 'S' ) + { + if(addr==FPGA_STATUS_BASE_ADDR){ + //if(len>FPGA_STATUS_BYTE_NUM) return; + //qDebug() << "read11:"<< rec.length()<status,recData,FPGA_STATUS_BYTE_NUM); + len = sizeof(sysPara->status.calandar_and_dat); + addr = 0x80; + memcpy((unsigned char *)&sysPara->status.calandar_and_dat,recData.mid(addr,len),len); + + if(sysPara->status.detectBestOscillatorVoltageAppending + || sysPara->status.detectHighVoltageAppending ) + { + memcpy((unsigned char *)&sysPara->status.phaseDetectHighTm, + recData.mid(PHASE_DETECT_HIGH_VOLTAGE_TM,sizeof(sysPara->status.phaseDetectHighTm)), + sizeof(sysPara->status.phaseDetectHighTm)); + } + + len = sizeof(sysPara->status.fpgaVersionNum); + addr = 0x62; + memcpy((unsigned char *)&sysPara->status.fpgaVersionNum,recData.mid(addr,len),len); + + memcpy((unsigned char *)&sysPara->status.build_dat, + recData.mid(0x60,sizeof(sysPara->status.build_dat)), + sizeof(sysPara->status.build_dat)); + if(!sysPara->para.gearPumpEnable) + sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍 + + } + else return; + } + } + else if(addr ==0x01 )//仪表返回到信息 + { + // qDebug()<<"C:"<isOpen()) { return 2;} + // check if sending operation is enable + + if (!sendingEnable ) { + //qDebug()<<"com is busy."; + return 3;} + if(uartThread) + { + uartThread->addDataToSend(data); + } + else { + myCom->write(data); + } + //showData(data); + return 1; +} + + +// Stop the currently receiving data operation (don't terminate the thread) +void DevOp::stopReceiving() +{ + // If the Receiving is not alread active OR the uartThread is not initialized + if (!receivingEnable || !uartThread) + return; + // If the SerialPort is currently receiving data, stop + if (uartThread->isRunning()) + { + saveStateReceiveData = false; + uartThread->stopReceiving(); + // wait(); + //uartThread->wait(); + } +} +// Start the receiving thread +// return 1 OK +// return 2 port closed +// return 3 receiving operation disable +uchar DevOp::uartThreadStart() +{ + // check the port if is open + if (!myCom->isOpen()) return 2; + + if (!uartThread) + uartThread = new UartThread(*myCom); + + enableReceiving(); + enableSending(); + + // check if receiving operation is enable + if (!receivingEnable && !uartThread) return 3; + // If the SerialPort receiving thread is not currently active, start it + if (!uartThread->isRunning()) + { + saveStateReceiveData = true; + uartThread->start(); + //qDebug()<<"uartThread start."; + } + return 1; +} + +/******************************* Methods **************************************/ +// Add the data to the Send Queue +void UartThread::addDataToSend(const QByteArray &dataToAdd) +{ + + for (int i=0; i0) + { + recDelay1=10; + data.append(port.read(numBytes)); + //qDebug()<<"rec"<write(temp); +} +void DevOp::readUart1(){ + int numBytes = 0; + static int r_num=0,rlen=0; + unsigned char crc8; + + + numBytes = myCom->bytesAvailable(); + if (numBytes>0) + { + //recDelay1=0; + //mutexReceive.lock(); + data = myCom->read(numBytes); + //mutexReceive.unlock(); + //qDebug()<<"Rec:"<write(QByteArray().append("sos.")); + //rec and process different; + switch(rec_cmd.mode){ + case 0: + // &S14??co + if((data.at(0)=='&' && (data.at(1)=='R' ||data.at(1)=='S' || data.at(1)=='C' )) &&(data.at(2)==LOCADDR) && data.endsWith("o")) { + // qDebug()<30){ + if((rec_r.at(0)=='$' ) &&(rec_r.at(1)=='D' ) && (rec_r.at(2)==LOCADDR) )//data.endsWith("o")) + { + if(rec_cmd.addr==0){ + rec_cmd.addr = rec_r.at(2); + r_dataFromPC.printRowDotNum =dat_r.at(0); // + r_dataFromPC.printColDotNum = (dat_r.at(0)<<24)+(dat_r.at(1)<<16) + (dat_r.at(2)<<8)+(dat_r.at(3)<<0); // + r_dataFromPC.Length = (dat_r.at(0)<<24)+(dat_r.at(1)<<16) + (dat_r.at(2)<<8)+(dat_r.at(3)<<0); // + + //qDebug()<<"len:"< (rec_cmd.len +12) && rec_cmd.len) + rec_cmd.mode=0; + } + else { + rec_cmd.mode=0; + } + + if((data.left(2)=="&C" || data.left(2)=="&R" ||data.left(2)=="&S" )&&(data.at(2)==LOCADDR) && data.endsWith("o")) { + rec_cmd.flag_m= data.at(1); rec_cmd.addr = data.at(2); + rec_r.clear(); + rec_r.append(data); + readCom( rec_cmd.flag_m,rec_r,rec_cmd.addr ); + rec_cmd.mode=0; + } + } + else rec_cmd.mode=0; + + break; + + case 2:// $D1rccccLLLLddd...ddco + dat_r.append(data); + rec_r.append(data); + //qDebug()<(1+r_dataFromPC.printRowDotNum*(1+r_dataFromPC.printColDotNum/8) )) {rec_cmd.mode=0;r_dataFromPC.keyword=0;} + dat_r.clear(); + crc8=0; + } + else if(r_num>11){ + if(rlen){ + dat_r.append(data) ; + rlen=rlen-data.length(); + crc8 = crc8 ^ data.at(0); + } + else { + rec_cmd.mode=0; + if(data.at(0)=='o' && crc8==0 ) + readCom( rec_cmd.flag_m,dat_r,rec_cmd.addr ); + else readCom( rec_cmd.flag_m,QByteArray("!Error"),rec_cmd.addr); + } + } + r_num++; + break; + + case 3: + break; + + case 4: + break; + + default: + break; + } + //recDelay=0; + + } + +} + +void DevOp::sendCom(QString s) +{ + myCom->write(s.toAscii()); +} + +void DevOp::readCom(char mode,QByteArray rec,int addr) +{ // sendData ?? + qDebug() << "read11:"<status.printCmd; + statusToPC.printMode='X';//sysPara->status.printMode; + statusToPC.statWarn=sysPara->status.statWarn; + statusToPC.isPumpValveControledByHand=sysPara->status.isPumpValveControledByHand; + statusToPC.mainInkPumpError=sysPara->status.mainInkPumpError; + statusToPC.selfCheckDone=sysPara->status.selfCheckDone; + statusToPC.reclainTankReachEnd=sysPara->status.reclainTankReachEnd; + statusToPC.beeperOnFlag=sysPara->status.beeperOnFlag; + statusToPC.lostCommuFlag=sysPara->status.lostCommuFlag; + statusToPC.isPrinting=sysPara->status.isPrinting; + statusToPC.reclaimTankBlockedAppending=sysPara->status.reclaimTankBlockedAppending; + statusToPC.selfCheckCnt=sysPara->status.selfCheckCnt; + + statusToPC.currReclaimTankPos=sysPara->status.currReclaimTankPos; + statusToPC.productCnt=sysPara->status.productCnt; //unsigned int productCnt; + //statusToPC.selfCheckCnt=sysPara->status.selfCheckCnt; + //statusToPC.selfCheckCnt=sysPara->status.selfCheckCnt; + //statusToPC.selfCheckCnt=sysPara->status.selfCheckCnt; + + qDebug()<status.currPrintRow; + dataToPC.printColDotNum = sysPara->status.currPrintCol; + //dataToPC.Length = (dataToPC.printRowDotNum* (1+dataToPC.printColDotNum/8))+2; + dataToPC.Length = (dataToPC.printColDotNum* MAX_PRINT_ROW_BYTE_NUM)+2; + dataToPC.dotData = sysPara->status.printDat;//(unsigned char *)calloc(dataToPC.printRowDotNum,MAX_PRINT_ROW_BYTE_NUM); + //memcpy((void *)dataToPC.dotData, , dataToPC.Length-2); + //qDebug()<status.currPrintRow<status.printDat,dataToPC.Length-2); + sendCom((char *) &dataToPC.crc,2); + //sendCom("dfsaffadsf"); + //QString s=""; for(int i=0;istatus.currPrintRow; + dataToPC.printColDotNum = sysPara->status.currPrintCol; + dataToPC.Length = (dataToPC.printColDotNum* MAX_PRINT_ROW_BYTE_NUM)+2; + dataToPC.dotData = sysPara->status.printDat;//(unsigned char *)calloc(dataToPC.printRowDotNum,MAX_PRINT_ROW_BYTE_NUM); + sendCom((char *) &dataToPC,12); + sendCom((char *) &sysPara->status.printDat,dataToPC.Length-2); + sendCom((char *) &dataToPC.crc,2); + //sendCom("dfsaffadsf"); + //QString s=""; for(int i=0;ipara.qrOption.text,s.toAscii(),s.length()); + memcpy( (unsigned char *)sysPara->para.qrOption.text,s.toAscii(),s.length()); + //sprintf(sysPara->para.qrOption.text,s.toAscii(),s.length()); + sysPara->para.qrOption.text[s.length()]='\0'; // 不可缺少的哦 + sysPara->para.qrOption.RecFromHost=1; //RecFromHost + sysPara->para.qrOption.VarNum = (mode=='V'); + //qDebug()<para.qrOption.text)<<"sysPara->para.qrOption.VarNum"<para.qrOption.VarNum; + sendCom("OK");//sendCom(s); + sendCom("\r\n"); + sysPara->saveParaToFile(); + // 设置标志位 1,主程序中根据标志位来进行转换,并刷新显示 + } + else if(mode== 'C' && rec.startsWith("&")&& rec.endsWith("o")){// 写paraCmd 参数的命令 + sendCom(rec); + } + else if(mode== 'D' && rec.startsWith("$")&& rec.endsWith("o")){// 写paraData点阵内容的命令 + //memcpy((unsigned char *)&sysPara->status,recData,FPGA_STATUS_BYTE_NUM); + //memcpy((unsigned char *)&sysPara->status.calandar_and_dat,recData.mid(addr,len),len); + + sendCom(rec); + + } + else { + sendCom(QString().sprintf("addr:%d",LOCADDR)); + } + +} + +// Enable the SerialPort to send data (init the thread) +void DevOp::enableSending() +{ + if (!uartThread) + uartThread = new UartThread1(*myCom); + + if (!sendingEnable) + { + sendingEnable = true; + } +} +// Disable the SerialPort to send data (terminate the thread) +void DevOp::disableSending() +{ + // If the Sending is already active AND there is a sendThread + if (sendingEnable) + { + sendingEnable = false; + } + + if ( !isReceivingEnable() && uartThread) + { + delete uartThread; + uartThread = NULL; + } +} + +bool DevOp::isSendingEnable() const +{ + return sendingEnable; +} + +// Enable the SerialPort to receive data (init the thread) +void DevOp::enableReceiving() +{ + // If the Receiving is not already active AND the receiveThead is not initialized + if (!uartThread) + uartThread = new UartThread1(*myCom); + + if (!receivingEnable) + { + if(uartThread) qDebug()<isOpen()) { return 2;} + // check if sending operation is enable + if (!sendingEnable ) { + //qDebug()<<"com is busy."; + return 3;} + if(uartThread) + { + uartThread->addDataToSend(data); + } + else myCom->write(data); + return 1; +} + + +// Stop the currently receiving data operation (don't terminate the thread) +void DevOp::stopReceiving() +{ + // If the Receiving is not alread active OR the uartThread is not initialized + if (!receivingEnable || !uartThread) + return; + // If the SerialPort is currently receiving data, stop + if (uartThread->isRunning()) + { + saveStateReceiveData = false; + uartThread->stopReceiving(); + // wait(); + //uartThread->wait(); + } +} +// Start the receiving thread +// return 1 OK +// return 2 port closed +// return 3 receiving operation disable +uchar DevOp::uartThreadStart() +{ + // check the port if is open + + if (!myCom->isOpen()) return 2; + + if (!uartThread) + uartThread = new UartThread1(*myCom); + + enableReceiving(); + //qDebug()<<("recOK\n"); + enableSending(); + // check if receiving operation is enable + if (!receivingEnable && !uartThread) return 3; + // If the SerialPort receiving thread is not currently active, start it + if (!uartThread->isRunning()) + { + saveStateReceiveData = true; + + uartThread->start(); + qDebug()<<"uartThread start."; + } + return 1; +} + +/******************************* Methods **************************************/ +// Add the data to the Send Queue +void UartThread1::addDataToSend(const QByteArray &dataToAdd) +{ + + for (int i=0; i0) + { + recDelay1=0; + mutexReceive.lock(); + data = port.read(numBytes); + mutexReceive.unlock(); + //qDebug()<<"Rec:"<30){ + if((rec_r.at(0)=='$' ) &&(rec_r.at(1)=='D' ) && (rec_r.at(2)==LOCADDR) )//data.endsWith("o")) + { + if(rec_cmd.addr==0){ + rec_cmd.addr = rec_r.at(2); + r_dataFromPC.printRowDotNum =dat_r.at(0); // + r_dataFromPC.printColDotNum = (dat_r.at(0)<<24)+(dat_r.at(1)<<16) + (dat_r.at(2)<<8)+(dat_r.at(3)<<0); // + r_dataFromPC.Length = (dat_r.at(0)<<24)+(dat_r.at(1)<<16) + (dat_r.at(2)<<8)+(dat_r.at(3)<<0); // + + //qDebug()<<"len:"< (rec_cmd.len +12) && rec_cmd.len) + rec_cmd.mode=0; + } + else { + rec_cmd.mode=0; + } + + if((data.left(2)=="&C" || data.left(2)=="&R" ||data.left(2)=="&S" )&&(data.at(2)==LOCADDR) && data.endsWith("o")) { + rec_cmd.flag_m= data.at(1); rec_cmd.addr = data.at(2); + rec_r.clear(); + rec_r.append(data); + emit dataReceived( rec_cmd.flag_m,rec_r,rec_cmd.addr ); + rec_cmd.mode=0; + } + } + else rec_cmd.mode=0; + + break; + + case 2:// $D1rccccLLLLddd...ddco + dat_r.append(data); + rec_r.append(data); + //qDebug()<(1+r_dataFromPC.printRowDotNum*(1+r_dataFromPC.printColDotNum/8) )) {rec_cmd.mode=0;r_dataFromPC.keyword=0;} + dat_r.clear(); + crc8=0; + } + else if(r_num>11){ + if(rlen){ + dat_r.append(data) ; + rlen=rlen-data.length(); + crc8 = crc8 ^ data.at(0); + } + else { + rec_cmd.mode=0; + if(data.at(0)=='o' && crc8==0 ) + emit dataReceived( rec_cmd.flag_m,dat_r,rec_cmd.addr ); + else emit dataReceived( rec_cmd.flag_m,QByteArray("!Error"),rec_cmd.addr); + } + } + r_num++; + break; + + case 3: + break; + + case 4: + break; + + default: + break; + } + recDelay=0; + + } + } +} +// 26 52 01 04 3F 3F 63 6F &S14??co +// 24 43 01 04 3F 3F 63 6F $C14??co +#endif +#ifdef __STC_POWER__ +void DevOp::comForPower_init(void) +{ + if(comForPower==NULL) + comForPower = new Posix_QextSerialPort("/dev/ttyO4",QextSerialBase::Polling); + if(comForPower) + { + comForPower ->open(QIODevice::ReadWrite); + + if (!comForPower->isOpen()) + { + qDebug()<<"uart for power is not open!"; + return; + } + comForPower->setBaudRate(BAUD115200); + comForPower->setDataBits(DATA_8); + comForPower->setParity(PAR_NONE); + comForPower->setStopBits(STOP_1); + comForPower->setFlowControl(FLOW_OFF); + comForPower->setTimeout(1);; + } + else + { + qDebug()<<"uart for power not exit!"; + } +} +#endif + +#ifdef __com_485_ + +extern void MySleep(unsigned int msec); +Posix_QextSerialPort* DevOp::comForRFID = NULL; + +void DevOp::comForRFID_init(void) +{ + if(comForRFID==NULL) + comForRFID = new Posix_QextSerialPort("/dev/ttyO1",QextSerialBase::Polling); + if(comForRFID) + { + comForRFID->open(QIODevice::ReadWrite); + + if (!comForRFID->isOpen()) + { + qDebug()<<"uart for RFID is not open!"; + return; + } + comForRFID->setBaudRate(BAUD38400); + comForRFID->setDataBits(DATA_8); + comForRFID->setParity(PAR_EVEN); + comForRFID->setStopBits(STOP_1); + comForRFID->setFlowControl(FLOW_OFF); + comForRFID->setTimeout(1); + } + else + { + qDebug()<<"uart for RFID not exit!"; + } +} + +#if 0 +int DevOp::comReadRFID_data() +{ + // UCHAR Cmd[23] = { 0x01, 0x17, 0xA4, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + // UCHAR revdata[100]; + // Cmd[1] = 0x08; + // Cmd[2] = 0xA3; + // Cmd[4] = 0x06; //读块6 + // CheckSumOut(Cmd, Cmd[1]); + // QByteArray temp; + QByteArray recResponse; + // temp.append((const char*)Cmd,Cmd[1]); + if(comForRFID->isOpen()) + { + //int n = comForRFID->write(temp); + //qDebug()<<"power com send "<bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<isOpen()) + // { + // int n = comForRFID->write(temp); + // //qDebug()<<"power com send "<bytesAvailable(); + // if(n>0) + // { + // recResponse.append(comForRFID->read(n)); + // QString str; + // str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + // qDebug()<status.calandar_and_dat)); + if(sysPara->status.RandomNum>0) + { + if(sysPara->status.RandomNum>32){ + // qDebug()<<"RandomNum:"<status.RandomNum; + return; + } + + len = sysPara->status.RandomNum*8; + + if(len>256)return; + + fpgaRd(READ_RAND_FIFO_ADDR ,(unsigned char *)buf,len); + ss=""; + n=0; + for(i=0;istatus.RandomDigitNum) //12 + ; //0,1,2,3 4,5,6,7,8,9 0 1,2,3,4,5 + else if( k >= 16-sysPara->status.RandomDigitNum) + { + //ss+=QString().sprintf("%02X ",buf[i]); + if(c==0) str.append( ((buf[i]>>4)& 0x0f)|0x30); + else if(c==1) str.append((buf[i]& 0x0f)|0x30); + if(k==15) + { + str.append(" "); + //ss+="\r\n"; + } + } + else ; + n++; + } + + } + QFile f1("/home/plg/Xrand2.txt"); + f1.open(QFile::ReadWrite); + f1.seek(f1.size()); + f1.write(str); + len = f1.size(); + f1.close(); + + if(len>3500000) + { + sysPara->status.RandomBackCnt=10; + ss= "mv /home/plg/Xrand2.txt /home/plg/rand" + QDateTime::currentDateTime().toString("yyMMddhhmmss")+".txt"; + system(ss.toAscii()); + return; + } + } + +} + +void DevOp::RandTxtBakup(char ok) // ok 0:不一定备份,1直接备份 +{ + QFile f1("/home/plg/Xrand2.txt"); + QString str; + str= "mv /home/plg/Xrand2.txt /udisk/rand" + QDateTime::currentDateTime().toString("yyMMddhhmmss")+".txt"; + if(sysPara->status.RandomBackCnt>5){ + system(str.toAscii()); + system("mv /home/plg/rand*.txt /udisk/"); + sysPara->status.RandomBackCnt=0; + } + else + { + //f1.open(QFile::ReadWrite); + int len= f1.size(); + //f1.close(); + if(len>3500000 || ok ) + { + system(str.toAscii()); + system("mv /home/plg/rand*.txt /udisk/"); + } + + } +} +#ifdef __RFID_CARD +typedef unsigned char UCHAR; + +void CheckSumOut(UCHAR *buf, UCHAR len) +{ + UCHAR i; + UCHAR checksum; + checksum = 0; + for (i = 0; i < (len - 1); i++) + { + checksum ^= buf[i]; + } + buf[len - 1] = (UCHAR)~checksum; +} + +bool CheckSumIn(UCHAR *buf, UCHAR len) +{ + UCHAR i; + UCHAR checksum; + checksum = 0; + for (i = 0; i < (len - 1); i++) + { + checksum ^= buf[i]; + } + if (buf[len - 1] == (UCHAR)~checksum) + { + return true; + } + return false; +} + +//字节流转换为十六进制字符串的另一种实现方式 +void Hex2Str(const UCHAR *sSrc, UCHAR *sDest, int nSrcLen) +{ + int i; + char szTmp[3]; + + for (i = 0; i < nSrcLen; i++) + { + sprintf(szTmp, "%02X", (unsigned char)sSrc[i]); + memcpy(&sDest[i * 2], szTmp, 2); + } + sDest[nSrcLen * 2] = '\0'; + return; +} +//十六进制字符串转换为字节流 +void HexStrToByte(const UCHAR* source, UCHAR* dest, int sourceLen) +{ + short i; + unsigned char highByte, lowByte; + + for (i = 0; i < sourceLen; i += 2) + { + highByte = toupper(source[i]); + lowByte = toupper(source[i + 1]); + + if (highByte > 0x39) + highByte -= 0x37; + else + highByte -= 0x30; + + if (lowByte > 0x39) + lowByte -= 0x37; + else + lowByte -= 0x30; + + dest[i / 2] = (highByte << 4) | lowByte; + } + return; +} + +void DevOp::comForRFID_init(void) +{ + if(comForRFID==NULL) + comForRFID = new Posix_QextSerialPort("/dev/ttyO3",QextSerialBase::Polling); + if(comForRFID) + { + comForRFID->open(QIODevice::ReadWrite); + + if (!comForRFID->isOpen()) + { + qDebug()<<"uart for RFID is not open!"; + return; + } + comForRFID->setBaudRate(BAUD9600); + comForRFID->setDataBits(DATA_8); + comForRFID->setParity(PAR_NONE); + comForRFID->setStopBits(STOP_1); + comForRFID->setFlowControl(FLOW_OFF); + comForRFID->setTimeout(1); + } + else + { + qDebug()<<"uart for RFID not exit!"; + } +} + +extern void MySleep(unsigned int msec); + +int DevOp::comReadRFID_data() +{ + UCHAR Cmd[23] = { 0x01, 0x17, 0xA4, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + UCHAR revdata[100]; + Cmd[1] = 0x08; + Cmd[2] = 0xA3; + Cmd[4] = 0x06; //读块6 + CheckSumOut(Cmd, Cmd[1]); + QByteArray temp; + QByteArray recResponse; + temp.append((const char*)Cmd,Cmd[1]); + if(comForRFID->isOpen()) + { + LogInfo::setRunStatusText(tr("readB6Req")); + int n = comForRFID->write(temp); + } + else + { + qDebug()<<"read uart for RFID not open!"; + } + MySleep(200); + int n = comForRFID->bytesAvailable(); + if(n>0) + { + LogInfo::setRunStatusText(tr("readB6com")); + recResponse.append(comForRFID->read(n)); + QString str; + } + memcpy(revdata, recResponse, n); + if ((revdata[0] = 0x01) && ((revdata[1] == 8) || (revdata[1] == 22)) && (revdata[1] == n) && (revdata[2] == 0xA3) && (revdata[3] = 0x20))//判断是否为读数据块返回的数据包 + { + LogInfo::setRunStatusText(tr("readB6suc")); + bool status = CheckSumIn(revdata, revdata[1]); //计算校验和 + if (status) + { + if (revdata[4] == 0x00) //读数据块成功 + { + UCHAR blockdata[16]; + UCHAR temp[33]; + for (int i = 0; i < 16; i++) + { + blockdata[i] = revdata[5 + i]; //复制数据到数组 + } + Hex2Str(&blockdata[0], &temp[0], 16); // 数据块数据转换为字符 + //CardDataRwLock.lockForWrite(); + strRevdata = QString((const char*)temp); + // CardDataRwLock.unlock(); + qDebug() << "读数据块成功,数据块6" << "数据为:" << temp << endl << endl; + return 1; + } + } + } + return 0; +} + +int DevOp::comWriteRFID_data() +{ + UCHAR Cmd[23] = { 0x01, 0x17, 0xA4, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + UCHAR revdata[100]; + Cmd[1] = 0x17; + Cmd[2] = 0x5B; + Cmd[4] = 0x06; //读块6 + + //save current date and time + QDateTime curDateTime = QDateTime::currentDateTime(); + QString str = curDateTime.toString("yy:MM:dd:hh:mm:ss"); + QList list = str.split(":"); + for(int i = 0;i < list.size();i++){ + Cmd[i+6] = list.at(i).toInt(); + LogInfo::setRunStatusText(tr("Cmd[%1]: %2").arg(i+6).arg(Cmd[i+6])); + qDebug()<<"Cmd["<isOpen()) + { + int n = comForRFID->write(temp); + } + else + { + qDebug()<<"read uart for RFID not open!"; + } + MySleep(200); + int n = comForRFID->bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<isOpen()) + { + int n = comForRFID->write(temp); + } + else + { + qDebug()<<"read uart for RFID not open!"; + } + MySleep(200); + int n = comForRFID->bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<isOpen()) + { + int n = comForRFID->write(temp); + } + else + { + qDebug()<<"read uart for RFID not open!"; + } + MySleep(200); + int n = comForRFID->bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<isOpen()) + { + int n = comForRFID->write(temp); + } + else + { + qDebug()<<"read uart for RFID not open!"; + } + MySleep(200); + int n = comForRFID->bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<isOpen()) + { + int n = comForRFID->write(temp); + } + else + { + qDebug()<<"read uart for RFID not open!"; + } + //sleep(200); // 延时200毫秒等待读写器返回数据,延时太小可能无法接收完整的数据包 + MySleep(200); + int n = comForRFID->bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + QString str; + str.sprintf("%d - %d - %d", recResponse.at(0),recResponse.at(1),recResponse.at(2)); + qDebug()<isOpen()) + { + int n = comForRFID->write(temp); + //qDebug()<<"power com send "<bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + QString str; + } + + memcpy(revdata, recResponse, n); + if ((revdata[0] = 0x04) && ((revdata[1] == 8) || (revdata[1] == 22)) && (revdata[1] == n) && (revdata[2] == 0x03) && (revdata[3] = 0x20))//判断是否为读数据块返回的数据包 + { + bool status = CheckSumIn(revdata, revdata[1]); //计算校验和 + if (status) + { + if (revdata[4] == 0x00) //读数据块成功 + { + UCHAR blockdata[16]; + UCHAR temp[33]; + for (int i = 0; i < 16; i++) + { + blockdata[i] = revdata[5 + i]; //复制数据到数组 + } + Hex2Str(&blockdata[0], &temp[0], 16); // 数据块数据转换为字符 +// CardDataRwLock.lockForWrite(); + strRevdata = QString((const char*)temp); +// CardDataRwLock.unlock(); + qDebug() << "读数据块成功,数据块6" << "数据为:" << strRevdata << endl << endl; + return 1; + } + else + { + return 0; + } + } + } + return 0; +} + +int DevOp::queryReadRFID_address(void) +{ + UCHAR Cmd[8] ; + Cmd[0] = 0x02; //命令格式请核对协议手册充值章节 + Cmd[1] = 0x08; + Cmd[2] = 0xB0; //查询读写器地址 + Cmd[3] = 0x00; + Cmd[4] = 0x00; + Cmd[5] = 0x00; + Cmd[6] = 0x00; + Cmd[7] = 0x00; + CheckSumOut(Cmd, Cmd[1]); + QByteArray temp; + QByteArray recResponse; + temp.append((const char*)Cmd,Cmd[1]); + if(comForRFID->isOpen()) + { + int n = comForRFID->write(temp); + } + else + { + qDebug()<<"read uart for RFID not open!"; + } + MySleep(200); + int n = comForRFID->bytesAvailable(); + if(n>0) + { + recResponse.append(comForRFID->read(n)); + return 1; + } + else + { + return 2; + } +} +#endif + +void DevOp::writeDacValue2Fpga_No72NewVoltData(){ + // LogInfo::setRunStatusText(tr("writeDacValue2Fpga_No72NewVoltData")); + qDebug()<<"writeDacValue2Fpga_No72NewVoltData"; + + fpgaWr(0xA600, (unsigned char *)(sysPara->voltePara_25Dots.matchTotalTableDACArray1), (128)); + fpgaWr(0xA680, (unsigned char *)(sysPara->voltePara_25Dots.matchTotalTableDACArray2[0]), (64 * 2*2)); + fpgaWr(0xA780, (unsigned char *)(sysPara->voltePara_25Dots.matchTotalTableDACArray3[0]), (64 * 3*2)); + fpgaWr(0xA900, (unsigned char *)(sysPara->voltePara_25Dots.matchTotalTableDACArray4[0]), (64 * 4*2)); + fpgaWr(0xAB00, (unsigned char *)(sysPara->voltePara_25Dots.matchTotalTableDACArray5[0]), (64 * 5*2)); + fpgaWr(0xB380, (unsigned char *)(sysPara->voltePara_25Dots.matchContinousDACArray), (64 * 2)); + fpgaWr(0xBC00, (unsigned char *)(sysPara->voltePara_25Dots.matchTotalDiffVoltageValue[0]), (64 * 50)); + fpgaWr(0xB400, (unsigned char *)(sysPara->voltePara_25Dots.matchExtraLineDACArray), (64)); + fpgaWr(0xB440, (unsigned char *)(sysPara->voltePara_25Dots.matchFirstOnePointExtraLineDACArray), (64)); + fpgaWr(0xD200, (unsigned char *)(sysPara->voltePara_25Dots.matchAdjustParaDACArray), (8)); //超10个空点巨点补偿 + fpgaWr(0xCD00, (unsigned char *)(sysPara->voltePara_25Dots.matchGiantPointVoltageValue[0]), (64*16)); + fpgaWr(0xB280, (unsigned char *)(sysPara->voltePara_25Dots.matchTotalTableDACArrayFirst1), (64*2)); //一列第一个点是单点 + +} diff --git a/DevOp.h b/DevOp.h new file mode 100644 index 0000000..476f7da --- /dev/null +++ b/DevOp.h @@ -0,0 +1,453 @@ +/* + * DevOp.h + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef DEVOP_H_ +#define DEVOP_H_ + +#define JETV1 1 +#define JETV2 2 +#define JETV3 3 // EP3C10F144 +#define JETV23 4 // V5,V4主板编号均为4; V6没有正式投入使用 +#define JETV7 7 // EP4CE15F144, ARM 335X +#define PRODUCT_VERSION(ver) ((ver>>13) & 0x7) + +class SysPara; + +#include +#include +#include "myinclude.h" +#include +#include +#include +#include +#include +#include + +#ifdef UART2 +#include "posix_qextserialport.h" +#endif +#ifdef UART1 +#include "posix_qextserialport.h" +#endif +#define DisTraceMsg() printf("###############TRACE,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__); +#define DisWarnmsg() printf("~~~~~~~~~~~~~~~WARN,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__); +#define DisErrorMsg() printf("!!!!!!!!!!!!!!!ERROR! ,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__); + +#define PRINT_CTRL_STOP 0 +#define PRINT_CTRL_START 1 +#define PRINT_CTRL_PAUSE 2 +#define PRINT_CTRL_DAC_DISABLE 3 +#define PRINT_CTRL_DAC_ENABLE 4 +#define PRINT_CTRL_STOPSYNCNT 5 + + +#define MAX_FPGA_DAC_VALUE_FOR_NEW ((1<<12)*95/100) //由于硬件原因,当DAC大于一定值后,电压不再变化,所以做一下限制 +#define MAX_FPGA_DAC_VALUE_FOR_V1 (255) //老板子的最大值到256 +#define MAX_FPGA_DAC_VALUE ((PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1)?MAX_FPGA_DAC_VALUE_FOR_V1:MAX_FPGA_DAC_VALUE_FOR_NEW) + +#define MAX_POINT_DISTANCE_ADJUST_VAL (1<<10) //点距微调的最大值 + +#define MAX_MOTOR_RUN_CURRENT 600 +#define MIN_MOTOR_RUN_CURRENT 80 + +#define MAX_RECLAIM_BLOCK_CNT 5 //500ms + +#define MAX_RELEASE_VALVE_DELAY_CNT 4 +/*所有警告都是高电平警告*/ +#define WARN_STATUS_INK_SWINT (1<<7) /*墨线开头,来自喷头,必须开的时候才能打印,关的时候为1,开的时候为0*/ +#define WARN_STATUS_POWER_MON (1<<6) //高压报警 +#define WARN_STATUS_RECYCLE_FAULT (1<<5) //高电平表示有故障 +#define WARN_STATUS_INK_WARN (1<<4) +#define WARN_STATUS_SOLV_WARN (1<<3) +#define WARN_STATUS_SUMP_WARN (1<<2) //墨水渗漏 +#define WARN_STATUS_HDINT (1<<1) /*喷头盖,盖上为0,否则为1,必须盖上才能打印,电磁铁有正反面*/ +#define WARN_STATUS_VISCOTITY_MEASURE_READY (1<<0) // 球已经到上位等灯 + + +#define FPGA_SYS_HZ 100000000 + +#define MAX_WR_MEM_SIZE (1<<16) //写空间最大地址范围 +#define MAX_WR_MEM_SIZE_MASK (MAX_WR_MEM_SIZE - 1) +#define MAX_RD_MEM_SIZE (1<<9) //读空间最大地址范围 +#define MAX_RD_MEM_SIZE_MASK (MAX_RD_MEM_SIZE - 1) + +/* am335x core board control pwm output */ +#define VISCO_PUMP_REQUEST "echo 1 > /sys/class/pwm/ecap.2/request" +#define VISCO_PUMP_RELEASE "echo 0 > /sys/class/pwm/ecap.2/request" +#define VISCO_PUMP_RUN "echo 1 > /sys/class/pwm/ecap.2/run" +#define VISCO_PUMP_STOP "echo 0 > /sys/class/pwm/ecap.2/run" +#define VISCO_PUMP_50Hz "echo 50 > /sys/class/pwm/ecap.2/period_freq" +#define VISCO_PUMP_50P "echo 50 > /sys/class/pwm/ecap.2/duty_percent" +#define VISCO_PUMP_HIGH "echo 1 > /sys/class/pwm/ecap.2/polarity" +#define VISCO_PUMP_LOW "echo 0 > /sys/class/pwm/ecap.2/polarity" + +#define SUCTION_PUMP_REQUEST "echo 1 > /sys/class/pwm/ehrpwm.0:1/request" +#define SUCTION_PUMP_RELEASE "echo 0 > /sys/class/pwm/ehrpwm.0:1/request" +#define SUCTION_PUMP_RUN "echo 1 > /sys/class/pwm/ehrpwm.0:1/run" +#define SUCTION_PUMP_STOP "echo 0 > /sys/class/pwm/ehrpwm.0:1/run" +#define SUCTION_PUMP_HIGH "echo 1 > /sys/class/pwm/ehrpwm.0:1/polarity" +#define SUCTION_PUMP_LOW "echo 0 > /sys/class/pwm/ehrpwm.0:1/polarity" +#define SUCTION_PUMP_90P "echo 90 > /sys/class/pwm/ehrpwm.0:1/duty_percent" +#define SUCTION_PUMP_12000Hz "echo 12000 > /sys/class/pwm/ehrpwm.0:1/period_freq" + +#ifdef __ADC_INPUT__ +#define BOART_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage4_raw" +#define INK_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage5_raw" +#define REVERSE_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage6_raw" +#endif + +#ifdef UART2 +class UartThread; +typedef struct { + char mode; + int addr; + int len; + char flag_m; + QByteArray Buf; +}rec_cmd_t; + +#endif + +#ifdef UART1 +class UartThread1; +typedef struct { + char mode; + int addr; + int len; + char flag_m; + QByteArray Buf; +}rec_cmd_t1; + +#endif + +/* + * 请不要直接初始化此函数,如果需要,请通过SysPara的devOP来访问此类 + * */ +class DevOp : public QObject +{ + Q_OBJECT +public : + DevOp(SysPara * sysPara); + ~DevOp(); + + void set_totalSynPulseNum(bool wren);// 设置可变长度 + void TTYS0ToConsole(); + void WriteMoterPump(void); + void controlReleaseValve(bool openFlag); + void controlMixValve(bool openFlag); + void controlInkValve(bool openFlag); //控制墨线,即供墨阀 + void controlCycleValve(bool openFlag); + void controlCompressPump(bool openFlag); + void controlViscosityPump(bool openFlag); + void controlMainInkPump(bool openFlag); + void controlReclaimPump(bool openFlag,bool fullSpeed); + void controlReclaimPump2(); + void controlInkValvePWM(bool openFlag); + void controlInkValvePWM2(); + void controlHeater(bool openFlag); + void controlBeeper(bool openFlag); + + void controlReclaimTankOpen(bool enableFlag); + void controlReclaimTankClose(bool enableFlag); + + void powerOff(void); + + bool isReleaseValveOpen(); + bool isMixValveOpen(); + bool isInkValveOpen(); + bool isInkValveOpen1(); + bool isCycleValveOpen(); + bool isCompressPumpOpen(); + bool isViscosityPumpOpen(); + bool isMainInkPumpOpen(); + bool isReclaimPumpOpen(); + + bool isReclaimTankOpenEnable(); + bool isReclaimTankCloseEnable(); + bool isBeeperEnable(); + bool isHearterEnable(); + + int writeFpgaPrintPara(bool ignoreWarn = false); + void readFgaStatus(void); + void writeDacValue2Fpga(); + + void printCtrl(int cmd); + void ReadCnt1GroupStatus(void); + void writeCnt1GroupSetting(bool bCntByGroupEnable); + void writeFpgaCalandar(bool Enable); + void writeFpgaVariCtrl(); + void readCalandarDat(); + void resumeFault(); + void highVoltageCtrl(int val); + void maxHighVoltageDACCtrl(int val); + void setPhaseByHand(int val); + void readPhaseDetectHighTm(); + void setPhaseDetectVoltageDutyCycle(int duty); + void setBlickLightPeriod(int value); + void setOscillatorVoltage(int value); + void setDivideRatio(int value); + void setLastLineEndPointFixedValue(int value); +// void checkAuthorization(QString str); + + void mainInkCtrl(); + void pumpValveCtrl(int viscosityAdjustByTemp=0); + void clearProductCnt(unsigned int mode); + unsigned readFpgaVersionNum(void); + void fpgaWr(int addr,unsigned char*dat,int len); + void fpgaRd(int addr,unsigned char*dat,int len); + void fpgaWrD(int addr,unsigned int dat,int len); + void fpgaResetWarning(char mode); + bool fpgaDevOpenFlag; + + unsigned char memWrMap[MAX_WR_MEM_SIZE]; + unsigned char memRdMap[MAX_RD_MEM_SIZE]; + unsigned char color_flag; + void controlRedLight(bool openFlag); + void controlGreenLight(bool openFlag); + void controlYellowLight(bool openFlag); + void controlFan1(bool openFlag); + void controlFan2(bool openFlag); + + bool isGreenLightEnable(); + bool isYellowLightEnable(); + bool isRedLightEnable(); + void readbuilDat(); + void readPrintDataXor(); + void readSyncCounterAtZero(); + void printCtrl2(int cmd); + void ReadSomeDataForLostPrint(void); + +#ifdef __STC_POWER__ + int Heartbeat(char bPowerOn); + int setWakeUpTimer(char wakeUpTime_day); + int getPowerSource(void); + Posix_QextSerialPort *comForPower; + void comForPower_init(); +#endif +#ifdef __RFID_CARD + Posix_QextSerialPort *comForRFID; + void comForRFID_init(); + int comReadRFID_data(); + int comWriteRFID_data(); + int setRFIDCarKey(void); + int setRFIDReaderKey(int); + int setRFIDReaderOriginalKey(void); + int setRFIDReaderWorkMode(void); + int receiveReadRFID_data(void); + int queryReadRFID_address(void); + QString strRevdata; + bool noticeICReaderError; + bool setICReaderModeFlag; + uint checkCardIntervalTime; + QReadWriteLock CardDataRwLock; +#endif + +#ifdef __ADC_INPUT__ + qint8 GetTemp(QString ainFile, quint8 *pTemp); +#endif + void Read_RanddomFromFpga(); // 读FPGARANDFIFO + void RandTxtBakup(char ok); + // 上海外接屏功能 + int BigDisp(unsigned char Module[], unsigned char Wirediameter[]); + int RecDim();//unsigned char buf[], unsigned char Dim[]); + int SmallDisp(unsigned char Module[], unsigned char Wirediameter[]); + void DatToDisp(char FileName[], bool big); + void DatToDisp2(); + void showData(QByteArray dat); + void uart2Init(); + void writeDacValue2Fpga_No72NewVoltData(); + +#ifdef UART2 + Posix_QextSerialPort *myCom; + // MySerialPort * myserialport; + QByteArray recData; + QQueue recQueue; + int recLen; + void stopReceiving(); + bool isReceivingEnable() const; + void disableReceiving(); + void enableReceiving(); + + uchar sendData(const QByteArray &data); + + void stopSending(); + bool isSendingEnable() const; + void disableSending(); + void enableSending(); + uchar uartThreadStart(); + + //void printCtrl2(int cmd); + int recUart2(); + +public slots: + void readCom(char mode,QByteArray recData,int addr); + void sendCom(QString s); + void sendCom(char *buf, int len); + +signals: + void dataReceived(char,const QByteArray &dataReceived,int); +#endif + +#ifdef UART1 + Posix_QextSerialPort *myCom1; + // MySerialPort * myserialport; + QByteArray recData1; + QQueue recQueue1; + int recLen1; + void stopReceiving(); + bool isReceivingEnable() const; + void disableReceiving(); + void enableReceiving(); + + uchar sendData(const QByteArray &data); + + void stopSending(); + bool isSendingEnable() const; + void disableSending(); + void enableSending(); + uchar uartThreadStart(); + //void printCtrl2(int cmd); + //void TTYS0ToConsole(); + QByteArray data,dat_r,rec_r; + QByteArray byteArray; + rec_cmd_t1 rec_cmd; + +public slots: + void readCom(char mode,QByteArray recData,int addr); + void sendCom(QString s); + void sendCom(char *buf, int len); + void readUart1(); +signals: + void dataReceived(char,const QByteArray &dataReceived,int); +#endif + +private: + int WdgttyUsb0Cnt; + bool releaseValveOpenFlag; + bool mixValveFlag; + bool inkValveOpenFlag; + bool inkValveOpenFlag1; + bool cycleValveOpenFlag; + bool compressPumpOpenFlag; + bool viscosityPumpOpenFlag; + bool mainInkPumpOpenFlag; + bool reclaimPumpOpenFlag; + + bool reclaimTankOpenEnableFlag; + bool reclaimTankCloseEnableFlag; + bool beeperOnFlag; + + bool RedLightOnFlag; + bool GreenLightOnFlag; + bool YellowLightOnFlag; + + bool heaterOnFlag; + int com2; + int pwm_sp; + int pwm_fd; + int Interrupt_fd; + int iocontrl; + int DAdataout; +int pwm_ink; + int adc_fd; +#ifdef __VX_OSC_VOL__ + qint8 OscillatorVoltage[100];//VX 电路不一样,所以需要重新调整 +#endif + SysPara *sysPara; + + + unsigned int fpgaRdD(int addr,int len); + +// 0xA451--- 为什么ARM的顺序相反呢? + typedef struct { + unsigned int varDigitalNum:4; // 数字的个数 + unsigned int charRamBaseAddr:12; // 基址 + unsigned int colOffset:16; // 列偏移 + unsigned int horizonWidth:9;//字模宽度 + unsigned int verticalOffset:6; // 行偏移 + unsigned int charRowNum:6; // 每个字符占行个数 + unsigned int charColNum:6; // 每个字符占列个数 + unsigned int varTypeSel:4; + unsigned int dummy:1; + }reg_var_print_ctrl_t; + +#ifdef UART2 + UartThread *uartThread; + bool sendingEnable; + bool receivingEnable; + // Variables to restore the previous state to a reopening of the SerialPort + //bool closeCalled; + //bool saveStateSendingEnable; + //bool saveStateReceivingEnable; + bool saveStateReceiveData; +#endif + + +#ifdef UART1 + UartThread1 *uartThread; + bool sendingEnable; + bool receivingEnable; + // Variables to restore the previous state to a reopening of the SerialPort + //bool closeCalled; + //bool saveStateSendingEnable; + //bool saveStateReceivingEnable; + bool saveStateReceiveData; +#endif + +}; + + +#ifdef UART2 +class UartThread : public QThread +{ + Q_OBJECT +public: + UartThread(Posix_QextSerialPort &adrPort); + ~UartThread(); + void stopReceiving(); + QQueue dataToSend; + QMutex mutexSend; + void stopSending(); + void addDataToSend(const QByteArray &dataToAdd); +protected: + void run(); +signals: + void dataReceived(char,const QByteArray &dataReceived,int); +private : + Posix_QextSerialPort &port; + QMutex mutexReceive; + bool stopped; + rec_cmd_t rec_cmd; +}; +#endif +#ifdef UART1 +class UartThread1 : public QThread +{ + Q_OBJECT +public: + UartThread1(Posix_QextSerialPort &adrPort); + ~UartThread1(); + void stopReceiving(); + QQueue dataToSend; + QMutex mutexSend; + void stopSending(); + void addDataToSend(const QByteArray &dataToAdd); +protected: + void run(); +signals: + void dataReceived(char,const QByteArray &dataReceived,int); +private : + Posix_QextSerialPort &port; + QMutex mutexReceive; + bool stopped; + rec_cmd_t1 rec_cmd; +}; +#endif +#endif /* DEVOP_H_ */ diff --git a/DialogAuthorization.cpp b/DialogAuthorization.cpp new file mode 100644 index 0000000..4a80065 --- /dev/null +++ b/DialogAuthorization.cpp @@ -0,0 +1,28 @@ +#include "DialogAuthorization.h" +#include "ui_dialogauthorization.h" + +DialogAuthorization::DialogAuthorization(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogAuthorization) +{ + ui->setupUi(this); + this->setWindowTitle(tr("输入密码")); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + ui->lineEditAuth->setEchoMode(QLineEdit::Password); // 密码不回显 + +} + +DialogAuthorization::~DialogAuthorization() +{ + delete ui; +} + + +QString DialogAuthorization::getAuth(){ + return ui->lineEditAuth->text(); +} + +void DialogAuthorization::clearAuth(){ + ui->lineEditAuth->setText(tr("")); + +} diff --git a/DialogAuthorization.h b/DialogAuthorization.h new file mode 100644 index 0000000..8185651 --- /dev/null +++ b/DialogAuthorization.h @@ -0,0 +1,25 @@ +#ifndef DIALOGAUTHORIZATION_H +#define DIALOGAUTHORIZATION_H + +#include + +namespace Ui { +class DialogAuthorization; +} + +class DialogAuthorization : public QDialog +{ + Q_OBJECT + +public: + explicit DialogAuthorization(QWidget *parent = 0); + ~DialogAuthorization(); + + QString getAuth(); + void clearAuth(); +private: + Ui::DialogAuthorization *ui; + //QTimer time1; +}; + +#endif // DIALOGAUTHORIZATION_H diff --git a/DialogAuthorizationPrint.cpp b/DialogAuthorizationPrint.cpp new file mode 100644 index 0000000..73f79c3 --- /dev/null +++ b/DialogAuthorizationPrint.cpp @@ -0,0 +1,28 @@ +#include "DialogAuthorizationPrint.h" +#include "ui_dialogAuthorizationPrint.h" + +DialogAuthorizationPrint::DialogAuthorizationPrint(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogAuthorizationPrint) +{ + ui->setupUi(this); + this->setWindowTitle(tr("请输入打印密码")); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + ui->lineEditAuth->setEchoMode(QLineEdit::Password); // 密码不回显 + +} + +DialogAuthorizationPrint::~DialogAuthorizationPrint() +{ + delete ui; +} + + +QString DialogAuthorizationPrint::getAuth(){ + return ui->lineEditAuth->text(); +} + +void DialogAuthorizationPrint::clearAuth(){ + ui->lineEditAuth->setText(tr("")); + +} diff --git a/DialogAuthorizationPrint.h b/DialogAuthorizationPrint.h new file mode 100644 index 0000000..3205746 --- /dev/null +++ b/DialogAuthorizationPrint.h @@ -0,0 +1,25 @@ +#ifndef DIALOGAUTHORIZATIONPRINT_H +#define DIALOGAUTHORIZATIONPRINT_H + +#include + +namespace Ui { +class DialogAuthorizationPrint; +} + +class DialogAuthorizationPrint : public QDialog +{ + Q_OBJECT + +public: + explicit DialogAuthorizationPrint(QWidget *parent = 0); + ~DialogAuthorizationPrint(); + + QString getAuth(); + void clearAuth(); +private: + Ui::DialogAuthorizationPrint *ui; + //QTimer time1; +}; + +#endif // DIALOGAUTHORIZATIONPRINT_H diff --git a/DialogFileOperation.cpp b/DialogFileOperation.cpp new file mode 100644 index 0000000..cab4b8c --- /dev/null +++ b/DialogFileOperation.cpp @@ -0,0 +1,341 @@ +#include "DialogFileOperation.h" +#include "ui_dialogfileoperation.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include"HtmlDelegate.h" +#include"myinclude.h" + +DialogFileOperation::DialogFileOperation(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogFileOperation) +{ + ui->setupUi(this); + this->setWindowTitle(tr("文件操作")); + ui->textEditView->setReadOnly(true); + ui->textEditView->setLineWrapMode(QTextEdit::NoWrap); + ui->textEditView->document()->setDocumentMargin(0); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + EditMode=4; +} + +void DialogFileOperation::refreshListView(int mode){ + + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; + QDir dir(dirPath); + QStringList filters; + EditMode = mode; + if(mode==TXTFILE) filters << "*.html" << "*.txt" << "*.TXT" << "*.jpeg" << "*.gif" << "*.jpg" << "*.bmp"<< "*.BMP"<< "*.bin"; // txtmode +// else if(mode==PICFILE) filters << "*.png";// <<"*.jpg" ; // picmode + else if(mode==PICFILE) filters << "*.png" << "*.jpeg" << "*.gif" << "*.jpg" << "*.bmp"<< "*.BMP"; + else if(mode==SCENE) filters << "*.xml"; + else filters << "*.html" << "*.bmp" << "*.BMP"<<"*.jpg"<<"*.gif"; + dir.setNameFilters(filters); + dir.setFilter(QDir::Files); +#ifndef EnableArabic + QStringListModel *model = new QStringListModel(dir.entryList()); +#else + QStringList entries=dir.entryList(); + QStandardItemModel *model = new QStandardItemModel(); + for(int i=0;i%1%2").arg(subname).arg(subsuffix2); + QStandardItem *item2 = new QStandardItem(stringhtml); + model->appendRow(item2); + } + }else{ + model->appendRow(item1); + } + } + } + ui->listViewFile->setItemDelegate(new HtmlDelegate); +#endif + + ui->listViewFile->setEditTriggers(QAbstractItemView::NoEditTriggers); + ui->listViewFile->setModel(model); //useList是个QListView + int count = ui->listViewFile->model()->rowCount(); + if(count){ + QModelIndex index = ui->listViewFile->model()->index(0 , 0); + ui->listViewFile->setCurrentIndex(index); + on_listViewFile_entered(index); + } +} + + +DialogFileOperation::~DialogFileOperation() +{ + delete ui; +} + +void DialogFileOperation::on_listViewFile_entered(const QModelIndex &index) +{ +#ifdef EnableArabic + QString fileName=index.data().toString(); + if(fileName.endsWith("")){ + QTextDocument doc; + doc.setHtml(fileName); + fileName= doc.toPlainText(); + int position = fileName.lastIndexOf("."); + fileName.insert(position,".a"); + } +#endif + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; +#ifndef EnableArabic + QString filePath = dirPath + index.data().toString(); +#else + QString filePath = dirPath + fileName; +#endif + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") || + filePath.endsWith(".png") || filePath.endsWith(".bmp")|| filePath.endsWith(".BMP")|| filePath.endsWith(".nda")){ + ui->textEditView->clear(); + ui->textEditView->setHtml(QString("").arg(filePath)); + } + else if(filePath.endsWith(".xml")) + { + emit createSceneImage(filePath); + ui->textEditView->setHtml(QString("").arg("./printSceneView.png")); + } + else { + QFile file(filePath); + if (!file.open(QFile::ReadOnly)) + return ; + if (filePath.endsWith(".txt") || filePath.endsWith(".TXT")) + { + qint64 size = file.size(); + if(size/1024 > 10) + { + return; + } + } + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + if (Qt::mightBeRichText(str)) { + if(!ui->radioButtonLocal->isChecked()) + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //必须替换相应的路径 + ui->textEditView->setHtml(str); + } else { + str = QString::fromLocal8Bit(data); + ui->textEditView->setPlainText(str); + } + } +} +void DialogFileOperation::on_listViewFile_clicked(const QModelIndex &index) +{ + on_listViewFile_entered(index); +} + +void DialogFileOperation::on_pushButtonNext_pressed() +{ + QModelIndex currIndex = ui->listViewFile->currentIndex(); + int count = ui->listViewFile->model()->rowCount(); + if(count){ + QModelIndex index = ui->listViewFile->model()->index((currIndex.row() + 1)%count, 0); + ui->listViewFile->setCurrentIndex(index); + on_listViewFile_entered(index); + } +} + + +void DialogFileOperation::on_pushButtonLast_pressed() +{ + QModelIndex currIndex = ui->listViewFile->currentIndex(); + int count = ui->listViewFile->model()->rowCount(); + if(count){ + QModelIndex index = ui->listViewFile->model()->index(currIndex.row() == 0?(count - 1):(currIndex.row() - 1), 0); + ui->listViewFile->setCurrentIndex(index); + on_listViewFile_entered(index); + } +} + +void DialogFileOperation::on_pushButtonExit_pressed() +{ + hide(); +} + +void DialogFileOperation::on_pushButtonDelFile_pressed() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除当前文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + QModelIndex index = ui->listViewFile->currentIndex(); + int currRow = index.row(); + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; +#ifndef EnableArabic + QString filePath = dirPath + index.data().toString(); +#else + QString fileName=index.data().toString(); + if(fileName.endsWith("")){ + QTextDocument doc; + doc.setHtml(fileName); + fileName= doc.toPlainText(); + int position = fileName.lastIndexOf("."); + fileName.insert(position,".a"); + } + QString filePath=dirPath+fileName; +#endif + QFile file(filePath); + if(!QFileInfo(filePath).baseName().startsWith("UP")){ + if(file.exists())file.remove(); + file.setFileName(PARA_ROOT_DIR + QFileInfo(filePath).baseName()+".dpn" ); + //file.setFileName( PARA_ROOT_DIR + QFileInfo(filePath).baseName()+".dpn" ); + if(file.exists())file.remove(); + } + + //Public::resetPara(); // 20140923 这个BUG导致系统参数被恢复 + refreshListView(EditMode); + int count = ui->listViewFile->model()->rowCount(); + if(count){ + index = ui->listViewFile->model()->index((currRow > (count - 1))?(count - 1):currRow , 0); + ui->listViewFile->setCurrentIndex(index); + on_listViewFile_entered(index); + } + } + +} +void DialogFileOperation::on_pushButtonDelAll_pressed() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除所有文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; + // 删除所有文件的方法要改进 + + system((char *)((QString("mkdir %1").arg(TESTDIR)).toAscii().data())); + system((char *)((QString("cp %1/UP* %2/. ").arg(DOC_ROOT_DIR).arg(TESTDIR)).toAscii().data())); //先备份UP* + + system((char *)((QString("rm %1/*.*").arg(dirPath)).toAscii().data()));// 删除所有打印文件 + + system((char *)((QString("rm %1*.ini").arg(PARA_ROOT_DIR)).toAscii().data())); // 删除所有参数文件 + system((char *)((QString("rm %1*.dpn").arg(PARA_ROOT_DIR)).toAscii().data())); + + system((char *)((QString("cp %1/UP.* %1/UP1.* %2/. ").arg(TESTDIR).arg(DOC_ROOT_DIR)).toAscii().data())); + //system((char *)((QString("cp %1* %2/. ").arg(TESTDIR).arg(PARA_ROOT_DIR)).toAscii().data())); + refreshListView(EditMode); + } +} + +void DialogFileOperation::on_pushButtonImport_pressed() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("提示"), + tr("是否确认从U盘导入所有文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + system((char *)((tr("mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/").arg(UDISK_DOC_ROOT_DIR).arg(PARA_ROOT_DIR)).toAscii().data()));//把参数文件移动到参数目录下 + system((char *)((tr("cp %1/* %2/").arg(UDISK_DOC_ROOT_DIR).arg(DOC_ROOT_DIR)).toAscii().data())); + refreshListView(EditMode); + QMessageBox::information(this, tr("提示"), + tr("成功从U盘导入?")); + } +} + +void DialogFileOperation::on_pushButtonExport_pressed() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("提示"), + tr("是否确认将所有文件导出到U盘?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; + QDir dir(UDISK_DOC_ROOT_DIR); + if(!dir.exists()){ + system((char *)((QString("mkdir -p %1").arg(UDISK_DOC_ROOT_DIR)).toAscii().data())); + } +// QDir dirCONF(UDISK_CONF_ROOT_DIR); +// if(!dirCONF.exists()){ +// system((char *)((QString("mkdir -p %1").arg(UDISK_CONF_ROOT_DIR)).toAscii().data())); +// } + system((char *)((QString("cp %1/* %2/").arg(DOC_ROOT_DIR).arg(UDISK_DOC_ROOT_DIR)).toAscii().data())); +// system((char *)((QString("cp %1/* %2/").arg("/home/plg/conf/").arg(UDISK_CONF_ROOT_DIR)).toAscii().data())); + refreshListView(EditMode); + QMessageBox::information(this, tr("提示"), + tr("成功导出到U盘?")); + } +} + +void DialogFileOperation::on_pushButtonInsert_clicked() +{ + QModelIndex index = ui->listViewFile->currentIndex(); + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; +#ifndef EnableArabic + QString filePath = dirPath + index.data().toString(); +#else + QString fileName=index.data().toString(); + if(fileName.endsWith("")){ + QTextDocument doc; + doc.setHtml(fileName); + fileName= doc.toPlainText(); + int position = fileName.lastIndexOf("."); + fileName.insert(position,".a"); + } + QString filePath = dirPath + fileName; +#endif + emit openFile(filePath,true); + hide(); +} + +void DialogFileOperation::on_pushButtonOpen_clicked() +{ + QModelIndex index = ui->listViewFile->currentIndex(); + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; +#ifndef EnableArabic + QString filePath = dirPath + index.data().toString(); +#else + QString fileName=index.data().toString(); + if(fileName.endsWith("")){ + QTextDocument doc; + doc.setHtml(fileName); + fileName= doc.toPlainText(); + int position = fileName.lastIndexOf("."); + fileName.insert(position,".a"); + } + QString filePath = dirPath + fileName; +#endif + emit openFile(filePath,false); + hide(); +} + +void DialogFileOperation::on_radioButtonLocal_released() +{ + refreshListView(EditMode); +} + +void DialogFileOperation::on_radioButtonUdisk_released() +{ + + QDir dir(UDISK_DOC_ROOT_DIR); + if(!dir.exists()){ + dir.mkdir("/udisk/doc"); + QMessageBox::warning(0,tr("警告"),tr("U盘未插入或U盘根目录下的doc文件夹不存在!")); + } + refreshListView(EditMode); +} + +void DialogFileOperation::modbus_openfile(QString filename) +{ + emit openFile(filename,true); +} diff --git a/DialogFileOperation.h b/DialogFileOperation.h new file mode 100644 index 0000000..1ab92ce --- /dev/null +++ b/DialogFileOperation.h @@ -0,0 +1,68 @@ +#ifndef DIALOGFILEOPERATION_H +#define DIALOGFILEOPERATION_H + +#include +#include "DialogFileOperation.h" +#include +namespace Ui { +class DialogFileOperation; +} + +class DialogFileOperation : public QDialog +{ + Q_OBJECT + +public: + explicit DialogFileOperation(QWidget *parent = 0); + ~DialogFileOperation(); + void refreshListView(int mode); + void modbus_openfile(QString filename); + int EditMode; +private slots: + + + void on_pushButtonNext_pressed(); + + void on_pushButtonLast_pressed(); + + void on_pushButtonExit_pressed(); + + void on_pushButtonDelFile_pressed(); + + void on_pushButtonDelAll_pressed(); + + void on_pushButtonImport_pressed(); + + void on_pushButtonExport_pressed(); + + void on_pushButtonInsert_clicked(); + + void on_pushButtonOpen_clicked(); + + void on_radioButtonLocal_released(); + + void on_radioButtonUdisk_released(); + + + + void on_listViewFile_entered(const QModelIndex &index); + + void on_listViewFile_clicked(const QModelIndex &index); + +Q_SIGNALS: + void openFile(QString filePath,bool insertFlag); + void createSceneImage(QString filePath); + +private: + Ui::DialogFileOperation *ui; +}; + +#endif // DIALOGFILEOPERATION_H + + + + + + + + diff --git a/DialogFontSize.cpp b/DialogFontSize.cpp new file mode 100644 index 0000000..b71a69c --- /dev/null +++ b/DialogFontSize.cpp @@ -0,0 +1,346 @@ +#include "DialogFontSize.h" +#include "ui_dialogfontsize.h" +#include +#include +#include +#include +#include +#include "myinclude.h" + +DialogFontSize::DialogFontSize(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogFontSize) +{ + ui->setupUi(this); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + this->setWindowTitle(tr("选择字体大小")); + //connect(ui->fontComboBox,SIGNAL(currentIndexChanged(QString)),SLOT(ChangeFont(QString))); + font.setFamily("wenquanyi"); + font.setPixelSize(12); + ui->lineEdit->setFont(font); + connect(ui->radioButton7HoriL,SIGNAL(clicked(bool)),this,SLOT(Button7HoriL(bool))); + connect(ui->radioButton7HoriR,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + connect(ui->radioButton7Bangla,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + connect(ui->radioButton7PointNum,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + + connect(ui->radioButton9HoriL,SIGNAL(clicked(bool)),this,SLOT(Button7HoriL(bool))); + connect(ui->radioButton9HoriR,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + + connect(ui->radioButton5Point,SIGNAL(clicked(bool)),this,SLOT(Button7HoriL(bool))); + connect(ui->radioButton7Point,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + + connect(ui->radioButton9Point,SIGNAL(clicked(bool)),this,SLOT(Button7HoriL(bool))); + connect(ui->radioButton12Point,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + + connect(ui->radioButton16Point,SIGNAL(clicked(bool)),this,SLOT(Button7HoriL(bool))); + connect(ui->radioButton24Point,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + connect(ui->radioButton21PointNum,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + connect(ui->radioButton32Point,SIGNAL(clicked(bool)),this,SLOT(Button7HoriR(bool))); + +#ifdef VNLGXX + ui->checkBoxBold->hide(); + ui->radioButton5Point->hide(); + ui->radioButton7Point->hide(); + ui->radioButton9Point->hide(); + ui->radioButton12Point->hide(); + ui->radioButton16Point->hide(); + ui->radioButton24Point->hide(); +#else +// ui->checkBoxBold->hide(); +// ui->labelFont->hide(); +// ui->fontComboBox->hide(); +// ui->comboBoxFontSize->hide(); +#endif + GetFileInfo(); + +#ifdef EnableBangla + ui->radioButton7Bangla->setEnabled(1); +#else + ui->radioButton7Bangla->setEnabled(0); +#endif + +} + +DialogFontSize::~DialogFontSize() +{ + delete ui; +} + +void DialogFontSize::Button7HoriL(bool ok){ + int pixsize; + getValue(&pixsize); + + + //qDebug()<lineEdit->font().family()<lineEdit->font().pixelSize(); + + +} + +void DialogFontSize::Button7HoriR(bool ok){ + int pixsize; + getValue(&pixsize); + + //qDebug()<lineEdit->font().family()<lineEdit->font().pixelSize(); +} + +void DialogFontSize::ChangeFont(QString fontFamily){ + + font.setFamily(fontFamily); + + //font.setPixelSize(pixelSize); + ui->lineEdit->setFont(font); // 设置预览字体 + +// if(fontFamily=="wenquanyi" ){ +// ui->comboBoxFontSize->clear(); +// ui->comboBoxFontSize->addItem("12"); +// ui->comboBoxFontSize->addItem("16"); +// //ui->comboBoxFontSize->addItem("12"); + + +// } +// else if(fontFamily=="biyang"){ +// ui->comboBoxFontSize->clear(); +// ui->comboBoxFontSize->addItem("5"); +// ui->comboBoxFontSize->addItem("7"); +// ui->comboBoxFontSize->addItem("9"); +// //ui->comboBoxFontSize->addItem("10"); + +// } +// else { +// ui->comboBoxFontSize->clear(); +// ui->comboBoxFontSize->addItem("14"); +// ui->comboBoxFontSize->addItem("16"); +// ui->comboBoxFontSize->addItem("18"); +// ui->comboBoxFontSize->addItem("20"); +// ui->comboBoxFontSize->addItem("24"); +// ui->comboBoxFontSize->addItem("28"); +// ui->comboBoxFontSize->addItem("32"); +// ui->comboBoxFontSize->addItem("36"); +// } + +} + +void DialogFontSize::GetFileInfo(){ + // /usr/local/Trolltech/QtEmbedded-4.6.3/include/QtCore/QObject:1: from /usr/local/Trolltech/QtEmbedded-4.6.3/include/QtCore/QObject:1, + QString fileName; + QString fileDate=""; + QString fontPath= +#ifdef DEBUG_CNT + "/usr/local/Trolltech/QtEmbedded-4.6.3/lib/fonts/" +#else + "/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/" +#endif + ; + QDir FontsFile("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/"); + if(FontsFile.exists("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/"))//2451 + { + fontPath = "/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/"; + } + if(FontsFile.exists("/usr/lib/fonts/"))//am335x + { + fontPath = "/usr/lib/fonts/"; + } + fileName.sprintf("_%d_50.qpf2",font.pixelSize()); + + + QFileInfo fileInfo; + + if(font.family()=="SerifL") + fileName = fontPath +"serifl_7_50.qpf2"; + else if(font.family()=="SerifR") + fileName = fontPath +"serifr_7_50.qpf2"; + else if(font.family()=="SerifL9") + fileName = fontPath +"serifl_9_50.qpf2"; + else if(font.family()=="SerifR9") + fileName = fontPath +"serifr_9_50.qpf2"; + else fileName = fontPath +font.family()+fileName; + fileInfo.setFile(fileName); + QDateTime dt= fileInfo.created(); + //fileInfo.lastModified(); + QString s = dt.toString("yyyy-MM-dd hh:mm:ss"); + //qDebug()<<"GetFileInfo"<labFontInfo->setText(fileInfo.fileName()+" "+s+""); + ui->labFontInfo->setText( QString("%1").arg(chsum)); +} + +void DialogFontSize::getValue(int *size){ + int pixelSize = 12; + bool ok; + font.setFamily("wenquanyi"); +#ifdef VNLGXX + + int n = ui->comboBoxFontSize->currentText().toInt(&ok,10); + if(ok) pixelSize = n; + +#else + if(ui->radioButton5Point->isChecked()){ + pixelSize = 5; + font.setFamily("biyang"); + } + else if(ui->radioButton7Point->isChecked()){ + pixelSize = 7; + font.setFamily("biyang"); + } + else if(ui->radioButton9Point->isChecked()){ + pixelSize = 9; + font.setFamily("biyang"); + } + else if(ui->radioButton12Point->isChecked()){ + pixelSize = 12; + + } + else if(ui->radioButton16Point->isChecked()){ + pixelSize = 16; + } + else if(ui->radioButton24Point->isChecked()){ + pixelSize = 24; + } + else if(ui->radioButton7HoriL->isChecked()){ + pixelSize = 5; + font.setFamily("SerifL"); + + } + else if(ui->radioButton7HoriR->isChecked()){ + pixelSize = 5; + font.setFamily("SerifR"); + } + else if(ui->radioButton9HoriL->isChecked()){ + pixelSize = 7; + font.setFamily("SerifL9"); + + } + else if(ui->radioButton9HoriR->isChecked()){ + pixelSize = 7; + font.setFamily("SerifR9"); + } + else if(ui->radioButton7Bangla->isChecked()){ + pixelSize = 7; + font.setFamily("bangla"); + } + else if(ui->radioButton7PointNum->isChecked()){ + pixelSize = 7; + font.setFamily("biyangF"); + } + else if(ui->radioButton21PointNum->isChecked()){ + pixelSize = 24; + font.setFamily("biyangF"); + } + else if(ui->radioButton12NewRoman->isChecked()){ + pixelSize = 12; + font.setFamily("Roman"); + } + else if(ui->radioButton32Point->isChecked()){ + pixelSize = 32; + } + + /* radioButton7Hori + else if(ui->radioButton28Point->isChecked()){ + pixelSize = 28; + } + else if(ui->radioButton32Point->isChecked()){ + pixelSize = 32; + }*/ + +#endif + + font.setPixelSize(pixelSize); + ui->lineEdit->setFont(font); // 设置预览字体 + + *size = pixelSize; + + +} + +void DialogFontSize::setValue(int value){ + +#ifdef VNLGXX + //QString s; + //s.sprintf("%d",value); + //ui->comboBoxFontSize->setEditText(s); + //if(value<12) ui->fontComboBox->setCurrentIndex(0); + +#else + if(value == 5 && font.family()=="biyang"){ + ui->radioButton5Point->setChecked(true); + } + else if(value == 5 && font.family()=="SerifL"){ + ui->radioButton7HoriL->setChecked(true); + + } + else if(value == 5 && font.family()=="SerifR" ){ + ui->radioButton7HoriR->setChecked(true); + + } + else if(value == 7 && font.family()=="SerifL9"){ + ui->radioButton9HoriL->setChecked(true); + + } + else if(value == 7 && font.family()=="SerifR9"){ + ui->radioButton9HoriR->setChecked(true); + + } + else if(value == 7 && font.family()=="bangla"){ + ui->radioButton7Bangla->setChecked(true); + } + else if(value == 7 && font.family()=="biyangF"){ + ui->radioButton7PointNum->setChecked(true); + } + else if(value == 21 && font.family()=="biyangF"){ + ui->radioButton21PointNum->setChecked(true); + } + else if(value == 12 && font.family()=="Roman"){ + ui->radioButton12NewRoman->setChecked(true); + } + else if(value == 7){ + ui->radioButton7Point->setChecked(true); + } + else if(value == 9){ + ui->radioButton9Point->setChecked(true); + } + else if(value == 12){ + ui->radioButton12Point->setChecked(true); + } + else if(value == 16){ + ui->radioButton16Point->setChecked(true); + } + + else if(value == 24){ + ui->radioButton24Point->setChecked(true); + } + else if(value == 32){ + ui->radioButton32Point->setChecked(true); + } + /* + else if(value == 28){ + ui->radioButton28Point->setChecked(true); + } + else if(value == 32){ + ui->radioButton32Point->setChecked(true); + } + */ + +#endif + +} + +QString DialogFontSize::getFontFamily(){ + + return ui->lineEdit->font().family(); +} + +QFont DialogFontSize::getFont(){ + + return ui->lineEdit->font(); +} + +void DialogFontSize::on_pushButton_pressed() +{ + GetFileInfo();// 显示字库校验码 +} diff --git a/DialogFontSize.h b/DialogFontSize.h new file mode 100644 index 0000000..5c9eaf7 --- /dev/null +++ b/DialogFontSize.h @@ -0,0 +1,37 @@ +#ifndef DIALOGFONTSIZE_H +#define DIALOGFONTSIZE_H + +#include + +namespace Ui { +class DialogFontSize; +} + +class DialogFontSize : public QDialog +{ + Q_OBJECT + +public: + explicit DialogFontSize(QWidget *parent = 0); + ~DialogFontSize(); + void getValue(int *size); + void setValue(int value); + QFont font; + QString getFontFamily(); + QFont getFont(); + + void GetFileInfo();//String fileName, String fileDate + +public slots: + void ChangeFont(QString fontFamily); + void Button7HoriL(bool ok); + void Button7HoriR(bool ok); + +private slots: + void on_pushButton_pressed(); + +private: + Ui::DialogFontSize *ui; +}; + +#endif // DIALOGFONTSIZE_H diff --git a/DialogInputTxt.cpp b/DialogInputTxt.cpp new file mode 100644 index 0000000..0906cdb --- /dev/null +++ b/DialogInputTxt.cpp @@ -0,0 +1,14 @@ +#include "DialogInputTxt.h" +#include "ui_DialogInputTxt.h" + +DialogInputTxt::DialogInputTxt(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogInputTxt) +{ + ui->setupUi(this); +} + +DialogInputTxt::~DialogInputTxt() +{ + delete ui; +} diff --git a/DialogInputTxt.h b/DialogInputTxt.h new file mode 100644 index 0000000..bd0e63b --- /dev/null +++ b/DialogInputTxt.h @@ -0,0 +1,22 @@ +#ifndef DIALOGINPUTTXT_H +#define DIALOGINPUTTXT_H + +#include + +namespace Ui { + class DialogInputTxt; +} + +class DialogInputTxt : public QDialog +{ + Q_OBJECT + +public: + explicit DialogInputTxt(QWidget *parent = 0); + ~DialogInputTxt(); + +private: + Ui::DialogInputTxt *ui; +}; + +#endif // DIALOGINPUTTXT_H diff --git a/DialogInputTxt.ui b/DialogInputTxt.ui new file mode 100644 index 0000000..8287858 --- /dev/null +++ b/DialogInputTxt.ui @@ -0,0 +1,78 @@ + + + DialogInputTxt + + + + 0 + 0 + 400 + 117 + + + + Dialog + + + + + 20 + 80 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 20 + 30 + 361 + 27 + + + + + + + + buttonBox + accepted() + DialogInputTxt + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogInputTxt + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/DialogInsertVari.cpp b/DialogInsertVari.cpp new file mode 100644 index 0000000..533640d --- /dev/null +++ b/DialogInsertVari.cpp @@ -0,0 +1,233 @@ +#include "DialogInsertVari.h" +#include "ui_dialoginsertvari.h" +#include "myinclude.h" +//#include "SysPara.h" + +DialogInsertVari::DialogInsertVari(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogInsertVari) +{ + + ui->setupUi(this); + this->setWindowTitle(tr("变量插入")); + //this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowContextHelpButtonHint | Qt::WindowMaximizeButtonHint); + //this->setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint); + //setWindowFlags(Qt::WindowTitleHint | Qt::WindowContextHelpButtonHint); + //setWindowFlags(Qt::CustomizeWindowHint); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + + + bool Flag=0; + digitWidth = 4; + ui->radioButtonDigital9->setDisabled(!Flag); + ui->radioButtonDigitalA->setDisabled(!Flag); + ui->radioButtonDigitalB->setDisabled(!Flag); + ui->radioButtonDigitalC->setDisabled(!Flag); + ui->radioButtonDigitalD->setDisabled(!Flag); + ui->radioButtonDigitalE->setDisabled(!Flag); + ui->radioButtonDigitalF->setDisabled(!Flag); + //ui->radioButtonDigitalH->setDisabled(!Flag); + + connect(ui->radioButtonVarRandom,SIGNAL(toggled(bool)),this,SLOT(onRanDomPressed(bool))); + + connect(ui->radioButtonHour,SIGNAL(toggled(bool)),this,SLOT( onDigitTwoBit(bool))); + connect(ui->radioButtonMinute,SIGNAL(toggled(bool)),this,SLOT( onDigitTwoBit(bool))); + connect(ui->radioButtonWeek,SIGNAL(toggled(bool)),this,SLOT( onDigitTwoBit(bool))); + connect(ui->radioButtonMonth,SIGNAL(toggled(bool)),this,SLOT( onDigitTwoBit(bool))); + connect(ui->radioButtonSecond,SIGNAL(toggled(bool)),this,SLOT( onDigitTwoBit(bool))); + connect(ui->radioButtonDay,SIGNAL(toggled(bool)),this,SLOT( onDigitTwoBit(bool))); +connect(ui->radioButtonXDay,SIGNAL(toggled(bool)),this,SLOT( onDigitTwoBit(bool))); + connect(ui->radioButtonYear,SIGNAL(toggled(bool)),this,SLOT( onDigitFourBit(bool))); + connect(ui->radioButtonVar1,SIGNAL(toggled(bool)),this,SLOT( onDigitFourBit(bool))); + connect(ui->radioButtonVar2,SIGNAL(toggled(bool)),this,SLOT( onDigitFourBit(bool))); + connect(ui->radioButtonCNT3,SIGNAL(toggled(bool)),this,SLOT( onDigitFourBit(bool))); +#ifdef _2DCODE_ + connect(ui->radioButtonBarCode,SIGNAL(toggled(bool)),this,SLOT( onDigitOtherBit(bool))); + connect(ui->radioButtonQRCode,SIGNAL(toggled(bool)),this,SLOT( onDigitOtherBit(bool))); + connect(ui->radioButtonDataMatrix,SIGNAL(toggled(bool)),this,SLOT( onDigitOtherBit(bool))); +#else + delete ui->radioButtonBarCode; + delete ui->radioButtonQRCode; + delete ui->radioButtonDataMatrix; +#endif +ui->radioButtonXDay->hide(); + + //ui->radioButtonDigitalH->hide(); +#ifndef CABLEUSER + ui->radioButtonVar1->hide(); + ui->radioButtonVar2->hide(); + ui->radioButtonYear->setChecked(1); +#endif +} + +DialogInsertVari::~DialogInsertVari() +{ + delete ui; +} +void DialogInsertVari::setValue(QString txt){ + //ui->label_2->setText(txt); +} +void DialogInsertVari::onRanDomPressed(bool Flag){ + if(Flag) ui->radioButtonDigitalD->setChecked(Flag); + else ui->radioButtonDigital4->setChecked(1); + ui->radioButtonDigital9->setDisabled(!Flag); + ui->radioButtonDigitalA->setDisabled(!Flag); + ui->radioButtonDigitalB->setDisabled(!Flag); + ui->radioButtonDigitalC->setDisabled(!Flag); + ui->radioButtonDigitalD->setDisabled(!Flag); + ui->radioButtonDigitalE->setDisabled(!Flag); + ui->radioButtonDigitalF->setDisabled(!Flag); + //ui->radioButtonDigitalH->setDisabled(!Flag); +} + +void DialogInsertVari::onDigitOtherBit(bool Flag){ + + if(digitWidth>8) + ui->radioButtonDigital4->setChecked(1); + + ui->radioButtonDigital9->setDisabled(Flag); + ui->radioButtonDigitalA->setDisabled(Flag); + ui->radioButtonDigitalB->setDisabled(Flag); + ui->radioButtonDigitalC->setDisabled(Flag); + ui->radioButtonDigitalD->setDisabled(Flag); + ui->radioButtonDigitalE->setDisabled(Flag); + ui->radioButtonDigitalF->setDisabled(Flag); + //ui->radioButtonDigitalH->setDisabled(Flag); +} + +void DialogInsertVari::onDigitTwoBit(bool Flag){ + if(ui->radioButtonXDay->isChecked())ui->radioButtonDigital3->setChecked(Flag); + else if(Flag)ui->radioButtonDigital2->setChecked(Flag); + else ui->radioButtonDigital4->setChecked(1); + + ui->radioButtonDigital9->setDisabled(Flag); + ui->radioButtonDigitalA->setDisabled(Flag); + ui->radioButtonDigitalB->setDisabled(Flag); + ui->radioButtonDigitalC->setDisabled(Flag); + ui->radioButtonDigitalD->setDisabled(Flag); + ui->radioButtonDigitalE->setDisabled(Flag); + ui->radioButtonDigitalF->setDisabled(Flag); + //ui->radioButtonDigitalH->setDisabled(Flag); +} + +void DialogInsertVari::onDigitFourBit(bool Flag){ + if(Flag)ui->radioButtonDigital4->setChecked(Flag); + else ui->radioButtonDigital2->setChecked(1); + ui->radioButtonDigital9->setDisabled(Flag); + ui->radioButtonDigitalA->setDisabled(Flag); + ui->radioButtonDigitalB->setDisabled(Flag); + ui->radioButtonDigitalC->setDisabled(Flag); + ui->radioButtonDigitalD->setDisabled(Flag); + ui->radioButtonDigitalE->setDisabled(Flag); + ui->radioButtonDigitalF->setDisabled(Flag); + //ui->radioButtonDigitalH->setDisabled(Flag); +} + + +void DialogInsertVari::getValue(int *varType,int *digitalWidth,unsigned char *splitMode){ + int type = 0,width = 0; + if(ui->radioButtonYear->isChecked()) + type = 0; + else if(ui->radioButtonMonth->isChecked()) + type = 1; + else if(ui->radioButtonDay->isChecked()) + type = 2; + else if(ui->radioButtonWeek->isChecked()) + type = 3; + else if(ui->radioButtonHour->isChecked()) + type = 4; + else if(ui->radioButtonMinute->isChecked()) + type = 5; + else if(ui->radioButtonSecond->isChecked()) + type = 6; + else if(ui->radioButtonVar1->isChecked()) + type = 7; + else if(ui->radioButtonVar2->isChecked()) + type = 8; +#ifdef _2DCODE_ + else if(ui->radioButtonDataMatrix->isChecked()) + type = 9; + else if(ui->radioButtonQRCode->isChecked()) + type = 10; + else if(ui->radioButtonBarCode->isChecked()) + type = 11; +#endif + else if(ui->radioButtonVarRandom->isChecked()) + type = 12; + else if(ui->radioButtonCNT3->isChecked()) + type = 13; + else if(ui->radioButtonXDay->isChecked()) + type = 14; + else if(ui->radioButtonCNT4->isChecked()) + type = 15; + else if(ui->radioButtonExpiry->isChecked()) + { + type = 80; + + } + else if(ui->radioButtonCurDate->isChecked()) + { + type = 81; + } +// else if(ui->radioButtonClass->isChecked()) +// { +// type = 82; +// } + + + + if(ui->radioButtonDigital1->isChecked()) + width = 1; + else if(ui->radioButtonDigital2->isChecked()) + width = 2; + else if(ui->radioButtonDigital3->isChecked()) + width = 3; + else if(ui->radioButtonDigital4->isChecked()) + width = 4; + else if(ui->radioButtonDigital5->isChecked()) + width = 5; + else if(ui->radioButtonDigital6->isChecked()) + width = 6; + else if(ui->radioButtonDigital7->isChecked()) + width = 7; + else if(ui->radioButtonDigital8->isChecked()) + width = 8; + else if(ui->radioButtonDigital9->isChecked()) + width = 9; + else if(ui->radioButtonDigitalA->isChecked()) + width = 10; + else if(ui->radioButtonDigitalB->isChecked()) + width = 11; + else if(ui->radioButtonDigitalC->isChecked()) + width = 12; + else if(ui->radioButtonDigitalD->isChecked()) + width = 13; + else if(ui->radioButtonDigitalE->isChecked()) + width = 14; + else if(ui->radioButtonDigitalF->isChecked()) + width = 15; + //else if(ui->radioButtonDigitalH->isChecked()) + // width = 16; + if(varType && digitalWidth){ + *varType = type; + *digitalWidth = width; + digitWidth = width; + } + if (type == 82) { // class + *digitalWidth = 1; + digitWidth = 1; + + } + +} + +void DialogInsertVari::on_buttonBox_accepted() +{ + +} +void DialogInsertVari::EnableHiddenValue(bool select) +{ + if(!select) + ui->radioButtonVar1->setChecked(true); + ui->radioButtonCNT4->setEnabled(select); +} diff --git a/DialogInsertVari.h b/DialogInsertVari.h new file mode 100644 index 0000000..83ccb5f --- /dev/null +++ b/DialogInsertVari.h @@ -0,0 +1,33 @@ +#ifndef DIALOGINSERTVARI_H +#define DIALOGINSERTVARI_H + +#include + +namespace Ui { +class DialogInsertVari; +} + +class DialogInsertVari : public QDialog +{ + Q_OBJECT + +public: + explicit DialogInsertVari(QWidget *parent = 0); + ~DialogInsertVari(); + void getValue(int *varType,int *digitalWidth,unsigned char *splitMode); + void setValue(QString txt); + void EnableHiddenValue(bool select); +protected slots: + void onRanDomPressed(bool Flag); + void onDigitOtherBit(bool Flag); + void onDigitTwoBit(bool Flag); + void onDigitFourBit(bool Flag); +private slots: + void on_buttonBox_accepted(); + +private: + Ui::DialogInsertVari *ui; + int digitWidth; +}; + +#endif // DIALOGINSERTVARI_H diff --git a/DialogLineSpace.cpp b/DialogLineSpace.cpp new file mode 100644 index 0000000..11c5267 --- /dev/null +++ b/DialogLineSpace.cpp @@ -0,0 +1,73 @@ +#include "DialogLineSpace.h" +#include "ui_dialoglinespace.h" + +DialogLineSpace::DialogLineSpace(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogLineSpace) +{ + ui->setupUi(this); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + this->setWindowTitle(tr("选择行间距和字符间距")); +} + +DialogLineSpace::~DialogLineSpace() +{ + delete ui; +} + +void DialogLineSpace::getValue(int *lineSpace,int *charSpace){ + *lineSpace = 0; + + if(ui->radioButton0Pixel->isChecked()) + *lineSpace = 0; + else if(ui->radioButton1Pixel->isChecked()) + *lineSpace = 1; + else if(ui->radioButton2Pixel->isChecked()) + *lineSpace = 2; + else if(ui->radioButton3Pixel->isChecked()) + *lineSpace = 3; + else if(ui->radioButton4Pixel->isChecked()) + *lineSpace = 4; + else if(ui->radioButton5Pixel->isChecked()) + *lineSpace = 5; + else if(ui->radioButton6Pixel->isChecked()) + *lineSpace = 6; + else if(ui->radioButton7Pixel->isChecked()) + *lineSpace = 7; + + *charSpace = 0; + if(ui->radioButtonCharSpace0Pixel->isChecked()) + *charSpace = 0; + else if(ui->radioButtonCharSpace1Pixel->isChecked()) + *charSpace = 1; + else if(ui->radioButtonCharSpace2Pixel->isChecked()) + *charSpace = 2; + else if(ui->radioButtonCharSpace3Pixel->isChecked()) + *charSpace = 3; + else if(ui->radioButtonCharSpace4Pixel->isChecked()) + *charSpace = 4; + else if(ui->radioButtonCharSpace5Pixel->isChecked()) + *charSpace = 5; +} + +void DialogLineSpace::setValue(int lineSpace,int charSpace){ + if(lineSpace > 7 || lineSpace < 0) + lineSpace = 0; + ui->radioButton0Pixel->setChecked(lineSpace == 0); + ui->radioButton1Pixel->setChecked(lineSpace == 1); + ui->radioButton2Pixel->setChecked(lineSpace == 2); + ui->radioButton3Pixel->setChecked(lineSpace == 3); + ui->radioButton4Pixel->setChecked(lineSpace == 4); + ui->radioButton5Pixel->setChecked(lineSpace == 5); + ui->radioButton6Pixel->setChecked(lineSpace == 6); + ui->radioButton7Pixel->setChecked(lineSpace == 7); + + if(charSpace > 5 || charSpace < 0) + charSpace = 0; + ui->radioButtonCharSpace0Pixel->setChecked(charSpace == 0); + ui->radioButtonCharSpace1Pixel->setChecked(charSpace == 1); + ui->radioButtonCharSpace2Pixel->setChecked(charSpace == 2); + ui->radioButtonCharSpace3Pixel->setChecked(charSpace == 3); + ui->radioButtonCharSpace4Pixel->setChecked(charSpace == 4); + ui->radioButtonCharSpace5Pixel->setChecked(charSpace == 5); +} diff --git a/DialogLineSpace.h b/DialogLineSpace.h new file mode 100644 index 0000000..5dc72aa --- /dev/null +++ b/DialogLineSpace.h @@ -0,0 +1,24 @@ +#ifndef DIALOGLINESPACE_H +#define DIALOGLINESPACE_H + +#include + +namespace Ui { +class DialogLineSpace; +} + +class DialogLineSpace : public QDialog +{ + Q_OBJECT + +public: + explicit DialogLineSpace(QWidget *parent = 0); + ~DialogLineSpace(); + void getValue(int *lineSpace,int *charSpace); + void setValue(int lineSpace,int charSpace); + +private: + Ui::DialogLineSpace *ui; +}; + +#endif // DIALOGLINESPACE_H diff --git a/DialogSaveFile.cpp b/DialogSaveFile.cpp new file mode 100644 index 0000000..cf94d06 --- /dev/null +++ b/DialogSaveFile.cpp @@ -0,0 +1,239 @@ +#include "DialogSaveFile.h" +#include "ui_dialogsavefile.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include"HtmlDelegate.h" +#include +#include +#include + +DialogSaveFile::DialogSaveFile(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogSaveFile) +{ + ui->setupUi(this); + this->setWindowTitle(tr("保存")); + ui->textEditView->setReadOnly(true); + ui->textEditView->setLineWrapMode(QTextEdit::NoWrap); + ui->textEditView->document()->setDocumentMargin(0); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + EditMode=4; +#ifdef EnableArabic + setFileNameFlag=false; +#endif +} + +void DialogSaveFile::refreshListView(int mode){ + + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; + QDir dir(dirPath); + QStringList filters; + EditMode = mode; + if(mode == TXTFILE) filters << "*.html" << "*.txt" << "*.TXT" << "*.jpeg" << "*.gif" << "*.jpg" << "*.bmp"<< "*.BMP"; // txtmode + else if(mode == PICFILE) filters << "*.png";// <<"*.jpg" ; // picmode + else if(mode == SCENE) filters << "*.xml";// scene mode + else filters << "*.html" << "*.bmp" << "*.BMP" <<"*.jpg"<<"*.gif"; + dir.setNameFilters(filters); + dir.setFilter(QDir::Files); +#ifndef EnableArabic + QStringListModel *model = new QStringListModel(dir.entryList()); +#else + QStringList entries=dir.entryList(); + QStandardItemModel *model = new QStandardItemModel(); + for(int i=0;i%1%2").arg(subname).arg(subsuffix2); + QStandardItem *item2 = new QStandardItem(stringhtml); + model->appendRow(item2); + } + }else{ + model->appendRow(item1); + } + } + } + ui->listViewFile->setItemDelegate(new HtmlDelegate); +#endif + + ui->listViewFile->setEditTriggers(QAbstractItemView::NoEditTriggers); + ui->listViewFile->setModel(model); //useList是个QListView + int count = ui->listViewFile->model()->rowCount(); + if(count){ + QModelIndex index = ui->listViewFile->model()->index(0 , 0); + ui->listViewFile->setCurrentIndex(index); + on_listViewFile_entered(index); + } + +#ifdef EnableArabic + QFont font; + if(!setFileNameFlag){ + font.setFamily("biyang"); + ui->lineEdit->setFont(font); + }else { + font.setFamily("biyangarabic"); + ui->lineEdit->setFont(font); + } +#endif +} + + +DialogSaveFile::~DialogSaveFile() +{ + delete ui; +} + +void DialogSaveFile::on_listViewFile_entered(const QModelIndex &index) +{ +#ifdef EnableArabic + QFont font; + QString fileName=index.data().toString(); + if(fileName.endsWith("")){ + QTextDocument doc; + doc.setHtml(fileName); + fileName= doc.toPlainText(); + font.setFamily("biyangarabic"); + ui->lineEdit->setFont(font); + ui->lineEdit->setText(QString(QFileInfo(fileName).baseName())); + int position = fileName.lastIndexOf("."); + fileName.insert(position,".a"); + }else{ + font.setFamily("biyang"); + ui->lineEdit->setFont(font); + ui->lineEdit->setText( QFileInfo(fileName).baseName() ); + } +#endif + + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; +#ifndef EnableArabic + QString filePath = dirPath + index.data().toString(); +#else + QString filePath = dirPath + fileName; +#endif + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") || + filePath.endsWith(".png") || filePath.endsWith(".bmp")|| filePath.endsWith(".BMP")|| filePath.endsWith(".nda")){ + ui->textEditView->clear(); + ui->textEditView->setHtml(QString("").arg(filePath)); + } + else { + QFile file(filePath); + if (!file.open(QFile::ReadOnly)) + return ; + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + if (Qt::mightBeRichText(str)) { + if(!ui->radioButtonLocal->isChecked()) + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //必须替换相应的路径 + ui->textEditView->setHtml(str); + } else { + str = QString::fromLocal8Bit(data); + ui->textEditView->setPlainText(str); + } + } +#ifndef EnableArabic + ui->lineEdit->setText( QFileInfo(ui->listViewFile->currentIndex().data().toString()).baseName() ); +#endif +} +void DialogSaveFile::on_listViewFile_clicked(const QModelIndex &index) +{ + on_listViewFile_entered(index); +} + +void DialogSaveFile::on_pushButtonNext_pressed() +{ + QModelIndex currIndex = ui->listViewFile->currentIndex(); + int count = ui->listViewFile->model()->rowCount(); + if(count){ + QModelIndex index = ui->listViewFile->model()->index((currIndex.row() + 1)%count, 0); + ui->listViewFile->setCurrentIndex(index); + on_listViewFile_entered(index); + } + ui->lineEdit->setText(QFileInfo(ui->listViewFile->currentIndex().data().toString()).baseName()); +} + +void DialogSaveFile::on_pushButtonLast_pressed() +{ + QModelIndex currIndex = ui->listViewFile->currentIndex(); + int count = ui->listViewFile->model()->rowCount(); + if(count){ + QModelIndex index = ui->listViewFile->model()->index(currIndex.row() == 0?(count - 1):(currIndex.row() - 1), 0); + ui->listViewFile->setCurrentIndex(index); + on_listViewFile_entered(index); + } + ui->lineEdit->setText(QFileInfo(ui->listViewFile->currentIndex().data().toString()).baseName()); +} + +void DialogSaveFile::on_pushButtonExit_pressed() +{ + hide(); +} +//void DialogSaveFile::on_lostfocuse_pressed() +//{ +// hide(); +//} +void DialogSaveFile::on_pushButtonSave_clicked() +{ + QModelIndex index = ui->listViewFile->currentIndex(); + QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; + //QString filePath = dirPath + index.data().toString(); + QString filePath = dirPath + ui->lineEdit->text();// index.data().toString(); +#ifdef EnableArabic + if(setFileNameFlag){ + filePath = dirPath + ui->lineEdit->text()+".a"; + } +#endif + emit saveFile(filePath,false); + hide(); +} + +void DialogSaveFile::on_radioButtonLocal_released() +{ + refreshListView(EditMode); +} + +void DialogSaveFile::on_radioButtonUdisk_released() +{ + + QDir dir(UDISK_DOC_ROOT_DIR); + if(!dir.exists()){ + QMessageBox::warning(0,tr("警告"),tr("U盘未插入或U盘根目录下的doc文件夹不存在!")); + } + refreshListView(EditMode); +} +void DialogSaveFile::setEnterFileName(QString strFile) +{ + ui->lineEdit->setText(strFile); + //ui->lineEdit->setFocus(); +} +void DialogSaveFile::setTitleTxt(QString str) +{ + setWindowTitle(str); +} + +#ifdef EnableArabic +void DialogSaveFile::setFileNameEnglishOrArabic(bool flag){ + QFont font; + setFileNameFlag=flag; + //qDebug()<<"setFileNameFlag :"<lineEdit->setFont(font); +} +#endif diff --git a/DialogSaveFile.h b/DialogSaveFile.h new file mode 100644 index 0000000..da2399a --- /dev/null +++ b/DialogSaveFile.h @@ -0,0 +1,54 @@ +#ifndef DialogSaveFile_H +#define DialogSaveFile_H + +#include +#include "DialogSaveFile.h" +#include +#include "myinclude.h" +namespace Ui { +class DialogSaveFile; +} + +class DialogSaveFile : public QDialog +{ + Q_OBJECT + +public: + explicit DialogSaveFile(QWidget *parent = 0); + ~DialogSaveFile(); + void refreshListView(int mode); + int EditMode; + void setEnterFileName(QString strFile); + void setTitleTxt(QString str); +#ifdef EnableArabic + void setFileNameEnglishOrArabic(bool flag); +#endif +private slots: + + + void on_pushButtonNext_pressed(); + void on_pushButtonLast_pressed(); + void on_pushButtonExit_pressed(); + void on_pushButtonSave_clicked(); + void on_radioButtonLocal_released(); + void on_radioButtonUdisk_released(); + void on_listViewFile_entered(const QModelIndex &index); + void on_listViewFile_clicked(const QModelIndex &index); +Q_SIGNALS: + void saveFile(QString filePath,bool Flag); +private: + Ui::DialogSaveFile *ui; +#ifdef EnableArabic + bool setFileNameFlag; +#endif +}; + +#endif // DialogSaveFile_H + + + + + + + + diff --git a/DigitalInput.cpp b/DigitalInput.cpp new file mode 100644 index 0000000..d695584 --- /dev/null +++ b/DigitalInput.cpp @@ -0,0 +1,67 @@ +#include "DigitalInput.h" +#include "ui_digitalinput.h" +#include "MyInputMethod.h" +DigitalInput::DigitalInput(MyInputMethod *myInputMethod,QWidget *parent) : + QWidget(parent,(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool)), + ui(new Ui::DigitalInput) +{ + ui->setupUi(this); + this->myInputMethod = myInputMethod; + + connect(ui->Key_0,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_1,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_2,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_3,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_4,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_5,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_6,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_7,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_8,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_9,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_pluse,SIGNAL(pressed()),this,SLOT(onCharPressed())); + connect(ui->Key_backspace,SIGNAL(pressed()),this,SLOT(onKeyBackspacePressed())); + connect(ui->Key_selectAll,SIGNAL(pressed()),this,SLOT(onKeySelectAllPressed())); + connect(ui->Key_up,SIGNAL(pressed()),this,SLOT(onKeyUpPressed())); + connect(ui->Key_down,SIGNAL(pressed()),this,SLOT(onKeyDownPressed())); + +} + +DigitalInput::~DigitalInput() +{ + delete ui; +} + + +void DigitalInput::onCharPressed(){ + QPushButton * button = qobject_cast(sender()); + QString text = button->text(); + myInputMethod->sendString (text); +} + +void DigitalInput::onKeyBackspacePressed(){ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Backspace,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} + +void DigitalInput::onKeySelectAllPressed(){ + static int init = 0; +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_A,Qt::ControlModifier,true,false); //向系统发送键盘事件 + if(!init) + QWSServer::sendKeyEvent(0,Qt::Key_A,Qt::ControlModifier,true,false); //向系统发送键盘事件 + init = 1; +#endif +} +void DigitalInput::onKeyUpPressed(){ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Up,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} +void DigitalInput::onKeyDownPressed(){ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Down,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} + + diff --git a/DigitalInput.h b/DigitalInput.h new file mode 100644 index 0000000..12e8264 --- /dev/null +++ b/DigitalInput.h @@ -0,0 +1,33 @@ +#ifndef DIGITALINPUT_H +#define DIGITALINPUT_H + +#include +class MyInputMethod; +namespace Ui { +class DigitalInput; +} + +class DigitalInput : public QWidget +{ + Q_OBJECT + +public: + explicit DigitalInput(MyInputMethod *myInputMethod,QWidget *parent = 0); + ~DigitalInput(); + + +private slots: + void onCharPressed(); + void onKeyBackspacePressed(); + void onKeySelectAllPressed(); + void onKeyUpPressed(); + void onKeyDownPressed(); + + +private: + Ui::DigitalInput *ui; + + MyInputMethod *myInputMethod; +}; + +#endif // DIGITALINPUT_H diff --git a/EN/mainwindow.ui b/EN/mainwindow.ui new file mode 100644 index 0000000..0324a47 --- /dev/null +++ b/EN/mainwindow.ui @@ -0,0 +1,3873 @@ + + + MainWindow + + + true + + + + 0 + 0 + 638 + 458 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 5 + 5 + + + + Qt::StrongFocus + + + InkJet + + + + + 9 + 9 + 620 + 440 + + + + + 0 + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + 1 + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + + + + 0 + 50 + + + + + + 0 + 0 + 686 + 47 + + + + + + + + 0 + 45 + + + + 编辑 + + + + :/icon/edit.png:/icon/edit.png + + + + + + + + 0 + 45 + + + + 打开文件 + + + + :/icon/fileopen.png:/icon/fileopen.png + + + + + + + + 0 + 45 + + + + 二维码 + + + + :/icon/bypm.png:/icon/bypm.png + + + + + + + + 0 + 45 + + + + 条形码 + + + + :/icon/BarCode1.png:/icon/BarCode1.png + + + + + + + + 0 + 45 + + + + 缩小 + + + + :/icon/zoomout.png:/icon/zoomout.png + + + + + + + + 0 + 45 + + + + 放大 + + + + :/icon/zoomin.png:/icon/zoomin.png + + + + + + + 交替打印文件名 + + + + + + + + + + + + 0 + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 最大:[40行x 2048列] + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 140 + 25 + + + + + 140 + 25 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 同步器速度 + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + Qt::Vertical + + + + + + + + 0 + 25 + + + + + 100 + 25 + + + + 当前时间 + + + + + + + + + + + + + 640 + 107 + + + + 1 + + + + + + + + 610 + 95 + + + + + 620 + 96 + + + + BlankCursor + + + 0 + + + false + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi';"></p></body></html> + + + + + + + + + + 5 + 5 + 620 + 100 + + + + + 0 + 0 + + + + + 620 + 100 + + + + + 16777215 + 80 + + + + false + + + + + 0 + 0 + 500 + 53 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + + + + 0 + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 60 + + + + + 60 + 16777215 + + + + + + + :/image/reset.png + + + + + + + + + 0 + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨线开关 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 喷头盖开 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨水缸满 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨水液位 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 溶剂液位 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 回收故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 粘度故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 相位故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 高压故障 + + + + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 故障恢复 + + + + + + + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + + 110 + 0 + + + + + 110 + 16777215 + + + + 立即重新计米 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + 产品计数 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::WinPanel + + + QFrame::Sunken + + + + + + + + + + Qt::Horizontal + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + 产品总计数 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::WinPanel + + + QFrame::Sunken + + + + + + + + + + Qt::Horizontal + + + + + + + + 110 + 35 + + + + + 130 + 16777215 + + + + Qt::LeftToRight + + + false + + + 关机 + + + + :/icon/poweroff.png:/icon/poweroff.png + + + + + + + + + 7 + + + 5 + + + 0 + + + + + 6 + + + 3 + + + 0 + + + 0 + + + 3 + + + + + 1 + + + 0 + + + + + 3 + + + + + + 0 + 20 + + + + + 16524 + 16777215 + + + + + + + true + + + + + + + + + 2 + + + + + 4 + + + 3 + + + 0 + + + + + + 0 + 20 + + + + + 1000 + 20 + + + + 粘度 + + + + + + + + 0 + 20 + + + + + 10000 + 20 + + + + 压力 + + + + + + + + 1000 + 20 + + + + 隔膜位置 + + + + + + + + 1000 + 20 + + + + 晶振电压 + + + + + + + + 88 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 70 + 0 + + + + + 1000 + 20 + + + + + + + + + + + + 64 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 88 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 0 + 20 + + + + + 600 + 16777215 + + + + QFrame::NoFrame + + + + + + + + + + + 0 + 0 + + + + + 600 + 20 + + + + 2014-08-23 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + 0 + 50 + + + + + 80 + 16777215 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 147 + 146 + 146 + + + + + + + + 开 + + + + :/icon/openreclaimtanl.png:/icon/openreclaimtanl.png + + + + + + + + 60 + 0 + + + + + 70 + 60 + + + + + + + + + + + + 0 + 50 + + + + + 80 + 16777215 + + + + 关 + + + + :/icon/closereclaimtanl.png:/icon/closereclaimtanl.png + + + + + + + + + + + + + 0 + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + + + + + + 0 + 170 + 0 + + + + + + + 85 + 170 + 127 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 127 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 127 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 186 + 188 + 185 + + + + + + + 242 + 241 + 240 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/startprint2.png + :/icon/startprint1.png + :/icon/startprint1.png + :/icon/startprint.png:/icon/startprint2.png + + + + 110 + 70 + + + + false + + + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + + + + + + 170 + 0 + 0 + + + + + + + 193 + 121 + 121 + + + + + + + 170 + 0 + 0 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 241 + 176 + 165 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 241 + 176 + 165 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 209 + 199 + 189 + + + + + + + 242 + 241 + 240 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 227 + 97 + 75 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 227 + 97 + 75 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/stopprint2.png + :/icon/stopprint1.png + :/icon/stopprint1.png + :/icon/stopprint.png:/icon/stopprint2.png + + + + 110 + 70 + + + + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + + + + + + 255 + 170 + 0 + + + + + + + 206 + 186 + 124 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 209 + 206 + 203 + + + + + + + 242 + 241 + 240 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/pauseprint2.png + :/icon/pauseprint1.png + :/icon/pauseprint1.png + :/icon/pauseprint.png:/icon/pauseprint2.png + + + + 110 + 70 + + + + + + + + + 0 + 70 + + + + + 110 + 16777215 + + + + 喷嘴逆清洗 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + PicWidget + QWidget +
PicWidget.h
+ 1 +
+ + ClickLabel + QLabel +
ClickLabel.h
+
+ + TextEditOption + QWidget +
TextEditOption.h
+ 1 +
+ + PrintTextDisplay + QWidget +
PrintTextDisplay.h
+ 1 +
+ + MyTextEdit + QTextEdit +
MyTextEdit.h
+
+
+ + + + +
diff --git a/Expiry.bmp b/Expiry.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2a5296e41f6ef2abda32a4982e6c7f3b95ec0584 GIT binary patch literal 1248262 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 z!$data(index, Qt::DisplayRole).toString(); + QTextDocument doc; + doc.setHtml(html); + doc.setTextWidth(option.rect.width()); + + painter->save(); + painter->setClipRect(option.rect); + + if (option.state & QStyle::State_Selected) { + // 绘制选中项的背景颜色 + painter->fillRect(option.rect, option.palette.color(QPalette::Highlight)); + } + + painter->translate(option.rect.topLeft()); + doc.drawContents(painter, QRectF(QPointF(0, 0), QSizeF(option.rect.size()))); + painter->restore(); + } + + QSize HtmlDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { + QString html = index.model()->data(index, Qt::DisplayRole).toString(); + QTextDocument doc; + doc.setHtml(html); + doc.setTextWidth(option.rect.width()); + return QSize(doc.idealWidth(), doc.size().height()); + } + + + diff --git a/HtmlDelegate.h b/HtmlDelegate.h new file mode 100644 index 0000000..35e0c7f --- /dev/null +++ b/HtmlDelegate.h @@ -0,0 +1,23 @@ +#ifndef HTMLDELEGATE_H +#define HTMLDELEGATE_H + +#include +#include +#include +#include + +class HtmlDelegate : public QAbstractItemDelegate +{ + Q_OBJECT +public: + explicit HtmlDelegate(QObject *parent = 0); + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; + +signals: + +public slots: +}; + +#endif // HTMLDELEGATE_H + diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp new file mode 100644 index 0000000..5f918d2 --- /dev/null +++ b/InkJetPrinter.cpp @@ -0,0 +1,3252 @@ +#include "InkJetPrinter.h" +#include "ui_inkjetprinter.h" +#include "QDebug" +#include "LogInfo.h" +#include "mainwindow.h" +#include "./Network/NetworkManager.h" +#include "ZkEdit.h" +#include "myinclude.h" +//#include "PIDController/fuzzy_PID.h" +#include +// ℃℉㎡±ΦφΩ◆✪@☢*✿❧ + + +//#define DEBUG_CNT +#define MAX_VOL 300 +#define MIN_VOL 0 +void PID_init(); +#define ONLYCNTCLEAR + +static bool firstTime = 1; +InkJetPrinter::InkJetPrinter(QWidget *parent) : + QTabWidget(parent), + ui(new Ui::InkJetPrinter) +{ + + system("ifconfig eth1 down"); + system("rm /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/*.ttf > tty1"); + + ui->setupUi(this); + + SysPara *para = new SysPara(); + + // t_label = new QLabel(); + // t_label->setWindowFlags(Qt::WindowStaysOnTopHint); + // t_label->setGeometry(0,0,640,480); + // t_label->setPixmap(QPixmap(QString::fromUtf8(":/image/Turkey_logo.png"))); + + bindSysPara(para); + + ui->tabMainWindow->bindSysPara(para); + sysPara->status.InkOrSOLVEmptyCnt=0; + + t1.start();//calandar_and_dat_t + fileTransceiv = new FileTranseceiver(5001); + QObject::connect(fileTransceiv,SIGNAL(fileRecieved(QString)),this,SLOT(recievedFile2Save(QString))); + fileTransceiv->start(); + + //edit@12-30 + tcpTransceiv = new FileTranseceiver(5002); + tcpTransceiv->start(); + connect (tcpTransceiv,SIGNAL(printer_operate_0x01()),ui->tabMainWindow,SLOT(printer_operate_launch()));//启动指令 + connect (ui->tabMainWindow,SIGNAL(printer_operate_launch_result(int)),tcpTransceiv,SLOT(printer_operate_0x01_result(int)),Qt::DirectConnection);//启动指令-回收槽就绪 + connect (tcpTransceiv,SIGNAL(printer_operate_0x02()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()));//停止指令 + connect (tcpTransceiv,SIGNAL(printer_operate_0x03(QString)),ui->tabMainWindow,SLOT(print_data_comein(QString)));//喷码指令 + connect (tcpTransceiv,SIGNAL(printer_operate_0x04()),ui->tabMainWindow,SLOT(query_print_queue()));//获取缓存指令 + connect (ui->tabMainWindow,SIGNAL(WriteInstructionCodeAck(int,QByteArray)),tcpTransceiv,SLOT(WriteInstructionCodeAck(int,QByteArray)),Qt::DirectConnection); + connect (tcpTransceiv,SIGNAL(clear_DataCache()),ui->tabMainWindow,SLOT(clearPrintDataQueue()));//清空缓存指令 + connect (tcpTransceiv,SIGNAL(drop_NextSignal()),ui->tabMainWindow,SLOT(drop_NextSignalHandler()));//清空缓存指令 + + connect(ui->tabPrintSetting,SIGNAL(HiddenFunction(bool)),ui->tabMainWindow->getTexteditOption(),SLOT(SetHiddenValue(bool))); + ui->tabMainWindow->SetEditMode(sysPara->para.EditMode); + ui->tabOtherInfo->bindSysPara(para); + ui->tabPrintSetting->bindSysPara(para); + ui->tabSystemSetting->bindSysPara(para); + ui->tabOtherInfo->bindSysPara(para); + ui->tabTriggerMode->bindSysPara(para); + ui->tabSystemManage->bindSysPara(para); + ui->tabPicEdit->bindSysPara(para); + //#ifdef __NETWORKMANAGER__ +#if 1 + ui->tabNetworkManager->bindSysPara(para); +#else + //ui->tabNetworkManager->deleteLater(); + removeTab(9); +#endif + + //以下两个信号要在(ui->tabMainWindow->updateSysParaToUI();)之前绑定,否则获取不到文本框的更新值 + connect (ui->tabTriggerMode,SIGNAL(autoUpdateFontWidthByTriggerCtrl(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); + connect (ui->tabMainWindow,SIGNAL(autoUpdateFontWidthByMainWindow(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); + ui->tabMainWindow->updateSysParaToUI(); + + ui->tabPrintSetting->updateSysParaToUI(); + ui->tabPrintSetting->getFpgaVersionSetDisable(); + ui->tabSystemSetting->updateSysParaToUI(); + ui->tabOtherInfo->updateSysParaToUI(); + ui->tabTriggerMode->updateSysParaToUI(); + + dlgShowMsg =new DlgShowMsg; + dlgShowMsg->hide(); + + timer = new QTimer(); + connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); + timer->start(10); + + viscosity_timer = new QTimer(); + connect(viscosity_timer, SIGNAL(timeout()), this, SLOT(viscosity_timerHandler())); + + jd_timer = new QTimer(); + connect(jd_timer, SIGNAL(timeout()), this, SLOT(jd_timerHandler())); + jd_timer->start(500); + jd_res = 0; + if(sysPara->para.gearPumpEnable) + { + pushButtonStartFlag = true; + } + //connect(this,SIGNAL(SpeedOver(int)),this,SLOT(OnSpeedOver(int))); + + connect(this,SIGNAL(currentChanged(int)),this,SLOT(onInkJetPrinterCurrentChanged(int))); + connect(this,SIGNAL(setReclaimTankCurrentPos(int)),ui->tabMainWindow,SLOT(onReclainTankPositionChanged(int))); + + connect(this,SIGNAL(reclaimTankCloseDone()),ui->tabMainWindow,SLOT(checkForPowerOff())); + connect(this,SIGNAL(reclaimTankBlock()),this,SLOT(onReclaimTankBlock())); + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),this,SLOT(onAuthChanged(int))); + connect (this,SIGNAL(sendPicScene(PicScene*)),ui->tabPrintSetting,SLOT(updateUIForSpecialCondition(PicScene*))); + + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabOtherInfo,SLOT(onAuthChanged(int))); + //test + connect(ui->tabMainWindow,SIGNAL(InkjetCleanUP()),ui->tabSystemSetting,SLOT(on_pushButtonCleanUP_pressed())); + connect(ui->tabMainWindow,SIGNAL(clearPressureFault()),this,SLOT(resetPressureCnt())); + connect(ui->tabSystemSetting,SIGNAL(pressureAdjust()),this,SLOT(pressureAdjustForsystemseeting())); + +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + connect(this,SIGNAL(updateCnt1GroupDisp(bool)),ui->tabPrintSetting,SLOT(onUpdateCnt1GroupDisp(bool))); +#endif + + msgtest = new QMessageBox(this); + connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); + +#ifdef MIMA + connect(ui->tabPrintSetting->dlgInputAddr,SIGNAL(printErrorStatus(QString,unsigned int)),this,SLOT(onPrintErrorStatus(QString,unsigned int)));// +#endif + connect(ui->tabSystemSetting,SIGNAL(changeEditMode(int)),this,SLOT(onchangeEditMode(int))); + // connect(ui->tabSystemSetting,SIGNAL(changeEditMode(int)),ui->tabMainWindow,SLOT(changeEditMode(int))); + connect(ui->tabSystemSetting,SIGNAL(setRunStatus(QString )),ui->tabMainWindow,SLOT(setRunStatus(QString))); + + + connect(ui->tabSystemManage,SIGNAL(enableReclaimButton(bool)),ui->tabMainWindow,SLOT(onEnableReclaimCtrlButton(bool))); + connect(ui->tabSystemManage,SIGNAL(configChanged(void)),this,SLOT(onConfigChanged(void))); + connect(ui->tabPrintSetting, SIGNAL(change_OutputPulse()), ui->tabTriggerMode, SLOT(OutputPulse())); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabSystemSetting,SLOT( SystemupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabOtherInfo,SLOT( OtherupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabTriggerMode,SLOT( TriggerupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabMainWindow->getTexteditOption(),SLOT( updateSysParaToZero() )); + connect (ui->tabMainWindow,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + //if(sysPara->para.EditMode==PICFILE){ + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabPicEdit,SLOT(updateAuthorization(int)));// 字库编辑使能 + connect (ui->tabPicEdit,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + connect (ui->tabPicEdit ,SIGNAL(openCurrentFile (QString ,bool )),ui->tabMainWindow,SLOT(openPicFIleOpen(QString ,bool ))); + connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),ui->tabPicEdit,SLOT( EditCurrFile(QString))); + connect (ui->tabPicEdit ,SIGNAL(setMainTabEdit (int)),ui->tabMainWindow,SLOT(SetMainTabEdit(int))); + //} + //connect (ui->tabPrintSetting,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + + connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),this,SLOT(onChangeTab(QString))); + + connect (ui->tabMainWindow,SIGNAL(CloseJd()),this,SLOT(close_jd_timer())); + connect (ui->tabMainWindow,SIGNAL(pushButtonStartPressed(bool)),this,SLOT(handlePushButtonStartPressed(bool))); + connect (ui->tabMainWindow,SIGNAL(repeatInitedPid()),this,SLOT(handleInitedPID())); + connect (ui->tabMainWindow,SIGNAL(setCNT1Select(bool)),ui->tabPrintSetting,SLOT(setCNT1BackColor(bool))); + connect (ui->tabMainWindow,SIGNAL(setCNT2Select(bool)),ui->tabPrintSetting,SLOT(setCNT2BackColor(bool))); + connect (ui->tabMainWindow,SIGNAL(setCNT3Select(bool)),ui->tabPrintSetting,SLOT(setCNT3BackColor(bool))); + connect(ui->tabMainWindow,SIGNAL(setDisableAll()),this,SLOT(disableTabClick())); + + sysPara->status.rWarnViscoReady=0; + +#ifdef SYS_LINUX + onAuthChanged(AUTH_NONE); +#else + onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); +#endif + + + + sysPara->status.WorkTimeOut=0; + ui->tabMainWindow->changeEditMode(0); + emit onchangeEditMode(0); // 20140912 + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); +#ifdef MYTEST + onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); +#else + ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); +#endif + sysPara->status.viscosityFaultCnt=0; + setCurrentIndex(0); + sysPara->status.updateSoftEN=0; + sysPara->status.adjHightVolInitEN=0; + sysPara->status.FileChangeRestCntFlag=0; + sysPara->status.HVFaultCloseEn=0; + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + sysPara->devOp->writeFpgaCalandar(1);// + //qDebug()<para.calandar_and_dat.year; + sysPara->status.cnt1GroupRunningIndex=0; + //sysPara->status.cnt1RepeatCurrent=0; + sysPara->status.cnt1GroupCurrentLoop=0; + + //JSON data + connect(ui->tabNetworkManager, SIGNAL(updateJSONData()), ui->tabMainWindow, SLOT(JSON_UpdateDATA()), Qt::QueuedConnection); + connect(ui->tabNetworkManager,SIGNAL(net_stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); + connect(ui->tabMainWindow,SIGNAL(getJSONData()),ui->tabNetworkManager,SLOT(on_GetJsonpushButton_clicked()), Qt::QueuedConnection); + connect(ui->tabNetworkManager,SIGNAL(OpenNewFile()),ui->tabMainWindow->getTexteditOption(),SLOT(onOpenNewFile()), Qt::QueuedConnection); + //JSON data +#ifdef MODBUS + + modbus = NULL; + memset((uint8_t *)&sysPara->modbusParas, 0, sizeof(sysPara->modbusParas)); + sysPara->modbusStatus.receiveEnbleFlag = 1; + snprintf((char *)sysPara->modbusParas.selectFileName, sizeof(sysPara->modbusParas.selectFileName), "%s",QFileInfo(sysPara->para.lastOpenedFileName).fileName().toAscii().constData()); + modbus = new ModbusTcp(&sysPara->modbusParas, &sysPara->modbusStatus); + connect(modbus, SIGNAL(updateQRcode()), ui->tabMainWindow, SLOT(modbusUpdateQRCode()), Qt::QueuedConnection); + connect(modbus, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); + connect(modbus, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); + connect(modbus, SIGNAL(pausePrint()), ui->tabMainWindow, SLOT(on_pushButtonPausePrint_pressed()), Qt::QueuedConnection);//暂时屏蔽排除问题 + connect(modbus,SIGNAL(stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar()),this,SLOT(onModbusWriteCalendar()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar1()),this,SLOT(onModbusWriteCalendar1CurrValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar1EndValue()),this,SLOT(onModbusWriteCalendar1EndValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2EndValue()),this,SLOT(onModbusWriteCalendar2EndValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2RepeatValue()),this,SLOT(onModbusWriteCalendar2RepeatValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2InitValue()),this,SLOT(onModbusWriteCalendar2InitValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(CNTResetNow()),ui->tabMainWindow,SLOT(onModbusCNTResetNowPressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(faultResume()),ui->tabMainWindow,SLOT(onLabelFaultRusumePressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(receivedPrintContent(int)),ui->tabMainWindow,SLOT(onModbusPrintReceivedContent(int)), Qt::QueuedConnection); + connect(modbus,SIGNAL(mbLineAndCharSpace(int, int)),ui->tabMainWindow->getTexteditOption(),SLOT(onMbSetLineAndChar(int, int)), Qt::QueuedConnection); + connect(this,SIGNAL(updataPara2UI()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() ), Qt::QueuedConnection); + connect(this, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); + connect(this, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); +#endif + + ui->tabMainWindow->enableReclaimCtrlButton(false); + + + + + //edit@12-14 + connect(this,SIGNAL(currentChanged(int)),ui->tabMainWindow,SLOT(onInkJetPrinterCurrentChanged(int)), Qt::QueuedConnection); +#ifdef __STC_POWER__ + if(sysPara->devOp->getPowerSource() == POWER_SOURCE_TIMER) + { + sysPara->status.powerSource = POWER_SOURCE_TIMER; + sysPara->status.needPowerOffTimerout = 1; + sysPara->status.waitPowerOffTime = 18; //运行半个钟 + LogInfo::setRunStatusText(tr("定时开机")); + //qDebug()<<"power by:"<< sysPara->status.powerSource; + } + else + { + sysPara->status.powerSource = POWER_SOURCE_KEY; + sysPara->status.needPowerOffTimerout = 0; + } + //sysPara->devOp->setWakeUpTimer(3); + qDebug()<<"power by:"<< sysPara->status.powerSource; +#endif + //pidControllerInit(); + PID_init(); + + +#ifndef __DAC_ADJ_FUNCTION__ + qDebug()<<"__DAC_ADJ_FUNCTION__"; + removeTab(indexOf(ui->tabDacAdjust)); + removeTab(indexOf(ui->tabFpgaDebug)); +#else + + // qDebug()<<"!!!!!!!!!!!!!!!!!!!!deleteLater"; + + removeTab(indexOf(ui->tabDacAdjust)); + removeTab(indexOf(ui->tabFpgaDebug)); + // removeTab(indexOf(ui->tabNetworkManager)); + ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tab_3)); + + ui->vol0SpinBox->setMinimum(0); + ui->vol1SpinBox->setMinimum(0); + ui->vol2SpinBox->setMinimum(0); + ui->vol3SpinBox->setMinimum(0); + ui->vol4SpinBox->setMinimum(0); + ui->vol5SpinBox->setMinimum(0); + ui->vol6SpinBox->setMinimum(0); + ui->vol7SpinBox->setMinimum(0); + ui->vol8SpinBox->setMinimum(0); + ui->vol9SpinBox->setMinimum(0); + ui->vol10SpinBox->setMinimum(0); + ui->vol11SpinBox->setMinimum(0); + ui->vol12SpinBox->setMinimum(0); + ui->vol13SpinBox->setMinimum(0); + ui->vol14SpinBox->setMinimum(0); + ui->vol15SpinBox->setMinimum(0); + ui->vol16SpinBox->setMinimum(0); + ui->vol17SpinBox->setMinimum(0); + ui->vol18SpinBox->setMinimum(0); + ui->vol19SpinBox->setMinimum(0); + ui->vol20SpinBox->setMinimum(0); + ui->vol21SpinBox->setMinimum(0); + ui->vol22SpinBox->setMinimum(0); + ui->vol23SpinBox->setMinimum(0); + ui->vol24SpinBox->setMinimum(0); + ui->vol25SpinBox->setMinimum(0); + ui->vol26SpinBox->setMinimum(0); + ui->vol27SpinBox->setMinimum(0); + ui->vol28SpinBox->setMinimum(0); + ui->vol29SpinBox->setMinimum(0); + ui->vol30SpinBox->setMinimum(0); + ui->vol31SpinBox->setMinimum(0); + ui->vol32SpinBox->setMinimum(0); + ui->vol33SpinBox->setMinimum(0); + ui->vol34SpinBox->setMinimum(0); + ui->vol35SpinBox->setMinimum(0); + ui->vol36SpinBox->setMinimum(0); + ui->vol37SpinBox->setMinimum(0); + ui->vol38SpinBox->setMinimum(0); + ui->vol39SpinBox->setMinimum(0); + + ui->vol0SpinBox->setMaximum(MAX_VOL); + ui->vol1SpinBox->setMaximum(MAX_VOL); + ui->vol2SpinBox->setMaximum(MAX_VOL); + ui->vol3SpinBox->setMaximum(MAX_VOL); + ui->vol4SpinBox->setMaximum(MAX_VOL); + ui->vol5SpinBox->setMaximum(MAX_VOL); + ui->vol6SpinBox->setMaximum(MAX_VOL); + ui->vol7SpinBox->setMaximum(MAX_VOL); + ui->vol8SpinBox->setMaximum(MAX_VOL); + ui->vol9SpinBox->setMaximum(MAX_VOL); + ui->vol10SpinBox->setMaximum(MAX_VOL); + ui->vol11SpinBox->setMaximum(MAX_VOL); + ui->vol12SpinBox->setMaximum(MAX_VOL); + ui->vol13SpinBox->setMaximum(MAX_VOL); + ui->vol14SpinBox->setMaximum(MAX_VOL); + ui->vol15SpinBox->setMaximum(MAX_VOL); + ui->vol16SpinBox->setMaximum(MAX_VOL); + ui->vol17SpinBox->setMaximum(MAX_VOL); + ui->vol18SpinBox->setMaximum(MAX_VOL); + ui->vol19SpinBox->setMaximum(MAX_VOL); + ui->vol20SpinBox->setMaximum(MAX_VOL); + ui->vol21SpinBox->setMaximum(MAX_VOL); + ui->vol22SpinBox->setMaximum(MAX_VOL); + ui->vol23SpinBox->setMaximum(MAX_VOL); + ui->vol24SpinBox->setMaximum(MAX_VOL); + ui->vol25SpinBox->setMaximum(MAX_VOL); + ui->vol26SpinBox->setMaximum(MAX_VOL); + ui->vol27SpinBox->setMaximum(MAX_VOL); + ui->vol28SpinBox->setMaximum(MAX_VOL); + ui->vol29SpinBox->setMaximum(MAX_VOL); + ui->vol30SpinBox->setMaximum(MAX_VOL); + ui->vol31SpinBox->setMaximum(MAX_VOL); + ui->vol32SpinBox->setMaximum(MAX_VOL); + ui->vol33SpinBox->setMaximum(MAX_VOL); + ui->vol34SpinBox->setMaximum(MAX_VOL); + ui->vol35SpinBox->setMaximum(MAX_VOL); + ui->vol36SpinBox->setMaximum(MAX_VOL); + ui->vol37SpinBox->setMaximum(MAX_VOL); + ui->vol38SpinBox->setMaximum(MAX_VOL); + ui->vol39SpinBox->setMaximum(MAX_VOL); + + ui->fvol0SpinBox->setMinimum(0); + ui->fvol1SpinBox->setMinimum(0); + ui->fvol2SpinBox->setMinimum(0); + ui->fvol3SpinBox->setMinimum(0); + ui->fvol4SpinBox->setMinimum(0); + ui->fvol5SpinBox->setMinimum(0); + ui->fvol6SpinBox->setMinimum(0); + ui->fvol7SpinBox->setMinimum(0); + ui->fvol8SpinBox->setMinimum(0); + ui->fvol9SpinBox->setMinimum(0); + ui->fvol10SpinBox->setMinimum(0); + ui->fvol11SpinBox->setMinimum(0); + ui->fvol12SpinBox->setMinimum(0); + ui->fvol13SpinBox->setMinimum(0); + ui->fvol14SpinBox->setMinimum(0); + ui->fvol15SpinBox->setMinimum(0); + ui->fvol16SpinBox->setMinimum(0); + ui->fvol17SpinBox->setMinimum(0); + ui->fvol18SpinBox->setMinimum(0); + ui->fvol19SpinBox->setMinimum(0); + ui->fvol20SpinBox->setMinimum(0); + ui->fvol21SpinBox->setMinimum(0); + ui->fvol22SpinBox->setMinimum(0); + ui->fvol23SpinBox->setMinimum(0); + ui->fvol24SpinBox->setMinimum(0); + ui->fvol25SpinBox->setMinimum(0); + ui->fvol26SpinBox->setMinimum(0); + ui->fvol27SpinBox->setMinimum(0); + ui->fvol28SpinBox->setMinimum(0); + ui->fvol29SpinBox->setMinimum(0); + ui->fvol30SpinBox->setMinimum(0); + ui->fvol31SpinBox->setMinimum(0); + ui->fvol32SpinBox->setMinimum(0); + ui->fvol33SpinBox->setMinimum(0); + ui->fvol34SpinBox->setMinimum(0); + ui->fvol35SpinBox->setMinimum(0); + ui->fvol36SpinBox->setMinimum(0); + ui->fvol37SpinBox->setMinimum(0); + ui->fvol38SpinBox->setMinimum(0); + ui->fvol39SpinBox->setMinimum(0); + + ui->fvol0SpinBox->setMaximum(MAX_VOL); + ui->fvol1SpinBox->setMaximum(MAX_VOL); + ui->fvol2SpinBox->setMaximum(MAX_VOL); + ui->fvol3SpinBox->setMaximum(MAX_VOL); + ui->fvol4SpinBox->setMaximum(MAX_VOL); + ui->fvol5SpinBox->setMaximum(MAX_VOL); + ui->fvol6SpinBox->setMaximum(MAX_VOL); + ui->fvol7SpinBox->setMaximum(MAX_VOL); + ui->fvol8SpinBox->setMaximum(MAX_VOL); + ui->fvol9SpinBox->setMaximum(MAX_VOL); + ui->fvol10SpinBox->setMaximum(MAX_VOL); + ui->fvol11SpinBox->setMaximum(MAX_VOL); + ui->fvol12SpinBox->setMaximum(MAX_VOL); + ui->fvol13SpinBox->setMaximum(MAX_VOL); + ui->fvol14SpinBox->setMaximum(MAX_VOL); + ui->fvol15SpinBox->setMaximum(MAX_VOL); + ui->fvol16SpinBox->setMaximum(MAX_VOL); + ui->fvol17SpinBox->setMaximum(MAX_VOL); + ui->fvol18SpinBox->setMaximum(MAX_VOL); + ui->fvol19SpinBox->setMaximum(MAX_VOL); + ui->fvol20SpinBox->setMaximum(MAX_VOL); + ui->fvol21SpinBox->setMaximum(MAX_VOL); + ui->fvol22SpinBox->setMaximum(MAX_VOL); + ui->fvol23SpinBox->setMaximum(MAX_VOL); + ui->fvol24SpinBox->setMaximum(MAX_VOL); + ui->fvol25SpinBox->setMaximum(MAX_VOL); + ui->fvol26SpinBox->setMaximum(MAX_VOL); + ui->fvol27SpinBox->setMaximum(MAX_VOL); + ui->fvol28SpinBox->setMaximum(MAX_VOL); + ui->fvol29SpinBox->setMaximum(MAX_VOL); + ui->fvol30SpinBox->setMaximum(MAX_VOL); + ui->fvol31SpinBox->setMaximum(MAX_VOL); + ui->fvol32SpinBox->setMaximum(MAX_VOL); + ui->fvol33SpinBox->setMaximum(MAX_VOL); + ui->fvol34SpinBox->setMaximum(MAX_VOL); + ui->fvol35SpinBox->setMaximum(MAX_VOL); + ui->fvol36SpinBox->setMaximum(MAX_VOL); + ui->fvol37SpinBox->setMaximum(MAX_VOL); + ui->fvol38SpinBox->setMaximum(MAX_VOL); + ui->fvol39SpinBox->setMaximum(MAX_VOL); + + ui->cVol0SpinBox->setMinimum(0); + ui->cVol1SpinBox->setMinimum(0); + ui->cVol2SpinBox->setMinimum(0); + ui->cVol3SpinBox->setMinimum(0); + ui->cVol4SpinBox->setMinimum(0); + ui->cVol5SpinBox->setMinimum(0); + ui->cVol6SpinBox->setMinimum(0); + ui->cVol7SpinBox->setMinimum(0); + ui->cVol8SpinBox->setMinimum(0); + ui->cVol9SpinBox->setMinimum(0); + ui->cVol10SpinBox->setMinimum(0); + ui->cVol11SpinBox->setMinimum(0); + ui->cVol12SpinBox->setMinimum(0); + ui->cVol13SpinBox->setMinimum(0); + ui->cVol14SpinBox->setMinimum(0); + ui->cVol15SpinBox->setMinimum(0); + ui->cVol16SpinBox->setMinimum(0); + ui->cVol17SpinBox->setMinimum(0); + ui->cVol18SpinBox->setMinimum(0); + ui->cVol19SpinBox->setMinimum(0); + ui->cVol20SpinBox->setMinimum(0); + ui->cVol21SpinBox->setMinimum(0); + ui->cVol22SpinBox->setMinimum(0); + ui->cVol23SpinBox->setMinimum(0); + ui->cVol24SpinBox->setMinimum(0); + ui->cVol25SpinBox->setMinimum(0); + ui->cVol26SpinBox->setMinimum(0); + ui->cVol27SpinBox->setMinimum(0); + ui->cVol28SpinBox->setMinimum(0); + ui->cVol29SpinBox->setMinimum(0); + ui->cVol30SpinBox->setMinimum(0); + ui->cVol31SpinBox->setMinimum(0); + ui->cVol32SpinBox->setMinimum(0); + ui->cVol33SpinBox->setMinimum(0); + ui->cVol34SpinBox->setMinimum(0); + ui->cVol35SpinBox->setMinimum(0); + ui->cVol36SpinBox->setMinimum(0); + ui->cVol37SpinBox->setMinimum(0); + ui->cVol38SpinBox->setMinimum(0); + ui->cVol39SpinBox->setMinimum(0); + + ui->cVol0SpinBox->setMaximum(MAX_VOL); + ui->cVol1SpinBox->setMaximum(MAX_VOL); + ui->cVol2SpinBox->setMaximum(MAX_VOL); + ui->cVol3SpinBox->setMaximum(MAX_VOL); + ui->cVol4SpinBox->setMaximum(MAX_VOL); + ui->cVol5SpinBox->setMaximum(MAX_VOL); + ui->cVol6SpinBox->setMaximum(MAX_VOL); + ui->cVol7SpinBox->setMaximum(MAX_VOL); + ui->cVol8SpinBox->setMaximum(MAX_VOL); + ui->cVol9SpinBox->setMaximum(MAX_VOL); + ui->cVol10SpinBox->setMaximum(MAX_VOL); + ui->cVol11SpinBox->setMaximum(MAX_VOL); + ui->cVol12SpinBox->setMaximum(MAX_VOL); + ui->cVol13SpinBox->setMaximum(MAX_VOL); + ui->cVol14SpinBox->setMaximum(MAX_VOL); + ui->cVol15SpinBox->setMaximum(MAX_VOL); + ui->cVol16SpinBox->setMaximum(MAX_VOL); + ui->cVol17SpinBox->setMaximum(MAX_VOL); + ui->cVol18SpinBox->setMaximum(MAX_VOL); + ui->cVol19SpinBox->setMaximum(MAX_VOL); + ui->cVol20SpinBox->setMaximum(MAX_VOL); + ui->cVol21SpinBox->setMaximum(MAX_VOL); + ui->cVol22SpinBox->setMaximum(MAX_VOL); + ui->cVol23SpinBox->setMaximum(MAX_VOL); + ui->cVol24SpinBox->setMaximum(MAX_VOL); + ui->cVol25SpinBox->setMaximum(MAX_VOL); + ui->cVol26SpinBox->setMaximum(MAX_VOL); + ui->cVol27SpinBox->setMaximum(MAX_VOL); + ui->cVol28SpinBox->setMaximum(MAX_VOL); + ui->cVol29SpinBox->setMaximum(MAX_VOL); + ui->cVol30SpinBox->setMaximum(MAX_VOL); + ui->cVol31SpinBox->setMaximum(MAX_VOL); + ui->cVol32SpinBox->setMaximum(MAX_VOL); + ui->cVol33SpinBox->setMaximum(MAX_VOL); + ui->cVol34SpinBox->setMaximum(MAX_VOL); + ui->cVol35SpinBox->setMaximum(MAX_VOL); + ui->cVol36SpinBox->setMaximum(MAX_VOL); + ui->cVol37SpinBox->setMaximum(MAX_VOL); + ui->cVol38SpinBox->setMaximum(MAX_VOL); + ui->cVol39SpinBox->setMaximum(MAX_VOL); + + loadVoltageValue(); + connect(ui->savePushButton,SIGNAL(clicked()), this,SLOT( DacAdjustStore())); +#endif +#ifdef __FPGA_DEBUG__ + connect(ui->fpgaWriteBytePushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugWriteByte())); + connect(ui->fpgaReadBytePushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugReadByte())); + + connect(ui->fpgaWriteWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugWriteWord())); + connect(ui->fpgaReadWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugReadWord())); + + connect(ui->fpgaWriteDWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugWriteDWord())); + connect(ui->fpgaReadDWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugReadDWord())); +#endif + sysPara->status.statWarn = sysPara->status.statWarn | WARN_STATUS_INK_WARN; //先置墨水标示为1 + sleep(3); +} + + +void InkJetPrinter::loadVoltageValue() +{ +#ifdef __DAC_ADJ_FUNCTION__ + ui->vol0SpinBox->setValue(sysPara->para.printed_adj_dac[0]); + ui->vol1SpinBox->setValue(sysPara->para.printed_adj_dac[1]); + ui->vol2SpinBox->setValue(sysPara->para.printed_adj_dac[2]); + ui->vol3SpinBox->setValue(sysPara->para.printed_adj_dac[3]); + ui->vol4SpinBox->setValue(sysPara->para.printed_adj_dac[4]); + ui->vol5SpinBox->setValue(sysPara->para.printed_adj_dac[5]); + ui->vol6SpinBox->setValue(sysPara->para.printed_adj_dac[6]); + ui->vol7SpinBox->setValue(sysPara->para.printed_adj_dac[7]); + ui->vol8SpinBox->setValue(sysPara->para.printed_adj_dac[8]); + ui->vol9SpinBox->setValue(sysPara->para.printed_adj_dac[9]); + + ui->vol10SpinBox->setValue(sysPara->para.printed_adj_dac[10]); + ui->vol11SpinBox->setValue(sysPara->para.printed_adj_dac[11]); + ui->vol12SpinBox->setValue(sysPara->para.printed_adj_dac[12]); + ui->vol13SpinBox->setValue(sysPara->para.printed_adj_dac[13]); + ui->vol14SpinBox->setValue(sysPara->para.printed_adj_dac[14]); + ui->vol15SpinBox->setValue(sysPara->para.printed_adj_dac[15]); + ui->vol16SpinBox->setValue(sysPara->para.printed_adj_dac[16]); + ui->vol17SpinBox->setValue(sysPara->para.printed_adj_dac[17]); + ui->vol18SpinBox->setValue(sysPara->para.printed_adj_dac[18]); + ui->vol19SpinBox->setValue(sysPara->para.printed_adj_dac[19]); + + ui->vol20SpinBox->setValue(sysPara->para.printed_adj_dac[20]); + ui->vol21SpinBox->setValue(sysPara->para.printed_adj_dac[21]); + ui->vol22SpinBox->setValue(sysPara->para.printed_adj_dac[22]); + ui->vol23SpinBox->setValue(sysPara->para.printed_adj_dac[23]); + ui->vol24SpinBox->setValue(sysPara->para.printed_adj_dac[24]); + ui->vol25SpinBox->setValue(sysPara->para.printed_adj_dac[25]); + ui->vol26SpinBox->setValue(sysPara->para.printed_adj_dac[26]); + ui->vol27SpinBox->setValue(sysPara->para.printed_adj_dac[27]); + ui->vol28SpinBox->setValue(sysPara->para.printed_adj_dac[28]); + ui->vol29SpinBox->setValue(sysPara->para.printed_adj_dac[29]); + + ui->vol30SpinBox->setValue(sysPara->para.printed_adj_dac[30]); + ui->vol31SpinBox->setValue(sysPara->para.printed_adj_dac[31]); + ui->vol32SpinBox->setValue(sysPara->para.printed_adj_dac[32]); + ui->vol33SpinBox->setValue(sysPara->para.printed_adj_dac[33]); + ui->vol34SpinBox->setValue(sysPara->para.printed_adj_dac[34]); + ui->vol35SpinBox->setValue(sysPara->para.printed_adj_dac[35]); + ui->vol36SpinBox->setValue(sysPara->para.printed_adj_dac[36]); + ui->vol37SpinBox->setValue(sysPara->para.printed_adj_dac[37]); + ui->vol38SpinBox->setValue(sysPara->para.printed_adj_dac[38]); + ui->vol39SpinBox->setValue(sysPara->para.printed_adj_dac[39]); + + ui->cVol0SpinBox->setValue(sysPara->para.printed_continue_col_dac[0]); + ui->cVol1SpinBox->setValue(sysPara->para.printed_continue_col_dac[1]); + ui->cVol2SpinBox->setValue(sysPara->para.printed_continue_col_dac[2]); + ui->cVol3SpinBox->setValue(sysPara->para.printed_continue_col_dac[3]); + ui->cVol4SpinBox->setValue(sysPara->para.printed_continue_col_dac[4]); + ui->cVol5SpinBox->setValue(sysPara->para.printed_continue_col_dac[5]); + ui->cVol6SpinBox->setValue(sysPara->para.printed_continue_col_dac[6]); + ui->cVol7SpinBox->setValue(sysPara->para.printed_continue_col_dac[7]); + ui->cVol8SpinBox->setValue(sysPara->para.printed_continue_col_dac[8]); + ui->cVol9SpinBox->setValue(sysPara->para.printed_continue_col_dac[9]); + + ui->cVol10SpinBox->setValue(sysPara->para.printed_continue_col_dac[10]); + ui->cVol11SpinBox->setValue(sysPara->para.printed_continue_col_dac[11]); + ui->cVol12SpinBox->setValue(sysPara->para.printed_continue_col_dac[12]); + ui->cVol13SpinBox->setValue(sysPara->para.printed_continue_col_dac[13]); + ui->cVol14SpinBox->setValue(sysPara->para.printed_continue_col_dac[14]); + ui->cVol15SpinBox->setValue(sysPara->para.printed_continue_col_dac[15]); + ui->cVol16SpinBox->setValue(sysPara->para.printed_continue_col_dac[16]); + ui->cVol17SpinBox->setValue(sysPara->para.printed_continue_col_dac[17]); + ui->cVol18SpinBox->setValue(sysPara->para.printed_continue_col_dac[18]); + ui->cVol19SpinBox->setValue(sysPara->para.printed_continue_col_dac[19]); + + ui->cVol20SpinBox->setValue(sysPara->para.printed_continue_col_dac[20]); + ui->cVol21SpinBox->setValue(sysPara->para.printed_continue_col_dac[21]); + ui->cVol22SpinBox->setValue(sysPara->para.printed_continue_col_dac[22]); + ui->cVol23SpinBox->setValue(sysPara->para.printed_continue_col_dac[23]); + ui->cVol24SpinBox->setValue(sysPara->para.printed_continue_col_dac[24]); + ui->cVol25SpinBox->setValue(sysPara->para.printed_continue_col_dac[25]); + ui->cVol26SpinBox->setValue(sysPara->para.printed_continue_col_dac[26]); + ui->cVol27SpinBox->setValue(sysPara->para.printed_continue_col_dac[27]); + ui->cVol28SpinBox->setValue(sysPara->para.printed_continue_col_dac[28]); + ui->cVol29SpinBox->setValue(sysPara->para.printed_continue_col_dac[29]); + + ui->cVol30SpinBox->setValue(sysPara->para.printed_continue_col_dac[30]); + ui->cVol31SpinBox->setValue(sysPara->para.printed_continue_col_dac[31]); + ui->cVol32SpinBox->setValue(sysPara->para.printed_continue_col_dac[32]); + ui->cVol33SpinBox->setValue(sysPara->para.printed_continue_col_dac[33]); + ui->cVol34SpinBox->setValue(sysPara->para.printed_continue_col_dac[34]); + ui->cVol35SpinBox->setValue(sysPara->para.printed_continue_col_dac[35]); + ui->cVol36SpinBox->setValue(sysPara->para.printed_continue_col_dac[36]); + ui->cVol37SpinBox->setValue(sysPara->para.printed_continue_col_dac[37]); + ui->cVol38SpinBox->setValue(sysPara->para.printed_continue_col_dac[38]); + ui->cVol39SpinBox->setValue(sysPara->para.printed_continue_col_dac[39]); + + ui->fvol0SpinBox->setValue(sysPara->para.printed_full_col_dac[0]); + ui->fvol1SpinBox->setValue(sysPara->para.printed_full_col_dac[1]); + ui->fvol2SpinBox->setValue(sysPara->para.printed_full_col_dac[2]); + ui->fvol3SpinBox->setValue(sysPara->para.printed_full_col_dac[3]); + ui->fvol4SpinBox->setValue(sysPara->para.printed_full_col_dac[4]); + ui->fvol5SpinBox->setValue(sysPara->para.printed_full_col_dac[5]); + ui->fvol6SpinBox->setValue(sysPara->para.printed_full_col_dac[6]); + ui->fvol7SpinBox->setValue(sysPara->para.printed_full_col_dac[7]); + ui->fvol8SpinBox->setValue(sysPara->para.printed_full_col_dac[8]); + ui->fvol9SpinBox->setValue(sysPara->para.printed_full_col_dac[9]); + + ui->fvol10SpinBox->setValue(sysPara->para.printed_full_col_dac[10]); + ui->fvol11SpinBox->setValue(sysPara->para.printed_full_col_dac[11]); + ui->fvol12SpinBox->setValue(sysPara->para.printed_full_col_dac[12]); + ui->fvol13SpinBox->setValue(sysPara->para.printed_full_col_dac[13]); + ui->fvol14SpinBox->setValue(sysPara->para.printed_full_col_dac[14]); + ui->fvol15SpinBox->setValue(sysPara->para.printed_full_col_dac[15]); + ui->fvol16SpinBox->setValue(sysPara->para.printed_full_col_dac[16]); + ui->fvol17SpinBox->setValue(sysPara->para.printed_full_col_dac[17]); + ui->fvol18SpinBox->setValue(sysPara->para.printed_full_col_dac[18]); + ui->fvol19SpinBox->setValue(sysPara->para.printed_full_col_dac[19]); + + ui->fvol20SpinBox->setValue(sysPara->para.printed_full_col_dac[20]); + ui->fvol21SpinBox->setValue(sysPara->para.printed_full_col_dac[21]); + ui->fvol22SpinBox->setValue(sysPara->para.printed_full_col_dac[22]); + ui->fvol23SpinBox->setValue(sysPara->para.printed_full_col_dac[23]); + ui->fvol24SpinBox->setValue(sysPara->para.printed_full_col_dac[24]); + ui->fvol25SpinBox->setValue(sysPara->para.printed_full_col_dac[25]); + ui->fvol26SpinBox->setValue(sysPara->para.printed_full_col_dac[26]); + ui->fvol27SpinBox->setValue(sysPara->para.printed_full_col_dac[27]); + ui->fvol28SpinBox->setValue(sysPara->para.printed_full_col_dac[28]); + ui->fvol29SpinBox->setValue(sysPara->para.printed_full_col_dac[29]); + + ui->fvol30SpinBox->setValue(sysPara->para.printed_full_col_dac[30]); + ui->fvol31SpinBox->setValue(sysPara->para.printed_full_col_dac[31]); + ui->fvol32SpinBox->setValue(sysPara->para.printed_full_col_dac[32]); + ui->fvol33SpinBox->setValue(sysPara->para.printed_full_col_dac[33]); + ui->fvol34SpinBox->setValue(sysPara->para.printed_full_col_dac[34]); + ui->fvol35SpinBox->setValue(sysPara->para.printed_full_col_dac[35]); + ui->fvol36SpinBox->setValue(sysPara->para.printed_full_col_dac[36]); + ui->fvol37SpinBox->setValue(sysPara->para.printed_full_col_dac[37]); + ui->fvol38SpinBox->setValue(sysPara->para.printed_full_col_dac[38]); + ui->fvol39SpinBox->setValue(sysPara->para.printed_full_col_dac[39]); + if(sysPara->para.dacScale < 40 || sysPara->para.dacScale>150) + sysPara->para.dacScale = 100; + //ui->dacScaledSpinBox->setValue(sysPara->para.dacScale); + //memcpy(sysPara->status.printed_adj_dac, sysPara->para.printed_adj_dac, sizeof(sysPara->para.printed_adj_dac)); +#endif +} + +float PID_realize(float speed); + +#if 1 +struct _pid{ + float SetSpeed;//定义设定值 + float ActualSpeed;//定义实际值 + float err;//定义偏差值 + float err_last;//定义上一个偏差值 + float Kp,Ki,Kd;//定义比例、积分、微分系数 + float voltage;//定义电压值(控制执行器的变量) + float integral;//定义积分值 +}pid; +#if 0 +int main() +{ + cout<<"System begin \n"; + PID_init(); + int count=0; + while(count<1000) + { + float speed=PID_realize(200.0); + cout<<"第 "<500) + { + index=0; + } + else + { + index=1; + pid.integral+=pid.err; + } +#endif + pid.voltage=pid.Kp*pid.err + index*pid.Ki*pid.integral + pid.Kd*(pid.err-pid.err_last); + pid.err_last=pid.err; + pid.ActualSpeed =pid.voltage*1.0; + return pid.ActualSpeed; +} +#endif + +#if 0 +struct _pid{ + float SetSpeed; //定义设定值 + float ActualSpeed; //定义实际值 + float err; //定义偏差值 + float err_next; //定义上一个偏差值 + float err_last; //定义最上前的偏差值 + float Kp,Ki,Kd; //定义比例、积分、微分系数 +}pid; + +void PID_init(){ + pid.SetSpeed=0.0; + pid.ActualSpeed=0.0; + pid.err=0.0; + pid.err_last=0.0; + pid.err_next=0.0; + pid.Kp=0.15; + pid.Ki=0.20; + pid.Kd=0.25; +} + +float PID_realize(float speed, float act){ + pid.SetSpeed=speed; + pid.ActualSpeed = act; + pid.err=pid.SetSpeed-pid.ActualSpeed; + float incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last); + pid.ActualSpeed+=incrementSpeed; + pid.err_last=pid.err_next; + pid.err_next=pid.err; + return pid.ActualSpeed; +} +#endif + +//#include + + +void InkJetPrinter::pressureAdj(int type) +{ + //float u, actual; + signed short delta_u; + signed short old = (signed short)sysPara->para.gearPumpValue; + static unsigned int oldPressure = 0; + static qint32 printOut = 0; + if(printOut++%2 !=0) { + return; + } + + int oldTargetPresuure = sysPara->para.pressure; + if(type == 1){ + sysPara->para.pressure = sysPara->para.pressure*1.2; + } + if(!sysPara->status.gearPumpRunStopFlag) + { + if(u > 0 || ((sysPara->para.pressure - sysPara->status.PRESSURE) > 0) ) + { + u=PID_realize((float)sysPara->para.pressure,(float)sysPara->status.PRESSURE); + } + } + //u=PID_realize(350.0,(float)sysPara->status.PRESSURE); + if(u > 0) + { + sysPara->para.gearPumpValue = (unsigned short)u; + } + else + { + sysPara->para.gearPumpValue = 0; + } + + if(sysPara->para.gearPumpValue>800) { + sysPara->para.gearPumpValue = 800; + } + /*********************改回收泵后压力调整*********************************/ + if(sysPara->para.gearPumpValue && sysPara->para.flagOfReclaimPumEnable){ + sysPara->para.gearPumpValue = (sysPara->para.gearPumpValue + old)/2; + if(sysPara->status.selfCheckDone){ + float ratio; + float ratio_c; + ratio = (float)sysPara->status.PRESSURE/sysPara->para.pressure; + if(sysPara->status.PRESSURE < oldPressure){ + if((ratio > 1.02 && ratio < 1.8) || + (ratio > 0.2 && ratio < 0.98)){ + ratio_c = ratio*1.15; + sysPara->para.gearPumpValue = (int)(sysPara->para.gearPumpValue*ratio_c); + } + } + } + if(sysPara->para.gearPumpValue < 60){ + sysPara->para.gearPumpValue = 75; + } + } + /************************************************************/ + + if(sysPara->status.gearPumpRunStopFlag) + { + sysPara->para.gearPumpValue = 0; + } + if(sysPara->status.flagOfSpeedAlarm) + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + oldPressure = sysPara->status.PRESSURE; + sysPara->para.pressure = oldTargetPresuure; +} + +void InkJetPrinter::DacAdjustStore() +{ +#ifdef __DAC_ADJ_FUNCTION__ + sysPara->para.printed_adj_dac[0] = ui->vol0SpinBox->value(); + sysPara->para.printed_adj_dac[1] = ui->vol1SpinBox->value(); + sysPara->para.printed_adj_dac[2] = ui->vol2SpinBox->value(); + sysPara->para.printed_adj_dac[3] = ui->vol3SpinBox->value(); + sysPara->para.printed_adj_dac[4] = ui->vol4SpinBox->value(); + sysPara->para.printed_adj_dac[5] = ui->vol5SpinBox->value(); + sysPara->para.printed_adj_dac[6] = ui->vol6SpinBox->value(); + sysPara->para.printed_adj_dac[7] = ui->vol7SpinBox->value(); + sysPara->para.printed_adj_dac[8] = ui->vol8SpinBox->value(); + sysPara->para.printed_adj_dac[9] = ui->vol9SpinBox->value(); + sysPara->para.printed_adj_dac[10] = ui->vol10SpinBox->value(); + sysPara->para.printed_adj_dac[11] = ui->vol11SpinBox->value(); + sysPara->para.printed_adj_dac[12] = ui->vol12SpinBox->value(); + sysPara->para.printed_adj_dac[13] = ui->vol13SpinBox->value(); + sysPara->para.printed_adj_dac[14] = ui->vol14SpinBox->value(); + sysPara->para.printed_adj_dac[15] = ui->vol15SpinBox->value(); + sysPara->para.printed_adj_dac[16] = ui->vol16SpinBox->value(); + sysPara->para.printed_adj_dac[17] = ui->vol17SpinBox->value(); + sysPara->para.printed_adj_dac[18] = ui->vol18SpinBox->value(); + sysPara->para.printed_adj_dac[19] = ui->vol19SpinBox->value(); + + sysPara->para.printed_adj_dac[20] = ui->vol20SpinBox->value(); + sysPara->para.printed_adj_dac[21] = ui->vol21SpinBox->value(); + sysPara->para.printed_adj_dac[22] = ui->vol22SpinBox->value(); + sysPara->para.printed_adj_dac[23] = ui->vol23SpinBox->value(); + sysPara->para.printed_adj_dac[24] = ui->vol24SpinBox->value(); + sysPara->para.printed_adj_dac[25] = ui->vol25SpinBox->value(); + sysPara->para.printed_adj_dac[26] = ui->vol26SpinBox->value(); + sysPara->para.printed_adj_dac[27] = ui->vol27SpinBox->value(); + sysPara->para.printed_adj_dac[28] = ui->vol28SpinBox->value(); + sysPara->para.printed_adj_dac[29] = ui->vol29SpinBox->value(); + + sysPara->para.printed_adj_dac[30] = ui->vol30SpinBox->value(); + sysPara->para.printed_adj_dac[31] = ui->vol31SpinBox->value(); + sysPara->para.printed_adj_dac[32] = ui->vol32SpinBox->value(); + sysPara->para.printed_adj_dac[33] = ui->vol33SpinBox->value(); + sysPara->para.printed_adj_dac[34] = ui->vol34SpinBox->value(); + sysPara->para.printed_adj_dac[35] = ui->vol35SpinBox->value(); + sysPara->para.printed_adj_dac[36] = ui->vol36SpinBox->value(); + sysPara->para.printed_adj_dac[37] = ui->vol37SpinBox->value(); + sysPara->para.printed_adj_dac[38] = ui->vol38SpinBox->value(); + sysPara->para.printed_adj_dac[39] = ui->vol39SpinBox->value(); + //memcpy(sysPara->para.printed_adj_dac, sysPara->status.printed_adj_dac, sizeof(sysPara->para.printed_adj_dac)); + + sysPara->para.printed_continue_col_dac[0] = ui->cVol0SpinBox->value(); + sysPara->para.printed_continue_col_dac[1] = ui->cVol1SpinBox->value(); + sysPara->para.printed_continue_col_dac[2] = ui->cVol2SpinBox->value(); + sysPara->para.printed_continue_col_dac[3] = ui->cVol3SpinBox->value(); + sysPara->para.printed_continue_col_dac[4] = ui->cVol4SpinBox->value(); + sysPara->para.printed_continue_col_dac[5] = ui->cVol5SpinBox->value(); + sysPara->para.printed_continue_col_dac[6] = ui->cVol6SpinBox->value(); + sysPara->para.printed_continue_col_dac[7] = ui->cVol7SpinBox->value(); + sysPara->para.printed_continue_col_dac[8] = ui->cVol8SpinBox->value(); + sysPara->para.printed_continue_col_dac[9] = ui->cVol9SpinBox->value(); + sysPara->para.printed_continue_col_dac[10] = ui->cVol10SpinBox->value(); + sysPara->para.printed_continue_col_dac[11] = ui->cVol11SpinBox->value(); + sysPara->para.printed_continue_col_dac[12] = ui->cVol12SpinBox->value(); + sysPara->para.printed_continue_col_dac[13] = ui->cVol13SpinBox->value(); + sysPara->para.printed_continue_col_dac[14] = ui->cVol14SpinBox->value(); + sysPara->para.printed_continue_col_dac[15] = ui->cVol15SpinBox->value(); + sysPara->para.printed_continue_col_dac[16] = ui->cVol16SpinBox->value(); + sysPara->para.printed_continue_col_dac[17] = ui->cVol17SpinBox->value(); + sysPara->para.printed_continue_col_dac[18] = ui->cVol18SpinBox->value(); + sysPara->para.printed_continue_col_dac[19] = ui->cVol19SpinBox->value(); + + sysPara->para.printed_continue_col_dac[20] = ui->cVol20SpinBox->value(); + sysPara->para.printed_continue_col_dac[21] = ui->cVol21SpinBox->value(); + sysPara->para.printed_continue_col_dac[22] = ui->cVol22SpinBox->value(); + sysPara->para.printed_continue_col_dac[23] = ui->cVol23SpinBox->value(); + sysPara->para.printed_continue_col_dac[24] = ui->cVol24SpinBox->value(); + sysPara->para.printed_continue_col_dac[25] = ui->cVol25SpinBox->value(); + sysPara->para.printed_continue_col_dac[26] = ui->cVol26SpinBox->value(); + sysPara->para.printed_continue_col_dac[27] = ui->cVol27SpinBox->value(); + sysPara->para.printed_continue_col_dac[28] = ui->cVol28SpinBox->value(); + sysPara->para.printed_continue_col_dac[29] = ui->cVol29SpinBox->value(); + + sysPara->para.printed_continue_col_dac[30] = ui->cVol30SpinBox->value(); + sysPara->para.printed_continue_col_dac[31] = ui->cVol31SpinBox->value(); + sysPara->para.printed_continue_col_dac[32] = ui->cVol32SpinBox->value(); + sysPara->para.printed_continue_col_dac[33] = ui->cVol33SpinBox->value(); + sysPara->para.printed_continue_col_dac[34] = ui->cVol34SpinBox->value(); + sysPara->para.printed_continue_col_dac[35] = ui->cVol35SpinBox->value(); + sysPara->para.printed_continue_col_dac[36] = ui->cVol36SpinBox->value(); + sysPara->para.printed_continue_col_dac[37] = ui->cVol37SpinBox->value(); + sysPara->para.printed_continue_col_dac[38] = ui->cVol38SpinBox->value(); + sysPara->para.printed_continue_col_dac[39] = ui->cVol39SpinBox->value(); + + sysPara->para.printed_full_col_dac[0] = ui->fvol0SpinBox->value(); + sysPara->para.printed_full_col_dac[1] = ui->fvol1SpinBox->value(); + sysPara->para.printed_full_col_dac[2] = ui->fvol2SpinBox->value(); + sysPara->para.printed_full_col_dac[3] = ui->fvol3SpinBox->value(); + sysPara->para.printed_full_col_dac[4] = ui->fvol4SpinBox->value(); + sysPara->para.printed_full_col_dac[5] = ui->fvol5SpinBox->value(); + sysPara->para.printed_full_col_dac[6] = ui->fvol6SpinBox->value(); + sysPara->para.printed_full_col_dac[7] = ui->fvol7SpinBox->value(); + sysPara->para.printed_full_col_dac[8] = ui->fvol8SpinBox->value(); + sysPara->para.printed_full_col_dac[9] = ui->fvol9SpinBox->value(); + sysPara->para.printed_full_col_dac[10] = ui->fvol10SpinBox->value(); + sysPara->para.printed_full_col_dac[11] = ui->fvol11SpinBox->value(); + sysPara->para.printed_full_col_dac[12] = ui->fvol12SpinBox->value(); + sysPara->para.printed_full_col_dac[13] = ui->fvol13SpinBox->value(); + sysPara->para.printed_full_col_dac[14] = ui->fvol14SpinBox->value(); + sysPara->para.printed_full_col_dac[15] = ui->fvol15SpinBox->value(); + sysPara->para.printed_full_col_dac[16] = ui->fvol16SpinBox->value(); + sysPara->para.printed_full_col_dac[17] = ui->fvol17SpinBox->value(); + sysPara->para.printed_full_col_dac[18] = ui->fvol18SpinBox->value(); + sysPara->para.printed_full_col_dac[19] = ui->fvol19SpinBox->value(); + + sysPara->para.printed_full_col_dac[20] = ui->fvol20SpinBox->value(); + sysPara->para.printed_full_col_dac[21] = ui->fvol21SpinBox->value(); + sysPara->para.printed_full_col_dac[22] = ui->fvol22SpinBox->value(); + sysPara->para.printed_full_col_dac[23] = ui->fvol23SpinBox->value(); + sysPara->para.printed_full_col_dac[24] = ui->fvol24SpinBox->value(); + sysPara->para.printed_full_col_dac[25] = ui->fvol25SpinBox->value(); + sysPara->para.printed_full_col_dac[26] = ui->fvol26SpinBox->value(); + sysPara->para.printed_full_col_dac[27] = ui->fvol27SpinBox->value(); + sysPara->para.printed_full_col_dac[28] = ui->fvol28SpinBox->value(); + sysPara->para.printed_full_col_dac[29] = ui->fvol29SpinBox->value(); + + sysPara->para.printed_full_col_dac[30] = ui->fvol30SpinBox->value(); + sysPara->para.printed_full_col_dac[31] = ui->fvol31SpinBox->value(); + sysPara->para.printed_full_col_dac[32] = ui->fvol32SpinBox->value(); + sysPara->para.printed_full_col_dac[33] = ui->fvol33SpinBox->value(); + sysPara->para.printed_full_col_dac[34] = ui->fvol34SpinBox->value(); + sysPara->para.printed_full_col_dac[35] = ui->fvol35SpinBox->value(); + sysPara->para.printed_full_col_dac[36] = ui->fvol36SpinBox->value(); + sysPara->para.printed_full_col_dac[37] = ui->fvol37SpinBox->value(); + sysPara->para.printed_full_col_dac[38] = ui->fvol38SpinBox->value(); + sysPara->para.printed_full_col_dac[39] = ui->fvol39SpinBox->value(); + //sysPara->para.dacScale = ui->dacScaledSpinBox->value(); + sysPara->devOp->writeFpgaPrintPara(); +#endif +} + + +InkJetPrinter::~InkJetPrinter() +{ + delete ui; + delete timer; +#ifdef MODBUS + if (modbus) { + delete modbus; + } +#endif + if (fileTransceiv) { + fileTransceiv->deleteLater(); + } + //edit@01-03 + if (tcpTransceiv) { + tcpTransceiv->deleteLater(); + } +} + +void InkJetPrinter::jd_timerHandler(void) +{ + static int count_time = 0; + + count_time++; + if(count_time>= 20){ //each 10s + count_time = 0; +#ifdef MIMA + jd_res = ui->tabPrintSetting->dlgInputAddr->isEnabled(); + // qDebug()<<"jd_timerHandler"; +#endif +#ifdef __RFID_CARD + static uint lastSecondes = QDateTime::currentDateTime().toTime_t(); + static uint noticeICReaderErrorTime = QDateTime::currentDateTime().toTime_t(); + QString str = ""; + unsigned char showFlag = 0; + + if(QDateTime::currentDateTime().toTime_t() - noticeICReaderErrorTime > 1800) + { + noticeICReaderErrorTime = QDateTime::currentDateTime().toTime_t(); + sysPara->devOp->setICReaderModeFlag = true; + //if(sysPara->devOp->noticeICReaderError) + if(sysPara->devOp->queryReadRFID_address() == 2) + { + msgtest->setText(tr("读卡器故障!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("13.读卡器故障!")); + } + sysPara->devOp->setICReaderModeFlag = false; + } +#endif + } +} +extern void MySleep(unsigned int msec); +extern unsigned char test_flag; +bool gearPumpRunNormalFlag = false; +void InkJetPrinter::timerHandler(void){ + // QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); + + int pulse_100ms = 0; + int pulse_1s = 0; + int pulse_10s = 0; + int pulse_100s = 0; + int pulse_300ms = 0; + static int pulse_3s = 0; + static int pulse_4s = 0; + static int pulse_5s = 0; + static int reciclar_30s = 0; + static int pulse_30s = 0; + static int xxxm=0; + // static char res=0; + static int save_weeknum = 0; + static bool gearPumpRunFlag = false; + static bool ControledSwitchFlag = false; + static bool gearPumpStartFlag = false; + static bool delay3s; + //gearPumpRunStopFlag = false; + bool InkSwintFlag = false,lastInkSwintFlag = false; + + static float gearPumpRunNormalValue = 0.0; +#ifdef DEBUG1 + sysPara->status.selfCheckDone=1; +#endif + + if(sysPara){ +#ifdef MODBUS + // processCommands(); +#endif + +#ifdef MIMA + if(xxxm==0) + { + +#ifdef AM335TEST + +#else + +#ifdef MYTEST + xxxm=1; +#else + QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); + if(!file.exists()) return; +#endif +#endif + } + xxxm=1; + +#endif + + sysPara->para.ReadFileErrorCnt=0; // 正常打开文件 + + // /opt/FriendlyARM/mini2440/rootfs_qtopia_qt4/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib + if(sysPara->para.gearPumpEnable) + { + ui->tabMainWindow->enablePushButtonStart(true); + if(!pushButtonStartFlag) + { + gearPumpRunNormalFlag = false; + } + //ui->tabSystemSetting->setSpinBoxPressureMaxValue(900); + if(!gearPumpRunFlag) + { + ui->tabMainWindow->enableReclaimCtrlButton(false); + } + } + else + { + ui->tabMainWindow->enablePushButtonStart(false); + //ui->tabSystemSetting->setSpinBoxPressureMaxValue(5000); + } + + /*-----------------------形成脉冲-----------------------------*/ + sysPara->status.delay10ms ++; + if(sysPara->status.delay10ms == 10){ + pulse_100ms = 1; + sysPara->status.delay10ms = 0; + } + if(pulse_100ms){ + sysPara->status.delay100ms ++; + if(sysPara->status.delay100ms == 10){ + pulse_1s = 1; + sysPara->status.delay100ms = 0; + } + pulse_300ms = (sysPara->status.delay100ms%3) == 0; //1秒3次,并非精确的300ms + + } + if((sysPara->status.delay10ms%3) == 0) //读取状态后再检測 + { + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) && !gearPumpRunFlag && !sysPara->status.isPumpValveControledByHand)//刚启动前3秒 + { + if(sysPara->para.gearPumpEnable) { + sysPara->para.gearPumpValue = 150; + sysPara->devOp->WriteMoterPump(); + gearPumpStartFlag = true; + } + } + } + if(pushButtonStartFlag && sysPara->status.selfCheckDone) + { + if((sysPara->status.PRESSURE > (sysPara->para.pressure -10)) && (sysPara->status.PRESSURE < (sysPara->para.pressure +10))) + { + if(pulse_1s) + { + pulse_5s++; + } + if( pulse_5s == 5) + { + pulse_5s = 0; + gearPumpRunNormalFlag = true; + gearPumpRunNormalValue = u; + } + } + } + if(sysPara->status.isPumpValveControledByHand) + { + gearPumpRunNormalFlag = false; + ControledSwitchFlag = false; + pulse_3s = 0; + } + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关,压力抖动 + InkSwintFlag = true; + } + else + { + InkSwintFlag = false; + } + if(lastInkSwintFlag != InkSwintFlag) + { + lastInkSwintFlag = InkSwintFlag; + gearPumpRunNormalFlag = false; + } + if(gearPumpRunNormalFlag && !sysPara->status.isPumpValveControledByHand && sysPara->para.gearPumpEnable) + { + static int count_3s = 0; + if(u > gearPumpRunNormalValue*1.5)//改大一点 + { + if(pulse_1s) + { + count_3s++; + if(count_3s == 3) + { + count_3s = 0; + ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!")); + sysPara->status.gearPumpRunStopFlag = true; + gearPumpRunNormalFlag = false; + LogInfo::setRunStatusText(tr("运行中压力泄漏,停齿轮泵!")); + } + } + } + else + { + count_3s = 0; + } + } + if(sysPara->para.gearPumpEnable && (sysPara->status.gearPumpRunSpeed < 100) && test_flag){ + if(test_flag % 2) + ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); + test_flag = 0; + } + if(pulse_1s) { + if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable) + checkPressureControl(); + if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){ + if(ui->tabMainWindow->getCurrPrintStatus() != 1){ + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("测试时间结束,准备关机")); + ui->tabMainWindow->setRunStatus(tr("测试时间结束,准备关机")); + } + } + if(sysPara->status.selfCheckDone && sysPara->para.Reciclar && test_flag){ + reciclar_30s++; + if(reciclar_30s > 30){ + reciclar_30s = 0; + test_flag++; + } + } + else if(reciclar_30s){ + reciclar_30s = 0; + } + QDate d = QDate::currentDate(); + + if(save_weeknum == 0) + { + save_weeknum = d.weekNumber(); + } + + if(save_weeknum != d.weekNumber()) + { + sysPara->devOp->writeFpgaCalandar(1); + save_weeknum = d.weekNumber(); + } + + sysPara->status.delay1s ++; + if(sysPara->status.delay1s == 3 && !delay3s) + delay3s = true; + if(sysPara->status.delay1s == 10){ + pulse_10s = 1; + sysPara->status.delay1s = 0; + } + //if(pushButtonStartFlag) + pulse_4s++; + if(gearPumpStartFlag) + { + pulse_3s ++; + if(pulse_3s == 3) + { + pulse_3s = 0; + gearPumpRunFlag = true; + ControledSwitchFlag = true; + } + } +#ifdef QTV4 + if( sysPara->status.reclainTankReachEnd) sysPara->para.openInkLineTime++; +#else + if( sysPara->status.reclainTankReachEnd) sysPara->para.openInkLineTime++; +#endif + } + if(pulse_10s){ +#ifdef __STC_POWER__ + { + sysPara->devOp->Heartbeat(1); + } +#endif + sysPara->status.delay10s ++; + if(sysPara->status.delay10s == 10){ + pulse_100s = 1; + sysPara->status.delay10s = 0; +#ifdef __STC_POWER__ + if(!sysPara->status.selfCheckDone){ + qDebug()<<"gearPumpRunFlag: "<para.gearPumpEnable; + } +// qDebug()<<"needPowerOffTimerout: "<status.needPowerOffTimerout; +// qDebug()<<"getCurrPrintStatus: "<tabMainWindow->getCurrPrintStatus(); + if(sysPara->status.needPowerOffTimerout && (ui->tabMainWindow->getCurrPrintStatus() != 1)) + { + qDebug()<<"waitPowerOffTime: "<status.waitPowerOffTime; + if(sysPara->status.waitPowerOffTime) + { + sysPara->status.waitPowerOffTime--; + if(!sysPara->status.waitPowerOffTime) + { + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机")); + ui->tabMainWindow->setRunStatus(tr("准备关机")); + } + } + } +#endif + } +#ifdef AM335TEST + jd_res =0; +#else + +#endif + } + + /*------------------------------------------------------*/ +#ifdef UART2 + static bool Flag300=0; + if(sysPara->status.ExtScreenEn && sysPara->para.ExtScreenType) + { + + if(sysPara->para.ExtScreenType==2) + { + if(pulse_300ms) + { + if(Flag300) sysPara->devOp->RecDim(); + else sysPara->devOp->DatToDisp2(); + Flag300 = !Flag300; + + } + } + else if(pulse_1s) + { + if(Flag300) sysPara->devOp->RecDim(); + else sysPara->devOp->DatToDisp2(); + Flag300 = !Flag300; + } + sysPara->devOp->recUart2(); + } +#endif + + sysPara->devOp->readFgaStatus(); + sysPara->status.gearPumpRunSpeed = 0; + +#if 0 + unsigned char ByteData = 0; + static unsigned char lastByteData = 0; + + sysPara->devOp->fpgaRd(0x00fc,(unsigned char *)&ByteData,1);//读取1字节 + //ui->tabMainWindow->setRunStatus(tr("ByteData:<%1>").arg(ByteData)); + if((ByteData & 0x80) != lastByteData) + { + //LogInfo::setRunStatusText(tr("结果:%1").arg(ByteData & 0x80)); + lastByteData = ByteData & 0x80; + if(sysPara->status.selfCheckDone) + { + if(ui->tabMainWindow->getCurrPrintStatus() == 3) + { + ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + } + else + { + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + } + } + } +#endif + // unsigned int PulseMs = 0; //时间间隔 + + unsigned int PulseCnt = 0; //时间间隔内的脉冲累计数 + sysPara->devOp->fpgaRd(0x004E,(unsigned char *)&PulseCnt,2);//读取脉冲个数低字节 + { + sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2); + } + if(!sysPara->para.gearPumpEnable) + sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍 + sysPara->devOp->ReadSomeDataForLostPrint(); +#ifdef UART1 + if(pulse_100ms){ + //static int uartReadcnt=0; + emit sysPara->devOp->readUart1(); + } +#endif + + /*-------------------------------------------------------*/ + bool lostCommuFlag = 0; + if(sysPara->status.configDone){ + lostCommuFlag = sysPara->status.maginNum != FPGA_MAGIC_NUM_AFTER_CONF; + } + else { + lostCommuFlag = sysPara->status.maginNum != FPAG_INIT_MAGIC_NUM; + } +#ifdef AM335TEST + sysPara->status.WorkTimeOut=0; +#else +#ifdef MIMAgearPumpRunFlag + if(jd_res &(1<<2)) { + sysPara->status.WorkTimeOut=1; + } +#endif +#endif + +#ifdef X86TEST + lostCommuFlag=0; +#endif +#ifdef MODBUS + + if(sysPara->status.delay10ms%5 == 0) + { +#if 1 //复位发送打印数据 + if((ui->tabMainWindow->getCurrPrintStatus() == 1)&&sysPara->para.ResetSendData) + { + static bool oneTimeFlag = false; + if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据 + { + oneTimeFlag = true; + ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + //复位重设起始值 + if(sysPara->para.cnt1ResetToInitValue) + { + sysPara->para.cnt1CurrValue = sysPara->para.cnt1StartValue; + sysPara->status.cnt1CurrentValueInitDoneFlag = false; + sysPara->devOp->writeFpgaCalandar(0); + } + } + if(sysPara->status.productCnt != 0) + { + oneTimeFlag = false; + } + } +#endif + static unsigned int lastProductCount=0; + if(!sysPara->para.flagOfWeiDaLiAutoPrint){ + if(!sysPara->status.flagOfWeiDaLiTCP){ + sysPara->devOp->fpgaRd(0x0054,&sysPara->status.flagOfWeiDaLiTCPStartPrinting,1); + sysPara->status.flagOfWeiDaLiTCPStartPrinting = 0; + } + else{ + if(sysPara->status.flagOfWeiDaLiTCPStartPrinting == 0) + sysPara->devOp->fpgaRd(0x0054,&sysPara->status.flagOfWeiDaLiTCPStartPrinting,1); + if((sysPara->status.flagOfWeiDaLiTCPStartPrinting & 0x01) == 1){ + sysPara->status.flagOfWeiDaLiTCPStartPrinting = 0; + if(!sysPara->status.flagOfDropNextSignal){ + if(sysPara->status.flagLogInfo){ + sysPara->status.flagLogInfo= 0; + } + if(!sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + } + else{ + if(sysPara->status.flagLogInfo){ + sysPara->status.flagLogInfo= 0; + qDebug()<<"丢弃废膜"; + } + sysPara->status.flagOfDropNextSignal = false; + } + } + } + } + + if(sysPara->status.productCnt != lastProductCount || sysPara->status.printDoneFlag) + { + sysPara->RFIDPara.PrintInkDots += sysPara->status.TextInkDots; + sysPara->status.printDoneFlag = false; + lastProductCount = sysPara->status.productCnt; + sysPara->modbusStatus.printFinishFlag = 1; + memcpy((void*)(&sysPara->modbusStatus.orderCode), (void*)(&sysPara->modbusParas.QRcode_buf), 2);//写返回序列号 + ui->tabMainWindow->UpdateDateTimeQRCode(QDateTime::currentDateTime().toString("hh:mm")); + //**********维达力TCP通信项目******** + if(sysPara->status.flagOfWeiDaLiTCP){ + sysPara->status.flagLogInfo = 1; + ui->tabMainWindow->print_complete(); + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + if(sysPara->para.flagOfWeiDaLiAutoPrint) + ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + } + //********维达力TCP通信项目******* + } + if (modbus->getModbusStatus() == 1) { + refreshModbusStatus(); + } + } +#endif + if(lostCommuFlag){ + static unsigned char lostCommuCnt=0; + if(sysPara->status.currentRunStatus != RUN_STATUS_LOST_COMMUNICATION_WITH_FPGA) { + // 增加FPGA通信异常判别阀值,避免产生误判。2017.8.30 + if(lostCommuCnt<10) lostCommuCnt ++; + else { + sysPara->status.fpgaVersionNum = 0; + LogInfo::setRunStatusText(tr("与FPGA失去通信!!!")); + sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->controlMixValve(false); + //sysPara->devOp->controlReclaimPump(false); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReleaseValve(false); + sysPara->devOp->controlHeater(false); + qDebug()<<"lostCommuteCation now."<status.maginNum; + } + } + sysPara->status.currentRunStatus = RUN_STATUS_LOST_COMMUNICATION_WITH_FPGA; + } + else if(!sysPara->status.lostCommuFlag && !SIMULATE_PRINTING_MODE) { + if(sysPara->status.currentRunStatus == RUN_STATUS_LOST_COMMUNICATION_WITH_FPGA) + LogInfo::setRunStatusText(tr("与FPGA通信恢复正常")); + + + sysPara->status.currentRunStatus = RUN_STATUS_IDLE; + if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0) + { + if(!sysPara->status.selfCheckDone) + { /*开机自检*/ + autoControlValvePump(); + pressureAdj(0); + /*-----------------------------------------------------*/ + if(!sysPara->status.selfCheckCnt) { + LogInfo::setRunStatusText(tr("开始自检,请等待60秒...............")); + ui->tabMainWindow->enableReclaimCtrlButton(false); + ui->tabMainWindow->enablePrintButton(false); + sysPara->devOp->mainInkCtrl(); + sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1 + sysPara->saveParaToFile(); // 保存开机次数值 + + sysPara->status.lastProductCnt = sysPara->status.productCnt ; //这会让产品计数显示出来 + + ui->tabMainWindow->updateTotalCnt(0); + + +#ifdef X86TEST + // if(sysPara->status.selfCheckCnt < MAX_SELF_CHECK_CNT-2)sysPara->status.selfCheckCnt = MAX_SELF_CHECK_CNT-2; + +#endif + } + if((sysPara->status.selfCheckCnt % 100) == 0) + ui->tabMainWindow->setRunStatus(tr("开始自检,请等待%1秒...............").arg((MAX_SELF_CHECK_CNT - sysPara->status.selfCheckCnt)/100)); + + sysPara->status.selfCheckCnt ++; + if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) + { + sysPara->status.selfCheckDone = 1; + LogInfo::setRunStatusText(tr("自检完成!!!")); + ui->tabMainWindow->setRunStatus(tr("自检完成!!!")); + qDebug()<<"自检完成!!!"; + ui->tabPrintSetting->PrintSettingLog(); + ui->tabMainWindow->enableReclaimCtrlButton(true); + sysPara->devOp->mainInkCtrl(); + sysPara->status.canRunAirPushing = true; + if(sysPara->para.Reciclar) + test_flag = 1; + } + else { + if((sysPara->status.selfCheckCnt % 200) == 0) + // sysPara->devOp->controlReclaimTankOpen(false); + ui->tabMainWindow->enableReclaimCtrlButton(false); + } + + } + else { + // 开机自检完成的前提下 + if (!sysPara->status.airPushing || ui->tabMainWindow->m_2sFlag) { + autoControlValvePump(); + } + if(sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag) { + pressureAdj(0); + } + } + } + else{ + static bool flag = 1; + if(delay3s){ + if(flag){ + flag = 0; + LogInfo::setRunStatusText(tr("缺少墨水,喷码机不能正常工作!")); + qDebug()<<"缺少墨水,喷码机不能正常工作!"; + } + ui->tabMainWindow->setRunStatus(tr("缺少墨水,喷码机不能正常工作!")); + } + } + /*----------------------------控制温度--------------------------------------*/ + if(pulse_100ms){ + autoControlHeater(); + sysPara->devOp->readSyncCounterAtZero(); + } + } + sysPara->status.lostCommuFlag = lostCommuFlag; //务必放在后面 + static unsigned int lastProductCnt =0; + static int lastalterMode=-1; + if(sysPara->para.alterPrint.enable) + { + sysPara->para.AlterMode=sysPara->status.AlterMode; // 电眼触发交替功能:新增这一行 + if( (sysPara->para.AlterMode!=lastalterMode) + || (lastProductCnt != sysPara->status.productCnt) + ) + { + ui->tabMainWindow->alterDataPrint (sysPara->para.AlterMode); + } + } + else sysPara->para.AlterMode=0; + lastalterMode = sysPara->para.AlterMode; + lastProductCnt = sysPara->status.productCnt; + ui->tabMainWindow->CheckStatus(pulse_300ms); // + /*----------------------------------界面更新状态---------------------------------------*/ + if(pulse_300ms){ +#ifdef __RFID_CARD + if(!sysPara->devOp->setICReaderModeFlag) + { + sysPara->devOp->strRevdata =""; + sysPara->devOp->receiveReadRFID_data(); + if(sysPara->devOp->strRevdata.length() > 1) + { + if((sysPara->devOp->strRevdata.left(3) == QString::number(ui->tabPrintSetting->dlgInputAddr->jd.addr).left(3)) + || sysPara->devOp->strRevdata.left(3) == "100") + { + if(sysPara->devOp->strRevdata.at(3) == 'A') + { + if(!sysPara->status.flagOfNeedInkCard){ + msgtest->setText(tr("不需要刷墨水卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("不需要刷墨水卡!")); + LogInfo::setRunStatusText(tr("不需要刷墨水卡!")); + } + else if(sysPara->status.statWarn & WARN_STATUS_INK_WARN){ + msgtest->setText(tr("请先添加原厂墨水再刷墨水卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("请先添加原厂墨水再刷墨水卡!")); + LogInfo::setRunStatusText(tr("请先添加原厂墨水再刷墨水卡!")); + } + else if(sysPara->devOp->comWriteRFID_data() == 1)//把卡数据清零 + { + sysPara->RFIDPara.InkRFIDCnt = 0; + sysPara->RFIDPara.PrintInkDots = 0; + sysPara->saveRFIDPara(); + sysPara->para.RFIDInkWarn = false; + sysPara->para.inkWarnDate = 0; + sysPara->para.inkWarnTime = 0; + sysPara->status.flagOfInkMaxDot = false; + sysPara->status.flagOfNeedInkCard = false; + sysPara->devOp->checkCardIntervalTime = QDateTime::currentDateTime().toTime_t(); + msgtest->setText(tr("刷墨水卡成功!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("刷墨水卡成功!")); + LogInfo::setRunStatusText(tr("刷墨水卡成功!")); + } + + } + else if(sysPara->devOp->strRevdata.at(3) == 'B') + { + if(!sysPara->status.flagOfNeedSolventCard){ + msgtest->setText(tr("不需要刷溶剂卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("不需要刷溶剂卡!")); + LogInfo::setRunStatusText(tr("不需要刷溶剂卡!")); + } + else if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN){ + msgtest->setText(tr("请先添加原厂溶剂再刷溶剂卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("请先添加原厂溶剂再刷溶剂卡!")); + LogInfo::setRunStatusText(tr("请先添加原厂溶剂再刷溶剂卡!")); + } + else if(sysPara->devOp->comWriteRFID_data() == 1)//把卡数据清零 + { + sysPara->RFIDPara.SOLVRFIDCnt = 0; + sysPara->RFIDPara.solventNumber = 0; + sysPara->saveRFIDPara(); + sysPara->para.RFIDSolventWarn = 0; + sysPara->para.solventWarnDate = 0; + sysPara->para.solventWarnTime = 0; + sysPara->para.RFIDSolventWarnMixCnt = 0; + sysPara->status.flagOfSolventMaxNum = false; + sysPara->status.flagOfNeedSolventCard = false; + sysPara->devOp->checkCardIntervalTime = QDateTime::currentDateTime().toTime_t(); + msgtest->setText(tr("刷溶剂卡成功!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("刷溶剂卡成功!")); + LogInfo::setRunStatusText(tr("刷溶剂卡成功!")); + } + } + else + { + msgtest->setText(tr("MAC无效卡!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("MAC无效卡!")); + } + } + else + { + LogInfo::setRunStatusText(tr("card data: %1").arg(sysPara->devOp->strRevdata)); + QString str1 = QString::number(sysPara->devOp->strRevdata.mid(0,2).toInt(0,16)).rightJustified(2,'0'); + QString str2 =QString::number(sysPara->devOp->strRevdata.mid(2,2).toInt(0,16)).rightJustified(2,'0'); + QString str3 = QString::number(sysPara->devOp->strRevdata.mid(4,2).toInt(0,16)).rightJustified(2,'0'); + QString str4 = QString::number(sysPara->devOp->strRevdata.mid(6,2).toInt(0,16)).rightJustified(2,'0'); + QString str5 = QString::number(sysPara->devOp->strRevdata.mid(8,2).toInt(0,16)).rightJustified(2,'0'); + QString str6 =QString::number( sysPara->devOp->strRevdata.mid(10,2).toInt(0,16)).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + QString strShow = tr("无效卡,这张卡已经在%1时使用过").arg(strDateTime); + msgtest->setText(strShow); + msgtest->show(); + LogInfo::setRunStatusText(strShow); + } + } + } +#endif + sysPara->devOp->readCalandarDat(); //务必读一下此数据 +#ifdef RANDDEBUG + if(sysPara->status.RandomNum>0) + sysPara->devOp->Read_RanddomFromFpga(); +#endif +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + cnt1GroupCheck();//分段计米 +#endif + QWidget *widget = this->currentWidget(); + //无墨水或溶剂3小时,自动关机 + if(sysPara->status.InkOrSOLVEmptyCnt>MAX_INK_SOLV_EMTYTIME-10) + { + if(!sysPara->status.powerOffAfterInkOrSOLVEmptyAppending){ + sysPara->status.powerOffAfterInkOrSOLVEmptyAppending = 1; + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("墨水或溶剂空,准备关机")); + ui->tabMainWindow->setRunStatus(tr("墨水或溶剂空,准备关机")); + } + } + + static bool read_flag = false; + if(widget == ui->tabMainWindow) { + ui->tabMainWindow->updateSysStatusToUI(); + } + else if(widget == ui->tabTriggerMode){ + ui->tabTriggerMode->updateSysStatusToUI(); + if(sysPara->status.build_dat.builTime ==0) sysPara->devOp->readbuilDat(); + else + { + QString strFPGADate; + if(sysPara->status.build_dat.year!=0xff && sysPara->status.build_dat.month!=0xff && sysPara->status.build_dat.day!=0xff) + { + strFPGADate = QString("(%1-%2-%3)").arg(sysPara->status.build_dat.year).arg(sysPara->status.build_dat.month).arg(sysPara->status.build_dat.day); + } + if(sysPara->status.flagOfNo67FPGA && sysPara->para.flagOfFastMode) + ui->tabTriggerMode->setBuildTime(QString(" No66") + "_" + strFPGADate); + else if(sysPara->status.flagOfNo67FPGA && !sysPara->para.flagOfFastMode) + ui->tabTriggerMode->setBuildTime(QString(" No67") + "_" +strFPGADate); + else + ui->tabTriggerMode->setBuildTime(QString(" No%1").arg(sysPara->status.build_dat.builTime) + "_"+ strFPGADate); + } + } + else if(widget == ui->tabPrintSetting) + { + ui->tabPrintSetting->updateSysStatusToUI(); + if(!read_flag) + { + emit sendPicScene(ui->tabMainWindow->getPicScene()); + } + read_flag = true; + } + else if(widget == ui->tabSystemSetting){ + + ui->tabSystemSetting->updateSysStatusToUI(); + } + else if(widget == ui->tabSystemManage){ + ui->tabSystemManage->updateSysStatusToUI(); + } + else if(widget == ui->tabOtherInfo){ + ui->tabOtherInfo->updateSysStatusToUI(); + } + else if(widget == ui->tabNetworkManager){ + if(!sysPara->status.bLanConfigManual) + { + ui->tabNetworkManager->updateSysStatusToUI(); + } + } + if(widget != ui->tabPrintSetting) + { + read_flag = false; + } + + // 20140306 + static int last_lesslen_warn=0,lesslen_cnt=0; + if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) + { + if(last_lesslen_warn==0) + { + last_lesslen_warn =lesslen_cnt; + if(lesslen_cnt<60)lesslen_cnt +=6; + if(lesslen_cnt>40) sysPara->devOp->resumeFault(); + + if(sysPara->para.speedoverPaushPrint) { + ui->tabMainWindow->on_pushButtonPausePrint_pressed();// 2014-03-19 + emit OnSpeedOver(2);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); + ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); + + } + else { + emit OnSpeedOver(1);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全!!!")); + ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全!!!")); + } + + } + } + else { last_lesslen_warn=0;lesslen_cnt=30;} + + if(last_lesslen_warn) last_lesslen_warn--; + + } + + if(pulse_100ms){ + detectAndcontrolReclaimTank(); //控制回收槽 + } + + /*---------------------------------处理警告--------------------------------------------*/ + if(pulse_1s){ + if(sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone && gearPumpRunNormalFlag) + { + if((sysPara->status.PRESSURE < (sysPara->para.pressure -8)) || (sysPara->status.PRESSURE > (sysPara->para.pressure +8))) + { + LogInfo::setRunStatusText(tr("压力波动超过设定的5个值.")); + } + } + + static bool logFlag1 = true; + if(sysPara->para.RFIDSolventWarn && logFlag1){ + logFlag1 = false; + LogInfo::setRunStatusText(tr("溶剂液位报警! %1").arg(sysPara->RFIDPara.solventNumber)); + qDebug()<<"溶剂液位报警! "<RFIDPara.solventNumber; + } +#ifdef __RFID_CARD + /*****************墨水刷卡控制start**********************************************/ + /*墨水刷卡新的控制逻辑*/ + /* 1.任何时候,打印墨点数达到2.3billion之后,提示24小时内刷卡,否则禁止使用机器*/ + /*2.当墨水液位后,持续提示刷卡,24小时后如果还没有刷卡,禁止使用机器*/ + static bool logFlag4 = 1; + static int warnNum1 = 0; + if(sysPara->status.statWarn & WARN_STATUS_INK_WARN){ + if(++warnNum1 >6){ + sysPara->para.RFIDInkWarn = true; + QDateTime curDateTime = QDateTime::currentDateTime(); + QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); + if(sysPara->para.inkWarnDate == 0){ + sysPara->para.inkWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.inkWarnTime = strCurDateTime.mid(6,6).toInt(); + } + } + else{ + LogInfo::setRunStatusText(tr("detect Ink warning cnt: %1").arg(warnNum1)); + qDebug()<<"检测到墨水液位次数:"<RFIDPara.PrintInkDots >= MAX_INK_DOTS || sysPara->para.RFIDInkWarn){ + if(logFlag4 && sysPara->para.RFIDInkWarn){ + logFlag4 = 0; + QString strDate = QString::number(sysPara->para.inkWarnDate); + QString strTime = QString::number(sysPara->para.inkWarnTime); + QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); + QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); + QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); + QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); + QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); + QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + LogInfo::setRunStatusText(tr("ink Warning at: %1").arg(strDateTime)); + qDebug()<<"ink Warning at:"<status.flagOfNeedInkCard = true; + if(sysPara->RFIDPara.InkRFIDCnt == 0){ + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + } + int timeRemain = (MAX_INK_RFIDTIME - sysPara->RFIDPara.InkRFIDCnt)/60; + if(timeRemain > 60){ + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); + else + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); + } + else if(timeRemain > 0){ + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + else + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + } + if(sysPara->RFIDPara.InkRFIDCnt % 60 == 0) + sysPara->saveRFIDPara(); + if(++sysPara->RFIDPara.InkRFIDCnt >= MAX_INK_RFIDTIME) + sysPara->status.flagOfInkMaxDot = true; + } + + if(sysPara->status.flagOfInkMaxDot){ + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + static bool logFlag2= true; + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS){ + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + if(logFlag2){ + logFlag2 = false; + msgtest->setText(tr("打印墨点已达到2.3billion,请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("打印墨点已达到2.3billion,请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + qDebug()<<"打印墨点已达到2.3billion,请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; + } + } + else{ + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + if(logFlag2){ + logFlag2 = false; + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + qDebug()<<"请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; + } + } + } + /*****************墨水刷卡控制end**********************************************/ + + /*****************溶剂刷卡控制start**********************************************/ + /*溶剂刷卡新的控制逻辑*/ + /* 1.任何时候,混合阀打开次数达到360次,提示2小时关机,必须刷卡才能恢复*/ + /*2.溶剂液位报警后,提示刷卡,允许有10次的混合阀打开次数,必须刷卡才能恢复*/ + if(sysPara->RFIDPara.solventNumber >= MAX_SOLV_OPENNUM){ //混合阀打开次数达到360次 + sysPara->status.flagOfNeedSolventCard = true; + if(sysPara->RFIDPara.SOLVRFIDCnt == 0){ + msgtest->setText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); + } + int timeRemain = (MAX_SOLV_RFIDTIME - sysPara->RFIDPara.SOLVRFIDCnt)/60; + if(timeRemain > 0) + ui->tabMainWindow->setRunStatus(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + if(sysPara->RFIDPara.SOLVRFIDCnt % 60 == 0) + sysPara->saveRFIDPara(); + if(++sysPara->RFIDPara.SOLVRFIDCnt >= MAX_SOLV_RFIDTIME) + sysPara->status.flagOfSolventMaxNum = true; + } + + static bool logFlag5 = 1; + static int warnNum2 = 0; + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) + warnNum2 = 0; + if((sysPara->status.statWarn & WARN_STATUS_SOLV_WARN) || sysPara->para.RFIDSolventWarn){ + if(!sysPara->para.RFIDSolventWarn){ + if(++warnNum2 > 6){ + sysPara->para.RFIDSolventWarn = true; + sysPara->para.RFIDSolventWarnMixCnt = 0; + LogInfo::setRunStatusText(tr("请添加原厂溶剂,然后刷溶剂卡,否则将会在打开10次混合阀之后禁用喷码机!")); + qDebug()<<"请添加原厂溶剂,然后刷溶剂卡,否则将会在打开10次混合阀之后禁用喷码机!"; + QDateTime curDateTime = QDateTime::currentDateTime(); + QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); + if(sysPara->para.solventWarnDate == 0){ + sysPara->para.solventWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.solventWarnTime = strCurDateTime.mid(6,6).toInt(); + } + } + else{ + LogInfo::setRunStatusText(tr("detect solvent warning cnt: %1").arg(warnNum2)); + qDebug()<<"检测到溶剂液位次数:"<tabMainWindow->setRunStatus(tr("请添加原厂溶剂,然后刷溶剂卡!")); + if(logFlag5){ + logFlag5 = 0; + QString strDate = QString::number(sysPara->para.solventWarnDate); + QString strTime = QString::number(sysPara->para.solventWarnTime); + QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); + QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); + QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); + QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); + QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); + QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + LogInfo::setRunStatusText(tr("solvent Warning at: %1").arg(strDateTime)); + qDebug()<<"solvent Warning at:"<para.RFIDSolventWarnMixCnt >= 10) + sysPara->status.flagOfSolventMaxNum = true; + + if(sysPara->status.flagOfSolventMaxNum){ + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + static bool logFlag3 = true; + if(sysPara->para.RFIDSolventWarnMixCnt>=10){ + ui->tabMainWindow->setRunStatus(tr("溶剂液位报警后已经打开混合阀10次,请刷卡以恢复机器的正常功能")); + if(logFlag3){ + logFlag3 = false; + msgtest->setText(tr("溶剂液位报警后已经打开混合阀10次,请刷卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("溶剂液位报警后已经打开混合阀10次,请刷卡以恢复机器的正常功能")); + qDebug()<<"溶剂液位报警后已经打开混合阀10次,请刷卡以恢复机器的正常功能"; + } + } + else{ + ui->tabMainWindow->setRunStatus(tr("已经打开混合阀360次,请刷卡以恢复机器的正常功能")); + if(logFlag3){ + logFlag3 = false; + msgtest->setText(tr("已经打开混合阀360次,请刷卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("已经打开混合阀360次,请刷卡以恢复机器的正常功能")); + qDebug()<<"已经打开混合阀360次,请刷卡以恢复机器的正常功能"; + } + } + } + /*****************溶剂刷卡控制end**********************************************/ +#endif + static bool resumeFlag = false; + if(lostCommuFlag || ui->tabMainWindow->updatePhaseIndicatorLight() || (sysPara->status.statWarn & (WARN_STATUS_POWER_MON|WARN_STATUS_INK_WARN|WARN_STATUS_SUMP_WARN + |WARN_STATUS_SOLV_WARN|WARN_STATUS_POWER_MON)) || (sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) ||sysPara->status.lastHighVoltageFault) + { //updatePhaseIndicatorLight()务必放前面 + sysPara->status.beeperOnFlag = true; + if(sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) + { + ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!")); + } + if(!resumeFlag) + { + resumeFlag = true; + pulse_4s = 0; + if(!sysPara->status.lastHighVoltageFault) + { + ui->tabMainWindow->onLabelFaultRusumePressed(); + } + } + } + else { + sysPara->status.beeperOnFlag = false; + sysPara->devOp->controlBeeper(false); + if(pulse_4s >= 20) + { + pulse_4s = 0; + resumeFlag = false; + } + } + + if(sysPara->status.beeperOnFlag){ //报警会时有时无 + sysPara->devOp->controlBeeper(!sysPara->devOp->isBeeperEnable()); + } + + if((sysPara->status.statWarn & (WARN_STATUS_POWER_MON)) + ||sysPara->status.lastwarmInkPump||sysPara->status.lastwarmInkPump||sysPara->status.mainInkPumpError + ||sysPara->status.compressPumpError||sysPara->status.lastPhaseFault||sysPara->status.lastRecycleWarn||sysPara->status.lastHighVoltageFault) + { //2013-12-12故障报警灯 杨 + sysPara->status.RedLightOnFlag = true; + + } + else { + sysPara->status.RedLightOnFlag = false; + sysPara->devOp->controlRedLight(false); + //sysPara->devOp->controlRedLight(true); + } + if(sysPara->status.RedLightOnFlag){ //报警会时有时无 + sysPara->devOp->controlRedLight(!sysPara->devOp->isRedLightEnable()); + } + if((sysPara->status.statWarn & (WARN_STATUS_INK_WARN|WARN_STATUS_SOLV_WARN |WARN_STATUS_RECYCLE_FAULT|WARN_STATUS_SUMP_WARN)) + && !sysPara->status.RedLightOnFlag){ + //if(!sysPara->status.RedLightOnFlag){ + sysPara->status.YellowLightOnFlag = true; + } + else { + sysPara->status.YellowLightOnFlag = false; + sysPara->devOp->controlYellowLight(false); + //sysPara->devOp->controlYellowLight(true); + } + if(sysPara->status.YellowLightOnFlag){ //报警会时有时无 + sysPara->devOp->controlYellowLight(!sysPara->devOp->isYellowLightEnable()); + } + + if(sysPara->status.waitHightVolOff>0){ + sysPara->status.waitHightVolOff--; + if(sysPara->status.waitHightVolOff==0){ + sysPara->devOp->highVoltageCtrl(0); + ui->tabMainWindow->setRunStatus(tr("停止打印,自动关闭高压.")); + } + } + + }// 1s + +#ifdef WARNING + static int pre_pressed=0,pre_hvcurrent=0,press_err_cnt=0; + if(pulse_1s) + { + if((pre_pressed > sysPara->status.PRESSURE+70)) + { + if(++press_err_cnt>3) + { + LogInfo::setRunStatusText(tr("压力异常:上次压力值%1,当前压力值%2").arg(pre_pressed).arg(sysPara->status.PRESSURE)); + } + } + else + { + press_err_cnt = 0; + } + pre_pressed = sysPara->status.PRESSURE; + + + } + + if(pulse_100ms) + { + if(pre_hvcurrent>150 && ( sysPara->status.HV_DETOUT> pre_hvcurrent+20) && (sysPara->status.waitHightVolOn==8 || sysPara->status.waitHightVolOff==1) && sysPara->status.isPrinting ) + pre_hvcurrent = sysPara->status.HV_DETOUT; + + if(sysPara->status.waitHightVolOn<8)sysPara->status.waitHightVolOn++; + if(sysPara->status.isPrinting==0) sysPara->status.waitHightVolOn=0; + } +#endif + if(sysPara->devOp->color_flag ==3){ + sysPara->devOp->color_flag = 0; + pulse_30s = 0; + } + else if(pulse_1s && sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone + && (!sysPara->status.statWarn) && !sysPara->status.powerOffAppending){ + if((!sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed <= 2000) + ||(sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed <= sysPara->para.gearPumpSpeedAlarm)) + { + pulse_30s = 0; + } + else{ + pulse_30s++; + if(pulse_30s >= 5){ + if((sysPara->status.gearPumpRunSpeed >= 3000)||(sysPara->devOp->color_flag == 2) + ||(sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed > sysPara->para.gearPumpSpeedAlarm)) + { + sysPara->status.flagOfSpeedAlarm = true; + sysPara->devOp->color_flag = 2; + if(pulse_30s % 500 == 0){ + LogInfo::setRunStatusText(tr("齿轮泵转速过高,请立即停机并联系供应商!")); + qDebug()<<"齿轮泵转速过高,请立即停机并联系供应商!"; + } + ui->tabMainWindow->setRunStatus(tr("齿轮泵转速过高,请立即停机并联系供应商!")); + sysPara->devOp->controlRedLight(true); + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + } + else{ + sysPara->devOp->color_flag = 1; + if(pulse_30s % 500 == 0){ + LogInfo::setRunStatusText(tr("齿轮泵转速过高,请清理过滤器或者检查是否泄露!")); + qDebug()<<"齿轮泵转速过高,请清理过滤器或者检查是否泄露!"; + } + ui->tabMainWindow->setRunStatus(tr("齿轮泵转速过高,请清理过滤器或者检查是否泄露!")); + sysPara->devOp->controlYellowLight(true); + } + } + if(pulse_30s % 10 == 0) + qDebug()<<"粘度: "<status.viscosity); + } + } + else if(sysPara->status.statWarn & 0xFE){ + sysPara->devOp->color_flag = 3; + pulse_30s = 0; + } + } + + //测试代码,发布模式自动忽略 + +} + +void InkJetPrinter::autoControlHeater(){ + //100ms + static int tempDly=1830; + if(tempDly) tempDly--; + if(tempDly>=1800) + { + if(tempDly==1800) + { + sysPara->status.indoorTemperature = sysPara->status.TEMP_ADIN/4; + sysPara->devOp->pumpValveCtrl(1); + if(sysPara->status.indoorTemperature-35>0) + ui->tabSystemSetting->updateViscosityAdjust((sysPara->status.indoorTemperature-35)); + else + ui->tabSystemSetting->updateViscosityAdjust(0); + } + return; + } + if(sysPara->status.TEMP_ADIN/4 < sysPara->para.temperature && sysPara->status.heaterONTimeCnt < MAX_HEATER_TIME){ + if(tempDly==0) sysPara->status.heaterONTimeCnt ++; + if(!sysPara->devOp->isHearterEnable()) + sysPara->devOp->controlHeater(true); + + if(sysPara->status.heaterONTimeCnt == MAX_HEATER_TIME){ + LogInfo::setRunStatusText(tr("警告:加热器长时间无法达到预期温度,故障或设置错误!")); + ui->tabMainWindow->setRunStatus("加热器长时间无法达到预期温度,故障或设置错误!");//20150105 no check + sysPara->devOp->controlHeater(false); + } + } + else { + if(sysPara->status.heaterONTimeCnt < MAX_HEATER_TIME) + { + sysPara->status.heaterONTimeCnt = 0; + } + if(sysPara->devOp->isHearterEnable()) + sysPara->devOp->controlHeater(false); + } +} + +void InkJetPrinter::cnt1GroupCheck(void) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + static unsigned char lastGroupRunningIndex = 0; + if(sysPara->para.cnt1ByGroupEnalbe) + { + + + sysPara->devOp->ReadCnt1GroupStatus(); + if(lastGroupRunningIndex == sysPara->status.cnt1GroupRunningIndex) + return; + lastGroupRunningIndex = sysPara->status.cnt1GroupRunningIndex; + + emit updateCnt1GroupDisp(1); + } +#endif +} + +void InkJetPrinter::autoControlValvePump(void) + +{ + if(sysPara){ + if(!sysPara->status.isPumpValveControledByHand){ + + /*---------------------------------供墨阀--------------------------------------------*/ + bool enableFlag = ((sysPara->status.statWarn & WARN_STATUS_INK_SWINT) + || (sysPara->status.lastRecycleWarn && sysPara->para.RecycleWarnAction) // 2017.8.15版本回收故障关供墨阀问题 + || ( sysPara->status.HVFaultCloseEn ) //高压故障关闭墨线 + )?false:true; //墨线开关 + // if(enableFlag != sysPara->devOp->isInkValveOpen()){ + // sysPara->devOp->controlInkValve(enableFlag); //供墨阀 + // if(enableFlag == false){ //关闭 + // sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; + // } + // } + + if(enableFlag != sysPara->devOp->isInkValveOpen()){ + if(enableFlag == false) { //关闭供墨阀的顺序 先开循环阀后关闭供墨阀 + //#ifdef __AIR_RELEASE_OLD__ // 旧管路关闭墨线后 开粘度泵和循环阀一段时间 + if (sysPara->status.cycleValveOpenCntAfterSWintOff == 0) { + sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; + } + if (sysPara->status.cycleValveOpenCntAfterSWintOff < 60) { //在准备关闭循环阀的时候关闭供墨阀 + sysPara->devOp->controlInkValve(enableFlag); //关供墨 + sysPara->devOp->controlInkValvePWM(enableFlag); //关供墨 + } + //#else + // // 新管路直接关闭墨线 + // sysPara->devOp->controlInkValve(enableFlag); //关供墨 + //#endif + } + else { //开供墨阀 + if(!sysPara->devOp->isReclaimPumpOpen()) //开供墨阀之前要判断回收泵有没有开,没开就提前打开 + { + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + } + if(!ui->tabMainWindow->m_2sFlag) + { + sysPara->devOp->controlInkValve(enableFlag); + sysPara->devOp->controlInkValvePWM(enableFlag); + } + } + } + + /*----------------------------------循环阀-------------------------------------------*/ + if(!sysPara->status.selfCheckDone || (sysPara->status.needPowerOffTimerout && sysPara->para.gearPumpEnable)){ + // if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 //定时开机循环时隔膜泵不开关循环阀 + // sysPara->devOp->controlCycleValve(true); + // } + cycleValveRunForSelfCheck(); + if(sysPara->status.needPowerOffTimerout) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); + } + } + } + else { + if(sysPara->status.cycleValveOpenCntAfterSWintOff){ // 开循环阀 + if(!sysPara->devOp->isCycleValveOpen()){ + sysPara->devOp->controlCycleValve(true); + } + sysPara->status.cycleValveOpenCntAfterSWintOff --; + } + else if(sysPara->devOp->isCycleValveOpen()){ // 关循环阀 + sysPara->devOp->controlCycleValve(false); + } + } + + /*----------------------------------泄压阀-------------------------------------------*/ + //===================================================================================================== + if(sysPara->status.PRESSURE - sysPara->para.pressure > MAX_PRESSURE_RELEASE_DIFF) + sysPara->status.pressureOverFlowCnt ++; + else + sysPara->status.pressureOverFlowCnt = 0; + + if(( + sysPara->status.releaseValveOpenApending || + sysPara->status.pressureOverFlowCnt > 2 + ) //防止干扰和误动作 + && !sysPara->status.releaseValveDelayCnt) + { + if(!sysPara->devOp->isReleaseValveOpen()) + { //泄压阀 + sysPara->devOp->controlReleaseValve(true); + } + sysPara->status.releaseValveDelayCnt = MAX_RELEASE_VALVE_DELAY_CNT; + sysPara->status.releaseValveOpenApending = true; + } + else + { + if(sysPara->devOp->isReleaseValveOpen()) + { // + //sysPara->devOp->controlReleaseValve(false); + } + + if(sysPara->status.releaseValveDelayCnt) + sysPara->status.releaseValveDelayCnt --; + if(sysPara->status.PRESSURE < sysPara->para.pressure) + { + sysPara->status.releaseValveOpenApending = false; + if(sysPara->devOp->isReleaseValveOpen()){ sysPara->devOp->controlReleaseValve(false); + + } + } + } + + /*----------------------------------混合阀-------------------------------------------*/ + + /*备忘内容:主板的型号与软件版本 + `define JETV3 // EP4F15 V3板子 + `define JETV32 // EP3C10 V4板子 + `define JETV23 // V23板子 EP3C25 + */ + + /*-----------------------------------主墨泵------------------------------------------*/ + if(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV3 || PRODUCT_VERSION(sysPara->status.fpgaVersionNum) >= JETV23 ){ + //20170830修改主板硬件版本号,以便与主板硬件版本编号对应, V7主板编号为7 + if(sysPara->status.warm_InkPump){ + if(!sysPara->status.lastwarmInkPump){ + if(!sysPara->para.gearPumpEnable) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!主墨泵故障")); + ui->tabMainWindow->setRunStatus(tr("主墨泵故障!!!")); + sysPara->status.lastwarmInkPump = 1; + } + } + } + } + else + { + if(sysPara->status.SEPTAL_POSITION < (sysPara->para.septalPostion - DIFF_SEPTAL_POSITION)) + sysPara->status.septalPositionOverFlowCnt ++; + else + sysPara->status.septalPositionOverFlowCnt = 0; + if(sysPara->status.septalPositionOverFlowCnt > 2 && !sysPara->status.mainInkPumpError){ //主墨泵 + if(!sysPara->devOp->isMainInkPumpOpen()){ + sysPara->devOp->controlMainInkPump(true); + sysPara->status.mainInkPumpRunTmCnt = 0; + /*备忘内容:主板的型号与软件版本 + `define JETV3 // EP4F15 V3板子 + `define JETV32 // EP3C10 V4板子 + `define JETV23 // V23板子 EP3C25 + */ + /*-----------------------------------老管路的溶剂随主墨泵一起动作---------------------------*/ + if(sysPara->status.selfCheckDone && !sysPara->para.mixValveisNewVersion && PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1){ + if(sysPara->devOp->isMixValveOpen()) + checkMixValveClose(); + else + checkMixValveOpen(); + } + /*--------------------------------------------------------------------------------------*/ + } + else if(sysPara->status.selfCheckDone){ + if(sysPara->status.mainInkPumpRunTmCnt < MAX_MAIN_INK_PUMP_RUN_TIME){ // + sysPara->status.mainInkPumpRunTmCnt ++; + } + else { + if(!sysPara->para.gearPumpEnable) + { + sysPara->status.mainInkPumpError = true; + sysPara->devOp->controlMainInkPump(false); + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!主墨泵故障")); + ui->tabMainWindow->setRunStatus(tr("主墨泵故障!!!")); + } + } + } + } + else if(sysPara->status.SEPTAL_POSITION > sysPara->para.septalPostion){ + if(sysPara->devOp->isMainInkPumpOpen()) + sysPara->devOp->controlMainInkPump(false); + } + } + /*-----------------------------------压缩机------------------------------------------*/ + + if((sysPara->para.pressure - sysPara->status.PRESSURE > MAX_PRESSURE_DIFF) && !sysPara->status.compressPumpError){ //压缩机 + if(!sysPara->devOp->isCompressPumpOpen()){ + sysPara->devOp->controlCompressPump(true); + sysPara->status.compressPumpRunTmCnt = 0; + } + else if(sysPara->status.selfCheckDone){ + if(sysPara->status.compressPumpRunTmCnt < MAX_COMPRESS_PUMP_RUN_TIME){ //如果长时间开压缩机,考虑设备故障 + sysPara->status.compressPumpRunTmCnt ++; + } + else { + sysPara->status.compressPumpError = true; + sysPara->devOp->controlCompressPump(false); + if(!sysPara->para.gearPumpEnable) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!压缩机故障")); + ui->tabMainWindow->setRunStatus(tr("压缩机故障!!!")); + } + + } + } + } + else if(sysPara->para.pressure <= sysPara->status.PRESSURE){ //压力到达预期的压力 + if(sysPara->devOp->isCompressPumpOpen()) + sysPara->devOp->controlCompressPump(false); + } + + /*-----------------------------每30s打开一次粘度泵以及相关处理--------------------------------------*/ + else { + // static int viscosity_flag = 0; + static bool hasDetectedBellow = false; // 检测到下位灯 + static bool hasDetectedTop = false; // 检测到上位灯 + static int viscosity_low = 0; //统计粘度连续偏低10%次数 + static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数 + static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数 + static bool flag = 0; + + if(sysPara->status.cycleValveOpenCntAfterSWintOff) { //关闭墨线的时候要提前开粘度泵 + sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100; + } + ++sysPara->status.viscosityDelayCnt; + int mixer_open_threshold = (105*sysPara->para.viscosity)/100; + int viscosity_faulty_threshold =(113*sysPara->para.viscosity)/100; + if(sysPara->status.viscosityDelayCnt >= sysPara->para.viscosityPumpInterval*100 && flag == 0) + { + flag=1; + if (!sysPara->devOp->isViscosityPumpOpen()) + { + sysPara->devOp->controlViscosityPump(true); + viscosity_timer->start(10000); + qDebug()<<"粘度: "<status.viscosity); + } + if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold)) + { + sysPara->status.viscosityFault = 0; + viscosity_low=0; + Mixing_valve_open = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100) + { + viscosity_low++; + viscosity_faulty_num = 0; + Mixing_valve_open = 0; + } + if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold) + { + Mixing_valve_open++; + viscosity_low = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity > viscosity_faulty_threshold){ + Mixing_valve_open++; + viscosity_faulty_num++; + viscosity_low = 0; + } + + if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { // + sysPara->devOp->controlMixValve(true); + sysPara->RFIDPara.solventNumber++; + if(sysPara->para.RFIDSolventWarn){ + sysPara->para.RFIDSolventWarnMixCnt++; + LogInfo::setRunStatusText(tr("RFIDSolventWarnMixCnt = %1").arg(sysPara->para.RFIDSolventWarnMixCnt)); + qDebug()<<"RFIDSolventWarnMixCnt ="<para.RFIDSolventWarnMixCnt; + } + Mixing_valve_open = 0; + LogInfo::setRunStatusText(tr("添加溶剂:")+QString::number(sysPara->status.viscosity)); + qDebug()<<"添加溶剂"; + } + + if(viscosity_low >= 60) + { + LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度值偏低"; + sysPara->status.viscosityFault = 2; + } + if(viscosity_faulty_num >= 5) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度偏大故障"; + sysPara->status.viscosityFault = 1; + } + + } + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1) + { + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); + } + } + + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1) + { + if (sysPara->devOp->isViscosityPumpOpen()) { + sysPara->devOp->controlViscosityPump(false); + } + sysPara->status.viscosityDelayCnt = 0; + flag=0; + } + + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位 + viscosity_timer->stop(); + } + + if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) { + static int detectBelow = 0; + if (++detectBelow%400 == 0) { + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY) + { + if(sysPara->status.rWarnViscoReady>=15){ + sysPara->status.viscosityFault = 1; + sysPara->status.viscosity=0; + if(!firstTime) + qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity); + // LogInfo::setRunStatusText(tr("错误!粘度计下位灯故障.")+QString::number(sysPara->status.viscosity)); + hasDetectedBellow = true; + } + else sysPara->status.rWarnViscoReady++; + } + else { + sysPara->status.rWarnViscoReady = 0; + sysPara->status.viscosityFault = 0; + } + } + } + if(hasDetectedBellow && hasDetectedTop) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀 + } + } + if(sysPara->status.viscosityFault==0) + { + hasDetectedBellow = false; + hasDetectedTop = false; + } + } + + /*-----------------------------------回收泵------------------------------------------*/ + + if(!sysPara->status.autoCtlReclaimAfterSWintOff) + { + if(!sysPara->devOp->isReclaimPumpOpen() ){ //回收泵 + // ui->tabMainWindow->setRunStatus(tr("全速回收泵!!!")); + sysPara->status.reclaimPumpFullSpeedCnt = 0; + sysPara->devOp->controlReclaimPump(true,true); //先全速,后降速 + } + else if(sysPara->status.reclaimPumpFullSpeedCnt <= RECLAIM_PUMP_FULL_SPEED_CNT){ + sysPara->status.reclaimPumpFullSpeedCnt ++; + if(sysPara->status.reclaimPumpFullSpeedCnt == RECLAIM_PUMP_FULL_SPEED_CNT){ //降速 + // ui->tabMainWindow->setRunStatus(tr("降速回收泵!!!")); + sysPara->devOp->controlReclaimPump(true,false); + } + } + } + /*-----------------------------------------------------------------------------*/ + } + } +} +//========================== +// 放在10ms的定时器运行,但和粘度泵工作周期一致 +void InkJetPrinter::checkMixValveOpen(){ + //混合阀 + if(sysPara->status.viscosity>40000){ + sysPara->status.viscosityMaxFaultCnt++; + if(sysPara->status.viscosityMaxFaultCnt>5) + { + sysPara->status.viscosityMaxFaultCnt=0; + if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("粘度检测异常,粘度值太大!!!")); + sysPara->status.viscosityFault=1; + } + sysPara->status.viscosity=0; + } + int mixer_open_threshold = MAX_VISICOSITY_RATIO*sysPara->para.viscosity/100; + int mixer_open_threshold_high = (MAX_VISICOSITY_RATIO + 11)*sysPara->para.viscosity/100; + if(sysPara->status.viscosity > mixer_open_threshold) + {// 粘度值高报警: 条件@高于设定值的1.05,时间:120个测量周期 + sysPara->status.visocityValueOverflowNum ++; + if(sysPara->status.visocityValueOverflowNum >= (MAX_VISICOSITY_VALUE_OVERFLOW_NUM/3)){ + if((sysPara->status.viscosity >= mixer_open_threshold_high)//超出太多加得快,否则隔三下,加一下 + || ((sysPara->status.visocityValueOverflowNum % 3) == 0)){ + if(!sysPara->devOp->isMixValveOpen()){ // + sysPara->devOp->controlMixValve(true); + LogInfo::setRunStatusText(tr("混合阀打开2:")+QString::number(sysPara->status.viscosity)); + } + } + } + if(sysPara->status.visocityValueOverflowNum > MAX_ALLOW_VISICOSITY_OVERFLOW_NUM){ + if(sysPara->status.viscosityFault ==0 ) + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")); + + sysPara->status.viscosityFault = 1; + } + } + else if(sysPara->status.viscosity > 90*sysPara->para.viscosity/100){ + // 粘度值正常 + sysPara->status.visocityValueOverflowNum = 0; + sysPara->status.viscosityFault = 0; // 20160922 粘度低报警不能复位问题 + } + else {// 粘度值低报警: 条件@ 低于设定值的0.9,时间:60个测量周期 + sysPara->status.visocityValueOverflowNum ++; + if(sysPara->status.visocityValueOverflowNum > (MAX_ALLOW_VISICOSITY_OVERFLOW_NUM/2)){ + + if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")); + sysPara->status.viscosityFault = 2; + sysPara->status.visocityValueOverflowNum=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM-10; + } + } +} + + +void InkJetPrinter::checkMixValveClose(){ + if(sysPara->devOp->isMixValveOpen()){ // 关闭混合阀 + sysPara->devOp->controlMixValve(false); + } +} + +//在开机自检过程中交替打开和关闭循环阀 +void InkJetPrinter::cycleValveRunForSelfCheck(){ + static int cycleValveOpenCnt = 0; + if (++cycleValveOpenCnt%300 > 150) { + if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 开 + sysPara->devOp->controlCycleValve(true); + } + } + else { + if(sysPara->devOp->isCycleValveOpen()){ //循环阀 关 + sysPara->devOp->controlCycleValve(false); + } + } +} + +void InkJetPrinter::onReclaimTankBlock(){ + if(sysPara){ + ui->tabMainWindow->enableReclaimCtrlButton(true); + sysPara->status.reclaimTankBlockedAppending = true; + if(sysPara->status.powerOffAppending && sysPara->status.powerOffAfterPhaseFaultAppending) + ui->tabMainWindow->checkForPowerOff(); + sysPara->status.powerOffAppending = false; //如果有关机动作,终止 + + } + +} +/* + * + * 控制回收槽 + * + * */ + +void InkJetPrinter::detectAndcontrolReclaimTank(){ + sysPara->status.currReclaimTankPos =10*sysPara->status.curr_reclaimTankTime; + sysPara->status.reclaimTankBlockedAppending =0; + //qDebug()<status.reclaimTankstatus; + + if(sysPara->status.reclaimTankstatus == 0x10) //7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + if(sysPara->devOp->isReclaimTankCloseEnable()) + { + LogInfo::setRunStatusText(tr("电机故障")); + ui->tabMainWindow->setRunStatus(tr("电机故障")); + sysPara->devOp->controlReclaimTankClose(false); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + else { + LogInfo::setRunStatusText(tr("电机故障")); + ui->tabMainWindow->setRunStatus(tr("电机故障!!!")); + sysPara->devOp->controlReclaimTankOpen(false); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + + } + else if(sysPara->status.reclaimTankstatus == 5 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 + sysPara->status.reclainTankReachEnd = true; + /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ + ui->tabMainWindow->setRunStatus(tr("回收槽到头")); + ui->tabMainWindow->enablePrintButton(true); //仅仅在此时能使能打印按钮 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankOpenDone(); + /*回收槽开关时间校正*/ + sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; + ui->tabSystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime ); + } + else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); + emit reclaimTankBlock(); + } + else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); + sysPara->status.reclaimBlockedCnt = 0; + + } + else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankClose(false); //到头,关闭 + /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ + ui->tabMainWindow->setRunStatus(tr("回收槽到头")); + //sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankCloseDone(); + sysPara->status.lastRecycleWarn = 0; + sysPara->status.HVFaultCloseEn=0; + sysPara->status.reclainCloseAppending=false; + sysPara->status.canRunAirPushing = true; //下次开回收槽就执行排气程序 + //emit reclaimTankBlock(); + } + else if(sysPara->status.reclaimTankstatus == 0x12 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 + LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + else // if(sysPara->status.reclaimTankstatus == 7 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); + } +} + +static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable){ + if(enable){ + if(tab->indexOf(page) == -1){ + tab->addTab(page,name); + + } + } + else { + int index = tab->indexOf(page); + if(index != -1) + tab->removeTab(index); + } + +} + +static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable,int Pos){ + if(enable){ + if(tab->indexOf(page) == -1){ + tab->insertTab(Pos,page,name); + } + } + else { + int index = tab->indexOf(page); + if(index != -1) + tab->removeTab(index); + } + +} +void InkJetPrinter::onAuthChanged(int auth){ + + controlTabDisplay(this,ui->tabSystemSetting,tr("系统设置"),auth&AUTH_DISPLAY_SYSTEM_SETTING); + controlTabDisplay(this,ui->tabSystemManage,tr("系统管理"),auth&AUTH_DISPLAY_SYSTEM_MANAGE); + controlTabDisplay(this,ui->tabOtherInfo,tr("其他信息"),auth& AUTH_DISPLAY_OTHER_INFO); + controlTabDisplay(this,ui->tabLogInfo,tr("日志信息"),auth&AUTH_DISPLAY_LOG_INFO); + controlTabDisplay(this,ui->tabNetworkManager,tr("网络管理"),auth&AUTH_SUPER_USER1); + + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),auth); + ui->tabPrintSetting->updateAuthorization(auth); + ui->tabSystemSetting->updateAuthorization(auth); + ui->tabNetworkManager->updateAuthorization(auth); +} + +void InkJetPrinter::onConfigChanged(void){ + + sysPara->loadParaFromFile(); +} + +/* + * 这个方法的主要目的是在切换tab时不要弹出输入法 + * + */ + +void InkJetPrinter::onInkJetPrinterCurrentChanged(int index) +{ + QWidget *w = widget(index); + if(w){ + QWidget *subWidget = w->focusWidget(); + if(subWidget) + subWidget->clearFocus(); + } + //if(index == 3||index == 3) //刷新打印设置这个界面 + { + ui->tabPrintSetting->update(); + } + +} + +void InkJetPrinter::closeEvent(QCloseEvent *event) +{ +#ifdef SYS_LINUX + event->ignore(); +#else + exit(1); +#endif +} +void InkJetPrinter::resizeEvent(QResizeEvent *event){ + + event->ignore(); +} + +void InkJetPrinter::onChangeTab(QString) +{ + this->setCurrentIndex (indexOf( ui->tabPicEdit)); +} +void InkJetPrinter::onchangeEditMode(int) +{ + if(sysPara){ + if(sysPara->para.EditMode == PICFILE) { + insertTab(1,ui->tabPicEdit,tr("信息编辑")); + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),0); + } + else if(sysPara->para.EditMode == TXTFILE|| sysPara->para.EditMode == SCENE){ + controlTabDisplay(this,ui->tabPicEdit,tr("信息编辑"),0); + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),1,1); + } + ui->tabMainWindow->changeEditMode(sysPara->para.EditMode); + } + else{ + + } +} + + +void InkJetPrinter::OnSpeedOver(int mode) +{ + if(mode==2){ + //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); + msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); + msgtest->show(); + } + else if(mode==1){ + //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全!!!")); + msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全!!!")); + msgtest->show(); + } +} + +void InkJetPrinter::onPrintErrorStatus(QString s,unsigned int res) +{ + if(res==1 || sysPara->status.WorkTimeOut ){ + sysPara->status.WorkTimeOut =1; + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + //emit QMessageBox::warning(NULL,tr("警告"),s); + msgtest->setText(s); + msgtest->show(); + } + else if(res==2) { + //emit QMessageBox::warning(NULL,tr("警告"),s); + msgtest->setText(s); + msgtest->show(); + } + else if(res==3) { sysPara->status.WorkTimeOut =0; } +} +void InkJetPrinter::OnFinished(int event){ + //msgtest->setText(" ");msgtest->show(); + Q_UNUSED(event); + msgtest->hide(); + +} +unsigned char BCDtoHEX(unsigned char BCD) +{ + unsigned char tempData; + + tempData = (BCD >> 4) * 10 + (BCD & 0x0F); + return (tempData); +} +void InkJetPrinter::refreshModbusStatus(void) +{ +#ifdef MODBUS + if (modbus->getModbusStatus() != 1) { + qDebug()<<"refresh get modbus error"; + return; + } + + qint16 fileNameSize = QFileInfo(sysPara->para.lastOpenedFileName).fileName().size(); + if (fileNameSize) { + if (fileNameSize > 100) { + fileNameSize = 100; + } + } + QString str = QFileInfo(sysPara->para.lastOpenedFileName).fileName(); + snprintf((char *)sysPara->modbusStatus.usedFileName, sizeof(sysPara->modbusStatus.usedFileName), "%s",(char *)str.toAscii().constData()); + sysPara->modbusStatus.printStatus = ui->tabMainWindow->getCurrPrintStatus(); + memcpy(&sysPara->modbusStatus.curCalendarAndDate, &sysPara->status.calandar_and_dat, sizeof(sysPara->status.calandar_and_dat)); + + unsigned char tmp[4]; + memcpy(&tmp,&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,4); + tmp[0] = BCDtoHEX(tmp[0]); + tmp[1] = BCDtoHEX(tmp[1]); + tmp[2] = BCDtoHEX(tmp[2]); + tmp[3] = BCDtoHEX(tmp[3]); + //memcpy(&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,&tmp,4); + sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = tmp[3]*1000000 + tmp[2]*10000+ tmp[1]*100 + tmp[0] ; + //sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue).toUInt(0,16); + sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->modbusStatus.curCalendarAndDate.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->modbusStatus.curCalendarAndDate.cnt1End = sysPara->para.cnt1EndValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2End = sysPara->para.cnt2EndValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2Repeat = sysPara->para.cnt2RepeateValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2InitValue = sysPara->para.cnt2StartValue; + sysPara->modbusStatus.productCnt = sysPara->status.productCnt; + + + sysPara->modbusStatus.statWarn = sysPara->status.RedLightOnFlag ; + // 显示正在打印内容的行数和列数 + int wmax = sysPara->status.currPrintRow; + if (sysPara->para.AlterMode) { + wmax = sysPara->status.currAlterPrintRow; + } + sysPara->modbusStatus.mbCurrPrintRow = wmax; + sysPara->modbusStatus.mbCurrPrintCol = sysPara->status.currPrintCol; +#endif +} + +void InkJetPrinter::onModbusWriteCalendar() +{ +#ifdef MODBUS + if (modbus->getModbusStatus() == -1) { + qDebug()<<"get modbus error"; + return; + } + + sysPara->para.cnt1StartValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; + sysPara->para.cnt1EndValue = sysPara->modbusParas.setCalendar.cnt1End; + sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1Repeat; + sysPara->para.cnt1StepValue = sysPara->modbusParas.setCalendar.cnt1Step; + + sysPara->para.cnt2StartValue = sysPara->modbusParas.setCalendar.cnt2InitValue; + sysPara->para.cnt2EndValue = sysPara->modbusParas.setCalendar.cnt2End; + sysPara->para.cnt2StepValue = sysPara->modbusParas.setCalendar.cnt2Repeat; + sysPara->para.cnt2RepeateValue = sysPara->modbusParas.setCalendar.cnt2Step; + + if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x02) { + sysPara->status.cnt2CurrentValueInitDoneFlag = 0; + } + if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x01) { + sysPara->status.cnt1CurrentValueInitDoneFlag = 0; + } + sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; + sysPara->para.cnt2CurrValue = sysPara->modbusParas.setCalendar.cnt2CurrValue; + sysPara->devOp->writeFpgaCalandar(0); + emit updataPara2UI(); +#endif +} + +void InkJetPrinter::close_jd_timer() +{ + jd_timer->stop(); + timer->stop(); +} + +void InkJetPrinter::handlePushButtonStartPressed(bool flag) +{ + pushButtonStartFlag = flag; + + if(flag) + { + PID_init(); + } + sysPara->status.gearPumpRunStopFlag = !flag;//齿轮泵开关 +} + +void InkJetPrinter::handleInitedPID() +{ + PID_init(); +} + +void InkJetPrinter::fpgaDebugWriteByte() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaByteAddrSpinBox->value(); + unsigned char fpgaValue = ui->fpgaByteValueSpinBox->value(); + sysPara->devOp->fpgaWr(fpgaAddr, &fpgaValue, 1); +#endif +} + +void InkJetPrinter::fpgaDebugReadByte() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaByteAddrSpinBox->value(); + unsigned char fpgaValue; + sysPara->devOp->fpgaRd(fpgaAddr, &fpgaValue, 1); + ui->fpgaByteValueSpinBox->setValue(fpgaValue); + +#endif +} + +void InkJetPrinter::fpgaDebugWriteWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaWordAddrSpinBox->value(); + unsigned int fpgaValue = ui->fpgaWorldValueSpinBox->value(); + unsigned char buff[2]; + buff[0] = fpgaValue & 0xFF; + buff[1] = (fpgaValue >> 8) & 0xFF; + sysPara->devOp->fpgaWr(fpgaAddr, buff, 2); +#endif +} + +void InkJetPrinter::fpgaDebugReadWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaWordAddrSpinBox->value(); + unsigned int fpgaValue; + unsigned char buff[2]; + sysPara->devOp->fpgaRd(fpgaAddr, buff, 2); + fpgaValue = buff[1]<<8|buff[0]; + ui->fpgaWorldValueSpinBox->setValue(fpgaValue); +#endif +} + +void InkJetPrinter::fpgaDebugWriteDWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaDWordAddrSpinBox->value(); + unsigned int fpgaValueH = ui->fpgaDWorldValueHSpinBox->value(); + unsigned int fpgaValueL = ui->fpgaDWorldValueLSpinBox->value(); + unsigned char buff[4]; + buff[0] = fpgaValueL & 0xFF; + buff[1] = (fpgaValueL >> 8) & 0xFF; + buff[2] = fpgaValueH & 0xFF; + buff[3] = (fpgaValueH >> 8) & 0xFF; + sysPara->devOp->fpgaWr(fpgaAddr, buff, 4); +#endif +} + +void InkJetPrinter::fpgaDebugReadDWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaDWordAddrSpinBox->value(); + unsigned char buff[4]; + sysPara->devOp->fpgaRd(fpgaAddr, buff, 4); + unsigned int fpgaValueL = buff[1]<<8|buff[0]; + unsigned int fpgaValueH = buff[3]<<8|buff[2]; + ui->fpgaDWorldValueHSpinBox->setValue(fpgaValueH); + ui->fpgaDWorldValueLSpinBox->setValue(fpgaValueL); +#endif +} + +void InkJetPrinter::recievedFile2Save(QString fileName) +{ + //qDebug() << "recieveFile2Save:"<exists(saveName); + if (exist) + { + createfile->remove(saveName); + }//end if + QFile::copy ( sourceName,saveName ); + emit openFile(saveName,false); + //emit startPrint();确认接收到消息立即打印 + //ui->tabMainWindow->getTexteditOption()->onFileOpen(saveName,false); + //ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + } + else { + + } +} + +void InkJetPrinter::viscosity_timerHandler() +{ + if(!firstTime) + qDebug()<<"错误!粘度计故障:检测不到上位灯"; + // LogInfo::setRunStatusText(tr("错误!粘度计故障:检测不到上位灯")); + viscosity_timer->stop(); + firstTime = 0; +} + +void InkJetPrinter::disableTabClick(){ + this->setDisabled(true); + this->setCurrentIndex(0); +} + + +static int lowSpeedCnt = 0; +static int highSpeedCnt = 0; +static int lowPressureCnt = 0; +static int highPressureCnt = 0; +static unsigned int logCnt = 0; +float rateOld = 1.0; +#define Min_Speed 100 +#define lowSpeed_ToleranceTime 10 +#define highSpeed_ToleranceTime 10 +#define lowPressure_ToleranceTime 20 +#define highPressure_ToleranceTime 10 +void InkJetPrinter::checkPressureControl(){ //1s + logCnt++; + unsigned int targetP = sysPara->para.pressure; + unsigned int actualP = sysPara->status.PRESSURE; + unsigned short actualS = sysPara->status.gearPumpRunSpeed; + float rate = (float)actualP/targetP; + // if(logCnt % 30 == 0) + //LogInfo::setRunStatusText(tr("pressureRate = %1").arg(rate)); + if(!sysPara->para.gearPumpEnable || !sysPara->para.flagOfReclaimPumEnable) + return; + if(rate >=0.9 && rate <=1.1 && actualS >= Min_Speed && actualS <= sysPara->para.gearPumpSpeedAlarm){ + lowSpeedCnt = 0; + highSpeedCnt = 0; + lowPressureCnt = 0; + highPressureCnt = 0; + return; + } + /*************非手动状态下进行检查开始************************/ + if(!sysPara->status.isPumpValveControledByHand){ + if(actualS < Min_Speed){ + lowSpeedCnt++; + highSpeedCnt = 0; + } + else if(actualS <= sysPara->para.gearPumpSpeedAlarm){ + lowSpeedCnt = 0; + highSpeedCnt = 0; + } + else{ + lowSpeedCnt = 0; + highSpeedCnt++; + } + + if(rate < 0.8){ + lowPressureCnt++; + highPressureCnt = 0; + if(lowPressureCnt == 1) + rateOld = rate; + else if(lowPressureCnt == 10){ + if((rate - rateOld) < 0.1 && highSpeedCnt > 0){ + QString str = "高转速下压力提升缓慢,请检查管路是否堵塞或者压力传感器是否正常"; + showMessage(str); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->status.flagOfPressureFault = true; + } + } + } + else if(rate <= 1.2){ + lowPressureCnt = 0; + highPressureCnt = 0; + } + else{ + lowPressureCnt = 0; + highPressureCnt++; + } + } + /****************非手动状态下进行检查结束***************************/ + + if(lowPressureCnt == 0) rateOld = 1.0; + + if(lowSpeedCnt >= lowSpeed_ToleranceTime){ + if(lowPressureCnt >= lowPressure_ToleranceTime){ +// QString str = "转速过低,压力值过低,请检查电路,或者压力传感器是否正常"; +// showMessage(str); + } + else if(highPressureCnt >= highPressure_ToleranceTime){ + QString str = "转速过低,压力值过高,请检查压力传感器是否正常"; + showMessage(str); + } + else{ + } + } + else if(highSpeedCnt >= highSpeed_ToleranceTime){ + if(lowPressureCnt >= lowPressure_ToleranceTime){ + QString str = "转速过高,压力偏低,请检查管路是否堵塞"; + showMessage(str); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + sysPara->status.flagOfPressureFault = true; + } + else if(highPressureCnt >= highPressure_ToleranceTime){ + QString str = "转速过高,压力过高,请检查压力传感器是否正常"; + showMessage(str); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + sysPara->status.flagOfPressureFault = true; + } + else{ + QString str = "转速过高,请检查管路是否堵塞"; + showMessage(str); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + sysPara->status.flagOfPressureFault = true; + } + } + else{ + + } +} + +void InkJetPrinter::showMessage(QString str){ + msgtest->setText(str); + if(logCnt % 30 == 0){ +// msgtest->show(); + LogInfo::setRunStatusText(str); + qDebug()<devOp->color_flag = 2; + ui->tabMainWindow->setRunStatus(str); +} + +void InkJetPrinter::resetPressureCnt(){ + lowSpeedCnt = 0; + highSpeedCnt = 0; + lowPressureCnt = 0; + highPressureCnt = 0; +} + +void InkJetPrinter::pressureAdjustForsystemseeting(){ + pressureAdj(1); +} diff --git a/InkJetPrinter.h b/InkJetPrinter.h new file mode 100644 index 0000000..b8d463e --- /dev/null +++ b/InkJetPrinter.h @@ -0,0 +1,137 @@ +/* + * + * + * DIFF_SEPTAL_POSITION 隔膜位置由20改为50的主泵动作时间 + */ +#ifndef INKJETPRINTER_H +#define INKJETPRINTER_H + +#define SPEEDOVER //超速停止 + + +#include +#include +#include +#include "Tftp/filetranseceiver.h" +#include "ParaSettingUI.h" +#include "modbus/modbustcp.h" +#include +#include "dlgshowmsg.h" +#include +#include + +namespace Ui { +class InkJetPrinter; +} + + +#define MAX_PRESSURE_RELEASE_DIFF 25 +#define MAX_PRESSURE_DIFF 50 +#define MAX_VISICOSITY_RATIO 110 //105% +#define DIFF_SEPTAL_POSITION 50 +#define MAX_VISICOSITY_VALUE_OVERFLOW_NUM 3 //连续超过此值会进行粘度调整 +#define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 + +class PicScene; + +class InkJetPrinter : public QTabWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit InkJetPrinter(QWidget *parent = 0); + ~InkJetPrinter(); + void pressureAdj(int); + FileTranseceiver* fileTransceiv; + FileTranseceiver* tcpTransceiv; +// void processCommands(); +#ifdef MODBUS +// class ModbusSerial *modbus; + class ModbusTcp *modbus; + QThread m_thread; +#endif + +public slots: + void onchangeEditMode(int); + void onChangeTab(QString); + //void onPrintErrorStatus(QString s); + void onPrintErrorStatus(QString s, unsigned int res); + + void close_jd_timer(); + void handlePushButtonStartPressed(bool); + void handleInitedPID(); + + void onModbusWriteCalendar(); + void resetPressureCnt(); + void pressureAdjustForsystemseeting(); + +private: + Ui::InkJetPrinter *ui; + DlgShowMsg *dlgShowMsg; + //MainWindow *mainWindow; + QTimer* viscosity_timer; + QTimer* timer; + QTimer* jd_timer; + QTime t1; + void autoControlHeater(); + void autoControlValvePump(); + void detectAndcontrolReclaimTank(); + void refreshModbusStatus(void); + void checkPressureControl(); + void showMessage(QString); + +Q_SIGNALS: + +// void updateQRcode(); +// void startPrint(); +// void pausePrint(); +// void stopPrint(); + + void setReclaimTankCurrentPos(int); + void reclaimTankOpenDone(); + void reclaimTankCloseDone(); + void reclaimTankBlock(); //回收槽卡住 + //void changeEditMode(int); + void SpeedOver(int mode); + void updateCnt1GroupDisp(bool); + void updataPara2UI(); + void sendPicScene(PicScene* pPicScene); + void openFile(QString filePath,bool insertFlag); + +private slots: + void OnSpeedOver(int mode); + void jd_timerHandler(); + void timerHandler(); + void onInkJetPrinterCurrentChanged(int index); + void onReclaimTankBlock(); + void onAuthChanged(int auth); + void onConfigChanged(); + void OnFinished(int event); + void DacAdjustStore(); + void fpgaDebugWriteByte(); + void fpgaDebugReadByte(); + void fpgaDebugWriteWord(); + void fpgaDebugReadWord(); + void fpgaDebugWriteDWord(); + void fpgaDebugReadDWord(); + void recievedFile2Save(QString fileName); + void viscosity_timerHandler(); + void disableTabClick(); +private: + + QLabel *t_label; + QMessageBox *msgtest; + void closeEvent(QCloseEvent *event); + void resizeEvent(QResizeEvent *); + void checkMixValveOpen(); + void checkMixValveClose(); + void cycleValveRunForSelfCheck(); + void cnt1GroupCheck(void); + void loadVoltageValue(); + char jd_res; + bool pushButtonStartFlag; + + unsigned char rWarnViscoReady; +}; + +#endif // INKJETPRINTER_H diff --git a/InputMethod.cpp b/InputMethod.cpp new file mode 100644 index 0000000..e93e68b --- /dev/null +++ b/InputMethod.cpp @@ -0,0 +1,1985 @@ +/* +* +*2013.9.12 括号错位修复 为了节约cpu最好改用映射方式 &仍未能显示出来 中文模式下小括号还是错位 +*/ +/* + Key_Backspace1 = 0x01001003, + Key_Return1 = 0x01001004, + Key_Enter1 = 0x01001005, + Key_Insert1 = 0x01001006, + Key_Delete1 = 0x01001007, + Key_Clear1 = 0x0100100b, + Key_Home1 = 0x01001010, // cursor movement + Key_End1 = 0x01001011, + Key_Left1 = 0x01001012, + Key_Up1 = 0x01001013, + Key_Right1 = 0x01001014, + Key_Down1 = 0x01001015, + Key_PageUp1 = 0x01001016, + + */ +#include +#include +#include +#include +#include +#include +#include +#include "MyInputMethod.h" +#include "InputMethod.h" +#include "ui_InputMethod.h" +#include "Public.h" +#include +#include +#include +#include + +QHash *> *InputMethod::pinyinHash = NULL; +QList InputMethod::pinyinHashKeys; +QStringList InputMethod::pinyinHashQStringList; + + +InputMethod::InputMethod(MyInputMethod *myInputMethod,QWidget *parent) : + QWidget(parent,(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool)),//(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool)如果不设置标志,会抢焦点 + ui(new Ui::InputMethod),spaceTimer(this) +{ + + //setWindowOpacity(0.9); + + this->myInputMethod = myInputMethod; + ui->setupUi(this); + currentInputMethodType = INPUT_METHOD_TYPE_ENGLISH; + shiftFlag = false; + pinyinPage = 0; + bengalFlag = false; + CapsFlag=false; + CtrlFlag=false; +#ifdef EnableArabic + arabicFlag=false; + englishOrArabicFlag=false; +#endif + /*---------------------------------------------------*/ + labelInputTip.setParent(0,(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool)); + //QFont font(Public::getFontFamily(24)); + //font.setPixelSize(20); + //labelInputTip.setFont(font); + labelInputTip.setAlignment(Qt::AlignCenter); + labelInputTip.setFrameShape(QFrame::Box); + labelInputTip.setFrameShadow(QFrame::Sunken); + labelInputTip.hide(); + /*---------------------------------------------------*/ + if(Public::ReadLanguageName() != "Chinese") + ui->Key_InputMethodSelect->setEnabled(false); + + buttonConnect(ui->Key_QuoteLeft,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_one,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_two,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_three,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_four,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_five,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_six,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_seven,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_eight,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_nine,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_zero,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Minus,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Equal,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_BracketLeft,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_BracketRight,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_BackSlash,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Semicolon,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Apostrophe,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Comma,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Period,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Slash,this,SLOT(onDigitalPunctuationClicked())); + buttonConnect(ui->Key_Space,this,SLOT(onDigitalPunctuationClicked())); + connect(ui->Key_Space, SIGNAL(pressed()), this, SLOT(spaceKeyPressed())); + connect(ui->Key_Space, SIGNAL(released()), this, SLOT(spaceKeyRelease())); + connect(&spaceTimer, SIGNAL(timeout()), this, SLOT(spaceKeyLongPressed())); + connect(&backtimer, SIGNAL(timeout()), this, SLOT(backKeyLongPressed())); + connect(&insertSpaceNumDialog,SIGNAL(accepted()),this,SLOT(onInsertSpaceNumDialogAccepted())); + buttonConnect(ui->Key_A,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_B,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_C,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_D,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_E,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_F,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_G,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_H,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_I,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_J,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_K,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_L,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_M,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_N,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_O,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_P,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_Q,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_R,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_S,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_T,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_U,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_V,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_W,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_X,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_Y,this,SLOT(onCharClicked())); + buttonConnect(ui->Key_Z,this,SLOT(onCharClicked())); + + buttonConnect(ui->Key_ShiftLeft,this,SLOT(onShiftClicked())); + + //buttonConnect(ui->Key_InputMethodSelect,this,SLOT(onInputMethodClicked())); + connect(ui->Key_InputMethodSelect,SIGNAL(released()),this,SLOT(onInputMethodClicked())); + buttonConnect(ui->Key_Backspace,this,SLOT(onBackspaceClicked())); + buttonConnect(ui->Key_Last,this,SLOT(onKeyLastClicked())); + buttonConnect(ui->Key_Next,this,SLOT(onKeyNextClicked())); + buttonConnect(ui->Key_Enter,this,SLOT(onEnterClicked())); + buttonConnect(ui->Key_Left,this,SLOT(onKeyLeftpressed())); + buttonConnect(ui->Key_Down,this,SLOT(onKeyDownpressed())); + buttonConnect(ui->Key_Up,this,SLOT(onKeyUppressed())); + buttonConnect(ui->Key_Right,this,SLOT(onKeyRightpressed())); + buttonConnect(ui->Key_Home,this,SLOT(onKeyHomepressed())); + buttonConnect(ui->Key_End,this,SLOT(onKeyEndpressed())); + buttonConnect(ui->Key_delete,this,SLOT(onKeydeletepressed())); + buttonConnect(ui->Key_SpecialChar,this,SLOT(onKeySpecialCharpressed())); + //connect(ui->Key_SpecialChar,SIGNAL(pressed()),this,SLOT(onInputMethodClicked())); + buttonConnect(ui->Key_Ctrl,this,SLOT(onKeyCtrlpressed())); + buttonConnect(ui->pushButtonCaps,this,SLOT(onpushButtonCapspressed())); + /*----------------------------------------------------------------------------------------------*/ + hanziDisplayLabels[0] = ui->hanzi_1ch; + hanziDisplayLabels[1] = ui->hanzi_2ch; + hanziDisplayLabels[2] = ui->hanzi_3ch; + hanziDisplayLabels[3] = ui->hanzi_4ch; + hanziDisplayLabels[4] = ui->hanzi_5ch; + for(int i = 0; i < HANZI_SELECT_NUM; i++){ //担心用户改动HANZI_SELECT_NUM却没改动上面 + if(!hanziDisplayLabels[i]) + QMessageBox::critical((QWidget *)0,tr("错误"),tr("hanziDisplayLabels缺少初始化")); + else{ + hanziDisplayLabels[i]->setText(""); + connect(hanziDisplayLabels[i],SIGNAL(pressed()),this,SLOT(onHanziLabelClicked())); + } + } + + userPinyinInputAppending = false; + currPinyinList = 0; + hide(); + + hanZiLabelVisibleEnable = true; + ctrlAppending = false; + setHanziLabelVisible(false); + //keyMap.insert("(","("); + //keyMap.insert(")",")"); + keyMap.insert("(","("); + keyMap.insert(")",")"); + keyMap.insert("[","["); + keyMap.insert("]","]"); + keyMap.insert("{","{"); + keyMap.insert("}","}"); + keyMap.insert("【","【"); + keyMap.insert("】","】"); + keyMap.insert("『","『"); + keyMap.insert("』","』"); + //keyMap.insert("《","《"); + //keyMap.insert("》","》"); + keyMap.insert("《","《"); + keyMap.insert("》","》"); + //keyMap.insert("<","<"); + //keyMap.insert(">",">"); + keyMap.insert("<","<"); + keyMap.insert(">",">"); + keyMap.insert("&","&&"); + keyMap.insert("&&","&"); + //keyMap.insert("(","("); + //keyMap.insert(")",")"); + keyMap.insert("(","("); + keyMap.insert(")",")"); + keyMap.insert("1","1"); + keyMap.insert("2","2"); + keyMap.insert("3","3"); + keyMap.insert("4","4"); + keyMap.insert("5","5"); + keyMap.insert("6","6"); + keyMap.insert("7","7"); + keyMap.insert("8","8"); + keyMap.insert("9","9"); + keyMap.insert("0","0"); + + keyMap.insert("`","`"); + keyMap.insert("~","~"); + keyMap.insert("·","·"); + keyMap.insert("~","~");//中文 + keyMap.insert("!","!"); + keyMap.insert("!","!");//中文 + keyMap.insert("@","@"); + keyMap.insert("#","#"); + keyMap.insert("$","$"); + keyMap.insert("¥","¥"); + keyMap.insert("%","%"); + keyMap.insert("^","^"); + keyMap.insert("…","…"); + keyMap.insert("*","*"); + keyMap.insert("-","-"); + keyMap.insert("_","_"); + keyMap.insert("—","—");//中文 + keyMap.insert("+","+"); + keyMap.insert("=","="); + keyMap.insert("\\","\\"); + keyMap.insert("|","|"); + keyMap.insert("、","、");//中文 + keyMap.insert(";",";"); + keyMap.insert(":",":"); + keyMap.insert(":",":");//中文 + keyMap.insert("'","'"); + keyMap.insert("\"","\""); + keyMap.insert("‘","‘"); + keyMap.insert("“","“"); + keyMap.insert(",",","); + keyMap.insert(",",",");//中文 + keyMap.insert(".","."); + keyMap.insert("。","。");//中文 + keyMap.insert("/","/"); + keyMap.insert("?","?"); + keyMap.insert("?","?");//中文 + + keyMap.insert("1","1"); + keyMap.insert("2","2"); + keyMap.insert("3","3"); + keyMap.insert("4","4"); + keyMap.insert("5","5"); + keyMap.insert("6","6"); + keyMap.insert("7","7"); + keyMap.insert("8","8"); + keyMap.insert("9","9"); + keyMap.insert("0","0"); +#ifdef EnableArabic + keyMap.insert("11","١"); + keyMap.insert("12","٢"); + keyMap.insert("13","٣"); + keyMap.insert("14","٤"); + keyMap.insert("15","٥"); + keyMap.insert("16","٦"); + keyMap.insert("17","٧"); + keyMap.insert("18","٨"); + keyMap.insert("19","٩"); + keyMap.insert("20","٠"); +#endif + keyMap.insert("a","a"); + keyMap.insert("b","b"); + keyMap.insert("c","c"); + keyMap.insert("d","d"); + keyMap.insert("e","e"); + keyMap.insert("f","f"); + keyMap.insert("g","g"); + keyMap.insert("h","h"); + keyMap.insert("i","i"); + keyMap.insert("j","j"); + keyMap.insert("k","k"); + keyMap.insert("l","l"); + keyMap.insert("m","m"); + keyMap.insert("n","n"); + keyMap.insert("o","o"); + keyMap.insert("p","p"); + keyMap.insert("q","q"); + keyMap.insert("r","r"); + keyMap.insert("s","s"); + keyMap.insert("t","t"); + keyMap.insert("u","u"); + keyMap.insert("v","v"); + keyMap.insert("w","w"); + keyMap.insert("x","x"); + keyMap.insert("y","y"); + keyMap.insert("z","z"); + + keyMap.insert("a","A"); + keyMap.insert("b","B"); + keyMap.insert("c","C"); + keyMap.insert("d","D"); + keyMap.insert("e","E"); + keyMap.insert("f","F"); + keyMap.insert("g","G"); + keyMap.insert("h","H"); + keyMap.insert("i","I"); + keyMap.insert("j","J"); + keyMap.insert("k","K"); + keyMap.insert("l","L"); + keyMap.insert("m","M"); + keyMap.insert("n","N"); + keyMap.insert("o","O"); + keyMap.insert("p","P"); + keyMap.insert("q","Q"); + keyMap.insert("r","R"); + keyMap.insert("s","S"); + keyMap.insert("t","T"); + keyMap.insert("u","U"); + keyMap.insert("v","V"); + keyMap.insert("w","W"); + keyMap.insert("x","X"); + keyMap.insert("y","Y"); + keyMap.insert("z","Z"); +} + + + +InputMethod::~InputMethod() +{ + delete ui; + if(InputMethod::pinyinHash != NULL){ /**/ + QHash *>::const_iterator i = InputMethod::pinyinHash->constBegin(); + while (i != InputMethod::pinyinHash->constEnd()) { + delete (QList *)i.value(); + } + delete InputMethod::pinyinHash; + } + +} + +void InputMethod::buttonConnect( QPushButton *sender, + const QObject *receiver, const char *member){ + sender->setObjectName(sender->text()); + connect(sender, SIGNAL(pressed()),receiver, member); + connect(sender, SIGNAL(pressed()),this, SLOT(onKeyPressed())); + connect(sender, SIGNAL(released()),this, SLOT(onKeyReleased())); + +} + +void InputMethod::spaceKeyPressed(){ + spaceTimer.start(700); +} +void InputMethod::spaceKeyRelease(){ + spaceTimer.stop(); +} + +void InputMethod::spaceKeyLongPressed(){ + spaceTimer.stop(); + insertSpaceNumDialog.show(); +} + +void InputMethod::onInsertSpaceNumDialogAccepted(){ + int spaceNum = insertSpaceNumDialog.getSpinBoxSpaceNum()->value() - 1; + for(int i = 0; i < spaceNum; i++){ + userInputed(" "); + } +} + +void InputMethod::userInputed(QString str){ + if(myInputMethod){ + if(bengalFlag){ + if(str == "上")str = "A"; + else if(str == "下")str = "B"; + else if(str == "丌")str = "C"; + else if(str == "不")str = "D"; + else if(str == "与")str = "E"; + else if(str == "义")str = "F"; + else if(str == "丐")str = "G"; + else if(str == "丑")str = "H"; + else if(str == "之")str = "I"; + else if(str == "专")str = "J"; + else if(str == "且")str = "K"; + else if(str == "丕")str = "L"; + else if(str == "世")str = "M"; + else if(str == "乌")str = "N"; + else if(str == "丘")str = "O"; + else if(str == "丙")str = "P"; + else if(str == "业")str = "Q"; + else if(str == "丛")str = "R"; + else if(str == "东")str = "S"; + else if(str == "丝")str = "T"; + else if(str == "丞")str = "U"; + else if(str == "乎")str = "V"; + else if(str == "乏")str = "W"; + else if(str == "乐")str = "X"; + else if(str == "丢")str = "Y"; + else if(str == "乒")str = "Z"; + else if(str == "两")str = "a"; + else if(str == "严")str = "b"; + else if(str == "乓")str = "c"; + else if(str == "丧")str = "d"; + else if(str == "丨")str = "e"; + else if(str == "乔")str = "f"; + else if(str == "个")str = "g"; + else if(str == "丫")str = "h"; + else if(str == "乖")str = "i"; + else if(str == "中")str = "j"; + else if(str == "乘")str = "k"; + else if(str == "乙")str = "l"; + else if(str == "丰")str = "m"; + else if(str == "九")str = "n"; + else if(str == "串")str = "o"; + else if(str == "乞")str = "p"; + else if(str == "临")str = "q"; + else if(str == "也")str = "r"; + else if(str == "习")str = "s"; + else if(str == "乡")str = "t"; + else if(str == "丸")str = "u"; + else if(str == "丹")str = "v"; + else if(str == "为")str = "w"; + else if(str == "主")str = "x"; + else if(str == "书")str = "y"; + else if(str == "丽")str = "z"; + } + myInputMethod->sendString (str); + + } + else{ + QMessageBox::warning(this,tr("warning"),tr("myInputMethod is null\n")); + } +} +/* + 用来初始化拼音表 +*/ +bool InputMethod::initInputMethod(QString &filename){ + QFile file(filename); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::critical((QWidget *)0,tr("错误"),tr("找不到输入法初始化文件") + filename); + return false; + } + QTextStream in(&file); + if(InputMethod::pinyinHash != NULL){ /*先删除,在添加*/ + QHash *>::const_iterator i = InputMethod::pinyinHash->constBegin(); + /* + while (i != InputMethod::pinyinHash->constEnd()) { + QList *pQList = i.value(); + if(pQList != NULL) + { + delete pQList; + } + }*/ // 是否会有问题呢? + delete InputMethod::pinyinHash; + + } + InputMethod::pinyinHash = new QHash *> (); + while (!in.atEnd()) { + QString line = in.readLine(); + QChar *ch = line.data(); + QString pinyin = ""; + QString hanzi = ""; + if(line.size()){ + for(int i = 0; i < line.size(); i++){ + if(ch[i].unicode() < 0x80) + pinyin.append(ch[i]); + else + hanzi.append(ch[i]); + } + + if(!InputMethod::pinyinHash->contains(pinyin)) + InputMethod::pinyinHash->insert(pinyin,new QList()); + } + + QList * list = (QList *)InputMethod::pinyinHash->value(pinyin); + list->append(hanzi); + + //qDebug() << pinyin << ":" << hanzi; + } + InputMethod::pinyinHashKeys = pinyinHash->keys(); + InputMethod::pinyinHashQStringList = QStringList(InputMethod::pinyinHashKeys); + InputMethod::pinyinHashQStringList.sort(); + + file.close(); + return true; +} + +/* + 用来调试时使用,打印拼音及相关汉字 +*/ +void InputMethod::showPinyinHash(void){ + if(!InputMethod::pinyinHash) + qDebug() << "拼音哈希表为空\n"; + else { + QHash *>::const_iterator i = InputMethod::pinyinHash->constBegin(); + while (i != InputMethod::pinyinHash->constEnd()) { + QList *list = (QList *)i.value(); + qDebug() << i.key() << ": "; + for (int j = 0; j < list->size(); ++j) { + qDebug() << list->at(j) << " "; + } + qDebug() << endl; + ++i; + } + } +} + + +void InputMethod::onDigitalPunctuationClicked(){ + QString text; + QPushButton * button = qobject_cast(sender()); + text = keyMap[button->text()]; + if(bengalFlag){ + if(button->text() == "一") + text = keyMap["1"]; + else if(button->text() == "丁") + text = keyMap["2"]; + else if(button->text() == "举") + text = keyMap["3"]; + else if(button->text() == "七") + text = keyMap["4"]; + else if(button->text() == "乃") + text = keyMap["5"]; + else if(button->text() == "久") + text = keyMap["6"]; + else if(button->text() == "么") + text = keyMap["7"]; + else if(button->text() == "万") + text = keyMap["8"]; + else if(button->text() == "丈") + text = keyMap["9"]; + else if(button->text() == "三") + text = keyMap["0"]; +} +#ifdef EnableArabic + if(arabicFlag){ + text = button->objectName(); + if(CapsFlag){ + if(text==";"){ + text=":"; + } + else if(text=="'"){ + text="\""; + } + else if(text=="."){ + text=">"; + } + else if(text=="/"){ + text="?"; + } + } + } +#endif + //QString text = specialKeyMap(button->text()); + if(text.isNull()) + text = " "; //处理space +// if(text == "(") +// { +// text = ")"; +// }else +// if(text == ")") +// { +// text = "("; +// } + +// if(text == "<") +// { +// text = ">"; +// }else +// if(text == ">") +// { +// text = "<"; +// } + +// if(text == "{") +// { +// text = "}"; +// }else +// if(text == "}") +// { +// text = "{"; +// } + +// if(text == "[") +// { +// text = "]"; +// }else +// if(text == "]") +// { +// text = "["; +// } + + userInputed(text); + +} + +void InputMethod::fillPinyinLabel(bool bActFromCharInput){ + + currPinyins.clear(); + matchStartIndex=0; + matchEndIndex=0; + if(!currPinyinStr.isEmpty()){ + QString Fisrt=currPinyinStr.left(1); + if(Fisrt=="u"|| Fisrt=="v"|| Fisrt=="i") + { + //bNotFound=true; + ui->pinyin->setText(currPinyinStr); + return; + } + if(currPinyinStr.size() == 1)//首字母,如果只有一个字母,只需要从出现的第一个开始 + { + QRegExp exp("^" + currPinyinStr); + matchStartIndex = InputMethod::pinyinHashQStringList.indexOf(exp); + if(matchStartIndex!=-1) + { + matchEndIndex = InputMethod::pinyinHashQStringList.size()-matchStartIndex-1; + } + bNotFound=false; + ui->pinyin->setText(currPinyinStr); + return; + } + if(!(bNotFound && bActFromCharInput))//如果不是从有拼音输入或者还没确定找不到相应的key,就往下检索 + { + //if(!pinyinHash->contains(currPinyinStr)) + { + QRegExp exp("^" + currPinyinStr); + //currPinyins = InputMethod::pinyinHashQStringList.filter(exp); + matchStartIndex = InputMethod::pinyinHashQStringList.indexOf(exp); + if(matchStartIndex!=-1) + { + bNotFound=false;//此时确定找不到相应的key + matchEndIndex = InputMethod::pinyinHashQStringList.lastIndexOf(exp, matchStartIndex); + } + else + { + bNotFound=true; + } + //qDebug()<<"currPinyins size is "<pinyin->setText(currPinyinStr);/*如果没右找到匹配,也要显示出当前的拼音*/ + + } + else{ + ui->pinyin->setText(""); + } +} + +void InputMethod::onCharClicked(){ + QPushButton * button = qobject_cast(sender()); + QString text = button->text(); +#ifdef EnableArabic + if(arabicFlag && CtrlFlag){ + text= button->objectName(); + } + else if(arabicFlag && CapsFlag){ + text= button->objectName().toUpper(); + } + else if(arabicFlag){ + text= button->objectName(); + } +#endif + if(ctrlAppending){ + qDebug()<<"control append"; +#ifndef Q_OS_WIN32 + + if(button == ui->Key_A){ //似乎进入界面后,要全选两次才生效 + //static int init = 0; + QWSServer::sendKeyEvent(0,Qt::Key_A,Qt::ControlModifier,true,false); + //if(!init) + QWSServer::sendKeyEvent(0,Qt::Key_A,Qt::ControlModifier,true,false); + //init = 1; + } + else if(button == ui->Key_C){ + QWSServer::sendKeyEvent(0,Qt::Key_C,Qt::ControlModifier,true,false); + } + else if(button == ui->Key_V){ + QWSServer::sendKeyEvent(0,Qt::Key_V,Qt::ControlModifier,true,false); + } + else if(button == ui->Key_X){ + QWSServer::sendKeyEvent(0,Qt::Key_X,Qt::ControlModifier,true,false); + } + else if(button == ui->Key_Z){ + QWSServer::sendKeyEvent(0,Qt::Key_Z,Qt::ControlModifier,true,false); + } +#endif + switchKeyboardDisplay(); + if(bengalFlag){ + if(CapsFlag) + switchKeyBoardBengalCapitalLetters(); + else + switchKeyBoardBengalLowerLetters(); + } + } + else if((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH) || (CapsFlag /* && (currentInputMethodType != INPUT_METHOD_TYPE_VIETNAM)*/)) + { + userInputed(text); + } + else { + if(!userPinyinInputAppending) + currPinyinStr = text; + else + currPinyinStr.append(text); + fillPinyinLabel(true); + currPinyinList = 0; //initial it + pinyinPage = 0; + displayHanziToLabel(); + userPinyinInputAppending = true; + } + +} + +void InputMethod::onBackspaceClicked(void){ + if(userPinyinInputAppending){ + currPinyinList = 0; + if(currPinyinStr.size()){ + currPinyinStr = currPinyinStr.remove(currPinyinStr.size() - 1, 1); + fillPinyinLabel(false); + } + userPinyinInputAppending = currPinyinStr.size(); + displayHanziToLabel(); + } + else { +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Backspace,Qt::NoModifier,true,false); //向系统发送键盘事件 + QWSServer::sendKeyEvent(0,Qt::Key_Backspace1,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif + } + +} +/* + 调用此函数前,设置好currPinyinStr,currPinyinList,pinyinPage +*/ +void InputMethod::displayHanziToLabel(void){ + + static QList s_list; + QList *list; + bool candicate = false; + + for(int i = 0; i < HANZI_SELECT_NUM; i++){ + hanziDisplayLabels[i]->setText(""); + } + + if(!currPinyinList && pinyinHash && currPinyinStr.size()){ //currPinyinList被置为空,说明需要重新找list + if(pinyinHash->contains(currPinyinStr)) + currPinyinList = (QList *)pinyinHash->value(currPinyinStr); + else { /*如果当前拼音无法找到,找其他备份的词*/ + //qDebug()<<"display currPinyins size is "<contains(str)){ + list = (QList *)pinyinHash->value(str); + for(int k = 0; k < list->size();k++){ + s_list.append(list->value(k)); + if(s_list.size() >= HANZI_SELECT_NUM) + break; + } + if(s_list.size() >= HANZI_SELECT_NUM) + break; + } + + } + } + candicate = true; + } + pinyinPage = 0; + } + + if(currPinyinList && currPinyinList->size()){ + + int begin = MIN(currPinyinList->size() - 1,pinyinPage*HANZI_SELECT_NUM); + int end = MIN(currPinyinList->size(),(pinyinPage + 1)*HANZI_SELECT_NUM); + //qDebug() << begin << end << currPinyinList->size(); + for(int i = begin; i < end; i++){ + hanziDisplayLabels[i%HANZI_SELECT_NUM]->setText(currPinyinList->value(i)); + //qDebug() << currPinyinList->value(i); + } + + } + else if(candicate){ + for(int i = 0; i < s_list.size() && i < HANZI_SELECT_NUM; i++){ + hanziDisplayLabels[i]->setText(s_list.value(i)); + } + } + + +} + +void InputMethod::onHanziLabelClicked(){ + + ClickLabel * label = qobject_cast(sender()); + QString text = label->text(); + if(text.size()) + userInputed(label->text()); + currPinyinStr = ""; + userPinyinInputAppending = false; + for(int i = 0; i < HANZI_SELECT_NUM; i++){ + hanziDisplayLabels[i]->setText(""); + } + matchStartIndex=0; + matchEndIndex=0; + //bNotFound=false; + currPinyins.clear(); + ui->pinyin->setText(""); + + //setHanziLabelVisible(currentInputMethodType == INPUT_METHOD_TYPE_CHINESE); + setHanziLabelVisible(currentInputMethodType != INPUT_METHOD_TYPE_ENGLISH); +} + + + +void InputMethod::switchKeyboardDisplay(void){ + ctrlAppending = false; +#if 0 + ui->Key_QuoteLeft->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"`":"~"):(!shiftFlag?"·":"~"))); + ui->Key_one->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"1":"!"):(!shiftFlag?"1":"!"))); + ui->Key_two->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"2":"@"):(!shiftFlag?"2":"@"))); + ui->Key_three->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"3":"#"):(!shiftFlag?"3":"#"))); + ui->Key_four->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"4":"$"):(!shiftFlag?"4":"¥"))); + ui->Key_five->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"5":"%"):(!shiftFlag?"5":"%"))); + ui->Key_six->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"6":"^"):(!shiftFlag?"6":"…"))); + ui->Key_seven->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"7":"&"):(!shiftFlag?"7":"&"))); + ui->Key_eight->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"8":"*"):(!shiftFlag?"8":"*"))); + ui->Key_nine->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"9":"("):(!shiftFlag?"9":"("))); + ui->Key_zero->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"0":")"):(!shiftFlag?"0":")"))); + ui->Key_Minus->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"-":"_"):(!shiftFlag?"-":"—"))); + ui->Key_Equal->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"=":"+"):(!shiftFlag?"=":"+"))); + ui->Key_BracketLeft->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"[":"{"):(!shiftFlag?"【":"『"))); + ui->Key_BracketRight->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"]":"}"):(!shiftFlag?"】":"』"))); + ui->Key_BackSlash->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"\\":"|"):(!shiftFlag?"、":"|"))); + ui->Key_Semicolon->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?";":":"):(!shiftFlag?";":":"))); + ui->Key_Apostrophe->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"'":"\""):(!shiftFlag?"‘":"“"))); + ui->Key_Comma->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?",":"<"):(!shiftFlag?",":"《"))); + ui->Key_Period->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?".":">"):(!shiftFlag?"。":"》"))); + ui->Key_Slash->setText(specialKeyMap((currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?(!shiftFlag?"/":"?"):(!shiftFlag?"/":"?"))); + ui->Key_Space->setText(" "); + ui->Key_A->setText(!CapsFlag?"a":"A"); + ui->Key_B->setText(!CapsFlag?"b":"B"); + ui->Key_C->setText(!CapsFlag?"c":"C"); + ui->Key_D->setText(!CapsFlag?"d":"D"); + ui->Key_E->setText(!CapsFlag?"e":"E"); + ui->Key_F->setText(!CapsFlag?"f":"F"); + ui->Key_G->setText(!CapsFlag?"g":"G"); + ui->Key_H->setText(!CapsFlag?"h":"H"); + ui->Key_I->setText(!CapsFlag?"i":"I"); + ui->Key_J->setText(!CapsFlag?"j":"J"); + ui->Key_K->setText(!CapsFlag?"k":"K"); + ui->Key_L->setText(!CapsFlag?"l":"L"); + ui->Key_M->setText(!CapsFlag?"m":"M"); + ui->Key_N->setText(!CapsFlag?"n":"N"); + ui->Key_O->setText(!CapsFlag?"o":"O"); + ui->Key_P->setText(!CapsFlag?"p":"P"); + ui->Key_Q->setText(!CapsFlag?"q":"Q"); + ui->Key_R->setText(!CapsFlag?"r":"R"); + ui->Key_S->setText(!CapsFlag?"s":"S"); + ui->Key_T->setText(!CapsFlag?"t":"T"); + ui->Key_U->setText(!CapsFlag?"u":"U"); + ui->Key_V->setText(!CapsFlag?"v":"V"); + ui->Key_W->setText(!CapsFlag?"w":"W"); + ui->Key_X->setText(!CapsFlag?"x":"X"); + ui->Key_Y->setText(!CapsFlag?"y":"Y"); + ui->Key_Z->setText(!CapsFlag?"z":"Z"); +#elif 1 + if(currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH) + { + if(!shiftFlag) + { + ui->Key_QuoteLeft->setText(keyMap["`"]); + ui->Key_one->setText(keyMap["1"]); + ui->Key_two->setText(keyMap["2"]); + ui->Key_three->setText(keyMap["3"]); + ui->Key_four->setText(keyMap["4"]); + ui->Key_five->setText(keyMap["5"]); + ui->Key_six->setText(keyMap["6"]); + ui->Key_seven->setText(keyMap["7"]); + ui->Key_eight->setText(keyMap["8"]); + ui->Key_nine->setText(keyMap["9"]); + ui->Key_zero->setText(keyMap["0"]); + ui->Key_Minus->setText(keyMap["-"]); + ui->Key_Equal->setText(keyMap["="]); + ui->Key_BracketLeft->setText(keyMap["["]); + ui->Key_BracketRight->setText(keyMap["]"]); + ui->Key_BackSlash->setText(keyMap["\\"]); + ui->Key_Semicolon->setText(keyMap[";"]); + ui->Key_Apostrophe->setText(keyMap["'"]); + ui->Key_Comma->setText(keyMap[","]); + ui->Key_Period->setText(keyMap["."]); + ui->Key_Slash->setText(keyMap["/"]); + if(bengalFlag){ + switchKeyBoardBengalDigit(); + return; + } + } + else + { + ui->Key_QuoteLeft->setText("~"); + ui->Key_one->setText(keyMap["!"]); + ui->Key_two->setText(keyMap["@"]); + ui->Key_three->setText(keyMap["#"]); + ui->Key_four->setText(keyMap["$"]); + ui->Key_five->setText(keyMap["%"]); + ui->Key_six->setText(keyMap["^"]); + ui->Key_seven->setText(keyMap["&"]); + ui->Key_eight->setText(keyMap["*"]); + ui->Key_nine->setText(keyMap["("]); + ui->Key_zero->setText(keyMap[")"]); + ui->Key_Minus->setText(keyMap["_"]); + ui->Key_Equal->setText(keyMap["+"]); + ui->Key_BracketLeft->setText(keyMap["{"]); + ui->Key_BracketRight->setText(keyMap["}"]); + ui->Key_BackSlash->setText(keyMap["|"]); + ui->Key_Semicolon->setText(keyMap[":"]); + ui->Key_Apostrophe->setText(keyMap["\""]); + ui->Key_Comma->setText(keyMap["<"]); + ui->Key_Period->setText(keyMap[">"]); + ui->Key_Slash->setText(keyMap["?"]); + if(bengalFlag){ + return; + } + } + + } + else + { + if(!shiftFlag) + { + ui->Key_QuoteLeft->setText(keyMap["·"]); + ui->Key_one->setText(keyMap["1"]); + ui->Key_two->setText(keyMap["2"]); + ui->Key_three->setText(keyMap["3"]); + ui->Key_four->setText(keyMap["4"]); + ui->Key_five->setText(keyMap["5"]); + ui->Key_six->setText(keyMap["6"]); + ui->Key_seven->setText(keyMap["7"]); + ui->Key_eight->setText(keyMap["8"]); + ui->Key_nine->setText(keyMap["9"]); + ui->Key_zero->setText(keyMap["0"]); + ui->Key_Minus->setText(keyMap["-"]); + ui->Key_Equal->setText(keyMap["="]); + ui->Key_BracketLeft->setText(keyMap["【"]); + ui->Key_BracketRight->setText(keyMap["】"]); + ui->Key_BackSlash->setText(keyMap["、"]); + ui->Key_Semicolon->setText(keyMap[";"]); + ui->Key_Apostrophe->setText(keyMap["‘"]); + ui->Key_Comma->setText(keyMap[","]); + ui->Key_Period->setText(keyMap["。"]); + ui->Key_Slash->setText(keyMap["/"]); + } + else + { + ui->Key_QuoteLeft->setText("~"); + ui->Key_one->setText(keyMap["!"]); + ui->Key_two->setText(keyMap["@"]); + ui->Key_three->setText(keyMap["#"]); + ui->Key_four->setText(keyMap["¥"]); + ui->Key_five->setText(keyMap["%"]); + ui->Key_six->setText(keyMap["…"]); + ui->Key_seven->setText(keyMap["&"]); + ui->Key_eight->setText(keyMap["*"]); + ui->Key_nine->setText(keyMap["("]); + ui->Key_zero->setText(keyMap[")"]); + //ui->Key_nine->setText(keyMap["("]); + //ui->Key_zero->setText(keyMap[")"]); + ui->Key_Minus->setText(keyMap["—"]); + ui->Key_Equal->setText(keyMap["+"]); + ui->Key_BracketLeft->setText(keyMap["『"]); + ui->Key_BracketRight->setText(keyMap["』"]); + ui->Key_BackSlash->setText(keyMap["|"]); + ui->Key_Semicolon->setText(keyMap[":"]); + ui->Key_Apostrophe->setText(keyMap["“"]); + ui->Key_Comma->setText(keyMap["《"]); + ui->Key_Period->setText(keyMap["》"]); + //ui->Key_Comma->setText(keyMap["》"]); + //ui->Key_Period->setText(keyMap["《"]); + ui->Key_Slash->setText(keyMap["?"]); + } + } + ui->Key_Space->setText(" "); + if(CapsFlag) + { + ui->Key_A->setText("A"); + ui->Key_B->setText("B"); + ui->Key_C->setText("C"); + ui->Key_D->setText("D"); + ui->Key_E->setText("E"); + ui->Key_F->setText("F"); + ui->Key_G->setText("G"); + ui->Key_H->setText("H"); + ui->Key_I->setText("I"); + ui->Key_J->setText("J"); + ui->Key_K->setText("K"); + ui->Key_L->setText("L"); + ui->Key_M->setText("M"); + ui->Key_N->setText("N"); + ui->Key_O->setText("O"); + ui->Key_P->setText("P"); + ui->Key_Q->setText("Q"); + ui->Key_R->setText("R"); + ui->Key_S->setText("S"); + ui->Key_T->setText("T"); + ui->Key_U->setText("U"); + ui->Key_V->setText("V"); + ui->Key_W->setText("W"); + ui->Key_X->setText("X"); + ui->Key_Y->setText("Y"); + ui->Key_Z->setText("Z"); + } + else + { + ui->Key_A->setText("a"); + ui->Key_B->setText("b"); + ui->Key_C->setText("c"); + ui->Key_D->setText("d"); + ui->Key_E->setText("e"); + ui->Key_F->setText("f"); + ui->Key_G->setText("g"); + ui->Key_H->setText("h"); + ui->Key_I->setText("i"); + ui->Key_J->setText("j"); + ui->Key_K->setText("k"); + ui->Key_L->setText("l"); + ui->Key_M->setText("m"); + ui->Key_N->setText("n"); + ui->Key_O->setText("o"); + ui->Key_P->setText("p"); + ui->Key_Q->setText("q"); + ui->Key_R->setText("r"); + ui->Key_S->setText("s"); + ui->Key_T->setText("t"); + ui->Key_U->setText("u"); + ui->Key_V->setText("v"); + ui->Key_W->setText("w"); + ui->Key_X->setText("x"); + ui->Key_Y->setText("y"); + ui->Key_Z->setText("z"); + } +#else + if(currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH) + { + if(!shiftFlag) + { + ui->Key_QuoteLeft->setText(specialKeyMap("`")); + ui->Key_one->setText(specialKeyMap("1")); + ui->Key_two->setText(specialKeyMap("2")); + ui->Key_three->setText(specialKeyMap("3")); + ui->Key_four->setText(specialKeyMap("4")); + ui->Key_five->setText(specialKeyMap("5")); + ui->Key_six->setText(specialKeyMap("6")); + ui->Key_seven->setText(specialKeyMap("7")); + ui->Key_eight->setText(specialKeyMap("8")); + ui->Key_nine->setText(specialKeyMap("9")); + ui->Key_zero->setText(specialKeyMap("0")); + ui->Key_Minus->setText(specialKeyMap("-")); + ui->Key_Equal->setText(specialKeyMap("=")); + ui->Key_BracketLeft->setText(specialKeyMap("[")); + ui->Key_BracketRight->setText(specialKeyMap("]")); + ui->Key_BackSlash->setText(specialKeyMap("\\")); + ui->Key_Semicolon->setText(specialKeyMap(";")); + ui->Key_Apostrophe->setText(specialKeyMap("'")); + ui->Key_Comma->setText(specialKeyMap(",")); + ui->Key_Period->setText(specialKeyMap(".")); + ui->Key_Slash->setText(specialKeyMap("/")); + } + else + { + ui->Key_QuoteLeft->setText("~"); + ui->Key_one->setText(specialKeyMap("!")); + ui->Key_two->setText(specialKeyMap("@")); + ui->Key_three->setText(specialKeyMap("#")); + ui->Key_four->setText(specialKeyMap("$")); + ui->Key_five->setText(specialKeyMap("%")); + ui->Key_six->setText(specialKeyMap("^")); + ui->Key_seven->setText(specialKeyMap("&")); + ui->Key_eight->setText(specialKeyMap("*")); + ui->Key_nine->setText(specialKeyMap("(")); + ui->Key_zero->setText(specialKeyMap(")")); + ui->Key_Minus->setText(specialKeyMap("_")); + ui->Key_Equal->setText(specialKeyMap("+")); + ui->Key_BracketLeft->setText(specialKeyMap("{")); + ui->Key_BracketRight->setText(specialKeyMap("}")); + ui->Key_BackSlash->setText(specialKeyMap("|")); + ui->Key_Semicolon->setText(specialKeyMap(":")); + ui->Key_Apostrophe->setText(specialKeyMap("\"")); + ui->Key_Comma->setText(specialKeyMap("<")); + ui->Key_Period->setText(specialKeyMap(">")); + ui->Key_Slash->setText(specialKeyMap("?")); + } + + } + else + { + if(!shiftFlag) + { + ui->Key_QuoteLeft->setText(specialKeyMap("·")); + ui->Key_one->setText(specialKeyMap("1")); + ui->Key_two->setText(specialKeyMap("2")); + ui->Key_three->setText(specialKeyMap("3")); + ui->Key_four->setText(specialKeyMap("4")); + ui->Key_five->setText(specialKeyMap("5")); + ui->Key_six->setText(specialKeyMap("6")); + ui->Key_seven->setText(specialKeyMap("7")); + ui->Key_eight->setText(specialKeyMap("8")); + ui->Key_nine->setText(specialKeyMap("9")); + ui->Key_zero->setText(specialKeyMap("0")); + ui->Key_Minus->setText(specialKeyMap("-")); + ui->Key_Equal->setText(specialKeyMap("=")); + ui->Key_BracketLeft->setText(specialKeyMap("【")); + ui->Key_BracketRight->setText(specialKeyMap("】")); + ui->Key_BackSlash->setText(specialKeyMap("、")); + ui->Key_Semicolon->setText(specialKeyMap(";")); + ui->Key_Apostrophe->setText(specialKeyMap("‘")); + ui->Key_Comma->setText(specialKeyMap(",")); + ui->Key_Period->setText(specialKeyMap("。")); + ui->Key_Slash->setText(specialKeyMap("/")); + } + else + { + ui->Key_QuoteLeft->setText("~"); + ui->Key_one->setText(specialKeyMap("!")); + ui->Key_two->setText(specialKeyMap("@")); + ui->Key_three->setText(specialKeyMap("#")); + ui->Key_four->setText(specialKeyMap("¥")); + ui->Key_five->setText(specialKeyMap("%")); + ui->Key_six->setText(specialKeyMap("…")); + ui->Key_seven->setText(specialKeyMap("&")); + ui->Key_eight->setText(specialKeyMap("*")); + ui->Key_nine->setText(specialKeyMap("(")); + ui->Key_zero->setText(specialKeyMap(")")); + ui->Key_Minus->setText(specialKeyMap("—")); + ui->Key_Equal->setText(specialKeyMap("+")); + ui->Key_BracketLeft->setText(specialKeyMap("『")); + ui->Key_BracketRight->setText(specialKeyMap("』")); + ui->Key_BackSlash->setText(specialKeyMap("|")); + ui->Key_Semicolon->setText(specialKeyMap(":")); + ui->Key_Apostrophe->setText(specialKeyMap("“")); + ui->Key_Comma->setText(specialKeyMap("《")); + ui->Key_Period->setText(specialKeyMap("》")); + ui->Key_Slash->setText(specialKeyMap("?")); + } + } + ui->Key_Space->setText(" "); + if(CapsFlag) + { + ui->Key_A->setText("A"); + ui->Key_B->setText("B"); + ui->Key_C->setText("C"); + ui->Key_D->setText("D"); + ui->Key_E->setText("E"); + ui->Key_F->setText("F"); + ui->Key_G->setText("G"); + ui->Key_H->setText("H"); + ui->Key_I->setText("I"); + ui->Key_J->setText("J"); + ui->Key_K->setText("K"); + ui->Key_L->setText("L"); + ui->Key_M->setText("M"); + ui->Key_N->setText("N"); + ui->Key_O->setText("O"); + ui->Key_P->setText("P"); + ui->Key_Q->setText("Q"); + ui->Key_R->setText("R"); + ui->Key_S->setText("S"); + ui->Key_T->setText("T"); + ui->Key_U->setText("U"); + ui->Key_V->setText("V"); + ui->Key_W->setText("W"); + ui->Key_X->setText("X"); + ui->Key_Y->setText("Y"); + ui->Key_Z->setText("Z"); + } + else + { + ui->Key_A->setText("a"); + ui->Key_B->setText("b"); + ui->Key_C->setText("c"); + ui->Key_D->setText("d"); + ui->Key_E->setText("e"); + ui->Key_F->setText("f"); + ui->Key_G->setText("g"); + ui->Key_H->setText("h"); + ui->Key_I->setText("i"); + ui->Key_J->setText("j"); + ui->Key_K->setText("k"); + ui->Key_L->setText("l"); + ui->Key_M->setText("m"); + ui->Key_N->setText("n"); + ui->Key_O->setText("o"); + ui->Key_P->setText("p"); + ui->Key_Q->setText("q"); + ui->Key_R->setText("r"); + ui->Key_S->setText("s"); + ui->Key_T->setText("t"); + ui->Key_U->setText("u"); + ui->Key_V->setText("v"); + ui->Key_W->setText("w"); + ui->Key_X->setText("x"); + ui->Key_Y->setText("y"); + ui->Key_Z->setText("z"); + } +#endif + +} + +void InputMethod::onShiftClicked(){ +#ifdef EnableArabic + if(arabicFlag){ + CapsFlag=false; + CtrlFlag=false; + myInputMethod->getArabicPage(1); + showArabicPage1Key(); + return; + } +#endif + shiftFlag = shiftFlag?false:true; + userPinyinInputAppending = false; + switchKeyboardDisplay(); +} +void InputMethod::onpushButtonCapspressed(){ +#ifdef EnableArabic + if(arabicFlag){ + CapsFlag = true; + CtrlFlag=false; + myInputMethod->getArabicPage(1); //page1 page2 已合并到一个字体里 + showArabicPage2Key(); + return; + } +#endif + CapsFlag = CapsFlag?false:true; + if(bengalFlag){ + if(CapsFlag) + switchKeyBoardBengalCapitalLetters(); + else + switchKeyBoardBengalLowerLetters(); + return; + } + userPinyinInputAppending = false; + ui->pushButtonCaps->setText( CapsFlag?tr("小写"):tr("大写")); + switchKeyboardDisplay(); +} + +void InputMethod::setHanziLabelVisible(bool enable){ + /*---------------------------隐藏掉一些没用的东西---------------------------------------*/ + if(hanZiLabelVisibleEnable != enable){ + ui->pinyin->setVisible(enable); + for(int i = 0; i < HANZI_SELECT_NUM; i++){ + hanziDisplayLabels[i]->setVisible(enable); + } + ui->Key_Last->setVisible(enable); + ui->Key_Next->setVisible(enable); + } + hanZiLabelVisibleEnable = enable; + /*------------------------------------------------------------------*/ +} +#include "dlgselectinputlanguage.h" + +void InputMethod::onInputMethodClicked(){ +#ifdef EnableArabic + englishOrArabicFlag=!englishOrArabicFlag; + myInputMethod->getEnglishOrAarbic(englishOrArabicFlag); + CapsFlag=false; + if(englishOrArabicFlag){ + arabicFlag=true; + showArabicPage1Key(); + ui->Key_InputMethodSelect->setText("English"); + + }else{ + arabicFlag=false; + showEnglishKey(); + ui->Key_InputMethodSelect->setText("Arabic"); + } + return; +#endif +/// + currentInputMethodType = (currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?INPUT_METHOD_TYPE_CHINESE: + //(currentInputMethodType == INPUT_METHOD_TYPE_CHINESE)?INPUT_METHOD_TYPE_VIETNAM: + INPUT_METHOD_TYPE_ENGLISH; + +/// + +#if 0 + DlgSelectInputLanguage dlg; + dlg.exec(); + currentInputMethodType = dlg.selectIndex; + //qDebug()<<"currentInputMethodType"<(sender()); +// button->autoDefault(); + /* + button->setText( + (currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH)?tr("英文"): + (currentInputMethodType == INPUT_METHOD_TYPE_VIETNAM)?tr("越南文"): + tr("中文") + ); +*/ + + QString filename; + if(currentInputMethodType == INPUT_METHOD_TYPE_ENGLISH){ + button->setText(tr("英文")); + filename = INPUT_FILE_ENGLISH; + } + else if(currentInputMethodType == INPUT_METHOD_TYPE_VIETNAM){ + button->setText(tr("Tiếng Việt")); + filename = INPUT_FILE_VIETNAM; + } + else if(currentInputMethodType == INPUT_METHOD_TYPE_RUSSIAN){ + button->setText(tr("Russian")); + filename = INPUT_FILE_RUSSIAN; + } + else if(currentInputMethodType == INPUT_METHOD_TYPE_JAPANESE){ + button->setText(tr("Japanese")); + filename = INPUT_FILE_JAPANESE; + } + else{ + button->setText("中文"); + filename = INPUT_FILE_CHINESE; //INPUT_FILE_ENGLISH WINPY_utf8.txt + } + //qDebug()<SetInputFile(filename); + //SetInputFile(filename); + userPinyinInputAppending = false; + switchKeyboardDisplay(); + currPinyinStr = ""; + currPinyinList = 0; + fillPinyinLabel(false); + +// chữ thường 小写字母 + + //setHanziLabelVisible(currentInputMethodType == INPUT_METHOD_TYPE_CHINESE || currentInputMethodType == INPUT_METHOD_TYPE_VIETNAM ); + setHanziLabelVisible(currentInputMethodType != INPUT_METHOD_TYPE_ENGLISH); + +} + +void InputMethod::onEnterClicked(){ + userInputed("\n"); +} + + +void InputMethod::onKeyLastClicked(){ + if(currPinyinList){ + if(pinyinPage) + pinyinPage --; + displayHanziToLabel(); + } +} + +void InputMethod::onKeyNextClicked(){ + if(currPinyinList){ + if(pinyinPage < (currPinyinList->size()/HANZI_SELECT_NUM)){ + pinyinPage ++; + } + displayHanziToLabel(); + } +} + + + +void InputMethod::onKeyLeftpressed() +{ +#ifndef Q_OS_WIN32 + //emit PicEditKey_Press(1); + QWSServer::sendKeyEvent(0,Qt::Key_Left1,Qt::NoModifier,true,false); + QWSServer::sendKeyEvent(0,Qt::Key_Left,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} + +void InputMethod::onKeyDownpressed() +{ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Down,Qt::NoModifier,true,false); + QWSServer::sendKeyEvent(0,Qt::Key_Down1,Qt::NoModifier,true,false); +#endif +} + +void InputMethod::onKeyUppressed() +{ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Up1,Qt::NoModifier,true,false); + QWSServer::sendKeyEvent(0,Qt::Key_Up,Qt::NoModifier,true,false); +#endif +} + +void InputMethod::onKeyRightpressed() +{ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Right1,Qt::NoModifier,true,false); + QWSServer::sendKeyEvent(0,Qt::Key_Right,Qt::NoModifier,true,false); +#endif +} + + +void InputMethod::onKeyHomepressed() +{ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Home,Qt::NoModifier,true,false); + QWSServer::sendKeyEvent(0,Qt::Key_Home1,Qt::NoModifier,true,false); +#endif +} + +void InputMethod::onKeyEndpressed() +{ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_End,Qt::NoModifier,true,false); + QWSServer::sendKeyEvent(0,Qt::Key_End1,Qt::NoModifier,true,false); +#endif +} + +void InputMethod::onKeydeletepressed() +{ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Delete,Qt::NoModifier,true,false); + QWSServer::sendKeyEvent(0,Qt::Key_Delete1,Qt::NoModifier,true,false); +#endif +#if 0 + QTextCursor cursor_ = textCursor(); + if( cursor_.hasSelection() ) + { + // Delete selection + cursor_.removeSelectedText(); + } + else + { + // Delete right char + cursor_.deleteChar(); + } + + setTextCursor( cursor_ ); +#endif +} +// /usr/local/Trolltech/QtEmbedded-4.6.3/lib/fonts/BAK/WenQuanYi Zen Hei.ttf +/* + 注意:生成图片文件请使用X86版本软件,生成字库文件请使用PC版本软件。 + PC版本直接运行。 + X86版本需要虚拟环境 + */ +// ℃℉㎡±ΦφΩ◆✪@☢*✿❧ +//° ¥ ℃ ℉ ㎡ ± Φ φ Ω ◆ ✪ @ ☢ * ✿ ❧ Δ δ ζ θ Ψ Σ ι ³ ® +static QList specialChars; +void InputMethod::onKeySpecialCharpressed() +{ + static bool specialCharsInit = false; + if(!specialCharsInit){ + specialChars << "²"<<"°"<<"Ω"<<"Φ"<<"¥"<<"φ"<<"㎡"<<"℃"<<"℉"<<"®"<<"±"<<"Σ"<<"Δ"<<"@"<<"Ψ"<<"³"<<"θ"<<"◆"; + specialCharsInit = true; + } + currPinyinList = &specialChars; + displayHanziToLabel(); + if(currentInputMethodType != INPUT_METHOD_TYPE_CHINESE){ + setHanziLabelVisible(!hanZiLabelVisibleEnable); + } +} + +void InputMethod::onKeyCtrlpressed(){ +#ifdef EnableArabic + if(arabicFlag){ + CtrlFlag=true; + CapsFlag = false; + showArabicPage3Key(); + return; + } +#endif + if(!ctrlAppending){ + ui->Key_A->setText(tr("全选")); + ui->Key_C->setText(tr("复制")); + ui->Key_V->setText(tr("粘贴")); + ui->Key_X->setText(tr("剪切")); + ui->Key_Z->setText(tr("后退")); + ctrlAppending = true; + } + else { + switchKeyboardDisplay(); + if(bengalFlag){ + if(CapsFlag) + switchKeyBoardBengalCapitalLetters(); + else + switchKeyBoardBengalLowerLetters(); + } + } +} + +/* + + 2013.9.12 括号错位修复 为了节约cpu最好改用映射方式 +*/ +QString InputMethod::specialKeyMap(QString ch){ +#if 1 + if(ch == "(") + return ")"; + else if(ch == ")") + return "("; + else if(ch == "[") + return "]"; + else if(ch == "]") + return "["; + else if(ch == "{") + return "}"; + else if(ch == "}") + return "{"; + else if(ch == "【") + return "】"; + else if(ch == "】") + return "【"; + else if(ch == "『") + return "』"; + else if(ch == "』") + return "『"; + else if(ch == "《") + return "《"; + else if(ch == "》") + return "》"; + else if(ch == "<") + return "<"; + else if(ch == ">") + return ">"; + else if(ch == "&") + return "&&"; + else if(ch == "&&") + return "&"; + else if(ch == "(") + return ")"; + else if(ch == ")") + return "("; + else + return ch; +#else + +#endif +} + +void InputMethod::onKeyPressed(){ + QPushButton * button = qobject_cast(sender()); + QPoint point = button->mapToGlobal (QPoint(0,0)); + QRect buttonGeometry = button->geometry(); + + int x = point.x() + buttonGeometry.width()/2; + int y = point.y() + buttonGeometry.height()/2; + QRect rec = QApplication::desktop()->screenGeometry(); + x = (x>30)?(x-30):0; + x = (x > rec.width() - 60)?(rec.width() - 60):x; + y = (y > 80)?(y - 80):(y + 20); + labelInputTip.setGeometry(x,y,60,60); + QString text=button->text(); + labelInputTip.setText(keyMap[button->text()]); + //labelInputTip.setText(specialKeyMap(button->text())); + //labelInputTip.show(); + +} + +void InputMethod::onKeyReleased(){ + //QPushButton * button = qobject_cast(sender()); + labelInputTip.hide(); + +} +void InputMethod::on_pushBottonHide_pressed() +{ + hide(); +} + +void InputMethod::onHiden(){ + if(!labelInputTip.isHidden()) + labelInputTip.hide(); + if(spaceTimer.isActive()) + spaceTimer.stop(); +} + + + +void InputMethod::on_Key_Backspace_pressed() +{ + backtimer.start(50); +} + +void InputMethod::on_Key_Backspace_released() +{ + backtimer.stop(); + back_count_timeout = 0; +} + +void InputMethod::backKeyLongPressed() +{ + if(back_count_timeout > 14) + { + if(userPinyinInputAppending){ + currPinyinList = 0; + if(currPinyinStr.size()){ + currPinyinStr = currPinyinStr.remove(currPinyinStr.size() - 1, 1); + fillPinyinLabel(false); + } + userPinyinInputAppending = currPinyinStr.size(); + displayHanziToLabel(); + } + else { + #ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Backspace,Qt::NoModifier,true,false); //向系统发送键盘事件 + QWSServer::sendKeyEvent(0,Qt::Key_Backspace1,Qt::NoModifier,true,false); //向系统发送键盘事件 + #endif + } + + }else + { + back_count_timeout++; + } +} + +void InputMethod::switchKeyBoardBengalDisply(bool flag){ + bengalFlag =flag; +#ifdef EnableArabic + arabicFlag = false; +#endif + if(bengalFlag){ + CapsFlag = false; + shiftFlag = false; + switchKeyBoardBengalDigit(); + switchKeyBoardBengalLowerLetters(); + }else{ + switchKeyboardDisplay(); + } +} + +void InputMethod::switchKeyBoardBengalLowerLetters(){ + ui->Key_A->setText("两"); + ui->Key_B->setText("严"); + ui->Key_C->setText("乓"); + ui->Key_D->setText("丧"); + ui->Key_E->setText("丨"); + ui->Key_F->setText("乔"); + ui->Key_G->setText("个"); + ui->Key_H->setText("丫"); + ui->Key_I->setText("乖"); + ui->Key_J->setText("中"); + ui->Key_K->setText("乘"); + ui->Key_L->setText("乙"); + ui->Key_M->setText("丰"); + ui->Key_N->setText("九"); + ui->Key_O->setText("串"); + ui->Key_P->setText("乞"); + ui->Key_Q->setText("临"); + ui->Key_R->setText("也"); + ui->Key_S->setText("习"); + ui->Key_T->setText("乡"); + ui->Key_U->setText("丸"); + ui->Key_V->setText("丹"); + ui->Key_W->setText("为"); + ui->Key_X->setText("主"); + ui->Key_Y->setText("书"); + ui->Key_Z->setText("丽"); +} + +void InputMethod::switchKeyBoardBengalCapitalLetters(){ + ui->Key_A->setText("上"); + ui->Key_B->setText("下"); + ui->Key_C->setText("丌"); + ui->Key_D->setText("不"); + ui->Key_E->setText("与"); + ui->Key_F->setText("义"); + ui->Key_G->setText("丐"); + ui->Key_H->setText("丑"); + ui->Key_I->setText("之"); + ui->Key_J->setText("专"); + ui->Key_K->setText("且"); + ui->Key_L->setText("丕"); + ui->Key_M->setText("世"); + ui->Key_N->setText("乌"); + ui->Key_O->setText("丘"); + ui->Key_P->setText("丙"); + ui->Key_Q->setText("业"); + ui->Key_R->setText("丛"); + ui->Key_S->setText("东"); + ui->Key_T->setText("丝"); + ui->Key_U->setText("丞"); + ui->Key_V->setText("乎"); + ui->Key_W->setText("乏"); + ui->Key_X->setText("乐"); + ui->Key_Y->setText("丢"); + ui->Key_Z->setText("乒"); +} + +void InputMethod::switchKeyBoardBengalDigit(){ + ui->Key_one->setText("一"); + ui->Key_two->setText("丁"); + ui->Key_three->setText("举"); + ui->Key_four->setText("七"); + ui->Key_five->setText("乃"); + ui->Key_six->setText("久"); + ui->Key_seven->setText("么"); + ui->Key_eight->setText("万"); + ui->Key_nine->setText("丈"); + ui->Key_zero->setText("三"); +} + +#ifdef EnableArabic +void InputMethod::setSwitchArabicFlag(bool flag){ + englishOrArabicFlag=false; + arabicFlag=true; + bengalFlag = false; + ui->Key_InputMethodSelect->setEnabled(flag); +} + +void InputMethod::setArabicDisplay(bool flag){ + CapsFlag=false; + if(flag){ + //ui->pushButtonCaps->setEnabled(false); + //ui->Key_ShiftLeft->setEnabled(false); + // ui->Key_Ctrl->setEnabled(false); + arabicFlag=true; + //shiftFlag=false; + //switchKeyboardDisplay(); + showArabicPage1Key(); + }else{ + arabicFlag=false; + englishOrArabicFlag=false; + // ui->pushButtonCaps->setEnabled(true); + showEnglishKey(); + } +} + +void InputMethod::showArabicPage1Key(){ + ui->Key_one->setText(keyMap["11"]); + //ui->Key_two->setText(keyMap["12"]); + ui->Key_two->setText(""); + ui->Key_two->setIconSize(QSize(20,20)); + ui->Key_two->setIcon(QIcon(":/image/arabic2.png")); + ui->Key_three->setText(keyMap["13"]); + ui->Key_four->setText(keyMap["14"]); + ui->Key_five->setText(keyMap["15"]); + ui->Key_six->setText(keyMap["16"]); + ui->Key_seven->setText(keyMap["17"]); + ui->Key_eight->setText(keyMap["18"]); + ui->Key_nine->setText(keyMap["19"]); + ui->Key_zero->setText(keyMap["20"]); + ui->Key_Equal->setText("۶"); + ui->Key_QuoteLeft->setText("۴"); + + ui->Key_A->setText("ش"); + ui->Key_B->setText("υ"); + ui->Key_C->setText(""); + ui->Key_C->setIconSize(QSize(20,20)); + ui->Key_C->setIcon(QIcon(":/image/arabicc.png")); + ui->Key_D->setText("ي"); + ui->Key_E->setText("ث"); + ui->Key_F->setText("ب"); + ui->Key_G->setText("ل"); + ui->Key_H->setText("ﺍ"); + ui->Key_I->setText("ه"); + ui->Key_J->setText("ت"); + ui->Key_K->setIcon(QIcon("")); + ui->Key_K->setIconSize(QSize(0,0)); + ui->Key_K->setText("ن"); + ui->Key_L->setText("م"); + ui->Key_M->setText("ﺓ"); + ui->Key_N->setText("ﻯ"); + ui->Key_O->setText("خ"); + ui->Key_P->setText("ح"); + ui->Key_BracketLeft->setText("ج"); + ui->Key_Minus->setText("ذ"); + ui->Key_Semicolon->setText("ك"); + ui->Key_Apostrophe->setText("ط"); + ui->Key_Period->setText("ﺯ"); + ui->Key_Slash->setText("ﻅ"); + ui->Key_Comma->setText("ﻭ"); + ui->Key_Q->setText("ض"); + ui->Key_R->setText("ق"); + ui->Key_S->setText("س"); + ui->Key_T->setText("ف"); + ui->Key_U->setText("ع"); + ui->Key_V->setText("ﺭ"); + ui->Key_W->setText("ص"); + ui->Key_X->setText("ء"); + ui->Key_Y->setText("غ"); + ui->Key_Z->setText(""); + ui->Key_Z->setIconSize(QSize(20,20)); + ui->Key_Z->setIcon(QIcon(":/image/arabicz.png")); + + ui->Key_ShiftLeft->setText(""); + ui->Key_ShiftLeft->setIconSize(QSize(30,30)); + ui->Key_ShiftLeft->setIcon(QIcon(":/image/keyboard3.png")); + + ui->pushButtonCaps->setText(""); + ui->pushButtonCaps->setIconSize(QSize(30,30)); + ui->pushButtonCaps->setIcon(QIcon(":/image/keyboard2.png")); + + ui->Key_Ctrl->setText(""); + ui->Key_Ctrl->setIconSize(QSize(30,30)); + ui->Key_Ctrl->setIcon(QIcon(":/image/keyboard3.png")); +} + +void InputMethod::showArabicPage2Key(){ + ui->Key_one->setText(keyMap["11"]); + //ui->Key_two->setText(keyMap["12"]); + ui->Key_two->setText(""); + ui->Key_two->setIconSize(QSize(20,20)); + ui->Key_two->setIcon(QIcon(":/image/arabic2.png")); + ui->Key_three->setText(keyMap["13"]); + ui->Key_four->setText(keyMap["14"]); + //ui->Key_four->setText("۴"); + ui->Key_five->setText(keyMap["15"]); + ui->Key_six->setText(keyMap["16"]); + //ui->Key_six->setText("۶"); + ui->Key_seven->setText(keyMap["17"]); + ui->Key_eight->setText(keyMap["18"]); + ui->Key_nine->setText(keyMap["19"]); + ui->Key_zero->setText(keyMap["20"]); + + ui->Key_A->setText("ش"); + ui->Key_B->setText("ذ"); + ui->Key_C->setIcon(QIcon("")); + ui->Key_C->setIconSize(QSize(0,0)); + ui->Key_C->setText("ﺯ"); + ui->Key_D->setText("ﻯ"); + ui->Key_E->setText("ث"); + ui->Key_F->setText("ب"); + ui->Key_G->setText("ل"); + ui->Key_H->setText("ﺍ"); + ui->Key_I->setText("ه"); + ui->Key_J->setText("ت"); + ui->Key_K->setIcon(QIcon("")); + ui->Key_K->setIconSize(QSize(0,0)); + ui->Key_K->setText("ن"); + ui->Key_L->setText("م"); + ui->Key_M->setText("پ"); + ui->Key_N->setText("د"); + ui->Key_O->setText("خ"); + ui->Key_P->setText("ح"); + ui->Key_BracketLeft->setText("ج"); + //ui->Key_Minus->setText("?"); + ui->Key_Minus->setText("ذ"); + ui->Key_Semicolon->setText("ک"); + ui->Key_Apostrophe->setText("گ"); + ui->Key_Period->setText("ﺁ"); + ui->Key_Slash->setText("°"); + ui->Key_Comma->setText("ﻭ"); + ui->Key_Q->setText("ض"); + ui->Key_R->setText("ق"); + ui->Key_S->setText("س"); + ui->Key_T->setText("ف"); + ui->Key_U->setText("ع"); + ui->Key_V->setText("ﺭ"); + ui->Key_W->setText("ص"); + ui->Key_X->setText("ط"); + ui->Key_Y->setText("غ"); + ui->Key_Z->setIcon(QIcon("")); + ui->Key_Z->setIconSize(QSize(0,0)); + ui->Key_Z->setText("ﻅ"); +} + +void InputMethod::showArabicPage3Key(){ + myInputMethod->getArabicPage(3); + ui->Key_one->setText("'"); + ui->Key_two->setText(""); + ui->Key_two->setIconSize(QSize(0,0)); + ui->Key_two->setText("''"); + ui->Key_three->setText("@"); + ui->Key_four->setText("#"); + ui->Key_five->setText("%"); + ui->Key_six->setText("^"); + ui->Key_seven->setText(keyMap["&"]); + ui->Key_eight->setText("*"); + ui->Key_nine->setText("-"); + ui->Key_zero->setText("+"); + ui->Key_Minus->setText("_"); + ui->Key_Equal->setText("="); + ui->Key_QuoteLeft->setText("`"); + + ui->Key_Q->setText("ض"); + ui->Key_W->setText("!"); + ui->Key_E->setText("?"); + ui->Key_R->setText(";"); + ui->Key_T->setText(":"); + ui->Key_Y->setText(","); + ui->Key_U->setText("."); + ui->Key_I->setText("~"); + ui->Key_O->setText("|"); + ui->Key_P->setText("ح"); + ui->Key_BracketLeft->setText(keyMap["["]); + ui->Key_A->setText("$"); + ui->Key_S->setText("€"); + ui->Key_D->setText("£"); + ui->Key_F->setText("½"); + ui->Key_G->setText("°"); + ui->Key_H->setText("="); + ui->Key_J->setText("μ"); + ui->Key_K->setText(" ͣ"); + ui->Key_K->setText(""); + ui->Key_K->setIconSize(QSize(30,30)); + ui->Key_K->setIcon(QIcon(":/image/arabicl.png")); + ui->Key_L->setText("¿"); + ui->Key_Semicolon->setText("¡"); + ui->Key_Apostrophe->setText(keyMap["'"]); + ui->Key_Z->setIcon(QIcon("")); + ui->Key_Z->setIconSize(QSize(0,0)); + ui->Key_Z->setText("\\"); + ui->Key_X->setText("/"); + ui->Key_C->setIcon(QIcon("")); + ui->Key_C->setIconSize(QSize(0,0)); + ui->Key_C->setText("["); + ui->Key_V->setText("]"); + ui->Key_B->setText("<"); + ui->Key_N->setText(">"); + ui->Key_M->setText("{"); + ui->Key_Comma->setText("}"); + ui->Key_Period->setText("("); + ui->Key_Slash->setText(")"); +} + +void InputMethod::showEnglishKey(){ + + ui->Key_ShiftLeft->setEnabled(true); + ui->Key_Ctrl->setEnabled(true); + ui->Key_one->setText(keyMap["1"]); + ui->Key_two->setIcon(QIcon("")); + ui->Key_two->setIconSize(QSize(0,0)); + ui->Key_two->setText(keyMap["2"]); + ui->Key_three->setText(keyMap["3"]); + ui->Key_four->setText(keyMap["4"]); + ui->Key_five->setText(keyMap["5"]); + ui->Key_six->setText(keyMap["6"]); + ui->Key_seven->setText(keyMap["7"]); + ui->Key_eight->setText(keyMap["8"]); + ui->Key_nine->setText(keyMap["9"]); + ui->Key_zero->setText(keyMap["0"]); + ui->Key_Equal->setText("="); + ui->Key_QuoteLeft->setText("`"); + + ui->Key_A->setText("a"); + ui->Key_B->setText("b"); + ui->Key_C->setIcon(QIcon("")); + ui->Key_C->setIconSize(QSize(0,0)); + ui->Key_C->setText("c"); + ui->Key_D->setText("d"); + ui->Key_E->setText("e"); + ui->Key_F->setText("f"); + ui->Key_G->setText("g"); + ui->Key_H->setText("h"); + ui->Key_I->setText("i"); + ui->Key_J->setText("j"); + ui->Key_K->setIcon(QIcon("")); + ui->Key_K->setIconSize(QSize(0,0)); + ui->Key_K->setText("k"); + ui->Key_L->setText("l"); + ui->Key_M->setText("m"); + ui->Key_N->setText("n"); + ui->Key_O->setText("o"); + ui->Key_P->setText("p"); + ui->Key_BracketLeft->setText(keyMap["["]); + ui->Key_Minus->setText("-"); + ui->Key_Semicolon->setText(keyMap[";"]); + ui->Key_Apostrophe->setText(keyMap["'"]); + ui->Key_Period->setText(keyMap["."]); + ui->Key_Slash->setText(keyMap["/"]); + ui->Key_Comma->setText(keyMap[","]); + ui->Key_Q->setText("q"); + ui->Key_R->setText("r"); + ui->Key_S->setText("s"); + ui->Key_T->setText("t"); + ui->Key_U->setText("u"); + ui->Key_V->setText("v"); + ui->Key_W->setText("w"); + ui->Key_X->setText("x"); + ui->Key_Y->setText("y"); + ui->Key_Z->setIcon(QIcon("")); + ui->Key_Z->setIconSize(QSize(0,0)); + ui->Key_Z->setText("z"); + + ui->Key_ShiftLeft->setIcon(QIcon("")); + ui->Key_ShiftLeft->setIconSize(QSize(0,0)); + ui->Key_ShiftLeft->setText("Shift"); + + ui->pushButtonCaps->setIcon(QIcon("")); + ui->pushButtonCaps->setIconSize(QSize(0,0)); + ui->pushButtonCaps->setText("Caps\nLOCK"); + + ui->Key_InputMethodSelect->setIcon(QIcon("")); + ui->Key_InputMethodSelect->setIconSize(QSize(0,0)); + ui->Key_InputMethodSelect->setText("Arabic"); + + ui->Key_Ctrl->setIcon(QIcon("")); + ui->Key_Ctrl->setIconSize(QSize(0,0)); + ui->Key_Ctrl->setText("Ctrl"); +} +#endif diff --git a/InputMethod.h b/InputMethod.h new file mode 100644 index 0000000..49c279d --- /dev/null +++ b/InputMethod.h @@ -0,0 +1,161 @@ +#ifndef INPUTMETHOD_H +#define INPUTMETHOD_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "InsertSpaceNumDialog.h" +#include "myinclude.h" +class MyInputMethod; + + +namespace Ui { + class InputMethod; +} + +#define HANZI_SELECT_NUM 5 //显示汉字的个数,由UI文件决定 +#define INPUT_METHOD_TYPE_ENGLISH 0 +#define INPUT_METHOD_TYPE_CHINESE 1 +#define INPUT_METHOD_TYPE_VIETNAM 2 +#define INPUT_METHOD_TYPE_RUSSIAN 3 // Russian +#define INPUT_METHOD_TYPE_JAPANESE 4 //Japanese +#define INPUT_METHOD_TYPE_KOREAN 5 // Korean +#define INPUT_METHOD_TYPE_SPANISH 6 // Korean +#define INPUT_METHOD_TYPE_THAI 7 // Thai +#define INPUT_METHOD_TYPE_Farsi 8 +#define INPUT_FILE_CHINESE "WINPY_utf8.txt" +#define INPUT_FILE_ENGLISH "WINPY_utf8.txt" +#define INPUT_FILE_VIETNAM "YN_utf8.txt" +#define INPUT_FILE_RUSSIAN "WINPY_utf8.txt" +#define INPUT_FILE_JAPANESE "WINPY_utf8.txt" +#define INPUT_FILE_KOREAN "WINPY_utf8.txt" + +#define MIN(a,b) (((a) < (b))?(a):(b)) +#define MAX(a,b) (((a) > (b))?(a):(b)) + +class InputMethod : public QWidget +{ + Q_OBJECT + +public: + explicit InputMethod(MyInputMethod *myInputMethod,QWidget *parent = 0); + static bool initInputMethod(QString &filename); /*用文件初始化输入法的字库*/ + static void showPinyinHash(void); + ~InputMethod(); + void switchKeyBoardBengalDisply(bool); + void switchKeyBoardBengalLowerLetters(); + void switchKeyBoardBengalCapitalLetters(); + void switchKeyBoardBengalDigit(); +#ifdef EnableArabic + void setArabicDisplay(bool); + void showArabicPage1Key(); + void showArabicPage2Key(); + void showEnglishKey(); + void showArabicPage3Key(); + void setSwitchArabicFlag(bool flag); +#endif +public slots: + void onpushButtonCapspressed(); + void onDigitalPunctuationClicked(); + void onCharClicked(); + void onShiftClicked(); + void onInputMethodClicked(); + void onBackspaceClicked(); + void onHanziLabelClicked(); + void onKeyLastClicked(); + void onKeyNextClicked(); + void onEnterClicked(); + + void userInputed(QString str); //用户输入一个字符 + void onHiden(); + void on_Key_Backspace_released(); +private slots: + + + void onKeyLeftpressed(); + + void onKeyDownpressed(); + + void onKeyUppressed(); + + void onKeyRightpressed(); + + void onKeyHomepressed(); + + void onKeyEndpressed(); + + void onKeydeletepressed(); + + void onKeySpecialCharpressed(); + void onKeyCtrlpressed(); + void onKeyReleased(); + void onKeyPressed(); + + void spaceKeyPressed(); + void spaceKeyRelease(); + void spaceKeyLongPressed(); + void backKeyLongPressed(); + void onInsertSpaceNumDialogAccepted(); + + void on_pushBottonHide_pressed(); + + void on_Key_Backspace_pressed(); + + //void on_Key_Backspace_released(); + +private: + + MyInputMethod *myInputMethod; + QMap keyMap; + + Ui::InputMethod *ui; + + static QHash *> *pinyinHash; //用来存放哈拼音的哈希表,所有都共用一份 + static QList pinyinHashKeys; + static QStringList pinyinHashQStringList; + + QList *currPinyinList; + + QStringList currPinyins; //自动侯选的拼音 + + ClickLabel *hanziDisplayLabels[HANZI_SELECT_NUM]; + int currentInputMethodType; + int matchStartIndex; + int matchEndIndex; + int bNotFound; + bool shiftFlag; //是否按过shift键 + bool CapsFlag; + bool userPinyinInputAppending; //是否用户已经在拼音输入法下完成输入 + QString currPinyinStr; //记录当前用户已经输入的字符 + int pinyinPage; /*当一个拼音有很多汉字时,分多页存放,记录当前的页数*/ + int back_count_timeout; //回退键超时处理 + bool bengalFlag; + bool CtrlFlag; +#ifdef EnableArabic + bool arabicFlag; + bool englishOrArabicFlag; +#endif + void switchKeyboardDisplay(void); //当按shift,输入法时,切换键盘显示 + void displayHanziToLabel(); //显示汉字到label + void fillPinyinLabel(bool bActFromCharInput); + void asciiTyped(int ascii); + void digitalTyped(int ascii); + void buttonConnect(QPushButton *sender, + const QObject *receiver, const char *member); + void setHanziLabelVisible(bool enable); + QLabel labelInputTip; //输入提示 + QTimer spaceTimer; + QTimer backtimer; + InsertSpaceNumDialog insertSpaceNumDialog; + bool hanZiLabelVisibleEnable; + bool ctrlAppending;//Ctrl+C ..之类的 + QString specialKeyMap(QString ch); +}; + +#endif // INPUTMETHOD_H diff --git a/InputMethod.ui b/InputMethod.ui new file mode 100644 index 0000000..a052dac --- /dev/null +++ b/InputMethod.ui @@ -0,0 +1,2848 @@ + + + InputMethod + + + true + + + + 0 + 0 + 800 + 305 + + + + + 0 + 0 + + + + + 640 + 200 + + + + + + + + + 255 + 255 + 255 + + + + + + + 209 + 209 + 209 + + + + + + + + + 255 + 255 + 255 + + + + + + + 209 + 209 + 209 + + + + + + + + + 209 + 209 + 209 + + + + + + + 209 + 209 + 209 + + + + + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 1 + + + QLayout::SetDefaultConstraint + + + 0 + + + 0 + + + + + 1 + + + 4 + + + 0 + + + 0 + + + 0 + + + + + + 75 + 30 + + + + + 75 + 16777215 + + + + QFrame::Box + + + QFrame::Sunken + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Maximum + + + + 35 + 5 + + + + + + + + + 0 + 30 + + + + + 63 + 16777215 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::Box + + + 1 书 + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 63 + 16777215 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::Box + + + 2 输 + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 63 + 16777215 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::Box + + + 3 数 + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 63 + 16777215 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::Box + + + 4 属 + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 63 + 16777215 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 0 + 0 + 52 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::Box + + + 5 熟 + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 70 + 16777215 + + + + Qt::LeftToRight + + + 上一页 + + + + :/icon/lastpage.png:/icon/lastpage.png + + + + + + + + 0 + 30 + + + + + 70 + 16777215 + + + + Qt::LeftToRight + + + 下一页 + + + + :/icon/nextpage.png:/icon/nextpage.png + + + + + + + + + 1 + + + QLayout::SetFixedSize + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + ` + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 1 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 2 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 3 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 4 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 5 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 6 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 7 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 8 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 9 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + 0 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + - + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + = + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 80 + 16777215 + + + + Qt::LeftToRight + + + false + + + 退格 + + + + :/icon/keybackspace.png:/icon/keybackspace.png + + + + + + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 66 + 16777215 + + + + Qt::LeftToRight + + + false + + + 英文 + + + + :/icon/keyinput.png:/icon/keyinput.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + q + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + w + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + e + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + r + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + t + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + y + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + u + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + i + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + o + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + p + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + [ + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + ] + + + + + + + true + + + + 0 + 0 + + + + + 0 + 0 + + + + + 70 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + \ + + + + + + + + + 1 + + + + + + 0 + 0 + + + + + 65 + 0 + + + + + 66 + 16777215 + + + + 大写 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + a + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + s + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + d + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + f + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + g + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + h + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + j + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + k + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + l + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + ; + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 51 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + ' + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 85 + 16777215 + + + + Qt::LeftToRight + + + false + + + Enter + + + + :/icon/keyenter.png:/icon/keyenter.png + + + + + + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 70 + 16777215 + + + + Qt::LeftToRight + + + false + + + Shift + + + + :/icon/keyshift.png:/icon/keyshift.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + z + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + x + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + c + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + v + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + b + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + n + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + m + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 文泉驿正黑 + 20 + + + + Qt::RightToLeft + + + false + + + , + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + . + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 52 + 16777215 + + + + + 20 + + + + Qt::RightToLeft + + + false + + + / + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 67 + 16777215 + + + + Qt::LeftToRight + + + false + + + 上 + + + + :/icon/arrowup.png:/icon/arrowup.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 80 + 16777215 + + + + Qt::LeftToRight + + + false + + + 特殊字 + + + + :/icon/specialchar.png:/icon/specialchar.png + + + + + + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 65 + 16777215 + + + + Qt::LeftToRight + + + false + + + 隐藏 + + + + :/icon/keyhide.png:/icon/keyhide.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 65 + 16777215 + + + + Qt::LeftToRight + + + false + + + Ctrl + + + + :/icon/controlbyhand.png:/icon/controlbyhand.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 75 + 16777215 + + + + Qt::LeftToRight + + + false + + + 删除 + + + + :/icon/keydelete.png:/icon/keydelete.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 280 + 16777215 + + + + Qt::RightToLeft + + + false + + + + + + false + + + false + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 65 + 16777215 + + + + Qt::LeftToRight + + + false + + + 行首 + + + + :/icon/keyhome.png:/icon/keyhome.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 65 + 16777215 + + + + Qt::LeftToRight + + + false + + + 行尾 + + + + :/icon/keyend.png:/icon/keyend.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 67 + 16777215 + + + + Qt::LeftToRight + + + false + + + 左 + + + + :/icon/arrowleft.png:/icon/arrowleft.png + + + false + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 67 + 16777215 + + + + Qt::LeftToRight + + + false + + + 下 + + + + :/icon/arrowdown.png:/icon/arrowdown.png + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 75 + 16777215 + + + + Qt::LeftToRight + + + false + + + 右 + + + + :/icon/arrowright.png:/icon/arrowright.png + + + + + + + + + + + + ClickLabel + QLabel +
ClickLabel.h
+
+
+ + + + +
diff --git a/InsertSpaceNumDialog.cpp b/InsertSpaceNumDialog.cpp new file mode 100644 index 0000000..eea4a95 --- /dev/null +++ b/InsertSpaceNumDialog.cpp @@ -0,0 +1,19 @@ +#include "InsertSpaceNumDialog.h" +#include "ui_insertspacenumdialog.h" + +InsertSpaceNumDialog::InsertSpaceNumDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::InsertSpaceNumDialog) +{ + ui->setupUi(this); + this->setFixedSize(this->geometry().width(),this->geometry().height()); +} + +InsertSpaceNumDialog::~InsertSpaceNumDialog() +{ + delete ui; +} + +QSpinBox *InsertSpaceNumDialog::getSpinBoxSpaceNum(){ + return ui->spinBoxSpaceNum; +} diff --git a/InsertSpaceNumDialog.h b/InsertSpaceNumDialog.h new file mode 100644 index 0000000..68bf00f --- /dev/null +++ b/InsertSpaceNumDialog.h @@ -0,0 +1,22 @@ +#ifndef INSERTSPACENUMDIALOG_H +#define INSERTSPACENUMDIALOG_H + +#include +#include +namespace Ui { +class InsertSpaceNumDialog; +} + +class InsertSpaceNumDialog : public QDialog +{ + Q_OBJECT + +public: + explicit InsertSpaceNumDialog(QWidget *parent = 0); + ~InsertSpaceNumDialog(); + QSpinBox *getSpinBoxSpaceNum(); +private: + Ui::InsertSpaceNumDialog *ui; +}; + +#endif // INSERTSPACENUMDIALOG_H diff --git a/K(bypm0718wx) b/K(bypm0718wx) new file mode 100644 index 0000000000000000000000000000000000000000..31e1c5a57f970bbd43806b0f797f1cb3b38ffc06 GIT binary patch literal 2521852 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 CI6yLAJL>9!U3D*{3kZ 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%0Da+mEj12rBKV|C=^4#m_(;Np4#r;WZ$O1QKgbd^h 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�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%0APl=AYYcV>X{OGjndk`3JbTXw&3s7r(Yw9zsnp{m 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
Edjt3OOnMI*TTk@b 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 -NU(K$1 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

~w~< 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

} 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
  • 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�<>TljXCYF#&HG!+3fSatf>}{o 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 z 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%0AAKCl@5CI^zE5ch{_9)Wha&C}ifH|e#5pF>+eMJQ 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 z%0D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�o5@x6j2xM6hm{B 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 z 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 +#include +#include +#include +#include +#include +#include +#include + +#include "qnamespace.h" +#include +#include + + + +MACHINE_INFO_t machine_info; +LICENSE_DATA_t license_data; +QMutex machine_info_mutex; +QMutex license_data_mutex; + + + +void adjustDateAndTime(int year, int mon, int mday, int hour, int min, int sec); +LicenseManger::LicenseManger() +{ +#if 1 + UCHAR e_key[1024] = "dangerous IOP 0908 "; + pAes = new TAesClass; + pAes->InitializePrivateKey(16, e_key); //进行初始化 + //setMachineInfo(16); +#endif +} +//set machine info +qint32 LicenseManger::setMachineInfo(quint32 serial_num) +{ + //check serial number size + if(serial_num>999999) + { + return -1; + } + machine_info_mutex.lock(); + QString serial; + serial.sprintf("VB%06d", serial_num); + + QByteArray hash_data; + hash_data = QCryptographicHash::hash(serial.toAscii(),QCryptographicHash::Md5 ); + //MACHINE_INFO_t machine_info; + machine_info.serial_number=serial_num; + memcpy(&machine_info.md5[0],hash_data.data(),MD5_LENGTH); + //qDebug()<<"org sn info"<OnAesEncrypt((LPVOID)&machine_info, sizeof(machine_info), (LPVOID)encrypt_buff); //进行加密 + //qDebug()<<"sn jiami:"<OnAesUncrypt((LPVOID)encrypt_buff, (DWORD)sizeof(encrypt_buff),(LPVOID)decrypt_buff); //进行解密 + //qDebug()<<"jiemi:"<OnAesEncrypt((LPVOID)&license_data, sizeof(license_data), (LPVOID)encrypt_buff); //进行加密 + //qDebug()<<"jiami:"<OnAesUncrypt((LPVOID)encrypt_buff, (DWORD)sizeof(encrypt_buff),(LPVOID)decrypt_buff); //进行解密 + //qDebug()<<"jiemi:"< +void adjustDateAndTime(int year, int mon, int mday, int hour, int min, int sec) { + time_t t; + struct tm nowtime; + nowtime.tm_sec = sec; // Seconds.[0-60] (1 leap second) + nowtime.tm_min = min; // Minutes.[0-59] + nowtime.tm_hour = hour; // Hours. [0-23] + nowtime.tm_mday = mday; // Day.[1-31] + nowtime.tm_mon = mon - 1; // Month. [0-11] + nowtime.tm_year = year - 1900; // Year- 1900. + nowtime.tm_isdst = -1; // DST.[-1/0/1] + t = mktime(&nowtime); + // qDebug()<= 6*60*18*367) + { + qDebug()<<"license file was invalid"; + return 0; + } + if(license_data.vernon_bach_version != VERNONBACH_VERSION_CODE) + { + qDebug()<<"license file was invalid"; + return 0; + } +qDebug()<<"license serial number"<= 6*60*18*367) + { + qDebug()<<"license file was invalid"; + return 0; + } + if(license_data.remainingTime) + license_data.remainingTime--; + if(license_data.remainingTime<=0) + { + license_data.workout = 1; + } + SaveLicData2File(); + //license_data.remainingTime=0; + return license_data.remainingTime; + +} + +quint32 LicenseManger::CheckUpdateFileState() +{ + QFile file(UPDATE_LIC_FILE); + LICENSE_DATA_t update_license_data; + quint32 state = UPDATE_LICENSE_FILE_OK; + if(!file.exists()) + { + state = -UPDATE_LICENSE_FILE_NOT_EXIT; + } + else + { + if(!file.open(QIODevice::ReadOnly | QIODevice::Truncate)){ + QMessageBox::warning(0,"警告",QString("无法打开license文件") ); + state = -UPDATE_LICENSE_FILE_OPEN_FAILED; + } + else + { + //license_data_mutex.lock(); + char encrypt_buff[1024]; + char decrypt_buff[1024]; + file.read((char *)encrypt_buff,(qint64)sizeof(encrypt_buff)); + pAes->OnAesUncrypt((LPVOID)encrypt_buff, (DWORD)sizeof(encrypt_buff),(LPVOID)decrypt_buff); //进行解密 + //qDebug()<<"jiemi:"<= (license_data.printer_active_count+3) ) + { + state = -UPDATE_LICENSE_FILE_ACTIVE_NUMBER_ERR; + } + else if(update_license_data.vernon_bach_version != VERNONBACH_VERSION_CODE) + { + state = -UPDATE_LICENSE_FILE_SW_VERSION_ERR; + } + } + } + return state; +} +quint32 LicenseManger::UpdateLicenseFileData() +{ + QFile file(UPDATE_LIC_FILE); + LICENSE_DATA_t update_license_data; + quint32 state = UPDATE_LICENSE_FILE_OK; + if(!file.exists()) + { + state = -UPDATE_LICENSE_FILE_NOT_EXIT; + } + else + { + if(!file.open(QIODevice::ReadOnly | QIODevice::Truncate)){ + QMessageBox::warning(0,"警告",QString("无法打开更新license文件") ); + state = -UPDATE_LICENSE_FILE_OPEN_FAILED; + } + else + { + //license_data_mutex.lock(); + char encrypt_buff[1024]; + char decrypt_buff[1024]; + file.read((char *)encrypt_buff,(qint64)sizeof(encrypt_buff)); + pAes->OnAesUncrypt((LPVOID)encrypt_buff, (DWORD)sizeof(encrypt_buff),(LPVOID)decrypt_buff); //进行解密 + //qDebug()<<"jiemi:"< +#include +#include +#include "Aes/TAesClass.h" +#include "VerBVersion.h" + +#define LIC_FILE "/etc/licenseData" +#define UPDATE_LIC_FILE "/udisk/lic_update_file" +//#define MACH_INFO_FILE "/home/student/mini2440/UP/QtUI/machine_info" +#define MACH_INFO_FILE "/etc/appdata/machine_info" + +#define LICENSE_STATE_OK 0 +#define LICENSE_STATE_MACH_INFO_DAMAGED 1 +#define LICENSE_STATE_LIC_DATA_DAMAGED 2 +#define LICENSE_STATE_REMAIN_TIME_WARNING 3 //提前提示维护码到期 +#define LICENSE_STATE_REMAIN_TIME_REARCH 4 + +#define UPDATE_LICENSE_FILE_OK 0 +#define UPDATE_LICENSE_FILE_NOT_EXIT 1 +#define UPDATE_LICENSE_FILE_OPEN_FAILED 2 +#define UPDATE_LICENSE_FILE_SERIAL_NUMBER_ERR 3 //提前提示维护码到期 +#define UPDATE_LICENSE_FILE_ACTIVE_NUMBER_ERR 4 +#define UPDATE_LICENSE_FILE_SW_VERSION_ERR 5 +#define UPDATE_LICENSE_FILE_MD5_VALUE_ERR 66 + +#define LIC_DATA_MD5_LEN 16 + +typedef struct { + unsigned int serial_number; + unsigned char md5[LIC_DATA_MD5_LEN]; +}MACHINE_INFO_t; + +typedef struct { + unsigned int serial_number; + unsigned char enable; //1Byte + unsigned char powerEn; // 1Byte + unsigned char printEn; // 1Byte + + unsigned int powerMinuteMax; + unsigned int powerMinuteCnt; + unsigned int printMax; + unsigned int printCnt; // printDot/1024 + + unsigned int start;// yyyymmdd + unsigned int end; // yyyymmdd + unsigned int nDate; + unsigned int workout; + unsigned int remainingTime;//10 second count: 1 day = 6x60x24=8640; 1 week = 7x8640 = 60480; 1 year=8640 x 365 = 3153600 + unsigned int printer_bworkout; + unsigned int printer_active_count; + unsigned int printer_auth_flag; + unsigned int vernon_bach_version; + unsigned char md5[LIC_DATA_MD5_LEN]; +}LICENSE_DATA_t; + + + +typedef enum { + LicenseState_eLicAvailable, + LicenseState_eLicTimeOut, + LicenseState_eMachineError +}LicenseState_e; + + + +class LicenseManger +{ +private: + +public: + LicenseManger(); + + qint32 setMachineInfo(quint32 serial_num); + qint32 checkMachineInfoAvailable(); + qint8 getLicState(); + void SaveLicData2File(); + void ReadLicDataFromFile(); + void ResetLicDataFile(); + int CheckLicDataValid(); + quint32 CheckRemainingTime(); + quint32 CheckUpdateFileState(); + quint32 UpdateLicenseFileData(); +private: + QDate curDate; + TAesClass *pAes; +}; + +extern MACHINE_INFO_t machine_info; +extern LICENSE_DATA_t license_data; +#endif // LICENSEMANGER_H diff --git a/Log/dualfilelogger.cpp b/Log/dualfilelogger.cpp new file mode 100644 index 0000000..c03364d --- /dev/null +++ b/Log/dualfilelogger.cpp @@ -0,0 +1,21 @@ + +#include "dualfilelogger.h" + +DualFileLogger::DualFileLogger(QSettings *firstSettings, QSettings* secondSettings, const int refreshInterval, QObject* parent) + :Logger(parent) +{ + firstLogger=new FileLogger(firstSettings, refreshInterval, this); + secondLogger=new FileLogger(secondSettings, refreshInterval, this); +} + +void DualFileLogger::log(const QtMsgType type, const QString& message, const QString &file, const QString &function, const int line) +{ + firstLogger->log(type,message,file,function,line); + secondLogger->log(type,message,file,function,line); +} + +void DualFileLogger::clear(const bool buffer, const bool variables) +{ + firstLogger->clear(buffer,variables); + secondLogger->clear(buffer,variables); +} diff --git a/Log/dualfilelogger.h b/Log/dualfilelogger.h new file mode 100644 index 0000000..e1de33e --- /dev/null +++ b/Log/dualfilelogger.h @@ -0,0 +1,35 @@ + +#ifndef DUALFILELOGGER_H +#define DUALFILELOGGER_H + +#include +#include +#include +#include "logglobal.h" +#include "logger.h" +#include "filelogger.h" + +class DECLSPEC DualFileLogger : public Logger { + Q_OBJECT + Q_DISABLE_COPY(DualFileLogger) +public: + + + DualFileLogger(QSettings* firstSettings, QSettings* secondSettings, + const int refreshInterval=10000, QObject *parent = nullptr); + + + virtual void log(const QtMsgType type, const QString& message, const QString &file="", + const QString &function="", const int line=0); + + virtual void clear(const bool buffer=true, const bool variables=true); + +private: + + FileLogger* firstLogger; + + FileLogger* secondLogger; + +}; + +#endif // DUALFILELOGGER_H diff --git a/Log/filelogger.cpp b/Log/filelogger.cpp new file mode 100644 index 0000000..45ebf1b --- /dev/null +++ b/Log/filelogger.cpp @@ -0,0 +1,276 @@ + +#include "filelogger.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "LogInfo.h" +#define LOG_FILE_PATH "/home/plg/loginfo/" + +void FileLogger::refreshSettings() +{ + mutex.lock(); + QString oldFileName=fileName; + + settings->sync(); + fileName = LOG_FILE_PATH; +// fileName=settings->value("fileName").toString(); +// LogInfo::setRunStatusText(tr("fileName: %1").arg(fileName)); + QDate today = QDate::currentDate(); + QString todayString=today.toString(Qt::ISODate); + // 计算前七天的日期 + //QDate oneWeekAgo = today.addDays(-7); + fileName+=today.toString(Qt::ISODate); + fileName+="/"; + fileName+="log.txt"; + static QString lastDay = ""; + if(lastDay!=todayString) + { + TimerDel->start(30000); + lastDay=todayString; + } + + +#ifdef Q_OS_WIN32 + if (QDir::isRelativePath(fileName) && settings->format()!=QSettings::NativeFormat) +#else + // std::cout<<"QDir::isRelativePath:"<fileName()); + fileName=QFileInfo(configFile.absolutePath(),fileName).absoluteFilePath(); + } + maxSize=settings->value("maxSize",0).toLongLong(); + maxBackups=settings->value("maxBackups",0).toInt(); + msgFormat=settings->value("msgFormat","{timestamp} {type} {msg}").toString(); + timestampFormat=settings->value("timestampFormat","yyyy-MM-dd hh:mm:ss.zzz").toString(); + bufferSize=settings->value("bufferSize",0).toInt(); + + QByteArray minLevelStr = settings->value("minLevel","ALL").toByteArray(); + if (minLevelStr=="ALL" || minLevelStr=="DEBUG" || minLevelStr=="0") + { + minLevel=QtDebugMsg; + } + else if (minLevelStr=="WARNING" || minLevelStr=="WARN" || minLevelStr=="1") + { + minLevel=QtWarningMsg; + } + else if (minLevelStr=="ERROR" || minLevelStr=="CRITICAL" || minLevelStr=="2") + { + minLevel=QtCriticalMsg; + } + else if (minLevelStr=="FATAL" || minLevelStr=="3") + { + // minLevel=QtMsgType::QtFatalMsg; + minLevel=QtFatalMsg; + } +// else if (minLevelStr=="INFO" || minLevelStr=="4") +// { +// minLevel=QtMsgType::QtInfoMsg; +// } + + if (oldFileName!=fileName) + { + fprintf(stderr,"Logging to %s\n",qPrintable(fileName)); + close(); + open(); + } + mutex.unlock(); +} + + +FileLogger::FileLogger(QSettings *settings, const int refreshInterval, QObject* parent) + : Logger(parent) +{ + TimerDel = new QTimer(this); + connect(TimerDel,SIGNAL(timeout()),this,SLOT(timeOutToDelete())); + Q_ASSERT(settings!=nullptr); + Q_ASSERT(refreshInterval>=0); + this->settings=settings; + file=nullptr; + if (refreshInterval>0) + { + refreshTimer.start(refreshInterval,this); + } + flushTimer.start(1000,this); + refreshSettings(); +} + + +FileLogger::~FileLogger() +{ + close(); +} + + +void FileLogger::write(const LogMessage* logMessage) +{ + if (file) + { +// qDebug()<<"Critical message output test\n"; +// qCritical("This is a critical message of test\n"); + file->write(qPrintable(logMessage->toString(msgFormat,timestampFormat))); + + if (logMessage->getType()>=QtCriticalMsg) + { + file->flush(); + } + + if (file->error()) + { + qWarning("Cannot write to log file %s: %s",qPrintable(fileName),qPrintable(file->errorString())); + close(); + } + + } + + if (!file) + { + Logger::write(logMessage); + } + +} + +void FileLogger::open() +{ + if (fileName.isEmpty()) + { + qWarning("Name of logFile is empty"); + } + else { + file=new QFile(fileName); + QFileInfo fileInfo(fileName); + //std::cout<<"fileInfo.exists:"<open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) + { + std::cout<<"file is is open faile fileName:"<errorString())); + file=nullptr; + } + } +} + + +void FileLogger::close() +{ + if (file) + { + file->close(); + delete file; + file=nullptr; + } +} + +void FileLogger::rotate() { + int count=0; + forever + { + QFile bakFile(QString("%1.%2").arg(fileName).arg(count+1)); + if (bakFile.exists()) + { + ++count; + } + else + { + break; + } + } + + while (maxBackups>0 && count>=maxBackups) + { + QFile::remove(QString("%1.%2").arg(fileName).arg(count)); + --count; + } + + for (int i=count; i>0; --i) { + QFile::rename(QString("%1.%2").arg(fileName).arg(i),QString("%1.%2").arg(fileName).arg(i+1)); + } + + QFile::rename(fileName,fileName+".1"); + +} + + +void FileLogger::timerEvent(QTimerEvent* event) +{ + if (!event) + { + return; + } + else if (event->timerId()==refreshTimer.timerId()) + { + refreshSettings(); + } + else if (event->timerId()==flushTimer.timerId() && file) + { + mutex.lock(); + + file->flush(); + + if (maxSize>0 && file->size()>=maxSize) + { + close(); + rotate(); + open(); + } + + mutex.unlock(); + } +} + +bool FileLogger::removeDirectory(const QString &directoryPath) { + // 检查目录是否存在 + QDir dir(directoryPath); + if (dir.exists()) { + system((char *)((QString("rm -r %1").arg(directoryPath)).toAscii().data())); + return true; + } + return false; +} + +void FileLogger::timeOutToDelete(){ + QDate today = QDate::currentDate(); + for(int daysAgo=14;daysAgo>=7;--daysAgo){ + QString needToDelFoldPath=LOG_FILE_PATH; + QDate pastDate=today.addDays(-daysAgo); + needToDelFoldPath+=pastDate.toString(Qt::ISODate); + needToDelFoldPath+="/"; + if (QDir(needToDelFoldPath).exists()) { + bool result= removeDirectory(needToDelFoldPath); + if(result){ + qDebug()<<"The directory and all its contents have been removed"; + LogInfo::setRunStatusText(tr("The directory and all its contents have been removed")); + }else{ + qDebug() << "Failed to remove the directory"; + LogInfo::setRunStatusText(tr("Failed to remove the directory")); + } + } + } + TimerDel->stop(); +} diff --git a/Log/filelogger.h b/Log/filelogger.h new file mode 100644 index 0000000..1310d8b --- /dev/null +++ b/Log/filelogger.h @@ -0,0 +1,62 @@ + +#ifndef FILELOGGER_H +#define FILELOGGER_H + +#include +#include +#include +#include +#include +#include "logglobal.h" +#include "logger.h" +#include + +class DECLSPEC FileLogger : public Logger { + Q_OBJECT + Q_DISABLE_COPY(FileLogger) +public: + + FileLogger(QSettings* settings, const int refreshInterval=10000, QObject* parent = nullptr); + + virtual ~FileLogger(); + + virtual void write(const LogMessage* logMessage); + + public slots: + void timeOutToDelete(); + +protected: + + void timerEvent(QTimerEvent* event); + +private: + + + QString fileName; + + + long maxSize; + + int maxBackups; + + QSettings* settings; + + QFile* file; + + QBasicTimer refreshTimer; + + QBasicTimer flushTimer; + QTimer *TimerDel; + + void open(); + + void close(); + + void rotate(); + + void refreshSettings(); + + bool removeDirectory(const QString &directoryPath); +}; + +#endif // FILELOGGER_H diff --git a/Log/logger.cpp b/Log/logger.cpp new file mode 100644 index 0000000..7b782e9 --- /dev/null +++ b/Log/logger.cpp @@ -0,0 +1,240 @@ + +#include "logger.h" +#include +#include +#include +#include +#include + +Logger* Logger::defaultLogger=nullptr; + + +QThreadStorage*> Logger::logVars; + + +QMutex Logger::mutex; + + +Logger::Logger(QObject* parent) + : QObject(parent), + msgFormat("{timestamp} {type} {msg}"), + timestampFormat("dd.MM.yyyy hh:mm:ss.zzz"), + minLevel(QtDebugMsg), + bufferSize(0) + {} + + +Logger::Logger(const QString msgFormat, const QString timestampFormat, const QtMsgType minLevel, const int bufferSize, QObject* parent) + :QObject(parent) +{ + this->msgFormat=msgFormat; + this->timestampFormat=timestampFormat; + this->minLevel=minLevel; + this->bufferSize=bufferSize; +} + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + static QRecursiveMutex recursiveMutex; + static QMutex nonRecursiveMutex; +#else + static QMutex recursiveMutex(QMutex::Recursive); + static QMutex nonRecursiveMutex(QMutex::NonRecursive); +#endif + +void Logger::msgHandler(const QtMsgType type, const QString &message, const QString &file, const QString &function, const int line) +{ + + recursiveMutex.lock(); + + if (defaultLogger && nonRecursiveMutex.tryLock()) + { + defaultLogger->log(type, message, file, function, line); + nonRecursiveMutex.unlock(); + } + else + { + fputs(qPrintable(message),stderr); + fflush(stderr); + } + + if (type==QtFatalMsg) + { + abort(); + } + + recursiveMutex.unlock(); +} + + +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) + void Logger::msgHandler5(const QtMsgType type, const QMessageLogContext &context, const QString &message) + { + (void)(context); + msgHandler(type,message,context.file,context.function,context.line); + } +#else + void Logger::msgHandler4(const QtMsgType type, const char* message) + { + msgHandler(type,message); + } +#endif + + +Logger::~Logger() +{ + if (defaultLogger==this) + { +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) + qInstallMessageHandler(nullptr); +#else + qInstallMsgHandler(nullptr); +#endif + defaultLogger=nullptr; + } +} + + +void Logger::write(const LogMessage* logMessage) +{ + fputs(qPrintable(logMessage->toString(msgFormat,timestampFormat)),stderr); + fflush(stderr); +} + + +void Logger::installMsgHandler() +{ + defaultLogger=this; +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) + qInstallMessageHandler(msgHandler5); +#else + qInstallMsgHandler(msgHandler4); +#endif +} + + +void Logger::set(const QString& name, const QString& value) +{ + mutex.lock(); + if (!logVars.hasLocalData()) + { + logVars.setLocalData(new QHash); + } + logVars.localData()->insert(name,value); + mutex.unlock(); +} + + +void Logger::clear(const bool buffer, const bool variables) +{ + mutex.lock(); + if (buffer && buffers.hasLocalData()) + { + QList* buffer=buffers.localData(); + while (buffer && !buffer->isEmpty()) + { + LogMessage* logMessage=buffer->takeLast(); + delete logMessage; + } + } + if (variables && logVars.hasLocalData()) + { + logVars.localData()->clear(); + } + mutex.unlock(); +} + + +void Logger::log(const QtMsgType type, const QString& message, const QString &file, const QString &function, const int line) +{ + bool toPrint=false; + switch (type) + { + case QtDebugMsg: + if (minLevel==QtDebugMsg) + { + toPrint=true; + } + break; + + #if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) + case QtInfoMsg: + if (minLevel==QtDebugMsg || + minLevel==QtInfoMsg) + { + toPrint=true; + } + break; + #endif + + case QtWarningMsg: + if (minLevel==QtDebugMsg || + #if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) + minLevel==QtInfoMsg || + #endif + minLevel==QtWarningMsg) + { + toPrint=true; + } + break; + + case QtCriticalMsg: + if (minLevel==QtDebugMsg || + #if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) + minLevel==QtInfoMsg || + #endif + minLevel==QtWarningMsg || + minLevel==QtCriticalMsg) + { + toPrint=true; + } + break; + + case QtFatalMsg: + toPrint=true; + break; + + default: + toPrint=true; + } + + mutex.lock(); + + if (bufferSize>0) + { + + if (!buffers.hasLocalData()) + { + buffers.setLocalData(new QList()); + } + QList* buffer=buffers.localData(); + + LogMessage* logMessage=new LogMessage(type,message,logVars.localData(),file,function,line); + buffer->append(logMessage); + + if (buffer->size()>bufferSize) + { + delete buffer->takeFirst(); + } + + if (toPrint) + { + + while (!buffer->isEmpty()) + { + LogMessage* logMessage=buffer->takeFirst(); + write(logMessage); + delete logMessage; + } + } + } + + else + { + if (toPrint) + { + LogMessage logMessage(type,message,logVars.localData(),file,function,line); + write(&logMessage); + } + } + mutex.unlock(); +} diff --git a/Log/logger.h b/Log/logger.h new file mode 100644 index 0000000..cea439c --- /dev/null +++ b/Log/logger.h @@ -0,0 +1,76 @@ + +#ifndef LOGGER_H +#define LOGGER_H + +#include +#include +#include +#include +#include +#include +#include "logglobal.h" +#include "logmessage.h" +#include + +class DECLSPEC Logger : public QObject { + Q_OBJECT + Q_DISABLE_COPY(Logger) +public: + + Logger(QObject* parent); + + Logger(const QString msgFormat="{timestamp} {type} {msg}", + const QString timestampFormat="dd.MM.yyyy hh:mm:ss.zzz", + const QtMsgType minLevel=QtDebugMsg, const int bufferSize=0, + QObject* parent = nullptr); + + virtual ~Logger(); + + virtual void log(const QtMsgType type, const QString& message, const QString &file="", + const QString &function="", const int line=0); + + void installMsgHandler(); + static void set(const QString& name, const QString& value); + + virtual void clear(const bool buffer=true, const bool variables=true); + +protected: + + + QString msgFormat; + + + QString timestampFormat; + + QtMsgType minLevel; + + int bufferSize; + + static QMutex mutex; + + virtual void write(const LogMessage* logMessage); + +private: + + static Logger* defaultLogger; + + static void msgHandler(const QtMsgType type, const QString &message, const QString &file="", + const QString &function="", const int line=0); + + +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) + + static void msgHandler5(const QtMsgType type, const QMessageLogContext& context, const QString &message); + +#else + + static void msgHandler4(const QtMsgType type, const char * message); + +#endif + + static QThreadStorage*> logVars; + + QThreadStorage*> buffers; +}; + +#endif // LOGGER_H diff --git a/Log/logglobal.h b/Log/logglobal.h new file mode 100644 index 0000000..1e2fc58 --- /dev/null +++ b/Log/logglobal.h @@ -0,0 +1,23 @@ + +#ifndef LOGGLOBAL_H +#define LOGGLOBAL_H + +#include + +#if defined(Q_OS_WIN) + #if defined(QTWEBAPPLIB_EXPORT) + #define DECLSPEC Q_DECL_EXPORT + #elif defined(QTWEBAPPLIB_IMPORT) + #define DECLSPEC Q_DECL_IMPORT + #endif +#endif +#if !defined(DECLSPEC) + #define DECLSPEC +#endif + +#if __cplusplus < 201103L + #define nullptr 0 +#endif + +#endif // LOGGLOBAL_H + diff --git a/Log/logmessage.cpp b/Log/logmessage.cpp new file mode 100644 index 0000000..34e95aa --- /dev/null +++ b/Log/logmessage.cpp @@ -0,0 +1,78 @@ + +#include "logmessage.h" +#include + +LogMessage::LogMessage(const QtMsgType type, const QString& message, const QHash *logVars, const QString &file, const QString &function, const int line) +{ + this->type=type; + this->message=message; + this->file=file; + this->function=function; + this->line=line; + timestamp=QDateTime::currentDateTime(); + threadId=QThread::currentThreadId(); + + if (logVars) + { + this->logVars=*logVars; + } +} + +QString LogMessage::toString(const QString& msgFormat, const QString& timestampFormat) const +{ + QString decorated=msgFormat+"\n"; + decorated.replace("{msg}",message); + + if (decorated.contains("{timestamp}")) + { + decorated.replace("{timestamp}",timestamp.toString(timestampFormat)); + } + + QString typeNr; + typeNr.setNum(type); + decorated.replace("{typeNr}",typeNr); + + switch (type) + { + case QtDebugMsg: + decorated.replace("{type}","DEBUG "); + break; + case QtWarningMsg: + decorated.replace("{type}","WARNING "); + break; + case QtCriticalMsg: + decorated.replace("{type}","CRITICAL"); + break; + case QtFatalMsg: + decorated.replace("{type}","FATAL "); + break; + #if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) + case QtInfoMsg: + decorated.replace("{type}","INFO "); + break; + #endif + } + + decorated.replace("{file}",file); + decorated.replace("{function}",function); + decorated.replace("{line}",QString::number(line)); + + QString threadId = QString("0x%1").arg(qulonglong(QThread::currentThreadId()), 8, 16, QLatin1Char('0')); + decorated.replace("{thread}",threadId); + + if (decorated.contains("{") && !logVars.isEmpty()) + { + QList keys=logVars.keys(); + foreach (QString key, keys) + { + decorated.replace("{"+key+"}",logVars.value(key)); + } + } + + return decorated; +} + +QtMsgType LogMessage::getType() const +{ + return type; +} diff --git a/Log/logmessage.h b/Log/logmessage.h new file mode 100644 index 0000000..d2ee785 --- /dev/null +++ b/Log/logmessage.h @@ -0,0 +1,44 @@ + +#ifndef LOGMESSAGE_H +#define LOGMESSAGE_H + +#include +#include +#include +#include "logglobal.h" + +class DECLSPEC LogMessage +{ + Q_DISABLE_COPY(LogMessage) +public: + + LogMessage(const QtMsgType type, const QString& message, const QHash* logVars, + const QString &file, const QString &function, const int line); + + QString toString(const QString& msgFormat, const QString& timestampFormat) const; + + QtMsgType getType() const; + +private: + + + QHash logVars; + + QDateTime timestamp; + + QtMsgType type; + + + Qt::HANDLE threadId; + + QString message; + + QString file; + + QString function; + + int line; + +}; + +#endif // LOGMESSAGE_H diff --git a/LogInfo.cpp b/LogInfo.cpp new file mode 100644 index 0000000..7d0d66a --- /dev/null +++ b/LogInfo.cpp @@ -0,0 +1,477 @@ +#include "LogInfo.h" +#include "ui_loginfo.h" +#include +#include +#include +#include +#include +#include +#include +#include "DevOp.h" +#include +#include "myinclude.h" +#include +#include + +#ifndef LOGINFOFILE_DIR + #define LOGINFOFILE_DIR "/home/plg/loginfo/" +#endif +#define UDISK_LOGINFO_ROOT_DIR "/udisk/log/" + +LogInfo::LogInfo(QWidget *parent) : + QWidget(parent), + ui(new Ui::LogInfo) +{ + ui->setupUi(this); + ui->textEditRunStatus->setReadOnly(true); + ui->textEditRunStatus_2->setReadOnly(true); + textEdit = ui->textEditRunStatus; + textEdit->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); + textEdit2 = ui->textEditRunStatus_2; + //textEdit2->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); + textEdit2->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); + + + textEditMachInfo = ui->machinInformation; + runStatusTextIndex = 0; + openFileName =""; + ui->labelPreFileName->setText(""); + //currenDate=""; + //r_CurrentDate=QDate::currentDate().toString("yyyyMMdd"); + + textEdit2->append(tr("请先打开历史状态文件!")); + if(!QDir("/home/plg").exists()) + QDir("/home/plg").mkdir("/home/plg"); + readRunStatusText(); + runStatusTextIndex = textEdit->document()->lineCount(); + //ui->pushButtonClear->hide(); + fileDialog=0; // 先初始化为0 ,否则会死机 + + // LOGINFOFILE_DIR "/home/plg/loginfo/" +#ifdef DEBUG1 + ; +#else + QFile file(SYS_ROOT_DIR"UseEn"); + if(file.exists()) //ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tab_3)); + ; + else { + //ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tab_3)); + onReadRecorder( ); + } +#endif + //ui->textEditRunStatus_3->setText(tr("测试变量加粗,可能会影响其它内容")); + //showMachineInformation(" "," "," "," "); + timerLogdel=new QTimer(this); + connect(timerLogdel, SIGNAL(timeout()), this, SLOT(deleteOldLog())); + //延时60秒删除日志文件 + timerLogdel->start(60000); +} + +LogInfo::~LogInfo() +{ + textEdit = 0; + textEdit2 = 0; + textEditMachInfo = 0; + if(fileDialog) + delete fileDialog; + delete ui; + + disconnect(timerLogdel, SIGNAL(timeout()), this, SLOT(deleteOldLog())); + timerLogdel->stop(); +} + +QTextEdit *LogInfo::textEdit = 0; +QTextEdit *LogInfo::textEdit2 = 0; +QTextEdit *LogInfo::textEditMachInfo = 0; + +int LogInfo::runStatusTextIndex = 0; + +void LogInfo::showMachineInformation(QString Mac,QString SerialNum, QString VernonBachVer, QString FpgaVer) +{ + QString machInfo; + machInfo = "Mac:" + Mac + "\n"; + machInfo += "Serial Number:" + SerialNum + "\n"; + machInfo += "VernonBach Ver:" + VernonBachVer + "\n"; + machInfo += "FPGA Ver:" + FpgaVer + "\n"; + QFile kernelVer("/proc/version"); + if (kernelVer.open(QFile::ReadOnly | QFile::Text)) { + QTextStream in(&kernelVer); + QString kernelVer=in.readLine(); + QStringList list=kernelVer.split(" "); + QStringList list2=kernelVer.split("#"); + machInfo = machInfo + "Kernel: "; + machInfo = machInfo + list.at(2); + machInfo = machInfo + "(" + list2.at(1) + ")" + "\n"; + } + textEditMachInfo->setText(machInfo); +} +void LogInfo::showRemoteControll(QString SuperNode, QString edgeIP) +{ + QString machInfo = textEditMachInfo->toPlainText(); + machInfo += "SuperNode:" + SuperNode + "\n"; + machInfo += "edgeIP:" + edgeIP + "\n"; + textEditMachInfo->setText(machInfo); +} +//void LogInfo::setRunStatusText(QString str){ +// if(!textEdit){ +// return; +// } +// const int maxTextEditHeight = 2000; +// if(textEdit->document()->size().height() > maxTextEditHeight){ +// const QString fileNameL=QString(LOGINFOFILE_DIR)+QDate::currentDate().toString("yyyyMMdd") +"_test.txt"; +// QFile file(fileNameL); +// if(file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)){ +// QTextStream out(&file); +// out<toPlainText()<clear(); //显示今天全部信息,加载太多可能会死机 +// } +// str.prepend(QString("%1. %2:").arg(QString::number(runStatusTextIndex ++ )).arg(QTime::currentTime().toString("hh:mm:ss"))); +// textEdit->append(str); +// saveRunStatusText(); +//} + +//edit@01-11 +void LogInfo::setRunStatusText(QString str){ + if(!textEdit){ + return; + } + const int maxTextEditHeight = 2000; + if(textEdit->document()->size().height() > maxTextEditHeight) + { + textEdit->clear(); //显示今天全部信息,加载太多可能会死机 + } + str.prepend(QString("%1. %2:").arg(QString::number(runStatusTextIndex ++ )).arg(QTime::currentTime().toString("hh:mm:ss"))); + textEdit->append(str); + saveRunStatusText(); + + { + const QString dts=QDate::currentDate().toString("yyyyMMdd") ; + QString fileNameL=QString(LOGINFOFILE_DIR)+dts +"_1.txt"; + QFile file(fileNameL); + if(file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)){ + QTextStream out(&file); + out<document()->size(); + if(size.height() > 500){ + textEdit3->clear(); + } + //str.prepend(QString("%1. %2: ").arg(QString::number(runStatusTextIndex ++ )).arg(QTime::currentTime().toString("hh:mm:ss"))); + textEdit3->append(str); + } +#else + str; +#endif +} +QString LogInfo::getRunStatusText(void){ + return ""; +} + +void LogInfo::saveRunStatusText() +{ +// QString fileName; +// static QString r_fileName=""; +// QDir dir1; +// dir1.setPath(LOGINFOFILE_DIR); + +// if(textEdit){ +// if(!dir1.exists()) +// { +// dir1.mkdir(QString ("/home/plg/loginfo/")); +// } +// //currenDate=QDate::currentDate().toString("yyyyMMdd"); // +// fileName=QString("/home/plg/loginfo/")+QDate::currentDate().toString("yyyyMMdd") +".txt"; +//#ifdef DEBUG1 +// // qDebug()<document()); +// if(r_fileName!="" && (r_fileName!=fileName)) textEdit->clear(); +// r_fileName=fileName; +// } +} +void LogInfo::readRunStatusText() +{ + QString fileName; + if(textEdit){ + QDir dir1; + dir1.setPath(LOGINFOFILE_DIR); + if(!dir1.exists()) + dir1.mkdir(QString ("/home/plg/loginfo/")); + fileName=QString("/home/plg/loginfo/")+QDate::currentDate().toString("yyyyMMdd")+"_1.txt"; + QFile file(fileName); + if(file.exists()){ + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + file.fileName()); + } + else{ + QTextStream in (&file); + textEdit->setText(in.readAll()); + } + file.close(); + ui->tabWidget->setCurrentWidget(ui->tab); + } + + QDate date1 = QDate::currentDate(); + for(int i=0;i<8;i++) + { + fileName=QString("/home/plg/loginfo/")+date1.addDays(-i-5).toString("yyyyMMdd")+".txt"; + file.setFileName(fileName); + if(file.exists()){ + file.remove(); + } + } + } +} + + +void LogInfo::on_pushButtonExportFile_pressed() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("提示"), + tr("是否确认将所有日志文件导出到U盘?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + //QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_LOGINFO_ROOT_DIR; + QDir dir(UDISK_LOGINFO_ROOT_DIR); + if(!dir.exists()){ + system((char *)((QString("mkdir -p %1").arg(UDISK_LOGINFO_ROOT_DIR)).toAscii().data())); + } + + //插入U盘后,检测目录usb-storage是否存在 + if(!QDir("/proc/scsi/usb-storage/").exists()){ + QMessageBox::warning(0,tr("警告"),tr("U盘未插入或无法识别,请重新插拔设备!")); + return; + } + + system((char *)((QString("cp -r %1/* %2/").arg(LOGINFOFILE_DIR).arg(UDISK_LOGINFO_ROOT_DIR)).toAscii().data())); + //refreshListView(EditMode); + QMessageBox::information(this, tr("提示"), + tr("成功导出到U盘")); + } +} + +void LogInfo::on_pushButtonPreState_pressed(){ + + if(textEdit2){ + //setRunStatusText(QString("FILE COUNT:%1").arg( QDir("/home/plg/loginfo/").count())); + //if( QDir("/home/plg/loginfo/").count()<4) { + if( QDir("/home/plg/loginfo/").count()<1) { + //QMessageBox::warning(this,"警告","没有历史文件"); + textEdit2->setText( "目前历史文件数量为0个"); + return; + } + //qDebug()<<"3333"; + if(openFileName.isEmpty()) textEdit2->clear(); + if(fileDialog) { + // qDebug()<<"4444"; + disconnect(fileDialog,SIGNAL(accepted()),0,0); // 如果对话框已经定义,则删除控件关联,否则也会出错。 + + } + else {//qDebug()<<"5"; + fileDialog = new MyFileDialog(0); + //qDebug()<<"6"; + } + //qDebug()<<"7"; + QDir dir1; + dir1.setPath(QString ("/home/plg/loginfo/")); + + if(!dir1.exists()) + {dir1.mkdir(QString ("/home/plg/loginfo/"));} + if(fileDialog){ + //qDebug()<<"8"; + + if(fileDialog->directory().path()!="/home/plg/loginfo") + fileDialog->setDirectory(QDir("/home/plg/loginfo")); + + + //qDebug()<<"read File 3.2"<showFileDialog(tr("选择历史记录文件"),dir1.path(),QString("Txt files (*.txt)")); + //qDebug()<<"read File 5"; + } + //else qDebug()<<"read File:"<selectedFiles(); + if( files.size()==0) return ; + if(QString(files[0]).isNull()) return; + QString fileName = files[0]; + + if(!fileName.endsWith(".txt",Qt::CaseInsensitive)) return ; + + openFileName = fileName; + QFile file(openFileName); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + openFileName); + } + else{ + QTextStream in (&file); + textEdit2->setText(in.readAll()); + textEdit2->moveCursor(QTextCursor::End);//滚动条移到底部 + //ui->labelPreFileName->setText(file.fileName()); + QFileInfo info(file.fileName()); + ui->labelPreFileName->setText(info.fileName()); + } + file.close(); + ui->tabWidget->setCurrentWidget(ui->tab_2); + +} + +void LogInfo::on_pushButtonClear_pressed() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("提示"), + tr("是否确认将历史日志文件全部清除?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + QDir dir1(QString("/home/plg/loginfo/")); + if(dir1.exists()) + { + system((char *)QString("rm /home/plg/loginfo/*.*").toAscii().data()); + deleteDirectoryContents(dir1); + } + else system((char *)QString("mkdir /home/plg/loginfo/").toAscii().data()); + + saveRunStatusText(); + } + +} + +void LogInfo::on_pushButtonClearCurrent_pressed() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("提示"), + tr("是否确认将当前日志全部清除?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ +// QString fileNameL=QString("/home/plg/loginfo/")+QDate::currentDate().toString("yyyyMMdd") +"test.txt"; +// QFile file(fileNameL); +// if(!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)){ +// ; +// } +// else{ +// QTextStream out(&file); +// out<toPlainText()<clear(); + runStatusTextIndex=0; + saveRunStatusText(); + } + //setRunStatusText(QString("FILE COUNT:%1").arg( QDir("/home/plg/loginfo/").count())); +} +void LogInfo::onReadRecorder() +{ + QString fileName = ":/buge_record.txt"; + + if(!fileName.endsWith(".txt",Qt::CaseInsensitive)) return ; + QFile file(fileName); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + openFileName); + } + else{ + QTextStream in (&file); + textEditMachInfo->setText(in.readAll()); + } +} + + +void LogInfo::deleteDirectoryContents(const QDir &directory) { + QList entries = directory.entryInfoList( + QDir::NoDotAndDotDot | QDir::AllEntries); + QString today = QDate::currentDate().toString(Qt::ISODate); + // 使用传统的 for 循环遍历所有条目 + for (int i = 0; i < entries.size(); ++i) { + QFileInfo entryInfo = entries.at(i); + QString dirName=entryInfo.baseName(); + if(today==dirName) + continue; + QString fullPath = entryInfo.absoluteFilePath(); + + if (entryInfo.isFile() || entryInfo.isSymLink()) { + // 如果是文件或符号链接,尝试删除 + if (!QFile::remove(fullPath)) { + qDebug() << "Failed to remove file or symlink:" << fullPath; + } + } else if (entryInfo.isDir()) { + // 如果是目录,递归调用以删除其内容 + QDir subDir(fullPath); + deleteDirectoryContents(subDir); + + // 目录现在应该是空的,尝试删除它 + if (!QDir().rmdir(fullPath)) { + qDebug() << "Failed to remove directory:" << fullPath; + } + } + } +} + +// 删除指定文件夹超过七天的文件 +void LogInfo::deleteOldLog(const QString folderPath,int days){ + QDir dir(folderPath); // 创建一个QDir对象用于操作传入的文件夹路径 + if (!dir.exists()) { // 判断传入文件夹是否存在 + qDebug() << "文件夹不存在"; + return; + } + QDateTime currentDateTime = QDateTime::currentDateTime(); // 获取当前时间 + QDateTime sevenDaysAgo = currentDateTime.addDays(-days); // 计算days天前的日期时间 + // 目录下的文件和子目录的信息列表,列出所有文件和子目录并按照最后修改时间排序 + QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Time); + foreach (QFileInfo fileInfo ,fileInfoList) { + if (!fileInfo.isDir()){ + QString fileExtension = fileInfo.suffix().toLower(); // 获取文件的扩展名并确保它是小写的 + // 选择删除那种图片类型 + if (fileExtension == "txt") { + if (fileInfo.lastModified() < sevenDaysAgo && fileInfo.fileName().indexOf('_')!=-1) { // 获取最后一个文件夹修改时间和days传入的时间最对比 + if (QFile::remove(fileInfo.absoluteFilePath())) { // 删除满足条件的文件的绝对路径 + qDebug() << "删除成功" << fileInfo.absoluteFilePath(); + } else { + qDebug() << "文件删除失败" << fileInfo.absoluteFilePath(); + } + } + } + } + } +} + +void LogInfo::deleteOldLog() +{ + qDebug()<<"延时60秒删除过期日志"; + deleteOldLog(LOGINFOFILE_DIR,7);//删除一周前的日志 + timerLogdel->stop(); +} + +void LogInfo::truncatelog() +{ + const QString dts=QDate::currentDate().toString("yyyyMMdd") ; + const QString fileNameL=QString(LOGINFOFILE_DIR)+dts +"_1.txt"; + QFile file(fileNameL); + + if(file.size()>204800)//文件大小 + { + QSettings settings("MySoft", "MyApp"); + int filenum=settings.value(dts,2).toInt(); + if(filenum==2) + settings.clear(); + settings.setValue(dts,filenum+1); + + qDebug()<<"rename="< +#include +#include "MyFileDialog.h" +#include +#include +namespace Ui { +class LogInfo; +} + +class LogInfo : public QWidget +{ + Q_OBJECT + +public: + explicit LogInfo(QWidget *parent = 0); + ~LogInfo(); + static QString getRunStatusText(void); + + static void setRunStatusText(QString str); + static void saveRunStatusText(); + void setDebugText(QString str); // debug + static void showMachineInformation(QString Mac,QString SerialNum, QString VernonBachVer, QString FpgaVer); + static void showRemoteControll(QString SuperNode, QString edgeIP); + + void onReadRecorder(); + void deleteDirectoryContents(const QDir &directory); + static void truncatelog(); +protected slots: + void deleteOldLog(const QString folderPath, int days); + void deleteOldLog(); +private slots: + void on_pushButtonClear_pressed(); + void on_pushButtonPreState_pressed(); + void on_pushButtonExportFile_pressed(); + + void on_pushButtonClearCurrent_pressed(); + void onOpen_FIle_select(); + void readRunStatusText(); + +private: + Ui::LogInfo *ui; + static QTextEdit *textEdit; + static QTextEdit *textEdit2; + static QTextEdit *textEditMachInfo; + static int runStatusTextIndex; + MyFileDialog *fileDialog; + QString openFileName; + static QString currenDate; + static QString r_CurrentDate; + QTimer *timerLogdel; +}; + +#endif // LOGINFO_H diff --git a/Matrix/common.cpp b/Matrix/common.cpp new file mode 100644 index 0000000..e7ed58a --- /dev/null +++ b/Matrix/common.cpp @@ -0,0 +1,397 @@ +/* common.c - Contains functions needed for a number of barcodes */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#include +#include +#include +#include "common.h" + +int ustrlen(unsigned char data[]) { + /* Local replacement for strlen() with unsigned char strings */ + int i; + for (i=0;data[i];i++); + + return i; +} + +void ustrcpy(unsigned char target[], unsigned char source[]) { + /* Local replacement for strcpy() with unsigned char strings */ + int i, len; + + len = ustrlen(source); + for(i = 0; i < len; i++) { + target[i] = source[i]; + } + target[i] = '\0'; +} + +void concat(char dest[], char source[]) +{ /* Concatinates dest[] with the contents of source[], copying /0 as well */ + unsigned int i, j, n; + + j = strlen(dest); + n = strlen(source); + for(i = 0; i <= n; i++) { + dest[i + j] = source[i]; } +} + +void uconcat(unsigned char dest[], unsigned char source[]) +{ /* Concatinates dest[] with the contents of source[], copying /0 as well */ + unsigned int i, j; + + j = ustrlen(dest); + for(i = 0; i <= ustrlen(source); i++) { + dest[i + j] = source[i]; } +} + + +int ctoi(char source) +{ /* Converts a character 0-9 to its equivalent integer value */ + if((source >= '0') && (source <= '9')) + return (source - '0'); + return(source - 'A' + 10); +} + +char itoc(int source) +{ /* Converts an integer value to its hexadecimal character */ + if ((source >= 0) && (source <= 9)) { + return ('0' + source); } + else { + return ('A' + (source - 10)); } +} + +void to_upper(unsigned char source[]) +{ /* Converts lower case characters to upper case in a string source[] */ + unsigned int i, src_len = ustrlen(source); + + for (i = 0; i < src_len; i++) { + if ((source[i] >= 'a') && (source[i] <= 'z')) { + source [i] = (source[i] - 'a') + 'A'; } + } +} + +int is_sane(char test_string[], unsigned char source[], int length) +{ /* Verifies that a string only uses valid characters */ + unsigned int i, j, latch; + unsigned int lt = strlen(test_string); + + for(i = 0; i < length; i++) { + latch = FALSE; + for(j = 0; j < lt; j++) { + if (source[i] == test_string[j]) { + latch = TRUE; + break; + } + } + if (!(latch)) { + return ERROR_INVALID_DATA; + } + } + + return 0; +} + +int posn(char set_string[], char data) +{ /* Returns the position of data in set_string */ + unsigned int i, n = strlen(set_string); + + for(i = 0; i < n; i++) { + if (data == set_string[i]) { return i; } } + return 0; +} + +void lookup(char set_string[], char *table[], char data, char dest[]) +{ /* Replaces huge switch statements for looking up in tables */ + unsigned int i, n = strlen(set_string); + + for(i = 0; i < n; i++) { + if (data == set_string[i]) { concat(dest, table[i]); } } +} + +int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + return (symbol->encoded_data[y_coord][x_coord / 7] & (1 << (x_coord % 7))) ? 1 : 0; +#if 0 + switch(x_sub) { + case 0: if((symbol->encoded_data[y_coord][x_char] & 0x01) != 0) { result = 1; } break; + case 1: if((symbol->encoded_data[y_coord][x_char] & 0x02) != 0) { result = 1; } break; + case 2: if((symbol->encoded_data[y_coord][x_char] & 0x04) != 0) { result = 1; } break; + case 3: if((symbol->encoded_data[y_coord][x_char] & 0x08) != 0) { result = 1; } break; + case 4: if((symbol->encoded_data[y_coord][x_char] & 0x10) != 0) { result = 1; } break; + case 5: if((symbol->encoded_data[y_coord][x_char] & 0x20) != 0) { result = 1; } break; + case 6: if((symbol->encoded_data[y_coord][x_char] & 0x40) != 0) { result = 1; } break; + } + + return result; +#endif +} + +void set_module(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + if(module_is_set(symbol, y_coord, x_coord)) { return; } + symbol->encoded_data[y_coord][x_coord / 7] += 1 << (x_coord % 7); +#if 0 + int x_char, x_sub; + + + x_char = x_coord / 7; + x_sub = x_coord % 7; + + switch(x_sub) { + case 0: symbol->encoded_data[y_coord][x_char] += 0x01; break; + case 1: symbol->encoded_data[y_coord][x_char] += 0x02; break; + case 2: symbol->encoded_data[y_coord][x_char] += 0x04; break; + case 3: symbol->encoded_data[y_coord][x_char] += 0x08; break; + case 4: symbol->encoded_data[y_coord][x_char] += 0x10; break; + case 5: symbol->encoded_data[y_coord][x_char] += 0x20; break; + case 6: symbol->encoded_data[y_coord][x_char] += 0x40; break; + } /* The last binary digit is reserved for colour barcodes */ +#endif +} + +void unset_module(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + if(!(module_is_set(symbol, y_coord, x_coord))) { return; } + symbol->encoded_data[y_coord][x_coord / 7] -= 1 << (x_coord % 7); +#if 0 + int x_char, x_sub; + + x_char = x_coord / 7; + x_sub = x_coord % 7; + + switch(x_sub) { + case 0: symbol->encoded_data[y_coord][x_char] -= 0x01; break; + case 1: symbol->encoded_data[y_coord][x_char] -= 0x02; break; + case 2: symbol->encoded_data[y_coord][x_char] -= 0x04; break; + case 3: symbol->encoded_data[y_coord][x_char] -= 0x08; break; + case 4: symbol->encoded_data[y_coord][x_char] -= 0x10; break; + case 5: symbol->encoded_data[y_coord][x_char] -= 0x20; break; + case 6: symbol->encoded_data[y_coord][x_char] -= 0x40; break; + } /* The last binary digit is reserved for colour barcodes */ +#endif +} + +void expand(struct zint_symbol *symbol, char data[]) +{ /* Expands from a width pattern to a bit pattern */ + + unsigned int reader, n = strlen(data); + int writer, i; + char latch; + + writer = 0; + latch = '1'; + + for(reader = 0; reader < n; reader++) { + for(i = 0; i < ctoi(data[reader]); i++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer); } + writer++; + } + if(latch == '1') { + latch = '0'; + } else { + latch = '1'; + } + } + + if(symbol->symbology != BARCODE_PHARMA) { + if(writer > symbol->width) { + symbol->width = writer; + } + } else { + /* Pharmacode One ends with a space - adjust for this */ + if(writer > symbol->width + 2) { + symbol->width = writer - 2; + } + } + symbol->rows = symbol->rows + 1; +} + +int is_stackable(int symbology) { + /* Indicates which symbologies can have row binding */ + if(symbology < BARCODE_PDF417) { return 1; } + if(symbology == BARCODE_CODE128B) { return 1; } + if(symbology == BARCODE_ISBNX) { return 1; } + if(symbology == BARCODE_EAN14) { return 1; } + if(symbology == BARCODE_NVE18) { return 1; } + if(symbology == BARCODE_KOREAPOST) { return 1; } + if(symbology == BARCODE_PLESSEY) { return 1; } + if(symbology == BARCODE_TELEPEN_NUM) { return 1; } + if(symbology == BARCODE_ITF14) { return 1; } + if(symbology == BARCODE_CODE32) { return 1; } + + return 0; +} + +int is_extendable(int symbology) { + /* Indicates which symbols can have addon */ + if(symbology == BARCODE_EANX) { return 1; } + if(symbology == BARCODE_UPCA) { return 1; } + if(symbology == BARCODE_UPCE) { return 1; } + if(symbology == BARCODE_ISBNX) { return 1; } + if(symbology == BARCODE_UPCA_CC) { return 1; } + if(symbology == BARCODE_UPCE_CC) { return 1; } + if(symbology == BARCODE_EANX_CC) { return 1; } + + return 0; +} + +int roundup(float input) +{ + float remainder; + int integer_part; + + integer_part = (int)input; + remainder = input - integer_part; + + if(remainder > 0.1) { + integer_part++; + } + + return integer_part; +} + +int istwodigits(unsigned char source[], int position) +{ + if((source[position] >= '0') && (source[position] <= '9')) { + if((source[position + 1] >= '0') && (source[position + 1] <= '9')) { + return 1; + } + } + + return 0; +} + +float froundup(float input) +{ + float fraction, output = 0.0; + + fraction = input - (int)input; + if(fraction > 0.01) { output = (input - fraction) + 1.0; } else { output = input; } + + return output; +} + +int latin1_process(struct zint_symbol *symbol, unsigned char source[], unsigned char preprocessed[], int *length) +{ + int j, i, next; + + /* Convert Unicode to Latin-1 for those symbologies which only support Latin-1 */ + j = 0; + i = 0; + do { + next = -1; + if(source[i] < 128) { + preprocessed[j] = source[i]; + j++; + next = i + 1; + } else { + if(source[i] == 0xC2) { + preprocessed[j] = source[i + 1]; + j++; + next = i + 2; + } + if(source[i] == 0xC3) { + preprocessed[j] = source[i + 1] + 64; + j++; + next = i + 2; + } + } + if(next == -1) { + strcpy(symbol->errtxt, "error: Invalid character in input string (only Latin-1 characters supported)"); + return ERROR_INVALID_DATA; + } + i = next; + } while(i < *length); + preprocessed[j] = '\0'; + *length = j; + + return 0; +} + +int utf8toutf16(struct zint_symbol *symbol, unsigned char source[], int vals[], int *length) +{ + int bpos, jpos, error_number, done; + int next; + + bpos = 0; + jpos = 0; + error_number = 0; + next = 0; + + do { + done = 0; + + if(source[bpos] <= 0x7f) { + /* 1 byte mode (7-bit ASCII) */ + vals[jpos] = source[bpos]; + next = bpos + 1; + jpos++; + done = 1; + } + + if(done == 0) { + if((source[bpos] >= 0x80) && (source[bpos] <= 0xbf)) { + strcpy(symbol->errtxt, "Corrupt Unicode data"); + return ERROR_INVALID_DATA; + } + } + + if(done == 0) { + if((source[bpos] >= 0xc0) && (source[bpos] <= 0xc1)) { + strcpy(symbol->errtxt, "Overlong encoding not supported"); + return ERROR_INVALID_DATA; + } + } + + if(done == 0) { + if((source[bpos] >= 0xc2) && (source[bpos] <= 0xdf)) { + /* 2 byte mode */ + vals[jpos] = ((source[bpos] & 0x1f) << 6) + (source[bpos + 1] & 0x3f); + next = bpos + 2; + jpos++; + done = 1; + } + } + + if(done == 0) { + if((source[bpos] >= 0xe0) && (source[bpos] <= 0xef)) { + /* 3 byte mode */ + vals[jpos] = ((source[bpos] & 0x0f) << 12) + ((source[bpos + 1] & 0x3f) << 6) + (source[bpos + 2] & 0x3f); + next = bpos + 3; + jpos ++; + done = 1; + } + } + + if(done == 0) { + if(source[bpos] >= 0xf0) { + strcpy(symbol->errtxt, "Unicode sequences of more than 3 bytes not supported"); + return ERROR_INVALID_DATA; + } + } + + bpos = next; + + } while(bpos < *length); + *length = jpos; + + return error_number; +} + diff --git a/Matrix/common.h b/Matrix/common.h new file mode 100644 index 0000000..dbcb017 --- /dev/null +++ b/Matrix/common.h @@ -0,0 +1,53 @@ +/* Used in some logic */ +#ifndef __COMMON_H +#define __COMMON_H + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +/* The most commonly used set */ +#define NEON "0123456789" + +#include "zint.h" + +#define U08 unsigned char +#define U16 unsigned short +#define U32 unsigned int + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +extern int ustrlen(unsigned char source[]); +extern void ustrcpy(unsigned char target[], unsigned char source[]); +extern void concat(char dest[], char source[]); +extern void uconcat(unsigned char dest[], unsigned char source[]); +extern int ctoi(char source); +extern char itoc(int source); +extern void to_upper(unsigned char source[]); +extern int is_sane(char test_string[], unsigned char source[], int length); +extern void lookup(char set_string[], char *table[], char data, char dest[]); +extern int posn(char set_string[], char data); +extern void expand(struct zint_symbol *symbol, char data[]); +extern int is_stackable(int symbology); +extern int is_extendable(int symbology); +extern int roundup(float input); +extern int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord); +extern void set_module(struct zint_symbol *symbol, int y_coord, int x_coord); +extern void unset_module(struct zint_symbol *symbol, int y_coord, int x_coord); +extern int istwodigits(unsigned char source[], int position); +extern float froundup(float input); +extern int parunmodd(unsigned char llyth); +extern int latin1_process(struct zint_symbol *symbol, unsigned char source[], unsigned char preprocessed[], int *length); +extern int utf8toutf16(struct zint_symbol *symbol, unsigned char source[], int vals[], int *length); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __COMMON_H */ diff --git a/Matrix/dm200.cpp b/Matrix/dm200.cpp new file mode 100644 index 0000000..491c858 --- /dev/null +++ b/Matrix/dm200.cpp @@ -0,0 +1,959 @@ +#include +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "reedsol.h" +#include "common.h" +#include "dm200.h" + +#include + +//#define QTDEBUG + +// simple checked response malloc +static void *safemalloc(int n) +{ + void *p = malloc(n); + return p; +} + +// Annex M placement alorithm low level +static void ecc200placementbit(int *array, int NR, int NC, int r, int c, int p, char b) +{ + if (r < 0) { + r += NR; + c += 4 - ((NR + 4) % 8); + } + if (c < 0) { + c += NC; + r += 4 - ((NC + 4) % 8); + } + array[r * NC + c] = (p << 3) + b; +} + +static void ecc200placementblock(int *array, int NR, int NC, int r, + int c, int p) +{ + ecc200placementbit(array, NR, NC, r - 2, c - 2, p, 7); + ecc200placementbit(array, NR, NC, r - 2, c - 1, p, 6); + ecc200placementbit(array, NR, NC, r - 1, c - 2, p, 5); + ecc200placementbit(array, NR, NC, r - 1, c - 1, p, 4); + ecc200placementbit(array, NR, NC, r - 1, c - 0, p, 3); + ecc200placementbit(array, NR, NC, r - 0, c - 2, p, 2); + ecc200placementbit(array, NR, NC, r - 0, c - 1, p, 1); + ecc200placementbit(array, NR, NC, r - 0, c - 0, p, 0); +} + +static void ecc200placementcornerA(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 1, 1, p, 6); + ecc200placementbit(array, NR, NC, NR - 1, 2, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 2); + ecc200placementbit(array, NR, NC, 2, NC - 1, p, 1); + ecc200placementbit(array, NR, NC, 3, NC - 1, p, 0); +} + +static void ecc200placementcornerB(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 3, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 2, 0, p, 6); + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 4, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 3, p, 3); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 2); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 1); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 0); +} + +static void ecc200placementcornerC(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 3, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 2, 0, p, 6); + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 2); + ecc200placementbit(array, NR, NC, 2, NC - 1, p, 1); + ecc200placementbit(array, NR, NC, 3, NC - 1, p, 0); +} + +static void ecc200placementcornerD(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 1, NC - 1, p, 6); + ecc200placementbit(array, NR, NC, 0, NC - 3, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3); + ecc200placementbit(array, NR, NC, 1, NC - 3, p, 2); + ecc200placementbit(array, NR, NC, 1, NC - 2, p, 1); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 0); +} + +// Annex M placement alorithm main function +static void ecc200placement(int *array, int NR, int NC) +{ + int r, c, p; + // invalidate + for (r = 0; r < NR; r++) + for (c = 0; c < NC; c++) + array[r * NC + c] = 0; + // start + p = 1; + r = 4; + c = 0; + do { + // check corner + if (r == NR && !c) + ecc200placementcornerA(array, NR, NC, p++); + if (r == NR - 2 && !c && NC % 4) + ecc200placementcornerB(array, NR, NC, p++); + if (r == NR - 2 && !c && (NC % 8) == 4) + ecc200placementcornerC(array, NR, NC, p++); + if (r == NR + 4 && c == 2 && !(NC % 8)) + ecc200placementcornerD(array, NR, NC, p++); + // up/right + do { + if (r < NR && c >= 0 && !array[r * NC + c]) + ecc200placementblock(array, NR, NC, r, c, p++); + r -= 2; + c += 2; + } + while (r >= 0 && c < NC); + r++; + c += 3; + // down/left + do { + if (r >= 0 && c < NC && !array[r * NC + c]) + ecc200placementblock(array, NR, NC, r, c, p++); + r += 2; + c -= 2; + } + while (r < NR && c >= 0); + r += 3; + c++; + } + while (r < NR || c < NC); + // unfilled corner + if (!array[NR * NC - 1]) + array[NR * NC - 1] = array[NR * NC - NC - 2] = 1; +} + +// calculate and append ecc code, and if necessary interleave +static void ecc200(unsigned char *binary, int bytes, int datablock, int rsblock) +{ + int blocks, b; + + blocks = (bytes + 2) / datablock; + + rs_init_gf(0x12d); + rs_init_code(rsblock, 1); + for (b = 0; b < blocks; b++) { + unsigned char buf[256], ecc[256]; + int n, p = 0; + for (n = b; n < bytes; n += blocks) + buf[p++] = binary[n]; + rs_encode(p, buf, ecc); + p = rsblock - 1; // comes back reversed + for (n = b; n < rsblock * blocks; n += blocks) + binary[bytes + n] = ecc[p--]; + } + rs_free(); +} + +float dmroundup(float input) +{ + float fraction, output = 0.0; + + fraction = input - (int)input; + if(fraction > 0.01) { output = (input - fraction) + 1.0; } else { output = input; } + + return output; +} + +/*int istwodigits(unsigned char source[], int position) +{ + if((source[position] >= '0') && (source[position] <= '9')) { + if((source[position + 1] >= '0') && (source[position + 1] <= '9')) { + return 1; + } + } + + return 0; +} */ + +int isx12(unsigned char source) +{ + if(source == 13) { return 1; } + if(source == 42) { return 1; } + if(source == 62) { return 1; } + if(source == 32) { return 1; } + if((source >= '0') && (source <= '9')) { return 1; } + if((source >= 'A') && (source <= 'Z')) { return 1; } + + return 0; +} + +void dminsert(char binary_string[], int posn, char newbit) +{ /* Insert a character into the middle of a string at position posn */ + int i, end; + + end = strlen(binary_string); + for(i = end; i > posn; i--) { + binary_string[i] = binary_string[i - 1]; + } + binary_string[posn] = newbit; +} + +void insert_value(unsigned char binary_stream[], int posn, int streamlen, char newbit) +{ + int i; + + for(i = streamlen; i > posn; i--) { + binary_stream[i] = binary_stream[i - 1]; + } + binary_stream[posn] = newbit; +} + +int look_ahead_test(unsigned char source[], int sourcelen, int position, int current_mode, int gs1) +{ + /* A custom version of the 'look ahead test' from Annex P */ + /* This version is deliberately very reluctant to end a data stream with EDIFACT encoding */ + + float ascii_count, c40_count, text_count, x12_count, edf_count, b256_count, best_count; + int sp, done, best_scheme; + char reduced_char; + + /* step (j) */ + if(current_mode == DM_ASCII) { + ascii_count = 0.0; + c40_count = 1.0; + text_count = 1.0; + x12_count = 1.0; + edf_count = 1.0; + b256_count = 1.25; + } else { + ascii_count = 1.0; + c40_count = 2.0; + text_count = 2.0; + x12_count = 2.0; + edf_count = 2.0; + b256_count = 2.25; + } + + switch(current_mode) { + case DM_C40: c40_count = 0.0; break; + case DM_TEXT: text_count = 0.0; break; + case DM_X12: x12_count = 0.0; break; + case DM_EDIFACT: edf_count = 0.0; break; + case DM_BASE256: b256_count = 0.0; break; + } + + for(sp = position; (sp < sourcelen) && (sp <= (position + 8)); sp++) { + + if(source[sp] <= 127) { reduced_char = source[sp]; } else { reduced_char = source[sp] - 127; } + + if((source[sp] >= '0') && (source[sp] <= '9')) { ascii_count += 0.5; } else { ascii_count += 1.0; } + if(source[sp] > 127) { ascii_count += 1.0; } + + done = 0; + if(reduced_char == ' ') { c40_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= '0') && (reduced_char <= '9')) { c40_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= 'A') && (reduced_char <= 'Z')) { c40_count += (2.0 / 3.0); done = 1; } + if(source[sp] > 127) { c40_count += (4.0 / 3.0); } + if(done == 0) { c40_count += (4.0 / 3.0); } + + done = 0; + if(reduced_char == ' ') { text_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= '0') && (reduced_char <= '9')) { text_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= 'a') && (reduced_char <= 'z')) { text_count += (2.0 / 3.0); done = 1; } + if(source[sp] > 127) { text_count += (4.0 / 3.0); } + if(done == 0) { text_count += (4.0 / 3.0); } + + if(isx12(source[sp])) { x12_count += (2.0 / 3.0); } else { x12_count += 4.0; } + + /* step (p) */ + done = 0; + if((source[sp] >= ' ') && (source[sp] <= '^')) { edf_count += (3.0 / 4.0); } else { edf_count += 6.0; } + if(gs1 && (source[sp] == '[')) { edf_count += 6.0; } + if(sp >= (sourcelen - 5)) { edf_count += 6.0; } /* MMmmm fudge! */ + + /* step (q) */ + if(gs1 && (source[sp] == '[')) { b256_count += 4.0; } else { b256_count += 1.0; } + + /*printf("lat a%.2f c%.2f t%.2f x%.2f e%.2f b%.2f\n", ascii_count, c40_count, text_count, x12_count, edf_count, b256_count);*/ + + } + + /* Round up all the counts to round numbers */ + + best_count = ascii_count; + best_scheme = DM_ASCII; + + if(b256_count <= best_count) { + best_count = b256_count; + best_scheme = DM_BASE256; + } + + if(edf_count <= best_count) { + best_count = edf_count; + best_scheme = DM_EDIFACT; + } + + if(text_count <= best_count) { + best_count = text_count; + best_scheme = DM_TEXT; + } + + if(x12_count <= best_count) { + best_count = x12_count; + best_scheme = DM_X12; + } + + if(c40_count <= best_count) { + best_count = c40_count; + best_scheme = DM_C40; + } + + return best_scheme; +} + +int dm200encode(unsigned char source[], unsigned char target[], int *last_mode) +{ + /* Encodes data using ASCII, C40, Text, X12, EDIFACT or Base 256 modes as appropriate */ + /* Supports encoding FNC1 in supporting systems */ + + int sp, tp, i, gs1; + int current_mode, next_mode; + int c40_buffer[6], c40_p; + int text_buffer[6], text_p; + int x12_buffer[6], x12_p; + int edifact_buffer[8], edifact_p; + int inputlen; + char *binary; + + + inputlen = ustrlen(source); + + binary = (char *)malloc(2 * inputlen); +// binary = (char *)QRcode_malloc(2 * inputlen); + memset(binary, 0x00, 2*inputlen); + + sp = 0; + tp = 0; + memset(c40_buffer, 0, 6); + c40_p = 0; + memset(text_buffer, 0, 6); + text_p = 0; + memset(x12_buffer, 0, 6); + x12_p = 0; + memset(edifact_buffer, 0, 8); + edifact_p = 0; + strcpy(binary, ""); + + /* step (a) */ + current_mode = DM_ASCII; + next_mode = DM_ASCII; + + gs1 = 0; + + if(gs1) { target[tp] = 232; tp++; concat(binary, " "); } /* FNC1 */ + + while (sp < inputlen) { + + current_mode = next_mode; + + /* step (b) - ASCII encodation */ + if(current_mode == DM_ASCII) { + next_mode = DM_ASCII; + + if(istwodigits(source, sp) && ((sp + 1) != inputlen)) { + target[tp] = (10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130; + tp++; concat(binary, " "); + sp += 2; + } else { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + + if(next_mode != DM_ASCII) { + switch(next_mode) { + case DM_C40: target[tp] = 230; tp++; concat(binary, " "); break; + case DM_TEXT: target[tp] = 239; tp++; concat(binary, " "); break; + case DM_X12: target[tp] = 238; tp++; concat(binary, " "); break; + case DM_EDIFACT: target[tp] = 240; tp++; concat(binary, " "); break; + case DM_BASE256: target[tp] = 231; tp++; concat(binary, " "); break; + } + } else { + if(source[sp] > 127) { + target[tp] = 235; + tp++; + target[tp] = (source[sp] - 128) + 1; + tp++; concat(binary, " "); + } else { + if(gs1 && (source[sp] == '[')) { + target[tp] = 232; /* FNC1 */ + } else { + target[tp] = source[sp] + 1; + } + tp++; + concat(binary, " "); + } + sp++; + } + } + + } + + /* step (c) C40 encodation */ + if(current_mode == DM_C40) { + int shift_set, value; + + next_mode = DM_C40; + if(c40_p == 0) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_C40) { + target[tp] = 254; tp++; concat(binary, " ");/* Unlatch */ + next_mode = DM_ASCII; + } else { + if(source[sp] > 127) { + c40_buffer[c40_p] = 1; c40_p++; + c40_buffer[c40_p] = 30; c40_p++; /* Upper Shift */ + shift_set = c40_shift[source[sp] - 128]; + value = c40_value[source[sp] - 128]; + } else { + shift_set = c40_shift[source[sp]]; + value = c40_value[source[sp]]; + } + + if(gs1 && (source[sp] == '[')) { + shift_set = 2; + value = 27; /* FNC1 */ + } + + if(shift_set != 0) { + c40_buffer[c40_p] = shift_set - 1; c40_p++; + } + c40_buffer[c40_p] = value; c40_p++; + + if(c40_p >= 3) { + int iv; + + iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + concat(binary, " "); + + c40_buffer[0] = c40_buffer[3]; + c40_buffer[1] = c40_buffer[4]; + c40_buffer[2] = c40_buffer[5]; + c40_buffer[3] = 0; + c40_buffer[4] = 0; + c40_buffer[5] = 0; + c40_p -= 3; + } + sp++; + } + } + + /* step (d) Text encodation */ + if(current_mode == DM_TEXT) { + int shift_set, value; + + next_mode = DM_TEXT; + if(text_p == 0) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_TEXT) { + target[tp] = 254; tp++; concat(binary, " ");/* Unlatch */ + next_mode = DM_ASCII; + + } else { + if(source[sp] > 127) { + text_buffer[text_p] = 1; text_p++; + text_buffer[text_p] = 30; text_p++; /* Upper Shift */ + shift_set = text_shift[source[sp] - 128]; + value = text_value[source[sp] - 128]; + } else { + shift_set = text_shift[source[sp]]; + value = text_value[source[sp]]; + } + + if(gs1 && (source[sp] == '[')) { + shift_set = 2; + value = 27; /* FNC1 */ + } + + if(shift_set != 0) { + text_buffer[text_p] = shift_set - 1; text_p++; + } + text_buffer[text_p] = value; text_p++; + + if(text_p >= 3) { + int iv; + + iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + concat(binary, " "); + + text_buffer[0] = text_buffer[3]; + text_buffer[1] = text_buffer[4]; + text_buffer[2] = text_buffer[5]; + text_buffer[3] = 0; + text_buffer[4] = 0; + text_buffer[5] = 0; + text_p -= 3; + } + sp++; + } + } + + /* step (e) X12 encodation */ + if(current_mode == DM_X12) { + int value = 0; + + next_mode = DM_X12; + if(text_p == 0) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_X12) { + target[tp] = 254; tp++; concat(binary, " ");/* Unlatch */ + } else { + if(source[sp] == 13) { value = 0; } + if(source[sp] == '*') { value = 1; } + if(source[sp] == '>') { value = 2; } + if(source[sp] == ' ') { value = 3; } + if((source[sp] >= '0') && (source[sp] <= '9')) { value = (source[sp] - '0') + 4; } + if((source[sp] >= 'A') && (source[sp] <= 'Z')) { value = (source[sp] - 'A') + 14; } + + x12_buffer[x12_p] = value; x12_p++; + + if(x12_p >= 3) { + int iv; + + iv = (1600 * x12_buffer[0]) + (40 * x12_buffer[1]) + (x12_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + concat(binary, " "); + + x12_buffer[0] = x12_buffer[3]; + x12_buffer[1] = x12_buffer[4]; + x12_buffer[2] = x12_buffer[5]; + x12_buffer[3] = 0; + x12_buffer[4] = 0; + x12_buffer[5] = 0; + x12_p -= 3; + } + sp++; + } + } + + /* step (f) EDIFACT encodation */ + if(current_mode == DM_EDIFACT) { + int value = 0; + + next_mode = DM_EDIFACT; + if(edifact_p == 3) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_EDIFACT) { + edifact_buffer[edifact_p] = 31; edifact_p++; + next_mode = DM_ASCII; + } else { + if((source[sp] >= '@') && (source[sp] <= '^')) { value = source[sp] - '@'; } + if((source[sp] >= ' ') && (source[sp] <= '?')) { value = source[sp]; } + + edifact_buffer[edifact_p] = value; edifact_p++; + sp++; + } + + if(edifact_p >= 4) { + target[tp] = (edifact_buffer[0] << 2) + ((edifact_buffer[1] & 0x30) >> 4); tp++; + target[tp] = ((edifact_buffer[1] & 0x0f) << 4) + ((edifact_buffer[2] & 0x3c) >> 2); tp++; + target[tp] = ((edifact_buffer[2] & 0x03) << 6) + edifact_buffer[3]; tp++; + concat(binary, " "); + + edifact_buffer[0] = edifact_buffer[4]; + edifact_buffer[1] = edifact_buffer[5]; + edifact_buffer[2] = edifact_buffer[6]; + edifact_buffer[3] = edifact_buffer[7]; + edifact_buffer[4] = 0; + edifact_buffer[5] = 0; + edifact_buffer[6] = 0; + edifact_buffer[7] = 0; + edifact_p -= 4; + } + } + + /* step (g) Base 256 encodation */ + if(current_mode == DM_BASE256) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + + if(next_mode == DM_BASE256) { + target[tp] = source[sp]; + tp++; + sp++; + concat(binary, "b"); + } else { + next_mode = DM_ASCII; + } + } + + if(tp > 1558) { + free(binary); + return 0; + } + + } /* while */ + + /* Empty buffers */ + if(c40_p == 2) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 2] + 1; tp++; + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + current_mode = DM_ASCII; + } + if(c40_p == 1) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + current_mode = DM_ASCII; + } + + if(text_p == 2) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 2] + 1; tp++; + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + current_mode = DM_ASCII; + } + if(text_p == 1) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + current_mode = DM_ASCII; + } + + if(x12_p == 2) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 2] + 1; tp++; + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + current_mode = DM_ASCII; + } + if(x12_p == 1) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + current_mode = DM_ASCII; + } + + /* Add length and randomising algorithm to b256 */ + i = 0; + while (i < tp) { + if(binary[i] == 'b') { + if((i == 0) || ((i != 0) && (binary[i - 1] != 'b'))) { + /* start of binary data */ + int binary_count; /* length of b256 data */ + + for(binary_count = 0; binary[binary_count + i] == 'b'; binary_count++); + + if(binary_count <= 249) { + dminsert(binary, i, 'b'); + insert_value(target, i, tp, binary_count); tp++; + } else { + dminsert(binary, i, 'b'); + dminsert(binary, i + 1, 'b'); + insert_value(target, i, tp, (binary_count / 250) + 249); tp++; + insert_value(target, i + 1, tp, binary_count % 250); tp++; + } + } + } + i++; + } + + for(i = 0; i < tp; i++) { + if(binary[i] == 'b') { + int prn, temp; + + prn = ((149 * (i + 1)) % 255) + 1; + temp = target[i] + prn; + if (temp <= 255) { target[i] = temp; } else { target[i] = temp - 256; } + } + } + +// QString s,s1; +// s=""; +// for(i = 0; i < tp; i++){ +// s1.sprintf("%02X ", target[i]); +// s+=s1; +// } + //qDebug()<<"bin:"< 0; i--) { + if(i == tail_length) { + target[tp] = 129; tp++; /* Pad */ + } else { + prn = ((149 * (tp + 1)) % 253) + 1; + temp = 129 + prn; + if(temp <= 254) { + target[tp] = temp; tp++; + } else { + target[tp] = temp - 254; tp++; + } + } + } +} + +unsigned char *iec16022ecc200(short *Wptr, short *Hptr, unsigned char *barcode, short* type) + +{ + int inputlen, i; + int binlen; + int symbolsize, optionsize, calcsize; + int taillength, error_number = 0; + int H, W, FH, FW, datablock, bytes, rsblock; + int last_mode; + unsigned char *grid = 0; + unsigned char *source; + +// unsigned char binary[100]; + unsigned char *binary; + binary = (unsigned char *)malloc(2000+10); +// binary = (unsigned char *)QRcode_malloc(2000+10); + +#ifdef WIN32 + printf("New Lib Routine !!! \n"); +#endif + + source = barcode; + + inputlen = ustrlen(source); + + binlen = dm200encode(barcode, binary, &last_mode); + + if(binlen == 0) { + free(binary); + return 0; + } + + calcsize = 29; + for(i = 29; i > -1; i--) { + if(matrixbytes[i] > binlen) { + calcsize = i; + } + } +#ifdef QTDEBUG + qDebug()<<"binlen"< 2) + { + *type = -1; + } + else + { + calcsize = 2; + } + }break; + case 2: + { + if(calcsize > 4) + { + *type = -1; + } + else + { + calcsize = 4; + } + }break; + case 3: + { + if(calcsize > 6) + { + *type = -1; + } + else + { + calcsize = 6; + } + }break; + case 4: + { + if(calcsize > 9) + { + *type = -1; + } + else + { + calcsize = 9; + } + }break; + case 5: + { + if(calcsize > 11) + { + *type = -1; + } + else + { + calcsize = 11; + } + }break; + case 6: + { + if(calcsize > 14) + { + *type = -1; + } + else + { + calcsize = 14; + } + }break; + } + } + else + { + switch(calcsize) { + case 2: + case 4: + case 6: + case 9: + case 11: + case 14: + calcsize++; + } + } + + //optionsize = -1; + optionsize = 10; + + symbolsize = optionsize; + + if(calcsize <= optionsize) { + symbolsize = optionsize; + } else + { + symbolsize = calcsize; + } + +#ifdef QTDEBUG + + qDebug()<<"symbolsize ="< 7 && (binary[(v >> 3) - 1] & (1 << (v & 7))))) + grid[(1 + y + 2 * (y / (FH - 2))) * W + 1 + x + 2 * (x / (FW - 2))] = 1; + } + //fprintf (stderr, "\n"); + } + + for(y = H - 1; y >= 0; y--) { + int x; + for(x = 0; x < W; x++) { + if(grid[W * y + x]) + { +#ifdef WIN32 + printf("X"); +#endif + } +#ifdef WIN32 + else + printf(" "); +#endif + + } +#ifdef WIN32 + printf("\n"); +#endif + } + + free(places); + } + *Wptr = (short)W; + *Hptr = (short)H; + free(binary); + return grid; +} + + + diff --git a/Matrix/dm200.h b/Matrix/dm200.h new file mode 100644 index 0000000..1a7f1e2 --- /dev/null +++ b/Matrix/dm200.h @@ -0,0 +1,162 @@ +/* dm200.h - Handles Data Matrix ECC 200 */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "common.h" + +#ifndef __IEC16022ECC200_H +#define __IEC16022ECC200_H +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +//void MatrixEnCode(unsigned char *intext); +//extern int data_matrix_200(struct zint_symbol *symbol, unsigned char source[]); +extern unsigned char *iec16022ecc200(short *Wptr, short *Hptr, unsigned char *barcode, short* type); +void Draw_Matrix(unsigned char *buffer); +//char DataMatrixdDrawImg(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize); +//char DataMatrixdDrawImg(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize,QImage *pImg); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#define MAXBARCODE 3116 + +#define DM_ASCII 1 +#define DM_C40 2 +#define DM_TEXT 3 +#define DM_X12 4 +#define DM_EDIFACT 5 +#define DM_BASE256 6 + + +static int c40_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; + +static int c40_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 22,23,24,25,26,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 }; + +static int text_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3 }; + +static int text_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26, + 22,23,24,25,26,0,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,27,28,29,30,31 }; + +static int intsymbol[] = { + 0,1,3,5,7,8,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,2,4,6,9,11,14 }; + +static int matrixH[] = { + 10, 12, 8, 14, 8, 16, 12, 18, 20, 12, 22, 16, 24, 26, 16, 32, 36, 40, 44, 48, + 52, 64, 72, 80, 88, 96, 104, 120, 132, 144 }; + +static int matrixW[] = { + 10, 12, 18, 14, 32, 16, 26, 18, 20, 36, 22, 36, 24, 26, 48, 32, 36, 40, 44, + 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144 }; + +static int matrixFH[] = { + 10, 12, 8, 14, 8, 16, 12, 18, 20, 12, 22, 16, 24, 26, 16, 16, 18, 20, 22, 24, + 26, 16, 18, 20, 22, 24, 26, 20, 22, 24 }; + +static int matrixFW[] = { + 10, 12, 18, 14, 16, 16, 26, 18, 20, 18, 22, 18, 24, 26, 24, 16, 18, 20, 22, + 24, 26, 16, 18, 20, 22, 24, 26, 20, 22, 24 }; + +static int matrixbytes[] = { + 3, 5, 5, 8, 10, 12, 16, 18, 22, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, + 174, 204, 280, 368, 456, 576, 696, 816, 1050, 1304, 1558 }; + +static int matrixdatablock[] = { + 3, 5, 5, 8, 10, 12, 16, 18, 22, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, + 174, 102, 140, 92, 114, 144, 174, 136, 175, 163, 156 }; + +static int matrixrsblock[] = { + 5, 7, 7, 10, 11, 12, 14, 14, 18, 18, 20, 24, 24, 28, 28, 36, 42, 48, 56, 68, + 42, 56, 36, 48, 56, 68, 56, 68, 62, 62 }; +/* + +static int c40_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; + +static int c40_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 22,23,24,25,26,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 }; + +static int text_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3 }; + +static int text_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26, + 22,23,24,25,26,0,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,27,28,29,30,31 }; + +static int intsymbol[] = { + 0,1,3,5,7,8,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,2,4,6,9,11,14 }; + +static int matrixH[] = { + 10, 12, 8, 14, 8, 16, 12, 18, 20, 12, 22, 16, 24, 26, 16, 32, 36, 40, 44, 48, + 52, 64, 72, 80, 88, 96, 104, 120, 132, 144 }; + +static int matrixW[] = { + 10, 12, 18, 14, 32, 16, 26, 18, 20, 36, 22, 36, 24, 26, 48, 32, 36, 40, 44, + 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144 }; + +static int matrixFH[] = { + 10, 12, 8, 14, 8, 16, 12, 18, 20, 12, 22, 16, 24, 26, 16, 16, 18, 20, 22, 24, + 26, 16, 18, 20, 22, 24, 26, 20, 22, 24 }; + +static int matrixFW[] = { + 10, 12, 18, 14, 16, 16, 26, 18, 20, 18, 22, 18, 24, 26, 24, 16, 18, 20, 22, + 24, 26, 16, 18, 20, 22, 24, 26, 20, 22, 24 }; + +static int matrixbytes[] = { + 3, 5, 5, 8, 10, 12, 16, 18, 22, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, + 174, 204, 280, 368, 456, 576, 696, 816, 1050, 1304, 1558 }; + +static int matrixdatablock[] = { + 3, 5, 5, 8, 10, 12, 16, 18, 22, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, + 174, 102, 140, 92, 114, 144, 174, 136, 175, 163, 156 }; + +static int matrixrsblock[] = { + 5, 7, 7, 10, 11, 12, 14, 14, 18, 18, 20, 24, 24, 28, 28, 36, 42, 48, 56, 68, + 42, 56, 36, 48, 56, 68, 56, 68, 62, 62 }; + + */ +#endif /* __IEC16022ECC200_H */ diff --git a/Matrix/drawmatrix.cpp b/Matrix/drawmatrix.cpp new file mode 100644 index 0000000..b074d7f --- /dev/null +++ b/Matrix/drawmatrix.cpp @@ -0,0 +1,68 @@ +#include +#include +// +// U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize +#include "dm200.h" + +#include "QImage" +#include "QDebug" + +#define MAX_WIDTH_BYTE 48 // 384/8 + +char DataMatrixdDraw(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize); +//char DataMatrixdDrawImg(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize,QImage *pImg); + +void Draw_Matrix(unsigned char *buffer) +{ + U16 sColumns, sRows; + U08 *Grid; + sColumns = sRows = 0; + Grid = 0; + sColumns = sRows = 0; + short sizeType = 0; + Grid = iec16022ecc200((short*)&sRows, (short*)&sColumns, buffer, &sizeType); + DataMatrixdDraw(Grid,sRows,sColumns,2); +} + +char DataMatrixdDraw(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize) +{ + int Size=MSize; + int w = cColumns*Size; + int h = cRows*Size; + //qDebug()<fill(0x00ffffff); + /* data */ + int margin=0; + U08 *p = OutBuff; + int ypos=0;//margin * Size; + int xpos=0; + int x,y,xx,yy,bit; + for(y=0; ysetPixel(xpos,h-1-(ypos+yy),0xff000000); + } + } + xpos++; + } + p++; + bit--; + if(bit < 0) { + //q++; + bit = 7; + } + } + ypos+=Size; + } + img->save("Myqr.bmp"); + return 0; +} + diff --git a/Matrix/reedsol.cpp b/Matrix/reedsol.cpp new file mode 100644 index 0000000..76e37de --- /dev/null +++ b/Matrix/reedsol.cpp @@ -0,0 +1,173 @@ +/** + * + * This is a simple Reed-Solomon encoder + * (C) Cliff Hones 2004 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +// It is not written with high efficiency in mind, so is probably +// not suitable for real-time encoding. The aim was to keep it +// simple, general and clear. +// +// + +// Usage: +// First call rs_init_gf(poly) to set up the Galois Field parameters. +// Then call rs_init_code(size, index) to set the encoding size +// Then call rs_encode(datasize, data, out) to encode the data. +// +// These can be called repeatedly as required - but note that +// rs_init_code must be called following any rs_init_gf call. +// +// If the parameters are fixed, some of the statics below can be +// replaced with constants in the obvious way, and additionally +// malloc/free can be avoided by using static arrays of a suitable +// size. + +#include // only needed for debug (main) +#include // only needed for malloc/free +#include "reedsol.h" + +//#pragma section data begin +//#pragma section _sdram +int gfpoly; +int symsize; // in bits +int logmod; // 2**symsize - 1 +int rlen; + +int *log = NULL, *alog = NULL, *rspoly = NULL; + +void rs_init_gf(int poly) +{ + int m, b, p, v; + + // Return storage from previous setup + if (log) { + free(log); + if (alog)free(alog); + if (rspoly)free(rspoly); + rspoly = NULL; + log =NULL; + alog = NULL; + } + + // Find the top bit, and hence the symbol size + for (b = 1, m = 0; b <= poly; b <<= 1) + m++; + b >>= 1; + m--; + gfpoly = poly; + symsize = m; + + // Calculate the log/alog tables + logmod = (1 << m) - 1; + log = (int *)malloc(sizeof(int) * (logmod + 1)); + alog = (int *)malloc(sizeof(int) * logmod); + +// log = (int *)QRcode_malloc(sizeof(int) * (logmod + 1)); +// alog = (int *)QRcode_malloc(sizeof(int) * logmod); + + for (p = 1, v = 0; v < logmod; v++) { + alog[v] = p; + log[p] = v; + p <<= 1; + if (p & b) + p ^= poly; + } +} + +// rs_init_code(nsym, index) initialises the Reed-Solomon encoder +// nsym is the number of symbols to be generated (to be appended +// to the input data). index is usually 1 - it is the index of +// the constant in the first term (i) of the RS generator polynomial: +// (x + 2**i)*(x + 2**(i+1))*... [nsym terms] +// For ECC200, index is 1. + +void rs_init_code(int nsym, int index) +{ + int i, k; + + if (rspoly) + free(rspoly); + rspoly = (int *)malloc(sizeof(int) * (nsym + 1)); + //rspoly = (int *)QRcode_malloc(sizeof(int) * (nsym + 1)); + + rlen = nsym; + + rspoly[0] = 1; + for (i = 1; i <= nsym; i++) { + rspoly[i] = 1; + for (k = i - 1; k > 0; k--) { + if (rspoly[k]) + rspoly[k] = alog[(log[rspoly[k]] + index) % logmod]; + rspoly[k] ^= rspoly[k - 1]; + } + rspoly[0] = alog[(log[rspoly[0]] + index) % logmod]; + index++; + } +} + +void rs_encode(int len, unsigned char *data, unsigned char *res) +{ + int i, k, m; + for (i = 0; i < rlen; i++) + res[i] = 0; + for (i = 0; i < len; i++) { + m = res[rlen - 1] ^ data[i]; + for (k = rlen - 1; k > 0; k--) { + if (m && rspoly[k]) + res[k] = res[k - 1] ^ alog[(log[m] + log[rspoly[k]]) % logmod]; + else + res[k] = res[k - 1]; + } + if (m && rspoly[0]) + res[0] = alog[(log[m] + log[rspoly[0]]) % logmod]; + else + res[0] = 0; + } +} + +void rs_encode_long(int len, unsigned int *data, unsigned int *res) +{ /* The same as above but for larger bitlengths - Aztec code compatible */ + int i, k, m; + for (i = 0; i < rlen; i++) + res[i] = 0; + for (i = 0; i < len; i++) { + m = res[rlen - 1] ^ data[i]; + for (k = rlen - 1; k > 0; k--) { + if (m && rspoly[k]) + res[k] = res[k - 1] ^ alog[(log[m] + log[rspoly[k]]) % logmod]; + else + res[k] = res[k - 1]; + } + + if (m && rspoly[0]) + res[0] = alog[(log[m] + log[rspoly[0]]) % logmod]; + else + res[0] = 0; + } +} + +void rs_free(void) +{ /* Free memory */ + free(log); + free(alog); + free(rspoly); + log =NULL; + alog = NULL; + rspoly = NULL; +} diff --git a/Matrix/reedsol.h b/Matrix/reedsol.h new file mode 100644 index 0000000..db4b2bc --- /dev/null +++ b/Matrix/reedsol.h @@ -0,0 +1,40 @@ +/** + * + * This is a simple Reed-Solomon encoder + * (C) Cliff Hones 2004 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __REEDSOL_H +#define __REEDSOL_H + +/*#ifdef __cplusplus +extern "C" +{ +#endif */ /* __cplusplus */ + +extern void rs_init_gf(int poly); +extern void rs_init_code(int nsym, int index); +extern void rs_encode(int len, unsigned char *data, unsigned char *res); +extern void rs_encode_long(int len, unsigned int *data, unsigned int *res); +extern void rs_free(void); + +/*#ifdef __cplusplus +} +#endif */ /* __cplusplus */ + +#endif /* __REEDSOL_H */ diff --git a/Matrix/zint.h b/Matrix/zint.h new file mode 100644 index 0000000..3f8e2a3 --- /dev/null +++ b/Matrix/zint.h @@ -0,0 +1,209 @@ +/* zint.h - definitions for libzint + + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef ZINT_H +#define ZINT_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +//#pragma section data begin +struct zint_symbol { + int symbology; + int height; + int whitespace_width; + int border_width; + int output_options; + char fgcolour[10]; + char bgcolour[10]; + char outfile[256]; + float scale; + int option_1; + int option_2; + int option_3; + int show_hrt; + int input_mode; + unsigned char text[128]; + int rows; + int width; + char primary[128]; + unsigned char encoded_data[178][143]; + int row_height[178]; /* Largest symbol is 177x177 QR Code */ + char errtxt[100]; + char *bitmap; + int bitmap_width; + int bitmap_height; +}; + +//#pragma section data end + +/* Tbarcode 7 codes */ +#define BARCODE_CODE11 1 +#define BARCODE_C25MATRIX 2 +#define BARCODE_C25INTER 3 +#define BARCODE_C25IATA 4 +#define BARCODE_C25LOGIC 6 +#define BARCODE_C25IND 7 +//#define BARCODE_CODE39 8 +#define BARCODE_EXCODE39 9 +#define BARCODE_EANX 13 +//#define BARCODE_EAN128 16 +//#define BARCODE_CODABAR 18 +//#define BARCODE_CODE128 20 +#define BARCODE_DPLEIT 21 +#define BARCODE_DPIDENT 22 +#define BARCODE_CODE16K 23 +#define BARCODE_CODE49 24 +//#define BARCODE_CODE93 25 +#define BARCODE_FLAT 28 +#define BARCODE_RSS14 29 +#define BARCODE_RSS_LTD 30 +#define BARCODE_RSS_EXP 31 +#define BARCODE_TELEPEN 32 +#define BARCODE_UPCA 34 +#define BARCODE_UPCE 37 +//#define BARCODE_POSTNET 40 +#define BARCODE_MSI_PLESSEY 47 +#define BARCODE_FIM 49 +#define BARCODE_LOGMARS 50 +#define BARCODE_PHARMA 51 +#define BARCODE_PZN 52 +#define BARCODE_PHARMA_TWO 53 +#define BARCODE_PDF417 55 +#define BARCODE_PDF417TRUNC 56 +#define BARCODE_MAXICODE 57 +#define BARCODE_QRCODE 58 +#define BARCODE_CODE128B 60 +#define BARCODE_AUSPOST 63 +#define BARCODE_AUSREPLY 66 +#define BARCODE_AUSROUTE 67 +#define BARCODE_AUSREDIRECT 68 +#define BARCODE_ISBNX 69 +#define BARCODE_RM4SCC 70 +#define BARCODE_DATAMATRIX 71 +#define BARCODE_EAN14 72 +#define BARCODE_CODABLOCKF 74 +#define BARCODE_NVE18 75 +#define BARCODE_JAPANPOST 76 +#define BARCODE_KOREAPOST 77 +#define BARCODE_RSS14STACK 79 +#define BARCODE_RSS14STACK_OMNI 80 +#define BARCODE_RSS_EXPSTACK 81 +//#define BARCODE_PLANET 82 +#define BARCODE_MICROPDF417 84 +#define BARCODE_ONECODE 85 +#define BARCODE_PLESSEY 86 + +/* Tbarcode 8 codes */ +#define BARCODE_TELEPEN_NUM 87 +#define BARCODE_ITF14 89 +#define BARCODE_KIX 90 +#define BARCODE_AZTEC 92 +#define BARCODE_DAFT 93 +#define BARCODE_MICROQR 97 + +/* Tbarcode 9 codes */ +#define BARCODE_HIBC_128 98 +#define BARCODE_HIBC_39 99 +#define BARCODE_HIBC_DM 102 +#define BARCODE_HIBC_QR 104 +#define BARCODE_HIBC_PDF 106 +#define BARCODE_HIBC_MICPDF 108 +#define BARCODE_HIBC_BLOCKF 110 +#define BARCODE_HIBC_AZTEC 112 + +/* Zint specific */ +#define BARCODE_AZRUNE 128 +#define BARCODE_CODE32 129 +#define BARCODE_EANX_CC 130 +#define BARCODE_EAN128_CC 131 +#define BARCODE_RSS14_CC 132 +#define BARCODE_RSS_LTD_CC 133 +#define BARCODE_RSS_EXP_CC 134 +#define BARCODE_UPCA_CC 135 +#define BARCODE_UPCE_CC 136 +#define BARCODE_RSS14STACK_CC 137 +#define BARCODE_RSS14_OMNI_CC 138 +#define BARCODE_RSS_EXPSTACK_CC 139 +#define BARCODE_CHANNEL 140 +#define BARCODE_CODEONE 141 +#define BARCODE_GRIDMATRIX 142 + +#define BARCODE_NO_ASCII 1 +#define BARCODE_BIND 2 +#define BARCODE_BOX 4 +#define BARCODE_STDOUT 8 +#define READER_INIT 16 + +#define DATA_MODE 0 +#define UNICODE_MODE 1 +#define GS1_MODE 2 +#define KANJI_MODE 3 +#define SJIS_MODE 4 + +#define DM_SQUARE 100 + +#define WARN_INVALID_OPTION 2 +#define ERROR_TOO_LONG 5 +#define ERROR_INVALID_DATA 6 +#define ERROR_INVALID_CHECK 7 +#define ERROR_INVALID_OPTION 8 +#define ERROR_ENCODING_PROBLEM 9 +#define ERROR_FILE_ACCESS 10 +#define ERROR_MEMORY 11 + +#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_MSC_VER) +# if defined (DLL_EXPORT) || defined(PIC) || defined(_USRDLL) +# define ZINT_EXTERN __declspec(dllexport) +# elif defined(ZINT_DLL) +# define ZINT_EXTERN __declspec(dllimport) +# else +# define ZINT_EXTERN extern +# endif +#else +# define ZINT_EXTERN extern +#endif + +ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void); +ZINT_EXTERN void ZBarcode_Clear(struct zint_symbol *symbol); +ZINT_EXTERN void ZBarcode_Delete(struct zint_symbol *symbol); + +ZINT_EXTERN int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *input, int length); +ZINT_EXTERN int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename); +ZINT_EXTERN int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, int rotate_angle); + +ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, int rotate_angle); + +ZINT_EXTERN int ZBarcode_ValidID(int symbol_id); + +/* Depreciated */ +ZINT_EXTERN int ZBarcode_Print_Rotated(struct zint_symbol *symbol, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_and_Print_Rotated(struct zint_symbol *symbol, unsigned char *input, int rotate_angle); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* ZINT_H */ diff --git a/MemDisplayAndEdit.cpp b/MemDisplayAndEdit.cpp new file mode 100644 index 0000000..750da8e --- /dev/null +++ b/MemDisplayAndEdit.cpp @@ -0,0 +1,148 @@ +#include "MemDisplayAndEdit.h" +#include "ui_memdisplayandedit.h" +#include "QLatin1Char" +MemDisplayAndEdit::MemDisplayAndEdit(QWidget *parent) : + QWidget(parent), + ui(new Ui::MemDisplayAndEdit) +{ + ui->setupUi(this); + for(int i = 0; i < MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL; i++){ + memLineEdit[i] = new QLineEdit(this); + //memLineEdit[i]->setAccessibleName(QString::number(i)); + memLineEdit[i]->setEnabled(false); + ui->gridLayoutMem->addWidget(memLineEdit[i],(i/MEM_GRID_MAX_COL) + 1,(i%MEM_GRID_MAX_COL) + 1); + connect(memLineEdit[i],SIGNAL(editingFinished ()),this,SLOT(onLineEditEditingFinished())); + } + for(int i = 0; i < MEM_GRID_MAX_ROW; i++){ + rowLabel[i] = new QLabel(this); + ui->gridLayoutMem->addWidget(rowLabel[i],i + 1,0); + } + editFlag = false; + writeMemMode = false; + ui->radioButtonRead->setChecked(!writeMemMode); + ui->radioButtonWrite->setChecked(writeMemMode); + writeMemBaseAddr = 0; + readMemBaseAddr = 0; +} + +MemDisplayAndEdit::~MemDisplayAndEdit() +{ + delete ui; + + +} + +void MemDisplayAndEdit::updateSysStatusToUI(void){ + if(sysPara && !editFlag){ + for(int i = 0; i < MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL; i++){ + if(writeMemMode) + memLineEdit[i]->setText(QString("%1").arg(sysPara->devOp->memWrMap[(writeMemBaseAddr + i)&MAX_WR_MEM_SIZE_MASK],2,16,QLatin1Char('0'))); + else + memLineEdit[i]->setText(QString("%1").arg(sysPara->devOp->memRdMap[(readMemBaseAddr + i)&MAX_RD_MEM_SIZE_MASK],2,16,QLatin1Char('0'))); + } + for(int i = 0; i < MEM_GRID_MAX_ROW; i++){ + if(writeMemMode) + rowLabel[i]->setText(QString("%1").arg((writeMemBaseAddr + i*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK,4,16,QLatin1Char('0'))); + else + rowLabel[i]->setText(QString("%1").arg((readMemBaseAddr + i*MEM_GRID_MAX_COL)&MAX_RD_MEM_SIZE_MASK,4,16,QLatin1Char('0'))); + } + } +} + + +void MemDisplayAndEdit::on_comboBoxBaseAddress_activated(const QString &str) +{ + bool ok; + if(writeMemMode){ + writeMemBaseAddr = str.toInt(&ok,0); + } + else + readMemBaseAddr = str.toInt(&ok,0); +} + +void MemDisplayAndEdit::on_radioButtonRead_pressed() +{ + writeMemMode = false; + if(sysPara){ + ui->pushButtonEdit->setEnabled(sysPara->devOp->fpgaDevOpenFlag?false:true); + } + if(editFlag) + on_pushButtonEdit_pressed(); + ui->comboBoxBaseAddress->setEditText(QString("0x%1").arg(readMemBaseAddr,4,16,QLatin1Char('0'))); +} + +void MemDisplayAndEdit::on_radioButtonWrite_pressed() +{ + writeMemMode = true; + ui->pushButtonEdit->setEnabled(true); + if(editFlag) + on_pushButtonEdit_pressed(); + ui->comboBoxBaseAddress->setEditText(QString("0x%1").arg(writeMemBaseAddr,4,16,QLatin1Char('0'))); +} + +void MemDisplayAndEdit::on_pushButtonEdit_pressed() +{ + editFlag = !editFlag; + for(int i = 0; i < MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL; i++){ + memLineEdit[i]->setEnabled(editFlag); + } + ui->pushButtonEdit->setText(editFlag?tr("完成"):tr("编辑")); +} + +void MemDisplayAndEdit::on_pushButtonLastPage_pressed() +{ + if(writeMemMode){ + writeMemBaseAddr = (writeMemBaseAddr - MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK; + } + else + readMemBaseAddr = (readMemBaseAddr - MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK; +} + +void MemDisplayAndEdit::on_pushButtonNextPage_pressed() +{ + if(writeMemMode){ + writeMemBaseAddr = (writeMemBaseAddr + MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK; + } + else + readMemBaseAddr = (readMemBaseAddr + MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_RD_MEM_SIZE_MASK; +} + +void MemDisplayAndEdit::onLineEditEditingFinished(){ + int val,addr; + bool ok; + QLineEdit * edit = qobject_cast(sender()); + QString name ="" ;// edit->accessibleName(); + val = edit->text().toInt(&ok,16); + if(sysPara){ + if(writeMemMode){ + addr = writeMemBaseAddr + name.toInt(&ok); + sysPara->devOp->fpgaWrD(addr,(unsigned int )val,1); + } + else { + if(!sysPara->devOp->fpgaDevOpenFlag){ + addr = readMemBaseAddr + name.toInt(&ok); + sysPara->devOp->memRdMap[(addr)&MAX_RD_MEM_SIZE_MASK] = (unsigned char)val; + } + } + } + +} + + + + +void MemDisplayAndEdit::on_lineEditDec_editingFinished() +{ + bool ok; + QLineEdit * edit = qobject_cast(sender()); + unsigned int val = edit->text().toUInt(&ok,10); + ui->lineEditHex->setText(QString("%1").arg(val,0,16)); +} + +void MemDisplayAndEdit::on_lineEditHex_editingFinished() +{ + bool ok; + QLineEdit * edit = qobject_cast(sender()); + unsigned int val = edit->text().toUInt(&ok,16); + ui->lineEditDec->setText(QString("%1").arg(val,0,10)); +} diff --git a/MemDisplayAndEdit.h b/MemDisplayAndEdit.h new file mode 100644 index 0000000..20f8de2 --- /dev/null +++ b/MemDisplayAndEdit.h @@ -0,0 +1,56 @@ +#ifndef MEMDISPLAYANDEDIT_H +#define MEMDISPLAYANDEDIT_H + +#include +#include +#include +#include +#define MEM_GRID_MAX_ROW 5 +#define MEM_GRID_MAX_COL 16 +namespace Ui { +class MemDisplayAndEdit; +} + +class MemDisplayAndEdit : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit MemDisplayAndEdit(QWidget *parent = 0); + ~MemDisplayAndEdit(); + + void updateSysStatusToUI(void); + +private slots: + void on_comboBoxBaseAddress_activated(const QString &arg1); + + void on_radioButtonRead_pressed(); + + void on_radioButtonWrite_pressed(); + + void on_pushButtonEdit_pressed(); + + void on_pushButtonLastPage_pressed(); + + void on_pushButtonNextPage_pressed(); + void onLineEditEditingFinished(); + + + void on_lineEditDec_editingFinished(); + + void on_lineEditHex_editingFinished(); + +private: + Ui::MemDisplayAndEdit *ui; + + QLineEdit *memLineEdit[MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL]; + QLabel *rowLabel[MEM_GRID_MAX_ROW]; + + bool editFlag; //是否当前处于编辑模式 + bool writeMemMode; //是否当前处于写地址模式 + int writeMemBaseAddr; + int readMemBaseAddr; + +}; + +#endif // MEMDISPLAYANDEDIT_H diff --git a/MyFileDialog.cpp b/MyFileDialog.cpp new file mode 100644 index 0000000..503d52c --- /dev/null +++ b/MyFileDialog.cpp @@ -0,0 +1,57 @@ +/* + * MyFileDialog.cpp + * + * Created on: Jul 14, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#include "MyFileDialog.h" +#include "SysPara.h" +#include +#include +#include +MyFileDialog::MyFileDialog(QWidget *parent):QFileDialog(parent){ + setFileMode(QFileDialog::AnyFile); + //setLabelText(QFileDialog::LookIn,tr("文件夹")); +// setLabelText(QFileDialog::FileName,tr("文件名")); +// setLabelText(QFileDialog::FileType,tr("文件类型")); + setLabelText(QFileDialog::Accept,tr("确定")); +// setLabelText(QFileDialog::Reject,tr("取消")); + setViewMode(QFileDialog::Detail); + setOption(QFileDialog::ReadOnly,true); + //setOption(QFileDialog::DontUseNativeDialog,true); + + QList urls; + urls << QUrl::fromLocalFile(DOC_ROOT_DIR) ;//<< QUrl::fromLocalFile(UDISK_DOC_ROOT_DIR) ; + setSidebarUrls (urls ); + this->setFixedSize(this->geometry().width(),this->geometry().height()); +} + +MyFileDialog::~MyFileDialog(){ + +} + +void MyFileDialog::showFileDialog(QString title,QString dir,QString filter){ + setNameFilter(filter); + setDirectory (dir); + setWindowTitle(title); + //autoCompleteFileName("dfdfs"); + + setViewMode(QFileDialog::Detail); + //setOption(QFileDialog::ReadOnly,true); + //setOption(QFileDialog::DontUseSheet,true); + //setOption(QFileDialog::HideNameFilterDetails,true); + //setResolveSymlinks(0); + if(isMinimized()){ + setWindowState(Qt::WindowMaximized); + } + show(); + QWidget *widget = focusWidget () ; + if(widget){ + widget->clearFocus(); //默认不要弹出输入法 + } + +} diff --git a/MyFileDialog.h b/MyFileDialog.h new file mode 100644 index 0000000..37f45c7 --- /dev/null +++ b/MyFileDialog.h @@ -0,0 +1,28 @@ +/* + * MyFileDialog.h + * + * Created on: Jul 14, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef MYFILEDIALOG_H_ +#define MYFILEDIALOG_H_ + + +#include + +class MyFileDialog:public QFileDialog{ + + Q_OBJECT + +public: + MyFileDialog(QWidget *parent = 0); + ~MyFileDialog(); + + void showFileDialog(QString title,QString filter,QString dir); +}; + +#endif /* MYFILEDIALOG_H_ */ diff --git a/MyInputMethod.cpp b/MyInputMethod.cpp new file mode 100644 index 0000000..de1b123 --- /dev/null +++ b/MyInputMethod.cpp @@ -0,0 +1,134 @@ +/* + * MyInputMethod.cpp + * + * Created on: Jun 23, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + + +#include "MyInputMethod.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "Public.h" +#include +#include + +MyInputMethod::MyInputMethod(QWidget *parent){ + InputMethod *input = new InputMethod(this,parent); + //QString filename = "WINPY_utf8.txt"; + //qDebug()<<"File1:MyInputMethod";//; + QString filename = Public::readLanguageType(); + //qDebug()<<"File2:"<initInputMethod(filename); + //qDebug()<<"File3:"<initInputMethod(filename); + //qDebug()<<"SetInputFile:"<sendCommitString(str); +#endif +} + +void MyInputMethod::updateHandler ( int type ){ + QWidget *widget = QApplication::focusWidget(); + +#ifndef Q_OS_WIN32 + switch(type){ + case QWSInputMethod::Update: + case QWSInputMethod::FocusIn: + if(widget && dynamic_cast(widget)){ + if(digitalInput->isHidden()){ + QRect rec = QApplication::desktop()->screenGeometry(); + QPoint point = widget->mapToGlobal (QPoint(0,0)); //全局坐标 + QRect myRec = digitalInput->geometry(); + digitalInput->setGeometry((point.x() > rec.width()/2)?(point.x() - myRec.width() - 20):(point.x() + 20), + (point.y() > rec.height()/2)?(point.y() - myRec.height() - 20):(point.y() + 20), + myRec.width(),myRec.height()); + digitalInput->show(); + } + } + else { + if(inputMethod->isHidden()){ + //QCursor cursor(Qt::PointingHandCursor); + //inputMethod->setCursor(cursor); + QRect rec = QApplication::desktop()->screenGeometry(); + QRect myRec = inputMethod->geometry(); + if(widget){ + QPoint point = widget->mapToGlobal (QPoint(0,0)); //全局坐标 + if(point.y() < rec.height()/2) /*如果组件在上,则将输入法放在上面,否则放在下面*/ + inputMethod->setGeometry(0,rec.height() - myRec.height(),myRec.width(),myRec.height()); +// inputMethod->setGeometry(0,rec.height() - myRec.height()-12,myRec.width(),myRec.height()); + else +// inputMethod->setGeometry(0,0,myRec.width(),myRec.height()); + inputMethod->setGeometry(0,30,myRec.width(),myRec.height()); + inputMethod->show(); + } + } + } + break; + case QWSInputMethod::FocusOut: + inputMethod->hide(); + digitalInput->hide(); + inputMethod->onHiden(); + break; + } +#endif + +} + +void MyInputMethod::switchBangalInput(bool flag){ + inputMethod->switchKeyBoardBengalDisply(flag); +} + + #ifdef EnableArabic +void MyInputMethod::getArabicFlag(bool flag){ + inputMethod->setArabicDisplay(flag); +} + +void MyInputMethod::getArabicPage(int page){ + emit selectArabicPage(page); +} + +void MyInputMethod::getEnglishOrAarbic(bool flag){ + emit switchEnglishOrArabic(flag); + } + + void MyInputMethod::switchArabicFlag(bool flag){ + inputMethod->setSwitchArabicFlag(flag); + } +#endif diff --git a/MyInputMethod.h b/MyInputMethod.h new file mode 100644 index 0000000..8b46f45 --- /dev/null +++ b/MyInputMethod.h @@ -0,0 +1,58 @@ +/* + * MyInputMethod.h + * + * Created on: Jun 23, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef MYINPUTMETHOD_H_ +#define MYINPUTMETHOD_H_ + +#include "InputMethod.h" +#include "DigitalInput.h" + +#ifndef Q_OS_WIN32 +#include +#include +#include "myinclude.h" +class MyInputMethod:public QWSInputMethod +{ + Q_OBJECT +#else +class MyInputMethod +{ +#endif + +public: + MyInputMethod(QWidget *parent = 0); + ~MyInputMethod(); + + void updateHandler ( int type ); + void sendString(QString &str); + void SetInputFile(QString filename="WINPY_utf8.txt"); + InputMethod* getInputMethod(); +#ifdef EnableArabic + void getArabicPage(int page); + void getEnglishOrAarbic(bool flag); +#endif +private slots: + void switchBangalInput(bool); + +#ifdef EnableArabic +public slots: + void getArabicFlag(bool); + void switchArabicFlag(bool flag); + +signals: + void selectArabicPage(int); + void switchEnglishOrArabic(bool); +#endif +private: + InputMethod *inputMethod; + DigitalInput *digitalInput; +}; + +#endif /* MYINPUTMETHOD_H_ */ diff --git a/MyTextEdit.cpp b/MyTextEdit.cpp new file mode 100644 index 0000000..92a0bd7 --- /dev/null +++ b/MyTextEdit.cpp @@ -0,0 +1,144 @@ +/* + * MyTextEdit.cpp + * + * Created on: Aug 7, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + + + + +#include +#include "SysPara.h" +#include +#include +#include +#include +#include +#include +#include + +MyTextEdit::MyTextEdit(QWidget *parent):QTextEdit(parent){ + + this->document()->setDocumentMargin(0); +// QTextDocument *doc = this->document(); //获取文档对象 + +// QTextFrame *rootFrame = doc->rootFrame(); //获取根框架 + +// QTextFrameFormat frameFormat; //创建框架格式 + +// frameFormat.setBorderBrush(Qt::red); //设置边界颜色 + +// frameFormat.setBorder(0); //设置边界宽度 + +// rootFrame->setFrameFormat(frameFormat); //给框架使用格式 + + + //this->setTextInteractionFlags(Qt::TextEditable);//不能选中 + this->setLineWrapMode(QTextEdit::NoWrap); + for(QTextBlock textBlock = this->document()->begin(); + textBlock != this->document()->end(); + textBlock = textBlock.next()){ + QTextBlockFormat textBlockFormat = textBlock.blockFormat(); + textBlockFormat.setBottomMargin(0); + QTextCursor textCursor = this->textCursor(); + textCursor.setBlockFormat(textBlockFormat); + this->setTextCursor(textCursor); + } +} + + +void MyTextEdit::dragEnterEvent ( QDragEnterEvent * e ){ + e->ignore(); +} +void MyTextEdit::dragLeaveEvent ( QDragLeaveEvent * e ){ + e->ignore(); +} +void MyTextEdit::dragMoveEvent ( QDragMoveEvent * e ){ + e->ignore(); +} +void MyTextEdit::mouseDoubleClickEvent ( QMouseEvent * e ){ + e->ignore(); +} + + void MyTextEdit::mousePressEvent(QMouseEvent * e) + { + //获取点击的下标 +// qDebug() << e->x() << ":" << e->y(); + quint16 count=0; + if(this->toPlainText().length()>1 && cursorForPosition(e->pos()).atEnd()) + { + int textHeight=this->height(); + QPoint currentPt=e->pos(); + QTextCursor textCursor=cursorForPosition(currentPt); + while(textCursor.atEnd() && 0<--textHeight && 0width(); + currentPt.setX(e->pos().x()); + currentPt.setY(currentPt.y()-5); + textCursor=cursorForPosition(currentPt); + while(textCursor.atEnd() && 0<--textWidth && 0 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +IPEdit::IPEdit(QWidget *parent) : QWidget(parent) +{ + init(); +} + +IPEdit::~IPEdit() +{ + +} + +void IPEdit::init() +{ + m_layout = new QHBoxLayout(this); + m_layout->setSpacing(3); + m_layout->setContentsMargins(2, 0, 2, 0); + + m_edit1 = new QLineEdit(this); + m_edit2 = new QLineEdit(this); + m_edit3 = new QLineEdit(this); + m_edit4 = new QLineEdit(this); + + initForEdit(m_edit1); + initForEdit(m_edit2); + initForEdit(m_edit3); + initForEdit(m_edit4); + + m_dot1 = new QLabel(".", this); + m_dot2 = new QLabel(".", this); + m_dot3 = new QLabel(".", this); + + m_layout->addWidget(m_edit1, 1); + m_layout->addWidget(m_dot1); + m_layout->addWidget(m_edit2, 1); + m_layout->addWidget(m_dot2); + m_layout->addWidget(m_edit3, 1); + m_layout->addWidget(m_dot3); + m_layout->addWidget(m_edit4, 1); +} + +void IPEdit::initForEdit(QLineEdit* edit) +{ + edit->setFrame(false); + edit->setAlignment(Qt::AlignCenter); + edit->installEventFilter(this); + + QRegExpValidator* validator = new QRegExpValidator(QRegExp("^(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$"), this); + edit->setValidator(validator); + + connect(edit, SIGNAL(textChanged(const QString&)), this, SLOT(editTextChanged(const QString&))); +} + +QLineEdit* IPEdit::nextEdit(QLineEdit* curEdit) +{ + if (curEdit == m_edit1) + return m_edit2; + else if (curEdit == m_edit2) + return m_edit3; + else if (curEdit == m_edit3) + return m_edit4; + else + return NULL; +} + +bool IPEdit::isEdit(QObject* object) +{ + return (object == m_edit1 || + object == m_edit2 || + object == m_edit3 || + object == m_edit4); +} + +QString IPEdit::text() +{ + QString sec1 = m_edit1->text().isEmpty() ? "0" : m_edit1->text(); + QString sec2 = m_edit2->text().isEmpty() ? "0" : m_edit2->text(); + QString sec3 = m_edit3->text().isEmpty() ? "0" : m_edit3->text(); + QString sec4 = m_edit4->text().isEmpty() ? "0" : m_edit4->text(); + return QString("%1.%2.%3.%4").arg(sec1).arg(sec2).arg(sec3).arg(sec4); +} + +void IPEdit::setText(const QString& text) +{ + QRegExp reg("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$"); + if (!reg.exactMatch(text)) + return; + + QStringList ips = text.split("."); + m_edit1->setText(ips.at(0)); + m_edit2->setText(ips.at(1)); + m_edit3->setText(ips.at(2)); + m_edit4->setText(ips.at(3)); +} + +void IPEdit::paintEvent(QPaintEvent* event) +{ + QPainter painter(this); + + QStyleOptionFrame option; + option.initFrom(this); + option.lineWidth = 1; + style()->drawPrimitive(QStyle::PE_PanelLineEdit, &option, &painter, this); + QWidget::paintEvent(event); +} + +bool IPEdit::eventFilter(QObject* object, QEvent* event) +{ + if (isEdit(object)) + { + if (event->type() == QEvent::KeyPress) + { + QKeyEvent* keyEvent = static_cast(event); + if (keyEvent->key() == Qt::Key_Period) + { + QLineEdit* next = nextEdit(qobject_cast(object)); + if (next) + { + next->setFocus(); + next->selectAll(); + } + } + else if (keyEvent->matches(QKeySequence::Paste)) + { + QString clip = QApplication::clipboard()->text(QClipboard::Clipboard); + if (clip.split(".").size() == 4) + { + setText(clip); + return true; + } + } + } + } + + return QWidget::eventFilter(object, event); +} + +void IPEdit::editTextChanged(const QString& text) +{ + QLineEdit* curEdit = qobject_cast(sender()); + if (text.size() == 3) + { + QLineEdit* next = nextEdit(curEdit); + if (next) + { + next->setFocus(); + next->selectAll(); + } + } +} diff --git a/Network/IPEdit/IPEdit.h b/Network/IPEdit/IPEdit.h new file mode 100644 index 0000000..6753ef4 --- /dev/null +++ b/Network/IPEdit/IPEdit.h @@ -0,0 +1,44 @@ +#ifndef IPEDIT_H +#define IPEDIT_H + +#include +#include +#include +#include +#include +#include + +class IPEdit : public QWidget +{ + Q_OBJECT +public: + explicit IPEdit(QWidget *parent = 0); + ~IPEdit(); + + QString text(); + void setText(const QString& text); + +protected: + void init(); + void initForEdit(QLineEdit* edit); + QLineEdit* nextEdit(QLineEdit* curEdit); + bool isEdit(QObject* object); + + virtual void paintEvent(QPaintEvent* event); + virtual bool eventFilter(QObject* object, QEvent* event); + +protected slots: + void editTextChanged(const QString& text); + +private: + QBoxLayout* m_layout; + QLineEdit* m_edit1; + QLineEdit* m_edit2; + QLineEdit* m_edit3; + QLineEdit* m_edit4; + QLabel* m_dot1; + QLabel* m_dot2; + QLabel* m_dot3; +}; + +#endif // IPEDIT_H diff --git a/Network/IPEdit/README.md b/Network/IPEdit/README.md new file mode 100644 index 0000000..fc861c1 --- /dev/null +++ b/Network/IPEdit/README.md @@ -0,0 +1,9 @@ +# 用法 +``` cpp + IPEdit* ipEdit = new IPEdit(this); + ipEdit->setGeometry(10, 10, 130, 25); + ipEdit->show(); + + ipEdit->setText("255.255.255.0"); + QString text = ipEdit->text(); +``` \ No newline at end of file diff --git a/Network/NetworkManager.cpp b/Network/NetworkManager.cpp new file mode 100644 index 0000000..66918f0 --- /dev/null +++ b/Network/NetworkManager.cpp @@ -0,0 +1,2018 @@ +#include "NetworkManager.h" +#include "ui_NetworkManager.h" +#include +#include +#include +#include +#include "myinclude.h" +#include "dirent.h" +#include "common/wpa_ctrl.h" +#define LANINTERFACE_NAME "eth0" + +#ifdef Q_OS_WIN +#include +#include +#include +#pragma comment(lib, "ws2_32.lib") +#pragma comment(lib, "Wbemuuid.lib") +#else +#define BUFSIZE 8192 +#include +#include +#include +#include +#include + +struct route_info { + in_addr dstAddr; + in_addr srcAddr; + in_addr gateWay; + char ifName[IF_NAMESIZE]; +}; + +int readNlSock(int sockFd, char *bufPtr, unsigned int seqNum, int pId) { + struct nlmsghdr *nlHdr; + int readLen = 0, msgLen = 0; + do { + if ((readLen = recv(sockFd, bufPtr, BUFSIZE - msgLen, 0)) < 0) { + perror("SOCK READ: "); + return -1; + } + nlHdr = (struct nlmsghdr *)bufPtr; + if ((NLMSG_OK(nlHdr, readLen) == 0) || (nlHdr->nlmsg_type == NLMSG_ERROR)) { + perror("Error in received packet"); + return -1; + } + if (nlHdr->nlmsg_type == NLMSG_DONE) + break; + + bufPtr += readLen; + msgLen += readLen; + + if ((nlHdr->nlmsg_flags & NLM_F_MULTI) == 0) + break; + + } while ((nlHdr->nlmsg_seq != seqNum) || (nlHdr->nlmsg_pid != (unsigned)pId)); + return msgLen; +} + +void parseRoutes(struct nlmsghdr *nlHdr, struct route_info *rtInfo) { + struct rtmsg *rtMsg = (struct rtmsg *)NLMSG_DATA(nlHdr); + + if ((rtMsg->rtm_family != AF_INET) || (rtMsg->rtm_table != RT_TABLE_MAIN)) + return; + + struct rtattr *rtAttr = (struct rtattr *)RTM_RTA(rtMsg); + int rtLen = RTM_PAYLOAD(nlHdr); + for (; RTA_OK(rtAttr, rtLen); rtAttr = RTA_NEXT(rtAttr, rtLen)) { + switch (rtAttr->rta_type) { + case RTA_OIF: + if_indextoname(*(int *)RTA_DATA(rtAttr), rtInfo->ifName); + break; + case RTA_GATEWAY: + rtInfo->gateWay = *(in_addr *)RTA_DATA(rtAttr); + break; + case RTA_PREFSRC: + rtInfo->srcAddr = *(in_addr *)RTA_DATA(rtAttr); + break; + case RTA_DST: + rtInfo->dstAddr = *(in_addr *)RTA_DATA(rtAttr); + break; + } + } +} +#endif + +class NetworkHelper { +public: + static QString DefaultGateway() { + QString ret; +#ifdef Q_OS_WIN + CoInitialize(NULL); + if (CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0) != S_OK) + return ret; + + IWbemLocator *pLoc = NULL; + if (CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void **)&pLoc) != S_OK) + return ret; + + IWbemServices *pSvc = NULL; + if (pLoc->ConnectServer(L"root\\cimv2", NULL, NULL, NULL, 0, NULL, NULL, &pSvc) != S_OK) + return ret; + + IEnumWbemClassObject *pEnumerator = NULL; + HRESULT hr = pSvc->ExecQuery(L"WQL", L"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'", WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); + if (FAILED(hr)) { + pSvc->Release(); + pLoc->Release(); + CoUninitialize(); + return ret; + } + + IWbemClassObject *pclsObj = NULL; + while (pEnumerator && ret.isEmpty()) { + _variant_t vaDefaultIPGateway; + ULONG uReturn; + hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); + if (!uReturn) + break; + + hr = pclsObj->Get(L"DefaultIPGateway", 0, &vaDefaultIPGateway, NULL, NULL); + if (hr == WBEM_S_NO_ERROR && vaDefaultIPGateway.vt != VT_NULL) { + LONG lLow = 0; + LONG lUp = 0; + ::SafeArrayGetLBound(vaDefaultIPGateway.parray, 1, &lLow); + ::SafeArrayGetUBound(vaDefaultIPGateway.parray, 1, &lUp); + for (LONG i = lLow; i <= lUp; i++) { + BSTR bsDefaultIPGateway; + if (::SafeArrayGetElement(vaDefaultIPGateway.parray, &i, &bsDefaultIPGateway) == S_OK) { + ret = QString::fromUtf16(reinterpret_cast(bsDefaultIPGateway)); + ::SysFreeString(bsDefaultIPGateway); + break; + } + } + } + VariantClear(&vaDefaultIPGateway); + } + + if (pclsObj) + pclsObj->Release(); + if (pEnumerator) + pEnumerator->Release(); + if (pSvc) + pSvc->Release(); + if (pLoc) + pLoc->Release(); + CoUninitialize(); +#else + int sock, msgSeq = 0; + if ((sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE)) < 0) { + perror("Socket Creation: "); + return ret; + } + + char msgBuf[BUFSIZE]; + memset(msgBuf, 0, BUFSIZE); + struct nlmsghdr *nlMsg = (struct nlmsghdr *)msgBuf; + + nlMsg->nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); + nlMsg->nlmsg_type = RTM_GETROUTE; + + nlMsg->nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST; + nlMsg->nlmsg_seq = msgSeq++; + nlMsg->nlmsg_pid = getpid(); + + if (send(sock, nlMsg, nlMsg->nlmsg_len, 0) < 0) + return ret; + + int len; + if ((len = readNlSock(sock, msgBuf, msgSeq, getpid())) < 0) + return ret; + + struct route_info *rtInfo = (struct route_info *)malloc(sizeof(struct route_info)); + + for (; NLMSG_OK(nlMsg, len); nlMsg = NLMSG_NEXT(nlMsg, len)) { + memset(rtInfo, 0, sizeof(struct route_info)); + parseRoutes(nlMsg, rtInfo); + + if (strstr((char *)inet_ntoa(rtInfo->dstAddr), "0.0.0.0") && !strstr((char *)inet_ntoa(rtInfo->gateWay), "0.0.0.0")) { + char buf[64]; + inet_ntop(AF_INET, &rtInfo->gateWay, buf, sizeof(buf)); + ret = QString(buf); + break; + } + } + + free(rtInfo); + close(sock); +#endif + return ret; + } +}; + +NetworkManager::NetworkManager(QWidget *parent) : + QWidget(parent), + ui(new Ui::NetworkManager) +{ + ui->setupUi(this); + + Json_ip_init_done =false; + net_data = new PrintNet(); + + connect(net_data,SIGNAL(json_server_error()),this,SLOT(onjson_server_error())); + connect(net_data,SIGNAL(receiveJSONDatafinish()),this,SLOT(onfinish_get_json())); + connect(net_data,SIGNAL(showMessege()),this,SLOT(ShowNet_dataMessege())); + + QRegExp regExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)"); + QRegExpValidator *pValidator = new QRegExpValidator(regExp, this); + +// ui->lineEditLanGW->setValidator(new QRegExpValidator(pValidator)); +// ui->lineEditLanGW->setInputMask("000.000.000.000;"); + + ui->spinBoxLanIP3->setDisabled(true); + ui->spinBoxLanIP2->setDisabled(true); + ui->spinBoxLanIP1->setDisabled(true); + ui->spinBoxLanIP0->setDisabled(true); + ui->spinBoxLanMask3->setDisabled(true); + ui->spinBoxLanMask2->setDisabled(true); + ui->spinBoxLanMask1->setDisabled(true); + ui->spinBoxLanMask0->setDisabled(true); +// ui->lineEditLanGW->setDisabled(true); + ui->spinBoxLanGW3->setDisabled(true); + ui->spinBoxLanGW2->setDisabled(true); + ui->spinBoxLanGW1->setDisabled(true); + ui->spinBoxLanGW0->setDisabled(true); + ui->pushButtonSetCancel->setDisabled(true); + + connect(ui->networkSelect, SIGNAL(activated(const QString&)), this, + SLOT(selectNetwork(const QString&))); + ctrl_iface = NULL; + ctrl_conn = NULL; + monitor_conn = NULL; + msgNotifier = NULL; + ctrl_iface_dir = strdup("/var/run/wpa_supplicant"); + + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), SLOT(ping())); + timer->setSingleShot(FALSE); + timer->start(3000); + + Json_timer = new QTimer(this); + connect(Json_timer, SIGNAL(timeout()), SLOT(onjson_timer_handler())); + Json_timer->stop(); + Jsom_timer_stop =true; +// Json_timer->start(1000); + + wlanStartUpFailed = false; + if (openCtrlConnection(ctrl_iface) < 0) { + qDebug()<<"Failed to open control connection to " + "wpa_supplicant."; + wlanStartUpFailed = true; + } + + if(wlanStartUpFailed) + return; + updateStatus(); + networkMayHaveChanged = true; + updateNetworks(); + updateSysStatusToUI(); +} + +NetworkManager::~NetworkManager() +{ + delete ui; + //delete processNetwork; +} + +void NetworkManager::onfinish_get_json() +{ + + net_data->getJson_data(&sysPara->Get_JSON_DATA); + + if(Jsom_timer_stop == true){ + + Json_timer->start(1000); + Jsom_timer_stop = false; + } + + + ui->messege_info_label->setText( net_data->getMessege() ); + + emit updateJSONData(); +} + +void NetworkManager::ShowNet_dataMessege() +{ + ui->messege_info_label->setText( net_data->getMessege()); +} + +void NetworkManager::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; + const QString cip=getCurrentNetworkIP(); + qDebug()<<"当前IP地址是:"<deviceID_lineEdit->setText(QString(sysPara->para.Json_device_code)); + QString ip_str; + ip_str = QString::number(sysPara->para.Json_IP[0]); + ip_str += "."; + ip_str += QString::number(sysPara->para.Json_IP[1]); + ip_str += "."; + ip_str += QString::number(sysPara->para.Json_IP[2]); + ip_str += "."; + ip_str += QString::number(sysPara->para.Json_IP[3]); + ui->SeverIP_lineEdit->setText(ip_str); + ui->server_port_lineEdit->setText(QString::number(sysPara->para.Json_server_port)); + + } + + ui->checkBoxRemoveCode->setCheckState(sysPara->para.isRemoveCode ? Qt::Checked : Qt::Unchecked); + ui->checkBoxRemoveDigitCode->setCheckState(sysPara->para.isRemoveDigitCode ? Qt::Checked : Qt::Unchecked); + ui->radioButtonGetDataEnable->setChecked(sysPara->para.isEnableGetDataButton); + + QList list = QNetworkInterface::allInterfaces(); //QNetworkInterface::interfaceFromName(LANINTERFACE_NAME); + //获取所有网络接口的列表 + foreach(QNetworkInterface interface,list) + { + #if 0 + //遍历每一个网络接口 + qDebug() << "Device: "< entryList = interface.addressEntries(); + //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址 + foreach(QNetworkAddressEntry entry,entryList) + {//遍历每一个IP地址条目 + qDebug()<<"IP Address: "< entryList = interface.addressEntries(); + //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址 + foreach(QNetworkAddressEntry entry,entryList) + { +#if 0 + //遍历每一个IP地址条目 + qDebug()<<"IP Address: "<lineEditLanIP->setText(entry.ip().toString()); + //ui->lineEditLanMask->setText(entry.netmask().toString()); + QStringList lanIpList = entry.ip().toString().split("."); + if (lanIpList.size() == 4) { + ui->spinBoxLanIP3->setValue(lanIpList.at(0).toInt()); + ui->spinBoxLanIP2->setValue(lanIpList.at(1).toInt()); + ui->spinBoxLanIP1->setValue(lanIpList.at(2).toInt()); + ui->spinBoxLanIP0->setValue(lanIpList.at(3).toInt()); + } + else if (lanIpList.size() == 0) { + ui->spinBoxLanIP3->setValue(0); + ui->spinBoxLanIP2->setValue(0); + ui->spinBoxLanIP1->setValue(0); + ui->spinBoxLanIP0->setValue(0); + } + QStringList lanMaskList = entry.netmask().toString().split("."); + if (lanMaskList.size() == 4) { + ui->spinBoxLanMask3->setValue(lanMaskList.at(0).toInt()); + ui->spinBoxLanMask2->setValue(lanMaskList.at(1).toInt()); + ui->spinBoxLanMask1->setValue(lanMaskList.at(2).toInt()); + ui->spinBoxLanMask0->setValue(lanMaskList.at(3).toInt()); + } + else if (lanMaskList.size() == 0) { + ui->spinBoxLanMask3->setValue(0); + ui->spinBoxLanMask2->setValue(0); + ui->spinBoxLanMask1->setValue(0); + ui->spinBoxLanMask0->setValue(0); + } + //ui->lineEditLanGW->setText(entry.netmask().toString()); + QString GatewayAddr = NetworkHelper::DefaultGateway(); + //ui->lineEditLanGW->setText(GatewayAddr); + QStringList lanGWList = GatewayAddr.split("."); + if (lanGWList.size() == 4) { + ui->spinBoxLanGW3->setValue(lanGWList.at(0).toInt()); + ui->spinBoxLanGW2->setValue(lanGWList.at(1).toInt()); + ui->spinBoxLanGW1->setValue(lanGWList.at(2).toInt()); + ui->spinBoxLanGW0->setValue(lanGWList.at(3).toInt()); + } + else if (lanGWList.size() == 0) { + ui->spinBoxLanGW3->setValue(0); + ui->spinBoxLanGW2->setValue(0); + ui->spinBoxLanGW1->setValue(0); + ui->spinBoxLanGW0->setValue(0); + } + return; + } + } + } + //ui->radioButtonGetDataEnable->setChecked(ui->radioButtonGetDataEnable ? true: false); + } + +} +#define INTERFACE_OTHERS "# The loopback interface \n\ + auto lo \n\ + iface lo inet loopback \n\ + \n \ + # Wireless interfaces \n\ + auto wlan0 \n\ + iface wlan0 inet dhcp \n\ + wireless_mode managed \n\ + wireless_essid any \n\ + wpa-driver wext \n\ + wpa-conf /etc/wpa_supplicant.conf\n" + +void NetworkManager::applyLanUIPara(void) +{ + + if(sysPara){ + QList list = QNetworkInterface::allInterfaces(); //QNetworkInterface::interfaceFromName(LANINTERFACE_NAME); + //获取所有网络接口的列表 + foreach(QNetworkInterface interface,list) { + if(QString::compare(interface.name(), LANINTERFACE_NAME)==0) + { + uint8_t ip3 = ui->spinBoxLanIP3->value(); + uint8_t ip2 = ui->spinBoxLanIP2->value(); + uint8_t ip1 = ui->spinBoxLanIP1->value(); + uint8_t ip0 = ui->spinBoxLanIP0->value(); + uint8_t lanMask3 = ui->spinBoxLanMask3->value(); + uint8_t lanMask2 = ui->spinBoxLanMask2->value(); + uint8_t lanMask1 = ui->spinBoxLanMask1->value(); + uint8_t lanMask0 = ui->spinBoxLanMask0->value(); + uint8_t lanGW0 = ui->spinBoxLanGW0->value(); + QString ipAddrStr(QString("%1.%2.%3.%4").arg(ip3).arg(ip2).arg(ip1).arg(ip0)); + QString netMaskStr(QString("%1.%2.%3.%4").arg(lanMask3).arg(lanMask2).arg(lanMask1).arg(lanMask0)); +// QHostAddress ipAddr(ipAddrStr); +// QHostAddress netMask(netMaskStr); + qDebug() << "set ip:"<start("ifconfig", QStringList() << LANINTERFACE_NAME << "192.168.1.100"); + //startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, + // qint64 *pid = 0) + QStringList argrList; + if (!(ip3|ip2|ip1|ip0)) { + // 动态IP + //qDebug() << "set dhcp"; + QProcess dhcpProcess; + dhcpProcess.startDetached("/bin/cp /etc/network/interfaces_dhcp /etc/network/interfaces", argrList); + argrList<< LANINTERFACE_NAME << ipAddrStr; + + } + else { + // 静态IP + QFile netInterface("/etc/network/interfaces"); + netInterface.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate); + if (netInterface.isOpen()) { + QTextStream stream(&netInterface); + stream.seek(0); + stream << INTERFACE_OTHERS; + stream << " " <<"\n"; + stream << "# eth0 interfaces" <<"\n"; + stream << "auto eth0" <<"\n"; + stream << "iface eth0 inet static" <<"\n"; + stream << QString("address %1.%2.%3.%4").arg(ip3).arg(ip2).arg(ip1).arg(ip0) <<"\n"; + stream << QString("gateway %1.%2.%3.%4").arg(ip3).arg(ip2).arg(ip1).arg(lanGW0) <<"\n"; + stream << QString("netmask %1.%2.%3.%4").arg(lanMask3).arg(lanMask2).arg(lanMask1).arg(lanMask0) <<"\n"; + stream << " \n"; + netInterface.close(); + } + //const QFile::FileError eno=netInterface.error(); + //qDebug()<<"打开网络设置文件失败,error="<start("ifconfig", argrList); + QProcess process; + process.startDetached("/sbin/ifconfig", argrList); + //processNetwork->startDetached("/sbin/ifconfig", argrList, "/sbin/"); + //char cmd[100]; + //sprintf(cmd,"ifconfig %s %s netmask %s",LANINTERFACE_NAME, ui->lineEditLanIP->text(), ui->lineEditLanMask->text()); + //system(cmd); + //system("ifconfig eth0 192.168.0.16"); + return; + } + } + } + +} + +qint32 NetworkManager::isIpv4Address(QString ip) +{ + QRegExp regExp("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"); + if( !regExp.exactMatch(ip) ) + { + return false; + } + return true; +} + +void NetworkManager::on_pushButtonSetIP_clicked(bool checked) +{ + + if(sysPara){ + if(sysPara->status.bLanConfigManual) + { + //qDebug()<spinBoxLanIP3->value()).arg(ui->spinBoxLanIP2->value()).arg(ui->spinBoxLanIP1->value()).arg(ui->spinBoxLanIP0->value()); + //if(isIpv4Address(ui->lineEditLanIP->text())&&isIpv4Address(ui->lineEditLanMask->text()))//检查IP地址是否有效 + if(1) + { + applyLanUIPara(); + ui->pushButtonSetIP->setText(QObject::tr("手动设定")); + + ui->spinBoxLanIP3->setDisabled(true); + ui->spinBoxLanIP2->setDisabled(true); + ui->spinBoxLanIP1->setDisabled(true); + ui->spinBoxLanIP0->setDisabled(true); + ui->spinBoxLanMask3->setDisabled(true); + ui->spinBoxLanMask2->setDisabled(true); + ui->spinBoxLanMask1->setDisabled(true); + ui->spinBoxLanMask0->setDisabled(true); + ui->spinBoxLanGW0->setDisabled(true); + + ui->pushButtonSetCancel->setDisabled(true); + sysPara->status.bLanConfigManual = false; + } + else + { + //QMessageBox::information(this, tr("错误"), tr("ip地址错误")); + } + } + else + { + sysPara->status.bLanConfigManual = true; + ui->spinBoxLanIP3->setDisabled(false); + ui->spinBoxLanIP2->setDisabled(false); + ui->spinBoxLanIP1->setDisabled(false); + ui->spinBoxLanIP0->setDisabled(false); + ui->spinBoxLanMask3->setDisabled(false); + ui->spinBoxLanMask2->setDisabled(false); + ui->spinBoxLanMask1->setDisabled(false); + ui->spinBoxLanMask0->setDisabled(false); + ui->spinBoxLanGW0->setDisabled(false); + ui->pushButtonSetIP->setText(QObject::tr("应用")); + ui->pushButtonSetCancel->setDisabled(false); + + } + } + // qDebug()<lineEditLanIP->text(); + +} + +void NetworkManager::on_pushButtonSetCancel_clicked(bool checked) +{ + + if(sysPara){ + if(sysPara->status.bLanConfigManual) + { + sysPara->status.bLanConfigManual = false; + ui->spinBoxLanIP3->setDisabled(true); + ui->spinBoxLanIP2->setDisabled(true); + ui->spinBoxLanIP1->setDisabled(true); + ui->spinBoxLanIP0->setDisabled(true); + ui->spinBoxLanMask3->setDisabled(true); + ui->spinBoxLanMask2->setDisabled(true); + ui->spinBoxLanMask1->setDisabled(true); + ui->spinBoxLanMask0->setDisabled(true); + ui->pushButtonSetCancel->setDisabled(true); + ui->pushButtonSetIP->setText(QObject::tr("手动设定")); + } + } + +} + +int NetworkManager::openCtrlConnection(const char *ifname) +{ + char *cfile; + int flen; +// char buf[2048], *pos, *pos2; +// size_t len; + + if (ifname) { + if (ifname != ctrl_iface) { + free(ctrl_iface); + ctrl_iface = strdup(ifname); + } + } else { +#ifdef CONFIG_CTRL_IFACE_UDP + free(ctrl_iface); + ctrl_iface = strdup("udp"); +#endif /* CONFIG_CTRL_IFACE_UDP */ +#ifdef CONFIG_CTRL_IFACE_UNIX + struct dirent *dent; + DIR *dir = opendir(ctrl_iface_dir); + free(ctrl_iface); + ctrl_iface = NULL; + if (dir) { + while ((dent = readdir(dir))) { +#ifdef _DIRENT_HAVE_D_TYPE + /* Skip the file if it is not a socket. + * Also accept DT_UNKNOWN (0) in case + * the C library or underlying file + * system does not support d_type. */ + if (dent->d_type != DT_SOCK && + dent->d_type != DT_UNKNOWN) + continue; +#endif /* _DIRENT_HAVE_D_TYPE */ + + if (strcmp(dent->d_name, ".") == 0 || + strcmp(dent->d_name, "..") == 0) + continue; + printf("Selected interface '%s'\n", + dent->d_name); + ctrl_iface = strdup(dent->d_name); + break; + } + closedir(dir); + } +#endif /* CONFIG_CTRL_IFACE_UNIX */ +#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE + struct wpa_ctrl *ctrl; + int ret; + + free(ctrl_iface); + ctrl_iface = NULL; + + ctrl = wpa_ctrl_open(NULL); + if (ctrl) { + len = sizeof(buf) - 1; + ret = wpa_ctrl_request(ctrl, "INTERFACES", 10, buf, + &len, NULL); + if (ret >= 0) { + connectedToService = true; + buf[len] = '\0'; + pos = strchr(buf, '\n'); + if (pos) + *pos = '\0'; + ctrl_iface = strdup(buf); + } + wpa_ctrl_close(ctrl); + } +#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ + } + + if (ctrl_iface == NULL) { +#ifdef CONFIG_NATIVE_WINDOWS + static bool first = true; + if (first && !serviceRunning()) { + first = false; + if (QMessageBox::warning( + this, qAppName(), + tr("wpa_supplicant service is not " + "running.\n" + "Do you want to start it?"), + QMessageBox::Yes | QMessageBox::No) == + QMessageBox::Yes) + startService(); + } +#endif /* CONFIG_NATIVE_WINDOWS */ + return -1; + } + +#ifdef CONFIG_CTRL_IFACE_UNIX + flen = strlen(ctrl_iface_dir) + strlen(ctrl_iface) + 2; + cfile = (char *) malloc(flen); + if (cfile == NULL) + return -1; + snprintf(cfile, flen, "%s/%s", ctrl_iface_dir, ctrl_iface); +#else /* CONFIG_CTRL_IFACE_UNIX */ + flen = strlen(ctrl_iface) + 1; + cfile = (char *) malloc(flen); + if (cfile == NULL) + return -1; + snprintf(cfile, flen, "%s", ctrl_iface); +#endif /* CONFIG_CTRL_IFACE_UNIX */ + + if (ctrl_conn) { + wpa_ctrl_close(ctrl_conn); + ctrl_conn = NULL; + } + + if (monitor_conn) { + delete msgNotifier; + msgNotifier = NULL; + wpa_ctrl_detach(monitor_conn); + wpa_ctrl_close(monitor_conn); + monitor_conn = NULL; + } + + printf("Trying to connect to '%s'\n", cfile); + ctrl_conn = wpa_ctrl_open(cfile); + if (ctrl_conn == NULL) { + free(cfile); + return -1; + } + monitor_conn = wpa_ctrl_open(cfile); + free(cfile); + if (monitor_conn == NULL) { + wpa_ctrl_close(ctrl_conn); + return -1; + } + if (wpa_ctrl_attach(monitor_conn)) { + printf("Failed to attach to wpa_supplicant\n"); + wpa_ctrl_close(monitor_conn); + monitor_conn = NULL; + wpa_ctrl_close(ctrl_conn); + ctrl_conn = NULL; + return -1; + } + +#if defined(CONFIG_CTRL_IFACE_UNIX) || defined(CONFIG_CTRL_IFACE_UDP) + msgNotifier = new QSocketNotifier(wpa_ctrl_get_fd(monitor_conn), + QSocketNotifier::Read, this); + connect(msgNotifier, SIGNAL(activated(int)), SLOT(receiveMsgs())); +#endif + + //adapterSelect->clear(); + //adapterSelect->addItem(ctrl_iface); + //adapterSelect->setCurrentIndex(0); + #if 0 +printf("Trying to INTERFACES to '%s'\n", cfile); + len = sizeof(buf) - 1; + if (wpa_ctrl_request(ctrl_conn, "INTERFACES", 10, buf, &len, NULL) >= + 0) { + buf[len] = '\0'; + pos = buf; + while (*pos) { + pos2 = strchr(pos, '\n'); + if (pos2) + *pos2 = '\0'; + if (strcmp(pos, ctrl_iface) != 0) + //adapterSelect->addItem(pos); + if (pos2) + pos = pos2 + 1; + else + break; + } + } + + len = sizeof(buf) - 1; + if (wpa_ctrl_request(ctrl_conn, "GET_CAPABILITY eap", 18, buf, &len, + NULL) >= 0) { + buf[len] = '\0'; + + QString res(buf); + QStringList types = res.split(QChar(' ')); + bool wps = types.contains("WSC"); + actionWPS->setEnabled(wps); + wpsTab->setEnabled(wps); + wpaguiTab->setTabEnabled(wpaguiTab->indexOf(wpsTab), wps); + } +#endif + printf("network out to '%s'\n", cfile); + + return 0; +} + + +int NetworkManager::ctrlRequest(const char *cmd, char *buf, size_t *buflen) +{ + int ret; + + if (ctrl_conn == NULL) + return -3; + ret = wpa_ctrl_request(ctrl_conn, cmd, strlen(cmd), buf, buflen, NULL); + if (ret == -2) + printf("'%s' command timed out.\n", cmd); + else if (ret < 0) + printf("'%s' command failed.\n", cmd); + + return ret; +} +QString NetworkManager::wpaStateTranslate(char *state) +{ + + if (!strcmp(state, "DISCONNECTED")) + { + //QProcess process; + //process.startDetached("killall udhcpc"); + return tr("Disconnected"); + } + else if (!strcmp(state, "INACTIVE")) + return tr("Inactive"); + else if (!strcmp(state, "SCANNING")) + return tr("Scanning"); + else if (!strcmp(state, "AUTHENTICATING")) + return tr("Authenticating"); + else if (!strcmp(state, "ASSOCIATING")) + return tr("Associating"); + else if (!strcmp(state, "ASSOCIATED")) + return tr("Associated"); + else if (!strcmp(state, "4WAY_HANDSHAKE")) + return tr("4-Way Handshake"); + else if (!strcmp(state, "GROUP_HANDSHAKE")) + return tr("Group Handshake"); + else if (!strcmp(state, "COMPLETED")) + { + QProcess process; + process.startDetached("/home/plg/checkUdhcpcRun.sh"); + return tr("Completed"); + } + else + + return tr("Unknown"); +} +void NetworkManager::updateStatus() +{ + + char buf[2048], *start, *end, *pos; + size_t len; + + pingsToStatusUpdate = 10; + + len = sizeof(buf) - 1; + if (ctrl_conn == NULL || ctrlRequest("STATUS", buf, &len) < 0) { + ui->textStatus->setText(tr("Could not get status from " + "wpa_supplicant")); + //ui->textAuthentication->clear(); + //ui->textEncryption->clear(); + ui->textSSID->clear(); + //ui->textBssid->clear(); + ui->textIPAdrr->clear(); + + return; + } + + buf[len] = '\0'; + + bool auth_updated = false, ssid_updated = false; + bool bssid_updated = false, ipaddr_updated = false; + bool status_updated = false; + char *pairwise_cipher = NULL, *group_cipher = NULL; + char *mode = NULL; + + start = buf; + while (*start) { + bool last = false; + end = strchr(start, '\n'); + if (end == NULL) { + last = true; + end = start; + while (end[0] && end[1]) + end++; + } + *end = '\0'; + + pos = strchr(start, '='); + if (pos) { + *pos++ = '\0'; + if (strcmp(start, "bssid") == 0) { + bssid_updated = true; + //textBssid->setText(pos); + } else if (strcmp(start, "ssid") == 0) { + ssid_updated = true; + ui->textSSID->setText(pos); + } else if (strcmp(start, "ip_address") == 0) { + ipaddr_updated = true; + ui->textIPAdrr->setText(pos); + } else if (strcmp(start, "wpa_state") == 0) { + status_updated = true; + ui->textStatus->setText(wpaStateTranslate(pos)); + } else if (strcmp(start, "key_mgmt") == 0) { + auth_updated = true; + //textAuthentication->setText(pos); + /* TODO: could add EAP status to this */ + } else if (strcmp(start, "pairwise_cipher") == 0) { + pairwise_cipher = pos; + } else if (strcmp(start, "group_cipher") == 0) { + group_cipher = pos; + } else if (strcmp(start, "mode") == 0) { + mode = pos; + } + } + + if (last) + break; + start = end + 1; + } + if (status_updated && mode) + ui->textStatus->setText(ui->textStatus->text() + " (" + mode + ")"); + + if (pairwise_cipher || group_cipher) { + QString encr; + if (pairwise_cipher && group_cipher && + strcmp(pairwise_cipher, group_cipher) != 0) { + encr.append(pairwise_cipher); + encr.append(" + "); + encr.append(group_cipher); + } else if (pairwise_cipher) { + encr.append(pairwise_cipher); + } else { + encr.append(group_cipher); + encr.append(" [group key only]"); + } + //textEncryption->setText(encr); + } else + //textEncryption->clear(); + ; + + if (!status_updated) + ui->textStatus->clear(); + //if (!auth_updated) + // textAuthentication->clear(); + if (!ssid_updated) + ui->textSSID->clear(); + //if (!bssid_updated) + // textBssid->clear(); + if (!ipaddr_updated) + ui->textIPAdrr->clear(); + +} + +void NetworkManager::updateNetworks() +{ + + char buf[2048], *start, *end, *id, *ssid, *bssid, *flags; + size_t len; + int first_active = -1; + int was_selected = -1; + bool current = false; + if(wlanStartUpFailed) + return; + if (!networkMayHaveChanged) + return; + + //if (networkList->currentRow() >= 0) + // was_selected = networkList->currentRow(); + + ui->networkSelect->clear(); + //ui->scanSSIDSelect->clear(); + //networkList->clear(); + + if (ctrl_conn == NULL) + return; + + len = sizeof(buf) - 1; + if (ctrlRequest("LIST_NETWORKS", buf, &len) < 0) + return; + + buf[len] = '\0'; + start = strchr(buf, '\n'); + if (start == NULL) + return; + start++; + + while (*start) { + bool last = false; + end = strchr(start, '\n'); + if (end == NULL) { + last = true; + end = start; + while (end[0] && end[1]) + end++; + } + *end = '\0'; + + id = start; + ssid = strchr(id, '\t'); + if (ssid == NULL) + break; + *ssid++ = '\0'; + bssid = strchr(ssid, '\t'); + if (bssid == NULL) + break; + *bssid++ = '\0'; + flags = strchr(bssid, '\t'); + if (flags == NULL) + break; + *flags++ = '\0'; + + if (strstr(flags, "[DISABLED][P2P-PERSISTENT]")) { + if (last) + break; + start = end + 1; + continue; + } + + QString network(id); + network.append(": "); + network.append(ssid); + ui->networkSelect->addItem(network); + //networkList->addItem(network); +//scanSSIDSelect + if (strstr(flags, "[CURRENT]")) { + ui->networkSelect->setCurrentIndex(ui->networkSelect->count() - + 1); + current = true; + } else if (first_active < 0 && + strstr(flags, "[DISABLED]") == NULL) + first_active = ui->networkSelect->count() - 1; + + if (last) + break; + start = end + 1; + } + + if (ui->networkSelect->count() > 1) + ui->networkSelect->addItem(tr("Select any network")); + + if (!current && first_active >= 0) + ui->networkSelect->setCurrentIndex(first_active); +#if 0 + if (was_selected >= 0 && networkList->count() > 0) { + if (was_selected < networkList->count()) + networkList->setCurrentRow(was_selected); + else + networkList->setCurrentRow(networkList->count() - 1); + } + else + networkList->setCurrentRow(networkSelect->currentIndex()); +#endif + networkMayHaveChanged = false; + +} +static int str_match(const char *a, const char *b) +{ + return strncmp(a, b, strlen(b)) == 0; +} +void NetworkManager::scan() +{ +#if 0 + if (scanres) { + scanres->close(); + delete scanres; + } + + scanres = new ScanResults(); + if (scanres == NULL) + return; + scanres->setWpaGui(this); + scanres->show(); + scanres->exec(); +#endif +} +void NetworkManager::processMsg(char *msg) +{ + + char *pos = msg, *pos2; + int priority = 2; + + if (*pos == '<') { + /* skip priority */ + pos++; + priority = atoi(pos); + pos = strchr(pos, '>'); + if (pos) + pos++; + else + pos = msg; + } + + WpaMsg wm(pos, priority); + //if (eh) + // eh->addEvent(wm); + //if (peers) + // peers->event_notify(wm); + msgs.append(wm); + while (msgs.count() > 100) + msgs.pop_front(); + + /* Update last message with truncated version of the event */ + if (strncmp(pos, "CTRL-", 5) == 0) { + pos2 = strchr(pos, str_match(pos, WPA_CTRL_REQ) ? ':' : ' '); + if (pos2) + pos2++; + else + pos2 = pos; + } else + pos2 = pos; + QString lastmsg = pos2; + lastmsg.truncate(40); + //textLastMessage->setText(lastmsg); + + pingsToStatusUpdate = 0; + networkMayHaveChanged = true; + + if (str_match(pos, WPA_CTRL_REQ)) + //processCtrlReq(pos + strlen(WPA_CTRL_REQ)); + ; + else if (str_match(pos, WPA_EVENT_SCAN_RESULTS) && beSentScanCmd) + { + updateResults(); + beSentScanCmd = false; + } + else if (str_match(pos, WPA_EVENT_DISCONNECTED)) + //showTrayMessage(QSystemTrayIcon::Information, 3, + // tr("Disconnected from network.")); + ui->textStatus->setText("Disconnected"); + else if (str_match(pos, WPA_EVENT_CONNECTED)) { + //showTrayMessage(QSystemTrayIcon::Information, 3, + //tr("Connection to network established.")); + //QTimer::singleShot(5 * 1000, this, SLOT(showTrayStatus())); + //stopWpsRun(true); + ui->textStatus->setText("Connected"); + } +#if 0 + + else if (str_match(pos, WPS_EVENT_AP_AVAILABLE_PBC)) { + wpsStatusText->setText(tr("WPS AP in active PBC mode found")); + if (textStatus->text() == "INACTIVE" || + textStatus->text() == "DISCONNECTED") + wpaguiTab->setCurrentWidget(wpsTab); + wpsInstructions->setText(tr("Press the PBC button on the " + "screen to start registration")); + } else if (str_match(pos, WPS_EVENT_AP_AVAILABLE_PIN)) { + wpsStatusText->setText(tr("WPS AP with recently selected " + "registrar")); + if (textStatus->text() == "INACTIVE" || + textStatus->text() == "DISCONNECTED") + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPS_EVENT_AP_AVAILABLE_AUTH)) { + showTrayMessage(QSystemTrayIcon::Information, 3, + "Wi-Fi Protected Setup (WPS) AP\n" + "indicating this client is authorized."); + wpsStatusText->setText("WPS AP indicating this client is " + "authorized"); + if (textStatus->text() == "INACTIVE" || + textStatus->text() == "DISCONNECTED") + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPS_EVENT_AP_AVAILABLE)) { + wpsStatusText->setText(tr("WPS AP detected")); + } else if (str_match(pos, WPS_EVENT_OVERLAP)) { + wpsStatusText->setText(tr("PBC mode overlap detected")); + wpsInstructions->setText(tr("More than one AP is currently in " + "active WPS PBC mode. Wait couple " + "of minutes and try again")); + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPS_EVENT_CRED_RECEIVED)) { + wpsStatusText->setText(tr("Network configuration received")); + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPA_EVENT_EAP_METHOD)) { + if (strstr(pos, "(WSC)")) + wpsStatusText->setText(tr("Registration started")); + } else if (str_match(pos, WPS_EVENT_M2D)) { + wpsStatusText->setText(tr("Registrar does not yet know PIN")); + } else if (str_match(pos, WPS_EVENT_FAIL)) { + wpsStatusText->setText(tr("Registration failed")); + } else if (str_match(pos, WPS_EVENT_SUCCESS)) { + wpsStatusText->setText(tr("Registration succeeded")); + } +#endif +} +void NetworkManager::receiveMsgs() +{ + char buf[256]; + size_t len; + qDebug()<<"receiveMsgs"; + while (monitor_conn && wpa_ctrl_pending(monitor_conn) > 0) { + len = sizeof(buf) - 1; + if (wpa_ctrl_recv(monitor_conn, buf, &len) == 0) { + buf[len] = '\0'; + processMsg(buf); + } + } +} + + +void NetworkManager::updateResults() +{ + char reply[2048]; + size_t reply_len; + int index; + char cmd[20]; + //qDebug()<<"updateResults"; + //ui->networkSelect->clear(); + ui->scanSSIDSelect->clear(); + scanResultMap.clear(); + + index = 0; + while (1) + { + snprintf(cmd, sizeof(cmd), "BSS %d", index++); + if (index > 1000) + break; + + reply_len = sizeof(reply) - 1; + if (ctrlRequest(cmd, reply, &reply_len) < 0) + break; + reply[reply_len] = '\0'; + + QString bss(reply); + if (bss.isEmpty() || bss.startsWith("FAIL")) + break; + + QString ssid, bssid, freq, signal, flags; + + QStringList lines = bss.split(QRegExp("\\n")); + for (QStringList::Iterator it = lines.begin(); + it != lines.end(); it++) { + int pos = (*it).indexOf('=') + 1; + if (pos < 1) + continue; + + if ((*it).startsWith("bssid=")) + bssid = (*it).mid(pos); + else if ((*it).startsWith("freq=")) + freq = (*it).mid(pos); + else if ((*it).startsWith("qual=")) + signal = (*it).mid(pos); + else if ((*it).startsWith("flags=")) + flags = (*it).mid(pos); + else if ((*it).startsWith("ssid=")) + ssid = (*it).mid(pos); + } +#if 0 + QTreeWidgetItem *item = new QTreeWidgetItem(scanResultsWidget); + if (item) { + item->setText(0, ssid); + item->setText(1, bssid); + item->setText(2, freq); + item->setText(3, signal); + item->setText(4, flags); + } +#endif + ui->scanSSIDSelect->addItem(ssid); + QStringList resultList; + resultList<pskEdit->text().length(); + int auth = ui->authSelect->currentIndex(); + + if (auth == AUTH_WPA_PSK || auth == AUTH_WPA2_PSK) { + if (psklen < 8 || psklen > 64) { + QMessageBox::warning( + this, + tr("WPA Pre-Shared Key Error"), + tr("WPA-PSK requires a passphrase of 8 to 63 " + "characters\n" + "or 64 hex digit PSK")); + ui->pskEdit->setFocus(); + return; + } + } +#if 0 + if (idstrEdit->isEnabled() && !idstrEdit->text().isEmpty()) { + QRegExp rx("^(\\w|-)+$"); + if (rx.indexIn(idstrEdit->text()) < 0) { + QMessageBox::warning( + this, tr("Network ID Error"), + tr("Network ID String contains non-word " + "characters.\n" + "It must be a simple string, " + "without spaces, containing\n" + "only characters in this range: " + "[A-Za-z0-9_-]\n")); + idstrEdit->setFocus(); + return; + } + } + + if (wpagui == NULL) + return; +#endif + memset(reply, 0, sizeof(reply)); + reply_len = sizeof(reply) - 1; + + if (1) { + ctrlRequest("ADD_NETWORK", reply, &reply_len); + if (reply[0] == 'F') { + QMessageBox::warning(this, "wpa_gui", + tr("Failed to add " + "network to wpa_supplicant\n" + "configuration.")); + return; + } + id = atoi(reply); + } else + id = edit_network_id; + + //setNetworkParam(id, "ssid", ssidEdit->text().toAscii().constData(), + // true); + setNetworkParam(id, "ssid", ui->scanSSIDSelect->currentText().toAscii().constData(), + true); + const char *key_mgmt = NULL, *proto = NULL, *pairwise = NULL; + switch (auth) { + case AUTH_NONE_OPEN: + case AUTH_NONE_WEP: + case AUTH_NONE_WEP_SHARED: + key_mgmt = "NONE"; + break; + case AUTH_IEEE8021X: + key_mgmt = "IEEE8021X"; + break; + case AUTH_WPA_PSK: + key_mgmt = "WPA-PSK"; + proto = "WPA"; + break; + case AUTH_WPA_EAP: + key_mgmt = "WPA-EAP"; + proto = "WPA"; + break; + case AUTH_WPA2_PSK: + key_mgmt = "WPA-PSK"; + proto = "WPA2"; + break; + case AUTH_WPA2_EAP: + key_mgmt = "WPA-EAP"; + proto = "WPA2"; + break; + } + + if (auth == AUTH_NONE_WEP_SHARED) + setNetworkParam(id, "auth_alg", "SHARED", false); + else + setNetworkParam(id, "auth_alg", "OPEN", false); + + if (auth == AUTH_WPA_PSK || auth == AUTH_WPA_EAP || + auth == AUTH_WPA2_PSK || auth == AUTH_WPA2_EAP) { + int encr = ui->EncryptionSelect->currentIndex(); + if (encr == 0) + pairwise = "TKIP"; + else + pairwise = "CCMP"; + } + + if (proto) + setNetworkParam(id, "proto", proto, false); + if (key_mgmt) + setNetworkParam(id, "key_mgmt", key_mgmt, false); + if (pairwise) { + setNetworkParam(id, "pairwise", pairwise, false); + setNetworkParam(id, "group", "TKIP CCMP WEP104 WEP40", false); + } + if (ui->pskEdit->isEnabled() && + strcmp(ui->pskEdit->text().toAscii().constData(), + WPA_GUI_KEY_DATA) != 0) + setNetworkParam(id, "psk", + ui->pskEdit->text().toAscii().constData(), + psklen != 64); +#if 0 + if (eapSelect->isEnabled()) { + const char *eap = + eapSelect->currentText().toAscii().constData(); + setNetworkParam(id, "eap", eap, false); + if (strcmp(eap, "SIM") == 0 || strcmp(eap, "AKA") == 0) + setNetworkParam(id, "pcsc", "", true); + else + setNetworkParam(id, "pcsc", "NULL", false); + } + + if (phase2Select->isEnabled()) { + QString eap = eapSelect->currentText(); + QString inner = phase2Select->currentText(); + char phase2[32]; + phase2[0] = '\0'; + if (eap.compare("PEAP") == 0) { + if (inner.startsWith("EAP-")) + snprintf(phase2, sizeof(phase2), "auth=%s", + inner.right(inner.size() - 4). + toAscii().constData()); + } else if (eap.compare("TTLS") == 0) { + if (inner.startsWith("EAP-")) + snprintf(phase2, sizeof(phase2), "autheap=%s", + inner.right(inner.size() - 4). + toAscii().constData()); + else + snprintf(phase2, sizeof(phase2), "auth=%s", + inner.toAscii().constData()); + } else if (eap.compare("FAST") == 0) { + const char *provisioning = NULL; + if (inner.startsWith("EAP-")) { + snprintf(phase2, sizeof(phase2), "auth=%s", + inner.right(inner.size() - 4). + toAscii().constData()); + provisioning = "fast_provisioning=2"; + } else if (inner.compare("GTC(auth) + MSCHAPv2(prov)") + == 0) { + snprintf(phase2, sizeof(phase2), + "auth=GTC auth=MSCHAPV2"); + provisioning = "fast_provisioning=1"; + } else + provisioning = "fast_provisioning=3"; + if (provisioning) { + char blob[32]; + setNetworkParam(id, "phase1", provisioning, + true); + snprintf(blob, sizeof(blob), + "blob://fast-pac-%d", id); + setNetworkParam(id, "pac_file", blob, true); + } + } + if (phase2[0]) + setNetworkParam(id, "phase2", phase2, true); + else + setNetworkParam(id, "phase2", "NULL", false); + } else + setNetworkParam(id, "phase2", "NULL", false); +#endif + setNetworkParam(id, "phase2", "NULL", false); +#if 0 + if (identityEdit->isEnabled() && identityEdit->text().length() > 0) + setNetworkParam(id, "identity", + identityEdit->text().toAscii().constData(), + true); + else + setNetworkParam(id, "identity", "NULL", false); +#endif + setNetworkParam(id, "identity", "NULL", false); + if (ui->passwordEdit->isEnabled() && ui->passwordEdit->text().length() > 0 && + strcmp(ui->passwordEdit->text().toAscii().constData(), + WPA_GUI_KEY_DATA) != 0) + setNetworkParam(id, "password", + ui->passwordEdit->text().toAscii().constData(), + true); + else if (ui->passwordEdit->text().length() == 0) + setNetworkParam(id, "password", "NULL", false); +#if 0 + if (cacertEdit->isEnabled() && cacertEdit->text().length() > 0) + setNetworkParam(id, "ca_cert", + cacertEdit->text().toAscii().constData(), + true); + else + setNetworkParam(id, "ca_cert", "NULL", false); + + writeWepKey(id, wep0Edit, 0); + writeWepKey(id, wep1Edit, 1); + writeWepKey(id, wep2Edit, 2); + writeWepKey(id, wep3Edit, 3); +#endif + setNetworkParam(id, "ca_cert", "NULL", false); + +#if 0 + if (wep0Radio->isEnabled() && wep0Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "0", false); + else if (wep1Radio->isEnabled() && wep1Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "1", false); + else if (wep2Radio->isEnabled() && wep2Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "2", false); + else if (wep3Radio->isEnabled() && wep3Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "3", false); + + if (idstrEdit->isEnabled() && idstrEdit->text().length() > 0) + setNetworkParam(id, "id_str", + idstrEdit->text().toAscii().constData(), + true); + else + setNetworkParam(id, "id_str", "NULL", false); +#endif + setNetworkParam(id, "id_str", "NULL", false); +#if 0 + if (prioritySpinBox->isEnabled()) { + QString prio; + prio = prio.setNum(prioritySpinBox->value()); + setNetworkParam(id, "priority", prio.toAscii().constData(), + false); + } +#endif + snprintf(cmd, sizeof(cmd), "ENABLE_NETWORK %d", id); + reply_len = sizeof(reply); + ctrlRequest(cmd, reply, &reply_len); + if (strncmp(reply, "OK", 2) != 0) { + QMessageBox::warning(this, "wpa_gui", + tr("Failed to enable " + "network in wpa_supplicant\n" + "configuration.")); + /* Network was added, so continue anyway */ + } + triggerUpdate(); + ctrlRequest("SAVE_CONFIG", reply, &reply_len); + + //close(); +} +void NetworkManager::authChanged(int sel) +{ + + ui->EncryptionSelect->setEnabled(sel != AUTH_NONE_OPEN && sel != AUTH_NONE_WEP && + sel != AUTH_NONE_WEP_SHARED); + ui->pskEdit->setEnabled(sel == AUTH_WPA_PSK || sel == AUTH_WPA2_PSK); + bool eap = sel == AUTH_IEEE8021X || sel == AUTH_WPA_EAP || + sel == AUTH_WPA2_EAP; + //eapSelect->setEnabled(eap); + //identityEdit->setEnabled(eap); + ui->passwordEdit->setEnabled(eap); + //cacertEdit->setEnabled(eap); + //phase2Select->setEnabled(eap); + //if (eap) + // eapChanged(eapSelect->currentIndex()); + + while (ui->EncryptionSelect->count()) + ui->EncryptionSelect->removeItem(0); + + if (sel == AUTH_NONE_OPEN || sel == AUTH_NONE_WEP || + sel == AUTH_NONE_WEP_SHARED || sel == AUTH_IEEE8021X) { + ui->EncryptionSelect->addItem("None"); + ui->EncryptionSelect->addItem("WEP"); + ui->EncryptionSelect->setCurrentIndex(sel == AUTH_NONE_OPEN ? 0 : 1); + } else { + ui->EncryptionSelect->addItem("TKIP"); + ui->EncryptionSelect->addItem("CCMP"); + ui->EncryptionSelect->setCurrentIndex((sel == AUTH_WPA2_PSK || + sel == AUTH_WPA2_EAP) ? 1 : 0); + } + //wepEnabled(sel == AUTH_NONE_WEP || sel == AUTH_NONE_WEP_SHARED); +} +void NetworkManager::selectNetwork( const QString & sel ) +{ + QString cmd(sel); + char reply[10]; + size_t reply_len = sizeof(reply); + + if (cmd.contains(QRegExp("^\\d+:"))) + cmd.truncate(cmd.indexOf(':')); + else + cmd = "any"; + cmd.prepend("SELECT_NETWORK "); + ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); + triggerUpdate(); +} +void NetworkManager::triggerUpdate() +{ + updateStatus(); + networkMayHaveChanged = true; + updateNetworks(); +} +void NetworkManager::ping() +{ + char buf[10]; + size_t len; + + if(wlanStartUpFailed) + return; + len = sizeof(buf) - 1; + if (ctrlRequest("PING", buf, &len) < 0) { + qDebug()<<"PING failed - trying to reconnect"; + if (openCtrlConnection(ctrl_iface) >= 0) { + qDebug()<<"Reconnected successfully"; + pingsToStatusUpdate = 0; + } + } + + pingsToStatusUpdate--; + if (pingsToStatusUpdate <= 0) { + updateStatus(); + updateNetworks(); + } + +#ifndef CONFIG_CTRL_IFACE_NAMED_PIPE + /* Use less frequent pings and status updates when the main window is + * hidden (running in taskbar). */ + int interval = isHidden() ? 20000 : 3000; + if (timer->interval() != interval) + timer->setInterval(interval); +#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ +} + +void NetworkManager::on_pushButtonConnect_pressed() +{ + on_pushButtonDisconnect_pressed(); + + char reply[10]; + size_t reply_len = sizeof(reply); + ctrlRequest("REASSOCIATE", reply, &reply_len); +} + +void NetworkManager::on_pushButtonDisconnect_pressed() +{ + char reply[10]; + size_t reply_len = sizeof(reply); + ctrlRequest("DISCONNECT", reply, &reply_len); +} + +void NetworkManager::on_scanSSIDSelect_activated(const QString &arg1) +{ + //if (openCtrlConnection(sel.toAscii().constData()) < 0) + // printf("Failed to open control connection to " + // "wpa_supplicant.\n"); + updateStatus(); + updateNetworks(); + QStringList networkString=scanResultMap[arg1]; + if(networkString.isEmpty()) + { + return; + } + // QString flags = sel->text(4); + QString flags = networkString.at(4); + int auth, encr = 0; + if (flags.indexOf("[WPA2-EAP") >= 0) + auth = AUTH_WPA2_EAP; + else if (flags.indexOf("[WPA-EAP") >= 0) + auth = AUTH_WPA_EAP; + else if (flags.indexOf("[WPA2-PSK") >= 0) + auth = AUTH_WPA2_PSK; + else if (flags.indexOf("[WPA-PSK") >= 0) + auth = AUTH_WPA_PSK; + else + auth = AUTH_NONE_OPEN; + + if (flags.indexOf("-CCMP") >= 0) + encr = 1; + else if (flags.indexOf("-TKIP") >= 0) + encr = 0; + else if (flags.indexOf("WEP") >= 0) { + encr = 1; + if (auth == AUTH_NONE_OPEN) + auth = AUTH_NONE_WEP; + } else + encr = 0; + + ui->authSelect->setCurrentIndex(auth); + authChanged(auth); + ui->EncryptionSelect->setCurrentIndex(encr); + + //wepEnabled(auth == AUTH_NONE_WEP); + + //getEapCapa(); + + //if (flags.indexOf("[WPS") >= 0) + // useWpsButton->setEnabled(true); + //bssid = sel.text(1); +} + + +void NetworkManager::on_pushButtonAddNetworkd_pressed() +{ + addNetwork(); +} + +void NetworkManager::removeNetwork() +{ + char reply[10], cmd[256]; + size_t reply_len; + int id; + if (QMessageBox::information( + this, "wpa_gui", + tr("This will permanently remove the network\n" + "from the configuration. Do you really want\n" + "to remove this network?"), + tr("Yes"), tr("No")) != 0) + return; + id = ui->networkSelect->currentIndex(); + snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %d", id); + reply_len = sizeof(reply); + ctrlRequest(cmd, reply, &reply_len); + if (strncmp(reply, "OK", 2) != 0) { + QMessageBox::warning(this, "wpa_gui", + tr("Failed to remove network from " + "wpa_supplicant\n" + "configuration.")); + } else { + triggerUpdate(); + ctrlRequest("SAVE_CONFIG", reply, &reply_len); + } +} + +void NetworkManager::on_pushButtonRemove_pressed() +{ + removeNetwork(); +} + + +void NetworkManager::on_GetJsonpushButton_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::question(this, tr("提示"),tr("是否去获取数据!"), QMessageBox::Ok | QMessageBox::Cancel); + if(ret != QMessageBox::Ok) + { + return; + } + +// qDebug()<<"on_GetJsonpushButton_clicked"; + QString str = "http://"; + //str += ui->SeverIP_lineEdit->text(); + QString ip_str; + ip_str = QString::number(sysPara->para.Json_IP[0]); + ip_str += "."; + ip_str += QString::number(sysPara->para.Json_IP[1]); + ip_str += "."; + ip_str += QString::number(sysPara->para.Json_IP[2]); + ip_str += "."; + ip_str += QString::number(sysPara->para.Json_IP[3]); + str += ip_str; + + str += ":"; + //str += ui->server_port_lineEdit->text(); + str +=QString::number(sysPara->para.Json_server_port); + + if(ui->TestradioButton->isChecked()){ +// qDebug()<<"get test value"; + // str += "/KLAPS/APSServer/ECode/GetProductUniqueCodeTest"; + str = "http://www.anhuikinglan.top:63025/KLAPS/APSServer/ECode/GetProductUniqueCodeTest"; + }else{ + str += "/KLAPS/APSServer/ECode/GetProductUniqueCode"; + } + + + //net_data->PrintNetGetData(str, ui->deviceID_lineEdit->text()); + net_data->PrintNetGetData(str, QString(sysPara->para.Json_device_code)); + ui->messege_info_label->setText(tr("获取数据中...")); +} + +void NetworkManager::onjson_timer_handler() +{ + static int count_time = 0; + + count_time++; + + ui->messege_info_label->setText( net_data->getMessege() ); + +// qDebug()<<"on_json_timer_handler"; + if(sysPara->para.totalProductCnt != 0 && sysPara->para.totalProductCnt >= sysPara->Get_JSON_DATA.ProductPlanQty){ + QString str = "http://"; + str += ui->SeverIP_lineEdit->text(); + str += ":"; + str += ui->server_port_lineEdit->text(); + + if(ui->TestradioButton->isChecked()){ + str += "/KLAPS/APSServer/ECode/UsedProductUniqueCodeTest"; + }else{ + str += "/KLAPS/APSServer/ECode/UsedProductUniqueCode"; + } + + net_data->PrintNetPostFinish(str); + sysPara->devOp->clearProductCnt(1 | 0x10 );// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + emit net_stopPrint(); + ui->messege_info_label->setText(tr("上报数据中...")); + + if(sysPara->Get_JSON_DATA.TaskSwitchingMode == 1){ + on_GetJsonpushButton_clicked(); + } + } + + if(count_time == 20){ + + count_time = 0; + QString str = "http://"; + str += ui->SeverIP_lineEdit->text(); + str += ":"; + str += ui->server_port_lineEdit->text(); + if(ui->TestradioButton->isChecked()){ + str += "/KLAPS/APSServer/ECode/SubmitEquipmentCurrentStateTest"; + }else{ + str += "/KLAPS/APSServer/ECode/SubmitEquipmentCurrentState"; + } + net_data->PrintNetPostFinish(str); + +// qDebug()<<"upload data"; + ui->messege_info_label->setText(tr("上报数据中...")); + + } + +} + +void NetworkManager::onjson_server_error() +{ +// ui->net_state_label->setText(tr("通信失败")); +// qDebug()<<"on_json_server_error"; +} + + + + +void NetworkManager::on_applicate_pushButton_clicked() +{ + QString ip_str = ui->SeverIP_lineEdit->text(); + QStringList ip_list = ip_str.split("."); + QString ip1,ip2,ip3,ip4; + + if (ip_list.size() < 4){ + QMessageBox::information(this,tr("提示"),tr("IP设置错误!")); + return; + } + ip1 = ip_list.at(0); + ip2 = ip_list.at(1); + ip3 = ip_list.at(2); + ip4 = ip_list.at(3); + + sysPara->para.Json_IP[0] = ip1.toInt(); + sysPara->para.Json_IP[1] = ip2.toInt(); + sysPara->para.Json_IP[2] = ip3.toInt(); + sysPara->para.Json_IP[3] = ip4.toInt(); + + if(sysPara->para.Json_IP[0] > 255 || sysPara->para.Json_IP[1] > 255 + ||sysPara->para.Json_IP[2] > 255 ||sysPara->para.Json_IP[3] > 255){ + QMessageBox::information(this,tr("提示"),tr("IP设置错误!")); + return; + } + +// strcpy(sysPara->para.Json_IP, std_str); + + //sysPara->para.Json_device_code = ui->deviceID_lineEdit->text().toInt(); + strncpy(sysPara->para.Json_device_code, ui->deviceID_lineEdit->text().toStdString().data(),sizeof(sysPara->para.Json_device_code)-1); + sysPara->para.Json_server_port = ui->server_port_lineEdit->text().toInt(); + + QMessageBox::information(this,tr("提示"),tr("应用成功")); +// qDebug()<<"Json_device_code="<para.Json_device_code +// <<"Json_server_port="<para.Json_server_port +// <<"sysPara->para.Json_IP="<para.Json_IP[0] << sysPara->para.Json_IP[1] +// <para.Json_IP[2]<para.Json_IP[3]; + + sysPara->saveParaToFile(); +} + +//void NetworkManager::on_checkBoxShortNet_clicked(bool checked) +//{ +// net_data->m_bShortNet = checked; +//} + +void NetworkManager::on_checkBoxRemoveDigitCode_clicked(bool checked) +{ + sysPara->para.isRemoveDigitCode = checked; + emit OpenNewFile(); +} + +void NetworkManager::on_checkBoxRemoveCode_clicked(bool checked) +{ + //emit VariablePositionChange(checked); + sysPara->para.isRemoveCode = checked; + //emit OpenNewFile(); +} + +void NetworkManager::on_radioButtonGetDataEnable_clicked(bool checked) +{ + sysPara->para.isEnableGetDataButton = checked; +} + +void NetworkManager::updateAuthorization(int auth) +{ + if(auth & AUTH_SUPER_USER2) + { + ui->GetJsonpushButton->show(); + ui->GetJsonpushButton->show(); + ui->messege_info_label->show(); + ui->label->show(); + ui->deviceID_lineEdit->show(); + ui->label_2->show(); + ui->SeverIP_lineEdit->show(); + ui->label_4->show(); + ui->server_port_lineEdit->show(); + ui->TestradioButton->show(); +// ui->checkBoxShortNet->show(); + ui->checkBoxRemoveDigitCode->show(); + ui->applicate_pushButton->show(); + ui->checkBoxRemoveCode->show(); + ui->radioButtonGetDataEnable->show(); + } + else + { + ui->GetJsonpushButton->hide(); + ui->GetJsonpushButton->hide(); + ui->messege_info_label->hide(); + ui->label->hide(); + ui->deviceID_lineEdit->hide(); + ui->label_2->hide(); + ui->SeverIP_lineEdit->hide(); + ui->label_4->hide(); + ui->server_port_lineEdit->hide(); + ui->TestradioButton->hide(); +// ui->checkBoxShortNet->hide(); + ui->checkBoxRemoveDigitCode->hide(); + ui->applicate_pushButton->hide(); + ui->checkBoxRemoveCode->hide(); + ui->radioButtonGetDataEnable->hide(); + //sysPara->para.isEnableGetDataButton = false; + } +} + +bool NetworkManager::setEth0StaticIP() +{ + const uint8_t ip3=192,ip2=168,ip1=0,ip0=66;//100+QDateTime::currentDateTime().time().second();//IP + const uint8_t /*ip3=192,ip2=168,ip1=1,ip0=66,*/lanGW0=1;//网关 + const uint8_t lanMask3=255,lanMask2=255,lanMask1=255,lanMask0=0;//子网掩码 + + // 静态IP + QFile netInterface("/etc/network/interfaces"); + netInterface.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate); + if (netInterface.isOpen()) { + QTextStream stream(&netInterface); + stream.seek(0); + stream << INTERFACE_OTHERS; + stream << " " <<"\n"; + stream << "# eth0 interfaces" <<"\n"; + stream << "auto eth0" <<"\n"; + stream << "iface eth0 inet static" <<"\n"; + stream << QString("address %1.%2.%3.%4").arg(ip3).arg(ip2).arg(ip1).arg(ip0) <<"\n"; + stream << QString("gateway %1.%2.%3.%4").arg(ip3).arg(ip2).arg(ip1).arg(lanGW0) <<"\n"; + stream << QString("netmask %1.%2.%3.%4").arg(lanMask3).arg(lanMask2).arg(lanMask1).arg(lanMask0) <<"\n"; + stream << " \n"; + netInterface.close(); + + QStringList argrList; + QString ipAddrStr(QString("%1.%2.%3.%4").arg(ip3).arg(ip2).arg(ip1).arg(ip0)); + QString netMaskStr(QString("%1.%2.%3.%4").arg(lanMask3).arg(lanMask2).arg(lanMask1).arg(lanMask0)); + argrList<< LANINTERFACE_NAME << ipAddrStr << "netmask" << netMaskStr; + + qDebug() << "setEth0StaticIP->set argu:" << argrList; + + QProcess process; + process.startDetached("/sbin/ifconfig", argrList); + return true; + } + else + { + const QFile::FileError eno=netInterface.error(); + qDebug()<<"打开网络设置文件失败,error="<status.bLanConfigManual && this->setEth0StaticIP()) + { + qDebug()<<"设置静态IP-完成"; + sysPara->status.bLanConfigManual=true; + updateSysStatusToUI(); + } + else + { + qDebug()<<"设置静态IP-失败"; + } +} + +/** + 只有返回全是0的地址才需要设置成192.168.0.66这个固定地址 + * @brief NetworkManager::getCurrentNetworkIP + * @return 返回当前机器的IP地址 + */ +QString NetworkManager::getCurrentNetworkIP()const +{ + QString cip("0.0.0.0"); + if(sysPara){ + QList list = QNetworkInterface::allInterfaces(); //QNetworkInterface::interfaceFromName(LANINTERFACE_NAME); + //获取所有网络接口的列表 + foreach(QNetworkInterface interface,list) + { + if(QString::compare(interface.name(), LANINTERFACE_NAME)==0) + { + QList entryList = interface.addressEntries(); + //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址 + foreach(QNetworkAddressEntry entry,entryList) + { + QStringList lanIpList = entry.ip().toString().split("."); + if (lanIpList.size() == 4) { + return QString("%1.%2.%3.%4").arg(lanIpList.at(0)).arg(lanIpList.at(1)).arg(lanIpList.at(2)).arg(lanIpList.at(3)); + } + return cip; + } + } + } + } + return cip; +} + diff --git a/Network/NetworkManager.h b/Network/NetworkManager.h new file mode 100644 index 0000000..46e3c7c --- /dev/null +++ b/Network/NetworkManager.h @@ -0,0 +1,143 @@ +#ifndef __NETWORKMANAGER_H__ +#define __NETWORKMANAGER_H__ +#include +#include +#include +#include +#include "ParaSettingUI.h" +#include "wpamsg.h" +#include +#include "myinclude.h" +#include "print_net.h" + +namespace Ui { +class NetworkManager; +} +enum { + AUTH_NONE_OPEN, + AUTH_NONE_WEP, + AUTH_NONE_WEP_SHARED, + AUTH_IEEE8021X, + AUTH_WPA_PSK, + AUTH_WPA_EAP, + AUTH_WPA2_PSK, + AUTH_WPA2_EAP +}; +struct ScanResult{ + char ssid[50]; + char bssid[50]; + char qual[20]; + char flags[80]; +}; + +#define WPA_GUI_KEY_DATA "[key is configured]" + +class NetworkManager : public QWidget,public ParaSettingUI +{ + Q_OBJECT +public: + explicit NetworkManager(QWidget *parent = 0); + ~NetworkManager(); + void bindSysPara(SysPara *sysPara); + void applyUIPara(); + void updateSysStatusToUI(); + void applyLanUIPara(void); + qint32 isIpv4Address(QString ip); + void updateAuthorization(int auth); +#if 1 +public slots: + virtual int ctrlRequest(const char *cmd, char *buf, size_t *buflen); + virtual void updateStatus(); + virtual void updateResults(); + virtual void updateNetworks(); + virtual void selectSSID( const QString & sel ); + virtual void selectNetwork( const QString & sel ); + virtual void scan(); + virtual void processMsg(char *msg); + //virtual void processCtrlReq(const char *req); + virtual void receiveMsgs(); + virtual int setNetworkParam(int id, const char *field, + const char *value, bool quote); + virtual void addNetwork(); + virtual void triggerUpdate(); + virtual void authChanged(int sel); + virtual void ping(); + virtual void removeNetwork(); +#endif + +Q_SIGNALS: + void updateJSONData(); + + void net_startPrint(); + void net_pausePrint(); + void net_stopPrint(); + void OpenNewFile(); +private slots: + void on_pushButtonSetIP_clicked(bool checked); + + void on_pushButtonSetCancel_clicked(bool checked); + + void on_pushButtonScan_pressed(); + + void on_pushButtonConnect_pressed(); + + void on_pushButtonDisconnect_pressed(); + + void on_scanSSIDSelect_activated(const QString &arg1); + + void on_pushButtonAddNetworkd_pressed(); + + void on_pushButtonRemove_pressed(); + + void on_GetJsonpushButton_clicked(); + + void onfinish_get_json(); + + void onjson_timer_handler(); + + void onjson_server_error(); + + void on_applicate_pushButton_clicked(); + void ShowNet_dataMessege(); + //void on_checkBoxShortNet_clicked(bool checked); + void on_checkBoxRemoveDigitCode_clicked(bool checked); + void on_checkBoxRemoveCode_clicked(bool checked); + void on_radioButtonGetDataEnable_clicked(bool checked); + void setEth0StaticIP_Thread(); +private: + Ui::NetworkManager *ui; + QProcess *processNetwork; + bool networkMayHaveChanged; + bool beSentScanCmd; + char *ctrl_iface; + int edit_network_id; + struct wpa_ctrl *ctrl_conn; + int pingsToStatusUpdate; + //WpaMsgList msgs; + char *ctrl_iface_dir; + struct wpa_ctrl *monitor_conn; + //UserDataRequest *udr; + QSocketNotifier *msgNotifier; + WpaMsgList msgs; + //struct ScanResult scanResult[30]; + QMap scanResultMap; + + PrintNet *net_data; + + int openCtrlConnection(const char *ifname); + QString wpaStateTranslate(char *state); + QString bssid; + QTimer *timer; + + QTimer *Json_timer; + bool Jsom_timer_stop; + + bool wlanStartUpFailed; + + bool Json_ip_init_done; + + bool setEth0StaticIP(); + QString getCurrentNetworkIP()const ; + +}; +#endif // __NETWORKMANAGER_H__ diff --git a/Network/NetworkManager.ui b/Network/NetworkManager.ui new file mode 100644 index 0000000..4865210 --- /dev/null +++ b/Network/NetworkManager.ui @@ -0,0 +1,827 @@ + + + NetworkManager + + + true + + + + 0 + 0 + 800 + 600 + + + + Form + + + + + + QLayout::SetDefaultConstraint + + + 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + + + + + + 0 + 37 + + + + 255 + + + 255 + + + + + + + + 0 + 0 + + + + 255 + + + 255 + + + + + + + + 0 + 0 + + + + 0 + + + 255 + + + 255 + + + + + + + + 0 + 0 + + + + 0 + + + 255 + + + 0 + + + + + + + + + WiFi: + + + + + + + Mask: + + + + + + + GW: + + + + + + + IP: + + + + + + + + + + + + + + IP: + + + + + + + + 0 + 0 + + + + Status: + + + + + + + + 0 + 37 + + + + 取消 + + + + + + + true + + + 主获取数据按钮 + + + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 0 + + + 255 + + + 0 + + + + + + + + 0 + 0 + + + + 255 + + + 0 + + + + + + + + 0 + 0 + + + + 0 + + + 255 + + + 0 + + + + + + + + 0 + 0 + + + + 0 + + + 254 + + + 1 + + + 0 + + + + + + + + + SSID: + + + + + + + 有线LAN + + + + + + + + + + + + + + + 0 + 37 + + + + 手动设定 + + + + + + + + 0 + 37 + + + + Disconnect + + + + + + + + + + 0 + 37 + + + + 255 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 255 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 255 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 255 + + + 1 + + + + + + + + + + + + + + 0 + 37 + + + + + 200 + 16777215 + + + + + Plaintext (open / no authentication) + + + + + Static WEP (no authentication) + + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + + + + + 0 + 37 + + + + + 200 + 16777215 + + + + QLineEdit::PasswordEchoOnEdit + + + + + + + 设备码: + + + + + + + Encryption: + + + + + + + 服务IP: + + + + + + + + 0 + 37 + + + + + 200 + 16777215 + + + + + None + + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + + + + + 0 + 0 + + + + 8754 + + + + + + + 服务端口: + + + + + + + PSK: + + + + + + + + 0 + 37 + + + + + 200 + 16777215 + + + + + + + + + 0 + 37 + + + + + 200 + 16777215 + + + + + + + + + 0 + 37 + + + + Connect + + + + + + + Password: + + + + + + + + 0 + 37 + + + + Scan + + + + + + + + 0 + 37 + + + + Remove + + + + + + + auth: + + + + + + + + 0 + 37 + + + + + 200 + 16777215 + + + + QLineEdit::PasswordEchoOnEdit + + + + + + + + 0 + 37 + + + + 获取数据 + + + + + + + ScanSSID + + + + + + + Network: + + + + + + + + 0 + 0 + + + + 1 + + + + + + + + 0 + 0 + + + + 47.111.170.144 + + + + + + + + 0 + 37 + + + + + 200 + 16777215 + + + + AddNetwork + + + + + + + + + + + + + + + 0 + 0 + + + + QRadioButton::indicator +{ + width: 30px; + height: 30px; +} + + + + + + + 测试 + + + false + + + + + + + + 0 + 37 + + + + 应用配置 + + + + + + + + 0 + 0 + + + + 去掉数字码 + + + + + + + + 0 + 0 + + + + 去掉QR码 + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/.gitignore b/Network/wpa_gui-qt4_/.gitignore new file mode 100644 index 0000000..da818cb --- /dev/null +++ b/Network/wpa_gui-qt4_/.gitignore @@ -0,0 +1,4 @@ +.moc +.obj +.ui +qrc_icons.cpp diff --git a/Network/wpa_gui-qt4_/addinterface.cpp b/Network/wpa_gui-qt4_/addinterface.cpp new file mode 100644 index 0000000..88d4603 --- /dev/null +++ b/Network/wpa_gui-qt4_/addinterface.cpp @@ -0,0 +1,245 @@ +/* + * wpa_gui - AddInterface class + * Copyright (c) 2008, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#include +#include "common/wpa_ctrl.h" + +#include + +#include "wpagui.h" +#include "addinterface.h" + +#ifdef CONFIG_NATIVE_WINDOWS +#include + +#ifndef WPA_KEY_ROOT +#define WPA_KEY_ROOT HKEY_LOCAL_MACHINE +#endif +#ifndef WPA_KEY_PREFIX +#define WPA_KEY_PREFIX TEXT("SOFTWARE\\wpa_supplicant") +#endif +#endif /* CONFIG_NATIVE_WINDOWS */ + + +AddInterface::AddInterface(WpaGui *_wpagui, QWidget *parent) + : QDialog(parent), wpagui(_wpagui) +{ + setWindowTitle(tr("Select network interface to add")); + resize(400, 200); + vboxLayout = new QVBoxLayout(this); + + interfaceWidget = new QTreeWidget(this); + interfaceWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); + interfaceWidget->setUniformRowHeights(true); + interfaceWidget->setSortingEnabled(true); + interfaceWidget->setColumnCount(3); + interfaceWidget->headerItem()->setText(0, tr("driver")); + interfaceWidget->headerItem()->setText(1, tr("interface")); + interfaceWidget->headerItem()->setText(2, tr("description")); + interfaceWidget->setItemsExpandable(FALSE); + interfaceWidget->setRootIsDecorated(FALSE); + vboxLayout->addWidget(interfaceWidget); + + connect(interfaceWidget, + SIGNAL(itemActivated(QTreeWidgetItem *, int)), this, + SLOT(interfaceSelected(QTreeWidgetItem *))); + + addInterfaces(); +} + + +void AddInterface::addInterfaces() +{ +#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE + struct wpa_ctrl *ctrl; + int ret; + char buf[2048]; + size_t len; + + ctrl = wpa_ctrl_open(NULL); + if (ctrl == NULL) + return; + + len = sizeof(buf) - 1; + ret = wpa_ctrl_request(ctrl, "INTERFACE_LIST", 14, buf, &len, NULL); + if (ret < 0) { + wpa_ctrl_close(ctrl); + return; + } + buf[len] = '\0'; + + wpa_ctrl_close(ctrl); + + QString ifaces(buf); + QStringList lines = ifaces.split(QRegExp("\\n")); + for (QStringList::Iterator it = lines.begin(); + it != lines.end(); it++) { + QStringList arg = (*it).split(QChar('\t')); + if (arg.size() < 3) + continue; + QTreeWidgetItem *item = new QTreeWidgetItem(interfaceWidget); + if (!item) + break; + + item->setText(0, arg[0]); + item->setText(1, arg[1]); + item->setText(2, arg[2]); + } + + interfaceWidget->resizeColumnToContents(0); + interfaceWidget->resizeColumnToContents(1); + interfaceWidget->resizeColumnToContents(2); +#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ +} + + +#ifdef CONFIG_NATIVE_WINDOWS +bool AddInterface::addRegistryInterface(const QString &ifname) +{ + HKEY hk, ihk; + LONG ret; + int id, tmp; + TCHAR name[10]; + DWORD val, i; + + ret = RegOpenKeyEx(WPA_KEY_ROOT, WPA_KEY_PREFIX TEXT("\\interfaces"), + 0, KEY_ENUMERATE_SUB_KEYS | KEY_CREATE_SUB_KEY, + &hk); + if (ret != ERROR_SUCCESS) + return false; + + id = -1; + + for (i = 0; ; i++) { + TCHAR name[255]; + DWORD namelen; + + namelen = 255; + ret = RegEnumKeyEx(hk, i, name, &namelen, NULL, NULL, NULL, + NULL); + + if (ret == ERROR_NO_MORE_ITEMS) + break; + + if (ret != ERROR_SUCCESS) + break; + + if (namelen >= 255) + namelen = 255 - 1; + name[namelen] = '\0'; + +#ifdef UNICODE + QString s((QChar *) name, namelen); +#else /* UNICODE */ + QString s(name); +#endif /* UNICODE */ + tmp = s.toInt(); + if (tmp > id) + id = tmp; + } + + id += 1; + +#ifdef UNICODE + wsprintf(name, L"%04d", id); +#else /* UNICODE */ + os_snprintf(name, sizeof(name), "%04d", id); +#endif /* UNICODE */ + ret = RegCreateKeyEx(hk, name, 0, NULL, 0, KEY_WRITE, NULL, &ihk, + NULL); + RegCloseKey(hk); + if (ret != ERROR_SUCCESS) + return false; + +#ifdef UNICODE + RegSetValueEx(ihk, TEXT("adapter"), 0, REG_SZ, + (LPBYTE) ifname.unicode(), + (ifname.length() + 1) * sizeof(TCHAR)); + +#else /* UNICODE */ + RegSetValueEx(ihk, TEXT("adapter"), 0, REG_SZ, + (LPBYTE) ifname.toLocal8Bit(), ifname.length() + 1); +#endif /* UNICODE */ + RegSetValueEx(ihk, TEXT("config"), 0, REG_SZ, + (LPBYTE) TEXT("default"), 8 * sizeof(TCHAR)); + RegSetValueEx(ihk, TEXT("ctrl_interface"), 0, REG_SZ, + (LPBYTE) TEXT(""), 1 * sizeof(TCHAR)); + val = 1; + RegSetValueEx(ihk, TEXT("skip_on_error"), 0, REG_DWORD, (LPBYTE) &val, + sizeof(val)); + + RegCloseKey(ihk); + return true; +} +#endif /* CONFIG_NATIVE_WINDOWS */ + + +void AddInterface::interfaceSelected(QTreeWidgetItem *sel) +{ + if (!sel) + return; + +#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE + struct wpa_ctrl *ctrl; + int ret; + char buf[20], cmd[256]; + size_t len; + + /* + * INTERFACE_ADD TABTABTABTAB + * TAB + */ + snprintf(cmd, sizeof(cmd), + "INTERFACE_ADD %s\t%s\t%s\t%s\t%s\t%s", + sel->text(1).toAscii().constData(), + "default", + sel->text(0).toAscii().constData(), + "yes", "", ""); + cmd[sizeof(cmd) - 1] = '\0'; + + ctrl = wpa_ctrl_open(NULL); + if (ctrl == NULL) + return; + + len = sizeof(buf) - 1; + ret = wpa_ctrl_request(ctrl, cmd, strlen(cmd), buf, &len, NULL); + wpa_ctrl_close(ctrl); + + if (ret < 0) { + QMessageBox::warning(this, "wpa_gui", + tr("Add interface command could not be " + "completed.")); + return; + } + + buf[len] = '\0'; + if (buf[0] != 'O' || buf[1] != 'K') { + QMessageBox::warning(this, "wpa_gui", + tr("Failed to add the interface.")); + return; + } + +#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ + +#ifdef CONFIG_NATIVE_WINDOWS + if (!addRegistryInterface(sel->text(1))) { + QMessageBox::information(this, "wpa_gui", + tr("Failed to add the interface into " + "registry.")); + } +#endif /* CONFIG_NATIVE_WINDOWS */ + + wpagui->selectAdapter(sel->text(1)); + close(); +} diff --git a/Network/wpa_gui-qt4_/addinterface.h b/Network/wpa_gui-qt4_/addinterface.h new file mode 100644 index 0000000..9d9476a --- /dev/null +++ b/Network/wpa_gui-qt4_/addinterface.h @@ -0,0 +1,45 @@ +/* + * wpa_gui - AddInterface class + * Copyright (c) 2008, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef ADDINTERFACE_H +#define ADDINTERFACE_H + +#include + +#include +#include +#include + +class WpaGui; + +class AddInterface : public QDialog +{ + Q_OBJECT + +public: + AddInterface(WpaGui *_wpagui, QWidget *parent = 0); + +public slots: + virtual void interfaceSelected(QTreeWidgetItem *sel); + +private: + void addInterfaces(); + bool addRegistryInterface(const QString &ifname); + + QVBoxLayout *vboxLayout; + QTreeWidget *interfaceWidget; + WpaGui *wpagui; +}; + +#endif /* ADDINTERFACE_H */ diff --git a/Network/wpa_gui-qt4_/eventhistory.cpp b/Network/wpa_gui-qt4_/eventhistory.cpp new file mode 100644 index 0000000..1eb0b7b --- /dev/null +++ b/Network/wpa_gui-qt4_/eventhistory.cpp @@ -0,0 +1,130 @@ +/* + * wpa_gui - EventHistory class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#include +#include + +#include "eventhistory.h" + + +int EventListModel::rowCount(const QModelIndex &) const +{ + return msgList.count(); +} + + +int EventListModel::columnCount(const QModelIndex &) const +{ + return 2; +} + + +QVariant EventListModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role == Qt::DisplayRole) + if (index.column() == 0) { + if (index.row() >= timeList.size()) + return QVariant(); + return timeList.at(index.row()); + } else { + if (index.row() >= msgList.size()) + return QVariant(); + return msgList.at(index.row()); + } + else + return QVariant(); +} + + +QVariant EventListModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) { + switch (section) { + case 0: + return QString(tr("Timestamp")); + case 1: + return QString(tr("Message")); + default: + return QVariant(); + } + } else + return QString("%1").arg(section); +} + + +void EventListModel::addEvent(QString time, QString msg) +{ + beginInsertRows(QModelIndex(), msgList.size(), msgList.size() + 1); + timeList << time; + msgList << msg; + endInsertRows(); +} + + +EventHistory::EventHistory(QWidget *parent, const char *, bool, Qt::WFlags) + : QDialog(parent) +{ + setupUi(this); + + connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + + eventListView->setItemsExpandable(FALSE); + eventListView->setRootIsDecorated(FALSE); + elm = new EventListModel(parent); + eventListView->setModel(elm); +} + + +EventHistory::~EventHistory() +{ + destroy(); + delete elm; +} + + +void EventHistory::languageChange() +{ + retranslateUi(this); +} + + +void EventHistory::addEvents(WpaMsgList msgs) +{ + WpaMsgList::iterator it; + for (it = msgs.begin(); it != msgs.end(); it++) + addEvent(*it); +} + + +void EventHistory::addEvent(WpaMsg msg) +{ + bool scroll = true; + + if (eventListView->verticalScrollBar()->value() < + eventListView->verticalScrollBar()->maximum()) + scroll = false; + + elm->addEvent(msg.getTimestamp().toString("yyyy-MM-dd hh:mm:ss.zzz"), + msg.getMsg()); + + if (scroll) + eventListView->scrollToBottom(); +} diff --git a/Network/wpa_gui-qt4_/eventhistory.h b/Network/wpa_gui-qt4_/eventhistory.h new file mode 100644 index 0000000..40dff6d --- /dev/null +++ b/Network/wpa_gui-qt4_/eventhistory.h @@ -0,0 +1,63 @@ +/* + * wpa_gui - EventHistory class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef EVENTHISTORY_H +#define EVENTHISTORY_H + +#include +#include "ui_eventhistory.h" + + +class EventListModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + EventListModel(QObject *parent = 0) + : QAbstractTableModel(parent) {} + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + void addEvent(QString time, QString msg); + +private: + QStringList timeList; + QStringList msgList; +}; + + +class EventHistory : public QDialog, public Ui::EventHistory +{ + Q_OBJECT + +public: + EventHistory(QWidget *parent = 0, const char *name = 0, + bool modal = false, Qt::WFlags fl = 0); + ~EventHistory(); + +public slots: + virtual void addEvents(WpaMsgList msgs); + virtual void addEvent(WpaMsg msg); + +protected slots: + virtual void languageChange(); + +private: + EventListModel *elm; +}; + +#endif /* EVENTHISTORY_H */ diff --git a/Network/wpa_gui-qt4_/eventhistory.ui b/Network/wpa_gui-qt4_/eventhistory.ui new file mode 100644 index 0000000..afe9149 --- /dev/null +++ b/Network/wpa_gui-qt4_/eventhistory.ui @@ -0,0 +1,61 @@ + + EventHistory + + + + 0 + 0 + 533 + 285 + + + + Event history + + + + + + + 0 + 0 + + + + Qt::ScrollBarAlwaysOn + + + QAbstractItemView::NoSelection + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + + + + + wpamsg.h + + + + diff --git a/Network/wpa_gui-qt4_/icons.qrc b/Network/wpa_gui-qt4_/icons.qrc new file mode 100644 index 0000000..dd72c7e --- /dev/null +++ b/Network/wpa_gui-qt4_/icons.qrc @@ -0,0 +1,9 @@ + + + icons/wpa_gui.svg + icons/ap.svg + icons/laptop.svg + icons/group.svg + icons/invitation.svg + + diff --git a/Network/wpa_gui-qt4_/icons/README b/Network/wpa_gui-qt4_/icons/README new file mode 100644 index 0000000..3953238 --- /dev/null +++ b/Network/wpa_gui-qt4_/icons/README @@ -0,0 +1,74 @@ +wpa_gui icon files + +To convert the svg icons to other formats, make sure inkscape and imagemagick +are installed and use `make' to create various sized png and xpm icons. + + +wpa_gui.svg +----------- + +Copyright (c) 2008 Bernard Gray + +The wpa_gui icon is licensed under the GPL version 2. Alternatively, the icon +may be distributed under the terms of BSD license. + + +ap.svg +------ + +mystica_Wireless_Router.svg + +http://openclipart.org/media/files/mystica/8390 +Wireless Router +by: mystica +last change: April 20, 2008 10:32 pm (File added) +date: April 20, 2008 10:31 pm +license: PD + + +laptop.svg +---------- + +metalmarious_Laptop.svg + +http://openclipart.org/media/files/metalmarious/4056 +Laptop +by: metalmarious +last change: May 18, 2008 07:04 pm (File added) +date: August 27, 2007 04:44 am +license: PD + + +group.svg +--------- + +http://www.openclipart.org/detail/25428 +http://www.openclipart.org/people/Anonymous/Anonymous_Network.svg +Uploader: + Anonymous +Drawn by: + Andrew Fitzsimon / Anonymous +Created: + 2009-04-29 04:07:37 +Description: + A network icon by Andrew Fitzsimon. Etiquette Icon set. + From 0.18 OCAL database. + +Public Domain + + + +invitation.svg +-------------- + +http://www.openclipart.org/detail/974 +http://www.openclipart.org/people/jean_victor_balin/jean_victor_balin_unknown_green.svg +Uploader: + jean_victor_balin +Drawn by: + jean_victor_balin +Created: + 2006-10-27 02:12:13 +Description: + +Public Domain diff --git a/Network/wpa_gui-qt4_/icons/ap.svg b/Network/wpa_gui-qt4_/icons/ap.svg new file mode 100644 index 0000000..51cc8ce --- /dev/null +++ b/Network/wpa_gui-qt4_/icons/ap.svg @@ -0,0 +1,832 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/icons/group.svg b/Network/wpa_gui-qt4_/icons/group.svg new file mode 100644 index 0000000..4ea959b --- /dev/null +++ b/Network/wpa_gui-qt4_/icons/group.svg @@ -0,0 +1,616 @@ + + + + + + + Etiquette Icons + + + + hash + + filesystem + computer + icons + + + + + Andy Fitzsimon + + + + + Andy Fitzsimon + + + + + Andy Fitzsimon + + + + image/svg+xml + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/icons/invitation.svg b/Network/wpa_gui-qt4_/icons/invitation.svg new file mode 100644 index 0000000..1a02d13 --- /dev/null +++ b/Network/wpa_gui-qt4_/icons/invitation.svg @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Green Unknown + 2005-11-01 + + + Jean-Victor Balin + + + jean.victor.balin@gmail.com + + + + icon + + + + + + + + + + + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/icons/laptop.svg b/Network/wpa_gui-qt4_/icons/laptop.svg new file mode 100644 index 0000000..06235f0 --- /dev/null +++ b/Network/wpa_gui-qt4_/icons/laptop.svg @@ -0,0 +1,1568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/icons/wpa_gui.svg b/Network/wpa_gui-qt4_/icons/wpa_gui.svg new file mode 100644 index 0000000..b3abf0a --- /dev/null +++ b/Network/wpa_gui-qt4_/icons/wpa_gui.svg @@ -0,0 +1,256 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/icons_png.qrc b/Network/wpa_gui-qt4_/icons_png.qrc new file mode 100644 index 0000000..9a30b7f --- /dev/null +++ b/Network/wpa_gui-qt4_/icons_png.qrc @@ -0,0 +1,9 @@ + + + icons/hicolor/16x16/apps/wpa_gui.png + icons/hicolor/32x32/apps/ap.png + icons/hicolor/32x32/apps/laptop.png + icons/hicolor/32x32/apps/group.png + icons/hicolor/32x32/apps/invitation.png + + diff --git a/Network/wpa_gui-qt4_/lang/.gitignore b/Network/wpa_gui-qt4_/lang/.gitignore new file mode 100644 index 0000000..8df47d5 --- /dev/null +++ b/Network/wpa_gui-qt4_/lang/.gitignore @@ -0,0 +1 @@ +*.qm diff --git a/Network/wpa_gui-qt4_/lang/wpa_gui_de.ts b/Network/wpa_gui-qt4_/lang/wpa_gui_de.ts new file mode 100644 index 0000000..d7a9c89 --- /dev/null +++ b/Network/wpa_gui-qt4_/lang/wpa_gui_de.ts @@ -0,0 +1,1262 @@ + + + + + AddInterface + + + Select network interface to add + Wähle die Netzwerkschnittstelle zum hinzufügen aus + + + + driver + Treiber + + + + interface + Schnittstelle + + + + description + Beschreibung + + + + Add interface command could not be completed. + Das Schnittstellen hinzufügen Kommando konnte nicht abgeschlossen werden. + + + + Failed to add the interface. + Fehler beim hinzufügen der Schnittstelle. + + + + Failed to add the interface into registry. + Fehler beim hinzufügen der Schnittstelle in die Registry. + + + + ErrorMsg + + + wpa_gui error + wpa_gui Fehler + + + + EventHistory + + + Event history + Ereignis Historie + + + + Close + Schließen + + + + EventListModel + + + Timestamp + Zeit + + + + Message + Meldung + + + + NetworkConfig + + + NetworkConfig + + + + + Cancel + Abbrechen + + + + SSID + SSID + + + + Network name (Service Set IDentifier) + Netzwerkname (Service Set IDentifier) + + + + Authentication + Authentifizierung + + + + Plaintext (open / no authentication) + Plaintext (offen / keine Authentifizierung) + + + + Static WEP (no authentication) + Static WEP (keine Authentifizierung) + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + Encryption + Verschlüsselung + + + + None + Keine + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + PSK + + + + + WPA/WPA2 pre-shared key or passphrase + WPA/WPA2 Pre-Shared Key oder Passphrase + + + + EAP method + EAP Verfahren + + + + Identity + Identität + + + + Username/Identity for EAP methods + Nutzername/Identitär für die EAP Verfahren + + + + Password + Passwort + + + + Password for EAP methods + Passwort für die EAP Verfahren + + + + CA certificate + CA Zertifikat + + + + WEP keys + WEP Schlüssel + + + + key 0 + Schlüssel 0 + + + + key 1 + Schlüssel 1 + + + + key 3 + Schlüssel 3 + + + + key 2 + Schlüssel 2 + + + + Optional Settings + Optionale Einstellungen + + + + Network Identification String + Netzwerk Indentifikations Zeichenfolge + + + + Network Priority + Netzwerk Priorität + + + + IDString + + + + + Priority + Priorität + + + + Inner auth + Geheime Auth + + + + Add + Hinzufügen + + + + Remove + Entfernen + + + + WPS + + + + + WPA Pre-Shared Key Error + WPA Pre Shared Key Fehler + + + + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + WPA PSK benötigt ein Passphrase mit 8 bis 63 Zeichen +oder 64 hexadezimal stelligen PSK + + + + Network ID Error + Netzwerk ID Fehler + + + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + Netzwerk ID Zeichnfolge beinhaltet ungültige Zeichen. +Es muss eine einfache Zeichnfolge aus [A-Za-z0-9_] ohne +Leerzeichen sein + + + + + Failed to add network to wpa_supplicant +configuration. + Hinzufügen des Netzwerks in die wpa_supplicant +Konfiguration fehlgeschlagen. + + + + Failed to enable network in wpa_supplicant +configuration. + Aktivieren des Netzwerks in der wpa_supplicant +Konfiguration fehlgeschlagen. + + + + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + Dies wird das Netzwerk permanent aus +der Konfiguration entfernen. Möchtest du +das Netzwerk wirklich entfernen? + + + + Yes + Ja + + + + No + Nein + + + + Failed to remove network from wpa_supplicant +configuration. + Entfernen des Netzwerks aus der wpa_supplicant +Konfiguration fehlgeschlagen. + + + + Peers + + + Peers + + + + + Associated station + Verbundene Stationen + + + + AP + + + + + WPS AP + + + + + WPS PIN needed + WPS PIN wird benötigt + + + + ER: WPS AP + + + + + ER: WPS AP (Unconfigured) + ER: WPS AP (nicht konfiguriert) + + + + ER: WPS Enrollee + + + + + WPS Enrollee + + + + + Enter WPS PIN + WPS PIN Eingabe + + + + Connect (PBC) + Verbinden (PBC) + + + + Enroll (PBC) + Anmelden (PBC) + + + + Learn Configuration + Konfiguration lernen + + + + Properties + Eigenschaften + + + + Refresh + Aktualisieren + + + + PIN: + + + + + PIN for + Pin für + + + + Failed to set the WPS PIN. + Setzten des WPS PIN fehlgeschlagen. + + + + Peer Properties + Peer Eigenschaften + + + + Name: + + + + + Address: + + + + + UUID: + + + + + Primary Device Type: + Primärer Geräte Typ: + + + + SSID: + + + + + Configuration Methods: + Konfigurationsverfahren: + + + + [USBA] + + + + + [Ethernet] + + + + + [Label] + + + + + [Display] + + + + + [Ext. NFC Token] + + + + + [Int. NFC Token] + + + + + [NFC Interface] + + + + + [Push Button] + + + + + [Keypad] + + + + + Device Password ID: + Geräte Passwort ID: + + + + (Default PIN) + + + + + (User-specified PIN) + + + + + (Machine-specified PIN) + + + + + (Rekey) + + + + + (Push Button) + + + + + (Registrar-specified) + + + + + Failed to start WPS PBC. + Starten von WPS PBC fehlgeschlagen. + + + + AP PIN: + + + + + AP PIN for + AP PIN für + + + + Failed to start learning AP configuration. + Fehler beim erkennen der AP Konfiguration. + + + + ScanResults + + + Scan results + Scan Ergebnisse + + + + SSID + + + + + BSSID + + + + + frequency + Frequenz + + + + signal + Signal + + + + flags + Flags + + + + Scan + Scannen + + + + Close + Schließen + + + + UserDataRequest + + + Authentication credentials required + Authentifzierungs Beglaubigung nötig + + + + &OK + + + + + &Cancel + + + + + Password: + Passwort: + + + + New password: + Neues Passwort: + + + + Identity: + Identität: + + + + Private key passphrase: + Privater Key Passphrase: + + + + WpaGui + + + wpa_gui + + + + + Adapter: + + + + + Network: + Netzwerk: + + + + Current Status + Aktueller Status + + + + + Status: + + + + + Last message: + Letzte Meldung: + + + + Authentication: + Authentifizierung: + + + + Encryption: + Verschlüsselung: + + + + SSID: + + + + + BSSID: + + + + + IP address: + IP Adresse: + + + + Connect + Verbinden + + + + Disconnect + Trennen + + + + + Scan + Scannen + + + + Manage Networks + Netzwerke verwalten + + + + Enabled + Aktiviert + + + + Edit + Bearbeiten + + + + Remove + Entfernen + + + + Disabled + Deaktiviert + + + + Add + Hinzufügen + + + + WPS + + + + + PBC - push button + PBC - Taste + + + + Generate PIN + PIN erzeugen + + + + PIN: + + + + + Use AP PIN + AP PIN verwenden + + + + AP PIN: + + + + + &File + &Datei + + + + &Network + &Netzwerk + + + + &Help + &Hilfe + + + + Event &History + Ereignis &Historie + + + + &Save Configuration + Konfiguration &Speichern + + + + Ctrl+S + + + + + E&xit + &Beenden + + + + Ctrl+Q + + + + + &Add + &Hinzufügen + + + + &Edit + &Bearbeiten + + + + &Remove + &Entfernen + + + + E&nable All + Alle &aktivieren + + + + &Disable All + Alle &deaktivieren + + + + Re&move All + Alle &entfernen + + + + &Contents... + &Inhalt... + + + + &Index... + + + + + &About + &Über + + + + &Wi-Fi Protected Setup + + + + + &Peers + + + + + Stop Service + Dienst stoppen + + + + Start Service + Dienst starten + + + + Add Interface + Schnittstelle hinzufügen + + + + connecting to wpa_supplicant + Verbindungsaufbau zu wpa_supplicant + + + + wpa_supplicant service is not running. +Do you want to start it? + wpa_supplicant ist nicht gestartet. +Möchtest du ihn starten? + + + + Disconnected + Getrennt + + + + Inactive + Inaktiv + + + + Scanning + Scannen + + + + Authenticating + Authentifizieren + + + + Associating + Assoziieren + + + + Associated + Assoziiert + + + + 4-Way Handshake + 4-Wege Handshake + + + + Group Handshake + Gruppen Handshake + + + + Completed + Abgeschlossen + + + + Unknown + Unbekannt + + + + Could not get status from wpa_supplicant + Status konnte nicht von wpa_supplicant abgerufen werden + + + + No network interfaces in use. +Would you like to add one? + Es ist keine Netzwerkschnittstelle in verwendung. +Möchtest du eine hinzufügen? + + + + + + + Select any network + Wähle beliebiges Netzwerk + + + + Disconnected from network. + Getrennt vom Netzwerk. + + + + Connection to network established. + Verbindung zum Netzwerk wurde aufgebaut. + + + + + WPS AP in active PBC mode found + WPS AP im aktiven PBC Modus gefunden + + + + Press the PBC button on the screen to start registration + Drücke den PBC Knopf auf dem Bildschirm um die Registrierung zu starten + + + + WPS AP with recently selected registrar + WPS AP mit kürzlich ausgewähltem Registrator + + + + WPS AP detected + WPS AP erkannt + + + + PBC mode overlap detected + PBC Modus Overlap erkannt + + + + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + Mehr als ein AP ist momentan im aktiven WPS PBC Modus. Versuch es in ein paar Minuten nochmal + + + + Network configuration received + Netzwerk Konfiguration empfangen + + + + Registration started + Registrierung gestartet + + + + Registrar does not yet know PIN + Registrator kennt den PIN noch nicht + + + + Registration failed + Registrierung fehlgeschlagen + + + + Registration succeeded + Registrierung erfolgreich + + + + + No Networks + Keine Netzwerke + + + + There are no networks to edit. + + Keine Netzwerke zum bearbeiten. + + + + + + Select A Network + Wähle ein Netzwerk + + + + Select a network from the list to edit it. + + Wähle ein Netzwerk aus der Liste zum bearbeiten. + + + + + There are no networks to remove. + + Es sind keine Netzwerke zum entfernen vorhanden. + + + + + Select a network from the list to remove it. + + Wähle ein Netzwerk aus der Liste zum entfernen. + + + + + Failed to save configuration + Speichern der Konfiguration fehlgeschlagen + + + + The configuration could not be saved. + +The update_config=1 configuration option +must be used for configuration saving to +be permitted. + + Die Konfiguration konnte nicht gespeichert werden. + +Die Einstellung update_config=1 muss gesetzt sein, +damit Konfigurationen gespeichert werden können. + + + + + Saved configuration + Konfiguration gespeichert + + + + The current configuration was saved. + + Die aktuelle Konfiguration wurde gespeichert. + + + + + - wpa_supplicant user interface + - wpa_supplicant Benutzerschnittstelle + + + + &Disconnect + &Trennen + + + + Re&connect + &Wiederverbinden + + + + &Event History + &Ereignis Historie + + + + Scan &Results + Scan E&rgebnisse + + + + S&tatus + + + + + &Show Window + &Fenster anzeigen + + + + &Hide Window + &Fenster ausblenden + + + + &Quit + &Beenden + + + + will keep running in the system tray. + wird weiterhin in der System Ablage laufen. + + + + systray + System Ablage + + + + The program will keep running in the system tray. + Das Programm wird weiterhin in der System Ablage laufen. + + + + Press the push button on the AP to start the PBC mode. + Drücke die Taste am AP um den PBC Modus zu starten. + + + + If you have not yet done so, press the push button on the AP to start the PBC mode. + Wenn Sie es noch nicht getan haben, so drücken Sie die Taste am AP um den PBC Modus zu starten. + + + + + Waiting for Registrar + Warte auf Registrator + + + + Enter the generated PIN into the Registrar (either the internal one in the AP or an external one). + Geben Sie den generierten PIN in der Registrierungsstelle ein (entweder der interne oder der externe im AP). + + + + WPS AP selected from scan results + WPS AP ausgewählt aus Scan Ergebnissen + + + + If you want to use an AP device PIN, e.g., from a label in the device, enter the eight digit AP PIN and click Use AP PIN button. + Wenn Sie einen AP Geräte PIN verwenden möchten, z.B.: von einem Aufkleber am Gerät, geben Sie denn acht stelligen AP PIN ein und klicken Sie auf den AP PIN Knopf. + + + + Waiting for AP/Enrollee + Warte auf AP/Bewerber + + + + Connected to the network + Verbunden zum Netzwerk + + + + Stopped + Gestoppt + + + + + OpenSCManager failed + OpenSCManager fehlgeschlagen + + + + + OpenService failed + OpenService fehlgeschlagen + + + + Failed to start wpa_supplicant service + Starten des wpa_supplicant Dienstes fehlgeschlagen + + + + Failed to stop wpa_supplicant service + Stoppen des wpa_supplicant Dienstes fehlgeschlagen + + + OpenSCManager failed: %d + + OpenSCManager fehlgeschlagen: %d + + + + OpenService failed: %d + + + OpenService fehlgeschlagen: %d + + + + + diff --git a/Network/wpa_gui-qt4_/main.cpp b/Network/wpa_gui-qt4_/main.cpp new file mode 100644 index 0000000..6170b15 --- /dev/null +++ b/Network/wpa_gui-qt4_/main.cpp @@ -0,0 +1,82 @@ +/* + * wpa_gui - Application startup + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifdef CONFIG_NATIVE_WINDOWS +#include +#endif /* CONFIG_NATIVE_WINDOWS */ +#include +#include +#include +#include "wpagui.h" + + +class WpaGuiApp : public QApplication +{ +public: + WpaGuiApp(int &argc, char **argv); + +#ifndef QT_NO_SESSIONMANAGER + virtual void saveState(QSessionManager &manager); +#endif + + WpaGui *w; +}; + +WpaGuiApp::WpaGuiApp(int &argc, char **argv) : QApplication(argc, argv) +{ +} + +#ifndef QT_NO_SESSIONMANAGER +void WpaGuiApp::saveState(QSessionManager &manager) +{ + QApplication::saveState(manager); + w->saveState(); +} +#endif + + +int main(int argc, char *argv[]) +{ + WpaGuiApp app(argc, argv); + QTranslator translator; + QString locale; + QString resourceDir; + int ret; + + locale = QLocale::system().name(); + resourceDir = QLibraryInfo::location(QLibraryInfo::TranslationsPath); + if (!translator.load("wpa_gui_" + locale, resourceDir)) + translator.load("wpa_gui_" + locale, "lang"); + app.installTranslator(&translator); + + WpaGui w(&app); + +#ifdef CONFIG_NATIVE_WINDOWS + WSADATA wsaData; + if (WSAStartup(MAKEWORD(2, 0), &wsaData)) { + /* printf("Could not find a usable WinSock.dll\n"); */ + return -1; + } +#endif /* CONFIG_NATIVE_WINDOWS */ + + app.w = &w; + + ret = app.exec(); + +#ifdef CONFIG_NATIVE_WINDOWS + WSACleanup(); +#endif /* CONFIG_NATIVE_WINDOWS */ + + return ret; +} diff --git a/Network/wpa_gui-qt4_/networkconfig.cpp b/Network/wpa_gui-qt4_/networkconfig.cpp new file mode 100644 index 0000000..fe50a8d --- /dev/null +++ b/Network/wpa_gui-qt4_/networkconfig.cpp @@ -0,0 +1,858 @@ +/* + * wpa_gui - NetworkConfig class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#include +#include + +#include "networkconfig.h" +#include "wpagui.h" + +enum { + AUTH_NONE_OPEN, + AUTH_NONE_WEP, + AUTH_NONE_WEP_SHARED, + AUTH_IEEE8021X, + AUTH_WPA_PSK, + AUTH_WPA_EAP, + AUTH_WPA2_PSK, + AUTH_WPA2_EAP +}; + +#define WPA_GUI_KEY_DATA "[key is configured]" + + +NetworkConfig::NetworkConfig(QWidget *parent, const char *, bool, Qt::WFlags) + : QDialog(parent) +{ + setupUi(this); + + encrSelect->setEnabled(false); + connect(authSelect, SIGNAL(activated(int)), this, + SLOT(authChanged(int))); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(close())); + connect(addButton, SIGNAL(clicked()), this, SLOT(addNetwork())); + connect(encrSelect, SIGNAL(activated(const QString &)), this, + SLOT(encrChanged(const QString &))); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeNetwork())); + connect(eapSelect, SIGNAL(activated(int)), this, + SLOT(eapChanged(int))); + connect(useWpsButton, SIGNAL(clicked()), this, SLOT(useWps())); + + wpagui = NULL; + new_network = false; +} + + +NetworkConfig::~NetworkConfig() +{ +} + + +void NetworkConfig::languageChange() +{ + retranslateUi(this); +} + + +void NetworkConfig::paramsFromScanResults(QTreeWidgetItem *sel) +{ + new_network = true; + + /* SSID BSSID frequency signal flags */ + setWindowTitle(sel->text(0)); + ssidEdit->setText(sel->text(0)); + + QString flags = sel->text(4); + int auth, encr = 0; + if (flags.indexOf("[WPA2-EAP") >= 0) + auth = AUTH_WPA2_EAP; + else if (flags.indexOf("[WPA-EAP") >= 0) + auth = AUTH_WPA_EAP; + else if (flags.indexOf("[WPA2-PSK") >= 0) + auth = AUTH_WPA2_PSK; + else if (flags.indexOf("[WPA-PSK") >= 0) + auth = AUTH_WPA_PSK; + else + auth = AUTH_NONE_OPEN; + + if (flags.indexOf("-CCMP") >= 0) + encr = 1; + else if (flags.indexOf("-TKIP") >= 0) + encr = 0; + else if (flags.indexOf("WEP") >= 0) { + encr = 1; + if (auth == AUTH_NONE_OPEN) + auth = AUTH_NONE_WEP; + } else + encr = 0; + + authSelect->setCurrentIndex(auth); + authChanged(auth); + encrSelect->setCurrentIndex(encr); + + wepEnabled(auth == AUTH_NONE_WEP); + + getEapCapa(); + + if (flags.indexOf("[WPS") >= 0) + useWpsButton->setEnabled(true); + bssid = sel->text(1); +} + + +void NetworkConfig::authChanged(int sel) +{ + encrSelect->setEnabled(sel != AUTH_NONE_OPEN && sel != AUTH_NONE_WEP && + sel != AUTH_NONE_WEP_SHARED); + pskEdit->setEnabled(sel == AUTH_WPA_PSK || sel == AUTH_WPA2_PSK); + bool eap = sel == AUTH_IEEE8021X || sel == AUTH_WPA_EAP || + sel == AUTH_WPA2_EAP; + eapSelect->setEnabled(eap); + identityEdit->setEnabled(eap); + passwordEdit->setEnabled(eap); + cacertEdit->setEnabled(eap); + phase2Select->setEnabled(eap); + if (eap) + eapChanged(eapSelect->currentIndex()); + + while (encrSelect->count()) + encrSelect->removeItem(0); + + if (sel == AUTH_NONE_OPEN || sel == AUTH_NONE_WEP || + sel == AUTH_NONE_WEP_SHARED || sel == AUTH_IEEE8021X) { + encrSelect->addItem("None"); + encrSelect->addItem("WEP"); + encrSelect->setCurrentIndex(sel == AUTH_NONE_OPEN ? 0 : 1); + } else { + encrSelect->addItem("TKIP"); + encrSelect->addItem("CCMP"); + encrSelect->setCurrentIndex((sel == AUTH_WPA2_PSK || + sel == AUTH_WPA2_EAP) ? 1 : 0); + } + + wepEnabled(sel == AUTH_NONE_WEP || sel == AUTH_NONE_WEP_SHARED); +} + + +void NetworkConfig::eapChanged(int sel) +{ + QString prev_val = phase2Select->currentText(); + while (phase2Select->count()) + phase2Select->removeItem(0); + + QStringList inner; + inner << "PEAP" << "TTLS" << "FAST"; + if (!inner.contains(eapSelect->itemText(sel))) + return; + + phase2Select->addItem("[ any ]"); + + /* Add special cases based on outer method */ + if (eapSelect->currentText().compare("TTLS") == 0) { + phase2Select->addItem("PAP"); + phase2Select->addItem("CHAP"); + phase2Select->addItem("MSCHAP"); + phase2Select->addItem("MSCHAPv2"); + } else if (eapSelect->currentText().compare("FAST") == 0) + phase2Select->addItem("GTC(auth) + MSCHAPv2(prov)"); + + /* Add all enabled EAP methods that can be used in the tunnel */ + int i; + QStringList allowed; + allowed << "MSCHAPV2" << "MD5" << "GTC" << "TLS" << "OTP" << "SIM" + << "AKA"; + for (i = 0; i < eapSelect->count(); i++) { + if (allowed.contains(eapSelect->itemText(i))) { + phase2Select->addItem("EAP-" + eapSelect->itemText(i)); + } + } + + for (i = 0; i < phase2Select->count(); i++) { + if (phase2Select->itemText(i).compare(prev_val) == 0) { + phase2Select->setCurrentIndex(i); + break; + } + } +} + + +void NetworkConfig::addNetwork() +{ + char reply[10], cmd[256]; + size_t reply_len; + int id; + int psklen = pskEdit->text().length(); + int auth = authSelect->currentIndex(); + + if (auth == AUTH_WPA_PSK || auth == AUTH_WPA2_PSK) { + if (psklen < 8 || psklen > 64) { + QMessageBox::warning( + this, + tr("WPA Pre-Shared Key Error"), + tr("WPA-PSK requires a passphrase of 8 to 63 " + "characters\n" + "or 64 hex digit PSK")); + pskEdit->setFocus(); + return; + } + } + + if (idstrEdit->isEnabled() && !idstrEdit->text().isEmpty()) { + QRegExp rx("^(\\w|-)+$"); + if (rx.indexIn(idstrEdit->text()) < 0) { + QMessageBox::warning( + this, tr("Network ID Error"), + tr("Network ID String contains non-word " + "characters.\n" + "It must be a simple string, " + "without spaces, containing\n" + "only characters in this range: " + "[A-Za-z0-9_-]\n")); + idstrEdit->setFocus(); + return; + } + } + + if (wpagui == NULL) + return; + + memset(reply, 0, sizeof(reply)); + reply_len = sizeof(reply) - 1; + + if (new_network) { + wpagui->ctrlRequest("ADD_NETWORK", reply, &reply_len); + if (reply[0] == 'F') { + QMessageBox::warning(this, "wpa_gui", + tr("Failed to add " + "network to wpa_supplicant\n" + "configuration.")); + return; + } + id = atoi(reply); + } else + id = edit_network_id; + + setNetworkParam(id, "ssid", ssidEdit->text().toAscii().constData(), + true); + + const char *key_mgmt = NULL, *proto = NULL, *pairwise = NULL; + switch (auth) { + case AUTH_NONE_OPEN: + case AUTH_NONE_WEP: + case AUTH_NONE_WEP_SHARED: + key_mgmt = "NONE"; + break; + case AUTH_IEEE8021X: + key_mgmt = "IEEE8021X"; + break; + case AUTH_WPA_PSK: + key_mgmt = "WPA-PSK"; + proto = "WPA"; + break; + case AUTH_WPA_EAP: + key_mgmt = "WPA-EAP"; + proto = "WPA"; + break; + case AUTH_WPA2_PSK: + key_mgmt = "WPA-PSK"; + proto = "WPA2"; + break; + case AUTH_WPA2_EAP: + key_mgmt = "WPA-EAP"; + proto = "WPA2"; + break; + } + + if (auth == AUTH_NONE_WEP_SHARED) + setNetworkParam(id, "auth_alg", "SHARED", false); + else + setNetworkParam(id, "auth_alg", "OPEN", false); + + if (auth == AUTH_WPA_PSK || auth == AUTH_WPA_EAP || + auth == AUTH_WPA2_PSK || auth == AUTH_WPA2_EAP) { + int encr = encrSelect->currentIndex(); + if (encr == 0) + pairwise = "TKIP"; + else + pairwise = "CCMP"; + } + + if (proto) + setNetworkParam(id, "proto", proto, false); + if (key_mgmt) + setNetworkParam(id, "key_mgmt", key_mgmt, false); + if (pairwise) { + setNetworkParam(id, "pairwise", pairwise, false); + setNetworkParam(id, "group", "TKIP CCMP WEP104 WEP40", false); + } + if (pskEdit->isEnabled() && + strcmp(pskEdit->text().toAscii().constData(), + WPA_GUI_KEY_DATA) != 0) + setNetworkParam(id, "psk", + pskEdit->text().toAscii().constData(), + psklen != 64); + if (eapSelect->isEnabled()) { + const char *eap = + eapSelect->currentText().toAscii().constData(); + setNetworkParam(id, "eap", eap, false); + if (strcmp(eap, "SIM") == 0 || strcmp(eap, "AKA") == 0) + setNetworkParam(id, "pcsc", "", true); + else + setNetworkParam(id, "pcsc", "NULL", false); + } + if (phase2Select->isEnabled()) { + QString eap = eapSelect->currentText(); + QString inner = phase2Select->currentText(); + char phase2[32]; + phase2[0] = '\0'; + if (eap.compare("PEAP") == 0) { + if (inner.startsWith("EAP-")) + snprintf(phase2, sizeof(phase2), "auth=%s", + inner.right(inner.size() - 4). + toAscii().constData()); + } else if (eap.compare("TTLS") == 0) { + if (inner.startsWith("EAP-")) + snprintf(phase2, sizeof(phase2), "autheap=%s", + inner.right(inner.size() - 4). + toAscii().constData()); + else + snprintf(phase2, sizeof(phase2), "auth=%s", + inner.toAscii().constData()); + } else if (eap.compare("FAST") == 0) { + const char *provisioning = NULL; + if (inner.startsWith("EAP-")) { + snprintf(phase2, sizeof(phase2), "auth=%s", + inner.right(inner.size() - 4). + toAscii().constData()); + provisioning = "fast_provisioning=2"; + } else if (inner.compare("GTC(auth) + MSCHAPv2(prov)") + == 0) { + snprintf(phase2, sizeof(phase2), + "auth=GTC auth=MSCHAPV2"); + provisioning = "fast_provisioning=1"; + } else + provisioning = "fast_provisioning=3"; + if (provisioning) { + char blob[32]; + setNetworkParam(id, "phase1", provisioning, + true); + snprintf(blob, sizeof(blob), + "blob://fast-pac-%d", id); + setNetworkParam(id, "pac_file", blob, true); + } + } + if (phase2[0]) + setNetworkParam(id, "phase2", phase2, true); + else + setNetworkParam(id, "phase2", "NULL", false); + } else + setNetworkParam(id, "phase2", "NULL", false); + if (identityEdit->isEnabled() && identityEdit->text().length() > 0) + setNetworkParam(id, "identity", + identityEdit->text().toAscii().constData(), + true); + else + setNetworkParam(id, "identity", "NULL", false); + if (passwordEdit->isEnabled() && passwordEdit->text().length() > 0 && + strcmp(passwordEdit->text().toAscii().constData(), + WPA_GUI_KEY_DATA) != 0) + setNetworkParam(id, "password", + passwordEdit->text().toAscii().constData(), + true); + else if (passwordEdit->text().length() == 0) + setNetworkParam(id, "password", "NULL", false); + if (cacertEdit->isEnabled() && cacertEdit->text().length() > 0) + setNetworkParam(id, "ca_cert", + cacertEdit->text().toAscii().constData(), + true); + else + setNetworkParam(id, "ca_cert", "NULL", false); + writeWepKey(id, wep0Edit, 0); + writeWepKey(id, wep1Edit, 1); + writeWepKey(id, wep2Edit, 2); + writeWepKey(id, wep3Edit, 3); + + if (wep0Radio->isEnabled() && wep0Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "0", false); + else if (wep1Radio->isEnabled() && wep1Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "1", false); + else if (wep2Radio->isEnabled() && wep2Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "2", false); + else if (wep3Radio->isEnabled() && wep3Radio->isChecked()) + setNetworkParam(id, "wep_tx_keyidx", "3", false); + + if (idstrEdit->isEnabled() && idstrEdit->text().length() > 0) + setNetworkParam(id, "id_str", + idstrEdit->text().toAscii().constData(), + true); + else + setNetworkParam(id, "id_str", "NULL", false); + + if (prioritySpinBox->isEnabled()) { + QString prio; + prio = prio.setNum(prioritySpinBox->value()); + setNetworkParam(id, "priority", prio.toAscii().constData(), + false); + } + + snprintf(cmd, sizeof(cmd), "ENABLE_NETWORK %d", id); + reply_len = sizeof(reply); + wpagui->ctrlRequest(cmd, reply, &reply_len); + if (strncmp(reply, "OK", 2) != 0) { + QMessageBox::warning(this, "wpa_gui", + tr("Failed to enable " + "network in wpa_supplicant\n" + "configuration.")); + /* Network was added, so continue anyway */ + } + wpagui->triggerUpdate(); + wpagui->ctrlRequest("SAVE_CONFIG", reply, &reply_len); + + close(); +} + + +void NetworkConfig::setWpaGui(WpaGui *_wpagui) +{ + wpagui = _wpagui; +} + + +int NetworkConfig::setNetworkParam(int id, const char *field, + const char *value, bool quote) +{ + char reply[10], cmd[256]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "SET_NETWORK %d %s %s%s%s", + id, field, quote ? "\"" : "", value, quote ? "\"" : ""); + reply_len = sizeof(reply); + wpagui->ctrlRequest(cmd, reply, &reply_len); + return strncmp(reply, "OK", 2) == 0 ? 0 : -1; +} + + +void NetworkConfig::encrChanged(const QString &) +{ +} + + +void NetworkConfig::wepEnabled(bool enabled) +{ + wep0Edit->setEnabled(enabled); + wep1Edit->setEnabled(enabled); + wep2Edit->setEnabled(enabled); + wep3Edit->setEnabled(enabled); + wep0Radio->setEnabled(enabled); + wep1Radio->setEnabled(enabled); + wep2Radio->setEnabled(enabled); + wep3Radio->setEnabled(enabled); +} + + +void NetworkConfig::writeWepKey(int network_id, QLineEdit *edit, int id) +{ + char buf[10]; + bool hex; + const char *txt, *pos; + size_t len; + + if (!edit->isEnabled() || edit->text().isEmpty()) + return; + + /* + * Assume hex key if only hex characters are present and length matches + * with 40, 104, or 128-bit key + */ + txt = edit->text().toAscii().constData(); + if (strcmp(txt, WPA_GUI_KEY_DATA) == 0) + return; + len = strlen(txt); + if (len == 0) + return; + pos = txt; + hex = true; + while (*pos) { + if (!((*pos >= '0' && *pos <= '9') || + (*pos >= 'a' && *pos <= 'f') || + (*pos >= 'A' && *pos <= 'F'))) { + hex = false; + break; + } + pos++; + } + if (hex && len != 10 && len != 26 && len != 32) + hex = false; + snprintf(buf, sizeof(buf), "wep_key%d", id); + setNetworkParam(network_id, buf, txt, !hex); +} + + +static int key_value_isset(const char *reply, size_t reply_len) +{ + return reply_len > 0 && (reply_len < 4 || memcmp(reply, "FAIL", 4) != 0); +} + + +void NetworkConfig::paramsFromConfig(int network_id) +{ + int i, res; + + edit_network_id = network_id; + getEapCapa(); + + char reply[1024], cmd[256], *pos; + size_t reply_len; + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ssid", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && + reply_len >= 2 && reply[0] == '"') { + reply[reply_len] = '\0'; + pos = strchr(reply + 1, '"'); + if (pos) + *pos = '\0'; + ssidEdit->setText(reply + 1); + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d proto", network_id); + reply_len = sizeof(reply) - 1; + int wpa = 0; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { + reply[reply_len] = '\0'; + if (strstr(reply, "RSN") || strstr(reply, "WPA2")) + wpa = 2; + else if (strstr(reply, "WPA")) + wpa = 1; + } + + int auth = AUTH_NONE_OPEN, encr = 0; + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d key_mgmt", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { + reply[reply_len] = '\0'; + if (strstr(reply, "WPA-EAP")) + auth = wpa & 2 ? AUTH_WPA2_EAP : AUTH_WPA_EAP; + else if (strstr(reply, "WPA-PSK")) + auth = wpa & 2 ? AUTH_WPA2_PSK : AUTH_WPA_PSK; + else if (strstr(reply, "IEEE8021X")) { + auth = AUTH_IEEE8021X; + encr = 1; + } + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d pairwise", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { + reply[reply_len] = '\0'; + if (strstr(reply, "CCMP") && auth != AUTH_NONE_OPEN && + auth != AUTH_NONE_WEP && auth != AUTH_NONE_WEP_SHARED) + encr = 1; + else if (strstr(reply, "TKIP")) + encr = 0; + else if (strstr(reply, "WEP")) + encr = 1; + else + encr = 0; + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d psk", network_id); + reply_len = sizeof(reply) - 1; + res = wpagui->ctrlRequest(cmd, reply, &reply_len); + if (res >= 0 && reply_len >= 2 && reply[0] == '"') { + reply[reply_len] = '\0'; + pos = strchr(reply + 1, '"'); + if (pos) + *pos = '\0'; + pskEdit->setText(reply + 1); + } else if (res >= 0 && key_value_isset(reply, reply_len)) { + pskEdit->setText(WPA_GUI_KEY_DATA); + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d identity", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && + reply_len >= 2 && reply[0] == '"') { + reply[reply_len] = '\0'; + pos = strchr(reply + 1, '"'); + if (pos) + *pos = '\0'; + identityEdit->setText(reply + 1); + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d password", network_id); + reply_len = sizeof(reply) - 1; + res = wpagui->ctrlRequest(cmd, reply, &reply_len); + if (res >= 0 && reply_len >= 2 && reply[0] == '"') { + reply[reply_len] = '\0'; + pos = strchr(reply + 1, '"'); + if (pos) + *pos = '\0'; + passwordEdit->setText(reply + 1); + } else if (res >= 0 && key_value_isset(reply, reply_len)) { + passwordEdit->setText(WPA_GUI_KEY_DATA); + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ca_cert", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && + reply_len >= 2 && reply[0] == '"') { + reply[reply_len] = '\0'; + pos = strchr(reply + 1, '"'); + if (pos) + *pos = '\0'; + cacertEdit->setText(reply + 1); + } + + enum { NO_INNER, PEAP_INNER, TTLS_INNER, FAST_INNER } eap = NO_INNER; + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d eap", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && + reply_len >= 1) { + reply[reply_len] = '\0'; + for (i = 0; i < eapSelect->count(); i++) { + if (eapSelect->itemText(i).compare(reply) == 0) { + eapSelect->setCurrentIndex(i); + if (strcmp(reply, "PEAP") == 0) + eap = PEAP_INNER; + else if (strcmp(reply, "TTLS") == 0) + eap = TTLS_INNER; + else if (strcmp(reply, "FAST") == 0) + eap = FAST_INNER; + break; + } + } + } + + if (eap != NO_INNER) { + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d phase2", + network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && + reply_len >= 1) { + reply[reply_len] = '\0'; + eapChanged(eapSelect->currentIndex()); + } else + eap = NO_INNER; + } + + char *val; + val = reply + 1; + while (*(val + 1)) + val++; + if (*val == '"') + *val = '\0'; + + switch (eap) { + case PEAP_INNER: + if (strncmp(reply, "\"auth=", 6)) + break; + val = reply + 2; + memcpy(val, "EAP-", 4); + break; + case TTLS_INNER: + if (strncmp(reply, "\"autheap=", 9) == 0) { + val = reply + 5; + memcpy(val, "EAP-", 4); + } else if (strncmp(reply, "\"auth=", 6) == 0) + val = reply + 6; + break; + case FAST_INNER: + if (strncmp(reply, "\"auth=", 6)) + break; + if (strcmp(reply + 6, "GTC auth=MSCHAPV2") == 0) { + val = (char *) "GTC(auth) + MSCHAPv2(prov)"; + break; + } + val = reply + 2; + memcpy(val, "EAP-", 4); + break; + case NO_INNER: + break; + } + + for (i = 0; i < phase2Select->count(); i++) { + if (phase2Select->itemText(i).compare(val) == 0) { + phase2Select->setCurrentIndex(i); + break; + } + } + + for (i = 0; i < 4; i++) { + QLineEdit *wepEdit; + switch (i) { + default: + case 0: + wepEdit = wep0Edit; + break; + case 1: + wepEdit = wep1Edit; + break; + case 2: + wepEdit = wep2Edit; + break; + case 3: + wepEdit = wep3Edit; + break; + } + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_key%d", + network_id, i); + reply_len = sizeof(reply) - 1; + res = wpagui->ctrlRequest(cmd, reply, &reply_len); + if (res >= 0 && reply_len >= 2 && reply[0] == '"') { + reply[reply_len] = '\0'; + pos = strchr(reply + 1, '"'); + if (pos) + *pos = '\0'; + if (auth == AUTH_NONE_OPEN || auth == AUTH_IEEE8021X) { + if (auth == AUTH_NONE_OPEN) + auth = AUTH_NONE_WEP; + encr = 1; + } + + wepEdit->setText(reply + 1); + } else if (res >= 0 && key_value_isset(reply, reply_len)) { + if (auth == AUTH_NONE_OPEN || auth == AUTH_IEEE8021X) { + if (auth == AUTH_NONE_OPEN) + auth = AUTH_NONE_WEP; + encr = 1; + } + wepEdit->setText(WPA_GUI_KEY_DATA); + } + } + + if (auth == AUTH_NONE_WEP) { + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d auth_alg", + network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0) { + reply[reply_len] = '\0'; + if (strcmp(reply, "SHARED") == 0) + auth = AUTH_NONE_WEP_SHARED; + } + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d wep_tx_keyidx", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) + { + reply[reply_len] = '\0'; + switch (atoi(reply)) { + case 0: + wep0Radio->setChecked(true); + break; + case 1: + wep1Radio->setChecked(true); + break; + case 2: + wep2Radio->setChecked(true); + break; + case 3: + wep3Radio->setChecked(true); + break; + } + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d id_str", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && + reply_len >= 2 && reply[0] == '"') { + reply[reply_len] = '\0'; + pos = strchr(reply + 1, '"'); + if (pos) + *pos = '\0'; + idstrEdit->setText(reply + 1); + } + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d priority", network_id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) >= 0 && reply_len >= 1) + { + reply[reply_len] = '\0'; + prioritySpinBox->setValue(atoi(reply)); + } + + authSelect->setCurrentIndex(auth); + authChanged(auth); + encrSelect->setCurrentIndex(encr); + wepEnabled(auth == AUTH_NONE_WEP || auth == AUTH_NONE_WEP_SHARED); + + removeButton->setEnabled(true); + addButton->setText("Save"); +} + + +void NetworkConfig::removeNetwork() +{ + char reply[10], cmd[256]; + size_t reply_len; + + if (QMessageBox::information( + this, "wpa_gui", + tr("This will permanently remove the network\n" + "from the configuration. Do you really want\n" + "to remove this network?"), + tr("Yes"), tr("No")) != 0) + return; + + snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %d", edit_network_id); + reply_len = sizeof(reply); + wpagui->ctrlRequest(cmd, reply, &reply_len); + if (strncmp(reply, "OK", 2) != 0) { + QMessageBox::warning(this, "wpa_gui", + tr("Failed to remove network from " + "wpa_supplicant\n" + "configuration.")); + } else { + wpagui->triggerUpdate(); + wpagui->ctrlRequest("SAVE_CONFIG", reply, &reply_len); + } + + close(); +} + + +void NetworkConfig::newNetwork() +{ + new_network = true; + getEapCapa(); +} + + +void NetworkConfig::getEapCapa() +{ + char reply[256]; + size_t reply_len; + + if (wpagui == NULL) + return; + + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest("GET_CAPABILITY eap", reply, &reply_len) < 0) + return; + reply[reply_len] = '\0'; + + QString res(reply); + QStringList types = res.split(QChar(' ')); + eapSelect->insertItems(-1, types); +} + + +void NetworkConfig::useWps() +{ + if (wpagui == NULL) + return; + wpagui->setBssFromScan(bssid); + wpagui->wpsDialog(); + close(); +} diff --git a/Network/wpa_gui-qt4_/networkconfig.h b/Network/wpa_gui-qt4_/networkconfig.h new file mode 100644 index 0000000..0ceeb41 --- /dev/null +++ b/Network/wpa_gui-qt4_/networkconfig.h @@ -0,0 +1,61 @@ +/* + * wpa_gui - NetworkConfig class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef NETWORKCONFIG_H +#define NETWORKCONFIG_H + +#include +#include "ui_networkconfig.h" + +class WpaGui; + +class NetworkConfig : public QDialog, public Ui::NetworkConfig +{ + Q_OBJECT + +public: + NetworkConfig(QWidget *parent = 0, const char *name = 0, + bool modal = false, Qt::WFlags fl = 0); + ~NetworkConfig(); + + virtual void paramsFromScanResults(QTreeWidgetItem *sel); + virtual void setWpaGui(WpaGui *_wpagui); + virtual int setNetworkParam(int id, const char *field, + const char *value, bool quote); + virtual void paramsFromConfig(int network_id); + virtual void newNetwork(); + +public slots: + virtual void authChanged(int sel); + virtual void addNetwork(); + virtual void encrChanged(const QString &sel); + virtual void writeWepKey(int network_id, QLineEdit *edit, int id); + virtual void removeNetwork(); + virtual void eapChanged(int sel); + virtual void useWps(); + +protected slots: + virtual void languageChange(); + +private: + WpaGui *wpagui; + int edit_network_id; + bool new_network; + QString bssid; + + virtual void wepEnabled(bool enabled); + virtual void getEapCapa(); +}; + +#endif /* NETWORKCONFIG_H */ diff --git a/Network/wpa_gui-qt4_/networkconfig.ui b/Network/wpa_gui-qt4_/networkconfig.ui new file mode 100644 index 0000000..217a8ff --- /dev/null +++ b/Network/wpa_gui-qt4_/networkconfig.ui @@ -0,0 +1,435 @@ + + NetworkConfig + + + + 0 + 0 + 410 + 534 + + + + NetworkConfig + + + + + + Cancel + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + SSID + + + + + + + Network name (Service Set IDentifier) + + + + + + + + + + Authentication + + + + + + + + Plaintext (open / no authentication) + + + + + Static WEP (no authentication) + + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + + + + Encryption + + + + + + + + None + + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + + + + PSK + + + + + + + false + + + WPA/WPA2 pre-shared key or passphrase + + + + + + QLineEdit::Password + + + + + + + EAP method + + + + + + + false + + + + + + + Identity + + + + + + + false + + + Username/Identity for EAP methods + + + + + + + Password + + + + + + + false + + + Password for EAP methods + + + QLineEdit::Password + + + + + + + CA certificate + + + + + + + false + + + + + + + true + + + WEP keys + + + + + + false + + + key 0 + + + + + + + false + + + key 1 + + + + + + + false + + + key 3 + + + + + + + false + + + key 2 + + + + + + + false + + + + + + + false + + + + + + + false + + + + + + + false + + + + + + + + + + true + + + Optional Settings + + + + + + Network Identification String + + + + + + + Network Priority + + + 10000 + + + 10 + + + + + + + IDString + + + + + + + Priority + + + + + + + Inner auth + + + + + + + false + + + + + + + + + + + + + Add + + + + + + + false + + + Remove + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + false + + + WPS + + + + + + + + + ssidEdit + authSelect + encrSelect + pskEdit + eapSelect + identityEdit + passwordEdit + cacertEdit + wep0Radio + wep0Edit + wep1Radio + wep1Edit + wep2Radio + wep2Edit + wep3Radio + wep3Edit + idstrEdit + prioritySpinBox + phase2Select + addButton + removeButton + cancelButton + + + qtreewidget.h + + + + diff --git a/Network/wpa_gui-qt4_/peers.cpp b/Network/wpa_gui-qt4_/peers.cpp new file mode 100644 index 0000000..65bb17d --- /dev/null +++ b/Network/wpa_gui-qt4_/peers.cpp @@ -0,0 +1,1889 @@ +/* + * wpa_gui - Peers class + * Copyright (c) 2009-2010, Atheros Communications + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#include +#include +#include + +#include "common/wpa_ctrl.h" +#include "wpagui.h" +#include "stringquery.h" +#include "peers.h" + + +enum { + peer_role_address = Qt::UserRole + 1, + peer_role_type, + peer_role_uuid, + peer_role_details, + peer_role_ifname, + peer_role_pri_dev_type, + peer_role_ssid, + peer_role_config_methods, + peer_role_dev_passwd_id, + peer_role_bss_id, + peer_role_selected_method, + peer_role_selected_pin, + peer_role_requested_method, + peer_role_network_id +}; + +enum selected_method { + SEL_METHOD_NONE, + SEL_METHOD_PIN_PEER_DISPLAY, + SEL_METHOD_PIN_LOCAL_DISPLAY +}; + +/* + * TODO: + * - add current AP info (e.g., from WPS) in station mode + */ + +enum peer_type { + PEER_TYPE_ASSOCIATED_STATION, + PEER_TYPE_AP, + PEER_TYPE_AP_WPS, + PEER_TYPE_WPS_PIN_NEEDED, + PEER_TYPE_P2P, + PEER_TYPE_P2P_CLIENT, + PEER_TYPE_P2P_GROUP, + PEER_TYPE_P2P_PERSISTENT_GROUP_GO, + PEER_TYPE_P2P_PERSISTENT_GROUP_CLIENT, + PEER_TYPE_P2P_INVITATION, + PEER_TYPE_WPS_ER_AP, + PEER_TYPE_WPS_ER_AP_UNCONFIGURED, + PEER_TYPE_WPS_ER_ENROLLEE, + PEER_TYPE_WPS_ENROLLEE +}; + + +Peers::Peers(QWidget *parent, const char *, bool, Qt::WFlags) + : QDialog(parent) +{ + setupUi(this); + + if (QImageReader::supportedImageFormats().contains(QByteArray("svg"))) + { + default_icon = new QIcon(":/icons/wpa_gui.svg"); + ap_icon = new QIcon(":/icons/ap.svg"); + laptop_icon = new QIcon(":/icons/laptop.svg"); + group_icon = new QIcon(":/icons/group.svg"); + invitation_icon = new QIcon(":/icons/invitation.svg"); + } else { + default_icon = new QIcon(":/icons/wpa_gui.png"); + ap_icon = new QIcon(":/icons/ap.png"); + laptop_icon = new QIcon(":/icons/laptop.png"); + group_icon = new QIcon(":/icons/group.png"); + invitation_icon = new QIcon(":/icons/invitation.png"); + } + + peers->setModel(&model); + peers->setResizeMode(QListView::Adjust); + peers->setDragEnabled(false); + peers->setSelectionMode(QAbstractItemView::NoSelection); + + peers->setContextMenuPolicy(Qt::CustomContextMenu); + connect(peers, SIGNAL(customContextMenuRequested(const QPoint &)), + this, SLOT(context_menu(const QPoint &))); + + wpagui = NULL; + hide_ap = false; +} + + +void Peers::setWpaGui(WpaGui *_wpagui) +{ + wpagui = _wpagui; + update_peers(); +} + + +Peers::~Peers() +{ + delete default_icon; + delete ap_icon; + delete laptop_icon; + delete group_icon; + delete invitation_icon; +} + + +void Peers::languageChange() +{ + retranslateUi(this); +} + + +QString Peers::ItemType(int type) +{ + QString title; + switch (type) { + case PEER_TYPE_ASSOCIATED_STATION: + title = tr("Associated station"); + break; + case PEER_TYPE_AP: + title = tr("AP"); + break; + case PEER_TYPE_AP_WPS: + title = tr("WPS AP"); + break; + case PEER_TYPE_WPS_PIN_NEEDED: + title = tr("WPS PIN needed"); + break; + case PEER_TYPE_P2P: + title = tr("P2P Device"); + break; + case PEER_TYPE_P2P_CLIENT: + title = tr("P2P Device (group client)"); + break; + case PEER_TYPE_P2P_GROUP: + title = tr("P2P Group"); + break; + case PEER_TYPE_P2P_PERSISTENT_GROUP_GO: + title = tr("P2P Persistent Group (GO)"); + break; + case PEER_TYPE_P2P_PERSISTENT_GROUP_CLIENT: + title = tr("P2P Persistent Group (client)"); + break; + case PEER_TYPE_P2P_INVITATION: + title = tr("P2P Invitation"); + break; + case PEER_TYPE_WPS_ER_AP: + title = tr("ER: WPS AP"); + break; + case PEER_TYPE_WPS_ER_AP_UNCONFIGURED: + title = tr("ER: WPS AP (Unconfigured)"); + break; + case PEER_TYPE_WPS_ER_ENROLLEE: + title = tr("ER: WPS Enrollee"); + break; + case PEER_TYPE_WPS_ENROLLEE: + title = tr("WPS Enrollee"); + break; + } + return title; +} + + +void Peers::context_menu(const QPoint &pos) +{ + QMenu *menu = new QMenu; + if (menu == NULL) + return; + + QModelIndex idx = peers->indexAt(pos); + if (idx.isValid()) { + ctx_item = model.itemFromIndex(idx); + int type = ctx_item->data(peer_role_type).toInt(); + menu->addAction(Peers::ItemType(type))->setEnabled(false); + menu->addSeparator(); + + int config_methods = -1; + QVariant var = ctx_item->data(peer_role_config_methods); + if (var.isValid()) + config_methods = var.toInt(); + + enum selected_method method = SEL_METHOD_NONE; + var = ctx_item->data(peer_role_selected_method); + if (var.isValid()) + method = (enum selected_method) var.toInt(); + + if ((type == PEER_TYPE_ASSOCIATED_STATION || + type == PEER_TYPE_AP_WPS || + type == PEER_TYPE_WPS_PIN_NEEDED || + type == PEER_TYPE_WPS_ER_ENROLLEE || + type == PEER_TYPE_WPS_ENROLLEE) && + (config_methods == -1 || (config_methods & 0x010c))) { + menu->addAction(tr("Enter WPS PIN"), this, + SLOT(enter_pin())); + } + + if (type == PEER_TYPE_P2P || type == PEER_TYPE_P2P_CLIENT) { + menu->addAction(tr("P2P Connect"), this, + SLOT(ctx_p2p_connect())); + if (method == SEL_METHOD_NONE && + config_methods > -1 && + config_methods & 0x0080 /* PBC */ && + config_methods != 0x0080) + menu->addAction(tr("P2P Connect (PBC)"), this, + SLOT(connect_pbc())); + if (method == SEL_METHOD_NONE) { + menu->addAction(tr("P2P Request PIN"), this, + SLOT(ctx_p2p_req_pin())); + menu->addAction(tr("P2P Show PIN"), this, + SLOT(ctx_p2p_show_pin())); + } + + if (config_methods > -1 && (config_methods & 0x0100)) { + /* Peer has Keypad */ + menu->addAction(tr("P2P Display PIN"), this, + SLOT(ctx_p2p_display_pin())); + } + + if (config_methods > -1 && (config_methods & 0x000c)) { + /* Peer has Label or Display */ + menu->addAction(tr("P2P Enter PIN"), this, + SLOT(ctx_p2p_enter_pin())); + } + } + + if (type == PEER_TYPE_P2P_GROUP) { + menu->addAction(tr("Show passphrase"), this, + SLOT(ctx_p2p_show_passphrase())); + menu->addAction(tr("Remove P2P Group"), this, + SLOT(ctx_p2p_remove_group())); + } + + if (type == PEER_TYPE_P2P_PERSISTENT_GROUP_GO || + type == PEER_TYPE_P2P_PERSISTENT_GROUP_CLIENT || + type == PEER_TYPE_P2P_INVITATION) { + menu->addAction(tr("Start group"), this, + SLOT(ctx_p2p_start_persistent())); + } + + if (type == PEER_TYPE_P2P_PERSISTENT_GROUP_GO || + type == PEER_TYPE_P2P_PERSISTENT_GROUP_CLIENT) { + menu->addAction(tr("Invite"), this, + SLOT(ctx_p2p_invite())); + } + + if (type == PEER_TYPE_P2P_INVITATION) { + menu->addAction(tr("Ignore"), this, + SLOT(ctx_p2p_delete())); + } + + if (type == PEER_TYPE_AP_WPS) { + menu->addAction(tr("Connect (PBC)"), this, + SLOT(connect_pbc())); + } + + if ((type == PEER_TYPE_ASSOCIATED_STATION || + type == PEER_TYPE_WPS_ER_ENROLLEE || + type == PEER_TYPE_WPS_ENROLLEE) && + config_methods >= 0 && (config_methods & 0x0080)) { + menu->addAction(tr("Enroll (PBC)"), this, + SLOT(connect_pbc())); + } + + if (type == PEER_TYPE_WPS_ER_AP) { + menu->addAction(tr("Learn Configuration"), this, + SLOT(learn_ap_config())); + } + + menu->addAction(tr("Properties"), this, SLOT(properties())); + } else { + ctx_item = NULL; + menu->addAction(QString(tr("Refresh")), this, + SLOT(ctx_refresh())); + menu->addAction(tr("Start P2P discovery"), this, + SLOT(ctx_p2p_start())); + menu->addAction(tr("Stop P2P discovery"), this, + SLOT(ctx_p2p_stop())); + menu->addAction(tr("P2P listen only"), this, + SLOT(ctx_p2p_listen())); + menu->addAction(tr("Start P2P group"), this, + SLOT(ctx_p2p_start_group())); + if (hide_ap) + menu->addAction(tr("Show AP entries"), this, + SLOT(ctx_show_ap())); + else + menu->addAction(tr("Hide AP entries"), this, + SLOT(ctx_hide_ap())); + } + + menu->exec(peers->mapToGlobal(pos)); +} + + +void Peers::enter_pin() +{ + if (ctx_item == NULL) + return; + + int peer_type = ctx_item->data(peer_role_type).toInt(); + QString uuid; + QString addr; + addr = ctx_item->data(peer_role_address).toString(); + if (peer_type == PEER_TYPE_WPS_ER_ENROLLEE) + uuid = ctx_item->data(peer_role_uuid).toString(); + + StringQuery input(tr("PIN:")); + input.setWindowTitle(tr("PIN for ") + ctx_item->text()); + if (input.exec() != QDialog::Accepted) + return; + + char cmd[100]; + char reply[100]; + size_t reply_len; + + if (peer_type == PEER_TYPE_WPS_ER_ENROLLEE) { + snprintf(cmd, sizeof(cmd), "WPS_ER_PIN %s %s %s", + uuid.toAscii().constData(), + input.get_string().toAscii().constData(), + addr.toAscii().constData()); + } else { + snprintf(cmd, sizeof(cmd), "WPS_PIN %s %s", + addr.toAscii().constData(), + input.get_string().toAscii().constData()); + } + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText(tr("Failed to set the WPS PIN.")); + msg.exec(); + } +} + + +void Peers::ctx_refresh() +{ + update_peers(); +} + + +void Peers::ctx_p2p_start() +{ + char reply[20]; + size_t reply_len; + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest("P2P_FIND", reply, &reply_len) < 0 || + memcmp(reply, "FAIL", 4) == 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to start P2P discovery."); + msg.exec(); + } +} + + +void Peers::ctx_p2p_stop() +{ + char reply[20]; + size_t reply_len; + reply_len = sizeof(reply) - 1; + wpagui->ctrlRequest("P2P_STOP_FIND", reply, &reply_len); +} + + +void Peers::ctx_p2p_listen() +{ + char reply[20]; + size_t reply_len; + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest("P2P_LISTEN 3600", reply, &reply_len) < 0 || + memcmp(reply, "FAIL", 4) == 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to start P2P listen."); + msg.exec(); + } +} + + +void Peers::ctx_p2p_start_group() +{ + char reply[20]; + size_t reply_len; + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest("P2P_GROUP_ADD", reply, &reply_len) < 0 || + memcmp(reply, "FAIL", 4) == 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to start P2P group."); + msg.exec(); + } +} + + +void Peers::add_station(QString info) +{ + QStringList lines = info.split(QRegExp("\\n")); + QString name; + + for (QStringList::Iterator it = lines.begin(); + it != lines.end(); it++) { + int pos = (*it).indexOf('=') + 1; + if (pos < 1) + continue; + + if ((*it).startsWith("wpsDeviceName=")) + name = (*it).mid(pos); + else if ((*it).startsWith("p2p_device_name=")) + name = (*it).mid(pos); + } + + if (name.isEmpty()) + name = lines[0]; + + QStandardItem *item = new QStandardItem(*laptop_icon, name); + if (item) { + /* Remove WPS enrollee entry if one is still pending */ + if (model.rowCount() > 0) { + QModelIndexList lst = model.match(model.index(0, 0), + peer_role_address, + lines[0]); + for (int i = 0; i < lst.size(); i++) { + QStandardItem *item; + item = model.itemFromIndex(lst[i]); + if (item == NULL) + continue; + int type = item->data(peer_role_type).toInt(); + if (type == PEER_TYPE_WPS_ENROLLEE) { + model.removeRow(lst[i].row()); + break; + } + } + } + + item->setData(lines[0], peer_role_address); + item->setData(PEER_TYPE_ASSOCIATED_STATION, + peer_role_type); + item->setData(info, peer_role_details); + item->setToolTip(ItemType(PEER_TYPE_ASSOCIATED_STATION)); + model.appendRow(item); + } +} + + +void Peers::add_stations() +{ + char reply[2048]; + size_t reply_len; + char cmd[30]; + int res; + + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest("STA-FIRST", reply, &reply_len) < 0) + return; + + do { + reply[reply_len] = '\0'; + QString info(reply); + char *txt = reply; + while (*txt != '\0' && *txt != '\n') + txt++; + *txt++ = '\0'; + if (strncmp(reply, "FAIL", 4) == 0 || + strncmp(reply, "UNKNOWN", 7) == 0) + break; + + add_station(info); + + reply_len = sizeof(reply) - 1; + snprintf(cmd, sizeof(cmd), "STA-NEXT %s", reply); + res = wpagui->ctrlRequest(cmd, reply, &reply_len); + } while (res >= 0); +} + + +void Peers::add_single_station(const char *addr) +{ + char reply[2048]; + size_t reply_len; + char cmd[30]; + + reply_len = sizeof(reply) - 1; + snprintf(cmd, sizeof(cmd), "STA %s", addr); + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) + return; + + reply[reply_len] = '\0'; + QString info(reply); + char *txt = reply; + while (*txt != '\0' && *txt != '\n') + txt++; + *txt++ = '\0'; + if (strncmp(reply, "FAIL", 4) == 0 || + strncmp(reply, "UNKNOWN", 7) == 0) + return; + + add_station(info); +} + + +void Peers::add_p2p_group_client(QStandardItem * /*parent*/, QString params) +{ + /* + * dev=02:b5:64:63:30:63 iface=02:b5:64:63:30:63 dev_capab=0x0 + * dev_type=1-0050f204-1 dev_name='Wireless Client' + * config_methods=0x8c + */ + + QStringList items = + params.split(QRegExp(" (?=[^']*('[^']*'[^']*)*$)")); + QString addr = ""; + QString name = ""; + int config_methods = 0; + QString dev_type; + + for (int i = 0; i < items.size(); i++) { + QString str = items.at(i); + int pos = str.indexOf('=') + 1; + if (str.startsWith("dev_name='")) + name = str.section('\'', 1, -2); + else if (str.startsWith("config_methods=")) + config_methods = + str.section('=', 1).toInt(0, 0); + else if (str.startsWith("dev=")) + addr = str.mid(pos); + else if (str.startsWith("dev_type=") && dev_type.isEmpty()) + dev_type = str.mid(pos); + } + + QStandardItem *item = find_addr(addr); + if (item) + return; + + item = new QStandardItem(*default_icon, name); + if (item) { + /* TODO: indicate somehow the relationship to the group owner + * (parent) */ + item->setData(addr, peer_role_address); + item->setData(config_methods, peer_role_config_methods); + item->setData(PEER_TYPE_P2P_CLIENT, peer_role_type); + if (!dev_type.isEmpty()) + item->setData(dev_type, peer_role_pri_dev_type); + item->setData(items.join(QString("\n")), peer_role_details); + item->setToolTip(ItemType(PEER_TYPE_P2P_CLIENT)); + model.appendRow(item); + } +} + + +void Peers::remove_bss(int id) +{ + if (model.rowCount() == 0) + return; + + QModelIndexList lst = model.match(model.index(0, 0), peer_role_bss_id, + id); + if (lst.size() == 0) + return; + model.removeRow(lst[0].row()); +} + + +bool Peers::add_bss(const char *cmd) +{ + char reply[2048]; + size_t reply_len; + + if (hide_ap) + return false; + + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) + return false; + reply[reply_len] = '\0'; + + QString bss(reply); + if (bss.isEmpty() || bss.startsWith("FAIL")) + return false; + + QString ssid, bssid, flags, wps_name, pri_dev_type; + int id = -1; + + QStringList lines = bss.split(QRegExp("\\n")); + for (QStringList::Iterator it = lines.begin(); + it != lines.end(); it++) { + int pos = (*it).indexOf('=') + 1; + if (pos < 1) + continue; + + if ((*it).startsWith("bssid=")) + bssid = (*it).mid(pos); + else if ((*it).startsWith("id=")) + id = (*it).mid(pos).toInt(); + else if ((*it).startsWith("flags=")) + flags = (*it).mid(pos); + else if ((*it).startsWith("ssid=")) + ssid = (*it).mid(pos); + else if ((*it).startsWith("wps_device_name=")) + wps_name = (*it).mid(pos); + else if ((*it).startsWith("wps_primary_device_type=")) + pri_dev_type = (*it).mid(pos); + } + + QString name = wps_name; + if (name.isEmpty()) + name = ssid + "\n" + bssid; + + QStandardItem *item = new QStandardItem(*ap_icon, name); + if (item) { + item->setData(bssid, peer_role_address); + if (id >= 0) + item->setData(id, peer_role_bss_id); + int type; + if (flags.contains("[WPS")) + type = PEER_TYPE_AP_WPS; + else + type = PEER_TYPE_AP; + item->setData(type, peer_role_type); + + for (int i = 0; i < lines.size(); i++) { + if (lines[i].length() > 60) { + lines[i].remove(60, lines[i].length()); + lines[i] += ".."; + } + } + item->setToolTip(ItemType(type)); + item->setData(lines.join("\n"), peer_role_details); + if (!pri_dev_type.isEmpty()) + item->setData(pri_dev_type, + peer_role_pri_dev_type); + if (!ssid.isEmpty()) + item->setData(ssid, peer_role_ssid); + model.appendRow(item); + + lines = bss.split(QRegExp("\\n")); + for (QStringList::Iterator it = lines.begin(); + it != lines.end(); it++) { + if ((*it).startsWith("p2p_group_client:")) + add_p2p_group_client(item, + (*it).mid(18)); + } + } + + return true; +} + + +void Peers::add_scan_results() +{ + int index; + char cmd[20]; + + index = 0; + while (wpagui) { + snprintf(cmd, sizeof(cmd), "BSS %d", index++); + if (index > 1000) + break; + + if (!add_bss(cmd)) + break; + } +} + + +void Peers::add_persistent(int id, const char *ssid, const char *bssid) +{ + char cmd[100]; + char reply[100]; + size_t reply_len; + int mode; + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d mode", id); + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) + return; + reply[reply_len] = '\0'; + mode = atoi(reply); + + QString name = ssid; + name = '[' + name + ']'; + + QStandardItem *item = new QStandardItem(*group_icon, name); + if (!item) + return; + + int type; + if (mode == 3) + type = PEER_TYPE_P2P_PERSISTENT_GROUP_GO; + else + type = PEER_TYPE_P2P_PERSISTENT_GROUP_CLIENT; + item->setData(type, peer_role_type); + item->setToolTip(ItemType(type)); + item->setData(ssid, peer_role_ssid); + if (bssid && strcmp(bssid, "any") == 0) + bssid = NULL; + if (bssid) + item->setData(bssid, peer_role_address); + item->setData(id, peer_role_network_id); + item->setBackground(Qt::BDiagPattern); + + model.appendRow(item); +} + + +void Peers::add_persistent_groups() +{ + char buf[2048], *start, *end, *id, *ssid, *bssid, *flags; + size_t len; + + len = sizeof(buf) - 1; + if (wpagui->ctrlRequest("LIST_NETWORKS", buf, &len) < 0) + return; + + buf[len] = '\0'; + start = strchr(buf, '\n'); + if (start == NULL) + return; + start++; + + while (*start) { + bool last = false; + end = strchr(start, '\n'); + if (end == NULL) { + last = true; + end = start; + while (end[0] && end[1]) + end++; + } + *end = '\0'; + + id = start; + ssid = strchr(id, '\t'); + if (ssid == NULL) + break; + *ssid++ = '\0'; + bssid = strchr(ssid, '\t'); + if (bssid == NULL) + break; + *bssid++ = '\0'; + flags = strchr(bssid, '\t'); + if (flags == NULL) + break; + *flags++ = '\0'; + + if (strstr(flags, "[DISABLED][P2P-PERSISTENT]")) + add_persistent(atoi(id), ssid, bssid); + + if (last) + break; + start = end + 1; + } +} + + +void Peers::update_peers() +{ + model.clear(); + if (wpagui == NULL) + return; + + char reply[20]; + size_t replylen = sizeof(reply) - 1; + wpagui->ctrlRequest("WPS_ER_START", reply, &replylen); + + add_stations(); + add_scan_results(); + add_persistent_groups(); +} + + +QStandardItem * Peers::find_addr(QString addr) +{ + if (model.rowCount() == 0) + return NULL; + + QModelIndexList lst = model.match(model.index(0, 0), peer_role_address, + addr); + if (lst.size() == 0) + return NULL; + return model.itemFromIndex(lst[0]); +} + + +QStandardItem * Peers::find_addr_type(QString addr, int type) +{ + if (model.rowCount() == 0) + return NULL; + + QModelIndexList lst = model.match(model.index(0, 0), peer_role_address, + addr); + for (int i = 0; i < lst.size(); i++) { + QStandardItem *item = model.itemFromIndex(lst[i]); + if (item->data(peer_role_type).toInt() == type) + return item; + } + return NULL; +} + + +QStandardItem * Peers::find_uuid(QString uuid) +{ + if (model.rowCount() == 0) + return NULL; + + QModelIndexList lst = model.match(model.index(0, 0), peer_role_uuid, + uuid); + if (lst.size() == 0) + return NULL; + return model.itemFromIndex(lst[0]); +} + + +void Peers::event_notify(WpaMsg msg) +{ + QString text = msg.getMsg(); + + if (text.startsWith(WPS_EVENT_PIN_NEEDED)) { + /* + * WPS-PIN-NEEDED 5a02a5fa-9199-5e7c-bc46-e183d3cb32f7 + * 02:2a:c4:18:5b:f3 + * [Wireless Client|Company|cmodel|123|12345|1-0050F204-1] + */ + QStringList items = text.split(' '); + QString uuid = items[1]; + QString addr = items[2]; + QString name = ""; + + QStandardItem *item = find_addr(addr); + if (item) + return; + + int pos = text.indexOf('['); + if (pos >= 0) { + int pos2 = text.lastIndexOf(']'); + if (pos2 >= pos) { + items = text.mid(pos + 1, pos2 - pos - 1). + split('|'); + name = items[0]; + items.append(addr); + } + } + + item = new QStandardItem(*laptop_icon, name); + if (item) { + item->setData(addr, peer_role_address); + item->setData(PEER_TYPE_WPS_PIN_NEEDED, + peer_role_type); + item->setToolTip(ItemType(PEER_TYPE_WPS_PIN_NEEDED)); + item->setData(items.join("\n"), peer_role_details); + item->setData(items[5], peer_role_pri_dev_type); + model.appendRow(item); + } + return; + } + + if (text.startsWith(AP_STA_CONNECTED)) { + /* AP-STA-CONNECTED 02:2a:c4:18:5b:f3 */ + QStringList items = text.split(' '); + QString addr = items[1]; + QStandardItem *item = find_addr(addr); + if (item == NULL || item->data(peer_role_type).toInt() != + PEER_TYPE_ASSOCIATED_STATION) + add_single_station(addr.toAscii().constData()); + return; + } + + if (text.startsWith(AP_STA_DISCONNECTED)) { + /* AP-STA-DISCONNECTED 02:2a:c4:18:5b:f3 */ + QStringList items = text.split(' '); + QString addr = items[1]; + + if (model.rowCount() == 0) + return; + + QModelIndexList lst = model.match(model.index(0, 0), + peer_role_address, addr, -1); + for (int i = 0; i < lst.size(); i++) { + QStandardItem *item = model.itemFromIndex(lst[i]); + if (item && item->data(peer_role_type).toInt() == + PEER_TYPE_ASSOCIATED_STATION) { + model.removeRow(lst[i].row()); + break; + } + } + return; + } + + if (text.startsWith(P2P_EVENT_DEVICE_FOUND)) { + /* + * P2P-DEVICE-FOUND 02:b5:64:63:30:63 + * p2p_dev_addr=02:b5:64:63:30:63 pri_dev_type=1-0050f204-1 + * name='Wireless Client' config_methods=0x84 dev_capab=0x21 + * group_capab=0x0 + */ + QStringList items = + text.split(QRegExp(" (?=[^']*('[^']*'[^']*)*$)")); + QString addr = items[1]; + QString name = ""; + QString pri_dev_type; + int config_methods = 0; + for (int i = 0; i < items.size(); i++) { + QString str = items.at(i); + if (str.startsWith("name='")) + name = str.section('\'', 1, -2); + else if (str.startsWith("config_methods=")) + config_methods = + str.section('=', 1).toInt(0, 0); + else if (str.startsWith("pri_dev_type=")) + pri_dev_type = str.section('=', 1); + } + + QStandardItem *item = find_addr(addr); + if (item) { + int type = item->data(peer_role_type).toInt(); + if (type == PEER_TYPE_P2P) + return; + } + + item = new QStandardItem(*default_icon, name); + if (item) { + item->setData(addr, peer_role_address); + item->setData(config_methods, + peer_role_config_methods); + item->setData(PEER_TYPE_P2P, peer_role_type); + if (!pri_dev_type.isEmpty()) + item->setData(pri_dev_type, + peer_role_pri_dev_type); + item->setData(items.join(QString("\n")), + peer_role_details); + item->setToolTip(ItemType(PEER_TYPE_P2P)); + model.appendRow(item); + } + + item = find_addr_type(addr, + PEER_TYPE_P2P_PERSISTENT_GROUP_CLIENT); + if (item) + item->setBackground(Qt::NoBrush); + } + + if (text.startsWith(P2P_EVENT_GROUP_STARTED)) { + /* P2P-GROUP-STARTED wlan0-p2p-0 GO ssid="DIRECT-3F" + * passphrase="YOyTkxID" go_dev_addr=02:40:61:c2:f3:b7 + * [PERSISTENT] */ + QStringList items = text.split(' '); + if (items.size() < 4) + return; + + int pos = text.indexOf(" ssid=\""); + if (pos < 0) + return; + QString ssid = text.mid(pos + 7); + pos = ssid.indexOf(" passphrase=\""); + if (pos < 0) + pos = ssid.indexOf(" psk="); + if (pos >= 0) + ssid.truncate(pos); + pos = ssid.lastIndexOf('"'); + if (pos >= 0) + ssid.truncate(pos); + + QStandardItem *item = new QStandardItem(*group_icon, ssid); + if (item) { + item->setData(PEER_TYPE_P2P_GROUP, peer_role_type); + item->setData(items[1], peer_role_ifname); + QString details; + if (items[2] == "GO") { + details = tr("P2P GO for interface ") + + items[1]; + } else { + details = tr("P2P client for interface ") + + items[1]; + } + if (text.contains(" [PERSISTENT]")) + details += "\nPersistent group"; + item->setData(details, peer_role_details); + item->setToolTip(ItemType(PEER_TYPE_P2P_GROUP)); + model.appendRow(item); + } + } + + if (text.startsWith(P2P_EVENT_GROUP_REMOVED)) { + /* P2P-GROUP-REMOVED wlan0-p2p-0 GO */ + QStringList items = text.split(' '); + if (items.size() < 2) + return; + + if (model.rowCount() == 0) + return; + + QModelIndexList lst = model.match(model.index(0, 0), + peer_role_ifname, items[1]); + for (int i = 0; i < lst.size(); i++) + model.removeRow(lst[i].row()); + return; + } + + if (text.startsWith(P2P_EVENT_PROV_DISC_SHOW_PIN)) { + /* P2P-PROV-DISC-SHOW-PIN 02:40:61:c2:f3:b7 12345670 */ + QStringList items = text.split(' '); + if (items.size() < 3) + return; + QString addr = items[1]; + QString pin = items[2]; + + QStandardItem *item = find_addr_type(addr, PEER_TYPE_P2P); + if (item == NULL) + return; + item->setData(SEL_METHOD_PIN_LOCAL_DISPLAY, + peer_role_selected_method); + item->setData(pin, peer_role_selected_pin); + QVariant var = item->data(peer_role_requested_method); + if (var.isValid() && + var.toInt() == SEL_METHOD_PIN_LOCAL_DISPLAY) { + ctx_item = item; + ctx_p2p_display_pin_pd(); + } + return; + } + + if (text.startsWith(P2P_EVENT_PROV_DISC_ENTER_PIN)) { + /* P2P-PROV-DISC-ENTER-PIN 02:40:61:c2:f3:b7 */ + QStringList items = text.split(' '); + if (items.size() < 2) + return; + QString addr = items[1]; + + QStandardItem *item = find_addr_type(addr, PEER_TYPE_P2P); + if (item == NULL) + return; + item->setData(SEL_METHOD_PIN_PEER_DISPLAY, + peer_role_selected_method); + QVariant var = item->data(peer_role_requested_method); + if (var.isValid() && + var.toInt() == SEL_METHOD_PIN_PEER_DISPLAY) { + ctx_item = item; + ctx_p2p_connect(); + } + return; + } + + if (text.startsWith(P2P_EVENT_INVITATION_RECEIVED)) { + /* P2P-INVITATION-RECEIVED sa=02:f0:bc:44:87:62 persistent=4 */ + QStringList items = text.split(' '); + if (items.size() < 3) + return; + if (!items[1].startsWith("sa=") || + !items[2].startsWith("persistent=")) + return; + QString addr = items[1].mid(3); + int id = items[2].mid(11).toInt(); + + char cmd[100]; + char reply[100]; + size_t reply_len; + + snprintf(cmd, sizeof(cmd), "GET_NETWORK %d ssid", id); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) + return; + reply[reply_len] = '\0'; + QString name; + char *pos = strrchr(reply, '"'); + if (pos && reply[0] == '"') { + *pos = '\0'; + name = reply + 1; + } else + name = reply; + + QStandardItem *item; + item = find_addr_type(addr, PEER_TYPE_P2P_INVITATION); + if (item) + model.removeRow(item->row()); + + item = new QStandardItem(*invitation_icon, name); + if (!item) + return; + item->setData(PEER_TYPE_P2P_INVITATION, peer_role_type); + item->setToolTip(ItemType(PEER_TYPE_P2P_INVITATION)); + item->setData(addr, peer_role_address); + item->setData(id, peer_role_network_id); + + model.appendRow(item); + + enable_persistent(id); + + return; + } + + if (text.startsWith(P2P_EVENT_INVITATION_RESULT)) { + /* P2P-INVITATION-RESULT status=1 */ + /* TODO */ + return; + } + + if (text.startsWith(WPS_EVENT_ER_AP_ADD)) { + /* + * WPS-ER-AP-ADD 87654321-9abc-def0-1234-56789abc0002 + * 02:11:22:33:44:55 pri_dev_type=6-0050F204-1 wps_state=1 + * |Very friendly name|Company|Long description of the model| + * WAP|http://w1.fi/|http://w1.fi/hostapd/ + */ + QStringList items = text.split(' '); + if (items.size() < 5) + return; + QString uuid = items[1]; + QString addr = items[2]; + QString pri_dev_type = items[3].mid(13); + int wps_state = items[4].mid(10).toInt(); + + int pos = text.indexOf('|'); + if (pos < 0) + return; + items = text.mid(pos + 1).split('|'); + if (items.size() < 1) + return; + + QStandardItem *item = find_uuid(uuid); + if (item) + return; + + item = new QStandardItem(*ap_icon, items[0]); + if (item) { + item->setData(uuid, peer_role_uuid); + item->setData(addr, peer_role_address); + int type = wps_state == 2 ? PEER_TYPE_WPS_ER_AP: + PEER_TYPE_WPS_ER_AP_UNCONFIGURED; + item->setData(type, peer_role_type); + item->setToolTip(ItemType(type)); + item->setData(pri_dev_type, peer_role_pri_dev_type); + item->setData(items.join(QString("\n")), + peer_role_details); + model.appendRow(item); + } + + return; + } + + if (text.startsWith(WPS_EVENT_ER_AP_REMOVE)) { + /* WPS-ER-AP-REMOVE 87654321-9abc-def0-1234-56789abc0002 */ + QStringList items = text.split(' '); + if (items.size() < 2) + return; + if (model.rowCount() == 0) + return; + + QModelIndexList lst = model.match(model.index(0, 0), + peer_role_uuid, items[1]); + for (int i = 0; i < lst.size(); i++) { + QStandardItem *item = model.itemFromIndex(lst[i]); + if (item && + (item->data(peer_role_type).toInt() == + PEER_TYPE_WPS_ER_AP || + item->data(peer_role_type).toInt() == + PEER_TYPE_WPS_ER_AP_UNCONFIGURED)) + model.removeRow(lst[i].row()); + } + return; + } + + if (text.startsWith(WPS_EVENT_ER_ENROLLEE_ADD)) { + /* + * WPS-ER-ENROLLEE-ADD 2b7093f1-d6fb-5108-adbb-bea66bb87333 + * 02:66:a0:ee:17:27 M1=1 config_methods=0x14d dev_passwd_id=0 + * pri_dev_type=1-0050F204-1 + * |Wireless Client|Company|cmodel|123|12345| + */ + QStringList items = text.split(' '); + if (items.size() < 3) + return; + QString uuid = items[1]; + QString addr = items[2]; + QString pri_dev_type = items[6].mid(13); + int config_methods = -1; + int dev_passwd_id = -1; + + for (int i = 3; i < items.size(); i++) { + int pos = items[i].indexOf('=') + 1; + if (pos < 1) + continue; + QString val = items[i].mid(pos); + if (items[i].startsWith("config_methods=")) { + config_methods = val.toInt(0, 0); + } else if (items[i].startsWith("dev_passwd_id=")) { + dev_passwd_id = val.toInt(); + } + } + + int pos = text.indexOf('|'); + if (pos < 0) + return; + items = text.mid(pos + 1).split('|'); + if (items.size() < 1) + return; + QString name = items[0]; + if (name.length() == 0) + name = addr; + + remove_enrollee_uuid(uuid); + + QStandardItem *item; + item = new QStandardItem(*laptop_icon, name); + if (item) { + item->setData(uuid, peer_role_uuid); + item->setData(addr, peer_role_address); + item->setData(PEER_TYPE_WPS_ER_ENROLLEE, + peer_role_type); + item->setToolTip(ItemType(PEER_TYPE_WPS_ER_ENROLLEE)); + item->setData(items.join(QString("\n")), + peer_role_details); + item->setData(pri_dev_type, peer_role_pri_dev_type); + if (config_methods >= 0) + item->setData(config_methods, + peer_role_config_methods); + if (dev_passwd_id >= 0) + item->setData(dev_passwd_id, + peer_role_dev_passwd_id); + model.appendRow(item); + } + + return; + } + + if (text.startsWith(WPS_EVENT_ER_ENROLLEE_REMOVE)) { + /* + * WPS-ER-ENROLLEE-REMOVE 2b7093f1-d6fb-5108-adbb-bea66bb87333 + * 02:66:a0:ee:17:27 + */ + QStringList items = text.split(' '); + if (items.size() < 2) + return; + remove_enrollee_uuid(items[1]); + return; + } + + if (text.startsWith(WPS_EVENT_ENROLLEE_SEEN)) { + /* TODO: need to time out this somehow or remove on successful + * WPS run, etc. */ + /* + * WPS-ENROLLEE-SEEN 02:00:00:00:01:00 + * 572cf82f-c957-5653-9b16-b5cfb298abf1 1-0050F204-1 0x80 4 1 + * [Wireless Client] + * (MAC addr, UUID-E, pri dev type, config methods, + * dev passwd id, request type, [dev name]) + */ + QStringList items = text.split(' '); + if (items.size() < 7) + return; + QString addr = items[1]; + QString uuid = items[2]; + QString pri_dev_type = items[3]; + int config_methods = items[4].toInt(0, 0); + int dev_passwd_id = items[5].toInt(); + QString name; + + QStandardItem *item = find_addr(addr); + if (item) { + int type = item->data(peer_role_type).toInt(); + if (type == PEER_TYPE_ASSOCIATED_STATION) + return; /* already associated */ + } + + int pos = text.indexOf('['); + if (pos >= 0) { + int pos2 = text.lastIndexOf(']'); + if (pos2 >= pos) { + QStringList items2 = + text.mid(pos + 1, pos2 - pos - 1). + split('|'); + name = items2[0]; + } + } + if (name.isEmpty()) + name = addr; + + item = find_uuid(uuid); + if (item) { + QVariant var = item->data(peer_role_config_methods); + QVariant var2 = item->data(peer_role_dev_passwd_id); + if ((var.isValid() && config_methods != var.toInt()) || + (var2.isValid() && dev_passwd_id != var2.toInt())) + remove_enrollee_uuid(uuid); + else + return; + } + + item = new QStandardItem(*laptop_icon, name); + if (item) { + item->setData(uuid, peer_role_uuid); + item->setData(addr, peer_role_address); + item->setData(PEER_TYPE_WPS_ENROLLEE, + peer_role_type); + item->setToolTip(ItemType(PEER_TYPE_WPS_ENROLLEE)); + item->setData(items.join(QString("\n")), + peer_role_details); + item->setData(pri_dev_type, peer_role_pri_dev_type); + item->setData(config_methods, + peer_role_config_methods); + item->setData(dev_passwd_id, peer_role_dev_passwd_id); + model.appendRow(item); + } + + return; + } + + if (text.startsWith(WPA_EVENT_BSS_ADDED)) { + /* CTRL-EVENT-BSS-ADDED 34 00:11:22:33:44:55 */ + QStringList items = text.split(' '); + if (items.size() < 2) + return; + char cmd[20]; + snprintf(cmd, sizeof(cmd), "BSS ID-%d", items[1].toInt()); + add_bss(cmd); + return; + } + + if (text.startsWith(WPA_EVENT_BSS_REMOVED)) { + /* CTRL-EVENT-BSS-REMOVED 34 00:11:22:33:44:55 */ + QStringList items = text.split(' '); + if (items.size() < 2) + return; + remove_bss(items[1].toInt()); + return; + } +} + + +void Peers::ctx_p2p_connect() +{ + if (ctx_item == NULL) + return; + QString addr = ctx_item->data(peer_role_address).toString(); + QString arg; + int config_methods = + ctx_item->data(peer_role_config_methods).toInt(); + enum selected_method method = SEL_METHOD_NONE; + QVariant var = ctx_item->data(peer_role_selected_method); + if (var.isValid()) + method = (enum selected_method) var.toInt(); + if (method == SEL_METHOD_PIN_LOCAL_DISPLAY) { + arg = ctx_item->data(peer_role_selected_pin).toString(); + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_CONNECT %s %s display", + addr.toAscii().constData(), + arg.toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to initiate P2P connect."); + msg.exec(); + return; + } + QMessageBox::information(this, + tr("PIN for ") + ctx_item->text(), + tr("Enter the following PIN on the\n" + "peer device: ") + arg); + } else if (method == SEL_METHOD_PIN_PEER_DISPLAY) { + StringQuery input(tr("PIN from peer display:")); + input.setWindowTitle(tr("PIN for ") + ctx_item->text()); + if (input.exec() != QDialog::Accepted) + return; + arg = input.get_string(); + } else if (config_methods == 0x0080 /* PBC */) { + arg = "pbc"; + } else { + StringQuery input(tr("PIN:")); + input.setWindowTitle(tr("PIN for ") + ctx_item->text()); + if (input.exec() != QDialog::Accepted) + return; + arg = input.get_string(); + } + + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_CONNECT %s %s", + addr.toAscii().constData(), + arg.toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to initiate P2P connect."); + msg.exec(); + } +} + + +void Peers::ctx_p2p_req_pin() +{ + if (ctx_item == NULL) + return; + QString addr = ctx_item->data(peer_role_address).toString(); + ctx_item->setData(SEL_METHOD_PIN_PEER_DISPLAY, + peer_role_requested_method); + + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_PROV_DISC %s display", + addr.toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText(tr("Failed to request PIN from peer.")); + msg.exec(); + } +} + + +void Peers::ctx_p2p_show_pin() +{ + if (ctx_item == NULL) + return; + QString addr = ctx_item->data(peer_role_address).toString(); + ctx_item->setData(SEL_METHOD_PIN_LOCAL_DISPLAY, + peer_role_requested_method); + + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_PROV_DISC %s keypad", + addr.toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText(tr("Failed to request peer to enter PIN.")); + msg.exec(); + } +} + + +void Peers::ctx_p2p_display_pin() +{ + if (ctx_item == NULL) + return; + QString addr = ctx_item->data(peer_role_address).toString(); + + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_CONNECT %s pin", + addr.toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to initiate P2P connect."); + msg.exec(); + return; + } + reply[reply_len] = '\0'; + QMessageBox::information(this, + tr("PIN for ") + ctx_item->text(), + tr("Enter the following PIN on the\n" + "peer device: ") + reply); +} + + +void Peers::ctx_p2p_display_pin_pd() +{ + if (ctx_item == NULL) + return; + QString addr = ctx_item->data(peer_role_address).toString(); + QString arg = ctx_item->data(peer_role_selected_pin).toString(); + + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_CONNECT %s %s display", + addr.toAscii().constData(), + arg.toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to initiate P2P connect."); + msg.exec(); + return; + } + reply[reply_len] = '\0'; + QMessageBox::information(this, + tr("PIN for ") + ctx_item->text(), + tr("Enter the following PIN on the\n" + "peer device: ") + arg); +} + + +void Peers::ctx_p2p_enter_pin() +{ + if (ctx_item == NULL) + return; + QString addr = ctx_item->data(peer_role_address).toString(); + QString arg; + + StringQuery input(tr("PIN from peer:")); + input.setWindowTitle(tr("PIN for ") + ctx_item->text()); + if (input.exec() != QDialog::Accepted) + return; + arg = input.get_string(); + + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_CONNECT %s %s keypad", + addr.toAscii().constData(), + arg.toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to initiate P2P connect."); + msg.exec(); + } +} + + +void Peers::ctx_p2p_remove_group() +{ + if (ctx_item == NULL) + return; + char cmd[100]; + char reply[100]; + size_t reply_len; + snprintf(cmd, sizeof(cmd), "P2P_GROUP_REMOVE %s", + ctx_item->data(peer_role_ifname).toString().toAscii(). + constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to remove P2P Group."); + msg.exec(); + } +} + + +void Peers::closeEvent(QCloseEvent *) +{ + if (wpagui) { + char reply[20]; + size_t replylen = sizeof(reply) - 1; + wpagui->ctrlRequest("WPS_ER_STOP", reply, &replylen); + } +} + + +void Peers::done(int r) +{ + QDialog::done(r); + close(); +} + + +void Peers::remove_enrollee_uuid(QString uuid) +{ + if (model.rowCount() == 0) + return; + + QModelIndexList lst = model.match(model.index(0, 0), + peer_role_uuid, uuid); + for (int i = 0; i < lst.size(); i++) { + QStandardItem *item = model.itemFromIndex(lst[i]); + if (item == NULL) + continue; + int type = item->data(peer_role_type).toInt(); + if (type == PEER_TYPE_WPS_ER_ENROLLEE || + type == PEER_TYPE_WPS_ENROLLEE) + model.removeRow(lst[i].row()); + } +} + + +void Peers::properties() +{ + if (ctx_item == NULL) + return; + + QMessageBox msg(this); + msg.setStandardButtons(QMessageBox::Ok); + msg.setDefaultButton(QMessageBox::Ok); + msg.setEscapeButton(QMessageBox::Ok); + msg.setWindowTitle(tr("Peer Properties")); + + int type = ctx_item->data(peer_role_type).toInt(); + QString title = Peers::ItemType(type); + + msg.setText(title + QString("\n") + tr("Name: ") + ctx_item->text()); + + QVariant var; + QString info; + + var = ctx_item->data(peer_role_address); + if (var.isValid()) + info += tr("Address: ") + var.toString() + QString("\n"); + + var = ctx_item->data(peer_role_uuid); + if (var.isValid()) + info += tr("UUID: ") + var.toString() + QString("\n"); + + var = ctx_item->data(peer_role_pri_dev_type); + if (var.isValid()) + info += tr("Primary Device Type: ") + var.toString() + + QString("\n"); + + var = ctx_item->data(peer_role_ssid); + if (var.isValid()) + info += tr("SSID: ") + var.toString() + QString("\n"); + + var = ctx_item->data(peer_role_config_methods); + if (var.isValid()) { + int methods = var.toInt(); + info += tr("Configuration Methods: "); + if (methods & 0x0001) + info += tr("[USBA]"); + if (methods & 0x0002) + info += tr("[Ethernet]"); + if (methods & 0x0004) + info += tr("[Label]"); + if (methods & 0x0008) + info += tr("[Display]"); + if (methods & 0x0010) + info += tr("[Ext. NFC Token]"); + if (methods & 0x0020) + info += tr("[Int. NFC Token]"); + if (methods & 0x0040) + info += tr("[NFC Interface]"); + if (methods & 0x0080) + info += tr("[Push Button]"); + if (methods & 0x0100) + info += tr("[Keypad]"); + info += "\n"; + } + + var = ctx_item->data(peer_role_selected_method); + if (var.isValid()) { + enum selected_method method = + (enum selected_method) var.toInt(); + switch (method) { + case SEL_METHOD_NONE: + break; + case SEL_METHOD_PIN_PEER_DISPLAY: + info += tr("Selected Method: PIN on peer display\n"); + break; + case SEL_METHOD_PIN_LOCAL_DISPLAY: + info += tr("Selected Method: PIN on local display\n"); + break; + } + } + + var = ctx_item->data(peer_role_selected_pin); + if (var.isValid()) { + info += tr("PIN to enter on peer: ") + var.toString() + "\n"; + } + + var = ctx_item->data(peer_role_dev_passwd_id); + if (var.isValid()) { + info += tr("Device Password ID: ") + var.toString(); + switch (var.toInt()) { + case 0: + info += tr(" (Default PIN)"); + break; + case 1: + info += tr(" (User-specified PIN)"); + break; + case 2: + info += tr(" (Machine-specified PIN)"); + break; + case 3: + info += tr(" (Rekey)"); + break; + case 4: + info += tr(" (Push Button)"); + break; + case 5: + info += tr(" (Registrar-specified)"); + break; + } + info += "\n"; + } + + msg.setInformativeText(info); + + var = ctx_item->data(peer_role_details); + if (var.isValid()) + msg.setDetailedText(var.toString()); + + msg.exec(); +} + + +void Peers::connect_pbc() +{ + if (ctx_item == NULL) + return; + + char cmd[100]; + char reply[100]; + size_t reply_len; + + int peer_type = ctx_item->data(peer_role_type).toInt(); + if (peer_type == PEER_TYPE_WPS_ER_ENROLLEE) { + snprintf(cmd, sizeof(cmd), "WPS_ER_PBC %s", + ctx_item->data(peer_role_uuid).toString().toAscii(). + constData()); + } else if (peer_type == PEER_TYPE_P2P || + peer_type == PEER_TYPE_P2P_CLIENT) { + snprintf(cmd, sizeof(cmd), "P2P_CONNECT %s pbc", + ctx_item->data(peer_role_address).toString(). + toAscii().constData()); + } else { + snprintf(cmd, sizeof(cmd), "WPS_PBC"); + } + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText(tr("Failed to start WPS PBC.")); + msg.exec(); + } +} + + +void Peers::learn_ap_config() +{ + if (ctx_item == NULL) + return; + + QString uuid = ctx_item->data(peer_role_uuid).toString(); + + StringQuery input(tr("AP PIN:")); + input.setWindowTitle(tr("AP PIN for ") + ctx_item->text()); + if (input.exec() != QDialog::Accepted) + return; + + char cmd[100]; + char reply[100]; + size_t reply_len; + + snprintf(cmd, sizeof(cmd), "WPS_ER_LEARN %s %s", + uuid.toAscii().constData(), + input.get_string().toAscii().constData()); + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText(tr("Failed to start learning AP configuration.")); + msg.exec(); + } +} + + +void Peers::ctx_hide_ap() +{ + hide_ap = true; + + if (model.rowCount() == 0) + return; + + do { + QModelIndexList lst; + lst = model.match(model.index(0, 0), + peer_role_type, PEER_TYPE_AP); + if (lst.size() == 0) { + lst = model.match(model.index(0, 0), + peer_role_type, PEER_TYPE_AP_WPS); + if (lst.size() == 0) + break; + } + + model.removeRow(lst[0].row()); + } while (1); +} + + +void Peers::ctx_show_ap() +{ + hide_ap = false; + add_scan_results(); +} + + +void Peers::ctx_p2p_show_passphrase() +{ + char reply[64]; + size_t reply_len; + + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest("P2P_GET_PASSPHRASE", reply, &reply_len) < 0 || + memcmp(reply, "FAIL", 4) == 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText("Failed to get P2P group passphrase."); + msg.exec(); + } else { + reply[reply_len] = '\0'; + QMessageBox::information(this, tr("Passphrase"), + tr("P2P group passphrase:\n") + + reply); + } +} + + +void Peers::ctx_p2p_start_persistent() +{ + if (ctx_item == NULL) + return; + + char cmd[100]; + char reply[100]; + size_t reply_len; + + snprintf(cmd, sizeof(cmd), "P2P_GROUP_ADD persistent=%d", + ctx_item->data(peer_role_network_id).toInt()); + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0 || + memcmp(reply, "FAIL", 4) == 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText(tr("Failed to start persistent P2P Group.")); + msg.exec(); + } else if (ctx_item->data(peer_role_type).toInt() == + PEER_TYPE_P2P_INVITATION) + model.removeRow(ctx_item->row()); +} + + +void Peers::ctx_p2p_invite() +{ + if (ctx_item == NULL) + return; + + char cmd[100]; + char reply[100]; + size_t reply_len; + + snprintf(cmd, sizeof(cmd), "P2P_INVITE persistent=%d", + ctx_item->data(peer_role_network_id).toInt()); + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0 || + memcmp(reply, "FAIL", 4) == 0) { + QMessageBox msg; + msg.setIcon(QMessageBox::Warning); + msg.setText(tr("Failed to invite peer to start persistent " + "P2P Group.")); + msg.exec(); + } +} + + +void Peers::ctx_p2p_delete() +{ + if (ctx_item == NULL) + return; + model.removeRow(ctx_item->row()); +} + + +void Peers::enable_persistent(int id) +{ + if (model.rowCount() == 0) + return; + + QModelIndexList lst = model.match(model.index(0, 0), + peer_role_network_id, id); + for (int i = 0; i < lst.size(); i++) { + QStandardItem *item = model.itemFromIndex(lst[i]); + int type = item->data(peer_role_type).toInt(); + if (type == PEER_TYPE_P2P_PERSISTENT_GROUP_GO || + type == PEER_TYPE_P2P_PERSISTENT_GROUP_CLIENT) + item->setBackground(Qt::NoBrush); + } +} diff --git a/Network/wpa_gui-qt4_/peers.h b/Network/wpa_gui-qt4_/peers.h new file mode 100644 index 0000000..a715395 --- /dev/null +++ b/Network/wpa_gui-qt4_/peers.h @@ -0,0 +1,96 @@ +/* + * wpa_gui - Peers class + * Copyright (c) 2009-2010, Atheros Communications + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef PEERS_H +#define PEERS_H + +#include +#include +#include "wpamsg.h" +#include "ui_peers.h" + +class WpaGui; + +class Peers : public QDialog, public Ui::Peers +{ + Q_OBJECT + +public: + Peers(QWidget *parent = 0, const char *name = 0, + bool modal = false, Qt::WFlags fl = 0); + ~Peers(); + void setWpaGui(WpaGui *_wpagui); + void event_notify(WpaMsg msg); + +public slots: + virtual void context_menu(const QPoint &pos); + virtual void enter_pin(); + virtual void connect_pbc(); + virtual void learn_ap_config(); + virtual void ctx_refresh(); + virtual void ctx_p2p_start(); + virtual void ctx_p2p_stop(); + virtual void ctx_p2p_listen(); + virtual void ctx_p2p_start_group(); + virtual void ctx_p2p_remove_group(); + virtual void ctx_p2p_connect(); + virtual void ctx_p2p_req_pin(); + virtual void ctx_p2p_show_pin(); + virtual void ctx_p2p_display_pin(); + virtual void ctx_p2p_display_pin_pd(); + virtual void ctx_p2p_enter_pin(); + virtual void properties(); + virtual void ctx_hide_ap(); + virtual void ctx_show_ap(); + virtual void ctx_p2p_show_passphrase(); + virtual void ctx_p2p_start_persistent(); + virtual void ctx_p2p_invite(); + virtual void ctx_p2p_delete(); + +protected slots: + virtual void languageChange(); + virtual void closeEvent(QCloseEvent *event); + +private: + void add_station(QString info); + void add_stations(); + void add_single_station(const char *addr); + bool add_bss(const char *cmd); + void remove_bss(int id); + void add_scan_results(); + void add_persistent(int id, const char *ssid, const char *bssid); + void add_persistent_groups(); + void update_peers(); + QStandardItem * find_addr(QString addr); + QStandardItem * find_addr_type(QString addr, int type); + void add_p2p_group_client(QStandardItem *parent, QString params); + QStandardItem * find_uuid(QString uuid); + void done(int r); + void remove_enrollee_uuid(QString uuid); + QString ItemType(int type); + void enable_persistent(int id); + + WpaGui *wpagui; + QStandardItemModel model; + QIcon *default_icon; + QIcon *ap_icon; + QIcon *laptop_icon; + QIcon *group_icon; + QIcon *invitation_icon; + QStandardItem *ctx_item; + + bool hide_ap; +}; + +#endif /* PEERS_H */ diff --git a/Network/wpa_gui-qt4_/peers.ui b/Network/wpa_gui-qt4_/peers.ui new file mode 100644 index 0000000..9508c25 --- /dev/null +++ b/Network/wpa_gui-qt4_/peers.ui @@ -0,0 +1,40 @@ + + + Peers + + + + 0 + 0 + 400 + 300 + + + + Peers + + + + + + + 0 + 0 + + + + true + + + QAbstractItemView::NoEditTriggers + + + QListView::IconMode + + + + + + + + diff --git a/Network/wpa_gui-qt4_/scanresults.cpp b/Network/wpa_gui-qt4_/scanresults.cpp new file mode 100644 index 0000000..459aa8c --- /dev/null +++ b/Network/wpa_gui-qt4_/scanresults.cpp @@ -0,0 +1,144 @@ +/* + * wpa_gui - ScanResults class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#include + +#include "scanresults.h" +#include "wpagui.h" +#include "networkconfig.h" + + +ScanResults::ScanResults(QWidget *parent, const char *, bool, Qt::WFlags) + : QDialog(parent) +{ + setupUi(this); + + connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + connect(scanButton, SIGNAL(clicked()), this, SLOT(scanRequest())); + connect(scanResultsWidget, + SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, + SLOT(bssSelected(QTreeWidgetItem *))); + + wpagui = NULL; + scanResultsWidget->setItemsExpandable(FALSE); + scanResultsWidget->setRootIsDecorated(FALSE); +} + + +ScanResults::~ScanResults() +{ +} + + +void ScanResults::languageChange() +{ + retranslateUi(this); +} + + +void ScanResults::setWpaGui(WpaGui *_wpagui) +{ + wpagui = _wpagui; + updateResults(); +} + + +void ScanResults::updateResults() +{ + char reply[2048]; + size_t reply_len; + int index; + char cmd[20]; + + scanResultsWidget->clear(); + + index = 0; + while (wpagui) { + snprintf(cmd, sizeof(cmd), "BSS %d", index++); + if (index > 1000) + break; + + reply_len = sizeof(reply) - 1; + if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) + break; + reply[reply_len] = '\0'; + + QString bss(reply); + if (bss.isEmpty() || bss.startsWith("FAIL")) + break; + + QString ssid, bssid, freq, signal, flags; + + QStringList lines = bss.split(QRegExp("\\n")); + for (QStringList::Iterator it = lines.begin(); + it != lines.end(); it++) { + int pos = (*it).indexOf('=') + 1; + if (pos < 1) + continue; + + if ((*it).startsWith("bssid=")) + bssid = (*it).mid(pos); + else if ((*it).startsWith("freq=")) + freq = (*it).mid(pos); + else if ((*it).startsWith("qual=")) + signal = (*it).mid(pos); + else if ((*it).startsWith("flags=")) + flags = (*it).mid(pos); + else if ((*it).startsWith("ssid=")) + ssid = (*it).mid(pos); + } + + QTreeWidgetItem *item = new QTreeWidgetItem(scanResultsWidget); + if (item) { + item->setText(0, ssid); + item->setText(1, bssid); + item->setText(2, freq); + item->setText(3, signal); + item->setText(4, flags); + } + + if (bssid.isEmpty()) + break; + } +} + + +void ScanResults::scanRequest() +{ + char reply[10]; + size_t reply_len = sizeof(reply); + + if (wpagui == NULL) + return; + + wpagui->ctrlRequest("SCAN", reply, &reply_len); +} + + +void ScanResults::getResults() +{ + updateResults(); +} + + +void ScanResults::bssSelected(QTreeWidgetItem *sel) +{ + NetworkConfig *nc = new NetworkConfig(); + if (nc == NULL) + return; + nc->setWpaGui(wpagui); + nc->paramsFromScanResults(sel); + nc->show(); + nc->exec(); +} diff --git a/Network/wpa_gui-qt4_/scanresults.h b/Network/wpa_gui-qt4_/scanresults.h new file mode 100644 index 0000000..2c4a1b0 --- /dev/null +++ b/Network/wpa_gui-qt4_/scanresults.h @@ -0,0 +1,46 @@ +/* + * wpa_gui - ScanResults class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef SCANRESULTS_H +#define SCANRESULTS_H + +#include +#include "ui_scanresults.h" + +class WpaGui; + +class ScanResults : public QDialog, public Ui::ScanResults +{ + Q_OBJECT + +public: + ScanResults(QWidget *parent = 0, const char *name = 0, + bool modal = false, Qt::WFlags fl = 0); + ~ScanResults(); + +public slots: + virtual void setWpaGui(WpaGui *_wpagui); + virtual void updateResults(); + virtual void scanRequest(); + virtual void getResults(); + virtual void bssSelected(QTreeWidgetItem *sel); + +protected slots: + virtual void languageChange(); + +private: + WpaGui *wpagui; +}; + +#endif /* SCANRESULTS_H */ diff --git a/Network/wpa_gui-qt4_/scanresults.ui b/Network/wpa_gui-qt4_/scanresults.ui new file mode 100644 index 0000000..81e405e --- /dev/null +++ b/Network/wpa_gui-qt4_/scanresults.ui @@ -0,0 +1,94 @@ + + ScanResults + + + + 0 + 0 + 452 + 244 + + + + Scan results + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + true + + + 5 + + + + SSID + + + + + BSSID + + + + + frequency + + + + + signal + + + + + flags + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Scan + + + + + + + Close + + + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/stringquery.cpp b/Network/wpa_gui-qt4_/stringquery.cpp new file mode 100644 index 0000000..1ca98d9 --- /dev/null +++ b/Network/wpa_gui-qt4_/stringquery.cpp @@ -0,0 +1,37 @@ +/* + * wpa_gui - StringQuery class + * Copyright (c) 2009, Atheros Communications + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#include +#include + +#include "stringquery.h" + + +StringQuery::StringQuery(QString label) +{ + edit = new QLineEdit; + edit->setFocus(); + QGridLayout *layout = new QGridLayout; + layout->addWidget(new QLabel(label), 0, 0); + layout->addWidget(edit, 0, 1); + setLayout(layout); + + connect(edit, SIGNAL(returnPressed()), this, SLOT(accept())); +} + + +QString StringQuery::get_string() +{ + return edit->text(); +} diff --git a/Network/wpa_gui-qt4_/stringquery.h b/Network/wpa_gui-qt4_/stringquery.h new file mode 100644 index 0000000..1b68217 --- /dev/null +++ b/Network/wpa_gui-qt4_/stringquery.h @@ -0,0 +1,34 @@ +/* + * wpa_gui - StringQuery class + * Copyright (c) 2009, Atheros Communications + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef STRINGQUERY_H +#define STRINGQUERY_H + +#include +#include +#include + +class StringQuery : public QDialog +{ + Q_OBJECT + +public: + StringQuery(QString label); + QString get_string(); + +private: + QLineEdit *edit; +}; + +#endif /* STRINGQUERY_H */ diff --git a/Network/wpa_gui-qt4_/userdatarequest.cpp b/Network/wpa_gui-qt4_/userdatarequest.cpp new file mode 100644 index 0000000..345f965 --- /dev/null +++ b/Network/wpa_gui-qt4_/userdatarequest.cpp @@ -0,0 +1,100 @@ +/* + * wpa_gui - UserDataRequest class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#include "userdatarequest.h" +#include "wpagui.h" +#include "common/wpa_ctrl.h" + + +UserDataRequest::UserDataRequest(QWidget *parent, const char *, bool, + Qt::WFlags) + : QDialog(parent) +{ + setupUi(this); + + connect(buttonOk, SIGNAL(clicked()), this, SLOT(sendReply())); + connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); + connect(queryEdit, SIGNAL(returnPressed()), this, SLOT(sendReply())); +} + + +UserDataRequest::~UserDataRequest() +{ +} + + +void UserDataRequest::languageChange() +{ + retranslateUi(this); +} + + +int UserDataRequest::setParams(WpaGui *_wpagui, const char *reqMsg) +{ + char *tmp, *pos, *pos2; + wpagui = _wpagui; + tmp = strdup(reqMsg); + if (tmp == NULL) + return -1; + pos = strchr(tmp, '-'); + if (pos == NULL) { + free(tmp); + return -1; + } + *pos++ = '\0'; + field = tmp; + pos2 = strchr(pos, ':'); + if (pos2 == NULL) { + free(tmp); + return -1; + } + *pos2++ = '\0'; + + networkid = atoi(pos); + queryInfo->setText(pos2); + if (strcmp(tmp, "PASSWORD") == 0) { + queryField->setText(tr("Password: ")); + queryEdit->setEchoMode(QLineEdit::Password); + } else if (strcmp(tmp, "NEW_PASSWORD") == 0) { + queryField->setText(tr("New password: ")); + queryEdit->setEchoMode(QLineEdit::Password); + } else if (strcmp(tmp, "IDENTITY") == 0) + queryField->setText(tr("Identity: ")); + else if (strcmp(tmp, "PASSPHRASE") == 0) { + queryField->setText(tr("Private key passphrase: ")); + queryEdit->setEchoMode(QLineEdit::Password); + } else + queryField->setText(field + ":"); + free(tmp); + + return 0; +} + + +void UserDataRequest::sendReply() +{ + char reply[10]; + size_t reply_len = sizeof(reply); + + if (wpagui == NULL) { + reject(); + return; + } + + QString cmd = QString(WPA_CTRL_RSP) + field + '-' + + QString::number(networkid) + ':' + + queryEdit->text(); + wpagui->ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); + accept(); +} diff --git a/Network/wpa_gui-qt4_/userdatarequest.h b/Network/wpa_gui-qt4_/userdatarequest.h new file mode 100644 index 0000000..2b6e837 --- /dev/null +++ b/Network/wpa_gui-qt4_/userdatarequest.h @@ -0,0 +1,46 @@ +/* + * wpa_gui - UserDataRequest class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef USERDATAREQUEST_H +#define USERDATAREQUEST_H + +#include +#include "ui_userdatarequest.h" + +class WpaGui; + +class UserDataRequest : public QDialog, public Ui::UserDataRequest +{ + Q_OBJECT + +public: + UserDataRequest(QWidget *parent = 0, const char *name = 0, + bool modal = false, Qt::WFlags fl = 0); + ~UserDataRequest(); + + int setParams(WpaGui *_wpagui, const char *reqMsg); + +public slots: + virtual void sendReply(); + +protected slots: + virtual void languageChange(); + +private: + WpaGui *wpagui; + int networkid; + QString field; +}; + +#endif /* USERDATAREQUEST_H */ diff --git a/Network/wpa_gui-qt4_/userdatarequest.ui b/Network/wpa_gui-qt4_/userdatarequest.ui new file mode 100644 index 0000000..1de2a26 --- /dev/null +++ b/Network/wpa_gui-qt4_/userdatarequest.ui @@ -0,0 +1,109 @@ + + + + + UserDataRequest + + + + 0 + 0 + 216 + 103 + + + + Authentication credentials required + + + true + + + + + + + + + + + + + 0 + + + + + + + + + + + + true + + + QLineEdit::Password + + + + + + + + + 0 + + + + + + 20 + 20 + + + + Expanding + + + Horizontal + + + + + + + &OK + + + + + + true + + + true + + + + + + + &Cancel + + + + + + true + + + + + + + + + + diff --git a/Network/wpa_gui-qt4_/wpa_gui.desktop b/Network/wpa_gui-qt4_/wpa_gui.desktop new file mode 100644 index 0000000..ccc7d87 --- /dev/null +++ b/Network/wpa_gui-qt4_/wpa_gui.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Name=wpa_gui +Comment=Graphical user interface for wpa_supplicant +Exec=wpa_gui +Icon=wpa_gui +GenericName=wpa_supplicant user interface +Terminal=false +Type=Application +Categories=Qt;Network; diff --git a/Network/wpa_gui-qt4_/wpa_gui.pro b/Network/wpa_gui-qt4_/wpa_gui.pro new file mode 100644 index 0000000..85848d7 --- /dev/null +++ b/Network/wpa_gui-qt4_/wpa_gui.pro @@ -0,0 +1,68 @@ +TEMPLATE = app +LANGUAGE = C++ +TRANSLATIONS = lang/wpa_gui_de.ts + +CONFIG += qt warn_on release + +DEFINES += CONFIG_CTRL_IFACE + +win32 { + LIBS += -lws2_32 -static + DEFINES += CONFIG_NATIVE_WINDOWS CONFIG_CTRL_IFACE_NAMED_PIPE + SOURCES += ../../src/utils/os_win32.c +} else:win32-g++ { + # cross compilation to win32 + LIBS += -lws2_32 -static -mwindows + DEFINES += CONFIG_NATIVE_WINDOWS CONFIG_CTRL_IFACE_NAMED_PIPE + SOURCES += ../../src/utils/os_win32.c + RESOURCES += icons_png.qrc +} else:win32-x-g++ { + # cross compilation to win32 + LIBS += -lws2_32 -static -mwindows + DEFINES += CONFIG_NATIVE_WINDOWS CONFIG_CTRL_IFACE_NAMED_PIPE + DEFINES += _X86_ + SOURCES += ../../src/utils/os_win32.c + RESOURCES += icons_png.qrc +} else { + DEFINES += CONFIG_CTRL_IFACE_UNIX + SOURCES += ../../src/utils/os_unix.c +} + +INCLUDEPATH += . .. ../../src ../../src/utils + +HEADERS += wpamsg.h \ + wpagui.h \ + eventhistory.h \ + scanresults.h \ + userdatarequest.h \ + networkconfig.h \ + addinterface.h \ + peers.h \ + stringquery.h + +SOURCES += main.cpp \ + wpagui.cpp \ + eventhistory.cpp \ + scanresults.cpp \ + userdatarequest.cpp \ + networkconfig.cpp \ + addinterface.cpp \ + peers.cpp \ + stringquery.cpp \ + ../../src/common/wpa_ctrl.c + +RESOURCES += icons.qrc + +FORMS = wpagui.ui \ + eventhistory.ui \ + scanresults.ui \ + userdatarequest.ui \ + networkconfig.ui \ + peers.ui + + +unix { + UI_DIR = .ui + MOC_DIR = .moc + OBJECTS_DIR = .obj +} diff --git a/Network/wpa_gui-qt4_/wpagui.cpp b/Network/wpa_gui-qt4_/wpagui.cpp new file mode 100644 index 0000000..97bf5ac --- /dev/null +++ b/Network/wpa_gui-qt4_/wpagui.cpp @@ -0,0 +1,1748 @@ +/* + * wpa_gui - WpaGui class + * Copyright (c) 2005-2011, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifdef __MINGW32__ +/* Need to get getopt() */ +#include +#endif + +#ifdef CONFIG_NATIVE_WINDOWS +#include +#endif /* CONFIG_NATIVE_WINDOWS */ + +#include +#include +#include +#include +#include + +#include "wpagui.h" +#include "dirent.h" +#include "common/wpa_ctrl.h" +#include "userdatarequest.h" +#include "networkconfig.h" + +#if 1 +/* Silence stdout */ +#define printf wpagui_printf +static int wpagui_printf(const char *, ...) +{ + return 0; +} +#endif + +WpaGui::WpaGui(QApplication *_app, QWidget *parent, const char *, Qt::WFlags) + : QMainWindow(parent), app(_app) +{ + setupUi(this); + +#ifdef CONFIG_NATIVE_WINDOWS + fileStopServiceAction = new QAction(this); + fileStopServiceAction->setObjectName("Stop Service"); + fileStopServiceAction->setIconText(tr("Stop Service")); + fileMenu->insertAction(actionWPS, fileStopServiceAction); + + fileStartServiceAction = new QAction(this); + fileStartServiceAction->setObjectName("Start Service"); + fileStartServiceAction->setIconText(tr("Start Service")); + fileMenu->insertAction(fileStopServiceAction, fileStartServiceAction); + + connect(fileStartServiceAction, SIGNAL(triggered()), this, + SLOT(startService())); + connect(fileStopServiceAction, SIGNAL(triggered()), this, + SLOT(stopService())); + + addInterfaceAction = new QAction(this); + addInterfaceAction->setIconText(tr("Add Interface")); + fileMenu->insertAction(fileStartServiceAction, addInterfaceAction); + + connect(addInterfaceAction, SIGNAL(triggered()), this, + SLOT(addInterface())); +#endif /* CONFIG_NATIVE_WINDOWS */ + + (void) statusBar(); + + /* + * Disable WPS tab by default; it will be enabled if wpa_supplicant is + * built with WPS support. + */ + wpsTab->setEnabled(false); + wpaguiTab->setTabEnabled(wpaguiTab->indexOf(wpsTab), false); + + connect(fileEventHistoryAction, SIGNAL(triggered()), this, + SLOT(eventHistory())); + connect(fileSaveConfigAction, SIGNAL(triggered()), this, + SLOT(saveConfig())); + connect(actionWPS, SIGNAL(triggered()), this, SLOT(wpsDialog())); + connect(actionPeers, SIGNAL(triggered()), this, SLOT(peersDialog())); + connect(fileExitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + connect(networkAddAction, SIGNAL(triggered()), this, + SLOT(addNetwork())); + connect(networkEditAction, SIGNAL(triggered()), this, + SLOT(editSelectedNetwork())); + connect(networkRemoveAction, SIGNAL(triggered()), this, + SLOT(removeSelectedNetwork())); + connect(networkEnableAllAction, SIGNAL(triggered()), this, + SLOT(enableAllNetworks())); + connect(networkDisableAllAction, SIGNAL(triggered()), this, + SLOT(disableAllNetworks())); + connect(networkRemoveAllAction, SIGNAL(triggered()), this, + SLOT(removeAllNetworks())); + connect(helpIndexAction, SIGNAL(triggered()), this, SLOT(helpIndex())); + connect(helpContentsAction, SIGNAL(triggered()), this, + SLOT(helpContents())); + connect(helpAboutAction, SIGNAL(triggered()), this, SLOT(helpAbout())); + connect(disconnectButton, SIGNAL(clicked()), this, SLOT(disconnect())); + connect(scanButton, SIGNAL(clicked()), this, SLOT(scan())); + connect(connectButton, SIGNAL(clicked()), this, SLOT(connectB())); + connect(adapterSelect, SIGNAL(activated(const QString&)), this, + SLOT(selectAdapter(const QString&))); + connect(networkSelect, SIGNAL(activated(const QString&)), this, + SLOT(selectNetwork(const QString&))); + connect(addNetworkButton, SIGNAL(clicked()), this, SLOT(addNetwork())); + connect(editNetworkButton, SIGNAL(clicked()), this, + SLOT(editListedNetwork())); + connect(removeNetworkButton, SIGNAL(clicked()), this, + SLOT(removeListedNetwork())); + connect(networkList, SIGNAL(itemSelectionChanged()), this, + SLOT(updateNetworkDisabledStatus())); + connect(enableRadioButton, SIGNAL(toggled(bool)), this, + SLOT(enableListedNetwork(bool))); + connect(disableRadioButton, SIGNAL(toggled(bool)), this, + SLOT(disableListedNetwork(bool))); + connect(scanNetworkButton, SIGNAL(clicked()), this, SLOT(scan())); + connect(networkList, SIGNAL(itemDoubleClicked(QListWidgetItem *)), + this, SLOT(editListedNetwork())); + connect(wpaguiTab, SIGNAL(currentChanged(int)), this, + SLOT(tabChanged(int))); + connect(wpsPbcButton, SIGNAL(clicked()), this, SLOT(wpsPbc())); + connect(wpsPinButton, SIGNAL(clicked()), this, SLOT(wpsGeneratePin())); + connect(wpsApPinEdit, SIGNAL(textChanged(const QString &)), this, + SLOT(wpsApPinChanged(const QString &))); + connect(wpsApPinButton, SIGNAL(clicked()), this, SLOT(wpsApPin())); + + eh = NULL; + scanres = NULL; + peers = NULL; + add_iface = NULL; + udr = NULL; + tray_icon = NULL; + startInTray = false; + ctrl_iface = NULL; + ctrl_conn = NULL; + monitor_conn = NULL; + msgNotifier = NULL; + ctrl_iface_dir = strdup("/var/run/wpa_supplicant"); + + parse_argv(); + +#ifndef QT_NO_SESSIONMANAGER + if (app->isSessionRestored()) { + QSettings settings("wpa_supplicant", "wpa_gui"); + settings.beginGroup("state"); + if (app->sessionId().compare(settings.value("session_id"). + toString()) == 0) + startInTray = settings.value("in_tray").toBool(); + settings.endGroup(); + } +#endif + + if (QSystemTrayIcon::isSystemTrayAvailable()) + createTrayIcon(startInTray); + else + show(); + + connectedToService = false; + textStatus->setText(tr("connecting to wpa_supplicant")); + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), SLOT(ping())); + timer->setSingleShot(FALSE); + timer->start(1000); + + if (openCtrlConnection(ctrl_iface) < 0) { + printf("Failed to open control connection to " + "wpa_supplicant.\n"); + } + + updateStatus(); + networkMayHaveChanged = true; + updateNetworks(); +} + + +WpaGui::~WpaGui() +{ + delete msgNotifier; + + if (monitor_conn) { + wpa_ctrl_detach(monitor_conn); + wpa_ctrl_close(monitor_conn); + monitor_conn = NULL; + } + if (ctrl_conn) { + wpa_ctrl_close(ctrl_conn); + ctrl_conn = NULL; + } + + if (eh) { + eh->close(); + delete eh; + eh = NULL; + } + + if (scanres) { + scanres->close(); + delete scanres; + scanres = NULL; + } + + if (peers) { + peers->close(); + delete peers; + peers = NULL; + } + + if (add_iface) { + add_iface->close(); + delete add_iface; + add_iface = NULL; + } + + if (udr) { + udr->close(); + delete udr; + udr = NULL; + } + + free(ctrl_iface); + ctrl_iface = NULL; + + free(ctrl_iface_dir); + ctrl_iface_dir = NULL; +} + + +void WpaGui::languageChange() +{ + retranslateUi(this); +} + + +void WpaGui::parse_argv() +{ + int c; + for (;;) { + c = getopt(qApp->argc(), qApp->argv(), "i:p:t"); + if (c < 0) + break; + switch (c) { + case 'i': + free(ctrl_iface); + ctrl_iface = strdup(optarg); + break; + case 'p': + free(ctrl_iface_dir); + ctrl_iface_dir = strdup(optarg); + break; + case 't': + startInTray = true; + break; + } + } +} + + +int WpaGui::openCtrlConnection(const char *ifname) +{ + char *cfile; + int flen; + char buf[2048], *pos, *pos2; + size_t len; + + if (ifname) { + if (ifname != ctrl_iface) { + free(ctrl_iface); + ctrl_iface = strdup(ifname); + } + } else { +#ifdef CONFIG_CTRL_IFACE_UDP + free(ctrl_iface); + ctrl_iface = strdup("udp"); +#endif /* CONFIG_CTRL_IFACE_UDP */ +#ifdef CONFIG_CTRL_IFACE_UNIX + struct dirent *dent; + DIR *dir = opendir(ctrl_iface_dir); + free(ctrl_iface); + ctrl_iface = NULL; + if (dir) { + while ((dent = readdir(dir))) { +#ifdef _DIRENT_HAVE_D_TYPE + /* Skip the file if it is not a socket. + * Also accept DT_UNKNOWN (0) in case + * the C library or underlying file + * system does not support d_type. */ + if (dent->d_type != DT_SOCK && + dent->d_type != DT_UNKNOWN) + continue; +#endif /* _DIRENT_HAVE_D_TYPE */ + + if (strcmp(dent->d_name, ".") == 0 || + strcmp(dent->d_name, "..") == 0) + continue; + printf("Selected interface '%s'\n", + dent->d_name); + ctrl_iface = strdup(dent->d_name); + break; + } + closedir(dir); + } +#endif /* CONFIG_CTRL_IFACE_UNIX */ +#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE + struct wpa_ctrl *ctrl; + int ret; + + free(ctrl_iface); + ctrl_iface = NULL; + + ctrl = wpa_ctrl_open(NULL); + if (ctrl) { + len = sizeof(buf) - 1; + ret = wpa_ctrl_request(ctrl, "INTERFACES", 10, buf, + &len, NULL); + if (ret >= 0) { + connectedToService = true; + buf[len] = '\0'; + pos = strchr(buf, '\n'); + if (pos) + *pos = '\0'; + ctrl_iface = strdup(buf); + } + wpa_ctrl_close(ctrl); + } +#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ + } + + if (ctrl_iface == NULL) { +#ifdef CONFIG_NATIVE_WINDOWS + static bool first = true; + if (first && !serviceRunning()) { + first = false; + if (QMessageBox::warning( + this, qAppName(), + tr("wpa_supplicant service is not " + "running.\n" + "Do you want to start it?"), + QMessageBox::Yes | QMessageBox::No) == + QMessageBox::Yes) + startService(); + } +#endif /* CONFIG_NATIVE_WINDOWS */ + return -1; + } + +#ifdef CONFIG_CTRL_IFACE_UNIX + flen = strlen(ctrl_iface_dir) + strlen(ctrl_iface) + 2; + cfile = (char *) malloc(flen); + if (cfile == NULL) + return -1; + snprintf(cfile, flen, "%s/%s", ctrl_iface_dir, ctrl_iface); +#else /* CONFIG_CTRL_IFACE_UNIX */ + flen = strlen(ctrl_iface) + 1; + cfile = (char *) malloc(flen); + if (cfile == NULL) + return -1; + snprintf(cfile, flen, "%s", ctrl_iface); +#endif /* CONFIG_CTRL_IFACE_UNIX */ + + if (ctrl_conn) { + wpa_ctrl_close(ctrl_conn); + ctrl_conn = NULL; + } + + if (monitor_conn) { + delete msgNotifier; + msgNotifier = NULL; + wpa_ctrl_detach(monitor_conn); + wpa_ctrl_close(monitor_conn); + monitor_conn = NULL; + } + + printf("Trying to connect to '%s'\n", cfile); + ctrl_conn = wpa_ctrl_open(cfile); + if (ctrl_conn == NULL) { + free(cfile); + return -1; + } + monitor_conn = wpa_ctrl_open(cfile); + free(cfile); + if (monitor_conn == NULL) { + wpa_ctrl_close(ctrl_conn); + return -1; + } + if (wpa_ctrl_attach(monitor_conn)) { + printf("Failed to attach to wpa_supplicant\n"); + wpa_ctrl_close(monitor_conn); + monitor_conn = NULL; + wpa_ctrl_close(ctrl_conn); + ctrl_conn = NULL; + return -1; + } + +#if defined(CONFIG_CTRL_IFACE_UNIX) || defined(CONFIG_CTRL_IFACE_UDP) + msgNotifier = new QSocketNotifier(wpa_ctrl_get_fd(monitor_conn), + QSocketNotifier::Read, this); + connect(msgNotifier, SIGNAL(activated(int)), SLOT(receiveMsgs())); +#endif + + adapterSelect->clear(); + adapterSelect->addItem(ctrl_iface); + adapterSelect->setCurrentIndex(0); + + len = sizeof(buf) - 1; + if (wpa_ctrl_request(ctrl_conn, "INTERFACES", 10, buf, &len, NULL) >= + 0) { + buf[len] = '\0'; + pos = buf; + while (*pos) { + pos2 = strchr(pos, '\n'); + if (pos2) + *pos2 = '\0'; + if (strcmp(pos, ctrl_iface) != 0) + adapterSelect->addItem(pos); + if (pos2) + pos = pos2 + 1; + else + break; + } + } + + len = sizeof(buf) - 1; + if (wpa_ctrl_request(ctrl_conn, "GET_CAPABILITY eap", 18, buf, &len, + NULL) >= 0) { + buf[len] = '\0'; + + QString res(buf); + QStringList types = res.split(QChar(' ')); + bool wps = types.contains("WSC"); + actionWPS->setEnabled(wps); + wpsTab->setEnabled(wps); + wpaguiTab->setTabEnabled(wpaguiTab->indexOf(wpsTab), wps); + } + + return 0; +} + + +int WpaGui::ctrlRequest(const char *cmd, char *buf, size_t *buflen) +{ + int ret; + + if (ctrl_conn == NULL) + return -3; + ret = wpa_ctrl_request(ctrl_conn, cmd, strlen(cmd), buf, buflen, NULL); + if (ret == -2) + printf("'%s' command timed out.\n", cmd); + else if (ret < 0) + printf("'%s' command failed.\n", cmd); + + return ret; +} + + +QString WpaGui::wpaStateTranslate(char *state) +{ + if (!strcmp(state, "DISCONNECTED")) + return tr("Disconnected"); + else if (!strcmp(state, "INACTIVE")) + return tr("Inactive"); + else if (!strcmp(state, "SCANNING")) + return tr("Scanning"); + else if (!strcmp(state, "AUTHENTICATING")) + return tr("Authenticating"); + else if (!strcmp(state, "ASSOCIATING")) + return tr("Associating"); + else if (!strcmp(state, "ASSOCIATED")) + return tr("Associated"); + else if (!strcmp(state, "4WAY_HANDSHAKE")) + return tr("4-Way Handshake"); + else if (!strcmp(state, "GROUP_HANDSHAKE")) + return tr("Group Handshake"); + else if (!strcmp(state, "COMPLETED")) + return tr("Completed"); + else + return tr("Unknown"); +} + + +void WpaGui::updateStatus() +{ + char buf[2048], *start, *end, *pos; + size_t len; + + pingsToStatusUpdate = 10; + + len = sizeof(buf) - 1; + if (ctrl_conn == NULL || ctrlRequest("STATUS", buf, &len) < 0) { + textStatus->setText(tr("Could not get status from " + "wpa_supplicant")); + textAuthentication->clear(); + textEncryption->clear(); + textSsid->clear(); + textBssid->clear(); + textIpAddress->clear(); + +#ifdef CONFIG_NATIVE_WINDOWS + static bool first = true; + if (first && connectedToService && + (ctrl_iface == NULL || *ctrl_iface == '\0')) { + first = false; + if (QMessageBox::information( + this, qAppName(), + tr("No network interfaces in use.\n" + "Would you like to add one?"), + QMessageBox::Yes | QMessageBox::No) == + QMessageBox::Yes) + addInterface(); + } +#endif /* CONFIG_NATIVE_WINDOWS */ + return; + } + + buf[len] = '\0'; + + bool auth_updated = false, ssid_updated = false; + bool bssid_updated = false, ipaddr_updated = false; + bool status_updated = false; + char *pairwise_cipher = NULL, *group_cipher = NULL; + char *mode = NULL; + + start = buf; + while (*start) { + bool last = false; + end = strchr(start, '\n'); + if (end == NULL) { + last = true; + end = start; + while (end[0] && end[1]) + end++; + } + *end = '\0'; + + pos = strchr(start, '='); + if (pos) { + *pos++ = '\0'; + if (strcmp(start, "bssid") == 0) { + bssid_updated = true; + textBssid->setText(pos); + } else if (strcmp(start, "ssid") == 0) { + ssid_updated = true; + textSsid->setText(pos); + } else if (strcmp(start, "ip_address") == 0) { + ipaddr_updated = true; + textIpAddress->setText(pos); + } else if (strcmp(start, "wpa_state") == 0) { + status_updated = true; + textStatus->setText(wpaStateTranslate(pos)); + } else if (strcmp(start, "key_mgmt") == 0) { + auth_updated = true; + textAuthentication->setText(pos); + /* TODO: could add EAP status to this */ + } else if (strcmp(start, "pairwise_cipher") == 0) { + pairwise_cipher = pos; + } else if (strcmp(start, "group_cipher") == 0) { + group_cipher = pos; + } else if (strcmp(start, "mode") == 0) { + mode = pos; + } + } + + if (last) + break; + start = end + 1; + } + if (status_updated && mode) + textStatus->setText(textStatus->text() + " (" + mode + ")"); + + if (pairwise_cipher || group_cipher) { + QString encr; + if (pairwise_cipher && group_cipher && + strcmp(pairwise_cipher, group_cipher) != 0) { + encr.append(pairwise_cipher); + encr.append(" + "); + encr.append(group_cipher); + } else if (pairwise_cipher) { + encr.append(pairwise_cipher); + } else { + encr.append(group_cipher); + encr.append(" [group key only]"); + } + textEncryption->setText(encr); + } else + textEncryption->clear(); + + if (!status_updated) + textStatus->clear(); + if (!auth_updated) + textAuthentication->clear(); + if (!ssid_updated) + textSsid->clear(); + if (!bssid_updated) + textBssid->clear(); + if (!ipaddr_updated) + textIpAddress->clear(); +} + + +void WpaGui::updateNetworks() +{ + char buf[2048], *start, *end, *id, *ssid, *bssid, *flags; + size_t len; + int first_active = -1; + int was_selected = -1; + bool current = false; + + if (!networkMayHaveChanged) + return; + + if (networkList->currentRow() >= 0) + was_selected = networkList->currentRow(); + + networkSelect->clear(); + networkList->clear(); + + if (ctrl_conn == NULL) + return; + + len = sizeof(buf) - 1; + if (ctrlRequest("LIST_NETWORKS", buf, &len) < 0) + return; + + buf[len] = '\0'; + start = strchr(buf, '\n'); + if (start == NULL) + return; + start++; + + while (*start) { + bool last = false; + end = strchr(start, '\n'); + if (end == NULL) { + last = true; + end = start; + while (end[0] && end[1]) + end++; + } + *end = '\0'; + + id = start; + ssid = strchr(id, '\t'); + if (ssid == NULL) + break; + *ssid++ = '\0'; + bssid = strchr(ssid, '\t'); + if (bssid == NULL) + break; + *bssid++ = '\0'; + flags = strchr(bssid, '\t'); + if (flags == NULL) + break; + *flags++ = '\0'; + + if (strstr(flags, "[DISABLED][P2P-PERSISTENT]")) { + if (last) + break; + start = end + 1; + continue; + } + + QString network(id); + network.append(": "); + network.append(ssid); + networkSelect->addItem(network); + networkList->addItem(network); + + if (strstr(flags, "[CURRENT]")) { + networkSelect->setCurrentIndex(networkSelect->count() - + 1); + current = true; + } else if (first_active < 0 && + strstr(flags, "[DISABLED]") == NULL) + first_active = networkSelect->count() - 1; + + if (last) + break; + start = end + 1; + } + + if (networkSelect->count() > 1) + networkSelect->addItem(tr("Select any network")); + + if (!current && first_active >= 0) + networkSelect->setCurrentIndex(first_active); + + if (was_selected >= 0 && networkList->count() > 0) { + if (was_selected < networkList->count()) + networkList->setCurrentRow(was_selected); + else + networkList->setCurrentRow(networkList->count() - 1); + } + else + networkList->setCurrentRow(networkSelect->currentIndex()); + + networkMayHaveChanged = false; +} + + +void WpaGui::helpIndex() +{ + printf("helpIndex\n"); +} + + +void WpaGui::helpContents() +{ + printf("helpContents\n"); +} + + +void WpaGui::helpAbout() +{ + QMessageBox::about(this, "wpa_gui for wpa_supplicant", + "Copyright (c) 2003-2011,\n" + "Jouni Malinen \n" + "and contributors.\n" + "\n" + "This program is free software. You can\n" + "distribute it and/or modify it under the terms " + "of\n" + "the GNU General Public License version 2.\n" + "\n" + "Alternatively, this software may be distributed\n" + "under the terms of the BSD license.\n" + "\n" + "This product includes software developed\n" + "by the OpenSSL Project for use in the\n" + "OpenSSL Toolkit (http://www.openssl.org/)\n"); +} + + +void WpaGui::disconnect() +{ + char reply[10]; + size_t reply_len = sizeof(reply); + ctrlRequest("DISCONNECT", reply, &reply_len); + stopWpsRun(false); +} + + +void WpaGui::scan() +{ + if (scanres) { + scanres->close(); + delete scanres; + } + + scanres = new ScanResults(); + if (scanres == NULL) + return; + scanres->setWpaGui(this); + scanres->show(); + scanres->exec(); +} + + +void WpaGui::eventHistory() +{ + if (eh) { + eh->close(); + delete eh; + } + + eh = new EventHistory(); + if (eh == NULL) + return; + eh->addEvents(msgs); + eh->show(); + eh->exec(); +} + + +void WpaGui::ping() +{ + char buf[10]; + size_t len; + +#ifdef CONFIG_CTRL_IFACE_NAMED_PIPE + /* + * QSocketNotifier cannot be used with Windows named pipes, so use a + * timer to check for received messages for now. This could be + * optimized be doing something specific to named pipes or Windows + * events, but it is not clear what would be the best way of doing that + * in Qt. + */ + receiveMsgs(); +#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ + + if (scanres && !scanres->isVisible()) { + delete scanres; + scanres = NULL; + } + + if (eh && !eh->isVisible()) { + delete eh; + eh = NULL; + } + + if (udr && !udr->isVisible()) { + delete udr; + udr = NULL; + } + + len = sizeof(buf) - 1; + if (ctrlRequest("PING", buf, &len) < 0) { + printf("PING failed - trying to reconnect\n"); + if (openCtrlConnection(ctrl_iface) >= 0) { + printf("Reconnected successfully\n"); + pingsToStatusUpdate = 0; + } + } + + pingsToStatusUpdate--; + if (pingsToStatusUpdate <= 0) { + updateStatus(); + updateNetworks(); + } + +#ifndef CONFIG_CTRL_IFACE_NAMED_PIPE + /* Use less frequent pings and status updates when the main window is + * hidden (running in taskbar). */ + int interval = isHidden() ? 5000 : 1000; + if (timer->interval() != interval) + timer->setInterval(interval); +#endif /* CONFIG_CTRL_IFACE_NAMED_PIPE */ +} + + +static int str_match(const char *a, const char *b) +{ + return strncmp(a, b, strlen(b)) == 0; +} + + +void WpaGui::processMsg(char *msg) +{ + char *pos = msg, *pos2; + int priority = 2; + + if (*pos == '<') { + /* skip priority */ + pos++; + priority = atoi(pos); + pos = strchr(pos, '>'); + if (pos) + pos++; + else + pos = msg; + } + + WpaMsg wm(pos, priority); + if (eh) + eh->addEvent(wm); + if (peers) + peers->event_notify(wm); + msgs.append(wm); + while (msgs.count() > 100) + msgs.pop_front(); + + /* Update last message with truncated version of the event */ + if (strncmp(pos, "CTRL-", 5) == 0) { + pos2 = strchr(pos, str_match(pos, WPA_CTRL_REQ) ? ':' : ' '); + if (pos2) + pos2++; + else + pos2 = pos; + } else + pos2 = pos; + QString lastmsg = pos2; + lastmsg.truncate(40); + textLastMessage->setText(lastmsg); + + pingsToStatusUpdate = 0; + networkMayHaveChanged = true; + + if (str_match(pos, WPA_CTRL_REQ)) + processCtrlReq(pos + strlen(WPA_CTRL_REQ)); + else if (str_match(pos, WPA_EVENT_SCAN_RESULTS) && scanres) + scanres->updateResults(); + else if (str_match(pos, WPA_EVENT_DISCONNECTED)) + showTrayMessage(QSystemTrayIcon::Information, 3, + tr("Disconnected from network.")); + else if (str_match(pos, WPA_EVENT_CONNECTED)) { + showTrayMessage(QSystemTrayIcon::Information, 3, + tr("Connection to network established.")); + QTimer::singleShot(5 * 1000, this, SLOT(showTrayStatus())); + stopWpsRun(true); + } else if (str_match(pos, WPS_EVENT_AP_AVAILABLE_PBC)) { + wpsStatusText->setText(tr("WPS AP in active PBC mode found")); + if (textStatus->text() == "INACTIVE" || + textStatus->text() == "DISCONNECTED") + wpaguiTab->setCurrentWidget(wpsTab); + wpsInstructions->setText(tr("Press the PBC button on the " + "screen to start registration")); + } else if (str_match(pos, WPS_EVENT_AP_AVAILABLE_PIN)) { + wpsStatusText->setText(tr("WPS AP with recently selected " + "registrar")); + if (textStatus->text() == "INACTIVE" || + textStatus->text() == "DISCONNECTED") + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPS_EVENT_AP_AVAILABLE_AUTH)) { + showTrayMessage(QSystemTrayIcon::Information, 3, + "Wi-Fi Protected Setup (WPS) AP\n" + "indicating this client is authorized."); + wpsStatusText->setText("WPS AP indicating this client is " + "authorized"); + if (textStatus->text() == "INACTIVE" || + textStatus->text() == "DISCONNECTED") + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPS_EVENT_AP_AVAILABLE)) { + wpsStatusText->setText(tr("WPS AP detected")); + } else if (str_match(pos, WPS_EVENT_OVERLAP)) { + wpsStatusText->setText(tr("PBC mode overlap detected")); + wpsInstructions->setText(tr("More than one AP is currently in " + "active WPS PBC mode. Wait couple " + "of minutes and try again")); + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPS_EVENT_CRED_RECEIVED)) { + wpsStatusText->setText(tr("Network configuration received")); + wpaguiTab->setCurrentWidget(wpsTab); + } else if (str_match(pos, WPA_EVENT_EAP_METHOD)) { + if (strstr(pos, "(WSC)")) + wpsStatusText->setText(tr("Registration started")); + } else if (str_match(pos, WPS_EVENT_M2D)) { + wpsStatusText->setText(tr("Registrar does not yet know PIN")); + } else if (str_match(pos, WPS_EVENT_FAIL)) { + wpsStatusText->setText(tr("Registration failed")); + } else if (str_match(pos, WPS_EVENT_SUCCESS)) { + wpsStatusText->setText(tr("Registration succeeded")); + } +} + + +void WpaGui::processCtrlReq(const char *req) +{ + if (udr) { + udr->close(); + delete udr; + } + udr = new UserDataRequest(); + if (udr == NULL) + return; + if (udr->setParams(this, req) < 0) { + delete udr; + udr = NULL; + return; + } + udr->show(); + udr->exec(); +} + + +void WpaGui::receiveMsgs() +{ + char buf[256]; + size_t len; + + while (monitor_conn && wpa_ctrl_pending(monitor_conn) > 0) { + len = sizeof(buf) - 1; + if (wpa_ctrl_recv(monitor_conn, buf, &len) == 0) { + buf[len] = '\0'; + processMsg(buf); + } + } +} + + +void WpaGui::connectB() +{ + char reply[10]; + size_t reply_len = sizeof(reply); + ctrlRequest("REASSOCIATE", reply, &reply_len); +} + + +void WpaGui::selectNetwork( const QString &sel ) +{ + QString cmd(sel); + char reply[10]; + size_t reply_len = sizeof(reply); + + if (cmd.contains(QRegExp("^\\d+:"))) + cmd.truncate(cmd.indexOf(':')); + else + cmd = "any"; + cmd.prepend("SELECT_NETWORK "); + ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); + triggerUpdate(); + stopWpsRun(false); +} + + +void WpaGui::enableNetwork(const QString &sel) +{ + QString cmd(sel); + char reply[10]; + size_t reply_len = sizeof(reply); + + if (cmd.contains(QRegExp("^\\d+:"))) + cmd.truncate(cmd.indexOf(':')); + else if (!cmd.startsWith("all")) { + printf("Invalid editNetwork '%s'\n", + cmd.toAscii().constData()); + return; + } + cmd.prepend("ENABLE_NETWORK "); + ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); + triggerUpdate(); +} + + +void WpaGui::disableNetwork(const QString &sel) +{ + QString cmd(sel); + char reply[10]; + size_t reply_len = sizeof(reply); + + if (cmd.contains(QRegExp("^\\d+:"))) + cmd.truncate(cmd.indexOf(':')); + else if (!cmd.startsWith("all")) { + printf("Invalid editNetwork '%s'\n", + cmd.toAscii().constData()); + return; + } + cmd.prepend("DISABLE_NETWORK "); + ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); + triggerUpdate(); +} + + +void WpaGui::editNetwork(const QString &sel) +{ + QString cmd(sel); + int id = -1; + + if (cmd.contains(QRegExp("^\\d+:"))) { + cmd.truncate(cmd.indexOf(':')); + id = cmd.toInt(); + } + + NetworkConfig *nc = new NetworkConfig(); + if (nc == NULL) + return; + nc->setWpaGui(this); + + if (id >= 0) + nc->paramsFromConfig(id); + else + nc->newNetwork(); + + nc->show(); + nc->exec(); +} + + +void WpaGui::editSelectedNetwork() +{ + if (networkSelect->count() < 1) { + QMessageBox::information( + this, tr("No Networks"), + tr("There are no networks to edit.\n")); + return; + } + QString sel(networkSelect->currentText()); + editNetwork(sel); +} + + +void WpaGui::editListedNetwork() +{ + if (networkList->currentRow() < 0) { + QMessageBox::information(this, tr("Select A Network"), + tr("Select a network from the list to" + " edit it.\n")); + return; + } + QString sel(networkList->currentItem()->text()); + editNetwork(sel); +} + + +void WpaGui::triggerUpdate() +{ + updateStatus(); + networkMayHaveChanged = true; + updateNetworks(); +} + + +void WpaGui::addNetwork() +{ + NetworkConfig *nc = new NetworkConfig(); + if (nc == NULL) + return; + nc->setWpaGui(this); + nc->newNetwork(); + nc->show(); + nc->exec(); +} + + +void WpaGui::removeNetwork(const QString &sel) +{ + QString cmd(sel); + char reply[10]; + size_t reply_len = sizeof(reply); + + if (cmd.contains(QRegExp("^\\d+:"))) + cmd.truncate(cmd.indexOf(':')); + else if (!cmd.startsWith("all")) { + printf("Invalid editNetwork '%s'\n", + cmd.toAscii().constData()); + return; + } + cmd.prepend("REMOVE_NETWORK "); + ctrlRequest(cmd.toAscii().constData(), reply, &reply_len); + triggerUpdate(); +} + + +void WpaGui::removeSelectedNetwork() +{ + if (networkSelect->count() < 1) { + QMessageBox::information(this, tr("No Networks"), + tr("There are no networks to remove." + "\n")); + return; + } + QString sel(networkSelect->currentText()); + removeNetwork(sel); +} + + +void WpaGui::removeListedNetwork() +{ + if (networkList->currentRow() < 0) { + QMessageBox::information(this, tr("Select A Network"), + tr("Select a network from the list " + "to remove it.\n")); + return; + } + QString sel(networkList->currentItem()->text()); + removeNetwork(sel); +} + + +void WpaGui::enableAllNetworks() +{ + QString sel("all"); + enableNetwork(sel); +} + + +void WpaGui::disableAllNetworks() +{ + QString sel("all"); + disableNetwork(sel); +} + + +void WpaGui::removeAllNetworks() +{ + QString sel("all"); + removeNetwork(sel); +} + + +int WpaGui::getNetworkDisabled(const QString &sel) +{ + QString cmd(sel); + char reply[10]; + size_t reply_len = sizeof(reply) - 1; + int pos = cmd.indexOf(':'); + if (pos < 0) { + printf("Invalid getNetworkDisabled '%s'\n", + cmd.toAscii().constData()); + return -1; + } + cmd.truncate(pos); + cmd.prepend("GET_NETWORK "); + cmd.append(" disabled"); + + if (ctrlRequest(cmd.toAscii().constData(), reply, &reply_len) >= 0 + && reply_len >= 1) { + reply[reply_len] = '\0'; + if (!str_match(reply, "FAIL")) + return atoi(reply); + } + + return -1; +} + + +void WpaGui::updateNetworkDisabledStatus() +{ + if (networkList->currentRow() < 0) + return; + + QString sel(networkList->currentItem()->text()); + + switch (getNetworkDisabled(sel)) { + case 0: + if (!enableRadioButton->isChecked()) + enableRadioButton->setChecked(true); + return; + case 1: + if (!disableRadioButton->isChecked()) + disableRadioButton->setChecked(true); + return; + } +} + + +void WpaGui::enableListedNetwork(bool enabled) +{ + if (networkList->currentRow() < 0 || !enabled) + return; + + QString sel(networkList->currentItem()->text()); + + if (getNetworkDisabled(sel) == 1) + enableNetwork(sel); +} + + +void WpaGui::disableListedNetwork(bool disabled) +{ + if (networkList->currentRow() < 0 || !disabled) + return; + + QString sel(networkList->currentItem()->text()); + + if (getNetworkDisabled(sel) == 0) + disableNetwork(sel); +} + + +void WpaGui::saveConfig() +{ + char buf[10]; + size_t len; + + len = sizeof(buf) - 1; + ctrlRequest("SAVE_CONFIG", buf, &len); + + buf[len] = '\0'; + + if (str_match(buf, "FAIL")) + QMessageBox::warning( + this, tr("Failed to save configuration"), + tr("The configuration could not be saved.\n" + "\n" + "The update_config=1 configuration option\n" + "must be used for configuration saving to\n" + "be permitted.\n")); + else + QMessageBox::information( + this, tr("Saved configuration"), + tr("The current configuration was saved." + "\n")); +} + + +void WpaGui::selectAdapter( const QString & sel ) +{ + if (openCtrlConnection(sel.toAscii().constData()) < 0) + printf("Failed to open control connection to " + "wpa_supplicant.\n"); + updateStatus(); + updateNetworks(); +} + + +void WpaGui::createTrayIcon(bool trayOnly) +{ + QApplication::setQuitOnLastWindowClosed(false); + + tray_icon = new QSystemTrayIcon(this); + tray_icon->setToolTip(qAppName() + tr(" - wpa_supplicant user interface")); + if (QImageReader::supportedImageFormats().contains(QByteArray("svg"))) + tray_icon->setIcon(QIcon(":/icons/wpa_gui.svg")); + else + tray_icon->setIcon(QIcon(":/icons/wpa_gui.png")); + + connect(tray_icon, + SIGNAL(activated(QSystemTrayIcon::ActivationReason)), + this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason))); + + ackTrayIcon = false; + + tray_menu = new QMenu(this); + + disconnectAction = new QAction(tr("&Disconnect"), this); + reconnectAction = new QAction(tr("Re&connect"), this); + connect(disconnectAction, SIGNAL(triggered()), this, + SLOT(disconnect())); + connect(reconnectAction, SIGNAL(triggered()), this, + SLOT(connectB())); + tray_menu->addAction(disconnectAction); + tray_menu->addAction(reconnectAction); + tray_menu->addSeparator(); + + eventAction = new QAction(tr("&Event History"), this); + scanAction = new QAction(tr("Scan &Results"), this); + statAction = new QAction(tr("S&tatus"), this); + connect(eventAction, SIGNAL(triggered()), this, SLOT(eventHistory())); + connect(scanAction, SIGNAL(triggered()), this, SLOT(scan())); + connect(statAction, SIGNAL(triggered()), this, SLOT(showTrayStatus())); + tray_menu->addAction(eventAction); + tray_menu->addAction(scanAction); + tray_menu->addAction(statAction); + tray_menu->addSeparator(); + + showAction = new QAction(tr("&Show Window"), this); + hideAction = new QAction(tr("&Hide Window"), this); + quitAction = new QAction(tr("&Quit"), this); + connect(showAction, SIGNAL(triggered()), this, SLOT(show())); + connect(hideAction, SIGNAL(triggered()), this, SLOT(hide())); + connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + tray_menu->addAction(showAction); + tray_menu->addAction(hideAction); + tray_menu->addSeparator(); + tray_menu->addAction(quitAction); + + tray_icon->setContextMenu(tray_menu); + + tray_icon->show(); + + if (!trayOnly) + show(); + inTray = trayOnly; +} + + +void WpaGui::showTrayMessage(QSystemTrayIcon::MessageIcon type, int sec, + const QString & msg) +{ + if (!QSystemTrayIcon::supportsMessages()) + return; + + if (isVisible() || !tray_icon || !tray_icon->isVisible()) + return; + + tray_icon->showMessage(qAppName(), msg, type, sec * 1000); +} + + +void WpaGui::trayActivated(QSystemTrayIcon::ActivationReason how) + { + switch (how) { + /* use close() here instead of hide() and allow the + * custom closeEvent handler take care of children */ + case QSystemTrayIcon::Trigger: + ackTrayIcon = true; + if (isVisible()) { + close(); + inTray = true; + } else { + show(); + inTray = false; + } + break; + case QSystemTrayIcon::MiddleClick: + showTrayStatus(); + break; + default: + break; + } +} + + +void WpaGui::showTrayStatus() +{ + char buf[2048]; + size_t len; + + len = sizeof(buf) - 1; + if (ctrlRequest("STATUS", buf, &len) < 0) + return; + buf[len] = '\0'; + + QString msg, status(buf); + + QStringList lines = status.split(QRegExp("\\n")); + for (QStringList::Iterator it = lines.begin(); + it != lines.end(); it++) { + int pos = (*it).indexOf('=') + 1; + if (pos < 1) + continue; + + if ((*it).startsWith("bssid=")) + msg.append("BSSID:\t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("ssid=")) + msg.append("SSID: \t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("pairwise_cipher=")) + msg.append("PAIR: \t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("group_cipher=")) + msg.append("GROUP:\t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("key_mgmt=")) + msg.append("AUTH: \t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("wpa_state=")) + msg.append("STATE:\t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("ip_address=")) + msg.append("IP: \t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("Supplicant PAE state=")) + msg.append("PAE: \t" + (*it).mid(pos) + "\n"); + else if ((*it).startsWith("EAP state=")) + msg.append("EAP: \t" + (*it).mid(pos) + "\n"); + } + + if (!msg.isEmpty()) + showTrayMessage(QSystemTrayIcon::Information, 10, msg); +} + + +void WpaGui::closeEvent(QCloseEvent *event) +{ + if (eh) { + eh->close(); + delete eh; + eh = NULL; + } + + if (scanres) { + scanres->close(); + delete scanres; + scanres = NULL; + } + + if (peers) { + peers->close(); + delete peers; + peers = NULL; + } + + if (udr) { + udr->close(); + delete udr; + udr = NULL; + } + + if (tray_icon && !ackTrayIcon) { + /* give user a visual hint that the tray icon exists */ + if (QSystemTrayIcon::supportsMessages()) { + hide(); + showTrayMessage(QSystemTrayIcon::Information, 3, + qAppName() + + tr(" will keep running in " + "the system tray.")); + } else { + QMessageBox::information(this, qAppName() + + tr(" systray"), + tr("The program will keep " + "running in the system " + "tray.")); + } + ackTrayIcon = true; + } + + event->accept(); +} + + +void WpaGui::wpsDialog() +{ + wpaguiTab->setCurrentWidget(wpsTab); +} + + +void WpaGui::peersDialog() +{ + if (peers) { + peers->close(); + delete peers; + } + + peers = new Peers(); + if (peers == NULL) + return; + peers->setWpaGui(this); + peers->show(); + peers->exec(); +} + + +void WpaGui::tabChanged(int index) +{ + if (index != 2) + return; + + if (wpsRunning) + return; + + wpsApPinEdit->setEnabled(!bssFromScan.isEmpty()); + if (bssFromScan.isEmpty()) + wpsApPinButton->setEnabled(false); +} + + +void WpaGui::wpsPbc() +{ + char reply[20]; + size_t reply_len = sizeof(reply); + + if (ctrlRequest("WPS_PBC", reply, &reply_len) < 0) + return; + + wpsPinEdit->setEnabled(false); + if (wpsStatusText->text().compare(tr("WPS AP in active PBC mode found"))) { + wpsInstructions->setText(tr("Press the push button on the AP to " + "start the PBC mode.")); + } else { + wpsInstructions->setText(tr("If you have not yet done so, press " + "the push button on the AP to start " + "the PBC mode.")); + } + wpsStatusText->setText(tr("Waiting for Registrar")); + wpsRunning = true; +} + + +void WpaGui::wpsGeneratePin() +{ + char reply[20]; + size_t reply_len = sizeof(reply) - 1; + + if (ctrlRequest("WPS_PIN any", reply, &reply_len) < 0) + return; + + reply[reply_len] = '\0'; + + wpsPinEdit->setText(reply); + wpsPinEdit->setEnabled(true); + wpsInstructions->setText(tr("Enter the generated PIN into the Registrar " + "(either the internal one in the AP or an " + "external one).")); + wpsStatusText->setText(tr("Waiting for Registrar")); + wpsRunning = true; +} + + +void WpaGui::setBssFromScan(const QString &bssid) +{ + bssFromScan = bssid; + wpsApPinEdit->setEnabled(!bssFromScan.isEmpty()); + wpsApPinButton->setEnabled(wpsApPinEdit->text().length() == 8); + wpsStatusText->setText(tr("WPS AP selected from scan results")); + wpsInstructions->setText(tr("If you want to use an AP device PIN, e.g., " + "from a label in the device, enter the eight " + "digit AP PIN and click Use AP PIN button.")); +} + + +void WpaGui::wpsApPinChanged(const QString &text) +{ + wpsApPinButton->setEnabled(text.length() == 8); +} + + +void WpaGui::wpsApPin() +{ + char reply[20]; + size_t reply_len = sizeof(reply); + + QString cmd("WPS_REG " + bssFromScan + " " + wpsApPinEdit->text()); + if (ctrlRequest(cmd.toAscii().constData(), reply, &reply_len) < 0) + return; + + wpsStatusText->setText(tr("Waiting for AP/Enrollee")); + wpsRunning = true; +} + + +void WpaGui::stopWpsRun(bool success) +{ + if (wpsRunning) + wpsStatusText->setText(success ? tr("Connected to the network") : + tr("Stopped")); + else + wpsStatusText->setText(""); + wpsPinEdit->setEnabled(false); + wpsInstructions->setText(""); + wpsRunning = false; + bssFromScan = ""; + wpsApPinEdit->setEnabled(false); + wpsApPinButton->setEnabled(false); +} + + +#ifdef CONFIG_NATIVE_WINDOWS + +#ifndef WPASVC_NAME +#define WPASVC_NAME TEXT("wpasvc") +#endif + +class ErrorMsg : public QMessageBox { +public: + ErrorMsg(QWidget *parent, DWORD last_err = GetLastError()); + void showMsg(QString msg); +private: + DWORD err; +}; + +ErrorMsg::ErrorMsg(QWidget *parent, DWORD last_err) : + QMessageBox(parent), err(last_err) +{ + setWindowTitle(tr("wpa_gui error")); + setIcon(QMessageBox::Warning); +} + +void ErrorMsg::showMsg(QString msg) +{ + LPTSTR buf; + + setText(msg); + if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, err, 0, (LPTSTR) (void *) &buf, + 0, NULL) > 0) { + QString msg = QString::fromWCharArray(buf); + setInformativeText(QString("[%1] %2").arg(err).arg(msg)); + LocalFree(buf); + } else { + setInformativeText(QString("[%1]").arg(err)); + } + + exec(); +} + + +void WpaGui::startService() +{ + SC_HANDLE svc, scm; + + scm = OpenSCManager(0, 0, SC_MANAGER_CONNECT); + if (!scm) { + ErrorMsg(this).showMsg(tr("OpenSCManager failed")); + return; + } + + svc = OpenService(scm, WPASVC_NAME, SERVICE_START); + if (!svc) { + ErrorMsg(this).showMsg(tr("OpenService failed")); + CloseServiceHandle(scm); + return; + } + + if (!StartService(svc, 0, NULL)) { + ErrorMsg(this).showMsg(tr("Failed to start wpa_supplicant " + "service")); + } + + CloseServiceHandle(svc); + CloseServiceHandle(scm); +} + + +void WpaGui::stopService() +{ + SC_HANDLE svc, scm; + SERVICE_STATUS status; + + scm = OpenSCManager(0, 0, SC_MANAGER_CONNECT); + if (!scm) { + ErrorMsg(this).showMsg(tr("OpenSCManager failed")); + return; + } + + svc = OpenService(scm, WPASVC_NAME, SERVICE_STOP); + if (!svc) { + ErrorMsg(this).showMsg(tr("OpenService failed")); + CloseServiceHandle(scm); + return; + } + + if (!ControlService(svc, SERVICE_CONTROL_STOP, &status)) { + ErrorMsg(this).showMsg(tr("Failed to stop wpa_supplicant " + "service")); + } + + CloseServiceHandle(svc); + CloseServiceHandle(scm); +} + + +bool WpaGui::serviceRunning() +{ + SC_HANDLE svc, scm; + SERVICE_STATUS status; + bool running = false; + + scm = OpenSCManager(0, 0, SC_MANAGER_CONNECT); + if (!scm) { + printf("OpenSCManager failed: %d\n", (int) GetLastError()); + return false; + } + + svc = OpenService(scm, WPASVC_NAME, SERVICE_QUERY_STATUS); + if (!svc) { + printf("OpenService failed: %d\n\n", (int) GetLastError()); + CloseServiceHandle(scm); + return false; + } + + if (QueryServiceStatus(svc, &status)) { + if (status.dwCurrentState != SERVICE_STOPPED) + running = true; + } + + CloseServiceHandle(svc); + CloseServiceHandle(scm); + + return running; +} + +#endif /* CONFIG_NATIVE_WINDOWS */ + + +void WpaGui::addInterface() +{ + if (add_iface) { + add_iface->close(); + delete add_iface; + } + add_iface = new AddInterface(this, this); + add_iface->show(); + add_iface->exec(); +} + + +#ifndef QT_NO_SESSIONMANAGER +void WpaGui::saveState() +{ + QSettings settings("wpa_supplicant", "wpa_gui"); + settings.beginGroup("state"); + settings.setValue("session_id", app->sessionId()); + settings.setValue("in_tray", inTray); + settings.endGroup(); +} +#endif diff --git a/Network/wpa_gui-qt4_/wpagui.h b/Network/wpa_gui-qt4_/wpagui.h new file mode 100644 index 0000000..2e1af8e --- /dev/null +++ b/Network/wpa_gui-qt4_/wpagui.h @@ -0,0 +1,150 @@ +/* + * wpa_gui - WpaGui class + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef WPAGUI_H +#define WPAGUI_H + +#include +#include +#include "ui_wpagui.h" +#include "addinterface.h" + +class UserDataRequest; + + +class WpaGui : public QMainWindow, public Ui::WpaGui +{ + Q_OBJECT + +public: + WpaGui(QApplication *app, QWidget *parent = 0, const char *name = 0, + Qt::WFlags fl = 0); + ~WpaGui(); + + virtual int ctrlRequest(const char *cmd, char *buf, size_t *buflen); + virtual void triggerUpdate(); + virtual void editNetwork(const QString &sel); + virtual void removeNetwork(const QString &sel); + virtual void enableNetwork(const QString &sel); + virtual void disableNetwork(const QString &sel); + virtual int getNetworkDisabled(const QString &sel); + void setBssFromScan(const QString &bssid); +#ifndef QT_NO_SESSIONMANAGER + void saveState(); +#endif + +public slots: + virtual void parse_argv(); + virtual void updateStatus(); + virtual void updateNetworks(); + virtual void helpIndex(); + virtual void helpContents(); + virtual void helpAbout(); + virtual void disconnect(); + virtual void scan(); + virtual void eventHistory(); + virtual void ping(); + virtual void processMsg(char *msg); + virtual void processCtrlReq(const char *req); + virtual void receiveMsgs(); + virtual void connectB(); + virtual void selectNetwork(const QString &sel); + virtual void editSelectedNetwork(); + virtual void editListedNetwork(); + virtual void removeSelectedNetwork(); + virtual void removeListedNetwork(); + virtual void addNetwork(); + virtual void enableAllNetworks(); + virtual void disableAllNetworks(); + virtual void removeAllNetworks(); + virtual void saveConfig(); + virtual void selectAdapter(const QString &sel); + virtual void updateNetworkDisabledStatus(); + virtual void enableListedNetwork(bool); + virtual void disableListedNetwork(bool); + virtual void showTrayMessage(QSystemTrayIcon::MessageIcon type, + int sec, const QString &msg); + virtual void showTrayStatus(); + virtual void wpsDialog(); + virtual void peersDialog(); + virtual void tabChanged(int index); + virtual void wpsPbc(); + virtual void wpsGeneratePin(); + virtual void wpsApPinChanged(const QString &text); + virtual void wpsApPin(); +#ifdef CONFIG_NATIVE_WINDOWS + virtual void startService(); + virtual void stopService(); +#endif /* CONFIG_NATIVE_WINDOWS */ + virtual void addInterface(); + +protected slots: + virtual void languageChange(); + virtual void trayActivated(QSystemTrayIcon::ActivationReason how); + virtual void closeEvent(QCloseEvent *event); + +private: + ScanResults *scanres; + Peers *peers; + bool networkMayHaveChanged; + char *ctrl_iface; + EventHistory *eh; + struct wpa_ctrl *ctrl_conn; + QSocketNotifier *msgNotifier; + QTimer *timer; + int pingsToStatusUpdate; + WpaMsgList msgs; + char *ctrl_iface_dir; + struct wpa_ctrl *monitor_conn; + UserDataRequest *udr; + QAction *disconnectAction; + QAction *reconnectAction; + QAction *eventAction; + QAction *scanAction; + QAction *statAction; + QAction *showAction; + QAction *hideAction; + QAction *quitAction; + QMenu *tray_menu; + QSystemTrayIcon *tray_icon; + QString wpaStateTranslate(char *state); + void createTrayIcon(bool); + bool ackTrayIcon; + bool startInTray; + + int openCtrlConnection(const char *ifname); + + bool wpsRunning; + + QString bssFromScan; + + void stopWpsRun(bool success); + +#ifdef CONFIG_NATIVE_WINDOWS + QAction *fileStartServiceAction; + QAction *fileStopServiceAction; + + bool serviceRunning(); +#endif /* CONFIG_NATIVE_WINDOWS */ + + QAction *addInterfaceAction; + AddInterface *add_iface; + + bool connectedToService; + + QApplication *app; + bool inTray; +}; + +#endif /* WPAGUI_H */ diff --git a/Network/wpa_gui-qt4_/wpagui.ui b/Network/wpa_gui-qt4_/wpagui.ui new file mode 100644 index 0000000..9f9039f --- /dev/null +++ b/Network/wpa_gui-qt4_/wpagui.ui @@ -0,0 +1,524 @@ + + WpaGui + + + + 0 + 0 + 345 + 330 + + + + wpa_gui + + + + :/icons/wpa_gui.svg:/icons/wpa_gui.svg + + + + + + + Adapter: + + + + + + + + + + Network: + + + + + + + + + + 0 + + + + Current Status + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + Status: + + + + + + + Last message: + + + + + + + Authentication: + + + + + + + Encryption: + + + + + + + SSID: + + + + + + + BSSID: + + + + + + + IP address: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Connect + + + + + + + Disconnect + + + + + + + Scan + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Manage Networks + + + + + + true + + + + + + + Qt::Vertical + + + + 20 + 61 + + + + + + + + Enabled + + + + + + + Edit + + + + + + + Remove + + + + + + + Qt::Vertical + + + + 20 + 61 + + + + + + + + Disabled + + + + + + + Add + + + + + + + Scan + + + + + + + + WPS + + + + + + Status: + + + + + + + + + + + + + + PBC - push button + + + + + + + Generate PIN + + + + + + + PIN: + + + + + + + false + + + true + + + + + + + false + + + Use AP PIN + + + + + + + AP PIN: + + + + + + + false + + + + + + + true + + + + + + + + + + + + + 0 + 0 + 345 + 24 + + + + + &File + + + + + + + + + + + &Network + + + + + + + + + + + + &Help + + + + + + + + + + + + + Event &History + + + + + &Save Configuration + + + Ctrl+S + + + + + E&xit + + + Ctrl+Q + + + + + &Add + + + + + &Edit + + + + + &Remove + + + + + E&nable All + + + + + &Disable All + + + + + Re&move All + + + + + false + + + &Contents... + + + + + false + + + &Index... + + + + + &About + + + + + false + + + &Wi-Fi Protected Setup + + + + + &Peers + + + + + + + qtimer.h + qsocketnotifier.h + wpamsg.h + eventhistory.h + scanresults.h + peers.h + + + + + + diff --git a/Network/wpa_gui-qt4_/wpamsg.h b/Network/wpa_gui-qt4_/wpamsg.h new file mode 100644 index 0000000..4950b21 --- /dev/null +++ b/Network/wpa_gui-qt4_/wpamsg.h @@ -0,0 +1,41 @@ +/* + * wpa_gui - WpaMsg class for storing event messages + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef WPAMSG_H +#define WPAMSG_H + +#include +#include + +class WpaMsg { +public: + WpaMsg(const QString &_msg, int _priority = 2) + : msg(_msg), priority(_priority) + { + timestamp = QDateTime::currentDateTime(); + } + + QString getMsg() const { return msg; } + int getPriority() const { return priority; } + QDateTime getTimestamp() const { return timestamp; } + +private: + QString msg; + int priority; + QDateTime timestamp; +}; + +typedef QLinkedList WpaMsgList; + +#endif /* WPAMSG_H */ diff --git a/Network/wpamsg.h b/Network/wpamsg.h new file mode 100644 index 0000000..4950b21 --- /dev/null +++ b/Network/wpamsg.h @@ -0,0 +1,41 @@ +/* + * wpa_gui - WpaMsg class for storing event messages + * Copyright (c) 2005-2006, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + +#ifndef WPAMSG_H +#define WPAMSG_H + +#include +#include + +class WpaMsg { +public: + WpaMsg(const QString &_msg, int _priority = 2) + : msg(_msg), priority(_priority) + { + timestamp = QDateTime::currentDateTime(); + } + + QString getMsg() const { return msg; } + int getPriority() const { return priority; } + QDateTime getTimestamp() const { return timestamp; } + +private: + QString msg; + int priority; + QDateTime timestamp; +}; + +typedef QLinkedList WpaMsgList; + +#endif /* WPAMSG_H */ diff --git a/OtherInfo.cpp b/OtherInfo.cpp new file mode 100644 index 0000000..54cd94b --- /dev/null +++ b/OtherInfo.cpp @@ -0,0 +1,274 @@ +#include "OtherInfo.h" +#include "ui_otherinfo.h" +#include +#include +#include +//#define FOR_ADJUST 0 +#define FOR_PHASE_ADJUST 1 +OtherInfo::OtherInfo(QWidget *parent) : + QWidget(parent), + ui(new Ui::OtherInfo) +{ + + ui->setupUi(this); + lockPhaseFlag = false; + lockedPhase = 0; + ui->memDisplayAndEdit->setHidden(1); + + ui->lab_enableChargeFullTime->setHidden(1); + ui->lab_phaseDetectDelay->setHidden(1); + ui->lab_phaseDetectVol->setHidden(1); + ui->lab_phaseHighLowRatio->setHidden(1); + ui->lab_phase_detect_pulse_num->setHidden(1); + + ui->checkBoxChargeFullTime->setHidden(1); + //ui->memDisplayAndEdit->setHidden(1); + ui->pushButtonLockPhase->setHidden(1); + //ui->spinBoxLockedPhase->setHidden(1); + //ui->spinBoxPhaseDetectVoltage->setEnabled(1); +#ifndef FOR_PHASE_ADJUST + ui->lab_phaseDetectVol->setHidden(1); + ui->spinBoxPhaseDetectVoltage->setHidden(1); + ui->spinBoxPhaseDetectVoltage->setEnabled(1); + //ui->spinBoxPhaseGroupValue->setHidden(1); + //ui->labelPhaseGroups->setHidden(1); + //ui->lab_phase_detect_pulse_num->setHidden(1); + ui->labelPhaseDetectNum->setHidden(1); + ui->spinBoxPhaseDetectDotNum->setHidden(1); + //ui->lab_phaseDetectDelay->setHidden(1); + ui->labelPhaseDetectDelay->setHidden(1); + ui->spinBoxPhaseDetectDelay->setHidden(1); +#else +#endif +} + +OtherInfo::~OtherInfo() +{ + delete ui; + +} +void OtherInfo::OtherupdateSysParaToUI(){ + updateSysParaToUI(); +} + +#define PHASE_BY_HAND_DIV 8 //相位会在逻辑里面放大 +void OtherInfo::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; + ui->phaseGraphic->bindSysPara(sysPara); + ui->memDisplayAndEdit->bindSysPara(sysPara); + lockPhaseFlag = sysPara->para.phaseByHand != 0; + updateLockPhaseWidgets(); +} + +void OtherInfo::updateSysParaToUI(){ + if(sysPara){ + ui->spinBoxHighLowRatio->setValue(sysPara->para.phaseHighLowRatio); + ui->spinBoxPhaseDetectDotNum->setValue(sysPara->para.phase_detect_pulse_num); + ui->spinBoxPhaseDetectVoltage->setValue(sysPara->para.phaseDetectVol); + + ui->spinBoxPhaseDetectDelay->setValue(sysPara->para.phaseDetectDelay); + ui->spinBoxPhaseShift->setValue(sysPara->para.phaseShift); + ui->spinBoxBlickLightPeriod->setValue(sysPara->para.blinkLightPeriod); + ui->checkBoxChargeFullTime->setChecked(sysPara->para.enableChargeFullTime); + } +} + +void OtherInfo::onAuthChanged(int auth){ + //ui->memDisplayAndEdit->setShown(auth & AUTH_SUPER_USER2); + //ui->pushButtonLockPhase->setEnabled(auth & AUTH_SUPER_USER2); + //ui->pushButtonLockPhase->setShown(auth & AUTH_SUPER_USER2); + //ui->spinBoxLockedPhase->setShown(auth & AUTH_SUPER_USER2); + + + //ui->lab_enableChargeFullTime->setShown(auth & AUTH_SUPER_USER2); + //ui->lab_phaseDetectDelay->setShown(auth & AUTH_SUPER_USER2); + //ui->lab_phaseDetectVol->setShown(auth & AUTH_SUPER_USER2); + //ui->lab_phaseHighLowRatio->setShown(auth & AUTH_SUPER_USER2); + //ui->lab_phase_detect_pulse_num->setShown(auth & AUTH_SUPER_USER2); + + +} + +void OtherInfo::applyUIPara(){ + if(sysPara){ + sysPara->para.phaseHighLowRatio = ui->spinBoxHighLowRatio->value();//界面上是相检, 占空比 + //sysPara->para.phase_detect_pulse_num = 6;// ui->spinBoxPhaseDetectDotNum->value(); + sysPara->para.phase_detect_pulse_num = ui->spinBoxPhaseDetectDotNum->value(); +#ifndef FOR_PHASE_ADJUST + sysPara->para.phase_detect_pulse_num = 7; + sysPara->para.phaseDetectVol = 35; //ui->spinBoxPhaseDetectVoltage->value(); + sysPara->para.phaseDetectDelay = 100;// ui->spinBoxPhaseDetectDelay->value(); +#else + sysPara->para.phaseDetectVol = ui->spinBoxPhaseDetectVoltage->value(); + sysPara->para.phaseDetectDelay = ui->spinBoxPhaseDetectDelay->value(); + sysPara->para.phase_detect_pulse_num = ui->spinBoxPhaseDetectDotNum->value(); +#endif + sysPara->para.phaseShift = ui->spinBoxPhaseShift->value(); + //qDebug()<<"shift:"<para.phaseShift; + //qDebug()<<"shift:0x"<para.phaseShift, 0, 16); + sysPara->para.blinkLightPeriod = ui->spinBoxBlickLightPeriod->value(); + sysPara->para.enableChargeFullTime = 1;//ui->checkBoxChargeFullTime->isChecked()?1:0; + // 由FPGA 设置 + if(sysPara->devOp->writeFpgaPrintPara() != -1) + QMessageBox::information(this,tr("提示"),tr("应用成功")); + + } +} +void OtherInfo::phaseDetectResultRecord(void){ + if(!memcmp(lastPhaseChargeReulse,sysPara->status.phaseChargeResult,sizeof(sysPara->status.phaseChargeResult))){ + return; + } + sysPara->devOp->readPhaseDetectHighTm(); + QFile phaseRecordFile("/home/plg/doc/phaseDetectResultRecord.txt"); + if (!phaseRecordFile.exists()) { + if (phaseRecordFile.open(QFile::WriteOnly | QFile::Truncate)) { + QTextStream out(&phaseRecordFile); + out << "time"<< "," + << "flight_tm"<< "," + << "phase"<< "," + << "curr_charge_phase"<< "," + << "ink_dot_number"<< "," + << "high_sig_cnt"<< "," + << "reg_phase_shift"<< "," + << "phase_detect_dot_num"<< "," + << "phase_charge_result_bit" + << "\n"; + phaseRecordFile.close(); + } + + } + if (phaseRecordFile.open(QFile::WriteOnly | QFile::Append)) { + QTextStream out(&phaseRecordFile); +// out << "flight_tm" +// << "phase" +// << "curr_charge_phase" +// << "ink_dot_number" +// << "high_sig_cnt" +// << "reg_phase_shift" +// << "phase_detect_dot_num" +// << "phase_charge_result_bit" +// << "\n"; + out << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ") << "," // "flight_tm" + << sysPara->status.flightTm << "," // "flight_tm" + << "None" << "," //"phase" + << sysPara->status.phase << "," //"curr_charge_phase" + << sysPara->status.ink_dot_num << "," //"ink_dot_number" + << sysPara->para.phase_detect_high_cnt<< "," //"high_sig_cnt" + << sysPara->para.phaseShift<< "," //"reg_phase_shift" + << sysPara->para.phase_detect_pulse_num<< "," //"phase_detect_dot_num" + ; + for (quint8 i = 0; i < sizeof(sysPara->status.phaseDetectHighTm); ++i) { + out << sysPara->status.phaseDetectHighTm[i];// << ","; // "phase_charge_result_bit" + if (i < sizeof(sysPara->status.phaseDetectHighTm) - 1) { + out << ","; + } + } + out << "\n"; + phaseRecordFile.close(); + } +} + +void OtherInfo::updateSysStatusToUI(){ + if(sysPara){ + if(memcmp(lastPhaseChargeReulse,sysPara->status.phaseChargeResult,sizeof(sysPara->status.phaseChargeResult))){ + sysPara->devOp->readPhaseDetectHighTm(); + ui->phaseGraphic->updateSysStatusToUI(); + } + memcpy(lastPhaseChargeReulse,sysPara->status.phaseChargeResult,sizeof(sysPara->status.phaseChargeResult)); + ui->labelFlightTm->setText(QString::number(sysPara->status.flightTm*2) + "|" + QString::number(sysPara->status.ink_dot_num) + tr("点")); //逻辑里面已经除以2 + ui->labelPhasePosition->setText(QString::number(sysPara->status.phase)); + + //ui->lab_enableChargeFullTime->setText(sysPara->para.enableChargeFullTime?"FULL":"0"); + + ui->lab_phaseDetectDelay->setText( QString("%1").arg(sysPara->para.phaseDetectDelay)); + ui->lab_phaseDetectVol->setText(QString("%1").arg(sysPara->para.phaseDetectVol)); + + ui->lab_phaseHighLowRatio->setText(QString("%1").arg(sysPara->para.phaseHighLowRatio)); + + //ui->lab_phase_detect_pulse_num->setText(QString("%1").arg(sysPara->para.phase_detect_pulse_num)); + + ui->memDisplayAndEdit->updateSysStatusToUI(); + /* if(ui->checkBoxChargeFullTime->isChecked()){ + ui->spinBoxHighLowRatio->setEnabled(false); + } + else */ + //ui->spinBoxHighLowRatio->setEnabled(true); + + } +} + +void OtherInfo::on_pushButtonApply_pressed() +{ + applyUIPara(); + if(sysPara){ + sysPara->saveParaToFile(); + //qDebug()<<"save OtherInfo para."; + } + OtherInfoLog(); + +} + +void OtherInfo::OtherInfoLog(){ + + qDebug()<spinBoxBlickLightPeriod->value()); + qDebug()<spinBoxPhaseDetectVoltage->value()); + qDebug()<spinBoxPhaseDetectDotNum->value()); + qDebug()<spinBoxPhaseShift->value()); + qDebug()<spinBoxHighLowRatio->value()); + qDebug()<spinBoxPhaseDetectDelay->value()); + +} + +void OtherInfo::updateLockPhaseWidgets(){ + if(sysPara){ + if(lockPhaseFlag) + ui->pushButtonLockPhase->setText(tr("解锁相位")); + else + ui->pushButtonLockPhase->setText(tr("锁定相位")); + if(lockPhaseFlag){ + //ui->spinBoxLockedPhase->setMaximum(sysPara->para.divideRatio*2 - 1); + //ui->spinBoxLockedPhase->setSingleStep(sysPara->para.divideRatio/32); + sysPara->devOp->setPhaseByHand(sysPara->status.phase/PHASE_BY_HAND_DIV); + //ui->spinBoxLockedPhase->setEnabled(true); + //ui->spinBoxLockedPhase->setValue(sysPara->status.phase); + ui->phaseGraphic->setLockedPhase(true,sysPara->status.phase); + } + else{ + sysPara->devOp->setPhaseByHand(0); + //ui->spinBoxLockedPhase->setEnabled(false); + //ui->spinBoxLockedPhase->setValue(0); + ui->phaseGraphic->setLockedPhase(false,0); + } + ui->phaseGraphic->updateSysStatusToUI(); + } +} + +void OtherInfo::on_pushButtonLockPhase_pressed() +{ + lockPhaseFlag = !lockPhaseFlag; + updateLockPhaseWidgets(); +} + + +void OtherInfo::on_spinBoxHighLowRatio_valueChanged(int dutyCycle) +{ + if(sysPara){ + sysPara->devOp->setPhaseDetectVoltageDutyCycle(dutyCycle); + } +} + +void OtherInfo::on_spinBoxLockedPhase_valueChanged(int newPhase) +{ + if(sysPara){ + sysPara->devOp->setPhaseByHand(newPhase/PHASE_BY_HAND_DIV); + ui->phaseGraphic->setLockedPhase(true,newPhase); + ui->phaseGraphic->updateSysStatusToUI(); + } +} + +void OtherInfo::on_spinBoxBlickLightPeriod_editingFinished() +{ + if(sysPara){ + sysPara->devOp->setBlickLightPeriod(ui->spinBoxBlickLightPeriod->value()); + } +} diff --git a/OtherInfo.h b/OtherInfo.h new file mode 100644 index 0000000..f8fa2e7 --- /dev/null +++ b/OtherInfo.h @@ -0,0 +1,48 @@ +#ifndef OTHERINFO_H +#define OTHERINFO_H + +#include +#include "ParaSettingUI.h" +#include +#include + +namespace Ui { +class OtherInfo; +} + +class OtherInfo : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit OtherInfo(QWidget *parent = 0); + ~OtherInfo(); + void bindSysPara(SysPara *sysPara); + void updateSysParaToUI(); + void applyUIPara(); + void updateSysStatusToUI(); + void phaseDetectResultRecord(); + void OtherInfoLog(); + +private slots: + void on_pushButtonApply_pressed(); + void OtherupdateSysParaToUI(); + void on_pushButtonLockPhase_pressed(); + + void on_spinBoxHighLowRatio_valueChanged(int arg1); + + void on_spinBoxLockedPhase_valueChanged(int arg1); + + void on_spinBoxBlickLightPeriod_editingFinished(); + void onAuthChanged(int auth); + +private: + Ui::OtherInfo *ui; + void updateLockPhaseWidgets(); + unsigned char lastPhaseChargeReulse[8]; + bool lockPhaseFlag; + int lockedPhase; + +}; + +#endif // OTHERINFO_H diff --git a/ParaSettingUI.cpp b/ParaSettingUI.cpp new file mode 100644 index 0000000..2432c8b --- /dev/null +++ b/ParaSettingUI.cpp @@ -0,0 +1,43 @@ +/* + * ParaSettingUI.cpp + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + + + + +#include "ParaSettingUI.h" +#include "QDebug" +ParaSettingUI::ParaSettingUI(){ + sysPara = 0; +} + +ParaSettingUI::~ParaSettingUI(){ + +} + +void ParaSettingUI::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; +} + + +void ParaSettingUI::updateSysParaToUI(){ + qDebug() << "Warn!!ParaSettingUI::updateSysParaToUI() should be implemented by subclass"; +} + +void ParaSettingUI::applyUIPara(){ + qDebug() << "Warn!!ParaSettingUI::applyUIPara() should be implemented by subclass"; +} + +void ParaSettingUI::updateSysStatusToUI(){ + qDebug() << "Warn!!ParaSettingUI::updateSysStatusToUI() should be implemented by subclass"; +} + +void ParaSettingUI::updateAuthorization(int auth){ + // do nothing here +} diff --git a/ParaSettingUI.h b/ParaSettingUI.h new file mode 100644 index 0000000..a2ec0e5 --- /dev/null +++ b/ParaSettingUI.h @@ -0,0 +1,31 @@ +/* + * ParaSettingUI.h + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + * 只要是有参数需要设置的UI继承此类 + + */ + +#ifndef PARASETTINGUI_H_ +#define PARASETTINGUI_H_ + +#include "SysPara.h" +class ParaSettingUI{ +public: + ParaSettingUI(); + ~ParaSettingUI(); + + void bindSysPara(SysPara *sysPara); + void updateSysParaToUI(); /*这个方法需要被子类重写*/ + void applyUIPara(); /*这个方法需要被子类重写*/ + void updateSysStatusToUI(); /*这个方法需要被子类重写*/ + void updateAuthorization(int auth); /*这个方法需要被子类重写*/ +protected: + SysPara *sysPara; +}; + + +#endif /* PARASETTINGUI_H_ */ diff --git a/PhaseGraphic.cpp b/PhaseGraphic.cpp new file mode 100644 index 0000000..4dfe4ba --- /dev/null +++ b/PhaseGraphic.cpp @@ -0,0 +1,125 @@ +/* + * phaseGraphic.cpp + * + * Created on: Jun 29, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#include "PhaseGraphic.h" +#include "QPalette" +#include +PhaseGraphic::PhaseGraphic(QWidget *parent) : + QWidget(parent){ + + pen.setStyle(Qt::SolidLine); + pen.setWidth(2); + pen.setBrush(Qt::red); + pen.setCapStyle(Qt::RoundCap); + pen.setJoinStyle(Qt::RoundJoin); + brush.setStyle(Qt::SolidPattern); + setPalette(QPalette(Qt::white)); + setAutoFillBackground(true); + setMinimumSize(626,150); + lockPhaseFlag = false; + lockedPhase = 0; + phaseCount = 32; +} +PhaseGraphic::~PhaseGraphic(){ + +} + +void PhaseGraphic::paintEvent(QPaintEvent *){ + if(sysPara){ + QString num; + QRect rec = rect(); + int w = rec.width() - 30; + int h = rec.height(); + int step = w/phaseCount; + int high = h/3; + int low = 2*h/3; + int x_shift = 10; + int current_x = x_shift; + int phaseStep = sysPara->para.divideRatio*2/phaseCount; + int currentPhase = 0; + int phasePos = sysPara->para.divideRatio?w*sysPara->status.phase/(sysPara->para.divideRatio*2):0; + int phasePosEdgePos = sysPara->status.phasePosEdge*w/phaseCount; + int phaseNegEdgePos = sysPara->status.phaseNegEdge*w/phaseCount; + int lockPhasePos = sysPara->para.divideRatio?w*lockedPhase/(sysPara->para.divideRatio*2):0; + unsigned int maxPhaseDetectHighVoltageTm = 0; + for(int i = 0;i < phaseCount; i++){ + if(sysPara->status.phaseDetectHighTm[i] > maxPhaseDetectHighVoltageTm) + maxPhaseDetectHighVoltageTm = sysPara->status.phaseDetectHighTm[i]; + } + QPainter p(this); + pen.setBrush(Qt::red); + p.setPen(pen); + p.setBrush(brush); + for(int i = 0; i < 8;i++){ + for(int j = 0;j < 8; j++){ + + if(sysPara->status.phaseChargeResult[i] & (1<status.phaseDetectHighTm[i*8+j]*h/(3*maxPhaseDetectHighVoltageTm):0; + int nextPhaseDetectHighPos = maxPhaseDetectHighVoltageTm?sysPara->status.phaseDetectHighTm[(i*8 + j + 1)%phaseCount]*h/(3*maxPhaseDetectHighVoltageTm):0; + p.drawLine ( current_x, low - currPhaseDetectHighPos, current_x + step, low - nextPhaseDetectHighPos); + current_x = (8*i + j + 1)*w/phaseCount + x_shift; + currentPhase += phaseStep; + } + } + + p.drawLine(current_x,low - 5,current_x,low + 5); + num = QString::number(currentPhase); + p.drawText(current_x - num.size()*4,low + 20,num); //做后的标尺 + num = QString::number(maxPhaseDetectHighVoltageTm); + + p.drawText(x_shift + 10,high - 10,num); //给坐标画标尺 + + p.drawLine(phasePos + x_shift,low + 10,phasePos + x_shift,high - 10); //将相位尺标记一下 + pen.setBrush(Qt::blue);p.setPen(pen); + p.drawLine(phasePosEdgePos + x_shift - 3,low + 10,phasePosEdgePos + x_shift + 3,low - 30); + p.drawLine(phaseNegEdgePos + x_shift + 3,low + 10,phaseNegEdgePos + x_shift - 3,low - 30); + if(lockPhaseFlag){ + pen.setBrush(Qt::green);p.setPen(pen); + p.drawLine(lockPhasePos + x_shift,low + 5,lockPhasePos + x_shift,high - 5); + } + } +} + + +void PhaseGraphic::updateSysStatusToUI(){ + update(); +} + + +void PhaseGraphic::setLockedPhase(bool enable,int val){ + lockPhaseFlag = enable; + lockedPhase = val; +} + +void PhaseGraphic::setPhaseCount(int count) +{ + switch(count) { + case 64: + phaseCount = 64; + break; + case 32: + phaseCount = 32; + break; + case 16: + phaseCount = 16; + break; + default: + phaseCount = 64; + break; + } +} diff --git a/PhaseGraphic.h b/PhaseGraphic.h new file mode 100644 index 0000000..3b56862 --- /dev/null +++ b/PhaseGraphic.h @@ -0,0 +1,40 @@ +/* + * phaseGraphic.h + * + * Created on: Jun 29, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef PHASEGRAPHIC_H_ +#define PHASEGRAPHIC_H_ + + +#include "QWidget" +#include "ParaSettingUI.h" +#include +#include +class PhaseGraphic:public QWidget,public ParaSettingUI{ + Q_OBJECT + +public: + explicit PhaseGraphic(QWidget *parent = 0); + ~PhaseGraphic(); + + void paintEvent(QPaintEvent *); + + void updateSysStatusToUI(); + + void setLockedPhase(bool enable,int val); + void setPhaseCount(int count); +private: + + QPen pen; + QBrush brush; + int lockPhaseFlag; + int lockedPhase; + int phaseCount; // 份数 +}; +#endif /* PHASEGRAPHIC_H_ */ diff --git a/PicEdit.cpp b/PicEdit.cpp new file mode 100644 index 0000000..352bc79 --- /dev/null +++ b/PicEdit.cpp @@ -0,0 +1,956 @@ +#include "PicEdit.h" +#include "ui_picedit.h" +#include "SysPara.h" +#include +#include +#include "ui_InputMethod.h" +#include "InputMethod.h" +#include "Public.h" +#include "stdio.h" +#include "myinclude.h" +#include "dlgdrawinit.h" +#include + +PicEdit::PicEdit(QWidget *parent) : + QWidget(parent), + ui(new Ui::PicEdit) +{ + ui->setupUi(this); + ui->lineEditInputTxt->setMaximumWidth(1); + fileDialog = 0; + charSpace=0; + dlgdraw =0; + lineSpace=1; + openedFileName = ""; + newFileAppending = false;//Qt::Key_Backspace + inserPicFile = false; + connect(ui->widgetPic,SIGNAL(picWidgetModify()),this,SLOT(enableSaveButton())); + connect(ui->widgetPic,SIGNAL(ShowKeybord()),this,SLOT(showKeybord())); + connect(ui->widgetPic,SIGNAL(rowColChanged(QString)),ui->label_ROWCOL,SLOT(setText(QString))); + connect(ui->widgetPic,SIGNAL(currXYChanged(QString)),ui->label_CURXY,SLOT(setText(QString))); + connect(ui->widgetPic,SIGNAL(ChangeFont(int)),this,SLOT(onChangeFont(int))); +#ifdef MYSAVEFILEDLG + dialogSaveFile =new DialogSaveFile(0); +#endif + textEdit=new QTextEdit; + zkEditEn=0; + dialogFileOperation = new DialogFileOperation(0); + dialogInsertVari = new DialogInsertVari(0); + dialogLineSpace = new DialogLineSpace(0); + timer = new QTimer(); + connect(timer, SIGNAL(timeout()), ui->widgetPic, SLOT(cursorFlash())); + connect(timer, SIGNAL(timeout()), this, SLOT(cursorFlash())); + timer->start(500); + + ui->pushButtonZKEdit->setEnabled (zkEditEn); + + VarNum=0; + isInput =0; + + ui->scrollArea->setAlignment ( Qt::AlignAbsolute ); + ui->radioButtonCharCurrent->setChecked (1); + ui->widgetPic->charPara.CharCurrent=1; + + ui->comboBoxLattice->setCurrentIndex (1); + + ui->pushButtonSave->setEnabled(false); + forcePicWidgetSize = false; + ui->widgetPic->charPara.DrawGridEn=true; + ui->checkBoxDrawGridEn->setCheckState ((Qt::CheckState)ui->widgetPic->charPara.DrawGridEn ); + ui->widgetPic->charPara.DrawEn=false; + + ui->widgetPic->initWidget(300,ui->spinBoxHeightPoint->value()); + setEnterKey(1); + openedFileName = ""; + ui->widgetPic->setScale (3); + ui->widgetPic->resizeWidget (150,8); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + memset(var,0,sizeof(var)); + ui->widgetPic->picSetHome(); + ui->labInserMode->setText((ui->widgetPic->charPara.insertMode)? tr("插入模式"):tr("修改模式")); + ui->label_Note->setText(tr("编辑现有的多字体文件\r\n请使用修改模式!!!")); + + ui->widgetPic->charPara.DrawEn=0; + ui->widgetPic->drawPara.width = 10; + ui->widgetPic->drawPara.height = 8; + + ui->checkBoxControlChar->hide(); + ui->checkBoxBold->hide(); + // ui->pushButtonDrawPIC->hide(); + +} + +PicEdit::~PicEdit() +{ + delete ui; + if(fileDialog) + delete fileDialog; + if(fileDialog) + delete fileDialog; + if(dialogInsertVari) + delete dialogInsertVari; + if(dialogLineSpace) + delete dialogLineSpace; + if(dlgdraw) delete dlgdraw; +#ifdef MYSAVEFILEDLG + if(dialogSaveFile) delete dialogSaveFile; + if(dialogFileOperation) delete dialogFileOperation; +#endif + +} +void PicEdit::setEnterKey(int n) +{ + // ui->pushButtonEnsure->setIcon(QIcon( n?":/icon/sure.png":":/icon/keyenter.png")); // icon().addPixmap(,0,0); + // ui->pushButtonEnsure->setText(n?"":"换行"); ///icon/sure.png +} + +void PicEdit::on_pushButtonZKEdit_pressed( ) +{ + //qDebug ()<<"start 1"<widgetPic->charPara.CharWidth<widgetPic->charPara.CharHeight; + //qDebug ()<<"11"; + if(ui->widgetPic->zkEditEn) + { + ui->widgetPic->zkEditEn=0; + ui->pushButtonNew->setEnabled (true); + ui->pushButtonInsertVari->setEnabled (true); + ui->pushButtonOpen->setEnabled (true); + ui->pushButtonSaveAs->setEnabled (true); + ui->pushButtonImport->setEnabled (true); + ui->pushButtonSave->setText (tr("保存/打印")); + ui->pushButtonSave->setText (tr("保存")); + ui->pushButtonZKEdit->setText (tr("字库编辑")); + ui->comboBoxLattice->setDisabled (0); + ui->spinBoxHeightPoint->setDisabled (0); + //ui->spinBoxWidthPoint->setDisabled (0); + ui->widgetPic->charPara.CharCurrent=1; + //ui->widgetPic->charPara.CurrentEn =1; + ui->widgetPic->charPara.DrawEn =0; + ui->widgetPic->charPara.LineSpace=1; + ui->pushButtonImport->setEnabled(true); + ui->widgetPic->initWidget (30,ui->widgetPic->charPara.LineHeight); + ui->labelNote2->setText (tr("点击光栅可打开键盘,点击空白处关闭"));// 请选择字体,打开键盘并输入要编辑的字符. + // 点击光栅可打开键盘,点击其它空白处可关闭键盘. + //qDebug ()<<"22"; + emit zkEditEnStatus(tr("信息编辑")); + + } + else { + //qDebug ()<<"33"; + ui->widgetPic->zkEditNow(); + ui->widgetPic->charPara.DrawEn =1; + ui->pushButtonNew->setDisabled(true); + ui->pushButtonInsertVari->setDisabled (true); + ui->pushButtonOpen->setDisabled (true); + ui->pushButtonSaveAs->setDisabled (true); + ui->pushButtonImport->setDisabled (true); + ui->pushButtonSave->setDisabled (true); + //ui->comboBoxLattice->setDisabled (true); + ui->spinBoxHeightPoint->setDisabled (true); + //ui->spinBoxWidthPoint->setDisabled (true); + //qDebug ()<<"441"; + ui->pushButtonSave->setText (tr("字库保存")); + //qDebug ()<<"442"; + ui->pushButtonZKEdit->setText (tr("返回信息编辑")); + //qDebug ()<<"443"; + ui->pushButtonImport->setEnabled(false); + ui->labelNote2->setText (tr("请选择字体,打开键盘并输入要编辑的字符"));// 请选择字体,打开键盘并输入要编辑的字符. + //qDebug ()<<"44"; + // 点击光栅可打开键盘,点击其它空白处可关闭键盘. + //emit zkEditEnStatus(tr("字库编辑")); + //ui->lineEditInputTxt->setFocus (); + ui->widgetPic->zkEditEn=1; + } + //qDebug ()<<"start 2"<widgetPic->charPara.CharWidth<widgetPic->charPara.CharHeight; +} + +void PicEdit::checkNewFileAppending(){ + if(newFileAppending){ + ui->widgetPic->initWidget(300,ui->spinBoxHeightPoint->value()); + openedFileName = ""; + } + newFileAppending = false; +} + +void PicEdit::onSave_File_reject(){ + checkNewFileAppending(); +} + +void PicEdit::bindSysPara(SysPara *sysPara){ + ui->widgetPic->bindSysPara (sysPara); + this->sysPara = sysPara; +} + +bool PicEdit::maybeSave(){ + if(!ui->widgetPic->isModified()) + return true; + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("图片已经改变,是否保存?")); + QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == saveButton) { + newFileAppending = true; + on_pushButtonSave_clicked(); + + + return false; + } + else if (msgBox.clickedButton() == cancleSaveButton) { + return true; + } + + else + return false; + + return true; +} + +void PicEdit::on_pushButtonNew_pressed(){ + if(maybeSave()) + { + + ui->widgetPic->initWidget(300,ui->spinBoxHeightPoint->value()+1); + openedFileName = ""; + ui->labelFileName->setText(""); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + VarNum=0; + ui->widgetPic->zkEditEn=false; + memset(var,0,sizeof(var)); + ui->widgetPic->charPara.DrawEn =0; + ui->widgetPic->charPara.CharCurrent=1; + ui->widgetPic->charPara.CurrentEn =1; + ui->lineEditInputTxt->setFocus (); + } +} + +void PicEdit::showKeybord( ) +{ + if(!ui->widgetPic->charPara.DrawEn || ui->widgetPic->zkEditEn ) ui->lineEditInputTxt->setFocus (); +} + +void PicEdit::enableSaveButton(){ + ui->pushButtonSave->setEnabled(true); + if(ui->widgetPic->zkEditEn) ui->comboBoxLattice->setDisabled (1); + +} + +void PicEdit::on_pushButtonEnlarge_pressed() +{ + ui->widgetPic->enlargeDisplay(); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + +} + +void PicEdit::on_pushButtonReduce_pressed() +{ + ui->widgetPic->reduceDisplay(); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); +} + + + +void PicEdit::on_pushButtonEnsure_pressed() +{ + ui->widgetPic->ensureCurrPos(); + //qDebug()<<"ENLINE2"; +} + + +void PicEdit::on_pushButtonLeft_pressed() +{ + //ui->widgetPic->charPara.CharHeight =ui->widgetPic->charPara.LineHeight; + ui->widgetPic->currPositionMove(ui->widgetPic->charPara.CharCurrent? (-ui->widgetPic->charPara.CharWidth):(-1),0); +} +void PicEdit::on_pushButtonRight_pressed() +{ +//ui->widgetPic->charPara.CharHeight =ui->widgetPic->charPara.LineHeight; + ui->widgetPic->currPositionMove(ui->widgetPic->charPara.CharCurrent?ui->widgetPic->charPara.CharWidth:1,0); + +} +void PicEdit::on_pushButtonUp_pressed() +{ + //ui->widgetPic->charPara.CharHeight =ui->widgetPic->charPara.LineHeight; + ui->widgetPic->currPositionMove(0,ui->widgetPic->charPara.CharCurrent?-(ui->widgetPic->charPara.LineHeight):-1); + //qDebug()<<"TEST2014 UP"; +} +void PicEdit::on_pushButtonDown_pressed() +{ +//ui->widgetPic->charPara.CharHeight =ui->widgetPic->charPara.LineHeight; + ui->widgetPic->currPositionMove(0,ui->widgetPic->charPara.CharCurrent?ui->widgetPic->charPara.LineHeight:1); +} +void PicEdit::on_spinBoxHeightPoint_valueChanged(int height) +{ + ui->widgetPic->resizeWidget (ui->widgetPic->getWidth (),height); + //qDebug ()<<"HeightPoint:"<widgetPic->charPara.DrawEn=true; + + dlgdraw = new dlgDrawInit; + //dlgdraw->setWindowTitle(tr("设置图案参数")); + dlgdraw->setFocus(); + connect(dlgdraw,SIGNAL(dlgDrawOK()),this,SLOT(ondlgDrawOK())); + + dlgdraw->setWidth(ui->widgetPic->drawPara.width); + dlgdraw->setHeight(ui->widgetPic->drawPara.height); + dlgdraw->show(); + +} +#endif +void PicEdit::ondlgDrawOK() +{ + + ui->widgetPic->charPara.DrawEn=true; + ui->widgetPic->drawPara.width= dlgdraw->getWidth(); + ui->widgetPic->drawPara.height=dlgdraw->getHeight(); + if(maybeSave()) + { + DrawInit(1); + + } + if(dlgdraw) delete dlgdraw; + +} +void PicEdit::on_checkBoxDrawGridEn_clicked( ) +{ + ui->widgetPic->charPara.DrawGridEn=ui->checkBoxDrawGridEn->checkState (); + ui->widgetPic->resizeWidget (ui->widgetPic->getWidth (),ui->widgetPic->getHeight ()); + ui->widgetPic->update (); + +} + +void PicEdit::on_checkBoxControlChar_clicked( ) +{ + ui->widgetPic->charPara.checkBoxControlChar=ui->checkBoxControlChar->checkState (); +} + +void PicEdit::on_pushButtonSaveAs_clicked() +{ +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->setTitleTxt(tr("文件另存为...")); + dialogSaveFile->refreshListView(1); + dialogSaveFile->setEnterFileName(""); + dialogSaveFile->show(); + +#else + + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + fileDialog->showFileDialog(tr("另存为"),QString(DOC_ROOT_DIR), + ui->widgetPic->charPara.DrawEn?QString("Picture files (*.jpg)"): + QString("Picture files (*.png)") + );// *.png )"));// + +#endif + +} +void PicEdit::onSaveASFile(QString fileName,bool Flag){// use for dialogSaveFile class + // filename= fileName ; + if( ui->widgetPic->charPara.DrawEn ){ + if( !fileName.endsWith(".jpg",Qt::CaseInsensitive) ) + fileName += ".jpg"; + + ui->widgetPic->saveImage1(fileName); + + //ui->pushButtonSave->setEnabled(false); + openedFileName = fileName; + ui->labelFileName->setText(tr("文件名:")+QFileInfo( fileName).fileName()); + + } + else { + + if( !fileName.endsWith(".png",Qt::CaseInsensitive) ) + fileName += ".png"; + + ui->widgetPic->saveImage(fileName); + + //ui->pushButtonSave->setEnabled(false); + openedFileName = fileName; + ui->labelFileName->setText(tr("文件名:")+QFileInfo( fileName).fileName()); + + QString str1 =QFileInfo( fileName).baseName()+".dpn"; + if(sysPara){ + + sysPara->sysFile = QString( PARA_ROOT_DIR+str1); + sysPara->savePrintParaToFile(); + } + printThisFileNow(fileName); + +} + +checkNewFileAppending(); +} + +void PicEdit::onSaveAS_FIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++) + { + + QString fileName = files[i]; + //qDebug()<<"onSaveAS_FIle_select"<widgetPic->charPara.DrawEn ){ + if( !fileName.endsWith(".jpg",Qt::CaseInsensitive) ) + fileName += ".jpg"; + + ui->widgetPic->saveImage1(fileName); + + //ui->pushButtonSave->setEnabled(false); + openedFileName = fileName; + ui->labelFileName->setText(tr("文件名:")+QFileInfo( fileName).fileName()); + + } + else { + + if( !fileName.endsWith(".png",Qt::CaseInsensitive) ) + fileName += ".png"; + + ui->widgetPic->saveImage(fileName); + + //ui->pushButtonSave->setEnabled(false); + openedFileName = fileName; + ui->labelFileName->setText(tr("文件名:")+QFileInfo( fileName).fileName()); + + QString str1 =QFileInfo( fileName).baseName()+".dpn"; + if(sysPara){ + + sysPara->sysFile = QString( PARA_ROOT_DIR+str1); + sysPara->savePrintParaToFile(); + } + } + + printThisFileNow(fileName); + + } + + checkNewFileAppending(); + +} +void PicEdit::onFileOpen(QString fileName,bool forcePicWidgetSize) +{ + + if(inserPicFile) + { + + if (fileName.endsWith(".png") )ui->widgetPic->insertImage(fileName,false); + else ui->widgetPic->insertImage1(fileName,0); + // if(openedFileName=="") openedFileName= fileName; + + } + else { + if(fileName.endsWith(".png")){ + ui->widgetPic->loadImage(fileName,false); + openedFileName = fileName; + } + else if(fileName.endsWith(".jpg")){ + ui->widgetPic->insertImage1(fileName,1); + VarNum=0; + ui->widgetPic->zkEditEn=false; + memset(var,0,sizeof(var)); + ui->widgetPic->charPara.CurrentEn =1; + ui->widgetPic->charPara.DrawEn=1; + } + ui->widgetPic->setScale (3); + ui->labelFileName->setText(tr("文件名:)")+QFileInfo( fileName).fileName()); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + VarNum=0; + } +} +void PicEdit::updateAuthorization(int auth){ + // do nothing here + zkEditEn= (auth&AUTH_DISPLAY_SYSTEM_SETTING) ||(auth&AUTH_DISPLAY_SYSTEM_MANAGE); + ui->pushButtonZKEdit->setEnabled (zkEditEn); +} + +void PicEdit::on_pushButtonOpen_clicked() +{ + + disconnect(dialogFileOperation,SIGNAL(openFile(QString,bool)),0,0); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + dialogFileOperation->refreshListView(1); + dialogFileOperation->exec(); + inserPicFile = false; + + +} + + +void PicEdit::onOpenFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + QString fileName = files.value(i); + ui->widgetPic->loadImage(fileName,forcePicWidgetSize); + openedFileName = fileName; + ui->labelFileName->setText(tr("文件名:")+QFileInfo( fileName).fileName()); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + VarNum=0; + } +} + +void PicEdit::on_pushButtonSave_clicked() +{ + if(ui->widgetPic->zkEditEn && zkEditEn ) { + ui->widgetPic->zkEditSave(); + ui->pushButtonOpen->setDisabled (true); + ui->pushButtonSave->setDisabled (true); + //ui->pushButtonImport->setEnabled(true); + ui->pushButtonZKEdit->setText (tr("返回信息编辑")); + ui->comboBoxLattice->setDisabled (0); + emit zkEditEnStatus(tr("字库编辑")); + return ; + } + + if(!openedFileName.isEmpty()){ + //qDebug()<<"on_pushButtonSave_clicked"<widgetPic->charPara.DrawEn) { + //if(openedFileName.endsWith("html")) + openedFileName =DOC_ROOT_DIR+ QFileInfo(openedFileName).baseName()+".jpg"; + ui->widgetPic->saveImage1(openedFileName); + } + else { + //if(openedFileName.endsWith("html")) + openedFileName = DOC_ROOT_DIR+QFileInfo(openedFileName).baseName()+".png"; + + ui->widgetPic->saveImage(openedFileName); + // qDebug()<<"on_pushButtonSave_clicked"<pushButtonSave->setEnabled(true); + printThisFileNow(openedFileName); + + } + else { +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(1); + dialogSaveFile->setTitleTxt(tr("文件保存为...")); + dialogSaveFile->setEnterFileName(""); + dialogSaveFile->show(); +#else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(rejected()),this,SLOT(onSave_File_reject())); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + fileDialog->showFileDialog(tr("保存"),tr(DOC_ROOT_DIR), + ui->widgetPic->charPara.DrawEn?QString("Picture files (*.jpg)"): + QString("Picture files (*.png)") + + ); +#endif + } +} + +void PicEdit::on_pushButtonImport_clicked() +{ //insert pic 插入图片 pushButtonImport + inserPicFile =true; + disconnect(dialogFileOperation,SIGNAL(openFile(QString,bool)),0,0); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + dialogFileOperation->refreshListView(1); + dialogFileOperation->exec(); +} +void PicEdit::on_pushButtonEnd_pressed(){ + ui->widgetPic->picSetEnd (); +} +void PicEdit::on_pushButtonHome_pressed(){ + ui->widgetPic->picSetHome(); +} +void PicEdit::keyPressEvent(QKeyEvent *e) +{ ui->widgetPic->charPara.CharHeight =ui->widgetPic->charPara.LineHeight; + switch(e->key()) + { + case Qt::Key_Return1:on_pushButtonEnsure_pressed(); + //qDebug()<<"TEST2014 ENTER"; + break; + case Qt::Key_Up1: on_pushButtonUp_pressed(); + //qDebug()<<"TEST2014 UP2"; + break; + case Qt::Key_Left1: on_pushButtonLeft_pressed();break; + case Qt::Key_Right1:on_pushButtonRight_pressed();break; + case Qt::Key_Down1:on_pushButtonDown_pressed();break; + case Qt::Key_Enter1: + //qDebug()<<"ENLINE"; + break; + case Qt::Key_Home1:ui->widgetPic->picSetHome(); break; + case Qt::Key_End1:ui->widgetPic->picSetEnd (); break; + case Qt::Key_Clear1: break; + case Qt::Key_Backspace1: + ui->widgetPic->picDelOneChar (); break; + case Qt::Key_Delete1: + ui->widgetPic->picDelNextChar (); + break; + } + //if(e->key())qDebug()<<"TES"<key(); +} + + +void PicEdit::on_comboBoxLattice_currentIndexChanged(int index) +{ //字体选择 + int font[]={5,7,9,12,16,16,24,24,32}; + int fontWidth[]= {5,5,6,8,8,12,24,24,24 }; + ui->widgetPic->charPara.Font=(PFONTNAME)index; + ui->widgetPic->charPara.CharHeight =font[index]; + ui->widgetPic->charPara.LineHeight = ui->widgetPic->charPara.CharHeight+ui->widgetPic->charPara.LineSpace; + ui->widgetPic->charPara.CharWidth =fontWidth[index] ; + if( ui->widgetPic->getHeight ()spinBoxHeightPoint->setValue (font[index]); + if( ui->widgetPic->currYpos+ ui->widgetPic->charPara.LineHeight > ui->widgetPic->getHeight() ){ + ui->widgetPic->resizeWidget( ui->widgetPic->getWidth(),ui->widgetPic->currYpos+ ui->widgetPic->charPara.LineHeight); + } + + ui->widgetPic->update (); + ui->lineEditInputTxt->setFocus (); +} + +void PicEdit::on_lineEditInputTxt_textEdited (QString txt) +{ + var[0]=0;var[1]=0; +#ifdef VARBOLD + ui->widgetPic->charPara.Bold=ui->comboBoxBoldMul->currentIndex(); + if(ui->widgetPic->charPara.Bold>2)ui->widgetPic->charPara.Bold=2; +#else + ui->widgetPic->charPara.Bold = ui->checkBoxBold->isChecked(); +#endif + + emit ui->widgetPic->inputTxtDot (txt,var); + ui->lineEditInputTxt->clear (); + // QTime t1;t1.start();// qDebug ()<lineEditInputTxt->setFocus (); +} +void PicEdit::on_pushButtonDeleteChar_clicked() +{ + + ui->widgetPic->picDelOneChar (); +} +void PicEdit::on_radioButtonCharCurrent_clicked() +{ + ui->widgetPic->charPara.CharCurrent=ui->radioButtonCharCurrent->isChecked (); +} + +void PicEdit::on_radioButtonDotCurrent_clicked() +{ + ui->widgetPic->charPara.CharCurrent=ui->radioButtonCharCurrent->isChecked (); +} + +void PicEdit::on_pushButtonInsertVari_pressed() +{ + + + if(dialogInsertVari->exec() == QDialog::Accepted ){ + int pixelSize =ui->widgetPic->charPara.CharHeight;// ui->comboBoxLattice->currentIndex (); + QFont font; + font.setFamily(Public::getFontFamily(pixelSize)); + font.setPixelSize(pixelSize); + font.setWeight(ui->checkBoxBold->isChecked()?QFont::Bold:QFont::Normal); + + font.setLetterSpacing(QFont::AbsoluteSpacing,ui->widgetPic->charPara.FontGap); // sysPara->para.textEditCharSpace + QFontMetrics fontMetrics(font); + ui->widgetPic->charPara.Bold = ui->checkBoxBold->isChecked(); + + + int width = (fontMetrics.width("0123456789"))/10 ; + int height = fontMetrics.ascent () + fontMetrics.descent();//pixelSize; + int digitalNum; + int varType; + unsigned char splitMode; + dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); + QString txt; + +//================ + int val = 0; + QTime t = QTime::currentTime(); + QDate d = QDate::currentDate(); + switch(varType){ + case 0:val = d.year(); digitalNum=digitalNum>2?4:2; break; + case 1:val = d.month();digitalNum=2;break; + case 2:val = d.day();digitalNum=2;break; + //case 3:val = d.dayOfWeek();digitalNum=2;break; //weekNumber + case 3:val = d.weekNumber();digitalNum=2;break; + case 4:val = t.hour(); digitalNum=2;break; + case 5:val = t.minute();digitalNum=2;break; + case 6:val = t.second();digitalNum=2;break; + case 7:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); break; + case 8:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();break; + case 13:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();break; +case 14:val = d.dayOfYear();digitalNum=3;break; + default:val=0; + } + // qDebug()<widgetPic->charPara.FontGap;//4 + //sysPara + +#ifdef VARBOLD + ui->widgetPic->charPara.Bold=ui->comboBoxBoldMul->currentIndex(); + if(ui->widgetPic->charPara.Bold>2)ui->widgetPic->charPara.Bold=2; +#else + ui->widgetPic->charPara.Bold = ui->checkBoxBold->isChecked(); +#endif + if(digitalNum) ui->widgetPic->inputTxtDot (txt,var); + } + ui->lineEditInputTxt->setFocus (); + +} + +void PicEdit::ChinaProview(QString txt) +{ + int mCol = (int)textEdit->document()->size().width(); + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(mCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + mCol= MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int maxPicHeight = MAX_PRINT_ROW_NUM + 12; + //qDebug ()<document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + + //image.save("printImage.jpg"); + + unsigned char mDat[mCol*maxPicHeight]; + memset(mDat,0,sizeof(mDat)); + int firstRow = maxPicHeight; + /*--------------------------------------------------------------------------*/ + for(int j = 0; j < maxPicHeight; j++){ //计算首行位置 + for(int i = 0; i < mCol; i++){ + QRgb rgb = image.pixel(i,j); + if(rgb&0xff000000){ + firstRow = j; + break; + } + } + if(firstRow != maxPicHeight) + break; + } + /*--------------------------------------------------------------------------*/ + int lastRow = firstRow + MAX_PRINT_ROW_NUM; + lastRow = (lastRow>maxPicHeight)?maxPicHeight:lastRow; + for(int j = 0; j < lastRow - firstRow; j++){ + for(int i = 0; i < mCol; i++){ + QRgb rgb = image.pixel(i,j + firstRow); + if((rgb&0x80000000)){ //判断alpha + if((rgb & 0xffffff) == 0xff0000){ + mDat[ i* j + firstRow]=0; + } + } + } + } +} + + +void PicEdit::on_pushButtonCharSpace_pressed () +{ //QScrollBar mScrollBar; + dialogLineSpace->setValue (ui->widgetPic->charPara.LineSpace,ui->widgetPic->charPara.FontGap); + if(dialogLineSpace->exec() == QDialog::Accepted ){ + dialogLineSpace->getValue (&lineSpace,&charSpace); + if(charSpace<1)charSpace=1; + ui->widgetPic->charPara.FontGap=charSpace; + ui->widgetPic->charPara.LineSpace= lineSpace; + ui->widgetPic->charPara.LineHeight = ui->widgetPic->charPara.CharHeight +ui->widgetPic->charPara.LineSpace; + } +} +void PicEdit::DrawInit(bool mode) +{ + if( mode) + { + ui->widgetPic->initWidget(ui->widgetPic->drawPara.width,ui->widgetPic->drawPara.height); + openedFileName = ""; + ui->labelFileName->setText(""); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + VarNum=0; + ui->widgetPic->zkEditEn=false; + memset(var,0,sizeof(var)); + ui->widgetPic->charPara.CurrentEn =1; + //ui->spinBoxWidth->show(); + //ui->labWidth->show(); + //ui->pushButtonInsertVari->hide(); + ui->widgetPic->charPara.DrawEn=1; + } + else + { + + ui->pushButtonInsertVari->show(); + ui->widgetPic->charPara.DrawEn=0; + emit on_pushButtonNew_pressed(); + } +} + +void PicEdit::printThisFileNow(QString fileName) +{ + if( ui->widgetPic->charPara.DrawEn) + { + DrawInit(0); + return ; + } + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("是否立即喷印当前的文件?")); + QPushButton *saveButton = msgBox.addButton(tr("是"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("否"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == saveButton) { + + emit openCurrentFile(fileName,false); + emit setMainTabNow(0); + + } +} + +void PicEdit::EditCurrFile(QString fileName) +{ + ui->widgetPic->loadImage(fileName,forcePicWidgetSize); + openedFileName = fileName; + ui->labelFileName->setText(tr("文件名:")+QFileInfo( fileName).fileName()); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + ui->pushButtonSave->setEnabled(true); + VarNum=0; +} + +void PicEdit::onChangeFont(int n) +{// + //char font[]={5,7,9,12,16,24,24,32}; + int i=0; + if(n>24) i=6; + else if(n>16) i=5; + else if(n>12) i=4; + else if(n>9) i=3; + else if(n>7) i=2; + else if(n>5) i=1; + else i=0; + ui->comboBoxLattice->setCurrentIndex(i); + //qDebug()<widgetPic->charPara.insertMode =!ui->widgetPic->charPara.insertMode; + ui->labInserMode->setText((ui->widgetPic->charPara.insertMode)?tr("插入模式"):tr("修改模式")); +} + + + +void PicEdit::cursorFlash() +{ + static int n=0; + static int m=0; + // static bool r_DrawEn=0; + if(sysPara==NULL) return; + if(sysPara->para.EditMode==TXTFILE){ + ui->widgetPic->pEditMode=0; + return; + } + else if(sysPara->para.EditMode==PICFILE) + ui->widgetPic->pEditMode=1; + // r_DrawEn = char + + + if(isActiveWindow()){ + if(n<31)n++;else n=0; + if(n==10){ + ui->label_Note->setText(tr("按回车键(Enter)可增加新行. 选择字体,光栅会自动调整")); + ui->labelNote2->setText((m%2)?tr("选择[字体]可改变光标大小."):tr("选择[绘图]方式,可以绘制任意图形")); + // qDebug()<<"n:"<label_Note->setText(tr("光标不匹配时,不能输入或删除.")); + ui->labelNote2->setText((m%2)?tr("点击空白处可关闭键盘."):tr("通过[字库编辑]功能,用户可以自定义新字符")); + m++;m=m&0xff; + // qDebug()<<"n:"<label_Note->setText(tr("选择[文本模式]可切换到主界面编辑方式.")); + ui->labelNote2->setText((m%2)?tr("点击光栅可打开键盘,点击空白处关闭键盘"):tr("使用[字库编辑]功能,用户可自己修改字形")); + // q + } + //qDebug()<<"n:"< +#include +#include +#include +#include "MyFileDialog.h" +#include "DialogInsertVari.h" +#include "MyInputMethod.h" +#include "DialogFileOperation.h" +#include "DialogLineSpace.h" +#include "SysPara.h" +#include "string.h" +#include "dlgdrawinit.h" +#include "DialogSaveFile.h" +#define MYDLG + +namespace Ui { +class PicEdit; +} + +#define MAX_PIC_HEIGHT 40 +#define MAX_PIC_WIDTH 100 +class PicEdit : public QWidget +{ + Q_OBJECT + +public: + explicit PicEdit(QWidget *parent = 0); + ~PicEdit(); + + void bindSysPara(SysPara *sysPara); + + void setEnterKey(int n); + + void DrawInit(bool mode); + + +private slots: + void ondlgDrawOK(); +#if 0 /* no use */ + void on_pushButtonDrawPIC_clicked(); +#endif + void updateAuthorization(int auth); + void cursorFlash(); + void on_pushButtonEnd_pressed(); + void on_pushButtonHome_pressed(); + + void on_pushButtonNew_pressed(); + void EditCurrFile(QString fileName); + void on_pushButtonEnlarge_pressed(); + + void on_pushButtonReduce_pressed(); + + void on_pushButtonUp_pressed(); + + void on_pushButtonLeft_pressed(); + + void on_pushButtonEnsure_pressed(); + + void on_pushButtonRight_pressed(); + + void on_pushButtonDown_pressed(); + + + void on_checkBoxDrawGridEn_clicked(); + + void on_spinBoxHeightPoint_valueChanged (int i); + //void on_spinBoxWidthPoint_valueChanged (int i); + void on_pushButtonSaveAs_clicked(); + void onSaveAS_FIle_select(); + void onSave_File_reject(); + void on_pushButtonOpen_clicked(); + + + void onOpenFIle_select(); + void on_pushButtonSave_clicked(); + + void enableSaveButton(); + + void on_pushButtonImport_clicked(); + void on_lineEditInputTxt_textEdited(QString txt); + void on_comboBoxLattice_currentIndexChanged(int index); + void on_pushButtonStartInput_clicked(); + void on_pushButtonDeleteChar_clicked(); + void on_radioButtonCharCurrent_clicked(); + void on_radioButtonDotCurrent_clicked(); + void showKeybord( ); + void on_pushButtonInsertVari_pressed(); + void on_pushButtonCharSpace_pressed(); + void on_pushButtonZKEdit_pressed(); + //void + void ChinaProview(QString txt); + void onFileOpen(QString txt,bool m); + void printThisFileNow(QString s); + void onChangeFont(int n); + void on_pushButtonInsertMode_pressed(); + void on_checkBoxControlChar_clicked(); +Q_SIGNALS: + void openCurrentFile(QString ,bool); + void zkEditEnStatus(QString); + void setMainTabNow(int); + void setMainTabEdit(int); +protected slots: + void onSaveASFile(QString fileName, bool Flag); +private: + Ui::PicEdit *ui; + MyFileDialog *fileDialog; + dlgDrawInit * dlgdraw; + QString openedFileName; + //MyInputMethod *myInputMethod; + DialogFileOperation *dialogFileOperation; + DialogInsertVari *dialogInsertVari; + DialogLineSpace *dialogLineSpace; + SysPara *sysPara; + QTextEdit *textEdit; + QTimer *timer; + bool isInput; + bool zkEditEn; + bool newFileAppending; + bool inserPicFile; + void checkNewFileAppending(); + bool maybeSave(); + bool forcePicWidgetSize; + void keyPressEvent(QKeyEvent *e); + int lineSpace,charSpace; + int var[41]; + vars_t *p_avr; + vars_t mVar[10]; + int VarNum; +#ifdef MYSAVEFILEDLG + DialogSaveFile *dialogSaveFile; +#endif +}; + +#endif // PICEDIT_H diff --git a/PicWidget.cpp b/PicWidget.cpp new file mode 100644 index 0000000..3041c5a --- /dev/null +++ b/PicWidget.cpp @@ -0,0 +1,1953 @@ +/* + * PicWidget.cpp + * + * Created on: Jul 2, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#include "PicWidget.h" +#include +#include +#include +#include +#include +#include "LogInfo.h" +#include +#include + +#include "myinclude.h" + +PicWidget::PicWidget(QWidget *parent):QWidget(parent){ + memset(pointMap,0,sizeof(pointMap)); + heightPoint = 0; + widthPoint = 0; + lineNum=0; + lineMaxNum=0; + pEditMode=0; + memset(linePara,0,sizeof(linePara)); + scale = 16; + currXpos = 0; + currYpos = 0; + altPrint=0; + zkEditEn=false; + startCol=0;startRow=0; + modified = false; + charPara.DrawGridEn=(Qt::CheckState)true; + charPara.Bold=0; + charPara.Font=ST07; + charPara.CharWidth = 6; + charPara.CharHeight = 7; + charPara.Width = 0; + charPara.CharCurrent=1; + charPara.CurrentEn =1; + charPara.LineSpace=1; + charPara.FontGap=1; + charPara.LineHeight = 8; + isInput =0; + charPara.insertMode=1; + + system("chmod a+x /opt/zk/unitogb"); + unitogb.setFileName ("/opt/zk/unitogb"); + zkAsc.setFileName ("/opt/zk/asc.bin"); + + zkHz07.setFileName ("/opt/zk/HZK7S"); + zkHz09.setFileName ("/opt/zk/ST1010"); + zkHz12.setFileName ("/opt/zk/HZK12S"); + zkHz16.setFileName ("/opt/zk/HZK16S"); + zkHz24.setFileName ("/opt/zk/ST2424"); + zkHz16H.setFileName ("/opt/zk/HZK16H"); + zkHz24H.setFileName ("/opt/zk/HZK24H"); + + //cal_currHeightEn=0; + // qDebug()<<"dfdsfasfsdaf"; +} + +PicWidget::~PicWidget(){ + if(zkAsc.isOpen ()) zkAsc.close (); + if(zkHz07.isOpen ()) zkHz07.close (); + if(zkHz09.isOpen ()) zkHz09.close (); + if(zkHz12.isOpen ()) zkHz12.close (); + if(zkHz16.isOpen ()) zkHz16.close (); + if(zkHz24.isOpen ()) zkHz24.close (); +} +void PicWidget::showVar(QString mode,char *var,int len) +{ +#ifdef DEBUG1 + QString s="",ss;int n=0; + qDebug ()<rect(); //重绘部分大小。 + painter.setBrushOrigin(0,40); + static bool flash=0; + flash =!flash; + int x = (int)(rect.x()/scale); + int y = (int)(rect.y()/scale); + int x_ = rect.x() + rect.width(); + int y_ = rect.y() + rect.height(); + int last_x = x_/scale; + int last_y = y_/scale; + for(int i = x; i < widthPoint && i <= last_x; i++){ + for(int j = y; j < heightPoint && j <= last_y; j++){ + QPen pen; + int width = 0; + int YM=heightPoint-1-j; + if(currXpos == i && charPara.CurrentEn && currYpos+(charPara.DrawEn?0:charPara.CharHeight-1) >= YM && currYpos <= YM ){ + width = (scale>4)?1:1;// biankuang + if(flash) + pen.setColor(QColor(Qt::red)); + else{ + width = (scale > 6 && charPara.DrawGridEn)?1:0; + pen.setColor(QColor(Qt::gray)); + } + } + else { + width = (scale > 6 && charPara.DrawGridEn)?1:0; + pen.setColor(QColor(Qt::gray)); + } + + pen.setWidth(width); + painter.setPen(width?pen:Qt::NoPen); + if((pointMap[i*MAX_PIC_WIDGET_HEIGHT + YM]&0x01)==1) + { + painter.setBrush(QColor(Qt::black)); + } + else { + if((pointMap[i*MAX_PIC_WIDGET_HEIGHT + YM]& FLINE0)) painter.setBrush(QColor(Qt::cyan)); + //else if((pointMap[i*MAX_PIC_WIDGET_HEIGHT + YM]& FCOL0 & charPara.checkBoxControlChar)) painter.setBrush(QColor(Qt::yellow)); // magenta, yellow, + else if((pointMap[i*MAX_PIC_WIDGET_HEIGHT + YM]& FVAR)) painter.setBrush(QColor(Qt::green)); + else painter.setBrush(QColor(Qt::white)); + } + painter.drawRect(i*scale + width,j*scale + width,scale - 2*width,scale - 2*width); // + } + } + + if(zkEditEn) + emit rowColChanged(tr("编辑字符:%1").arg (currentEditTxt)); + else + emit rowColChanged(tr("[%1行,%2列]").arg (heightPoint).arg (widthPoint)); + + emit currXYChanged(tr("光标[%1,%2]").arg (currYpos).arg (currXpos/*/charPara.CharWidth*/)); //label_CURXY + + emit disp(); +} + +void PicWidget::resizeWidget(int w,int h){ + if(w > MAX_WIDTH || h > MAX_PIC_WIDGET_HEIGHT){ + QMessageBox::warning(0,tr("警告"),tr("最大支持宽度:%1 高度:%2 当前请求:%3 x %4").arg(MAX_WIDTH).arg(MAX_PIC_WIDGET_HEIGHT).arg(w).arg(h)); + widthPoint = (w > MAX_WIDTH)?MAX_WIDTH:w; + heightPoint = (h > MAX_PIC_WIDGET_HEIGHT)?MAX_PIC_WIDGET_HEIGHT:h; + } + else{ + widthPoint = w; + heightPoint = h; + } + resize(w*scale,h*scale); + update(); +} + +void PicWidget::cursorFlash() +{ + if(pEditMode==0 || zkEditEn )return; + + movePicView(); + //update (); + update (); + if(isInput) emit ShowKeybord (); + //qDebug()<<"cur runing."; +} + +int PicWidget::getFontHeight(int x,int y) +{ int res=0, xx=x*MAX_HEIGHT+y; + int font[]={5,7,9,12,16,16,24,24,32}; + unsigned char c=0; + if( (c=pointMap[xx]) & (FLINE0|FCOL0)) + { + res = font[(c>>1)& 0x0f] ; + if(resline.maxFont)line.maxFont=res; + //qDebug()<<( (pointMap[xx+CFONT]>>1)& 0x0f)<>1); + if(resline.maxLineHeight)line.maxFont=res; + // qDebug()<<( (pointMap[xx+CFONT]>>1)& 0x0f)< MAX_HEIGHT-1 )&& x==0) return x1; + if(f0==0 && x>0) { + x = getPrePos(x,x); + f0 = getFontHeight(x,y); + } + while(x){ + x0=x; + x = getPrePos(x,x);//32); + f1 =getFontHeight(x,y); + if(f0 < f1 ){ + x1=x0; + break; + } + + } + return x1; +} +int PicWidget::isCanDelete(int x,int y){ + int res=0; + int xx=x*MAX_HEIGHT+y; + for(int j=4;jlinePara[0]){linePara[1]=x; linePara[0]=h;} + if( linePara[n]) { + n++; + linePara[n]=h; + } + else linePara[n]=h; + } + } + x++; + } + else break; + } + //qDebug()<<"LINEH:"<=5 && y==heightPoint-1){ +// if(y>= currYpos+2*charPara.LineHeight) y=currYpos+charPara.LineHeight; +// y0=y; +// } + //qDebug()<=5){ + if((currYpos-y)>=2*charPara.LineHeight) y=currYpos-charPara.LineHeight; + } + + return y; +} + +int PicWidget::getNextPos(int x,int n) +{ int x1=x++,xx=0; + int varFlag=0; + if(( pointMap[x*MAX_HEIGHT+currYpos]&FVAR) == FVAR){ + varFlag=1; + n=widthPoint-x;//124*8; + while(n--) + { + if((( pointMap[x*MAX_HEIGHT+currYpos]&FVAR) == FVAR) &&( pointMap[x*MAX_HEIGHT+currYpos]&FLINE0)) x++; + else {x++;break;} + xx++; + if(x>widthPoint-1)break; + } + if(x>=widthPoint) x=widthPoint;//{ x=x1+charPara.CharWidth;} + if(xx==0) x=x1; + return x; + } + + while(n--) + { + if((( pointMap[x*MAX_HEIGHT+currYpos]&FCOL0) == 0x00) &&( pointMap[x*MAX_HEIGHT+currYpos]&FLINE0)) x++; + else break; + xx++; + //qDebug()<<"getNextPos1:"<=widthPoint ) x=widthPoint;//{ x=x1+charPara.CharWidth;} + if(xx==0) x=x1; + //qDebug()<<"getNextPos"<MAX_WIDTH-1)return 1; + while(n) + { if(x>=MAX_WIDTH) break; + n--; + if(( pointMap[x*MAX_HEIGHT+currYpos]&(FLINE0 | FCOL0))== 0x00) x++; + else break; + // if(xx<30)xx++;else break; + } + return (n<=0); +} + +int PicWidget::isVar(int x,int y) //isVar +{ + return (( pointMap[x*MAX_HEIGHT+y]&FVAR) == FVAR) ; +} + +int PicWidget::getPrePos(int x,int n) +{ x--; + int n0=x; + n=x; + while(n--) + { + if(x){ + if(( pointMap[x*MAX_HEIGHT+currYpos]&FCOL0)) break; + x--; + } + else break; + } + if(( pointMap[x*MAX_HEIGHT+currYpos]&FVAR) == FVAR){ + n=n0; + while(n--) + { + if((( pointMap[x*MAX_HEIGHT+currYpos]&FVAR) == FVAR) &&( pointMap[x*MAX_HEIGHT+currYpos]&FLINE0)) x--; + else {x++;break;} + if(x<=0) break; + + } + if(x<=0) x=0; + } + return x; +} + +void PicWidget::mousePressEvent ( QMouseEvent * event ){ + int x = (int )(event->x()/(scale)); + int y = heightPoint -(int )(event->y()/scale)-1; + static bool r_DrawEn=!charPara.DrawEn; + + if(x < widthPoint && y < heightPoint){ + int oriX = currXpos; + int oriY = currYpos; + + if(charPara.DrawEn) + { modified = true; + + currXpos = x; + currYpos = y; + if((pointMap[x*MAX_PIC_WIDGET_HEIGHT + y]&0x1e) ==(unsigned char)(0x00)) + { + if(pointMap[x*MAX_PIC_WIDGET_HEIGHT + y]&0x01) + pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] &=0xfe; + else pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] |=0x01; + } + if(r_DrawEn) update(oriX*scale,oriY*scale,scale,scale); //将原来的焦点去掉 + else update(oriX*scale,oriY*scale,scale,scale*(charPara.LineHeight+1)); //将原来的焦点去掉 + update(x*scale,y*scale,scale,scale); + emit picWidgetModify(); + update(); + // + } + else + { + currXpos = x; + currYpos = y; + + currXpos = SiteStart(currXpos); + currYpos = getDownLine(currXpos); + // if(isVar(oriX,currYpos)) getNextPos(oriX,24*8); + // currXpos = getNextPos(currXpos,charPara.CharWidth); + + if(currXpos > widthPoint) currXpos=widthPoint; + if(currXpos<0) currXpos=0; + if(currYpos<0) currYpos=0; + + + if(charPara.DrawEn) + { + + if(currYpos>=heightPoint) currYpos=heightPoint; + if(isVar(currXpos,currYpos)){ + currXpos = getNextPos( currXpos,24*8); + } + } + else + { + if(isVar(currXpos,currYpos)){ + currXpos = getNextPos( currXpos,24*8); + } + } + //emit movePicView(); + emit ShowKeybord(); + update(oriX*scale,oriY*scale,scale,scale*(charPara.LineHeight)); + update(currXpos*scale,currYpos*scale,scale,scale*(charPara.LineHeight)); + } + r_DrawEn=charPara.DrawEn; + + } +} +int PicWidget::isBlankCol() +{ int cnt=0; + int x = currXpos*MAX_PIC_WIDGET_HEIGHT; + for(char i=0;i0){ // right + currXpos = getNextPos(oriX,widthPoint-currXpos); + + } + else if(shiftX<0){ + if(currXpos) + currXpos = getPrePos(oriX,currXpos); + } + else { } + + if(shiftY<0){ // UP + currYpos = getUpLine(oriX); + if(isVar(oriX,currYpos)) + currXpos = getPrePos(oriX,124*8); + else currXpos = SiteStart(oriX); + + } + else if(shiftY>0){ + if(currYpos) + currYpos = getDownLine(oriX); + if(isVar(oriX,currYpos)) + currXpos = getPrePos(oriX,124*8); + else currXpos = SiteStart(oriX); + } + else{ } + + } + else { + + if(shiftX>0) shiftX=1; + else if(shiftX<0) shiftX=-1; + else shiftX=0; + currXpos += shiftX; + if(currXpos<0)currXpos=0; + else if(currXpos>=widthPoint-1)currXpos=widthPoint-1; + + // qDebug()<<"Y0:"<0) shiftY=-1; + else if(shiftY<0) shiftY=1; + else shiftY=0; + currYpos += shiftY; + if(currYpos<0) currYpos=0; + if(currYpos>heightPoint-1) currYpos =heightPoint-1; + // qDebug()<<"Y1:"<40) h0=40; + if(altPrint){ + h0 = h0/2; + } + + return h0; +} + +int PicWidget::getWidth(){ + return widthPoint; + +} + +int PicWidget::getScaleValue(){ + return scale; +} +void PicWidget::bindSysPara(SysPara *sysPara){ + //this->sysPara1 = sysPara; +} +void PicWidget::initWidget(int w,int h){ + scale = 30; + if(parentWidget()){ + startRow=0; + startCol=0; + QWidget *widget = parentWidget(); + int width = widget->geometry().width(); + int height = widget->geometry().height(); + int scaleX = w?width/w:width; //不要除零 + int scaleY = h?height/(h):height; + scaleX = scaleX > 0?scaleX:1; //scale不能小于零 + scaleY = scaleY > 0?scaleY:1; + scale = scaleY>10?10:scaleY;// > scaleY?scaleX:scaleY; + if(charPara.DrawEn) scale=(scale<8)?8:scale; + else scale=(scale>4)?4:scale; + } + currXpos = 0; + currYpos = 0; + varNum =0; + charPara.Width = w; + //emit movePicView(1); + memset(pointMap,0,sizeof(pointMap)); + resizeWidget(w,h); + modified = false; + picSetHome(); +} + +void PicWidget::enlargeDisplay(){ + if(scale < (1<<10)){ + scale = scale + ((scale>2)?scale/2:1); + resize(widthPoint*scale,heightPoint*scale); + update(); + } +} + + +void PicWidget::reduceDisplay(){ + if(scale > 1){ + scale = scale - ((scale > 2)?scale/3:1); + resize(widthPoint*scale,heightPoint*scale); + update(); + } +} + +void PicWidget::setScale(int scale){ + if(scale > 1) + this->scale = scale; + else + scale = 1; + resize(widthPoint*scale,heightPoint*scale); + update(); +} +void PicWidget::insertImage1(QString filename,bool forceSize){ + if((widthPoint == 0 || heightPoint == 0) && forceSize){ + QMessageBox::warning(0,tr("警告"),tr("请新创建建图片")); + } + else { + QImage img(filename); + if(img.isNull()){ + QMessageBox::warning(0,tr("警告"),tr("文件:%1 无法打开").arg(filename)); + } + else { + int w = img.rect().width(); + int h = img.rect().height(); + + + if(widthPoint +w 16 + else temp=6; // 24 + //int font[]={5,7,9,12,16,16,24,24,32}; + wRow[0]=( temp<<1)& 0x1e; + if(h<7) temp=h-5; //5 + else if(h<9) temp=h-7;//7 + else if(h<12) temp=h-9;//9 + else if(h<16) temp=h-12;//12 + else if(h<24) temp=h-16;//4,5 =>16 + else temp=h-24; // 24 + wRow[1]=( temp <<1)& 0x1e; + wRow[2]=(charPara.FontGap <<1)& 0x1e; + wRow[3]=(charPara.Bold <<1)& 0x1e; + wRow[4]=(charPara.CharWidth <<1)& 0x1e; + wRow[5]=(charPara.LineHeight <<1)& 0x1e; + } + + if(forceSize){ + widthPoint =w; + heightPoint=h; + currXpos=0; + currYpos=0; + } + resizeWidget(widthPoint,heightPoint); + charInsert(w,0); + + for(int i = 0; i < w;i++){ + if((currXpos+ i)>=MAX_WIDTH) break; + + for(int j = 0; j < h ; j++){ + if((currYpos + j)>=MAX_PIC_WIDGET_HEIGHT) break; // continue;// + QRgb argb = img.pixel(i,j); + + //qDebug() << "i:" << i << "j" << j << " " << QString::number(argb,16); + if((argb == 0xffffffff) ) //节约时钟周期 + { + pointMap[(currXpos+i)*MAX_PIC_WIDGET_HEIGHT +(currYpos+h-1-j)] = (i?0:FCOL0) |(jwidthPoint)currXpos=widthPoint; + update(); + } + } +} + +void PicWidget::insertImage(QString filename,bool forceSize){ + + if((widthPoint == 0 || heightPoint == 0) && forceSize){ + QMessageBox::warning(0,tr("警告"),tr("请新创建建图片")); + } + else { + QImage img(filename); + if(img.isNull()){ + QMessageBox::warning(0,tr("警告"),tr("文件:%1 无法打开").arg(filename)); + } + else + { + int w = img.rect().width(); + int h = img.rect().height(); + bool isToWidth=0; + + charInsert(w,0); + +// widthPoint+=w; +// /* 2014-2-28 修正了插入图片造成死机问题。原因:由于数组下标溢出 */ +// if(widthPoint>MAX_WIDTH){ widthPoint=MAX_WIDTH;} +// if(heightPoint>MAX_PIC_WIDGET_HEIGHT){ heightPoint=MAX_PIC_WIDGET_HEIGHT;} +// if(w+currXpos>widthPoint) {w = widthPoint-currXpos;isToWidth=1;} +// if(h+currYpos>heightPoint){ h =heightPoint-currYpos;isToWidth=1;} + +// resizeWidget (widthPoint,heightPoint); + + for(int i = 0; i < w;i++){ + if((currXpos+ i)>=MAX_WIDTH) break; + uint c=0;uchar cc=0,c1=0; + + for(int j = 0; j < h ; j++){ + if((currYpos + j)>=MAX_PIC_WIDGET_HEIGHT) break; // continue;// + QRgb argb = img.pixel(i,j); + c1 = argb&0xff; + + //qDebug() << "i:" << i << "j" << j << " " << QString::number(argb,16); + if((argb == 0xffffffff) ) //节约时钟周期 + { + pointMap[(currXpos+i)*MAX_PIC_WIDGET_HEIGHT +(currYpos+h-1-j)] = (i?0:FCOL0) |(jwidthPoint)currXpos=widthPoint; + update(); + } + } +} +void PicWidget::readPng(int x,int y,int w,int h) +{ + +} + +void PicWidget::loadImage(QString filename,bool forceSize){ + + if((widthPoint == 0 || heightPoint == 0) && forceSize){ + QMessageBox::warning(0,tr("警告"),tr("请新创建建图片")); + } + else { + QImage img(filename); + if(img.isNull()){ + QMessageBox::warning(0,tr("警告"),tr("文件:%1 无法打开").arg(filename)); + } + else + { + int w = img.rect().width(); + int h = img.rect().height(); + startRow=0; + startCol=0; + varNum =0; + memset(pointMap,0,sizeof(pointMap)); + if(!forceSize){ + widthPoint = (w > MAX_WIDTH)?MAX_WIDTH:w; + heightPoint = (h > MAX_PIC_WIDGET_HEIGHT)?MAX_PIC_WIDGET_HEIGHT:h; + resize(widthPoint*scale,heightPoint*scale); + } + // readPng(0,0,w,h); + for(int i = 0; i < widthPoint;i++){ + uint c=0;uchar cc=0,c1=0; + for(int j = 0; j < heightPoint ; j++){ + bool pixelVisible = false; + int init_x = i*w/widthPoint; + int end_x = (w >= widthPoint)?(i + 1)*w/widthPoint:init_x + 1; + int init_y = j*h/heightPoint; + int end_y = (h >= heightPoint)?(j + 1)*h/heightPoint:init_y + 1; + c=0; + for(int l = init_x; l < end_x; l++){ + for(int m = init_y; m < end_y; m ++){ + QRgb argb = img.pixel(l,m); + c1 = argb&0xff; + + //qDebug() << "i:" << i << "j" << j << " " << QString::number(argb,16); + if((argb == 0xffffffff) ) //节约时钟周期 + { + continue; + } + if(((argb & 0xffffff00)==0xff000000 ) + ||((argb & 0xffffff00)==0xffffff00 )) //节约时钟周期 + { + c = c1; + pixelVisible = true; + break; + } + } + if(pixelVisible || c) break; + } + pointMap[i*MAX_PIC_WIDGET_HEIGHT +(heightPoint-1- j)] = c; + }// one col end + } + currXpos=0; + currYpos=0; + //currMode = cal_currHeight()>0; + line.Len=widthPoint; + charPara.LineHeight =getLineHeight(0,0); + if( getLineEnd(0)<5) { + qDebug()<<"FILE TYPE ERROR!"; + } + update(); + } + } +} + +void PicWidget::getPrintDat(unsigned char *dat,unsigned char alt2,SysPara *sysPara) +{ + if(!sysPara ) return; + int res=0; + res = resizePicRect(alt2); + + int hStart,hEnd; + int h= endRow-startRow+1;// + + hStart= (alt2>1)?h>>1:0; + hEnd = (alt2==1)?h>>1 :h; + + for(int i = 0 ; i < widthPoint; i++) + { + unsigned char c=0,c1=0; + int j=0; + for( j = hStart; j < hEnd; j++) + { + c |= (pointMap[(i)*MAX_PIC_WIDGET_HEIGHT+startRow + h-1-j]&0x01)? (1 << (j%8)):0; + if(j%8==7) { dat[i*5+(j-hStart)/8]=c; c=0; } + } + dat[i*5+(j-hStart)/8]=c; + } +} + +/* =============================================== + 040608 121416 242628 32343638 4648 52545658 646668 727476787A 848688 949698 + 02 0A 16 22 2A 3A 44 48 52 62 7A 82 8A 92 9A + 02 0A 16 2A 3A 44 48 52 62 7A 82 8A 92 9A + 02 0A 16 2A 343638 42 48 52545658 62646668 78 848688 92 9A + 02 0A 16 28 3A 42 48 5A 62 6A 78 82 8A 9496989A + 02 0A 16 26 3A 424446484A 5A 62 6A 76 82 8A 9A + 03 0B 17 25 3B 49 5B 63 6B 77 83 8B 9B + 050709 131517191B 232527292B 33353739 49 53555759 656769 77 858789 93959799 +=============================================== */ + +void PicWidget::getCharRamData(SysPara *sysPara) +{ + // 生成字模数据 + if(sysPara->status.variNum) + { + int ramAddress = 0; + if(sysPara->status.variNum>8)sysPara->status.variNum=8; + + for(int i = 0; i < sysPara->status.variNum; i++){ + + vars_t *p_var = &sysPara->status.vars[i]; + p_var->bassAddr = -1; + if(p_var->original){ //清除原来的记录 + if(p_var->dat){ + free(p_var->dat); + } + p_var->original = false; + } + for(int j = 0; j < i; j ++){ //重复检测是否有重复大小的字存在 + if((p_var->height == sysPara->status.vars[j].height) + &&(p_var->width/p_var->digitalNum == sysPara->status.vars[j].width/sysPara->status.vars[j].digitalNum )) + { + p_var->bassAddr = sysPara->status.vars[j].bassAddr; + p_var->datHeight = sysPara->status.vars[j].datHeight; + p_var->datWidth = sysPara->status.vars[j].datWidth; + p_var->rowByteNum = sysPara->status.vars[j].rowByteNum; + p_var->dat = sysPara->status.vars[j].dat; + break; + } + } + if(p_var->bassAddr == -1){ + int width = (p_var->digitalNum)?(p_var->width/p_var->digitalNum):5; + int height = p_var->height; + if(p_var->digitalNum>8 || p_var->type >9 + || p_var->digitalNum<2 || p_var->width<5 + || p_var->height<5 || p_var->height>24 + || p_var->type <0 ||p_var->letterSpace >5 + || p_var->letterSpace <0 + ) + { + return; + } + + // 先根据变量高度,选择一种字体,然后读出0~9的字模,然后进行行列转换,存储到p_var->dat + //char font[]={5,7,9,12,16,16,24,24,32}; + if(p_var->height>=18) charPara.Font=ST24; + else if(p_var->height>=13) { + charPara.Font=p_var->width/p_var->digitalNum-p_var->letterSpace==(p_var->bold?24:12)?HT16:ST16; + } + else if(p_var->height>=10) charPara.Font=ST12; + else if(p_var->height>=8) charPara.Font=ST09; + else if(p_var->height>=6) charPara.Font=ST07; + else charPara.Font=ST05; + + width = (p_var->digitalNum)?(10*p_var->width/p_var->digitalNum):12; + + int zm_width = 11* width; + int zm_height = p_var->height; + unsigned char pMap[(zm_width+10)*40]; // >720 + + charPara.LineSpace = p_var->letterSpace; + //memset(zm,0,sizeof(zm)); + memset(pMap,0,sizeof(pMap)); + inputRamDot (QString("0123456789"),pMap, p_var);// READ DOT FROM ASB.BIN + + int rowDiff = p_var->endRowPos - p_var->startRowPos; + int firstValidRow; + int lastValidRow = 0; + int firstValidRowDiff; + if(lastValidRow >= rowDiff){ + firstValidRow = lastValidRow - rowDiff; + firstValidRowDiff = firstValidRow; + } + else { + firstValidRow = 0; + firstValidRowDiff = lastValidRow > rowDiff; + } + firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 第一行位置 + int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 行数 + + unsigned char *dat = (unsigned char *)calloc(width,rowByteNum); + + for(int k = zm_height - 1; k >= 0 ; k--){ + for(int j = 0; j < zm_width; j ++){ + if(pMap[j*MAX_PIC_WIDGET_HEIGHT+k]&0x01){ + lastValidRow = k + 1; + break; + } + } + if(lastValidRow != 0) + break; + } + +#ifdef DEBUG_NUMZK + printf ("firstValidRow:%d,lastValidRow:%d,rowByteNum:%d,width:%d\n\r",firstValidRow,lastValidRow,rowByteNum,width) ; +#endif + for(int k = firstValidRow; k < lastValidRow; k++){ + for(int j = 0; j < width; j ++){ + int currRow = k - firstValidRowDiff; + if(pMap[j*MAX_PIC_WIDGET_HEIGHT+k]&0x01){ + dat[rowByteNum*j + currRow/8] |= (1<<(currRow%8)); +#ifdef DEBUG_NUMZK + printf("%02X",rowByteNum*j + currRow/8); +#endif + } + else{ +#ifdef DEBUG_NUMZK + printf(" "); +#endif + } + } +#ifdef DEBUG_NUMZK + printf("\n"); +#endif + } + p_var->bassAddr = ramAddress; + p_var->datHeight = height; + p_var->datWidth = width; + p_var->rowByteNum = rowByteNum; + p_var->dat = dat; + p_var->original = true; + p_var->currVal = -1; //相当于初始化 + ramAddress += rowByteNum * width; + } + } + } +} + +int PicWidget::readVar(SysPara *sysPara, unsigned char alt2)// alt2 =0,1,2 +{ + if(sysPara) + { + varNum=0; // _______SAMW + altPrint = alt2; + resizePicRect(alt2); + + for(int j = 0; j < heightPoint; j++) + { + line.maxFont=MAX_HEIGHT;line.minFont =0; // start + + for(int i = 0 ; i < widthPoint; i++) + { + getLineHeight(i,j); // cal min lineHeight, max lineHeight + + unsigned char c[6]; + unsigned char c1=pointMap[i*MAX_PIC_WIDGET_HEIGHT + j]; + + if((c1 & FCOL0 ) && (c1 & FLINE0) && (c1 & FVAR)) + { // 定位变量的起点 +// // W0 ==font V1 = type V2 = diginum V3 = width + c1=(pointMap[(i+VTYPE)*MAX_PIC_WIDGET_HEIGHT + j] >>1)& 0x0f; //type + c[0]=(pointMap[(i+CFONT)*MAX_PIC_WIDGET_HEIGHT + j] >>1)& 0x0f; //font + if(c1 > 9 && c1 != 13) continue; //type,cnt3 is 13 + c[1]=c1; + // qDebug ()<<"C1"<status.vars[varNum].type=c[VTYPE]; + sysPara->status.vars[varNum].digitalNum=c[VDIGIT]; + sysPara->status.vars[varNum].width=c[VWIDTH]; + sysPara->status.vars[varNum].height =getFontHeight(i,j); + sysPara->status.vars[varNum].startColPos =i; + sysPara->status.vars[varNum].startRowPos=endRow+1-(j+sysPara->status.vars[varNum].height); + sysPara->status.vars[varNum].endRowPos=endRow+1-(j); + c1=(pointMap[(i)*MAX_PIC_WIDGET_HEIGHT + j+ CFONTGAP] >>1)& 0x0f; //font + sysPara->status.vars[varNum].letterSpace= c1>5?5:c1; + } +#ifdef DEBUGX + qDebug ()<<"varNum t dig sw sh ls sc sr er "; + qDebug ()<status.vars[varNum].type + <status.vars[varNum].digitalNum + <status.vars[varNum].width + << sysPara->status.vars[varNum].height + << sysPara->status.vars[varNum].letterSpace + <status.vars[varNum].startColPos + <status.vars[varNum].startRowPos + <status.vars[varNum].endRowPos + ; +#endif + + varNum++; + if(varNum>8){ + varNum=8; + QMessageBox::warning(this,tr("警告"),tr("信息中的变量数超过了最大值(8)!请减小变量数.")); + break; + } + i+=c[VWIDTH]-1; + + } + + + } + j+=line.minLineHeight?line.minLineHeight-1:0; + } + //startCol =0; + sysPara->status.variNum=varNum; + //qDebug()<<"varn:"<status.variNum; + } // end of if(sysPara) + return varNum; +} + +// resizePicRect(); +int PicWidget::resizePicWidth(bool rowEn) +{ + //int w=0,Flag=0; + startCol=0; + endCol=0; + for(int j = 0; j < heightPoint; j++){ + { + for(int i = endCol ; i < widthPoint; i++) + if(((pointMap[i*MAX_PIC_WIDGET_HEIGHT + j]&0x01))||((pointMap[i*MAX_PIC_WIDGET_HEIGHT + j]&FLINE0))) + { + if(endCol21 ) endRow=lastLinePos+23; + else if(lastLineHeigt>16) ; + else if(lastLineHeigt>13) endRow=lastLinePos+15; + else if(lastLineHeigt>10) endRow=lastLinePos+11; + else if(lastLineHeigt>7) endRow=lastLinePos+8; + else if(lastLineHeigt>5) endRow=lastLinePos+6; + + } + return startRow; +} + +/* + 文件格式说明 + 1. 在图像文件中,存储变量信息,D0=1表示有点,D0=0表示无点 + 2.地址 信息D6~D1 + 0 0xaa + 1 varNum + 2 0x68 + 3 + 3. 变量参数 隐藏在变量占位符中D6~D1 + 列编号 变量信息(1~128) + 0 类型+1 + 1 位数+1 + 2 字符宽度(点)/2 +1 + 3 字符高度(点)+1 + 4 字符间隔+1 + */ + +void PicWidget::saveImage(QString filename){ + if(widthPoint == 0 || heightPoint == 0){ + QMessageBox::warning(0,"警告","请新创建图片"); + } + else { + update (); + resizePicWidth(0); + // resizePicRect(0); + QSize size(widthPoint,heightPoint); + QImage image(size,QImage::Format_ARGB32); + image.fill(qRgba(0,0,0,0xff)); + for(int i = 0 ; i < widthPoint; i++){ + for(int j = 0; j < heightPoint; j++){ + uint c = 0; + uchar cc= pointMap[( i)*MAX_PIC_WIDGET_HEIGHT +(heightPoint-1- j)]; + if((cc&0x01)==1) + { + c=0xff000000 | (cc) ; + } + else + { + if(cc==0) c=0xffffffff; + else c = 0xffffff00 | (cc); + } + image.setPixel(i,j,c); + } + } + image.save(filename); + } + setModified(false); +} + +void PicWidget::saveImage1(QString filename){ + if(widthPoint == 0 || heightPoint == 0){ + QMessageBox::warning(0,"警告","请新创建建图片"); + } + else { + QSize size(widthPoint,heightPoint); + QImage image(size,QImage::Format_ARGB32); + image.fill(qRgba(0,0,0,0xff)); + for(int i = 0 ; i < widthPoint; i++){ + for(int j = 0; j < heightPoint; j++){ + image.setPixel(i,j,pointMap[i*MAX_PIC_WIDGET_HEIGHT +heightPoint-1- j]?0xff000000:0xffffffff); + } + } + filename = DOC_ROOT_DIR+ QFileInfo(filename).baseName()+".jpg"; + image.save( filename ); + } + setModified(false); +} + +int PicWidget::picDelOneChar() +{ + int posx =currXpos; + //int posy =currYpos; + emit picWidgetModify(); + if(zkEditEn) + { + memset(pointMap,0,40*40); + resizeWidget (widthPoint,heightPoint); + update (); + return 0; + } + + if(posx==0)return 0; + if(isCanDelete(currXpos,currYpos)) return -1; + currXpos = getPrePos(posx,posx);//32); + picDelNextChar( ); + + return 0; +#if 0 + int posxEnd = getLineEnd(posx); + int posx2 = getPrePos(posx,32); + //========================= +#ifdef FONTMATCH //是否需要匹配字体能操作 + if(getFontHeight(posx2,posy)!=charPara.CharHeight)return posx; +#endif + + if(posxEnd>posx && posx2posx && posx2>posx) + {//13 0 24 30 172 + //qDebug()<<"DelNext:"<=line.Len) + { + line.Len -=posx-posx2; + //line.Len; + resizeWidget(line.Len,heightPoint); + } + movePicView(); + update (); + return posx; +} + +void PicWidget::delDots(int x1,int x2,int y1,int h){ + int i,j; + for(i=x1;i0){ + int xMaxPos= linePara[1];// + for(i=x2-1;i>=x1;i--) { + + if(icurrXpos && posx2){ + + moveDots(currXpos,posx1,posy1,linePara[0],w); // + + } + else if(posx1==currXpos && posx2){ + if( pointMap[posx1*MAX_PIC_WIDGET_HEIGHT+posy1] & (FCOL0 | FVAR)) { + // qDebug()<<"INsert1:"<w){ + // qDebug()<<"INsert2:"; + } + else{ + //qDebug()<<"INsert3:"; + return -1; + } + + } + + return 0; +} +char PicWidget::getZkPic(char *dat) +{ int n=0; + QString s="S-",s1; + //showVar ("MAP:",(char *)pointMap,40*10); + for(int i=0;iisOpen ()) pzkEditFile->close (); + pzkEditFile->open (QIODevice::ReadWrite); + char dot[100]; + ///for(int i=0;i<100;i++)dot[i]=0; + memset(dot,0,sizeof(dot)); + getZkPic(dot); // + //qDebug ()<<"zk-2-"<fileName ()<seek(zkOffset); + pzkEditFile->write(dot,zkReadNum); + pzkEditFile->close (); +} + +void PicWidget::readAscDot(unsigned int asc,char *dot) +{ + int offset1[]={BIN0805,BIN0808,BIN0810,BIN0812,BIN0816,BIN1616,BIN2424,BIN2424,BIN2424}; + int fontNum[]= {8,8,10,12,16,32,72,72,72 }; + int fontHeight[]={5,7,9,12,16,16,24,24,24 }; + int fontWidth[]= {5,5,7,8,8,12,24,24,24 }; + QFile *pzkFile; + pzkFile = (QFile * )&zkAsc; + if(!pzkFile->isOpen ()) pzkFile->open (QIODevice::ReadWrite); + pzkEditFile = (QFile * )pzkFile; + charPara.CharHeight = fontHeight[charPara.Font]; + charPara.CharWidth = fontWidth [charPara.Font]+charPara.FontGap; + charPara.LineHeight = charPara.CharHeight +charPara.LineSpace; + zkReadNum = fontNum[charPara.Font]; + zkOffset = asc*fontNum[charPara.Font]+offset1[charPara.Font]; + pzkFile->seek(zkOffset); + pzkFile->read(dot,zkReadNum); + //qDebug ()<<"EN"<close (); +} + +void PicWidget::readZhDot(unsigned int ingb,char *dot ) +{ + unsigned int gbCode=0; + unsigned char gbcode[4]; + if(!unitogb.isOpen ()) unitogb.open (QIODevice::ReadWrite); + unitogb.seek (ingb); + unitogb.read ((char*)gbcode,2); + unitogb.close (); + gbCode = (gbcode[0]<<8)+gbcode[1]; + + QFile *pzkFile1[]={&zkHz05,&zkHz07,&zkHz09,&zkHz12,&zkHz16,&zkHz16H,&zkHz24,&zkHz24H,&zkHz24H}; + int fontNum[]= {8,16,20,24,32,32,72,72,72 }; + int fontHeight[]={5,8,10,12,16,16,24,24,24 }; + int fontWidth[]= {8,8,9,12,16,16,24,24,24 }; + // qDebug()<=0xa1)&&(gbcode[0]<=0xff)) + { + //qDebug()<isOpen ()) + pzkEditFile->open (QIODevice::ReadWrite); + zkReadNum = fontNum[charPara.Font]; + zkOffset =(gbcode[0]-0xa1)*zkReadNum*94+(gbcode[1]-0xa1)*zkReadNum; //区位码=区字节+位字节 16*2 + pzkEditFile->seek(zkOffset); + pzkEditFile->read(dot,zkReadNum); // write to stderr + //qDebug ()<<"CH:"<fileName ()<0 && var[0]<10) { + if(currYpos){ + if( pointMap[(currXpos)*MAX_PIC_WIDGET_HEIGHT +currYpos-1]&0x1e){ + QMessageBox::warning(this,tr("警告"),tr("两个变量之间至少要空出一个墨点!")); + return 0; + } + + } + if(varNum<7) varNum++; + + if(currXpos>5){ + if( pointMap[(currXpos-1)*MAX_PIC_WIDGET_HEIGHT +currYpos]&0x1e) // have cnt? + { + QMessageBox::warning(this,tr("警告"),tr("两个变量之间至少要空出一个墨点!")); + return 0; + } + } + } + code_index=0; + currentEditTxt =txt; + int r_heightPoint =heightPoint; + int r_widthPoint =widthPoint; + if( widthPoint>MAX_WIDTH) + { + widthPoint=MAX_WIDTH; + return 0; + } + if( currXpos >=MAX_WIDTH ) + { + currXpos=MAX_WIDTH; + return 0; + } + + while(k=0x20 && incode<0x80) + { // ascii + zkIncode = (incode & 0x7f)-0x20; + readAscDot(zkIncode,dot); + if(getInserEnable(currXpos,currYpos,charPara.CharWidth,charPara.CharHeight)) { + shows(QString("insertEN var x:%1,k:%2").arg(currXpos).arg(k)); + return -1; + } + if(charInsert(charPara.CharWidth,1)<0){ + shows(QString("insert1 var x:%1,k:%2").arg(currXpos).arg(k)); + return -1; + } + + if(var[0]) currXpos +=varDotMap(dot,var); + else currXpos +=charDotMap(dot,1); + } + // 先处理特殊功能键 + else if(incode<0x20 )// if(txt.at (0).toAscii ()<0x20) + { + if( txt.at (0).toAscii () =='\n') // enter key key + { + zkIncode = (0x30)-0x20; + readAscDot(zkIncode,dot); + if( charPara.CharCurrent){ + int h0=getLineHeight(currXpos,currYpos); + if(h0=lineMaxNum){ if(lineMaxNum=4000) // ? + { + zkIncode = (incode-0x0020)*2; + // qDebug()<heightPoint)charPara.LineHeight+currYpos>heightPoint; + + if(widthPoint < currXpos+300) widthPoint = currXpos+300; + if(widthPoint>MAX_WIDTH) widthPoint=MAX_WIDTH; + if(heightPointMAX_HEIGHT) heightPoint=MAX_HEIGHT; + + + if( r_heightPoint < heightPoint || r_widthPoint width/p_var->digitalNum; + int char_bold; + // int num_w ; + int xx=0;// QString str="----\n"; + while(k=0x20 && incode<0x80) + { // ascii + zkIncode = (incode & 0x7f)-0x20; + readAscDot(zkIncode,dot); + char_bold = char_width/(charPara.CharWidth-charPara.FontGap); + + int w = char_bold; + + for(int i=0,n=0;i 580 ?currXpos*scale-580 :0),0)); + r_currXpos=currXpos; + } +} + +int PicWidget::charDotMap(char *dot,bool english ) +{ + int mx=0,mxx=0; + unsigned char wRow[32]; + memset(&wRow,0,sizeof(wRow)); + + if(zkEditEn==0){ + wRow[0]=(charPara.Font <<1)& 0x1e; + wRow[1]=(charPara.LineSpace <<1)& 0x1e; + wRow[2]=(charPara.FontGap <<1)& 0x1e; + wRow[3]=(charPara.Bold <<1)& 0x1e; + wRow[4]=(charPara.CharWidth <<1)& 0x1e; + wRow[5]=(charPara.LineHeight <<1)& 0x1e; + } + // qDebug()<<"wR:"<>1)& 0x0f; // 0 font 1 type 2 digit + while( (c2= pointMap[(x)*MAX_PIC_WIDGET_HEIGHT + y]) & FVAR ){ + if(c2 & FCOL0) n++; + x++;w++; + if(x>widthPoint || w>30*8 || n>8 ) {w=0;n=0;break;} + } + if(w && c1 ==n){// + + c[2]=n;c[3]=w; + } + return n; +} + +void PicWidget::VarGapSet(int x,int h) +{ + for(int i=0;i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "SysPara.h" +#include "ParaSettingUI.h" + +#define MAX_PIC_WIDGET_HEIGHT 60 +#define MAX_PIC_WIDGET_WIDTH 600*8 +#define MAX_WIDTH MAX_PIC_WIDGET_WIDTH-100 +#define MAX_HEIGHT MAX_PIC_WIDGET_HEIGHT +#define MAXLINE 40 + +#define FVAR (1<<5) +#define FCOL0 (1<<6) +#define FLINE0 (1<<7) + +#define CFONT 0 +#define CLINESPACE 1 +#define CFONTGAP 2 +#define CBOLD 3 +#define CHEIGHT 4 + +#define VTYPE 1 +#define VDIGIT 2 +#define VWIDTH 3 +#define VTYPE0 4 +#define VTYPE1 5 +//#define C 5 + +#define BIN0808 100 +#define BIN0809 1000 +#define BIN0810 2000 +#define BIN0812 3000 +#define BIN0816 5000 +#define BIN1616 7000 +#define BIN2424 11000 +//#define BIN1224 15000 +#define BIN0805 20000 + +//是否需要匹配字体能操作 +//#define FONTMATCH + +typedef enum{ + ST05=0, + ST07=1, + ST09=2, + ST12=3, + ST16=4, + HT16=5, + ST24=6, + HT24=7, + ST32=8 +}PFONTNAME; + +typedef struct +{ + bool DrawEn;// 绘图 + bool DrawGridEn; // 网格 checkBoxDrawGridEn + int Width;// 字串长度 + unsigned char CharHeight; //字符高度 + unsigned char CharWidth; //字符宽度 + unsigned char FontGap; // 字符间隔 + PFONTNAME Font;// 字体 + bool CharCurrent; //光标类型,字符还是像素 + bool CurrentEn; + unsigned char LineSpace; + unsigned char Bold; // 字体加粗 + unsigned char LineHeight; + bool insertMode; + bool checkBoxControlChar;//控制符显示 +} t_charPara; + +typedef struct{ + int width; + int height; + bool enable; +} t_draw; + +typedef struct{ + int Len; + int yPos; + int xPos; + int minFont; + int maxFont; + int minLineHeight; + int maxLineHeight; +}t_line; + +class PicWidget:public QWidget{ + Q_OBJECT + +public: + explicit PicWidget(QWidget *parent = 0); + ~PicWidget(); + + void resizeWidget(int w,int h); + void initWidget(int w,int h); + void loadImage(QString filename,bool forceSize = true); + void insertImage(QString filename,bool forceSize = false); + + void saveImage(QString filename); + void enlargeDisplay(); + void reduceDisplay(); + void setScale(int scale); + + void paintEvent(QPaintEvent *); + + void mousePressEvent ( QMouseEvent * event ); + + void currPositionMove(int shiftX,int shiftY); + void ensureCurrPos(); + int getScaleValue(); + bool isModified(); + int getHeight(); + int getWidth(); + void readAscDot(unsigned int asc, char *dot); + void readZhDot(unsigned int ingb, char *dot); + int inputTxtDot(QString txt,int *var); + int inputRamDot(QString txt,unsigned char *pMap, vars_t *p_var); + int charDotMap( char *dot,bool english ); + int varDotMap(char *dot,int *var); + int picDelOneChar(); + int picDelNextChar(); + t_charPara charPara; + t_draw drawPara; + int picSetHome(); + int picSetEnd(); + void showVar(QString mode,char *var,int len); + int getVarNum(); + int readVar(SysPara *sysPara, unsigned char alt2); + void getPrintDat(unsigned char *dat,unsigned char alt2,SysPara *sysPara); + void getCharRamData(SysPara *sysPara); + + int resizePicRect(bool alt2); + void movePicView(); + void bindSysPara(SysPara *sysPara); + int altPrint; + int startRow; + int startCol; + int heightPoint; + int widthPoint; + int scale; + int currXpos; + int currYpos; + int endRow; + int endCol; + bool zkEditEn; + bool isInput ; + bool pEditMode; + void zkEditNow(); + void zkEditSave(); + void disp(); + QString currentEditTxt; + int resizePicWidth(bool rowEn); + int getNextPos(int x, int n); + int getLineEnd(int x); + int getUpLine(int x); + int getDownLine(int x); + int getPrePos(int x, int n); + int getBlandPos(int x, int n); + int SiteStart(int x); + void moveDots(int x1, int x2, int y1, int h, int w); + int getFontHeight(int x, int y); + + void VarGapSet(int x, int h); + int VarGetWidth(int x,int y,unsigned char *c); + int getLineHeight(int x, int y); + int getInserEnable(int x, int y, int w, int h); + void delDots(int x1, int x2, int y1, int h); + int isVar(int x, int y); + int getPicRealHeight(); + int getUpLineStart(int x, int y); + int isCanDelete(int x, int y); + void readPng(int x, int y, int w, int h); + void insertImage1(QString filename, bool forceSize); + void saveImage1(QString filename); + void shows(QString s); +public slots: + void cursorFlash(); // 光标闪烁 + + +Q_SIGNALS: + void picWidgetModify(); + void ShowKeybord( ); + void rowColChanged(QString); + void currXYChanged(QString); + void ChangeFont(int cc); +private: + unsigned char pointMap[MAX_PIC_WIDGET_HEIGHT * (MAX_PIC_WIDGET_WIDTH)]; + + bool modified; + int varNum; + t_line line; + int linePara[MAXLINE]; + int lineNum; + int lineMaxNum; + //SysPara *sysPara1; + void setModified(bool m); + void saveZhDot(); + char getZkPic(char *dat); + int charInsert(int w,bool txtMode); + int isBlankCol(); + unsigned long zkOffset; + unsigned char zkReadNum; + unsigned int zkIncode; + QFile *pzkEditFile; + QString txt; + /* 字库文件*/ + QFile zkAsc; + char cal_currHeightEn; + // char currMode; // ddddd + QFile zkHz05; + QFile zkHz07; + QFile zkHz09; + QFile zkHz12; + QFile zkHz16; + QFile zkHz24; + QFile zkHz16H; + QFile zkHz24H; + //QFile zkHz32; + QFile unitogb; +}; + +#endif /* PICWIDGET_H_ */ diff --git a/PrintSetting.cpp b/PrintSetting.cpp new file mode 100644 index 0000000..b7bb8dd --- /dev/null +++ b/PrintSetting.cpp @@ -0,0 +1,2313 @@ +#include "PrintSetting.h" +#include "ui_printsetting.h" +#include "SysPara.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "DevOp.h" +#include "Public.h" +#include "LogInfo.h" +#include +#include +#include +#include +#include +#include "myinclude.h" +#include +#include +#include"scene/picscene.h" +#include"scene/pictextitem.h" +#include +#include +PrintSetting::PrintSetting(QWidget *parent) : + QWidget(parent), + ui(new Ui::PrintSetting) +{ + ui->setupUi(this); + ui->comboBoxPrintMode->setView(new QListView()); + + dialogAuthorization = new DialogAuthorization(parent); + dialogAuthVarSet = new DialogAuthorization(parent); + + last_area_end = 0; + area_end = 0; + lockpulse = false; + dialogShowCounter = new DialogShowCounter(parent); + dialogShowCounter->setLCDframe(); + dialogShowCounter->hide(); + connect(dialogShowCounter,SIGNAL(rejected()),this,SLOT(ondialogShowCounterAccepted())); + connect(dialogShowCounter,SIGNAL(accepted()),this,SLOT(ondialogShowCounterAccepted())); + + refresh_timer = new QTimer(); + connect(refresh_timer, SIGNAL(timeout()), this, SLOT(refreshtimerHandler())); +// refresh_timer->start(100); + + +#ifdef ENCRYPT_VOL + dialogModPasswd = new Dialogmodifypasswd(parent); + dialogModPasswd->hide(); + modify_vol = false; + keepVolVal = ui->spinBoxHighVoltageValue->value(); + ui->spinBoxHighVoltageValue->setEnabled(false); + ui->spinBoxStartVoltage->setEnabled(false); + connect(dialogModPasswd,SIGNAL(accepted()),this,SLOT(on_dialogModPasswdAccepted())); +#else + ui->volButton->hide(); +#endif + +// ui->radioButtonFUllColFIxVal->setEnabled(false); + + dlgInputAddr = new DlgInputAddr(parent); + + dlgInputAddr->GetAddr(); + dlgInputAddr->vpnConnect(); + dlgInputAddr->hide(); + + dlgvarLen = new DlgVarLength(parent); + + dlgvarLen->hide(); + + connect(dialogAuthorization,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted())); + connect(dialogAuthVarSet,SIGNAL(accepted()),this,SLOT(ondialogAuthVarSetAccepted())); + //connect(this,SIGNAL(authChanged(int )),this,SLOT(showVolDacEdit(int ))); + connect(dlgInputAddr,SIGNAL(changeMac(QString)),ui->labMac,SLOT(setText(QString))); +#ifdef __NETWORKMANAGER__ + connect(dlgInputAddr,SIGNAL(changeMac(QString)),this,SLOT(showMachInfo(QString))); +#endif + connect(ui->pushButtonVAR,SIGNAL(pressed()),this,SLOT(on_checkVarLenChg())); + connect(dlgvarLen,SIGNAL(on_set()),this,SLOT(on_VarLenSet())); + if(Public::ReadLanguageName()=="Chinese"){ + ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH12.png"))); + }else + { + ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH13.png"))); + } + //ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH12.png"))); + + dialogAuthorization->hide(); + + auth = AUTH_NONE; + //showVolDacEdit(auth); + // +// QFont f =font(); +// f.setFamily("wenquanyi"); +// f.setPixelSize(13); +// setFont(f); + + // ui->pushTestSysSet->hide(); + + //ui->spinBoxFullColFixVal->hide(); + ui->tabWidget_2->removeTab(1);//去掉高级设置标签 + ui->tabWidget_2->setCurrentIndex(0); + + ui->tabWidget->setCurrentIndex(0); +// ui->tabWidget->removeTab(2); + //ui->tabWidget->widget(1)->setBackgroundRole(QPalette::BrightText); + //ui->tabWidget->widget(1)->palette().setColor(QColor(0,0,0,255)); + ui->tabWidget->widget(1)->setStyleSheet("color:blue"); + + //ui->tabWidget->widget(1)->setWindowIcon(QIcon(":/icon/Estartprint2.png")); + //ui->tabWidget->widget(1)->setBac + +#ifndef CABLEUSER + ui->tabWidget->hide(); + ui->checkSynCntEn->hide(); + ui->checkVol1of8En->hide(); +#endif +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QStringList headerLabels = QStringList()<tableWidget->setHorizontalHeaderLabels(headerLabels); + ui->tableWidget->setFocusPolicy(Qt::NoFocus); + ui->tableWidget->horizontalHeader()->setHighlightSections(false); + ui->tableWidget->setColumnHidden(3,true);//第3列用来标志是否保存当前行 + QHeaderView* vertivalHeader = ui->tableWidget->verticalHeader(); + vertivalHeader->setFixedWidth(60); + ui->tableWidget->setColumnWidth(2,120); + + //高级设置隐藏选项 + flagOfSpecailSettng = 0; + SpecailSettingsDisplay(); + + //工程模式隐藏选项 + flagOfEngineeringMode = 0; + EngineeringModeDisplay(); + + flagOfModuleDecimal = 0; + ModuleDecimalDisplay(); + + flagOfModuleHide = 0; + ModuleHideDisplay(); + + specailMachineSetting(0); +#else + delete ui->tableWidget; + delete ui->checkBoxGroupCnt1; + delete ui->Cnt3AddRowBtn; + delete ui->Cnt3InsertRowBtn; + delete ui->Cnt3RemoveRowBtn; + delete ui->cnt3RemoveAllRowsBtn; +#endif +#ifdef SPACEFLAG + +#else +#endif + + current_print_col_num=0; +} + +PrintSetting::~PrintSetting() +{ + delete ui; + delete dialogAuthorization; + +#ifdef ENCRYPT_VOL + delete dialogModPasswd; +#endif +} + +void PrintSetting::on_checkVarLenChg() +{ + //DlgVarLength dlg; + //bool en = ui->checkVARLEN->isChecked(); + if(sysPara) + { + dialogAuthVarSet->clearAuth(); + dialogAuthVarSet->show(); + } +} +void PrintSetting::on_VarLenSet() +{ + //qDebug()<<"on_set"; + if(sysPara){ + sysPara->para.headLen=dlgvarLen->headLen; + sysPara->para.endLen=dlgvarLen->endLen; + sysPara->para.varLen=dlgvarLen->varLen; + sysPara->para.varLen1=dlgvarLen->varLen1; + sysPara->para.varLenEn = dlgvarLen->varEn; + ui->checkVARLEN->setChecked(dlgvarLen->varEn); + if( sysPara->para.synTriggerPrintLenMm < dlgvarLen->varLen || sysPara->para.synTriggerPrintLenMm < dlgvarLen->varLen1) + { + QMessageBox::information(this,tr("提示:可变长度参数不正确"),tr("要求:调整长度小于喷印间隔")); + } + } +} +void PrintSetting::ondialogAuthVarSetAccepted(){ + QString authString = dialogAuthVarSet->getAuth(); + if(authString == "07710665") + { + dlgvarLen->headLen = sysPara->para.headLen; + dlgvarLen->endLen = sysPara->para.endLen; + dlgvarLen->varLen = sysPara->para.varLen; + dlgvarLen->varLen1 = sysPara->para.varLen1; + dlgvarLen->varEn=sysPara->para.varLenEn; + dlgvarLen->applyUI(sysPara->para.cnt1EndValue - sysPara->para.cnt1StartValue+1);//sysPara->para.synTriggerPrintLenMm + //dlgvarLen->lab_4->setText("ddd"); + dlgvarLen->show(); + dlgvarLen->setFocus(); + //sysPara->para.varLenEn = en; + } +} +void PrintSetting::bindSysPara(SysPara *sysPara){ + this->sysPara =sysPara; + //ui->volDacEdit + //ui->volDacEdit->bindSysPara(sysPara); +} + +void PrintSetting::PrintupdateSysParaToUI() +{ + updateSysParaToUI(); +} + + + +void PrintSetting::updateSysParaToUI(){ + if(sysPara){ + + //ui->checkSpace->setChecked(sysPara->para.checkSpace); + ui->checkVARLEN->setChecked(sysPara->para.varLenEn?1:0); + ui->checkBoxNewAmplifyPlate->setChecked(sysPara->para.newAmplifyPlate); + ui->comBoxExtSrceen->setCurrentIndex(sysPara->para.ExtScreenType); + ui->comBoxExtMeterType->setCurrentIndex(sysPara->para.ExtMeterType); + ui->checkBox_WeiDaLiAutoPrint->setChecked(sysPara->para.flagOfWeiDaLiAutoPrint); + + ui->checkBoxLeftRightInverse->setChecked(sysPara->para.leftRightInverse); + ui->checkBoxUpDownInverse->setChecked(sysPara->para.upDownInverse); + ui->checkBoxScanInverse->setChecked(sysPara->para.scanInverse); + ui->checkBoxRecycleWarnAction->setChecked(sysPara->para.RecycleWarnAction); + ui->checkBoxPowerOffAfterPhaseFault->setChecked(sysPara->para.powerOffAfterPhaseFault); + ui->checkBoxSuspendAfterPhaseFault->setChecked(!sysPara->para.powerOffAfterPhaseFault); + ui->checkBoxSuspendAfterPhaseFault->setChecked(sysPara->para.suspendAfterPhaseFault); + ui->checkBoxStopCounterMeterAfterFault->setEnabled(sysPara->para.suspendAfterPhaseFault); + ui->checkBoxStopCounterMeterAfterFault->setChecked(sysPara->para.stopCounterMeterAfterFault); + ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); + ui->spinBox_gearPumpSpeedAlarm->setValue(sysPara->para.gearPumpSpeedAlarm); + + /*----------------------------------------*/ + + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + ui->spinBoxColRepeatCnt->setValue(sysPara->para.charBold); + ui->spinBoxCnt1EndValue->setValue(sysPara->para.cnt1EndValue); + ui->spinBoxCnt1RepeateCnt->setValue(sysPara->para.cnt1RepeateValue); + ui->spinBoxCnt1StartValue->setValue(sysPara->para.cnt1StartValue); + ui->spinBoxCnt1StepValue->setValue(sysPara->para.cnt1StepValue); + ui->spinBoxCnt1CurrValue->setValue(sysPara->para.cnt1CurrValue); + ui->spinBoxCnt2EndValue->setValue(sysPara->para.cnt2EndValue); + ui->spinBoxCnt2RepeateCnt->setValue(sysPara->para.cnt2RepeateValue); + ui->spinBoxCnt2StartValue->setValue(sysPara->para.cnt2StartValue); + ui->spinBoxCnt2StepValue->setValue(sysPara->para.cnt2StepValue); + ui->spinBoxCnt2CurrValue->setValue(sysPara->para.cnt2CurrValue); + + ui->spinBoxCnt3EndValue->setValue(sysPara->para.cnt3EndValue); + ui->spinBoxCnt3RepeateCnt->setValue(sysPara->para.cnt3RepeateValue); + ui->spinBoxCnt3StartValue->setValue(sysPara->para.cnt3StartValue); + ui->spinBoxCnt3StepValue->setValue(sysPara->para.cnt3StepValue); + ui->spinBoxCnt3CurrValue->setValue(sysPara->para.cnt3CurrValue); + + ui->spinBoxStartVoltage->setValue(sysPara->para.startVoltage); + + ui->spinBoxEndVoltage->setValue(sysPara->para.endVoltage); + + ui->spinBoxHighVoltageValue->setValue(sysPara->para.HighVoltageAmplitude); + + ui->spinBoxReducedPixelNum->setValue(sysPara->para.reducedPixelNumRatio); + ui->comboBoxReducedPixMode->setCurrentIndex(sysPara->para.reducedPixelMode); + ui->spinBoxRowSequenceMode->setValue(sysPara->para.rowSequenceMode); + ui->spinBoxPointVoltageAdjustPos->setValue(sysPara->para.pointVoltageAdjustPos); + ui->spinBoxVoltageAdjustValue->setValue(sysPara->para.PointVoltageAdjustValue); + ui->spinBoxLineEndAdjustPointCnt->setValue(sysPara->para.lineEndAdjustPointCnt); + ui->comboBoxLineEndAdjustPointMode->setCurrentIndex(sysPara->para.lineEndAdjustPointDelay); + ui->spinBoxLastLineEndPointFixedValue->setValue(sysPara->para.lastLineEndPointFixedValue); +// ui->spinBoxFullColFixVal->setValue(sysPara->para.FullColFixVal); + ui->radioButtonFUllColFIxVal->setChecked(sysPara->para.FullColFixVal); + + //隐藏功能 + ui->radioButtonSpecialCondition->setChecked(sysPara->para.HiddenFuncEnable); + ui->spinBoxHiddenValue->setValue(sysPara->para.cnt4CurrValue); + ui->spinBoxConditionValue->setValue(sysPara->para.HiddenConditionValue); + ui->spinBoxMeterEnable->setValue(sysPara->para.HiddenMeterEnable); + + // sysPara->status.cnt4CurrValue = sysPara->para.cnt4CurrValue; + sysPara->status.specialVarPrint.SpecialConditionValue = sysPara->para.HiddenConditionValue ; + sysPara->status.specialVarPrint.SpecialVarEnable =sysPara->para.HiddenFuncEnable ; + sysPara->status.specialVarPrint.MeterEnable = sysPara->para.HiddenMeterEnable; + if(sysPara->status.specialVarPrint.SpecialVarEnable) + sysPara->status.specialVarPrint.SpecialVarEnable = 0xFF; + if(sysPara->status.specialVarPrint.MeterEnable) + sysPara->status.specialVarPrint.MeterEnable = 0xFF; + + emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); + if(sysPara->para.HiddenFuncEnable) + { + // emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); + ui->spinBoxdecimalpointnum->setValue(0); + ui->spinBoxdecimalpointnum->setEnabled(false); + + ui->radioButtonSpecialCondition->setEnabled(true); + ui->spinBoxHiddenValue->setEnabled(true); + ui->spinBoxConditionValue->setEnabled(true); + ui->spinBoxMeterEnable->setEnabled(true); + } + + if(!sysPara->para.rrr_nc) + { + if(!sysPara->para.printNumPoint) + ui->spinBoxdecimalpointnum->setValue(0); + else + ui->spinBoxdecimalpointnum->setValue(1); + } + else + { + if(!sysPara->para.printNumPoint) + ui->spinBoxdecimalpointnum->setValue(2); + else + ui->spinBoxdecimalpointnum->setValue(3); + } + + ui->comboBoxIndustry->setCurrentIndex(sysPara->para.industryIndex); + ui->comboBoxRecommendedPrintSpeed->setCurrentIndex(sysPara->para.recommendedPrintSpeed); + +#if(0) + ui->checkBoxAlterPrintEnable->setChecked (sysPara->para.alterPrint.enable );// 原来的 +#else + ui->comboBoxAlterPrintEnable->setCurrentIndex (sysPara->para.alterPrint.enable );// 修改后的 + if(sysPara->para.alterPrint.enable == 0) + { + ui->spinBoxXStartValue->setEnabled(false); + ui->spinBoxXRepeatTimeValue->setEnabled(false); + ui->spinBoxXGapValue->setEnabled(false); + } +#endif + ui->spinBoxXStartValue->setValue (sysPara->para.alterPrint.startValue ); + ui->spinBoxXGapValue->setValue (sysPara->para.alterPrint.repeatValue); + ui->spinBoxXRepeatTimeValue->setValue (sysPara->para.alterPrint.repeatPrintTimes); + ui->spinBoxDistanceTail->setValue(sysPara->para.alterPrint.DistanceTail ); + ui->checkBoxCnt1NatureValue->setChecked ( sysPara->para.Cnt1NatureValue); // + ui->checkBoxSpeedOver->setChecked(sysPara->para.speedoverPaushPrint); + ui->checkSynCntEn->setChecked(sysPara->para.SynCntEn); + ui->checkVol1of8En->setChecked(sysPara->para.Vol1of8En); + ui->checkBoxEleEyeRetrigDis->setChecked( sysPara->para.eleEyeReTrigDisable ); + ui->checkmode0211->setChecked(sysPara->para.mode0211); + ui->resetToCnt1InitValueCheckBox->setChecked(sysPara->para.cnt1ResetToInitValue); + qDebug()<<"checkmode0211:"<para.mode0211; + qDebug()<<"checkVol1of8En:"<para.Vol1of8En; + qDebug()<<"radioButtonFUllColFIxVal:"<para.FullColFixVal; + qDebug()<<"checkBoxCharWidthSet:"<para.charWidthSetEnable; + + ui->checkBox_5Row5Dot->setChecked(sysPara->para.flagOf5Row5Dot); + //ui->checkBoxPrintOnce->setChecked(sysPara->para.printOnce); + //ui->checkBoxNumPoint->setChecked(sysPara->para.printNumPoint); + ui->checkBoxReciclar->setChecked(sysPara->para.Reciclar); + ui->dacScaledSpinBox->setValue(sysPara->para.dacScale); + ui->checkBoxResetSendData->setChecked(sysPara->para.ResetSendData); + ui->spinBoxJumpStartValue->setValue( sysPara->para.stepPrint.startValue ); + ui->spinBoxJumpEndValue->setValue( sysPara->para.stepPrint.endValue ); + //ui->checkBoxStepPrintEn->setEnabled( sysPara->para.stepPrint.enbale ); + ui->checkBoxStepPrintEn->setChecked( sysPara->para.stepPrint.enbale ); + ui->spinBoxJumpStepValue->setValue(sysPara->para.stepPrint.StepValue); + + + ui->checkProductResetEn->setChecked(sysPara->para.ResetProductCntEn); + ui->checkAllProductResetEn->setChecked(sysPara->para.ResetAllProductCntEn); + ui->checkHVFaultCloseEn->setChecked(sysPara->para.HVFaultCloseEn); + + // 电眼触发计数器动作 选择 + ui->eleCNT1IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x10)?1:0); + ui->radCNT1ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x10)?0:1); + + ui->eleCNT2IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?1:0); + ui->radCNT2ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?0:1); + + ui->eleCNT3IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x40)?1:0); + ui->radCNT3ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x40)?0:1); + + ui->checkBoxGearPumpEnable->setChecked(sysPara->para.gearPumpEnable); + ui->checkBox_ReclaimPumpEnable->setChecked(sysPara->para.flagOfReclaimPumEnable); + ui->checkBoxCharWidthSet->setChecked(sysPara->para.charWidthSetEnable); + ui->checkBoxMagnet->setChecked(sysPara->para.isCheckMagnet); + ui->printfLightCheckBox->setChecked(sysPara->para.isCheckPrintLight); + + ui->phaseHighCntSpinBox->setValue( sysPara->para.phaseHighCnt); + + sysPara->para.bcOption.var1Num=ui->spinBoxCnt1EndValue->text().length(); + sysPara->para.bcOption.var2Num=ui->spinBoxCnt2EndValue->text().length(); +// sysPara->para.bcOption.var3Num=ui->spinBoxCnt2EndValue_2->text().length(); + //ui->volDacEdit->updateSysParaToUI(); + //高速模式 + ui->checkBox_FastMode->setChecked(sysPara->para.flagOfFastMode); +#ifdef MIMA + ui->labMac->setText(QString(" Mac:%1").arg(dlgInputAddr->jd.addr)); + showMachInfo(QString::number(dlgInputAddr->jd.addr)); +#else + ui->labMac->setText(QString("")); +#endif + ui->CBDateFormat1->setCurrentIndex(sysPara->para.ExpirySplitMode);//p_var->splitMode + ui->spinBoxExpiryDate->setValue(sysPara->para.ExpiryDay); + //on_spinBoxExpiryDate_valueChanged(sysPara->print.ExpiryVar.); + ui->checkBoxSaveCNTStateValue->setCheckState(sysPara->para.isCntSaveStateValue ? Qt::Checked : Qt::Unchecked); + + flagOfModuleDecimal = sysPara->para.flagOfModuleDecimal; + ModuleDecimalDisplay(); + flagOfModuleHide = sysPara->para.flagOfModuleHide; + ModuleHideDisplay(); + + LoadCnt1GroupSettingsToUI(); + if(sysPara->para.mode0211 || sysPara->para.FullColFixVal) + { + ui->spinBoxStartVoltage->setEnabled(false); + ui->spinBoxEndVoltage->setEnabled(false); + } + if(sysPara->para.flagOfCnt1GroupDisp) + { + //edit@12-03 + const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9); + if(-1==indexTab) + ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); + + } + if(sysPara->para.flagOfstepPrint) + { + //edit@12-03 + const int indexTab=ui->tabWidget->indexOf(ui->tab_6); + if(-1==indexTab) + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + } + } +} +#include "VerBVersion.h" +void PrintSetting::showMachInfo(QString Mac) +{ +#ifdef __NETWORKMANAGER__ + QString VernonBach; + VernonBach.sprintf("%d.%d.%02d.", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER); + VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+UP_PRINTER_STAGE_VER; + QString FpgaVer = "No:"+QString::number(sysPara->status.build_dat.builTime); + LogInfo::showMachineInformation(Mac,"QString SerialNum", VernonBach, FpgaVer); +#endif +} +void PrintSetting::showRemoteControl(QString SuperNodeIP,QString EdgeIP) +{ +#ifdef __NETWORKMANAGER__ + QString VernonBach; + VernonBach.sprintf("%d.%d.%02d.", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER); + VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+UP_PRINTER_STAGE_VER; + QString FpgaVer = "No:"+QString::number(sysPara->status.build_dat.builTime); + //LogInfo::showMachineInformation(Mac,"QString SerialNum", VernonBach, FpgaVer); +#endif +} + +void PrintSetting::applyUIPara(){ + if(sysPara){ + + unsigned char rExtScreenType =sysPara->para.ExtScreenType; + sysPara->para.ExtScreenType = ui->comBoxExtSrceen->currentIndex(); + sysPara->para.ExtMeterType = ui->comBoxExtMeterType->currentIndex(); + sysPara->para.gearPumpSpeedAlarm = ui->spinBox_gearPumpSpeedAlarm->value(); + sysPara->para.flagOfWeiDaLiAutoPrint = ui->checkBox_WeiDaLiAutoPrint->isChecked(); + if(//rExtScreenType==0 && + sysPara->para.ExtScreenType) + sysPara->devOp->uart2Init(); + if(sysPara->para.ExtScreenType==0) + { + sysPara->status.ExtScreenEn =0; + } + ui->spinBoxColDelay->setEnabled(1); + checkCnt1EndValueOnUI(); + sysPara->para.varLenEn = ui->checkVARLEN->isChecked(); + sysPara->para.checkSpace = 0;//ui->checkSpace->isChecked(); + sysPara->para.leftRightInverse = ui->checkBoxLeftRightInverse->isChecked(); + sysPara->para.upDownInverse = ui->checkBoxUpDownInverse->isChecked(); + sysPara->para.scanInverse = ui->checkBoxScanInverse->isChecked(); + sysPara->para.currPrintMode = ui->comboBoxPrintMode->currentIndex(); + sysPara->para.suspendAfterPhaseFault = ui->checkBoxSuspendAfterPhaseFault->isChecked(); + sysPara->para.powerOffAfterPhaseFault = ui->checkBoxPowerOffAfterPhaseFault->isChecked(); + sysPara->para.RecycleWarnAction = ui->checkBoxRecycleWarnAction->isChecked(); + sysPara->para.stopCounterMeterAfterFault = ui->checkBoxStopCounterMeterAfterFault->isChecked(); + sysPara->para.printColDelay = ui->spinBoxColDelay->value(); + sysPara->para.cnt1EndValue = ui->spinBoxCnt1EndValue->value(); + sysPara->para.cnt1RepeateValue = ui->spinBoxCnt1RepeateCnt->value(); + sysPara->para.cnt1StartValue = ui->spinBoxCnt1StartValue->value(); + sysPara->para.cnt1StepValue = ui->spinBoxCnt1StepValue->value(); + sysPara->para.cnt1CurrValue = ui->spinBoxCnt1CurrValue->value(); //这个值设置没关系,在关机前还会再此被设置 + sysPara->para.cnt2EndValue = ui->spinBoxCnt2EndValue->value(); + sysPara->para.cnt2RepeateValue = ui->spinBoxCnt2RepeateCnt->value(); + sysPara->para.cnt2StartValue = ui->spinBoxCnt2StartValue->value(); + sysPara->para.cnt2StepValue = ui->spinBoxCnt2StepValue->value(); + sysPara->para.cnt2CurrValue = ui->spinBoxCnt2CurrValue->value(); + + sysPara->para.newAmplifyPlate = ui->checkBoxNewAmplifyPlate->isChecked(); + sysPara->para.cnt3EndValue = ui->spinBoxCnt3EndValue->value(); + sysPara->para.cnt3RepeateValue = ui->spinBoxCnt3RepeateCnt->value(); + sysPara->para.cnt3StartValue = ui->spinBoxCnt3StartValue->value(); + sysPara->para.cnt3StepValue = ui->spinBoxCnt3StepValue->value(); + sysPara->para.cnt3CurrValue = ui->spinBoxCnt3CurrValue->value(); + + sysPara->para.startVoltage = ui->spinBoxStartVoltage->value(); + sysPara->para.endVoltage = ui->spinBoxEndVoltage->value(); + sysPara->para.charBold = ui->spinBoxColRepeatCnt->value(); + sysPara->para.HighVoltageAmplitude = ui->spinBoxHighVoltageValue->value(); + sysPara->status.cnt1CurrentValueInitDoneFlag = !ui->checkBoxResetCnt1CurrValue->isChecked(); + sysPara->status.cnt2CurrentValueInitDoneFlag = !ui->checkBoxResetCnt2CurrValue->isChecked(); + sysPara->status.cnt3CurrentValueInitDoneFlag = !ui->checkBoxResetCnt3CurrValue->isChecked(); + ApplyCnt1GroupSetting(); + + sysPara->para.flagOfFastMode = ui->checkBox_FastMode->isChecked(); + if(sysPara->para.flagOfFastMode || sysPara->status.FPGAVersionType == 1){ + if(ui->comboBoxPrintMode->count()>=3){ + ui->comboBoxPrintMode->setItemText(0,tr("超高速")); + ui->comboBoxPrintMode->setItemText(1,tr("高速")); + ui->comboBoxPrintMode->removeItem(2); + } + }else{ + if(ui->comboBoxPrintMode->count()<3){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + + if(sysPara->para.EditMode==TXTFILE) + { + sysPara->status.specialVarPrint.SpecialVarEnable = ui->radioButtonSpecialCondition->isChecked(); + sysPara->status.cnt4CurrValue = ui->spinBoxHiddenValue->value(); + sysPara->status.specialVarPrint.MeterEnable = ui ->spinBoxMeterEnable->value(); + sysPara ->status.specialVarPrint.SpecialConditionValue = ui->spinBoxConditionValue->value(); + if(sysPara->status.specialVarPrint.SpecialVarEnable) + sysPara->status.specialVarPrint.SpecialVarEnable = 0xFF; + if(sysPara->status.specialVarPrint.MeterEnable) + sysPara->status.specialVarPrint.MeterEnable = 0xFF; + + sysPara->para.cnt4CurrValue = sysPara->status.cnt4CurrValue; + sysPara->para.HiddenConditionValue = sysPara->status.specialVarPrint.SpecialConditionValue; + sysPara->para.HiddenFuncEnable = sysPara->status.specialVarPrint.SpecialVarEnable; + sysPara->para.HiddenMeterEnable = sysPara->status.specialVarPrint.MeterEnable; + + } + + sysPara->devOp->writeFpgaCalandar(0); + + sysPara->para.reducedPixelNumRatio = ui->spinBoxReducedPixelNum->value(); + sysPara->para.reducedPixelMode = ui->comboBoxReducedPixMode->currentIndex(); + sysPara->para.rowSequenceMode = ui->spinBoxRowSequenceMode->value(); + + sysPara->para.pointVoltageAdjustPos = ui->spinBoxPointVoltageAdjustPos->value(); + sysPara->para.PointVoltageAdjustValue = ui->spinBoxVoltageAdjustValue->value(); + + sysPara->para.lineEndAdjustPointCnt = ui->spinBoxLineEndAdjustPointCnt->value(); + sysPara->para.lineEndAdjustPointDelay = ui->comboBoxLineEndAdjustPointMode->currentIndex(); + sysPara->para.lastLineEndPointFixedValue = ui->spinBoxLastLineEndPointFixedValue->value(); + + sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked();//2020/3/2 + sysPara->para.dacScale = ui->dacScaledSpinBox->value(); + + sysPara->para.industryIndex = ui->comboBoxIndustry->currentIndex(); + sysPara->para.recommendedPrintSpeed = ui->comboBoxRecommendedPrintSpeed->currentIndex(); + + if(ui->eleCNT1IncEn->isChecked()) + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x10); // CNT1 +1 + else + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xef); // CNT1 = current + + if(ui->eleCNT2IncEn->isChecked()) + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x20); // CNT2 +1 + else + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xdf); // CNT2 = current + + if(ui->eleCNT3IncEn->isChecked()) + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x40); // CNT3 +1 + else + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xbf); // CNT3 = current + + + //ui->radCNT1ResetEn->isChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x40)?1:0); + //ui->radCNT2ResetEn->isChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x80)?1:0); + // +#if(0) + sysPara->para.alterPrint.enable =ui->checkBoxAlterPrintEnable->isChecked (); // 原来的 +#else + sysPara->para.alterPrint.enable =ui->comboBoxAlterPrintEnable->currentIndex();// 修改后的 + if(sysPara->para.alterPrint.enable) + sysPara->para.textEditLineSpace = 0; +#endif + sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; + sysPara->para.alterPrint.startValue = ui->spinBoxXStartValue->value (); + sysPara->para.alterPrint.repeatValue = ui->spinBoxXGapValue->value (); + sysPara->para.alterPrint.repeatPrintTimes =ui->spinBoxXRepeatTimeValue->value (); + sysPara->para.alterPrint.DistanceTail =ui->spinBoxDistanceTail->value (); + if( sysPara->para.alterPrint.startValue>= sysPara->para.alterPrint.repeatValue ) + { + sysPara->para.alterPrint.startValue =sysPara->para.alterPrint.repeatValue -1; + ui->spinBoxXStartValue->setValue (sysPara->para.alterPrint.startValue); + + + + QMessageBox::information(this,tr("提示:交替参数不正确"),tr("要求:起始位置<交替间隔")); + } + if( sysPara->para.alterPrint.repeatPrintTimes+sysPara->para.alterPrint.startValue + > sysPara->para.alterPrint.repeatValue ) + { + sysPara->para.alterPrint.repeatPrintTimes =sysPara->para.alterPrint.repeatValue -sysPara->para.alterPrint.startValue-1; + ui->spinBoxXRepeatTimeValue->setValue (sysPara->para.alterPrint.repeatPrintTimes); + + QMessageBox::information(this,tr("提示:交替参数不正确"),tr("要求:(重复次数+起始位置)<交替间隔")); + } + + sysPara->para.Cnt1NatureValue = ui->checkBoxCnt1NatureValue->isChecked (); // + sysPara->para.speedoverPaushPrint = ui->checkBoxSpeedOver->isChecked(); + sysPara->para.SynCntEn = ui->checkSynCntEn->isChecked(); + sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked();//打印优化 + sysPara->para.mode0211 = ui->checkmode0211->isChecked();//添加0211模式 + sysPara->para.cnt1ResetToInitValue = ui->resetToCnt1InitValueCheckBox->isChecked();// 电眼复位时,复位起始值或当前值 + //sysPara->para.printOnce = ui->checkBoxPrintOnce->isChecked();// 每条信息只喷一次 +// sysPara->para.printOnce = 0;// 每条信息只喷一次 + //sysPara->para.printNumPoint = ui->checkBoxNumPoint->isChecked();// 每条信息只喷一次 + sysPara->para.Reciclar = ui->checkBoxReciclar->isChecked();//sysPara->para.Reciclar = 0; // + switch(ui->spinBoxdecimalpointnum->value()) + //20240625修改小数点位数可选0-3位,FPGA原参数a44d 地址第6号位为 是否打印小数使能信号,1为打印小数,0为不打印小数。 + //更改为: + // a44d 地址第6号位和第7号位为 打印显示小数位数; + // 第7,6变量为 11 打印3位小数, + // 第7,6变量为 10 打印2位小数, + // 第7,6变量为 01 打印1位小数, + // 第7,6变量为 00 打印0位小数, + { + case 0: + ui->radioButtonSpecialCondition->setEnabled(true); + sysPara->para.printNumPoint = 0; + sysPara->para.rrr_nc = 0; + break; + case 1: + ui->radioButtonSpecialCondition->setEnabled(false); + ui->spinBoxMeterEnable->setValue(0); + sysPara->para.printNumPoint = 1; + sysPara->para.rrr_nc = 0; + break; + case 2: + ui->radioButtonSpecialCondition->setEnabled(false); + ui->spinBoxMeterEnable->setValue(0); + sysPara->para.printNumPoint = 0; + sysPara->para.rrr_nc = 1; + break; + case 3: + ui->radioButtonSpecialCondition->setEnabled(false); + ui->spinBoxMeterEnable->setValue(0); + sysPara->para.printNumPoint = 1; + sysPara->para.rrr_nc = 1; + break; + default: + sysPara->para.printNumPoint = 0; + sysPara->para.rrr_nc = 0; + break; + } + sysPara->para.stepPrint.startValue = ui->spinBoxJumpStartValue->value(); + sysPara->para.stepPrint.endValue = ui->spinBoxJumpEndValue->value(); + sysPara->para.stepPrint.enbale = ui->checkBoxStepPrintEn->isChecked(); + sysPara->para.stepPrint.StepValue = ui->spinBoxJumpStepValue->value(); + sysPara->para.ResetSendData = ui->checkBoxResetSendData->isChecked(); + sysPara->para.eleEyeReTrigDisable = ui->checkBoxEleEyeRetrigDis->isChecked(); + + sysPara->para.ResetAllProductCntEn = ui->checkAllProductResetEn->isChecked(); + sysPara->para.ResetProductCntEn = ui->checkProductResetEn->isChecked(); + sysPara->para.HVFaultCloseEn = ui->checkHVFaultCloseEn->isChecked(); + sysPara->para.gearPumpEnable = ui->checkBoxGearPumpEnable->isChecked(); + sysPara->para.flagOfReclaimPumEnable = ui->checkBox_ReclaimPumpEnable->isChecked(); + sysPara->para.phaseHighCnt = ui->phaseHighCntSpinBox->value(); + sysPara->para.charWidthSetEnable = ui->checkBoxCharWidthSet->isChecked(); + sysPara->para.isCheckMagnet = ui->checkBoxMagnet->isChecked(); + sysPara->para.isCheckPrintLight = ui->printfLightCheckBox->isChecked(); + + sysPara->para.bcOption.var1Num=ui->spinBoxCnt1EndValue->text().length(); + sysPara->para.bcOption.var2Num=ui->spinBoxCnt2EndValue->text().length(); +// sysPara->para.bcOption.var3Num=ui->spinBoxCnt2EndValue_2->text().length(); + + //qDebug()<<"sysPara->para.bcOption.varNum"<para.bcOption.var1Num<para.bcOption.var2Num; + sysPara->para.ExpiryDay = ui->spinBoxExpiryDate->value(); + sysPara->para.ExpirySplitMode = ui->CBDateFormat1->currentIndex(); + ui->resetToCnt1InitValueCheckBox->isChecked(); + //qDebug()<print.ExpiryDay; + if(sysPara->devOp->writeFpgaPrintPara() != -1) // save para to disk file. + QMessageBox::information(this,tr("提示"),tr("应用成功")); + + //ui->labelCnt1CurrValueTxt->setEnabled(false); +// ui->labelCnt2CurrValueTxt->setEnabled(false); + ui->spinBoxCnt1CurrValue->setEnabled(false); + ui->spinBoxCnt2CurrValue->setEnabled(false); + ui->spinBoxCnt3CurrValue->setEnabled(false); + + ui->checkBoxResetCnt1CurrValue->setChecked(false); + ui->checkBoxResetCnt2CurrValue->setChecked(false); + ui->checkBoxResetCnt3CurrValue->setChecked(false); + +// if(sysPara->para.EditMode==SCENE) +// { +// QList items = pGetPicScene->selectedItems(); +// if(items.size() > 0) +// { +// PicTextItem* picText = qgraphicsitem_cast(items.at(0)); +// picText->CatchCnt1StartValue = ui->lineEditStartValue->text().toInt(); +// picText->CatchCnt1CurrValue = ui->lineEditCountValue->text().toInt(); +// picText->SpecialConditions = ui->radioButtonSpecialCondition->isChecked(); +// pGetPicScene->clearSelection(); +// //emit SwitchTimerShowItem(true); +// } +// } + } + + +} + +void PrintSetting::updateSysStatusToUI(){ + if(sysPara){ + + ui->labelCnt1CurrValue->setText(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16)); + ui->labelCnt2CurrValue->setText(QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16)); + ui->labelCnt3CurrValue->setText(QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16)); + //ui->volDacEdit->updateSysStatusToUI(); + //ui->labPulse ->setText(); + //ui->labPulse ->setText(QString("%1 pps").arg((unsigned int)sysPara->status.synPulseCntPer1s)); + int rDay= sysPara->para.openInkLineTime/24/3600; + long tmp = sysPara->para.openInkLineTime%(24*3600); + int rHour = tmp/3600; tmp =tmp%3600; + int rMinute = tmp/60; + int rSecond=tmp%60; + QString s=""; + //s.sprintf(tr("%4d天 %02d:%02d:%02d").toUtf8(), rDay,rHour,rMinute,rSecond);ui->labOpenInkLineTime->setText(s); + s.sprintf(("%6d:%02d:%02d"), rDay*24+rHour,rMinute,rSecond);ui->labOpenInkLineTime->setText(s); + ui->label_MaintenanceTime->setText(QString::number(dlgInputAddr->repairTimeLess,10)+tr("小时")); + //ui->labOpenInkLineTime->setText(tr("%1天 %2:%3:%4").arg(rDay).arg(rHour).arg(rMinute).arg(rSecond)); + ui->labTrunOnPowerCnt->setText(QString::number(sysPara->para.TrunOnPowerCnt,10)); + } +} +void PrintSetting::on_pushButtonClearRunTime_pressed(){ + sysPara->para.openInkLineTime=0; + sysPara->para.TrunOnPowerCnt=0; + sysPara->saveParaToFile(); + +} + +void PrintSetting::on_pushButtonApply_pressed() +{ + applyUIPara(); + emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); + autoUpdateFontWidth(sysPara->status.textEditTotalCol); + PrintSettingLog(); +} + +void PrintSetting::PrintSettingLog(){ + //qDebug()<comboBoxPrintMode->currentIndex()); + qDebug()<spinBoxColDelay->value()); + qDebug()<spinBoxColRepeatCnt->value()); + qDebug()<spinBoxStartVoltage->value()); + qDebug()<spinBoxEndVoltage->value()); + qDebug()<spinBoxHighVoltageValue->value()); + qDebug()<checkBoxRecycleWarnAction->isChecked()); + qDebug()<checkBoxPowerOffAfterPhaseFault->isChecked()); + qDebug()<checkSynCntEn->isChecked()); + qDebug()<checkHVFaultCloseEn->isChecked()); + qDebug()<checkBoxSpeedOver->isChecked()); + qDebug()<checkBoxSuspendAfterPhaseFault->isChecked()); + qDebug()<checkmode0211->isChecked()); + qDebug()<checkVol1of8En->isChecked()); + qDebug()<checkBoxCnt1NatureValue->isChecked()); + qDebug()<checkBoxStopCounterMeterAfterFault->isChecked()); + qDebug()<checkBoxEleEyeRetrigDis->isChecked()); + qDebug()<radioButtonFUllColFIxVal->isChecked()); + qDebug()<checkBoxUpDownInverse->isChecked()); + qDebug()<checkBoxLeftRightInverse->isChecked()); + qDebug()<comboBoxIndustry->currentIndex()); + qDebug()<comboBoxRecommendedPrintSpeed->currentIndex()); + qDebug()<checkBoxMagnet->isChecked()); + qDebug()<checkBoxCharWidthSet->isChecked()); + qDebug()<checkBoxGearPumpEnable->isChecked()); + qDebug()<checkBoxResetSendData->isChecked()); + qDebug()<spinBoxCnt1StartValue->value()); + qDebug()<spinBoxCnt1EndValue->value()); + qDebug()<spinBoxCnt1RepeateCnt->value()); + qDebug()<spinBoxCnt1StepValue->value()); + qDebug()<spinBoxCnt1CurrValue->value()); + qDebug()<checkBoxResetCnt1CurrValue->isChecked()); + //qDebug()<checkBoxNumPoint->isChecked()); + qDebug()<checkVARLEN->isChecked()); + qDebug()<resetToCnt1InitValueCheckBox->isChecked()); + qDebug()<CBDateFormat1->currentIndex()); + qDebug()<checkBoxSaveCNTStateValue->isChecked()); + qDebug()<spinBoxExpiryDate->value()); + qDebug()<checkBoxCircleProductCnt->isChecked()); + qDebug()<spinBoxCnt2StartValue->value()); + qDebug()<spinBoxCnt2EndValue->value()); + qDebug()<spinBoxCnt2RepeateCnt->value()); + qDebug()<spinBoxCnt2StepValue->value()); + qDebug()<spinBoxCnt2CurrValue->value()); + qDebug()<checkBoxResetCnt2CurrValue->isChecked()); + qDebug()<spinBoxXStartValue->value()); + qDebug()<spinBoxXGapValue->value()); + qDebug()<spinBoxXRepeatTimeValue->value()); + qDebug()<comboBoxAlterPrintEnable->currentIndex()); + qDebug()<para.HiddenFuncEnable); + if(ui->radioButtonSpecialCondition->isChecked()){ + qDebug()<spinBoxHiddenValue->value()); + qDebug()<spinBoxConditionValue->value()); + qDebug()<spinBoxMeterEnable->value()); + + } + +} + + +void PrintSetting::on_checkBoxResetCnt1CurrValue_released() +{ + bool checked = ui->checkBoxResetCnt1CurrValue->isChecked(); + ui->spinBoxCnt1CurrValue->setEnabled(checked); +} + +void PrintSetting::on_checkBoxResetCnt2CurrValue_released() +{ + bool checked = ui->checkBoxResetCnt2CurrValue->isChecked(); + ui->spinBoxCnt2CurrValue->setEnabled(checked); +} + +void PrintSetting::on_checkBoxResetCnt3CurrValue_released() +{ + bool checked = ui->checkBoxResetCnt3CurrValue->isChecked(); + ui->spinBoxCnt3CurrValue->setEnabled(checked); +} + +void PrintSetting::on_checkBoxSaveCNTStateValue_released() +{ + bool checked = ui->checkBoxSaveCNTStateValue->isChecked(); + sysPara->para.isCntSaveStateValue = checked; +} + +void PrintSetting::on_checkBoxCircleProductCnt_released() +{ + bool checked = ui->checkBoxCircleProductCnt->isChecked(); + sysPara->status.circleProductCnt = checked; +} + +void PrintSetting::on_dialogModPasswdAccepted() +{ + QString authString = dialogModPasswd->getModPasswd(); + if(authString == "987456123") + { + qDebug()<< "right choice"; + modify_vol = true; + ui->volButton->setText("取消授权"); + ui->spinBoxHighVoltageValue->setEnabled(true); + ui->spinBoxStartVoltage->setEnabled(true); + } + else + { + QMessageBox::critical(this,tr("错误"),tr("授权码:") + authString + tr(" 错误")); + } + +} + + +void PrintSetting::ondialogAuthorizationAccepted(){ + QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); + + QString authString = dialogAuthorization->getAuth(); +// sysPara->devOp->checkAuthorization(authString); + + if(authString == "nnyp"){ + //if(authString == "axmk"){ + auth = AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE + | AUTH_SUPER_USER1\ + //edit@11-28 + |AUTH_SUPER_USER2|AUTH_DISPLAY_OTHER_INFO; + SpecailSettingsDisplay(); + EngineeringModeDisplay(); + ModuleDecimalDisplay(); + ModuleHideDisplay(); + } + + else + if(authString == "biyang"){ + auth = AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE + | AUTH_DISPLAY_LOG_INFO | AUTH_SUPER_USER1 ; + } + else if(authString == "by2016"){ + //edit@11-28 + auth = \ + AUTH_DISPLAY_LOG_INFO + //AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE + //| AUTH_DISPLAY_OTHER_INFO + | AUTH_SUPER_USER1 + |AUTH_SUPER_USER2 + ; + SpecailSettingsDisplay(); + EngineeringModeDisplay(); + ModuleDecimalDisplay(); + ModuleHideDisplay(); + } + + else if(authString == "07710665"){ + // ui->checkBoxReciclar->setEnabled(1); + flagOfSpecailSettng = !flagOfSpecailSettng; + SpecailSettingsDisplay(); + } + else if(authString == "nnyp0998"){ + flagOfEngineeringMode =true; + //edit@11-28 + flagOfSpecailSettng =true;// !flagOfSpecailSettng; + + auth = AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE + | AUTH_DISPLAY_LOG_INFO | AUTH_DISPLAY_OTHER_INFO| AUTH_SUPER_USER1 |AUTH_SUPER_USER2; + SpecailSettingsDisplay(); + EngineeringModeDisplay(); + + //edit@11-30 + ModuleDecimalHideDisplay(sysPara->para.HiddenFuncEnable); + specailMachineSetting(1); + } + + else if(authString == "07710221"){ + flagOfModuleDecimal = !flagOfModuleDecimal; + sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; + ModuleDecimalDisplay(); + ModuleHideDisplay(); + sysPara->para.flagOfModuleHide = flagOfModuleHide; + + }else if(authString == "07710331"){ + flagOfModuleHide = !flagOfModuleHide; + sysPara->para.flagOfModuleHide = flagOfModuleHide; + ModuleHideDisplay(); + ModuleDecimalDisplay(); + sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; + } +//edit@11-29 输入密码显示,再次输入隐藏 + else if(authString == "07710441"){ + //edit@12-03 + const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9); + if(sysPara->para.flagOfCnt1GroupDisp) + ui->tabWidget_2->removeTab(indexTab); + else + ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); + sysPara->para.flagOfCnt1GroupDisp=!sysPara->para.flagOfCnt1GroupDisp; + + } +//edit@11-29 输入密码显示,再次输入隐藏 + else if(authString == "07710551"){ + + //edit@12-03 + const int indexTab=ui->tabWidget->indexOf(ui->tab_6); + if(sysPara->para.flagOfstepPrint) + ui->tabWidget->removeTab(indexTab); + else + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + sysPara->para.flagOfstepPrint=!sysPara->para.flagOfstepPrint; + } +#ifdef MIMA + //MIMA +#ifndef TEMPMIMA + else + if(authString.left(7) == "3239305" && authString.right(4)=="1407") +#else + else + if( dlgInputAddr->checkSupperInit(authString) ) +#endif + { + QDir dirlib("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/"); + if(!dirlib.exists()) + { + system("mkdir -p /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/"); + system("touch /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); + } + if(!file.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + + } + else { + sysPara->status.WorkTimeOut=0; + dlgInputAddr->SetNewJm(1); + sysPara->para.varLen=0; + sysPara->para.varLen1=0; + file.close(); +// QMessageBox::warning(0,"提示",QString("软件初始化完成.") ); +#ifdef __RFID_CARD + sysPara->devOp->setICReaderModeFlag = true; + MySleep(300); + QMessageBox::warning(0,tr("提示"),tr("软件初始化完成.") ); + sysPara->devOp->setRFIDReaderWorkMode(); + sysPara->devOp->setRFIDReaderKey(dlgInputAddr->jd.addr); + sysPara->devOp->setICReaderModeFlag = false; +#endif + } + } + else if((authString.left(4) == "nnyp") && ( dlgInputAddr->checkSupperJm(authString.mid(4)))) + { +#ifdef __RFID_CARD + memset(&sysPara->RFIDPara,0,sizeof(sysPara->RFIDPara)); + sysPara->saveRFIDPara(); + + sysPara->para.RFIDInkWarn = false; + sysPara->status.flagOfInkMaxDot = false; + sysPara->status.flagOfNeedInkCard = false; + + sysPara->para.RFIDSolventWarn = 0; + sysPara->para.RFIDSolventWarnMixCnt = 0; + sysPara->para.inkWarnDate = 0; + sysPara->para.inkWarnTime = 0; + sysPara->para.solventWarnDate = 0; + sysPara->para.solventWarnTime = 0; + sysPara->status.flagOfSolventMaxNum = false; + sysPara->status.flagOfNeedSolventCard = false; + + QMessageBox::warning(0,tr("提示"),tr("RFID卡清零!") ); +#endif + } + else if( dlgInputAddr->checkSupperJm(authString)) + { + sysPara->status.WorkTimeOut=0; + dlgInputAddr->ReadJm(); + dlgInputAddr->show(); + ui->labMac->setText(QString("Mac:%1").arg(dlgInputAddr->jd.addr)); + } + else if(dlgInputAddr->checWhJm(authString)) // 0xa001 + { + sysPara->status.WorkTimeOut=0; + QMessageBox::warning(this,tr("提示"),tr("喷码机维护设置成功!"),QMessageBox::Ok); + specailMachineSetting(1); + } + else if(dlgInputAddr->checkSysJm(authString)) + { + dlgInputAddr->SaveJm(); + dlgInputAddr->show(); + ui->labMac->setText(QString("Mac:%1").arg(dlgInputAddr->jd.addr)); + sysPara->status.WorkTimeOut=0; + QMessageBox::warning(this,tr( "提示"),tr("系统维护设置成功!") ,QMessageBox::Ok); + } +#endif + else if(authString == "vbip") + { + dlgInputAddr->setNodeIpAndPrivateIp(false); + dlgInputAddr->show(); + } + else { + auth = AUTH_NONE; + QMessageBox::critical(this,tr("错误"),tr("密码:") + authString + tr(" 不存在")); + } + emit authChanged(auth); + if(auth == AUTH_NONE ) {sysPara->status.adjHightVolInitEN=0;sysPara->status.updateSoftEN=0;} + ui->pushButtonAuth->setText((auth == AUTH_NONE)?tr("输入密码"):tr("取消授权")); +} + +void PrintSetting::SpecailSettingsDisplay() +{ + if(flagOfSpecailSettng) + { + ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); + ui->comboBoxIndustry->setVisible(1); + ui->checkBoxNewAmplifyPlate->setVisible(1); +// ui->labelRecommendedPrintSpeed->setVisible(1); + ui->comboBoxRecommendedPrintSpeed->setVisible(1); + ui->checkBoxPrintOnce->setVisible(1); + ui->checkBoxReciclar->setVisible(1); + ui->lockoulsepushButton->setVisible(1); + ui->pushButtonRecommendedSetting->setVisible(1); + ui->checkBox_FastMode->setVisible(1); + } + else + { + if(flagOfEngineeringMode) + ui->tabWidget_2->removeTab(5); + else + ui->tabWidget_2->removeTab(4); + ui->comboBoxIndustry->hide(); + ui->checkBoxNewAmplifyPlate->hide(); +// ui->labelRecommendedPrintSpeed->hide(); + ui->comboBoxRecommendedPrintSpeed->hide(); + ui->checkBoxPrintOnce->hide(); + ui->checkBoxReciclar->hide(); + ui->lockoulsepushButton->hide(); + ui->pushButtonRecommendedSetting->hide(); + ui->checkBox_FastMode->hide(); + } + +} +void PrintSetting::EngineeringModeDisplay() +{ + if(flagOfEngineeringMode) + { + ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); + if(flagOfSpecailSettng) + ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); + ui->tabWidget->addTab(ui->tab_8,tr("计数器3设置")); + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + ui->checkBoxSpeedOver->setVisible(1); + ui->checkBoxSuspendAfterPhaseFault->setVisible(1); + ui->checkmode0211->setVisible(1); + ui->checkVol1of8En->setVisible(1); + ui->checkBoxStopCounterMeterAfterFault->setVisible(1); + ui->checkBoxEleEyeRetrigDis->setVisible(1); + ui->radioButtonFUllColFIxVal->setVisible(1); + ui->checkBoxCharWidthSet->setVisible(1); + ui->radioCNT3->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->label_7->setVisible(1); + ui->label_6->setVisible(1); + ui->label_34->setVisible(1); + ui->label_35->setVisible(1); + ui->spinBoxdecimalpointnum->setVisible(1); + ui->spinBoxHiddenValue->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->spinBoxConditionValue->setVisible(1); + ui->spinBoxMeterEnable->setVisible(1); + } + else + { + if(flagOfSpecailSettng) + { + ui->tabWidget_2->removeTab(5); + ui->tabWidget_2->removeTab(4); + ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); + } + else + ui->tabWidget_2->removeTab(4); + ui->tabWidget->removeTab(3); + ui->tabWidget->removeTab(2); + ui->checkBoxSpeedOver->hide(); + ui->checkBoxSuspendAfterPhaseFault->hide(); + ui->checkmode0211->hide(); + ui->checkVol1of8En->hide(); + ui->checkBoxStopCounterMeterAfterFault->hide(); + ui->checkBoxEleEyeRetrigDis->hide(); + ui->radioButtonFUllColFIxVal->hide(); + ui->checkBoxCharWidthSet->hide(); + ui->radioCNT3->hide(); + ui->radioButtonSpecialCondition->hide(); + ui->label_7->hide(); + ui->label_6->hide(); + ui->label_34->hide(); + ui->label_35->hide(); + ui->spinBoxdecimalpointnum->hide(); + ui->spinBoxHiddenValue->hide(); + ui->radioButtonSpecialCondition->hide(); + ui->spinBoxConditionValue->hide(); + ui->spinBoxMeterEnable->hide(); + } + ModuleDecimalDisplay(); + ModuleHideDisplay(); +} + +void PrintSetting::ModuleDecimalDisplay() +{ + if(flagOfModuleDecimal){ + ui->label_35->setVisible(1); + ui->spinBoxdecimalpointnum->setVisible(1); + flagOfModuleHide = 0; + ui->radioButtonSpecialCondition->setChecked(0); + }else{ + ui->spinBoxdecimalpointnum->setValue(0); + ui->spinBoxdecimalpointnum->setEnabled(0); + ui->radioButtonSpecialCondition->setEnabled(1); + ui->label_35->hide(); + ui->spinBoxdecimalpointnum->hide(); + } +} + +void PrintSetting::ModuleHideDisplay() +{ + if(flagOfModuleHide){ + ui->label_7->setVisible(1); + ui->label_6->setVisible(1); + ui->label_34->setVisible(1); + ui->spinBoxHiddenValue->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->spinBoxConditionValue->setVisible(1); + ui->spinBoxMeterEnable->setVisible(1); + flagOfModuleDecimal = 0; + ui->spinBoxdecimalpointnum->setValue(0); + sysPara->para.rrr_nc = 0; + sysPara->para.printNumPoint = 0; + }else{ + ui->radioButtonSpecialCondition->setChecked(0); + ui->spinBoxdecimalpointnum->setEnabled(1); + ui->label_7->hide(); + ui->label_6->hide(); + ui->label_34->hide(); + ui->spinBoxHiddenValue->hide(); + ui->radioButtonSpecialCondition->hide(); + ui->spinBoxConditionValue->hide(); + ui->spinBoxMeterEnable->hide(); + } +} + +void PrintSetting::on_checkBoxSuspendAfterPhaseFault_clicked() +{ + ui->checkBoxStopCounterMeterAfterFault->setEnabled(ui->checkBoxSuspendAfterPhaseFault->isChecked()); +} + +void PrintSetting::on_checkBoxPowerOffAfterPhaseFault_clicked() +{ + ui->checkBoxStopCounterMeterAfterFault->setEnabled(!ui->checkBoxPowerOffAfterPhaseFault->isChecked() && ui->checkBoxSuspendAfterPhaseFault->isChecked()); + ui->checkBoxSuspendAfterPhaseFault->setEnabled(!ui->checkBoxPowerOffAfterPhaseFault->isChecked()); + +} +#include +#include + +void PrintSetting::on_pushButtonAuth_pressed() +{ + if(auth == AUTH_NONE){ + dialogAuthorization->clearAuth(); + dialogAuthorization->show(); + } + else { + emit authChanged(AUTH_NONE); + auth = AUTH_NONE; + sysPara->status.adjHightVolInitEN=0;sysPara->status.updateSoftEN=0; + ui->pushButtonAuth->setText(tr("输入密码")); + //edit@11-28 + flagOfEngineeringMode = false; + flagOfSpecailSettng = false; + //qDebug()<updateSysParaToUI(); + specailMachineSetting(0); + } +} + +void PrintSetting::updateAuthorization(int auth){ + //ui->dacScaledSpinBox->setEnabled(auth & AUTH_SUPER_USER1); + ui->checkBoxScanInverse->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelVoltageAdjustPos->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxPointVoltageAdjustPos->setEnabled(auth & AUTH_SUPER_USER1); + ui->labelReducedPixelNum->setEnabled(auth & AUTH_SUPER_USER1); + ui->spinBoxReducedPixelNum->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelVoltageAdjustValue->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxVoltageAdjustValue->setEnabled(auth & AUTH_SUPER_USER1); + ui->labelRowSequenceMode->setEnabled(auth & AUTH_SUPER_USER1); + ui->spinBoxRowSequenceMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelReducedPixMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->comboBoxReducedPixMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelLineEndAdjustPointCnt->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxLineEndAdjustPointCnt->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelLineEndAdjustPointMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->comboBoxLineEndAdjustPointMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxLastLineEndPointFixedValue->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelLastLineEndPointFixedValue->setEnabled(auth & AUTH_SUPER_USER1); + ui->pushButtonClearRunTime->setEnabled(auth & AUTH_SUPER_USER1); // 透明按钮 + //ui->volDacEdit->updateAuthorization (auth); +} + +void PrintSetting::on_spinBoxLastLineEndPointFixedValue_valueChanged(int arg1) +{ + if(sysPara){ + sysPara->devOp->setLastLineEndPointFixedValue(arg1); + } +} + +void PrintSetting::on_pushButtonRecommendedSetting_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认使用推荐设置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + /*----------------------------设置参数,然后更新到界面-----------------------------*/ + int industry = ui->comboBoxIndustry->currentIndex(); + int speed = ui->comboBoxRecommendedPrintSpeed->currentIndex(); + ui->comboBoxPrintMode->setCurrentIndex((industry?1:0) + speed + 1); + ui->spinBoxVoltageAdjustValue->setValue(0); + ui->comboBoxReducedPixMode->setCurrentIndex(0); + ui->spinBoxReducedPixelNum->setValue((speed == 0)?55:((speed == 1)?30:0)); + ui->spinBoxRowSequenceMode->setValue(1); + ui->checkBoxScanInverse->setChecked(false); + ui->spinBoxLineEndAdjustPointCnt->setValue(2); + ui->comboBoxLineEndAdjustPointMode->setCurrentIndex((industry?3:1) + speed + 1); + ui->spinBoxLastLineEndPointFixedValue->setValue((speed < 2)?-20:0); + on_pushButtonApply_pressed(); + } +} + +void PrintSetting::showVolDacEdit(int auth){ +/* + if((auth&AUTH_SUPER_USER2)) + { + if(ui->tabWidget_2->indexOf (ui->tab_8)==-1) + ui->tabWidget_2->addTab (ui->tab_8,tr("点距电压微调")); + } + else { + if(ui->tabWidget_2->indexOf (ui->tab_8)!=-1) + ui->tabWidget_2->removeTab (ui->tabWidget_2->indexOf (ui->tab_8));//ui->tabWidget_2->indexOf (ui->tab_8) + } + */ +} + + +void PrintSetting::on_pushOnlyCNT1Clear_pressed(){ + sysPara->devOp->clearProductCnt(1<<2); // 计数器1单独清零 + //sysPara->para.totalProductCnt += sysPara->status.productCnt; + //qDebug()<<"only1"; +} + +void PrintSetting::on_pushOnlyCNT2Clear_pressed(){ + sysPara->devOp->clearProductCnt(1<<3);// 计数器2单独清零 + //qDebug()<<"only2"; +} +void PrintSetting::on_pushButtonRanddomBackUP_pressed(){ + QMessageBox::StandardButton ret; + + QFile f1("/home/plg/Xrand2.txt"); + QString str; + //f1.open(QFile::ReadWrite); + int len = f1.size(); + + if(f1.size()<100 ) + { + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文件为空,不需要导出"), + QMessageBox::Ok ); + //f1.close(); + return; + } + //f1.close(); + + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文本将展出到U盘,请插入U盘"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + + LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); + sysPara->devOp->RandTxtBakup(1); + LogInfo::setRunStatusText("随机码文件导出完成."); + + } + +} + +void PrintSetting::on_spinBoxExpiryDate_valueChanged(int arg1) +{ + QDate curDate= QDate::currentDate().addDays(arg1); + //ui->CBDateFormat1->clear(); + QString DateTime;QString format; + +// str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day()); +// ui->CBDateFormat1->setItemText(0,str);//ui->CBDateFormat1->addItem(str); +// str.sprintf("%04d/%02d/%02d",curDate.year(),curDate.month(),curDate.day()); +// ui->CBDateFormat1->setItemText(1,str);//ui->CBDateFormat1->addItem(str); +// str.sprintf("%04d%02d%02d",curDate.year(),curDate.month(),curDate.day()); +// ui->CBDateFormat1->setItemText(2,str);//ui->CBDateFormat1->addItem(str); + ui->CBDateFormat1->count(); + for(int i=0;i < ui->CBDateFormat1->count();++i) { + format = ui->CBDateFormat1->itemText(i); + DateTime = QDateTime::currentDateTime().toString(format); + ui->CBDateFormat1->setItemText(i,DateTime); + //qDebug()<CBDateFormat1->addItem(str.toLocal8Bit()); + + //ui->CBDateFormat1->setCurrentIndex(sysPara->para.ExpirySplitMode);//p_var->splitMode + //sysPara->para.ExpiryDay = arg1; +} + +void PrintSetting::on_CBDateFormat1_currentIndexChanged(int index) +{ + sysPara->para.ExpirySplitMode = index; +} + +void PrintSetting::updateCnt1GroupsTblWgt() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QPalette Palette; + QLineEdit *pLineEdit; + int rowCnt=ui->tableWidget->rowCount(); + //int rowCnt=sysPara->para.Cnt1ByGroup.cnt1GroupCnt; + + //qDebug()<<"updateCnt1GroupsTblWgt count"<status.cnt1GroupRunningIndex; + for(int i=0;itableWidget->cellWidget(i,j); + Palette = pLineEdit->palette(); + if(sysPara->para.cnt1ByGroupEnalbe && (i == sysPara->status.cnt1GroupRunningIndex)) + { + Palette.setColor(QPalette::Normal,QPalette::Base, Qt::green); + } + else + { + Palette.setColor(QPalette::Normal,QPalette::Base, Qt::lightGray); + } + pLineEdit->setPalette(Palette); + } + } +#endif +} + +void PrintSetting::onUpdateCnt1GroupDisp(bool bChangeToNext) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + if(bChangeToNext)//循环数走完 + { + //改变当前执行的分段的背景颜色 + updateCnt1GroupsTblWgt(); + } +#endif +} + +void PrintSetting::LoadCnt1GroupSettingsToUI() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QLineEdit *pLineEdit; + ui->checkBoxGroupCnt1->setChecked(sysPara->para.cnt1ByGroupEnalbe); + on_checkBoxGroupCnt1_clicked(sysPara->para.cnt1ByGroupEnalbe); + //qDebug()<<"LoadCnt1GroupSettingsToUI:cnt1GroupCnt "<para.Cnt1ByGroup.cnt1GroupCnt; + ui->tableWidget->setRowCount(sysPara->para.Cnt1ByGroup.cnt1GroupCnt); + QRegExp regx("[0-9]+$"); + QValidator *validator = new QRegExpValidator(regx, this); + QRegExp regxLoop("[1-9][0-9]+$"); + QValidator *validatorLoop = new QRegExpValidator(regxLoop, this); + for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) + { + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(i,0,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(i,1,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes)); + pLineEdit->setValidator(validatorLoop); + ui->tableWidget->setCellWidget(i,2,pLineEdit); + } +#if 0 /* 只是打开一个文件,还没有点击开始打印,该文件的变量1的起始和结束设定就起作用了,所以去掉。如果想要分段计米生效只能点击应用了 */ + sysPara->devOp->writeFpgaCalandar(1); + sysPara->devOp->writeCnt1GroupSetting(1); +#endif + updateCnt1GroupsTblWgt(); +#endif +} +void PrintSetting::checkCnt1EndValueOnUI() +{ +#if 0 + int cnt1Start,cnt1End,cnt1Step; + int remain; + int cnt1GroupRow=ui->tableWidget->rowCount(); + bool cnt1GroupEn=ui->checkBoxGroupCnt1->isChecked(); + if(cnt1GroupEn && cnt1GroupRow !=0) + { + + QLineEdit *pLineEdit0 = (QLineEdit *)ui->tableWidget->cellWidget(0,0); + cnt1Start = pLineEdit0->text().toInt(); + QLineEdit *pLineEdit1 = (QLineEdit *)ui->tableWidget->cellWidget(0,1); + cnt1End = pLineEdit1->text().toInt(); + + cnt1Step = ui->spinBoxCnt1StepValue->value(); + remain =(cnt1End-cnt1Start)%cnt1Step; + if(remain != 0) + { + pLineEdit1->setText(QString::number(cnt1End-remain)); + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("计数器1(结束值-开始值)不能被增量整除,结束值将被设为%1").arg(cnt1End-remain), + QMessageBox::Ok); + } + } + else + { + cnt1Start = ui->spinBoxCnt1StartValue->value(); + cnt1End = ui->spinBoxCnt1EndValue->value(); + cnt1Step = ui->spinBoxCnt1StepValue->value(); + remain =(cnt1End-cnt1Start)%cnt1Step; + if(remain !=0 ) + { + ui->spinBoxCnt1EndValue->setValue(cnt1End-remain); + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("计数器1(结束-开始)不能被增量整除,结束值将被设为%1").arg(cnt1End-remain), + QMessageBox::Ok); + } + } +#endif +} + +void PrintSetting::ApplyCnt1GroupSetting() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QLineEdit *pLineEdit; + sysPara->para.cnt1ByGroupEnalbe = ui->checkBoxGroupCnt1->isChecked(); + sysPara->para.Cnt1ByGroup.cnt1GroupCnt=ui->tableWidget->rowCount(); + if(sysPara->para.cnt1ByGroupEnalbe && sysPara->para.Cnt1ByGroup.cnt1GroupCnt==0) + { + sysPara->para.cnt1ByGroupEnalbe=false; + ui->checkBoxGroupCnt1->setChecked(false); + on_checkBoxGroupCnt1_clicked(false); + } + //qDebug()<<"ApplyCnt1GroupSetting:cnt1GroupCnt "<para.Cnt1ByGroup.cnt1GroupCnt; + + for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) + { + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,0); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,1); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,2); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes = pLineEdit->text().toInt(); + //qDebug()<para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue + // <<"end "<para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue + // <<"Loop "<para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes; + } + sysPara->devOp->writeCnt1GroupSetting(1); + sysPara->saveParaToFile(); + //改变当前执行的分段的背景颜色 + updateCnt1GroupsTblWgt(); +#endif +} +void PrintSetting::rowWidgetCreate(int rowIndex) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QLineEdit* pLineEdit; + QRegExp regx("[0-9]+$"); + QValidator *validator = new QRegExpValidator(regx, this); + QRegExp regxLoop("[1-9][0-9]+$"); + QValidator *validatorLoop = new QRegExpValidator(regxLoop, this); + for(int i=0;i<3;i++) + { + if(i==3) + { + //ui->tableWidget->item(rowIndex,i)->setCheckState(Qt::Unchecked); + } + else { + if(i<2) + { + pLineEdit = new QLineEdit(tr("0")); + pLineEdit->setValidator(validator); + } + else if(i==2) + { + pLineEdit = new QLineEdit(tr("1")); + pLineEdit->setValidator(validatorLoop); + } + ui->tableWidget->setCellWidget(rowIndex,i,pLineEdit); + } + } +#endif +} + +void PrintSetting::on_checkBoxGroupCnt1_clicked(bool checked) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + if(checked) + { + ui->spinBoxCnt1StartValue->setEnabled(false); + ui->spinBoxCnt1EndValue->setEnabled(false); +// ui->checkBoxResetCnt1CurrValue->setEnabled(false); + } + else + { + ui->spinBoxCnt1StartValue->setEnabled(true); + ui->spinBoxCnt1EndValue->setEnabled(true); + ui->checkBoxResetCnt1CurrValue->setEnabled(true); + } +#endif +} + +void PrintSetting::on_Cnt3AddRowBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + int rowCnt=ui->tableWidget->rowCount(); + if(rowCnt>=MAX_CNT1_GROUPS_NUM) + { + return; + } + //sysPara->para.cnt1GroupCnt++; + ui->tableWidget->setRowCount(rowCnt+1); + rowWidgetCreate(rowCnt); +#endif +} + +void PrintSetting::on_Cnt3InsertRowBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + int rowIndex=ui->tableWidget->currentRow(); + int rowCnt=ui->tableWidget->rowCount(); + if(rowIndex<0||rowCnt>=MAX_CNT1_GROUPS_NUM) + { + //qDebug()<<"max counter1 groups num is "<tableWidget->insertRow(rowIndex+1); + rowWidgetCreate(rowIndex+1); +#endif +} + +void PrintSetting::on_Cnt3RemoveRowBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + int rowIndex=ui->tableWidget->currentRow(); + if(rowIndex<0) + { + return; + } + QMessageBox::StandardButton ret; + if(rowIndex==sysPara->status.cnt1GroupRunningIndex) + { + QMessageBox::warning(this, tr("错误"), + tr("正在打印第%1组设置,不可删除").arg(rowIndex+1), + QMessageBox::Ok); + return; + } + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除第%1组设置?").arg(rowIndex+1), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + ui->tableWidget->removeRow(rowIndex); + } +#endif +} + +void PrintSetting::on_cnt3RemoveAllRowsBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除全部设置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + int rowCnt=ui->tableWidget->rowCount(); + for(int i=rowCnt-1;i>=0;i--) + { + ui->tableWidget->removeRow(i); + } + } +#endif +} + +void PrintSetting::on_comboBoxAlterPrintEnable_currentIndexChanged(int index) +{ + if(index==0) + { + ui->spinBoxXStartValue->setEnabled(false); + ui->spinBoxXRepeatTimeValue->setEnabled(false); + ui->spinBoxXGapValue->setEnabled(false); + } + else + { + ui->spinBoxXStartValue->setEnabled(true); + ui->spinBoxXRepeatTimeValue->setEnabled(true); + ui->spinBoxXGapValue->setEnabled(true); + } + if(index==3) + { + ui->spinBoxDistanceTail->setEnabled(true); + } + else + { + ui->spinBoxDistanceTail->setEnabled(false); + } +} + +void PrintSetting::on_checkVol1of8En_clicked(bool checked) +{ + if(checked && ui->checkmode0211->checkState()) + { + + ui->checkmode0211->setChecked(false); + } +} + +void PrintSetting::on_checkmode0211_clicked(bool checked) +{ + if(checked && ui->checkVol1of8En->checkState()) + { + ui->checkVol1of8En->setChecked(false); + } + if(checked && ui->radioButtonFUllColFIxVal->checkState()) + { + ui->radioButtonFUllColFIxVal->setChecked(false); + } + //sysPara->para.Vol1of8En = !checked;//打印优化 + if(!checked && ui->radioButtonFUllColFIxVal->checkState() == false) + { + ui->spinBoxStartVoltage->setEnabled(true); + ui->spinBoxEndVoltage->setEnabled(true); + } + else + { + ui->spinBoxStartVoltage->setEnabled(false); + ui->spinBoxEndVoltage->setEnabled(false); + } +} + + + +void PrintSetting::on_volButton_clicked() +{ + if(!modify_vol) + { + dialogModPasswd->clearAuth(); + dialogModPasswd->show(); + }else + { + modify_vol = false; + ui->volButton->setText("修改授权"); + ui->spinBoxHighVoltageValue->setEnabled(false); + ui->spinBoxStartVoltage->setEnabled(false); + } +} + + +void PrintSetting::on_spinBoxColDelay_valueChanged(int arg1) +{ + if(!sysPara->para.charWidthSetEnable) + { + if(arg1 == 0) + { + + QMessageBox::warning(this, tr("警告"), + tr("字体宽度不能为0"), + QMessageBox::Ok | QMessageBox::Cancel); + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + } + } + else + { + sysPara->para.printColDelay = arg1; + } +} + +void PrintSetting::on_radioButtonFUllColFIxVal_clicked(bool checked) +{ +#if 0 + if(checked) //使用调整电压时,打印模式默认快速,且没有字形优化 + { + ui->checkVol1of8En->setChecked(false); + sysPara->para.Vol1of8En = !checked;//打印优化 + ui->checkVol1of8En->setEnabled(false); + + ui->comboBoxPrintMode->setCurrentIndex(0); + sysPara->para.currPrintMode = ui->comboBoxPrintMode->currentIndex(); + ui->comboBoxPrintMode->setEnabled(!checked); + + }else + { + ui->checkVol1of8En->setEnabled(true); + ui->comboBoxPrintMode->setEnabled(true); + } +#endif + if(!checked && ui->checkmode0211->checkState() == false) + { + ui->spinBoxStartVoltage->setEnabled(true); + ui->spinBoxEndVoltage->setEnabled(true); + } + else + { + ui->spinBoxStartVoltage->setEnabled(false); + ui->spinBoxEndVoltage->setEnabled(false); + } + if(checked && ui->checkmode0211->checkState()) + { + + ui->checkmode0211->setChecked(false); + } +} + + + +void PrintSetting::on_metreCountButton_clicked() +{ +// sysPara->status.calandar_and_dat.cnt1CurrValue = 123; + dialogShowCounter->show(); + dialogShowCounter->init_arg(); + refresh_timer->start(500); +// qDebug()<<"asdasd"; +// sysPara->status.calandar_and_dat.cnt2CurrValue; +} +void PrintSetting::ondialogShowCounterAccepted(void) +{ + refresh_timer->stop(); +// qDebug()<<"refresh_timer stop"; +} + +void PrintSetting::updateUIForSpecialCondition() +{ + if(sysPara->para.EditMode == TXTFILE) + { + ui->radioButtonSpecialCondition->setEnabled(true); + } + +} + +void PrintSetting::on_radioButtonSpecialCondition_clicked(bool checked) +{ + if(sysPara->para.EditMode==TXTFILE) + { + ui->spinBoxHiddenValue->setEnabled(checked); + ui->spinBoxMeterEnable->setEnabled(checked); + ui->spinBoxConditionValue->setEnabled(checked); + ui->spinBoxdecimalpointnum->setValue(0); + ui->spinBoxdecimalpointnum->setEnabled(!checked); + } +} + +void PrintSetting::refreshtimerHandler(void) +{ + int bcdTodec = 0; + int resetmetre = 0; +// int cn1StartValue = ui->spinBoxCnt1StartValue->value(); +// int cn1EndValue = ui->spinBoxCnt1EndValue->value(); + + resetmetre = dialogShowCounter->getResetMetreState(area_end); + + if(last_area_end != area_end){ + //qDebug() << "set spinBoxCnt1StartValue"; + last_area_end = area_end; + ui->spinBoxCnt1StartValue->setValue(0); + ui->spinBoxCnt1EndValue->setValue(area_end); + sysPara->para.cnt1EndValue = area_end; + } + + + if(true == resetmetre){ + if(sysPara){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否立即重新计米?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + } + + } + resetmetre = false; + } + + //bcdTodec = sysPara->status.calandar_and_dat.cnt1CurrValue - (sysPara->status.calandar_and_dat.cnt1CurrValue>>4)*6; + //dialogShowCounter->refreshdate(sysPara->status.productCnt,cn1StartValue,cn1EndValue,bcdTodec); + int currValue1 = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + int currCnt1GroupIndex = sysPara->status.cnt1GroupRunningIndex; + int currCnt1GroupLoop = sysPara->status.cnt1GroupCurrentLoop; + int cnt1StartValue = sysPara->para.Cnt1ByGroup.cnt1GroupSettings[currCnt1GroupIndex].StartValue; + int cnt1EndValue = sysPara->para.Cnt1ByGroup.cnt1GroupSettings[currCnt1GroupIndex].EndValue; + + dialogShowCounter->refreshdate(currValue1, cnt1StartValue, cnt1EndValue, currCnt1GroupIndex, currCnt1GroupLoop); +} + +void PrintSetting::on_lockoulsepushButton_clicked() +{ + if(lockpulse){ + ui->lockoulsepushButton->setText(tr("锁定脉冲计数")); + lockpulse = false; + }else{ + ui->lockoulsepushButton->setText(tr("解锁脉冲计数")); + lockpulse = true; + } + +} + +void PrintSetting::on_spinBoxCnt1EndValue_valueChanged(int arg1) +{ + if(lockpulse){ + sysPara->para.productCntPerOutputPulse = arg1; + // qDebug()<< "emit change_OutputPulse()"; + emit change_OutputPulse(); + } + +} + +void PrintSetting::moveRow( int nFrom, int nTo) +{ + int StartValue,EndValue,LoopTimes; + + int To_StartValue,To_EndValue,To_LoopTimes; + QLineEdit *pLineEdit; + + + if( nFrom == nTo ) { + return; + } + if( nFrom < 0 || nTo < 0 ) { + return; + } + int nRowCount = ui->tableWidget->rowCount(); + if( nFrom >= nRowCount || nTo >= nRowCount ) return; + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,0); + StartValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,1); + EndValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,2); + LoopTimes = pLineEdit->text().toInt(); + +// qDebug()<<"StartValue="<setText(QString::number(StartValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nTo,0,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(EndValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nTo,1,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(LoopTimes)); + pLineEdit->setValidator(validatorLoop); + ui->tableWidget->setCellWidget(nTo,2,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(To_StartValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nFrom,0,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(To_EndValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nFrom,1,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(To_LoopTimes)); + pLineEdit->setValidator(validatorLoop); + ui->tableWidget->setCellWidget(nFrom,2,pLineEdit); + + ui->tableWidget->selectRow(nTo); +// ui->tableWidget->clearFocus(); +// ui->tabWidget->focusPolicy(); +} +//调用 +void PrintSetting::on_moveUp_clicked() +{ + moveRow(ui->tableWidget->currentRow(),ui->tableWidget->currentRow() - 1); +} + +void PrintSetting::on_moveDown_clicked() +{ + moveRow(ui->tableWidget->currentRow(),ui->tableWidget->currentRow() + 1); +} + + +void PrintSetting::on_pushButtonUpRow_clicked() +{ + on_moveUp_clicked(); +} + +void PrintSetting::on_pushButtonDownRow_clicked() +{ + on_moveDown_clicked(); +} + +void PrintSetting::on_pushOnlyCNT3Clear_pressed() +{ + sysPara->devOp->clearProductCnt(1<<4);// 计数器3单独清零 +} + +void PrintSetting::setCNT1BackColor(bool flag) +{ + if(flag) + { + ui->radioCNT1->setCheckable(true); + ui->radioCNT1->setChecked(true); + } + else + { + ui->radioCNT1->setChecked(false); + ui->radioCNT1->setCheckable(false); + } +// if(flag) +// { +// //ui->tabWidget->widget(0)->setStyleSheet("QTabBar::tab{background-color:rgb(255, 0, 0);}"); //设置选中背景色 +// ui->radioCNT1->setChecked(flag); +// } +// else +// { +// //ui->tabWidget->widget(0)->setStyleSheet("QTabBar::tab{background-color:rgb(239, 239, 239);}"); //设置选中背景色 +// ui->radioCNT1->setChecked(flag); +// } +} + +void PrintSetting::setCNT2BackColor(bool flag) +{ + if(flag) + { + ui->radioCNT2->setCheckable(true); + ui->radioCNT2->setChecked(true); + } + else + { + ui->radioCNT2->setChecked(false); + ui->radioCNT2->setCheckable(false); + } +} + +void PrintSetting::setCNT3BackColor(bool flag) +{ + if(flag) + { + ui->radioCNT3->setCheckable(true); + ui->radioCNT3->setChecked(true); + } + else + { + ui->radioCNT3->setChecked(false); + ui->radioCNT3->setCheckable(false); + } +} + +void PrintSetting::getFpgaVersionSetDisable(){ + qDebug()<<"getFpgaVersionSetDisable"; + sysPara->devOp->readbuilDat(); + sysPara->devOp->readFpgaVersionNum(); + int FPGAVersion =sysPara->status.build_dat.builTime; + unsigned int type = sysPara->status.fpgaVersionNum >> 12; + QString FPGAChip = "Null"; + if(sysPara->status.FPGAChipType == 1) + FPGAChip = "E15"; + else if(sysPara->status.FPGAChipType == 2) + FPGAChip = "E22"; + LogInfo::setRunStatusText(tr("builTime:%1").arg(FPGAVersion)); + LogInfo::setRunStatusText(tr("fpgaVersionNum: %1").arg(sysPara->status.fpgaVersionNum)); + LogInfo::setRunStatusText(tr("FPGAType: %1").arg(type)); + LogInfo::setRunStatusText(tr("FPGAChip: %1").arg(FPGAChip)); + + if(66 == FPGAVersion) + sysPara->status.FPGAVersionType = 1; + else if(67 == FPGAVersion && type != 1) + sysPara->status.FPGAVersionType = 2; + else if(72 == FPGAVersion && type != 5) + sysPara->status.FPGAVersionType = 3; + else if(73 ==FPGAVersion && type != 4) + sysPara->status.FPGAVersionType = 4; + LogInfo::setRunStatusText(tr("FPGAVersion: %1").arg(FPGAVersion)); + LogInfo::setRunStatusText(tr("FPGAType: %1").arg(sysPara->status.FPGAVersionType)); + if (FPGAVersion == 67){ + sysPara->status.flagOfNo67FPGA = 1; + ui->checkBox_FastMode->setEnabled(true); + } + + if(FPGAVersion== 67 && sysPara->status.FPGAVersionType == 0) + { + if(!sysPara->para.flagOfFastMode) + uiSettingForNo67(); + else + uiSettingForNo66(); + } + else if(sysPara->status.FPGAVersionType == 1) + uiSettingForNo66(); + else if(sysPara->status.FPGAVersionType == 2) + uiSettingForNo67(); + else if(FPGAVersion == 72) + uiSettingForNo72(); + else if(FPGAVersion == 73) + uiSettingForNo73(); + + qDebug()<<"checkmode0211:"<checkmode0211->isChecked(); + qDebug()<<"charWidthSetEnable:"<checkBoxCharWidthSet->isChecked(); + qDebug()<<"Vol1of8En:"<checkVol1of8En->isChecked(); + qDebug()<<"FullColFixVal:"<radioButtonFUllColFIxVal->isChecked(); + + sysPara->para.mode0211 = ui->checkmode0211->isChecked();//添加0211模式 + sysPara->para.charWidthSetEnable = ui->checkBoxCharWidthSet->isChecked(); + sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked();//打印优化 + sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked();//2020/3/2 + +} + + void PrintSetting::uiSettingForNo66(){ + ui->checkBox_FastMode->setChecked(true); + if(sysPara->para.currPrintMode>1) + ui->comboBoxPrintMode->setCurrentIndex(0); + ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); + ui->checkBoxCharWidthSet->setChecked(true); + ui->checkVol1of8En->setChecked(true); + ui->radioButtonFUllColFIxVal->setChecked(true); + ui->checkmode0211->setChecked(false); + ui->comboBoxPrintMode->setItemText(0,tr("超高速")); + ui->comboBoxPrintMode->setItemText(1,tr("高速")); + if(ui->comboBoxPrintMode->count()>2) + ui->comboBoxPrintMode->removeItem(2); + } + + void PrintSetting::uiSettingForNo67(){ + ui->checkBox_FastMode->setEnabled(true); + if(!sysPara->para.flagOfFastMode){ + ui->checkBox_FastMode->setChecked(false); + if(sysPara->para.currPrintMode>2) + ui->comboBoxPrintMode->setCurrentIndex(0); + ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); + ui->checkBoxCharWidthSet->setChecked(true); + ui->checkVol1of8En->setChecked(true); + ui->radioButtonFUllColFIxVal->setChecked(true); + ui->checkmode0211->setChecked(false); + if(ui->comboBoxPrintMode->count()<=2){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + } + void PrintSetting::uiSettingForNo72(){ + sysPara->status.flagOfNo67FPGA = 0; + sysPara->para.flagOfFastMode=false; + ui->checkBox_FastMode->setChecked(false); + ui->checkBox_FastMode->setEnabled(false); + ui->comboBoxPrintMode->setCurrentIndex(1); + ui->comboBoxPrintMode->setEnabled(true); + ui->checkBoxCharWidthSet->setChecked(false); + ui->checkVol1of8En->setChecked(false); + ui->radioButtonFUllColFIxVal->setChecked(false); + // 20260821 :选了调整电压,喷码机重启以后就会默认勾选成省点,要勾选调整电压打印效果才好 + //hlp: 不再设置默认勾选省点 +// ui->checkmode0211->setChecked(true); + if(ui->comboBoxPrintMode->count()<=2){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + + void PrintSetting::uiSettingForNo73() + { + sysPara->status.flagOfNo67FPGA = 0; + sysPara->para.flagOfFastMode=false; + ui->checkBox_FastMode->setChecked(false); + ui->checkBox_FastMode->setEnabled(false); + ui->checkBoxCharWidthSet->setChecked(false); + ui->checkVol1of8En->setChecked(false); + ui->radioButtonFUllColFIxVal->setChecked(false); + ui->checkmode0211->setChecked(false); + if(ui->comboBoxPrintMode->count()<=2){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + +//67 触发-同步器触发-字符宽度 + void PrintSetting::setDisableFontWidth(bool flag){ + if(sysPara->para.charWidthSetEnable && flag){ + ui->spinBoxColDelay->setValue(0); + ui->spinBoxColDelay->setEnabled(true); + }else + { + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + ui->spinBoxColDelay->setEnabled(true); + } + } + +//72 打印设置->常用设置->字体宽度 +void PrintSetting::autoUpdateFontWidth(const unsigned int totalCol) +{ + if(totalCol == 0) return; + if(!sysPara->status.selfCheckDone && !TEST_MODE) return;//自检完成之前不检查 + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME) return;//延迟触发模式不检查 + if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && !sysPara->para.eleEyeTriggerSynPrintEn)) return;//电眼触发非同步打印模式不检查 + + + +#define MIN_CHAR_WIDTH 0.1 //0.1mm/列 +#define MAX_CHAR_WIDTH 4.0 //4.0mm/列 + float printInterval; + int currPrintCol; + float Cur_Col_Width; + float MAX_COL_DELAY; + int MIN_COL_DELAY; + float Cur_Max_ColDelay; + int Cur_Col_Delay; + if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)) + { + printInterval = (int )sysPara->para.synTriggerPrintLenMm; + } + else if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + { + printInterval = sysPara->para.elecEyeTriggerInterval; + } + currPrintCol = totalCol + BLANK_COL_NUM; + qDebug()<<"printInterval: "<para.printColDelay; +#define MIN_COL_WIDTH 0.11 +#define MAX_COL_WIDTH 0.81 + Cur_Col_Width = printInterval/currPrintCol; + Cur_Col_Delay = sysPara->para.printColDelay; + if(sysPara->status.build_dat.builTime == 67){ + + float Col_Width = (MIN_CHAR_WIDTH +Cur_Col_Delay*(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100)*currPrintCol; + MIN_COL_DELAY = 1; + MAX_COL_DELAY = (MAX_COL_WIDTH - MIN_COL_WIDTH)/0.039;//(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100=0.039 + Cur_Max_ColDelay = (Cur_Col_Width - MIN_CHAR_WIDTH)/0.039; + } + else{ + MIN_COL_DELAY = (int)(sysPara->para.synPulseNumPerMm*MIN_COL_WIDTH); + MAX_COL_DELAY = sysPara->para.synPulseNumPerMm*MAX_COL_WIDTH; + Cur_Max_ColDelay = sysPara->para.synPulseNumPerMm*Cur_Col_Width; + } + + if(Cur_Max_ColDelay < 1){ + QMessageBox::information(this,tr("提示"),tr("喷印间隔太小,无法正常打印!!!")); + return; + } + if(Cur_Col_Delay == 0){ + QMessageBox::information(this,tr("提示"),tr("字体宽度为0!!!")); + return; + } + + if(Cur_Max_ColDelay > MAX_COL_DELAY) + Cur_Max_ColDelay = MAX_COL_DELAY; + + if(sysPara->status.build_dat.builTime == 67 && Cur_Col_Delay > (int)Cur_Max_ColDelay + 1 + ||sysPara->status.build_dat.builTime == 72 && Cur_Col_Delay > (int)Cur_Max_ColDelay) + { + int oldColDelay = sysPara->para.printColDelay; + if(sysPara->status.build_dat.builTime == 67) + sysPara->para.printColDelay = (int)Cur_Max_ColDelay + 1; + else + sysPara->para.printColDelay = (int)Cur_Max_ColDelay; + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + if(sysPara)sysPara->saveParaToFile (); + QMessageBox::information(this,tr("提示"),tr("原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)!") + .arg(oldColDelay).arg(Cur_Max_ColDelay)); + } + if(sysPara->para.printColDelay < MIN_COL_DELAY){ + QMessageBox::information(this,tr("提示"),tr("字体宽度太小,打印字体将会被严重压缩!\n建议最小字体宽度为:%1\n建议最小喷印间隔为:%2") + .arg(MIN_COL_DELAY).arg(currPrintCol*MIN_COL_WIDTH)); + } +} + +void PrintSetting::on_checkBox_FastMode_clicked() +{ + bool flag = ui->checkBox_FastMode->isChecked(); + if(flag){ + ui->spinBoxReducedPixelNum->setValue(60); + }else{ + ui->spinBoxReducedPixelNum->setValue(0); + } +} +//edit@11-30 小数点和隐藏值模块都显示,仅做展示。 +void PrintSetting::ModuleDecimalHideDisplay(const bool bEnabled) +{ + //工程模式下,隐藏值界面控件-全部显示 + ui->label_7->setVisible(1); + ui->label_6->setVisible(1); + ui->label_34->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->spinBoxHiddenValue->setVisible(1); + ui->spinBoxMeterEnable->setVisible(1); + ui->spinBoxConditionValue->setVisible(1); + ui->spinBoxHiddenValue->setEnabled(bEnabled); + ui->spinBoxMeterEnable->setEnabled(bEnabled); + ui->spinBoxConditionValue->setEnabled(bEnabled); + ui->radioButtonSpecialCondition->setChecked(bEnabled); + + //工程模式下,小数点界面控件--全部显示 + ui->label_35->setVisible(1); + ui->spinBoxdecimalpointnum->setVisible(1); + ui->spinBoxdecimalpointnum->setEnabled(!bEnabled); + +} + +void PrintSetting::specailMachineSetting(bool enable){ + ui->checkBox_ReclaimPumpEnable->setEnabled(enable); + ui->spinBox_gearPumpSpeedAlarm->setEnabled(enable); + ui->checkBox_WeiDaLiAutoPrint->setEnabled(enable); +} + +void PrintSetting::on_checkBox_5Row5Dot_clicked() +{ + sysPara->para.flagOf5Row5Dot = !sysPara->para.flagOf5Row5Dot; +} diff --git a/PrintSetting.h b/PrintSetting.h new file mode 100644 index 0000000..959d8bd --- /dev/null +++ b/PrintSetting.h @@ -0,0 +1,194 @@ +#ifndef PRINTSETTING_H +#define PRINTSETTING_H + +#include +#include "dialogmodifypasswd.h" +#include "DialogAuthorization.h" +#include "ParaSettingUI.h" +#include "dlginputaddr.h" + +#include "dlgvarlength.h" +#include "dialogshowcounter.h" + +#include "TextEditOption.h" // 需要使用文件文本编辑功能 +#include +#include +#include +//#include "mainwindow.h" + +namespace Ui { +class PrintSetting; +} + +class PicScene; +class PicTextItem; + +class PrintSetting : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit PrintSetting(QWidget *parent = 0); + ~PrintSetting(); + + void updateSysParaToUI(); //重载 + void applyUIPara(); //重载 + void updateCnt1GroupsTblWgt(); + + void checkCnt1EndValueOnUI(); + void ApplyCnt1GroupSetting(); + void updateSysStatusToUI(); + void updateAuthorization(int auth); + void PreviewEdit(); // + void bindSysPara(SysPara *sysPara); + void LoadCnt1GroupSettingsToUI(); + void rowWidgetCreate(int rowIndex); + + void moveRow(int currentRow, int toRow); + void on_moveUp_clicked(); + void on_moveDown_clicked(); + + void PrintSettingLog(); + void getFpgaVersionSetDisable(); + + DlgInputAddr *dlgInputAddr; + bool flagOfSpecailSettng ; + bool flagOfEngineeringMode; + void SpecailSettingsDisplay(); + void EngineeringModeDisplay(); + bool flagOfModuleDecimal; + bool flagOfModuleHide; + void ModuleDecimalDisplay(); + void ModuleHideDisplay(); + void ModuleDecimalHideDisplay(const bool bEnabled); + void uiSettingForNo66(); + void uiSettingForNo67(); + void uiSettingForNo72(); + void uiSettingForNo73(); + void specailMachineSetting(bool); +public slots: + + void updateUIForSpecialCondition(); + +signals: + void HiddenFunction(bool); + +private slots: + void on_radioButtonSpecialCondition_clicked(bool checked); + void refreshtimerHandler(void); + + void ondialogShowCounterAccepted(void); + + void on_checkVarLenChg(); + void on_VarLenSet(); + + void on_pushButtonRanddomBackUP_pressed(); + void PrintupdateSysParaToUI(); + void showVolDacEdit(int auth); + void on_pushButtonApply_pressed(); + void on_checkBoxResetCnt1CurrValue_released(); + void on_checkBoxResetCnt2CurrValue_released(); + void on_pushButtonClearRunTime_pressed(); + void on_pushOnlyCNT1Clear_pressed(); + void on_pushOnlyCNT2Clear_pressed(); + + void ondialogAuthorizationAccepted(); + void ondialogAuthVarSetAccepted(); + void on_dialogModPasswdAccepted(); + + void on_checkBoxSuspendAfterPhaseFault_clicked(); + void on_checkBoxPowerOffAfterPhaseFault_clicked(); + + void on_pushButtonAuth_pressed(); +// void on_pushButtonXFileSelect_pressed(); + + void on_spinBoxLastLineEndPointFixedValue_valueChanged(int arg1); + + void on_pushButtonRecommendedSetting_clicked(); + void onUpdateCnt1GroupDisp(bool bChangeToNext); + + void on_Cnt3AddRowBtn_pressed(); + + void on_Cnt3RemoveRowBtn_pressed(); + + void on_Cnt3InsertRowBtn_pressed(); + + void on_checkBoxGroupCnt1_clicked(bool checked); + + void on_cnt3RemoveAllRowsBtn_pressed(); + + void on_comboBoxAlterPrintEnable_currentIndexChanged(int index); + + void on_checkVol1of8En_clicked(bool checked); + + void on_checkmode0211_clicked(bool checked); + void on_spinBoxExpiryDate_valueChanged(int arg1); + + void on_CBDateFormat1_currentIndexChanged(int index); + void showMachInfo(QString); + void showRemoteControl(QString SuperNodeIP,QString EdgeIP); + + void on_volButton_clicked(); + + void on_spinBoxColDelay_valueChanged(int arg1); + + void on_radioButtonFUllColFIxVal_clicked(bool checked); + + void on_metreCountButton_clicked(); + + void on_lockoulsepushButton_clicked(); + + void on_spinBoxCnt1EndValue_valueChanged(int arg1); + + void on_pushButtonUpRow_clicked(); + + void on_pushButtonDownRow_clicked(); + + + void on_checkBoxResetCnt3CurrValue_released(); + void on_checkBoxSaveCNTStateValue_released(); + void on_checkBoxCircleProductCnt_released(); + + void on_pushOnlyCNT3Clear_pressed(); + void setCNT1BackColor(bool flag); + void setCNT2BackColor(bool flag); + void setCNT3BackColor(bool flag); + // void setDisableFontWidth(bool); + + void setDisableFontWidth(bool); +private slots: + void autoUpdateFontWidth(const unsigned int); + + void on_checkBox_FastMode_clicked(); + + void on_checkBox_5Row5Dot_clicked(); + +Q_SIGNALS: + void authChanged(int auth); + void printPriveiw(); + void change_OutputPulse(); + void SwitchTimerShowItem(bool flag); +private: + Ui::PrintSetting *ui; + //MainWindow *mainWindow; + DialogAuthorization *dialogAuthorization; + DialogAuthorization *dialogAuthVarSet; + DlgVarLength *dlgvarLen; + int auth; + + Dialogmodifypasswd *dialogModPasswd; + DialogShowCounter *dialogShowCounter; + int modify_vol; + int keepVolVal; + QTimer *refresh_timer; + + int lockpulse; + int area_end; + int last_area_end; + PicScene* pGetPicScene; + + //当前打印的长度 + unsigned int current_print_col_num; +}; + +#endif // PRINTSETTING_H diff --git a/PrintTextDisplay.cpp b/PrintTextDisplay.cpp new file mode 100644 index 0000000..460dfb8 --- /dev/null +++ b/PrintTextDisplay.cpp @@ -0,0 +1,398 @@ +/* + * PrintTextDisplay.cpp + * + * Created on: Jul 9, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#include "PrintTextDisplay.h" +#include +#include +#include +#include +#include +#include +#include +#include "Public.h" +#include +#include +#include + +PrintTextDisplay::PrintTextDisplay(QWidget *parent): + QWidget(parent){ + setPalette(QPalette(Qt::white)); + setAutoFillBackground(true); + scaleRatio = 2; + origWidth = 0; + origHeight = 0; + setAttribute(Qt::WA_OpaquePaintEvent,true); //背景不自动重画 + updateDigitalOnly = false; +} + +PrintTextDisplay::~PrintTextDisplay(){ + +} + +void PrintTextDisplay::updateSysParaToUI(){ + +} + +void PrintTextDisplay::updateSysStatusToUI(){ + updateDigitalOnly = true; + update(); //表示只更新变量而已,该区域一定要包含实际的打印区域,否则显示不出来 +} + +void PrintTextDisplay::enlargeDisplay(){ + if(scaleRatio < 10){ + scaleRatio ++; + resize(scaleRatio*origWidth,scaleRatio*origHeight); + update(); + + } +} +void PrintTextDisplay::scroll_update() +{ + update(); +} + +void PrintTextDisplay::reduceDisplay(){ + if(scaleRatio > 1){ + scaleRatio --; + resize(scaleRatio*origWidth,scaleRatio*origHeight); + update(); + } +} + +//#define H02 2 +//#define H04 4 + +void PrintTextDisplay::setDisplaySize(int w,int h){ + origHeight = h; + + origWidth = w; + + resize(scaleRatio*origWidth,scaleRatio*(origHeight)); +} +void PrintTextDisplay::setScaleRatio(int ratio) +{ + if(ratio > 1) + { + if(ratio > 10) ratio =10; + scaleRatio =ratio; + resize(scaleRatio*origWidth,scaleRatio*origHeight); + update(); + } +} +void PrintTextDisplay::paintEvent(QPaintEvent *event){ +// qDebug() <<"x:" << event->rect().x() << "y:" << event->rect().y() << "width:" << event->rect().width() << "height" << event->rect().height(); + + QRect updateRect = event->rect(); + //2019/11/11 prevent pic shadow + updateRect.setY(0); + + static int r_altermode=-1; + + if(sysPara) + { + QPainter p(this); + p.scale(scaleRatio,scaleRatio); + p.setPen(Qt::NoPen); + + //qDebug()<<"updateRect"<para.AlterMode!=r_altermode)updateDigitalOnly=false; + //r_altermode=sysPara->para.AlterMode; + if(sysPara->para.AlterMode!=r_altermode) updateDigitalOnly=false; + r_altermode=sysPara->para.AlterMode; + //if(!updateDigitalOnly) + { //尽量减少不必要的刷屏动作 + + int x = updateRect.x()/scaleRatio; + int end_x = (( sysPara->status.addSpace?2:1)*(updateRect.x() + updateRect.width())/scaleRatio) + 1; + int w= end_x - x; + int y = updateRect.y()/scaleRatio; + int end_y = (updateRect.y() + updateRect.height())/scaleRatio + 1; + int h = end_y - y;; + p.setBrush(QColor(Qt::white)); + int y0=0; + //if(sysPara->para.AlterMode<2) y0=y; + if(sysPara->para.AlterMode<2) y0=0; + + //else if(sysPara->para.AlterMode==2) y0=0; + else if(sysPara->para.AlterMode==2) y0=y; + + if(sysPara->status.addSpace) + p.drawRect(x>>1,y0,w/2,h); + else + p.drawRect(x,y0,w,h); + + p.setBrush(QColor(Qt::green)); + + if(sysPara->para.AlterMode<2) + { + + } + else if(sysPara->para.AlterMode==2) + { + y = end_y; + end_y = end_y+h; + } + //qDebug()<<"updateRect"<status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + for(int i = 0; i < h && (i +y)< MAX_PRINT_ROW_NUM; i ++){ + for(int j = x; j < end_x && j < (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); j++){ + if(dat[j*MAX_PRINT_ROW_BYTE_NUM + (i+y)/8] & (1<<((i+y)%8))){ + if(sysPara->status.addSpace){ + p.drawRect(j/2,i+y0,1,1);j++; + } + else + p.drawRect(j,i+y0,1,1); + } + } + } + + } + + //sysPara->para.qrOption.DisplayUpdate=1; + // 二维码显示 + //if(sysPara->para.qrOption.DisplayUpdate==1) + if(sysPara->para.qrOption.DisplayUpdate==1 && sysPara->print.QRvars[0].type != BAR) //lich fix + { + sysPara->para.qrOption.DisplayUpdate=0; + int varNum=0; + for( varNum=0;varNumstatus.QRvariNum;varNum++){ + int x = sysPara->print.QRvars[varNum].startColPos; + int w = sysPara->print.QRvars[varNum].width; + int end_x = x+w; + int h = sysPara->print.QRvars[varNum].height; + int end_y=sysPara->print.QRvars[varNum].endRowPos; + int y = sysPara->print.QRvars[varNum].startRowPos; + p.setBrush(QColor(Qt::white)); + + //p.drawRect(x,y,w,h); + if(sysPara->status.addSpace) + p.drawRect(x/2,y,w,h); + else + p.drawRect(x,y,w,h); + + p.setBrush(QColor(Qt::black)); + // p.setBrush(QColor(Qt::green)); + //qDebug()<<"PrintfTextDiaplay:"<status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + for(int i = y; i < end_y && (i +y)< MAX_PRINT_ROW_NUM; i ++){ + for(int j = x; j < end_x && j < (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); j++){ + if(dat[j*MAX_PRINT_ROW_BYTE_NUM + (i)/8] & (1<<((i)%8))){ + //p.drawRect(j,i,1,1); + if(sysPara->status.addSpace){ + p.drawRect(j>>1,i,1,1);//j++; + } + else + p.drawRect(j,i,1,1); + } + } + } + } + } +#if 0 + for(int i = 0; i < sysPara->status.ExpiryVarNum; i++){ + int x,w,end_x,h,end_y,y; + if(i == 0) + { + if(sysPara->print.CurDateVar.type = CURDATE) + { + x = sysPara->print.CurDateVar.startColPos; + w = sysPara->print.CurDateVar.width; + end_x = x+w; + h = sysPara->print.CurDateVar.height; + end_y = sysPara->print.CurDateVar.endRowPos; + y = sysPara->print.CurDateVar.startRowPos; + } + } + else + { + + } + } +#endif + // 变量显示 + for(int i = 0; i < sysPara->status.variNum; i++){ + vars_t *p_var = &sysPara->status.vars[i]; + int val = p_var->currVal; + //val = 6569; + int x = p_var->startColPos; + int y = p_var->startRowPos; + int rowDiff = p_var->endRowPos - p_var->startRowPos; + int digitalNum = p_var->digitalNum; + + if(sysPara->para.AlterMode==2){ + if(ystatus.currAlterPrintRow) continue; + y = p_var->startRowPos-sysPara->status.currAlterPrintRow-1; + + } + + else if(sysPara->para.AlterMode==1){ + + if(y>=sysPara->status.currAlterPrintRow) continue; + + } + int base = 1; int j=0,jmin=0; + QString str=""; + int Num=0; + + if(digitalNum<=8 || Public::getType(p_var->type) < 9 || p_var->type == 37 || p_var->type == 38 \ + || Public::getType(p_var->type) == 13 || Public::getType(p_var->type) == 14 || Public::getType(p_var->type) == 15) // 0-8 变量 显示刷新 + { + for(int j = 0; j < digitalNum;j ++){ + if(val>base-1)jmin=digitalNum-j-1; + base *= 10; + } + str= QString("%1").arg(val%base,digitalNum,10,QLatin1Char('0')); + + //20240626: 以下3个判断条件为处理计米显示小数点位数,最多可显示3位 + if(!sysPara->para.rrr_nc && sysPara->para.printNumPoint && p_var->type == 7) + { + val /= 1000; + str= QString("%1").arg(val%base,digitalNum,10,QLatin1Char('0')); + str.insert(str.length()-1,"."); + str.remove(0,1); + + } + else if(sysPara->para.rrr_nc && !sysPara->para.printNumPoint && p_var->type == 7) + { + val /= 100; + str= QString("%1").arg(val%base,digitalNum,10,QLatin1Char('0')); + str.insert(str.length()-2,"."); + str.remove(0,1); + } + else if(sysPara->para.rrr_nc && sysPara->para.printNumPoint && p_var->type == 7) + { + val /= 10; + str= QString("%1").arg(val%base,digitalNum,10,QLatin1Char('0')); + str.insert(str.length()-3,"."); + str.remove(0,1); + } + else if(sysPara->status.specialVarPrint.MeterEnable && p_var->type == 15) + { + str.remove(0,1); + str += "m"; + } + } + + else { // 大于 9 是什么变量呢? 随机数 显示刷新 + base = 1; j=0,jmin=0; + for(int j = 0; j < 8;j ++){ + if(val>base-1)jmin=8-j-1; + base *= 10; + } + str= QString("%1").arg(val%base,8,10,QLatin1Char('0')); + val = QString::number( sysPara->status.calandar_and_dat.RandomValue2 ,16).toInt(); + Num = digitalNum-8; + base = 1; + jmin=0; + for(int j = 0; j < Num;j ++){ + if(val>base-1)jmin=Num-j-1; + base *= 10; + } + str= QString("%1").arg(val%base,Num,10,QLatin1Char('0'))+str; + } + + + if(!sysPara->para.Cnt1NatureValue) jmin=0; + + p.setBrush(QColor(Qt::white)); + if(sysPara->status.addSpace) + p.drawRect(x/2,y,p_var->width/2,p_var->height); + else p.drawRect(x,y,p_var->width,p_var->height); + + //p.setBrush(QColor(Qt::red));//之前都是红色 + if(p_var->type==7 || p_var->type==37 || p_var->type==57|| p_var->type==67) p.setBrush(QColor(Qt::black));//变量1 + else if(p_var->type==8 || p_var->type==38 || p_var->type==58 || p_var->type==68) p.setBrush(QColor(Qt::blue));//变量2 + else if(p_var->type==13) p.setBrush(QColor(Qt::red));//变量3 + else p.setBrush(QColor(Qt::red)); //其他 + + + + + QChar *qchar = str.data(); + int charWidth; + if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide) + charWidth = p_var->datWidth/13; + else + charWidth = p_var->datWidth/10; + + for( j = jmin; j < digitalNum; j++){ + int digitalIndex; + if(!sysPara->para.rrr_nc && sysPara->para.printNumPoint && p_var->type == 7 && j == (digitalNum-2)) + { + digitalIndex = 10; + } + else if(sysPara->para.rrr_nc && !sysPara->para.printNumPoint && p_var->type == 7 && j == (digitalNum-3)) + { + digitalIndex = 10; + } + else if(sysPara->para.rrr_nc && sysPara->para.printNumPoint && p_var->type == 7 && j == (digitalNum-4)) + { + digitalIndex = 10; + } + else if(sysPara->status.specialVarPrint.MeterEnable && p_var->type == 15 && j == (digitalNum-1)) + { + digitalIndex = 11; + } + else + { + digitalIndex = qchar[j].toAscii() - '0'; + } + unsigned char *pAaddr = p_var->dat + (digitalIndex*charWidth)*p_var->rowByteNum; + + for(int k = 0; k < rowDiff; k++){ + for(int l = 0; l < charWidth; l++){ + if(pAaddr[l*p_var->rowByteNum + k/8] & (1<<(k%8))){ + //p.drawRect(x + j*charWidth + l,y + k,1,1); + if(sysPara->status.addSpace){ + p.drawRect((x + j*charWidth + l)/2,y + k,1,1);l++; + } + else + p.drawRect(x + j*charWidth + l,y + k,1,1); +#ifdef DEBUG3 + printf("0"); + } + else + printf("."); + } + printf("\n"); +#else + } + } +#endif + } + } + } + updateDigitalOnly = false; +// update(); + } + + +} + diff --git a/PrintTextDisplay.h b/PrintTextDisplay.h new file mode 100644 index 0000000..f8555b1 --- /dev/null +++ b/PrintTextDisplay.h @@ -0,0 +1,47 @@ +/* + * PrintTextDisplay.h + * + * Created on: Jul 9, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef PRINTTEXTDISPLAY_H_ +#define PRINTTEXTDISPLAY_H_ + +#include +#include "ParaSettingUI.h" +class PrintTextDisplay:public QWidget,public ParaSettingUI{ + +public: + explicit PrintTextDisplay(QWidget *parent = 0); + ~PrintTextDisplay(); + + void updateSysParaToUI(); //重载 + + void updateSysStatusToUI(); //重载 + + void paintEvent(QPaintEvent *); + + void resizeWidget(int w,int h); + + + + void enlargeDisplay(); + void reduceDisplay(); + + void setDisplaySize(int w,int h); + + void setScaleRatio(int ratio); + void scroll_update(); +private: + int scaleRatio; + int origHeight; + int origWidth; + bool updateDigitalOnly; +}; + + +#endif /* PRINTTEXTDISPLAY_H_ */ diff --git a/Public.cpp b/Public.cpp new file mode 100644 index 0000000..634193b --- /dev/null +++ b/Public.cpp @@ -0,0 +1,431 @@ +/* + * Public.cpp + * + * Created on: Jul 16, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#include "Public.h" +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +static QString FontName; + +Public::Public(){ + +} +// "Zfull-GB";break;/ +Public::~Public(){ + FontName=""; +} +// 20160303 : #define FONTV "WenQuanYiCN" ; FONTV1 FONTV2 "WenQuanYiNX" +//#define FONTV "DejaVuSansnx"//"DejaVu Sans" +#define FONTV "WenQuanYiCN" +//#define FONTV "WenQuanYiNX" +#define FONTV1 "WenQuanYiNX" +//#define FONTV1 "DejaVu Sans" +//#define FONTV2 "DejaVu Sans" +#define FONTV2 "WenQuanYiNX"//"WenQuanYi Micro Hei" +//"Zfull-GB" +#define FONTC "wenquanyi" + +//#define FONTC "WenQuanYi" +int Public::getMinFontPixelSize(){ + return 5; +} +QString Public::getFontFamily(int pixelSize){ + switch(pixelSize){ + +#ifdef VNLG + case 5: + case 6: + case 7: + case 9: + return "biyang";break; + case 10: + case 11: + case 12: + return (FontName=="Chinese" || FontName=="English")?FONTC:FONTV;break;//return "UnDotum";break;// + //return "UnDotum";break;//Zfull-GB + case 14:case 13:case 15: + case 16: + case 24: + case 32: + return (FontName=="Chinese" || FontName=="English")?FONTC:FONTV;break;//return "UnDotum";break;//return (FontName=="Chinese")?FONTC:"Zfull-GB";break; + case 28: + //case 32: + case 36: + return //(FontName=="Chinese")?FONTC: + //FONTV1;// + (FontName=="Chinese" || FontName=="English")?FONTV2:FONTV1;break; + + // "Zfull-GB";break;//return "UnDotum";break;//return (FontName=="Chinese")?FONTC:"Zfull-GB";break; + // 16点阵以上直接使用方正字体 + default: + return + (FontName=="Chinese" || FontName=="English")?FONTV2:FONTV1;break; + //FONTC; // + //"WenQuanYi Micro Hei"; + //"WenQuanYiMH"; +#else + case 5://return "SerifL";break; + case 6: + case 7: + case 9:return "biyang";break; + default:return + FONTC; +#endif + + break;//return "WenQuanYi Zen Hei"; break; + } + return FONTV2; +} + +QString Public::getFontFamily(int pixelSize, int vartype){ + switch(pixelSize){ + case 5: + case 6: + case 7: + case 9: + { + if(vartype>19&& vartype<30) + { + return "SerifL"; + } + else if(vartype>39&& vartype<50) + { + return "SerifR"; + } + else if((vartype>29&& vartype<40) || vartype == 90 || vartype==91) + { + return "bangla"; + } + else if((vartype>49&& vartype<60) || vartype == 100 || vartype==101) + { + return "biyangF"; + } + else if((vartype>59&& vartype<70) || vartype == 110 || vartype==111) + { + return "Roman"; + } + else + { + return "biyang"; + } +// (vartype>19&& vartype<30)?"SerifL": +// (vartype>39&& vartype<50)?"SerifR": +// "biyang"; + } + break; + default:return + FONTC; + break;//return "WenQuanYi Zen Hei"; break; + } + + return FONTV2; +} + +static int pixel_size[] = {5,7,9,12,16,21,24};//,28,32}; +#define NUM 6 +int Public::derivePixelSizeFromHeight(int value){ + static int init_done; + static int height[NUM*2]; + //static int heightB[NUM]; + +// 12 -12 16--15 24 --19 28 -22 32 --25 +/* +HEIL 0 6 +HEIL 1 8 +HEIL 2 10 +HEIL 3 13 +HEIL 4 17 +HEIL 5 32 +HEIL 6 37 +HEIL 7 42 + */ + if(!init_done){ + for(int i = 0; i < NUM; i++){ + QFont font; + font.setFamily(Public::getFontFamily(pixel_size[i])); + font.setPixelSize(pixel_size[i]); + font.setBold(0); + height[2*i] = getNumberHeight(font); + font.setBold(1); + height[2*i+1] = getNumberHeight(font); + //qDebug()<<"HEIL"<2) { + len=file1.readLine((char*)buf,256); + if(len){ + buf[len]='\0'; + QString s1 = buf; + int n=s1.indexOf("\r\n"); + if(n) + s1 = s1.mid(0,n); + if(s1.endsWith("utf8.txt")) InputTxtFileName = s1; + else InputTxtFileName = "WINPY_utf8.txt"; + } + } + if(file1.isOpen()) file1.close(); + } + return InputTxtFileName; +} + +QString Public::ReadLanguageName() +{ + QFile file1("/home/plg/UseEn"); + QString language="Chinese"; + char buf[256]; + + if(file1.exists()) + { + file1.open(QFile::ReadWrite); + int len=file1.readLine((char*)buf,256); + buf[len]='\0'; + //qDebug()<<"language:"<2) { + language = buf; + int n=language.indexOf("\r\n"); + if(n>0) + language = language.mid(0,n); + } + if(file1.isOpen())file1.close(); + } + //qDebug()<<"language2:"<drawContents (&painter, image.rect()); /*将text写到pic*/ + text1.hide(); +#if 0 + QString s; + s.sprintf("/home/ss%d-%d.jpg",font.pixelSize(),font.bold()?75:50); + image.save(s); +#endif + + int imgHeight = image.height(); + int imgWidth = image.width(); + int FirstValidRow = 0; + bool lastFlag=0; + int k,j; + for(k = 0; k 0 ; k--){ + for( j = 0; j < imgWidth; j ++){ + QRgb rgb = image.pixel(j,k); + //qDebug()<= 60) tmp = vartype-60; + else if(tmp >= 50) tmp = vartype-50; + else if(tmp >= 40) tmp = vartype-40; + else if(tmp >= 30) tmp = vartype-30; + else if(tmp >= 20) tmp = vartype-20; + return tmp; + + +} + +/* + * +#ifdef MMVAR11 + // 同一行先排序: ,不同行分开排序,如何实现。 + int i,j; + for(i=0;istatus.variNum-1;i++){ + bool ch_flag=0; + for(j=i+1;jstatus.variNum;j++){ + if(sysPara->status.vars[j].startColPos < sysPara->status.vars[j-1].startColPos ){ + int n=sysPara->status.vars[j].startRowPos; + sysPara->status.vars[j].startRowPos = sysPara->status.vars[j-1].startRowPos; + sysPara->status.vars[j-1].startRowPos = n; + n=sysPara->status.vars[j].startColPos; + sysPara->status.vars[j].startColPos = sysPara->status.vars[j-1].startColPos; + sysPara->status.vars[j-1].startColPos = n; + ch_flag =1; + } + } + if(ch_flag==0) break; + } +#endif +*/ diff --git a/Public.h b/Public.h new file mode 100644 index 0000000..d6ab64d --- /dev/null +++ b/Public.h @@ -0,0 +1,44 @@ +/* + * Public.h + * + * Created on: Jul 16, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef PUBLIC_H_ +#define PUBLIC_H_ + +#include +#include +#include +#include + +extern void MySleep(unsigned int msec); + +class Public{ +public: + Public(); + ~Public(); + static int getMinFontPixelSize(); + static QString getFontFamily(int pixelSize); + static QString getFontFamily(int pixelSize, int vartype);// 20160812 + static int derivePixelSizeFromHeight(int value); + static int derivePixelSizeFromHeightNx(int value); + static int getAdjustedPixelSize(int value); + static void resetPara(); + static void backupPara(); + static QString readLanguageType(); + static QString ReadLanguageName(); + static int getNumberHeight(QFont font); + static time_t getDateFromMacro(const char *time); + static QString DateToString(const char *time); + + static int getType(int vartype); // 将变量类型进行转换,以处理横向字体 + +}; + + +#endif /* PUBLIC_H_ */ diff --git a/PulseNumFix.cpp b/PulseNumFix.cpp new file mode 100644 index 0000000..51f5b8c --- /dev/null +++ b/PulseNumFix.cpp @@ -0,0 +1,109 @@ +#include "PulseNumFix.h" +#include "ui_pulsenumfix.h" +#include +#include +#include +PulseNumFix::PulseNumFix(QWidget *parent) : + QDialog(parent), + ui(new Ui::PulseNumFix) +{ + ui->setupUi(this); + this->setWindowTitle(tr("脉冲数修正")); + setUIEnableStatus(); + connect(this,SIGNAL(accepted()),this,SLOT(onButtonBoxAccepted())); + ui->lineEditRate->setValidator(new QDoubleValidator(0)); + ui->lineEditActualSynLength->setValidator(new QDoubleValidator(0)); + ui->lineEditLength->setValidator(new QDoubleValidator(0)); + ui->lineEditPulseNum->setValidator(new QDoubleValidator(0)); + ui->lineEditDiameter->setValidator(new QDoubleValidator(0)); + ui->lineEditPulsePerCycle->setValidator(new QDoubleValidator(0)); + this->setFixedSize(this->geometry().width(),this->geometry().height()); +} + +PulseNumFix::~PulseNumFix() +{ + delete ui; +} + +void PulseNumFix::setUIEnableStatus(){ + ui->lineEditRate->setEnabled(ui->radioButtonAccordingRate->isChecked()); + ui->labelRate->setEnabled(ui->radioButtonAccordingRate->isChecked()); + ui->lineEditActualSynLength->setEnabled(ui->radioButtonAccordingLength->isChecked()); + ui->labelActualSynLength->setEnabled(ui->radioButtonAccordingLength->isChecked()); + ui->lineEditLength->setEnabled(ui->radioButtonAccordingPulseNum->isChecked()); + ui->labelLength->setEnabled(ui->radioButtonAccordingPulseNum->isChecked()); + ui->lineEditPulseNum->setEnabled(ui->radioButtonAccordingPulseNum->isChecked()); + ui->labelPulseNum->setEnabled(ui->radioButtonAccordingPulseNum->isChecked()); + ui->lineEditDiameter->setEnabled(ui->radioButtonSynchonizerPara->isChecked()); + ui->labelDiameter->setEnabled(ui->radioButtonSynchonizerPara->isChecked()); + ui->lineEditPulsePerCycle->setEnabled(ui->radioButtonSynchonizerPara->isChecked()); + ui->labelPulsePerCycle->setEnabled(ui->radioButtonSynchonizerPara->isChecked()); +} + +void PulseNumFix::onButtonBoxAccepted() +{ + float pulseNumPerMM = 0; + if(sysPara){ + if(ui->radioButtonAccordingRate->isChecked()){ + float rate = ui->lineEditRate->text().toFloat(); + if(rate != 0){ + pulseNumPerMM = sysPara->status.synPulseCntPer1s/rate; + } + else { + QMessageBox::critical(0,tr("错误"),tr("速度不应该为0")); + } + } + else if(ui->radioButtonAccordingLength->isChecked()){ + float length = ui->lineEditActualSynLength->text().toFloat(); + if(length != 0){ + pulseNumPerMM = sysPara->para.synPulseNumPerMm * sysPara->para.synTriggerPrintLenMm / length; + } + else { + QMessageBox::critical(0,tr("错误"),tr("实际同步长度不应该为0")); + } + } + else if(ui->radioButtonAccordingPulseNum->isChecked()){ + float length = ui->lineEditLength->text().toFloat(); + float pulse = ui->lineEditPulseNum->text().toFloat(); + if(length != 0){ + pulseNumPerMM = pulse/length; + } + else { + QMessageBox::critical(0,tr("错误"),tr("长度不应该为0")); + } + } + else if(ui->radioButtonSynchonizerPara->isChecked()){ + float circle = ui->lineEditDiameter->text().toFloat() * 3.1415926; + float pulseNum = ui->lineEditPulsePerCycle->text().toFloat(); + if(circle != 0){ + pulseNumPerMM = 4*pulseNum/circle; //电路和Fpga做了4倍频处理,这里乘以4是为了匹配4倍频的处理进行正确的显示 + }else { + QMessageBox::critical(0,tr("错误"),tr("直径不应该为0")); + } + } + if(pulseNumPerMM != 0){ + emit pulseNuxFixDone(pulseNumPerMM); + } + + } +} + +void PulseNumFix::on_radioButtonAccordingRate_released() +{ + setUIEnableStatus(); +} + +void PulseNumFix::on_radioButtonAccordingLength_released() +{ + setUIEnableStatus(); +} + +void PulseNumFix::on_radioButtonAccordingPulseNum_released() +{ + setUIEnableStatus(); +} + +void PulseNumFix::on_radioButtonSynchonizerPara_released() +{ + setUIEnableStatus(); +} diff --git a/PulseNumFix.h b/PulseNumFix.h new file mode 100644 index 0000000..53a91d3 --- /dev/null +++ b/PulseNumFix.h @@ -0,0 +1,39 @@ +#ifndef PULSENUMFIX_H +#define PULSENUMFIX_H + +#include +#include +#include +namespace Ui { +class PulseNumFix; +} + +class PulseNumFix : public QDialog,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit PulseNumFix(QWidget *parent = 0); + ~PulseNumFix(); + +Q_SIGNALS: + void pulseNuxFixDone(float); + +private slots: + void setUIEnableStatus(); + + void onButtonBoxAccepted(); + + void on_radioButtonAccordingRate_released(); + + void on_radioButtonAccordingLength_released(); + + void on_radioButtonAccordingPulseNum_released(); + + void on_radioButtonSynchonizerPara_released(); + +private: + Ui::PulseNumFix *ui; +}; + +#endif // PULSENUMFIX_H diff --git a/QBarCode.cpp b/QBarCode.cpp new file mode 100644 index 0000000..7af8b82 --- /dev/null +++ b/QBarCode.cpp @@ -0,0 +1,867 @@ + +#include "QBarCode.h" +#include "ui_QBarCode.h" +#include "QImage" +#include "QFile" +#include "QFileInfo" +#include "QDebug" +#include "stdio.h" +#include "Public.h" +#include "QTextEdit" +//#include "SysPara.h" +#include "InkJetPrinter.h" + +static int dotn[]={5,7,9,12,16,24,32,40}; +#define AUTOREF false + +int AutoCount1=0; +#define MDTFLAG 0xff00FF10 +#define QRFLAG 0xff00FF20 +#define BARFLAG 0xff00FF30 + +extern InkJetPrinter *pInkJectPrinter; + +QBarCode::QBarCode(QWidget *parent) : + QDialog(parent), + ui(new Ui::QBarCode) +{ + ui->setupUi(this); + bcOK=false; + connect(ui->BarCodeGenerate,SIGNAL(pressed()),this,SLOT(ImgSave())); + connect(ui->pushBarPreview,SIGNAL(pressed()),this,SLOT(onEnCodeBar())); + connect(ui->BarCodeScale,SIGNAL(valueChanged(int)),this,SLOT(onScaleChange(int))); + //connect(ui->spinBoxXPos,SIGNAL(valueChanged(int)),this,SLOT(onXposChange(int))); + connect(ui->lineEditModule,SIGNAL(textChanged(QString)),this,SLOT(onBarCodeRefresh(QString))); + //connect(ui->pushBtnOpenFile,SIGNAL(pressed()),this,SLOT(generateCharRamData())); + AutoRefresh = false; + ui->labFileName->setText(tr("文件未保存")); + ui->lineEditModule->setText("BEC301B030"); + fontSize = 9; + scene = new QGraphicsScene; + + //ui->BarCodeType->addItem("BARCODE_128B"); + //ui->BarCodeType->addItem("BARCODE_128C"); + //ui->BarCodeType->addItem("BARCODE_128RAW"); + ui->BarCodeType->addItem(tr("BARCODE_128")); + ui->BarCodeType->addItem(tr("BARCODE_93")); + //ui->BarCodeType->addItem(tr("自适应编码")); + ui->BarCodeType->addItem("BARCODE_ISBN"); + ui->BarCodeType->addItem("BARCODE_EAN"); + ui->BarCodeType->addItem("BARCODE_UPC"); + ui->BarCodeType->addItem("BARCODE_39"); + //ui->BarCodeType->addItem("BARCODE_CBR"); + //ui->BarCodeType->addItem("BARCODE_CBR"); + //ui->BarCodeType->addItem("BARCODE_PLS"); + //ui->BarCodeType->addItem("BARCODE_MSI"); + ui->BarCodeHeigh->addItem(tr("5点")); + ui->BarCodeHeigh->addItem(tr("7点")); + ui->BarCodeHeigh->addItem(tr("9点")); + ui->BarCodeHeigh->addItem(tr("12点")); + ui->BarCodeHeigh->addItem(tr("16点")); + ui->BarCodeHeigh->addItem(tr("24点")); + //ui->BarCodeHeigh->addItem(tr("24点")); + //onEnCodeBar(); + //ui->BarCodeFont->setCurrentIndex(1); + ui->BarCodeHeigh->setCurrentIndex(3); + ui->BarCodeType->setCurrentIndex(0); + //ui->BarCodeScale->setValue(2); + //ui->spinBoxXPos->setValue(1); +} + +QBarCode::~QBarCode() +{ + delete ui; +} +void QBarCode::TextBarCode(QString txt,int index) +{ + int ps = 1, pcl = 0, oflags; + ps = 0; pcl = 0; + oflags = BARCODE_OUT_PS | BARCODE_OUT_NOHEADERS; + /* and my data as code-128B autodetected */ + + //qDebug()<<"TextBarCode, txtLen:"<sysPara =sysPara; +} + +void QBarCode::onEnCodeBar(){ + QString txt2 =ui->lineEditModule->text().trimmed(); + QString txt3 =ui->lineEditLine->text().trimmed(); + QString txt4 =ui->lineEditLine1->text().trimmed(); + QString txtVar1,txtVar2; + QString txtVar5,txtVar6; + inkColor = ui->comboBoxInkColor->currentIndex()?1:0; + QString txt; + if(sysPara) + { + sysPara->para.bcOption.var1Type =1; + sysPara->para.bcOption.var2Type =2; + txtVar1=getVarTxt(ui->BarCodeVarEN1->isChecked(),sysPara->para.bcOption.var1Type); + txtVar2=getVarTxt(ui->BarCodeVarEN2->isChecked(),sysPara->para.bcOption.var2Type); + txtVar5=getVarTxt(ui->checkBoxBarDate->isChecked(),3); + txtVar6=getVarTxt(ui->checkBoxBarTime->isChecked(),4); + if(ui->BarCodeVarEN1->isChecked()) ui->lineEditVar1->setText(txtVar1); + if(ui->BarCodeVarEN2->isChecked()) ui->lineEditVar2->setText(txtVar2); + } + else qDebug()<<"no para init."; + +// %06d%04d TextBarCode, txtLen: 30 "BCD030000025000000020000340000" 1 + if(sysPara->para.isCheckInsertTime) + { + txt = txt2 + " " + txtVar5 + " " + txtVar6 + " " + txtVar1; + } + else + { + txt = txt2 + txtVar1+txt3+txtVar2+ txt4; + } + ui->label_Txt->setText(txt); + TextBarCode(txt, ui->BarCodeType->currentIndex()); + ShowBarCode(&imgBar); + //imgBar.save(QString().sprintf("BARV%d.bmp",imgBar.height()+ ui->BarCodeType->currentIndex()*100 )); +} + +QString QBarCode::getLabe_TxtString() +{ + return ui->label_Txt->text(); +} + +QString QBarCode::getVarTxt(bool varEn,unsigned varType) +{ + int tmp=1; + int varNum= (varType==1)? sysPara->para.bcOption.var1Num: + (varType==2)? sysPara->para.bcOption.var2Num: + 4; + QString txtVar=""; + char fmt[]="%04d"; + sprintf(fmt,"%%%02dd",varNum); + while(varNum-->0) tmp*=10; + //qDebug()<<"fmt"<status.calandar_and_dat.cnt1CurrValue,16).toInt(); + txtVar.sprintf(fmt,var1%tmp); //变量1 + } + else if(varType==2){ + int var2 = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + txtVar.sprintf(fmt,var2%tmp); //变量2 + } + else if(varType==3) + { //日期 +// txtVar.sprintf("%04d%02d%02d",sysPara->status.calandar_and_dat.year, +// sysPara->status.calandar_and_dat.month, +// sysPara->status.calandar_and_dat.day); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"dd MM yy"); + dateFormat.insert(10,"dd/MM/yy"); + dateFormat.insert(11,"dd/MM/yyyy"); + dateFormat.insert(12,"dd-MM-yy"); + dateFormat.insert(13,"dd-MM-yyyy"); + + txtVar = QDateTime::currentDateTime().toString(dateFormat.value(sysPara->para.ExpirySplitMode)); + } + else if(varType==4) + { //时间 +// txtVar.sprintf("%02d%02d",sysPara->status.calandar_and_dat.hour, +// sysPara->status.calandar_and_dat.minute); + //sysPara->status.calandar_and_dat.second); + txtVar = QDateTime::currentDateTime().toString("hh:mm"); + } + else {} + + } + return txtVar; +} + +/* + * Do it all in one step + */ +int QBarCode::Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, + int xoff, int yoff, int flags) +{ + struct Barcode_Item * bc; + + if (!(bc=Barcode_Create(text))) { + qDebug()<<"mem less then:";//<< -ENOMEM ; + return -1; + } + + if ( Barcode_Position(bc, wid, hei, xoff, yoff, 0.0) < 0 + || Barcode_Encode(bc, flags) < 0 + //|| Barcode_Print(bc, f, flags) < 0 + ) { + qDebug()<<"EnCode Error:"<< bc->error; + Barcode_Delete(bc); + return -1; + } + //QFile f1; + bcText = text; + bcTextinfo = bc->textinfo; + bcPartial = bc->partial; + Barcode_ToImage(bc);// KEY + Barcode_Delete(bc); + return 0; +} +// 将条形码编码转换成点阵图形 +int QBarCode::Barcode_ToImage(Barcode_Item * bc ){ + + bc->ascii; + bc->partial; + bc->textinfo; + int len =QString(bc->partial).length(); + int BarTypeNumber = ui->BarCodeType->currentIndex(); + + QString txt = bc->ascii; + txt = txt.trimmed(); + inkColor = ui->comboBoxInkColor->currentIndex()?1:0; + int xoffset = inkColor?16:8;if((BarTypeNumber == 3) && (inkColor == 0))xoffset+=8; + int bcWidth1 =0; + for(int i=0;ipartial[i]&0x0f); + + bcHeight = dotn[ui->BarCodeHeigh->currentIndex()] ;//+(inkColor?xoffset/2:0); + bcWidth = xoffset + bcWidth1*(1+ui->BarCodeDot->currentIndex()); + if((BarTypeNumber == 3) && (inkColor == 0)) + bcWidth += 4; + QImage image(bcWidth,bcHeight,QImage::Format_ARGB32); + // inkColor --白墨 + //if(inkColor) + { + for(int j=0;j<=bcHeight-1;j++){ + for(int n=0;( nBarCodeDot->currentIndex()); + int xx = xoffset >> 1; + if((BarTypeNumber == 3) && (inkColor == 0)) + xx = (xoffset >>1 ) + 2; + int yoffset =0;//(inkColor?xx-1:0); + unsigned char py= inkColor?bcHeight-1:bcHeight-1; + + for(int j=yoffset;j<=py ;j++){ + i=xx; + for(int n=0;( npartial[n])&0x07; + c = c*DotNum; + if(n&0x01) { + for(int r=0;rcheckBoxAddText->isChecked()) + { + OnCharRamData(&image); // add text + } + //OnCharRamData2(&image,txtWidth,height); // add text + //ShowBarCode(&image); + imgBar = image.copy(image.rect()); + + if(AutoCount1 && pInkJectPrinter->modbus->modbus_up_QRCODE == 0) + { + imgBar.setPixel(0,imgBar.height()-1,BARFLAG); // 设置定位标志 + //qDebug()<<"Barcode_ToImage:x,y"<15) fileName= fileName.left(15); + fileName.remove(QRegExp("/")); + fileName.remove(QRegExp("\\")); + ui->labFileName->setText(fileName+".bmp" ); + this->pictureName = "/home/plg/doc/"+ fileName + ".bmp" ; + + QString s2=""; + imgBar.rgbSwapped(); + if(pInkJectPrinter->modbus->modbus_up_QRCODE == 1) + { +// qDebug()<<"save modbusQR"; + s2 = "modbusQR.bmp"; + this->pictureName=DOC_ROOT_DIR+s2; + imgBar.save(pictureName); + pInkJectPrinter->modbus->modbus_up_QRCODE = 0; + } + else + { + imgBar.save(this->pictureName); + } + //qDebug()<<"svae imag"<BarCodeType->currentIndex()*100 )); + + sysPara->saveParaToFile(); +} + + +void QBarCode::onScaleChange(int n){ + //ShowBarCode("tmp.bmp"); + if(bcOK==0) + onEnCodeBar(); + ShowBarCode(&imgBar); +} + +void QBarCode::onXposChange(int n){ + //ShowBarCode(this->pictureName); + //emit onEnCodeBar(); + if(AutoRefresh) { + onEnCodeBar(); + // ui->lineEdit->setFocus(); + } +} + +void QBarCode::SetOption(bcOption_t *bcOption){ + + AutoCount1=bcOption->var1En | bcOption->var2En; + + //ui->checkBoxInsertFlag->setChecked(1);//bcOption->AutoCount + //ui->BarCodeFont->setCurrentIndex(bcOption->font); + if(bcOption->height<7) ui->BarCodeHeigh->setCurrentIndex(bcOption->height); + else qDebug()<<"SetOption height"<height; + ui->BarCodeType->setCurrentIndex(bcOption->type); + ui->BarCodeScale->setValue(bcOption->scale); + ui->comboBoxInkColor->setCurrentIndex(bcOption->InkColor?1:0); + QString s1=bcOption->text; + ui->lineEditModule->setText(bcOption->TxtModule); + ui->lineEditLine->setText(bcOption->TxtLine); + ui->lineEditLine1->setText(bcOption->TxtLine1); + if(sysPara) + { + sysPara->para.bcOption.var1Type =1; + sysPara->para.bcOption.var2Type =2; + + txtVar1=getVarTxt(bcOption->var1En,bcOption->var1Type); + ui->lineEditVar1->setText(txtVar1); + txtVar2=getVarTxt(bcOption->var2En,bcOption->var2Type); + ui->lineEditVar2->setText(txtVar2); + + ui->BarCodeVarEN1->setChecked(bcOption->var1En); + ui->BarCodeVarEN2->setChecked(bcOption->var2En); + } + else qDebug()<<"no para init."; + + if(s1.length()>15) s1 = s1.left(15); + s1 +=".bmp"; + this->pictureName=DOC_ROOT_DIR+s1; + //onEnCodeBar(); + AutoRefresh = AUTOREF; + + sysPara->para.isCheckBarCodeAddText ? ui->checkBoxAddText->setChecked(true) : ui->checkBoxAddText->setChecked(false); + ui->checkBoxBarDate->setChecked(sysPara->para.isCheckBarDate); + ui->checkBoxBarTime->setChecked(sysPara->para.isCheckBarTime); +} + +void QBarCode::GetOption(bcOption_t *bcOption){ + bcOption->height = ui->BarCodeHeigh->currentIndex(); + bcOption->type = ui->BarCodeType->currentIndex(); + bcOption->InkColor = ui->comboBoxInkColor->currentIndex()?1:0; + bcOption->AutoCount = 1; + + bcOption->var1En = ui->BarCodeVarEN1->isChecked(); + bcOption->var2En = ui->BarCodeVarEN2->isChecked(); + + snprintf(bcOption->text,sizeof(bcOption->text),"%s",bcText.toAscii().constData()); + if(sysPara){ + snprintf(bcOption->TxtModule,sizeof(bcOption->TxtModule),"%s",ui->lineEditModule->text().toAscii().constData()); + snprintf(bcOption->TxtLine,sizeof(bcOption->TxtLine),"%s",ui->lineEditLine->text().toAscii().constData()); + snprintf(bcOption->TxtLine1,sizeof(bcOption->TxtLine1),"%s",ui->lineEditLine1->text().toAscii().constData()); + } + + sysPara->para.isCheckBarCodeAddText = ui->checkBoxAddText->isChecked() ? true : false; + sysPara->para.isCheckBarDate = ui->checkBoxBarDate->isChecked(); + sysPara->para.isCheckBarTime = ui->checkBoxBarTime->isChecked(); +} + +void QBarCode::GetOption2(bcPara_t *bcOption){ + bcOption->height = imgBar.height(); + bcOption->type = ui->BarCodeType->currentIndex(); + //bcOption->InkColor = ui->comboBoxInkColor->currentIndex()?1:0; + bcOption->width = imgBar.width(); + //snprintf(bcOption->text,sizeof(bcOption->text),"%s",bcText.toAscii().constData()); +} +void QBarCode::on_pushBtnColse_pressed() +{ + flagInsert = ui->checkBoxInsertFlag->checkState()?1:0; + + //ui->checkBoxInsertFlag->setChecked(0); + //qDebug()<<"flagInsert"<checkBoxInsertFlag->checkState();图片方面 + //flagCount = ui + emit onBarCodeClose(); + this->close(); + AutoRefresh = false; + bcOK = false; +} +void QBarCode::onBarCodeRefresh(QString s){ + if(AutoRefresh) + { + //onEnCodeBar(); + //ui->lineEdit->setFocus(); + } + //ui->label_Txt->setText(bcText); +} + +void QBarCode::extSetText(QString text) +{ + //ui->comboBoxType->setCurrentIndex(1); + //ui->lineEditIn->setText(text); + //ui->lineEditIn2->setText(""); + //ui->lineEditCNT->setText(""); +// QString strTxt=ui->lineEditModule->text(); + + if(sysPara->para.isCheckInsertTime) + { + //ui->lineEditLine->setText(text); + } + else + { + ui->lineEditModule->setText(text); + ui->lineEditLine->setText(""); + ui->BarCodeVarEN1->setChecked(false); + } + ui->lineEditLine1->setText(""); + ui->BarCodeVarEN2->setChecked(false); + + pInkJectPrinter->modbus->modbus_up_QRCODE =1; + + emit onEnCodeBar(); + emit ImgSave(); +} + +void QBarCode::setFontSize(int PixelSize) +{ + fontSize = PixelSize; +} +int QBarCode::ImgLeftPos(QImage *img){ + int firstValidCol=0; + bool found =0; + int w = img->width(); + int h = img->height(); + unsigned char *dat = img->bits(); //if( *(dat+ j*4 + k*w*4 ) ==0x00 ) + for(int j = 0; j pixel(j,k); if((rgb&0x00ffffff)==0){ + if( *(dat+ j*4 + k*w*4 ) ==0x00 ) { + if(j>firstValidCol) firstValidCol = j ; + found=1; + break; + } + } + if(found) break; + } + return firstValidCol; +} + +int QBarCode::ImgRightPos(QImage *img){ + int lastValidCol=0; + bool found=0; + int scnt=0; + int w = img->width(); + int h = img->height(); + lastValidCol = w-1; + unsigned char *dat = img->bits(); //if( *(dat+ j*4 + k*w*4 ) ==0x00 ) + for(int j = w-1; j>0; j --){ + for(int k =0; k < h ; k++){ + scnt++; + //QRgb rgb = img->pixel(j,k); + //if((rgb&0x00ffffff)==0){ + if( *(dat+ j*4 + k*w*4 ) ==0x00 ) + { + if(jdrawContents (&painter,image.rect() ); //将text写到picimage.rect() + textEdit.hide(); + int xoff=0; + int lastValidRow = (bcHeight>height)? height + (bcHeight-height)/2: height; + // height + int startValidRow = (bcHeight>height)? (bcHeight-height)/2: 0; + ui->labStatus->setText(tr("标签宽度:%1,标签高度:%2,文本宽度:%3").arg(bcWidth).arg(height+bcHeight).arg(Txtwidth));// 文本宽度 标签宽度 条码宽度 + xoff =bcWidth+inkColor*4 ; + for(int k = 0; k < height; k++){ + for(int j = 0; j < Txtwidth; j ++){ + QRgb rgb = image.pixel(j,k); + img1->setPixel( xoff+j,startValidRow+k,rgb); + } + } + +} + +// Test +void QBarCode::OnCharRamData(QImage *img1){/* 生成字模数据 */ + textEdit.document()->setDocumentMargin(0); + int Txtwidth ; + //int height = bcHeight<16?bcHeight:16; + int height = fontSize; + int letterSpace=1 ; + textEdit.clear(); + int DPI = textEdit.logicalDpiX(); + DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 + QFont font = textEdit.font(); + textEdit.insertHtml(QString("%4") + .arg(Public::getFontFamily(height)).arg(height*72/DPI).arg(400).arg(bcText)); //600表示加粗,400表示普通 + + font = textEdit.font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,letterSpace); + font.setFamily(Public::getFontFamily(height)); + font.setPixelSize(height); + font.setWeight(QFont::Normal); + textEdit.setFont(font); + QFontMetrics fontMetrics(font); + Txtwidth = (fontMetrics.width(bcText)); + QSize size(Txtwidth+(Txtwidth>>2),height+bcHeight); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff); + QPainter painter(&image); + textEdit.setGeometry(0,0,1000,50); + textEdit.show(); //如果不显示,似乎不会绘制 + textEdit.setFixedWidth(image.rect().width()); + textEdit.document()->drawContents (&painter,image.rect() ); //将text写到picimage.rect() + textEdit.hide(); + Txtwidth = ImgRightPos(&image); + image.save("./QbarCodemage.bmp"); + int xoff=0; + int lastValidRow = height +bcHeight; + //img1->rect() + ui->labStatus->setText(tr("标签宽度:%1,标签高度:%2,文本宽度:%3").arg(bcWidth).arg(height+bcHeight).arg(Txtwidth));// 文本宽度 标签宽度 条码宽度 + if( bcWidth >= Txtwidth ) + { + xoff = (bcWidth-Txtwidth)/2; +// for(int k = 0; k < height; k++){ +// for(int j = 0; j < Txtwidth; j ++){ +// QRgb rgb = image.pixel(j,k); +// if((j+xoff)setPixel( xoff+j,k+bcHeight,rgb); +// } + +// } + + QImage qimg3 = QImage(bcWidth, height+bcHeight + 1, QImage::Format_RGB32); + qimg3.fill(0xffffff); +//LogInfo::setRunStatusText(tr("F=%1,S=%2,T=%3").arg(firstPart).arg(secondPart).arg(thirdPart)); + QPainter p(&qimg3); + + p.drawPixmap(0, 0, img1->width(), img1->height(), QPixmap::fromImage(*img1)); + if((ui->BarCodeType->currentIndex() != 3) || (ui->BarCodeDot->currentIndex() > 0) || (font.pixelSize() > 7) || (ui->comboBoxInkColor->currentIndex() == 1)) + p.drawPixmap(xoff, bcHeight + 1, image.width(), image.height(), QPixmap::fromImage(image)); + else{//LogInfo::setRunStatusText(tr("length=%1").arg(bcText.length())); +// p.drawPixmap(0, 0, img1->width(), img1->height(), QPixmap::fromImage(*img1)); +// p.drawPixmap(xoff - 12, bcHeight + 1 - 2, image.width(), image.height(), QPixmap::fromImage(image)); + QString firstPart = bcText.mid(0,1); // 第一个字符 + QString secondPart = bcText.mid(1, 6); // 第二个到第六个字符 + QString thirdPart = bcText.mid(7); // 第七个到第十四个字符,注意根据实际情况调整 + if (!firstPart.isEmpty()) { + QImage partImage = image.copy(0, 0, fontMetrics.width(firstPart), image.height()); // 裁剪出第一部分的图像 + //p.drawPixmap(xoff - 18, bcHeight - 1 , partImage.width(), partImage.height(), QPixmap::fromImage(partImage));//77 + //p.drawPixmap(xoff - 12, bcHeight - 1 , partImage.width(), partImage.height(), QPixmap::fromImage(partImage));//89 + if(Txtwidth < 70) + p.drawPixmap(xoff - 24, bcHeight - 2 , partImage.width(), partImage.height(), QPixmap::fromImage(partImage)); + else if(Txtwidth < 80) + p.drawPixmap(xoff - 18, bcHeight - 2 , partImage.width(), partImage.height(), QPixmap::fromImage(partImage)); + else + p.drawPixmap(xoff - 12, bcHeight - 2 , partImage.width(), partImage.height(), QPixmap::fromImage(partImage)); + } + if (!secondPart.isEmpty()) { + int startXSecondPart = xoff - 12 + fontMetrics.width(firstPart); // 增量包括第一部分的宽度和额外间距,77 + QImage partImage = image.copy(0+6, 0, fontMetrics.width(secondPart), image.height()); // 裁剪出第二部分的图像 + if(Txtwidth > 85){ + startXSecondPart = xoff - 10 + fontMetrics.width(firstPart);//89 + partImage = image.copy(0+6, 0, fontMetrics.width(secondPart), image.height()); // 裁剪出第二部分的图像 + } + else if(Txtwidth < 70){ + startXSecondPart = xoff - 15 + fontMetrics.width(firstPart); + partImage = image.copy(0+4, 0, fontMetrics.width(secondPart), image.height()); + } + p.drawPixmap(startXSecondPart, bcHeight - 2, partImage.width(), partImage.height(), QPixmap::fromImage(partImage)); + } + if (!thirdPart.isEmpty()) { + int startXThirdPart = xoff - 8 + fontMetrics.width(secondPart)+12; // 类似地,增加第二部分的宽度和间距,77 + QImage partImage = image.copy(0+6+36, 0, fontMetrics.width(thirdPart), image.height()); + if(Txtwidth > 85){ + startXThirdPart = xoff - 10 + fontMetrics.width(secondPart)+12;//89 + partImage = image.copy(0+6+36, 0, fontMetrics.width(thirdPart), image.height()); // 裁剪出第三部分的图像 + } + else if(Txtwidth < 70){ + startXThirdPart = xoff - 5 + fontMetrics.width(secondPart)+12; + partImage = image.copy(0+4+30, 0, fontMetrics.width(thirdPart), image.height()); + } + p.drawPixmap(startXThirdPart, bcHeight - 2, partImage.width(), partImage.height(), QPixmap::fromImage(partImage)); + } +// p.drawPixmap(0, 0, img1->width(), img1->height(), QPixmap::fromImage(*img1)); + +// p.drawPixmap(xoff, bcHeight + 1, image.width(), image.height(), QPixmap::fromImage(image)); + + // 绘制第二部分字符 +// QImage tempImg = drawTextToImage(secondPart, font, image.colorSpace()); // 使用相同函数绘制第二部分文字到临时图像 +// p.drawPixmap(xoff + 40, bcHeight + 1 - 2, tempImg.width(), tempImg.height(), QPixmap::fromImage(tempImg)); + +// // 绘制第三部分字符 +// QImage tempImg2 = drawTextToImage(thirdPart, font, image.colorSpace()); // 同理,绘制第三部分 +// p.drawPixmap(xoff + 120, bcHeight + 1 - 2, tempImg2.width(), tempImg2.height(), QPixmap::fromImage(tempImg2)); + + //QPixmap pix3 = QPixmap::fromImage(qimg3); + //ui->label_dislocation->setPixmap(pix3.scaled(ui->label_dislocation->width(), ui->label_dislocation->height(), Qt::KeepAspectRatio)); + } + *img1 = qimg3.copy(0,0,qimg3.width(),qimg3.height()); + + img1->save("./QbarCodemage1.bmp"); + } + else { + int h1 = lastValidRow-1; //24 9 + for(int k = h1; k >= bcHeight; k--){ + for(int j = 0; j < Txtwidth; j ++){ + QRgb rgb = image.pixel(j,k-bcHeight); + image.setPixel( j,k,rgb); + image.setPixel(j,k-bcHeight,0x00ffffff); + } + } // dd djfdkf djfdkf二维码 + xoff = (Txtwidth-bcWidth)/2; + for(int k = 0; k < bcHeight; k++){ + +// if(inkColor){ +// if(kpixel(j,k); + if((xoff+j)save("./QbarCodemage2.bmp"); + } +} + +void QBarCode::ShowBarCode(QString fileName) +{ + //scene = new QGraphicsScene; + scene->clear(); + int scale = ui->BarCodeScale->value(); + scene->setSceneRect( 0,0,bcWidth*(scale),bcHeight*(scale+1)+10); + scene->setItemIndexMethod(QGraphicsScene::NoIndex); + //QPixmap pixmap(QPixmap::fromImage(*img)); + QPixmap pixmap(fileName); + pixmap = pixmap.scaledToHeight(bcHeight*(scale+1)); + /***************设置view的场景*****************************/ + ui->BarCodeView->setScene(scene); + ui->BarCodeView->setRenderHint(QPainter::Antialiasing); + ui->BarCodeView->setCacheMode(QGraphicsView::CacheBackground); + ui->BarCodeView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + ui->BarCodeView->setDragMode(QGraphicsView::ScrollHandDrag); + //ui->graphicsView->resize(400,300); + ui->BarCodeView->setScene(scene);//设置view的场景 + +} +void QBarCode::ShowBarCode(QImage *img) +{ + //scene = new QGraphicsScene; + scene->clear(); + int scale = ui->BarCodeScale->value(); + scene->setSceneRect( 0,0,bcWidth*(scale+1)+10,bcHeight*(scale)); + scene->setItemIndexMethod(QGraphicsScene::NoIndex); + QPixmap pixmap(QPixmap::fromImage(*img)); + //pixmap = pixmap.scaledToHeight(bcHeight*(scale+1)); + pixmap = pixmap.scaledToWidth((scale+1)*bcWidth); + item = scene->addPixmap(pixmap); + /***************设置view的场景*****************************/ + ui->BarCodeView->setScene(scene); + ui->BarCodeView->setRenderHint(QPainter::Antialiasing); + ui->BarCodeView->setCacheMode(QGraphicsView::CacheBackground); + ui->BarCodeView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + ui->BarCodeView->setDragMode(QGraphicsView::ScrollHandDrag); + //ui->graphicsView->resize(400,300); + ui->BarCodeView->setScene(scene);//设置view的场景 +} + + +QString QBarCode::TextToBCImg(bcOption_t *bcVar,QString txt) +{ + + if(txt.isEmpty()){txt = "";return txt;} + // 转换条形码 + // ---- + int index = bcVar->barType; + + TextBarCode(txt, index); + //bcVar->width = imgBar.width(); + //bcVar->height = imgBar.height(); + bcWidth = imgBar.width(); + bcHeight = imgBar.height(); + //qDebug()<<"TextToBCImg"<status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + int w= imgBar.width(); + int h= imgBar.height(); + int n=0; + int hStart=0; + int wStart=0; + //qDebug()< + +#include "BarCode/barcode.h" +#include "QGraphicsScene" +#include "QGraphicsPixmapItem" +#include "SysPara.h" +#include "QTextEdit" +#include "ParaSettingUI.h" + +//typedef struct // BarCodeOption +//{ +// unsigned char xpos; +// unsigned char font; +// unsigned char height; +// unsigned char scale; +// unsigned char text[200]; +//}bcOption_t; +typedef struct { + unsigned int width; + unsigned char height; + unsigned char type; + unsigned char nc; +}bcPara_t; + +namespace Ui { + class QBarCode; +} + +class QBarCode : public QDialog, public ParaSettingUI +{ + Q_OBJECT + +public: + explicit QBarCode(QWidget *parent = 0); + ~QBarCode(); + void bindSysPara(SysPara *sysPara); + //unsigned char pointMap[40*1000]; + QString pictureName;//当前显示的图片 + void SetOption(bcOption_t *bcOption); + void GetOption(bcOption_t *bcOption); + QString bcText; + int bcWidth,bcHeight; + unsigned char flagInsert:1; + unsigned char flagCount:1; + unsigned char inkColor:1; + unsigned char flagNC:5; + + int ImgRightPos(QImage *img); + int ImgLeftPos(QImage *img); + int getDat(unsigned char *dat,int varNum); + int getDat2(SysPara* sysPara,int varNum); +public: + QImage imgBar; + + QString TextToBCImg(bcOption_t *bcVar,QString txt); + void TextBarCode(QString txt, int index); + void GetOption2(bcPara_t *bcOption); + QString getLabe_TxtString(); + QString getVarTxt(bool varEn, unsigned varType);// 0,1,2,3,4 + void extSetText(QString text); + public slots: + void setFontSize(int PixelSize); +private slots: + void onEnCodeBar(); + void onScaleChange(int n); + void onXposChange(int n); + void on_pushBtnColse_pressed(); + void ImgSave(); + void onBarCodeRefresh(QString s); +signals: + void onBarCodeClose(); +private: + + void OnCharRamData(QImage *img); + void OnCharRamData1(QImage *img); + void OnCharRamData2(QImage *img1,int Txtwidth,int height); + void ShowBarCode(QString fileName); + void ShowBarCode(QImage *img); + int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, + int xoff, int yoff, int flags); + int Barcode_ToImage(Barcode_Item * bc ); + int fontSize; + + QGraphicsScene *scene;//声明scene + QGraphicsPixmapItem *item;//声明item + bool bcOK; + QString bcPartial; + QString bcTextinfo; + bool AutoRefresh; + QTextEdit textEdit; + QString txtVar1,txtVar2; + +private: + Ui::QBarCode *ui; +}; + +#endif // QBARCODE_H diff --git a/QBarCode.ui b/QBarCode.ui new file mode 100644 index 0000000..e5d7fb4 --- /dev/null +++ b/QBarCode.ui @@ -0,0 +1,382 @@ + + + QBarCode + + + Qt::NonModal + + + + 0 + 0 + 710 + 350 + + + + + 16777215 + 400 + + + + Qt::StrongFocus + + + Dialog + + + + :/image/BarCode1.png:/image/BarCode1.png + + + false + + + + + + + + 条形码类型 + + + + + + + 条形码高度 + + + + + + + 条码宽度 + + + + + + + + 0 + 0 + + + + + 140 + 0 + + + + + + + + + + + + 1点 + + + + + 2点 + + + + + 3点 + + + + + 4点 + + + + + 5点 + + + + + 6点 + + + + + + + + 文本1 + + + Qt::AlignCenter + + + + + + + + 16777215 + 172 + + + + + + + + 20 + + + + + + + + 60 + 16777215 + + + + false + + + false + + + 1 + + + 10 + + + 1 + + + + + + + 显示缩放 + + + + + + + 墨水类型 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 1 + + + + 黑墨 + + + + + 白墨 + + + + + + + + + + + 文本3 + + + Qt::AlignCenter + + + + + + + false + + + + 80 + 16777215 + + + + + + + + Qt::LeftToRight + + + 计数器2 + + + + + + + + + + 文本2 + + + Qt::AlignCenter + + + + + + + false + + + + 80 + 16777215 + + + + + + + + Qt::LeftToRight + + + 计数器1 + + + + + + + Qt::LeftToRight + + + 插入文档 + + + + + + + 预览 + + + true + + + true + + + + + + + 返回 + + + + + + + 条码保存 + + + + + + + + 16777215 + 16 + + + + + + + + + + + + 16777215 + 16 + + + + FileName + + + Qt::AlignCenter + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + 增加数字行 + + + + + + + 日期 + + + + + + + 时间 + + + + + + + + + + diff --git a/QbarCodemage.bmp b/QbarCodemage.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5bf524002e41f046208b516a6b53f5e2a00fc3bb GIT binary patch literal 5602 zcmeHKK~BUl5DRCHDM>36(1>XT`cdU=`;v#Qz?<-@p!UUF8lWW_0+cS z75fX;2i6Vip*>@7?GyFeBiBY?Tk6XasEo3NmZdVPjPe9>MZKfSC{G|))H|w-@&s~4 zy`#z~Pas#+JF1NG1aigtj(+~S?Qbd^c>F&Z14bC`*EF9VBGM<-sYWou1SdWe%fx%HcWIpa`~tUcaOiFi literal 0 HcmV?d00001 diff --git a/QbarCodemage1.bmp b/QbarCodemage1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3c86c8315c7c1d8c26a55fe6cfe1ae7bc6acb6a8 GIT binary patch literal 7494 zcmeH{F|yN83`Ijt!weKO^sImdP|&d>_Rg1m$jKe$J>&oFp}`sF&DGVBo}y&({pXJ_ zxApa{&ad_URqs#res}v^=k4~P@*m&xUX40_U$1Ke*9NW){F4pb|8=H+J2RmDQw^~< zFxww`cuSS!MU81;_TQ*V>|EV0-EN+6kr|$)_YaUa<}m4}PR3gV6hln@6!F@-_V6=i zkH7yz(XGyWwT)G(HN?r18Pf_+4DQom^CRru`D0zyv4#406O$f)0BdX zV1}2TXtqm-os&sja0@9e2i^xv#+b!~f=>*FCzbEc`< z;44Me{w>rm@tnd*e?!kwt#iW+6^&;?vdQ2dIjb8lZ>%sI-t&J7=Q@aO-d0b2T0& zA+<8us`|<Ny`4XB498JT8yZ`u`&L-*-JXVpiRuUk28B+-SW@h26r_6ET zB(~BS4rW%qgeC$<({SOgoyQW~VXg%eCv`fklvBS1+H*A?CSg`d+OPyqOIa%kki3j3 z1b#EKaMn}ixNs6%=?n)mD_=qrfum`-aM$lVmf#L^Etoi|(_y8Y`X$hwtMM=ivr5v2 zC3srOT1kN9WlSOPo0)~Po-)UUlh{gUIG9=a5}F7cO~Zw|e&?|ScbIFz#7UhFE9KNL jf%aUDhe?=Kk~S>C(^A$-0wgbE3W49uES&X}`I~qF-KG{4 literal 0 HcmV?d00001 diff --git a/QbarCodemage2.bmp b/QbarCodemage2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2fe35efd1ea6f6f6d1820c48936956dbc8b00f81 GIT binary patch literal 9270 zcmeH{L2_F$3`5g(m)-OLUGxMwK=-{Tb{9+w<0qpF;fHPm4KK$>FYcBfqQt;NI2h{oegl zpZX!^_!JMdS{IVl9S&(zV__Rqeeb!JCGyKi-Koxxl=cbYTzQ`Q~Q+!^f@JTyF{ zO;_jw;Sg=;et&AMfUE)#T>NM^V2!3^_HGDWD5Opv_ldeVfkYbw zZ@n&++B$jMsz7g5JGiR5st}P~(rMG_6zrGjZY+&aH|$7AqP@!x0xg9MqdnOY5?YEd z@wPZq8X!feyp0+Og%bi)8({G}vH~$jLcwUN6)nio$^nq#|2l{5L#^K=Zd>i%3VzVQ zRZLqSbwU_Mi?;AS3gn^o-Ol44Zx1FEZ6=DJ?#n8&vFz0itmI^^7`yg2zj&O%6}8i6Gm753Yi@E zqo62)YDXLdA3XcdrdFr;QM(Cs6?#pr`pEh2A52Dt*Mo{yV2qr$tv~wzhwWT|B5uev zrV>D@s@3BywTd{a)vJU)!pA|#0^vyOOh$lcMfQ`?adG9ZfXC?x(`u|d1(Gcs7cxC7 zuKX47I6X#MjTNRqf`#Kkrf0>KzXBeo$4INO!W2lba9qgrthn-5z~l57X*E`u0tpt5 z3z?o3SN;lkoE{^s#tKs)!NPGN)3f5rUjdKPW2DtsVG1NzI4)#*R$Tcj;Bk74v>Gc+ OfdmW3g-p*1<^K<+-vnX+ literal 0 HcmV?d00001 diff --git a/QtQREnCode/121.pro b/QtQREnCode/121.pro new file mode 100644 index 0000000..758982d --- /dev/null +++ b/QtQREnCode/121.pro @@ -0,0 +1,49 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-04-25T18:27:50 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = 121 +TEMPLATE = app + + +SOURCES +=\ + bitstream.cpp \ + mask.cpp \ + qrenc.cpp \ + qrencode.cpp \ + qrinput.cpp \ + qrspec.cpp \ + rscode.cpp \ + split.cpp \ + mainwindow.cpp + +HEADERS += \ + bistream.h \ + mask.h \ + qrencode_inner.h \ + qrinput.h \ + qrspec.h \ + rscode.h \ + split.h \ + mainwindow.h + + + + + + +unix:!macx: LIBS += -L$$PWD/../../../../../../../usr/local/lib/ -lqrencode + +INCLUDEPATH += $$PWD/../../../../../../../usr/local/include +DEPENDPATH += $$PWD/../../../../../../../usr/local/include + +unix:!macx: LIBS += -lpng12 + +FORMS += \ + mainwindow.ui diff --git a/QtQREnCode/bistream.h b/QtQREnCode/bistream.h new file mode 100644 index 0000000..e8362c8 --- /dev/null +++ b/QtQREnCode/bistream.h @@ -0,0 +1,43 @@ +#ifndef BISTREAM_H +#define BISTREAM_H + +/* + * qrencode - QR Code encoder + * + * Binary sequence class. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __BITSTREAM_H__ +#define __BITSTREAM_H__ + +typedef struct { + char *data; +} BitStream; + +extern BitStream *BitStream_new(void); +extern void BitStream_append(BitStream *bstream, BitStream *arg); +extern void BitStream_appendNum(BitStream *bstream, int bits, unsigned int num); +extern void BitStream_appendBytes(BitStream *bstream, int size, unsigned char *data); +extern unsigned int BitStream_size(BitStream *bstream); +extern unsigned char *BitStream_toByte(BitStream *bstream); +extern void BitStream_free(BitStream *bstream); + +#endif /* __BITSTREAM_H__ */ + + +#endif // BISTREAM_H diff --git a/QtQREnCode/bitstream.cpp b/QtQREnCode/bitstream.cpp new file mode 100644 index 0000000..d2feac9 --- /dev/null +++ b/QtQREnCode/bitstream.cpp @@ -0,0 +1,180 @@ +/* + * qrencode - QR Code encoder + * + * Binary sequence class. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include + +#include "bistream.h" + +BitStream *BitStream_new(void) +{ + BitStream *bstream; + + bstream = (BitStream *)malloc(sizeof(BitStream)); + bstream->data = NULL; + + return bstream; +} + +static BitStream *BitStream_newFromNum(int bits, unsigned int num) +{ + unsigned int mask; + int i; + char *p; + BitStream *bstream; + + bstream = BitStream_new(); + bstream->data = (char *)malloc(bits + 1); + + p = bstream->data; + mask = 1 << (bits - 1); + for(i=0; i> 1; + } + *p = '\0'; + + return bstream; +} + +static BitStream *BitStream_newFromBytes(int size, unsigned char *data) +{ + unsigned char mask; + int i, j; + char *p; + BitStream *bstream; + + bstream = BitStream_new(); + bstream->data = (char *)malloc(size * 8 + 1); + + p = bstream->data; + for(i=0; i> 1; + } + } + *p = '\0'; + + return bstream; +} + +void BitStream_append(BitStream *bstream, BitStream *arg) +{ + int l1, l2; + char *_new; + + if(arg == NULL || arg->data == NULL) { + return; + } + if(bstream->data == NULL) { + bstream->data = strdup(arg->data); + return; + } + + l1 = strlen(bstream->data); + l2 = strlen(arg->data); + _new = (char *)malloc(l1 + l2 + 1); + strcpy(_new, bstream->data); + strcat(_new, arg->data); + + free(bstream->data); + bstream->data = _new; +} + +void BitStream_appendNum(BitStream *bstream, int bits, unsigned int num) +{ + BitStream *b; + + b = BitStream_newFromNum(bits, num); + BitStream_append(bstream, b); + BitStream_free(b); +} + +void BitStream_appendBytes(BitStream *bstream, int size, unsigned char *data) +{ + BitStream *b; + + b = BitStream_newFromBytes(size, data); + BitStream_append(bstream, b); + BitStream_free(b); +} + +unsigned int BitStream_size(BitStream *bstream) +{ + if(bstream->data == NULL) return 0; + + return strlen(bstream->data); +} + +unsigned char *BitStream_toByte(BitStream *bstream) +{ + int i, j, size, bytes; + unsigned char *data, v; + char *p; + + size = BitStream_size(bstream); + data = (unsigned char *)malloc((size + 7) / 8); + bytes = size / 8; + + p = bstream->data; + for(i=0; idata != NULL) { + free(bstream->data); + } + free(bstream); +} + diff --git a/QtQREnCode/form.ui b/QtQREnCode/form.ui new file mode 100644 index 0000000..f7d2e81 --- /dev/null +++ b/QtQREnCode/form.ui @@ -0,0 +1,19 @@ + + + Form + + + + 0 + 0 + 662 + 388 + + + + Form + + + + + diff --git a/QtQREnCode/main.cpp b/QtQREnCode/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/QtQREnCode/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/QtQREnCode/mainwindow.cpp b/QtQREnCode/mainwindow.cpp new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/QtQREnCode/mainwindow.cpp @@ -0,0 +1 @@ + diff --git a/QtQREnCode/mainwindow.h b/QtQREnCode/mainwindow.h new file mode 100644 index 0000000..ed42168 --- /dev/null +++ b/QtQREnCode/mainwindow.h @@ -0,0 +1,25 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private slots: + void on_pushButton_clicked(); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/QtQREnCode/mainwindow.ui b/QtQREnCode/mainwindow.ui new file mode 100644 index 0000000..2adb789 --- /dev/null +++ b/QtQREnCode/mainwindow.ui @@ -0,0 +1,173 @@ + + + MainWindow + + + + 0 + 0 + 565 + 435 + + + + MainWindow + + + + + + 330 + 350 + 99 + 27 + + + + encode + + + + + + 10 + 290 + 541 + 51 + + + + + + + 20 + 270 + 67 + 17 + + + + Message + + + + + + 450 + 240 + 85 + 27 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + + + 310 + 240 + 85 + 27 + + + + + L + + + + + M + + + + + H + + + + + Q + + + + + + + 370 + 240 + 67 + 17 + + + + size: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 230 + 250 + 67 + 17 + + + + level: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 40 + 10 + 431 + 211 + + + + TextLabel + + + + + + + 0 + 0 + 565 + 23 + + + + + + + + diff --git a/QtQREnCode/mask.cpp b/QtQREnCode/mask.cpp new file mode 100644 index 0000000..56a07d9 --- /dev/null +++ b/QtQREnCode/mask.cpp @@ -0,0 +1,257 @@ +/* + * qrencode - QR Code encoder + * + * Masking. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include "qrencode.h" +#include "qrencode_inner.h" +#include "qrspec.h" +#include "mask.h" + +/** + * Demerit coefficients. + * See Section 8.8.2, pp.45, JIS X0510:2004. + */ +#define N1 (3) +#define N2 (3) +#define N3 (40) +#define N4 (10) + +#define MASKMAKER(__exp__) \ + int x, y;\ + unsigned int b = 0;\ +\ + for(y=0; y= 5) { + demerit += N1 + (runLength[i] - 5); + //n1 += N1 + (runLength[i] - 5); + } + if((i & 1)) { + if(i >= 3 && i < length-2 && (runLength[i] % 3) == 0) { + fact = runLength[i] / 3; + if(runLength[i-2] == fact && + runLength[i-1] == fact && + runLength[i+1] == fact && + runLength[i+2] == fact) { + if(runLength[i-3] < 0 || runLength[i-3] >= 4 * fact) { + demerit += N3; + //n3 += N3; + } else if(i+3 >= length || runLength[i+3] >= 4 * fact) { + demerit += N3; + //n3 += N3; + } + } + } + } + } + + return demerit; +} + +int Mask_evaluateSymbol(int width, unsigned char *frame) +{ + int x, y; + unsigned char *p; + unsigned char b22, w22; + unsigned int i; + int head; + int demerit = 0; + + p = frame; + i = 0; + for(y=0; y 0 && y > 0) { + b22 = p[0] & p[-1] & p[-width] & p [-width-1]; + w22 = p[0] | p[-1] | p[-width] | p [-width-1]; + if((b22 | (w22 ^ 1))&1) { + demerit += N2; + } + } + if(x == 0 && (p[0] & 1)) { + runLength[0] = -1; + head = 1; + runLength[head] = 1; + } else if(x > 0) { + if((p[0] ^ p[-1]) & 1) { + head++; + runLength[head] = 1; + } else { + runLength[head]++; + } + } + p++; + } + demerit += Mask_calcN1N3(head+1, runLength); + } + + i = 0; + for(x=0; x 0) { + if((p[0] ^ p[-width]) & 1) { + head++; + runLength[head] = 1; + } else { + runLength[head]++; + } + } + p+=width; + } + demerit += Mask_calcN1N3(head+1, runLength); + } + + return demerit; +} + +unsigned char *Mask_mask(int width, unsigned char *frame, QRecLevel level) +{ + int i; + unsigned char *mask, *bestMask; + int minDemerit = INT_MAX; + int bestMaskNum = 0; + int blacks; + int demerit; + + bestMask = NULL; + + for(i=0; i<8; i++) { +// n1 = n2 = n3 = n4 = 0; + demerit = 0; + mask = (unsigned char *)malloc(width * width); + blacks = maskMakers[i](width, frame, mask); + blacks += QRcode_writeFormatInformation(width, mask, i, level); + blacks = 100 * blacks / (width * width); + demerit = (abs(blacks - 50) / 5) * N4; +// n4 = demerit; + if(demerit > minDemerit) { + free(mask); + continue; + } + demerit += Mask_evaluateSymbol(width, mask); +// printf("(%d,%d,%d,%d)=%d\n", n1, n2, n3 ,n4, demerit); + if(demerit < minDemerit) { + minDemerit = demerit; + bestMaskNum = i; + if(bestMask != NULL) { + free(bestMask); + } + bestMask = mask; + } else { + free(mask); + } + } + + return bestMask; +} + diff --git a/QtQREnCode/mask.h b/QtQREnCode/mask.h new file mode 100644 index 0000000..7c545c0 --- /dev/null +++ b/QtQREnCode/mask.h @@ -0,0 +1,37 @@ +#ifndef MASK_H +#define MASK_H + +/* + * qrencode - QR Code encoder + * + * Masking. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __MASK_H__ +#define __MASK_H__ + +#include "qrinput.h" + +extern unsigned char *Mask_makeMask(int width, unsigned char *frame, int mask); +extern int Mask_evaluateSymbol(int width, unsigned char *frame); +extern unsigned char *Mask_mask(int width, unsigned char *frame, QRecLevel level); + +#endif /* __MASK_H__ */ + + +#endif // MASK_H diff --git a/QtQREnCode/qrenc.cpp b/QtQREnCode/qrenc.cpp new file mode 100644 index 0000000..6e17d2b --- /dev/null +++ b/QtQREnCode/qrenc.cpp @@ -0,0 +1,216 @@ + +#include +#include + +#include +#include +#include +#include +#include "mainwindow.h" +#include +#include "ui_mainwindow.h" + +char *intext = " "; +static int casesensitive = 0; +static int eightbit = 0; +static int kanji = 0; +static int version = 0; +static int Size = 3; +static int margin = 4; +static QRecLevel level = QR_ECLEVEL_L; + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + ui->textEdit->setText(tr("1234567893233695")); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +enum { + O_HELP, + O_OUTPUT, + O_SIZE, + O_VERSION, + O_LEVEL, + O_MARGIN, + O_KANJI, + O_CASE, + O_8BIT, +}; + +static const struct option options[] = { + {"h", no_argument , NULL, O_HELP}, + {"o", required_argument, NULL, O_OUTPUT}, + {"l", required_argument, NULL, O_LEVEL}, + {"s", required_argument, NULL, O_SIZE}, + {"v", required_argument, NULL, O_VERSION}, + {"m", required_argument, NULL, O_MARGIN}, + {"k", no_argument , NULL, O_KANJI}, + {"c", no_argument , NULL, O_CASE}, + {"8", no_argument , NULL, O_8BIT}, + {NULL, 0, NULL, 0} +}; + +static void usage(void) +{ + qDebug()<<( +"qrencode version %s\n\n" +"Usage: qrencode [OPTION]... [STRING]\n" +"Encode input data in a QR Code and save as a PNG image.\n\n" +" -h display this message.\n" +" -o FILENAME write PNG image to FILENAME. If '-' is specified, the result\n" +" will be output to standard output.\n" +" -s NUMBER specify the size of dot (pixel). (default=3)\n" +" -l {LMQH} specify error collectin level from L (lowest) to H (highest).\n" +" (default=L)\n" +" -v NUMBER specify the version of the symbol. (default=auto)\n" +" -m NUMBER specify the width of margin. (default=4)\n" +" -k assume that the input text contains kanji (shift-jis).\n" +" -c encode alphabet characters in 8-bit mode. If your application\n" +" is case-sensitive, choose this.\n" +" -8 encode entire data in 8-bit mode. -c and -k will be ignored.\n" +" [STRING] input data. If it is not specified, data will be taken from\n" +" standard input.\n" + ); +} + +#define MAX_DATA_SIZE 7090 /* from the specification */ +static char *readStdin(void) +{ + char *buffer; + int ret; + + buffer = (char *)malloc(MAX_DATA_SIZE); + ret = fread(buffer, 1, MAX_DATA_SIZE, stdin); + if(ret == 0) { + fprintf(stderr, "No input data.\n"); + exit(1); + } + if(!feof(stdin)) { + fprintf(stderr, "Input data is too large.\n"); + exit(1); + } + + buffer[ret] = '\0'; + + return buffer; +} + +static QRcode *encode(const char *intext) +{ + QRencodeMode hint; + QRcode *code; + + if(kanji) { + hint = QR_MODE_KANJI; + } else { + hint = QR_MODE_8; + } + + if(eightbit) { + code = QRcode_encodeString8bit(intext, version, level); + } else { + code = QRcode_encodeString(intext, version, level, hint, casesensitive); + } + + return code; +} + + static void qrencode(const char *intext, const char *outfile) +{ + FILE *fp; + QRcode *qrcode; + //png_structp png_ptr; + //png_infop info_ptr; + unsigned char *row, *p, *q; + int x, y, xx, yy, bit; + int realwidth; + + qrcode = encode(intext); + if(qrcode == NULL) { + fprintf(stderr, "Failed to encode the input data.\n"); + exit(1); + } + + realwidth = (qrcode->width + margin * 2) * Size; + + row = (unsigned char *)malloc(realwidth); + + // top margin + memset(row, 0x0, realwidth ); + + qDebug()<<"1: "<< qrcode->width<width + margin * 2) * Size; + QImage QRImage(realwidth,qrcode->width*Size,QImage::Format_ARGB32 ); + QImage *img; + img = &QRImage; + img->fill(0x00ffffff); + + /* data */ + p = qrcode->data; + int ypos=0;//margin * Size; + int xpos=0; + for(y=0; ywidth; y++) { + bit = 7; + bit = 7 - (margin * Size % 8); + xpos=margin * Size; + for(x=0; xwidth; x++) { + for(xx=0; xxsetPixel(xpos,ypos+yy,0xff000000); + } + } + xpos++; + + } + p++; + bit--; + if(bit < 0) { + //q++; + bit = 7; + } + } + ypos+=Size; + } + img->save("Myqr.bmp"); + + free(row); + QRcode_free(qrcode); +} + + + void MainWindow::on_pushButton_clicked() + { + QString in; + //usage(); + in = ui->textEdit->toPlainText(); + //intext = in.toLatin1().data(); + intext = (char *)malloc(in.length()*2); + memset(intext,0,sizeof(intext)); + //intext =in.unicode(); + //memcpy(&intext[0], in.unicode (),2*in.length()); + memcpy(intext,in.toLocal8Bit().data(),2*in.length()); + + qDebug()<comboBox_size->currentIndex()+3; + qrencode(intext,outfile); + QImage img("Myqr.bmp",0); + ui->labQRImage->setPixmap( QPixmap::fromImage(img,Qt::AutoColor)); + } + +int main(int argc, char **argv) +{ + + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/QtQREnCode/qrencode.cpp b/QtQREnCode/qrencode.cpp new file mode 100644 index 0000000..21c7ef6 --- /dev/null +++ b/QtQREnCode/qrencode.cpp @@ -0,0 +1,419 @@ + +/* + * qrencode - QR Code encoder + * + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include + +#include "qrencode.h" +#include "qrencode_inner.h" +#include "qrspec.h" +#include "bistream.h" +#include "qrinput.h" +#include "rscode.h" +#include "split.h" +#include "mask.h" + +/****************************************************************************** + * Raw code + *****************************************************************************/ + +static void RSblock_init(RSblock *block, int dl, unsigned char *data, int el) +{ + RS *rs; + + block->dataLength = dl; + block->data = data; + block->eccLength = el; + block->ecc = (unsigned char *)malloc(el); + + rs = init_rs(8, 0x11d, 0, 1, el, 255 - dl - el); + encode_rs_char(rs, data, block->ecc); +} + +QRRawCode *QRraw_new(QRinput *input) +{ + QRRawCode *raw; + int *spec; + int i; + RSblock *rsblock; + unsigned char *p; + + p = QRinput_getByteStream(input); + if(p == NULL) { + return NULL; + } + + raw = (QRRawCode *)malloc(sizeof(QRRawCode)); + raw->datacode = p; + spec = QRspec_getEccSpec(input->version, input->level); + raw->version = input->version; + raw->blocks = QRspec_rsBlockNum(spec); + raw->rsblock = (RSblock *)malloc(sizeof(RSblock) * raw->blocks); + + rsblock = raw->rsblock; + p = raw->datacode; + for(i=0; ib1 = QRspec_rsBlockNum1(spec); + raw->dataLength = QRspec_rsBlockNum1(spec) * QRspec_rsDataCodes1(spec) + + QRspec_rsBlockNum2(spec) * QRspec_rsDataCodes2(spec); + raw->eccLength = QRspec_rsBlockNum(spec) * QRspec_rsEccCodes1(spec); + raw->count = 0; + free(spec); + return raw; +} + +/** + * Return a code (byte). + * This function can be called iteratively. + * @param raw raw code. + * @return code + */ +unsigned char QRraw_getCode(QRRawCode *raw) +{ + int col, row; + unsigned char ret; + + if(raw->count < raw->dataLength) { + row = raw->count % raw->blocks; + col = raw->count / raw->blocks; + if(col >= raw->rsblock[row].dataLength) { + row += raw->b1; + } + ret = raw->rsblock[row].data[col]; + } else if(raw->count < raw->dataLength + raw->eccLength) { + row = (raw->count - raw->dataLength) % raw->blocks; + col = (raw->count - raw->dataLength) / raw->blocks; + ret = raw->rsblock[row].ecc[col]; + } else { + return 0; + } + raw->count++; + return ret; +} + +void QRraw_free(QRRawCode *raw) +{ + int i; + + free(raw->datacode); + for(i=0; iblocks; i++) { + free(raw->rsblock[i].ecc); + } + free(raw->rsblock); + free(raw); +} + +/****************************************************************************** + * Frame filling + *****************************************************************************/ + +typedef struct { + int width; + unsigned char *frame; + int x, y; + int dir; + int bit; +} FrameFiller; + +static FrameFiller *FrameFiller_new(int width, unsigned char *frame) +{ + FrameFiller *filler; + + filler = (FrameFiller *)malloc(sizeof(FrameFiller)); + filler->width = width; + filler->frame = frame; + filler->x = width - 1; + filler->y = width - 1; + filler->dir = -1; + filler->bit = -1; + + return filler; +} + +static unsigned char *FrameFiller_next(FrameFiller *filler) +{ + unsigned char *p; + int x, y, w; + + if(filler->bit == -1) { + filler->bit = 0; + return filler->frame + filler->y * filler->width + filler->x; + } + + x = filler->x; + y = filler->y; + p = filler->frame; + w = filler->width; + + if(filler->bit == 0) { + x--; + filler->bit++; + } else { + x++; + y += filler->dir; + filler->bit--; + } + + if(filler->dir < 0) { + if(y < 0) { + y = 0; + x -= 2; + filler->dir = 1; + if(x == 6) { + x--; + y = 9; + } + } + } else { + if(y == w) { + y = w - 1; + x -= 2; + filler->dir = -1; + if(x == 6) { + x--; + y -= 8; + } + } + } + if(x < 0 || y < 0) return NULL; + + filler->x = x; + filler->y = y; + + if(p[y * w + x] & 0x80) { + // This tail recursion could be optimized. + return FrameFiller_next(filler); + } + return &p[y * w + x]; +} + +unsigned char *FrameFiller_fillerTest(int version) +{ + int width, length; + unsigned char *frame, *p; + FrameFiller *filler; + int i, j; + unsigned char cl = 1; + unsigned char ch = 0; + + width = QRspec_getWidth(version); + frame = QRspec_newFrame(version); + filler = FrameFiller_new(width, frame); + length = QRspec_getDataLength(version, QR_ECLEVEL_L) + + QRspec_getECCLength(version, QR_ECLEVEL_L); + + for(i=0; i> 1; + } + for(i=0; i<7; i++) { + if(format & 1) { + blacks += 2; + v = 0x85; + } else { + v = 0x84; + } + frame[width * (width - 7 + i) + 8] = v; + if(i == 0) { + frame[width * 8 + 7] = v; + } else { + frame[width * 8 + 6 - i] = v; + } + format= format >> 1; + } + + return blacks; +} + +/****************************************************************************** + * QR-code encoding + *****************************************************************************/ + +static QRcode *QRcode_new(int version, int width, unsigned char *data) +{ + QRcode *qrcode; + + qrcode = (QRcode *)malloc(sizeof(QRcode)); + qrcode->version = version; + qrcode->width = width; + qrcode->data = data; + + return qrcode; +} + +void QRcode_free(QRcode *qrcode) +{ + if(qrcode == NULL) return; + + if(qrcode->data != NULL) { + free(qrcode->data); + } + free(qrcode); +} + +QRcode *QRcode_encodeMask(QRinput *input, int version, QRecLevel level, int mask) +{ + int width; + QRRawCode *raw; + unsigned char *frame, *masked, *p, code, bit; + FrameFiller *filler; + int i, j; + QRcode *qrcode; + + QRinput_setVersion(input, version); + QRinput_setErrorCorrectionLevel(input, level); + + raw = QRraw_new(input); + if(raw == NULL) { + return NULL; + } + version = raw->version; + width = QRspec_getWidth(version); + frame = QRspec_newFrame(version); + filler = FrameFiller_new(width, frame); + + /* inteleaved data and ecc codes */ + for(i=0; idataLength + raw->eccLength; i++) { + code = QRraw_getCode(raw); + bit = 0x80; + for(j=0; j<8; j++) { + p = FrameFiller_next(filler); + *p = 0x02 | ((bit & code) != 0); + bit = bit >> 1; + } + } + QRraw_free(raw); + /* remainder bits */ + j = QRspec_getRemainder(version); + for(i=0; i + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** \mainpage + * Libqrencode is a library for encoding data in a QR Code symbol, a kind of 2D + * symbology. + * + *

    Encoding

    + * + * There are two ways to encode data: encoding a string or + * encoding a structured data. + * + *

    Encoding a string

    + * You can encode a string by calling QRcode_encodeString(). + * The given string is parsed automatically and encoded. If you want to encode + * data that can be represented as a C string style (NUL terminated), you can + * simply use this way. + * + * If the input data contains Kanji (Shift-JIS) characters and you want to + * encode them as Kanji in QR Code, you should give QR_MODE_KANJI as a hint. + * Otherwise, all of non-alphanumeric characters are encoded as 8 bit data. + * + * Please note that a C string can not contain NUL character. If your data + * contains NUL, you should chose the second way. + * + *

    Encoding a structured data

    + * You can construct a structured input data manually. If the structure of the + * input data is known, you can use this way. + * At first, you must create a ::QRinput object by QRinput_new(). Then, you can + * add input data to the QRinput object by QRinput_append(). + * Finally you can call QRcode_encodeInput() to encode the QRinput data. + * You can reuse the QRinput data again to encode it in other symbols with + * different parameters. + * + *

    Result

    + * The encoded symbol is resulted as a ::QRcode object. It will contain + * its version number, width of the symbol and an array represents the symbol. + * See ::QRcode for the details. You can free the object by QRcode_free(). + * + * Please note that the version of the result may be larger than specified. + * In such cases, the input data would be too large to be encoded in the + * symbol of the specified version. + * + */ + +#ifndef __QRENCODE_H__ +#define __QRENCODE_H__ + +#if defined(__cplusplus) +extern "C" { +#endif + +/** + * Encoding mode. + */ +typedef enum { + QR_MODE_NUM = 0, ///< Numeric mode + QR_MODE_AN, ///< Alphabet-numeric mode + QR_MODE_8, ///< 8-bit data mode + QR_MODE_KANJI ///< Kanji (shift-jis) mode +} QRencodeMode; + +/** + * Level of error correction. + */ +typedef enum { + QR_ECLEVEL_L = 0, ///< lowest + QR_ECLEVEL_M, + QR_ECLEVEL_Q, + QR_ECLEVEL_H ///< highest +} QRecLevel; + +/****************************************************************************** + * Input data + *****************************************************************************/ + +/** + * Data structure to store input data. + */ +typedef struct _QRinput QRinput; + +/** + * Instantiate an input data object. + * @return input object (initialized). + */ +extern QRinput *QRinput_new(void); + +/** + * Append data to the input object. + * The data is copied and appended to the input object. + * @param input input object. + * @param mode encoding mode. + * @param size size of data (byte). + * @param data a pointer to the memory area of the input data. + * @return -1 when the input data is invalid. Otherwise, return 0. + */ +extern int QRinput_append(QRinput *input, QRencodeMode mode, int size, const unsigned char *data); + +/** + * Free the input object. + * All of data chunks in the input object are freed too. + * @param input input object. + */ +extern void QRinput_free(QRinput *input); + +/** + * Validate the input data. + * @param mode + * @param size + * @param data + * @return result return -1 if the input is invalid. Otherwise, return 0. + */ +extern int QRinput_check(QRencodeMode mode, int size, const unsigned char *data); + +/****************************************************************************** + * QRcode output + *****************************************************************************/ + +/** + * QRcode class. + * Symbol data is represented as an array contains width*width uchars. + * Each uchar represents a module (dot). If the less significant bit of + * the uchar is 1, the corresponding module is black. The other bits are + * meaningless for usual applications, but here the specification is described. + * + *
    + * MSB 76543210 LSB
    + *     |||||||`- 1=black/0=white
    + *     ||||||`-- data and ecc code area
    + *     |||||`--- format information
    + *     ||||`---- version information
    + *     |||`----- timing pattern
    + *     ||`------ alignment pattern
    + *     |`------- finder pattern and separator
    + *     `-------- non-data modules (format, timing, etc.)
    + * 
    + */ +typedef struct { + int version; ///< version of the symbol + int width; ///< width of the symbol + unsigned char *data; ///< symbol data +} QRcode; + +/** + * Create a symbol from the input data. + * @param input input data. + * @param version version of the symbol. If 0, the library chooses the minimum + * version for the input data. + * @param level error correction level. + * @return an instance of QRcode class. The version of the result QRcode may + * be larger than the designated version. + */ +extern QRcode *QRcode_encodeInput(QRinput *input, int version, QRecLevel level); + +/** + * Create a symbol from the string. The library automatically parses the input + * string and encodes in a QR Code symbol. + * @param string input string. It should be NULL terminated. + * @param version version of the symbol. If 0, the library chooses the minimum + * version for the input data. + * @param level error correction level. + * @param hint tell the library how non-alphanumerical characters should be + * encoded. If QR_MODE_KANJI is given, kanji characters will be + * encoded as Shif-JIS characters. If QR_MODE_8 is given, all of + * non-alphanumerical characters will be encoded as is. If you want + * to embed UTF-8 string, choose this. + * @param casesensitive case-sensitive(1) or not(0). + * @return an instance of QRcode class. The version of the result QRcode may + * be larger than the designated version. + */ +extern QRcode *QRcode_encodeString(const char *string, int version, QRecLevel level, QRencodeMode hint, int casesensitive); + +/** + * Same to QRcode_qncodeString, but encode whole data in 8-bit mode. + */ +extern QRcode *QRcode_encodeString8bit(const char *string, int version, QRecLevel level); + +/** + * Free the instance of QRcode class. + * @param qrcode an instance of QRcode class. + */ +extern void QRcode_free(QRcode *qrcode); + +#if defined(__cplusplus) +} +#endif + +#endif /* __QRENCODE_H__ */ diff --git a/QtQREnCode/qrencode_inner.cpp b/QtQREnCode/qrencode_inner.cpp new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/QtQREnCode/qrencode_inner.cpp @@ -0,0 +1 @@ + diff --git a/QtQREnCode/qrencode_inner.h b/QtQREnCode/qrencode_inner.h new file mode 100644 index 0000000..f2b0b34 --- /dev/null +++ b/QtQREnCode/qrencode_inner.h @@ -0,0 +1,72 @@ +#ifndef QRENCODE_INNER_H +#define QRENCODE_INNER_H + +/** + * qrencode - QR Code encoder + * + * Header for internal use + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __QRENCODE_INNER_H__ +#define __QRENCODE_INNER_H__ + +/** + * This header file includes definitions for inner use. + */ + +/****************************************************************************** + * Raw code + *****************************************************************************/ + +typedef struct { + int dataLength; + unsigned char *data; + int eccLength; + unsigned char *ecc; +} RSblock; + +typedef struct { + int version; + unsigned char *datacode; + int blocks; + RSblock *rsblock; + int count; + int dataLength; + int eccLength; + int b1; +} QRRawCode; + +extern QRRawCode *QRraw_new(QRinput *input); +extern unsigned char QRraw_getCode(QRRawCode *raw); +extern void QRraw_free(QRRawCode *raw); + +/****************************************************************************** + * Frame filling + *****************************************************************************/ +extern unsigned char *FrameFiller_fillerTest(int version); + +/****************************************************************************** + * Format information + *****************************************************************************/ +extern int QRcode_writeFormatInformation(int width, unsigned char *frame, int mask, QRecLevel level); + +extern QRcode *QRcode_encodeMask(QRinput *input, int version, QRecLevel level, int mask); +#endif /* __QRENCODE_INNER_H__ */ + + +#endif // QRENCODE_INNER_H diff --git a/QtQREnCode/qrinput.cpp b/QtQREnCode/qrinput.cpp new file mode 100644 index 0000000..dc2cd06 --- /dev/null +++ b/QtQREnCode/qrinput.cpp @@ -0,0 +1,776 @@ + +/* + * qrencode - QR Code encoder + * + * Input data chunk class + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include + +#include "qrencode.h" +#include "qrspec.h" +#include "bistream.h" +#include "qrinput.h" + +/****************************************************************************** + * Entry of input data + *****************************************************************************/ + +static QRinput_List *QRinput_newEntry(QRencodeMode mode, int size, const unsigned char *data) +{ + QRinput_List *entry; + + if(QRinput_check(mode, size, data)) { + return NULL; + } + + entry = (QRinput_List *)malloc(sizeof(QRinput_List)); + entry->mode = mode; + entry->size = size; + entry->data = (unsigned char *)malloc(size); + memcpy(entry->data, data, size); + entry->bstream = NULL; + entry->next = NULL; + + return entry; +} + +static QRinput_List *QRinput_freeEntry(QRinput_List *entry) +{ + QRinput_List *next; + + next = entry->next; + free(entry->data); + if(entry->bstream) { + BitStream_free(entry->bstream); + } + free(entry); + + return next; +} + +/****************************************************************************** + * Input Data + *****************************************************************************/ + +QRinput *QRinput_new(void) +{ + QRinput *input; + + input = (QRinput *)malloc(sizeof(QRinput)); + input->head = NULL; + input->tail = NULL; + input->version = 0; + input->level = QR_ECLEVEL_L; + + return input; +} + +int QRinput_getVersion(QRinput *input) +{ + return input->version; +} + +void QRinput_setVersion(QRinput *input, int v) +{ + input->version = v; +} + +void QRinput_setErrorCorrectionLevel(QRinput *input, QRecLevel level) +{ + input->level = level; +} + +QRecLevel QRinput_getErrorCorrectionLevel(QRinput *input) +{ + return input->level; +} + +int QRinput_append(QRinput *input, QRencodeMode mode, int size, const unsigned char *data) +{ + QRinput_List *entry; + + entry = QRinput_newEntry(mode, size, data); + if(entry == NULL) { + return -1; + } + + if(input->tail == NULL) { + input->head = entry; + input->tail = entry; + } else { + input->tail->next = entry; + input->tail = entry; + } + + return 0; +} + +void QRinput_free(QRinput *input) +{ + QRinput_List *list; + + list = input->head; + while(list != NULL) { + list = QRinput_freeEntry(list); + } + + free(input); +} + +/****************************************************************************** + * Numeric data + *****************************************************************************/ + +/** + * Check the input data. + * @param size + * @param data + * @return result + */ +static int QRinput_checkModeNum(int size, const char *data) +{ + int i; + + for(i=0; i '9') + return -1; + } + + return 0; +} + +/** + * Estimates the length of the encoded bit stream of numeric data. + * @param size + * @return number of bits + */ +int QRinput_estimateBitsModeNum(int size) +{ + int w; + int bits; + + w = size / 3; + bits = w * 10; + switch(size - w * 3) { + case 1: + bits += 4; + break; + case 2: + bits += 7; + break; + default: + break; + } + + return bits; +} + +/** + * Convert the number data to a bit stream. + * @param entry + */ +static void QRinput_encodeModeNum(QRinput_List *entry, int version) +{ + int words; + int i; + unsigned int val; + + words = entry->size / 3; + entry->bstream = BitStream_new(); + + val = 0x1; + BitStream_appendNum(entry->bstream, 4, val); + + val = entry->size; + BitStream_appendNum(entry->bstream, QRspec_lengthIndicator(QR_MODE_NUM, version), val); + + for(i=0; idata[i*3 ] - '0') * 100; + val += (entry->data[i*3+1] - '0') * 10; + val += (entry->data[i*3+2] - '0'); + + BitStream_appendNum(entry->bstream, 10, val); + } + + if(entry->size - words * 3 == 1) { + val = entry->data[words*3] - '0'; + BitStream_appendNum(entry->bstream, 4, val); + } else if(entry->size - words * 3 == 2) { + val = (entry->data[words*3 ] - '0') * 10; + val += (entry->data[words*3+1] - '0'); + BitStream_appendNum(entry->bstream, 7, val); + } +} + +/****************************************************************************** + * Alphabet-numeric data + *****************************************************************************/ + +const signed char QRinput_anTable[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1 +}; + +/** + * Check the input data. + * @param size + * @param data + * @return result + */ +static int QRinput_checkModeAn(int size, const char *data) +{ + int i; + + for(i=0; isize / 2; + entry->bstream = BitStream_new(); + + val = 0x2; + BitStream_appendNum(entry->bstream, 4, val); + + val = entry->size; + BitStream_appendNum(entry->bstream, QRspec_lengthIndicator(QR_MODE_AN, version), val); + + for(i=0; idata[i*2 ]) * 45; + val += (unsigned int)QRinput_lookAnTable(entry->data[i*2+1]); + + BitStream_appendNum(entry->bstream, 11, val); + } + + if(entry->size & 1) { + val = (unsigned int)QRinput_lookAnTable(entry->data[words * 2]); + + BitStream_appendNum(entry->bstream, 6, val); + } +} + +/****************************************************************************** + * 8 bit data + *****************************************************************************/ + +/** + * Estimates the length of the encoded bit stream of 8 bit data. + * @param size + * @return number of bits + */ +int QRinput_estimateBitsMode8(int size) +{ + return size * 8; +} + +/** + * Convert the 8bits data to a bit stream. + * @param entry + */ +static void QRinput_encodeMode8(QRinput_List *entry, int version) +{ + int i; + unsigned int val; + + entry->bstream = BitStream_new(); + + val = 0x4; + BitStream_appendNum(entry->bstream, 4, val); + + val = entry->size; + BitStream_appendNum(entry->bstream, QRspec_lengthIndicator(QR_MODE_8, version), val); + + for(i=0; isize; i++) { + BitStream_appendNum(entry->bstream, 8, entry->data[i]); + } +} + + +/****************************************************************************** + * Kanji data + *****************************************************************************/ + +/** + * Estimates the length of the encoded bit stream of kanji data. + * @param size + * @return number of bits + */ +int QRinput_estimateBitsModeKanji(int size) +{ + return (size / 2) * 13; +} + +/** + * Check the input data. + * @param size + * @param data + * @return result + */ +static int QRinput_checkModeKanji(int size, const unsigned char *data) +{ + int i; + unsigned int val; + + if(size & 1) + return -1; + + for(i=0; i 0x9ffc && val < 0xe040) || val > 0xebbf) { + return -1; + } + } + + return 0; +} + +/** + * Convert the kanji data to a bit stream. + * @param entry + */ +static void QRinput_encodeModeKanji(QRinput_List *entry, int version) +{ + int i; + unsigned int val, h; + + entry->bstream = BitStream_new(); + + val = 0x8; + BitStream_appendNum(entry->bstream, 4, val); + + val = entry->size / 2; + BitStream_appendNum(entry->bstream, QRspec_lengthIndicator(QR_MODE_KANJI, version), val); + + for(i=0; isize; i+=2) { + val = ((unsigned int)entry->data[i] << 8) | entry->data[i+1]; + if(val <= 0x9ffc) { + val -= 0x8140; + } else { + val -= 0xc140; + } + h = (val >> 8) * 0xc0; + val = (val & 0xff) + h; + + BitStream_appendNum(entry->bstream, 13, val); + } +} + +/****************************************************************************** + * Validation + *****************************************************************************/ + +/** + * Validate the input data + * @param mode + * @param size + * @param data + * @return result + */ +int QRinput_check(QRencodeMode mode, int size, const unsigned char *data) +{ + switch(mode) { + case QR_MODE_NUM: + return QRinput_checkModeNum(size, (const char *)data); + break; + case QR_MODE_AN: + return QRinput_checkModeAn(size, (const char *)data); + break; + case QR_MODE_KANJI: + return QRinput_checkModeKanji(size, data); + break; + default: + break; + } + + return 0; +} + +QRencodeMode QRinput_identifyMode(const char *string) +{ + unsigned char c, d; + unsigned int word; + + c = string[0]; + + if((unsigned char)((signed char)c - '0') < 10) { + return QR_MODE_NUM; + } else if((QRinput_lookAnTable(c)) >= 0) { + return QR_MODE_AN; + } else { + d = string[1]; + if(d != '\0') { + word = ((unsigned int)c << 8) | d; + if((word >= 0x8140 && word <= 0x9ffc) || (word >= 0xe040 && word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; +} + +/****************************************************************************** + * Estimation of the bit length + *****************************************************************************/ + +/** + * Estimates the length of the encoded bit stream on the current version. + * @param entry + * @param version version of the symbol + * @return number of bits + */ +static int QRinput_estimateBitStreamSizeOfEntry(QRinput_List *entry, int version) +{ + int bits = 0; + int l, m; + int num; + + switch(entry->mode) { + case QR_MODE_NUM: + bits = QRinput_estimateBitsModeNum(entry->size); + break; + case QR_MODE_AN: + bits = QRinput_estimateBitsModeAn(entry->size); + break; + case QR_MODE_8: + bits = QRinput_estimateBitsMode8(entry->size); + break; + case QR_MODE_KANJI: + bits = QRinput_estimateBitsModeKanji(entry->size); + break; + } + + l = QRspec_lengthIndicator(entry->mode, version); + m = 1 << l; + num = (bits + m - 1) / m; + + bits += num * (4 + l); // mode indicator (4bits) + length indicator + + return bits; +} + +/** + * Estimates the length of the encoded bit stream of the data. + * @param input input data + * @param version version of the symbol + * @return number of bits + */ +int QRinput_estimateBitStreamSize(QRinput *input, int version) +{ + QRinput_List *list; + int bits = 0; + + list = input->head; + while(list != NULL) { + bits += QRinput_estimateBitStreamSizeOfEntry(list, version); + list = list->next; + } + + return bits; +} + +/** + * Estimates the required version number of the symbol. + * @param input input data + * @return required version number + */ +static int QRinput_estimateVersion(QRinput *input) +{ + int bits; + int _new, prev; + + _new = 0; + do { + prev = _new; + bits = QRinput_estimateBitStreamSize(input, prev); + _new = QRspec_getMinimumVersion((bits + 7) / 8, input->level); + if (_new == -1) { + return -1; + } + } while (_new > prev); + + return _new; +} + +/****************************************************************************** + * Data conversion + *****************************************************************************/ + +/** + * Convert the input data in the data chunk to a bit stream. + * @param entry + * @return number of bits + */ +static int QRinput_encodeBitStream(QRinput_List *entry, int version) +{ + int words; + QRinput_List *st1, *st2; + + if(entry->bstream != NULL) { + BitStream_free(entry->bstream); + entry->bstream = NULL; + } + + words = QRspec_maximumWords(entry->mode, version); + if(entry->size > words) { + st1 = QRinput_newEntry(entry->mode, words, entry->data); + st2 = QRinput_newEntry(entry->mode, entry->size - words, &entry->data[words]); + QRinput_encodeBitStream(st1, version); + QRinput_encodeBitStream(st2, version); + entry->bstream = BitStream_new(); + BitStream_append(entry->bstream, st1->bstream); + BitStream_append(entry->bstream, st2->bstream); + QRinput_freeEntry(st1); + QRinput_freeEntry(st2); + } else { + switch(entry->mode) { + case QR_MODE_NUM: + QRinput_encodeModeNum(entry, version); + break; + case QR_MODE_AN: + QRinput_encodeModeAn(entry, version); + break; + case QR_MODE_8: + QRinput_encodeMode8(entry, version); + break; + case QR_MODE_KANJI: + QRinput_encodeModeKanji(entry, version); + break; + default: + break; + } + } + + return BitStream_size(entry->bstream); +} + +/** + * Convert the input data to a bit stream. + * @param input input data. + * @return length of the bit stream. + */ +static int QRinput_createBitStream(QRinput *input) +{ + QRinput_List *list; + int bits = 0; + + list = input->head; + while(list != NULL) { + bits += QRinput_encodeBitStream(list, input->version); + list = list->next; + } + + return bits; +} + +/** + * Convert the input data to a bit stream. + * When the version number is given and that is not sufficient, it is increased + * automatically. + * @param input input data. + * @return -1 if the input data was too large. Otherwise 0. + */ +static int QRinput_convertData(QRinput *input) +{ + int bits; + int ver; + + ver = QRinput_estimateVersion(input); + if(ver > QRinput_getVersion(input)) { + QRinput_setVersion(input, ver); + } + + for(;;) { + bits = QRinput_createBitStream(input); + ver = QRspec_getMinimumVersion((bits + 7) / 8, input->level); + if(ver < 0) { + return -1; + } else if(ver > QRinput_getVersion(input)) { + QRinput_setVersion(input, ver); + } else { + break; + } + } + + return 0; +} + +/** + * Create padding bits for the input data. + * @param input input data. + * @return padding bit stream. + */ +static BitStream *QRinput_createPaddingBit(QRinput *input) +{ + int bits, maxbits, words, maxwords, i; + QRinput_List *list; + BitStream *bstream; + + if(input->version <= 0) + return NULL; + + maxwords = QRspec_getDataLength(input->version, input->level); + maxbits = maxwords * 8; + + list = input->head; + bits = 0; + while(list != NULL) { + bits += BitStream_size(list->bstream); + list = list->next; + } + + words = (bits + 7) / 8; + + if(maxbits - bits < 5) { + if(maxbits == bits) { + return NULL; + } else { + bstream = BitStream_new(); + BitStream_appendNum(bstream, maxbits - bits, 0); + return bstream; + } + } + + bits += 4; + words = (bits + 7) / 8; + + bstream = BitStream_new(); + BitStream_appendNum(bstream, words * 8 - bits + 4, 0); + + /* FIXME: It would be able to add padding bits by more efficient way. */ + for(i=0; ihead; + while(list != NULL) { + BitStream_append(bstream, list->bstream); + list = list->next; + } + + return bstream; +} + +/** + * Merge all bit streams in the input data and append padding bits + * @param input input data. + * @return padded merged bit stream + */ + +BitStream *QRinput_getBitStream(QRinput *input) +{ + BitStream *bstream; + BitStream *padding; + + bstream = QRinput_mergeBitStream(input); + if(bstream == NULL) { + return NULL; + } + padding = QRinput_createPaddingBit(input); + if(padding != NULL) { + BitStream_append(bstream, padding); + BitStream_free(padding); + } + + return bstream; +} + +/** + * Pack all bit streams padding bits into a byte array. + * @param input input data. + * @return padded merged byte stream + */ + +unsigned char *QRinput_getByteStream(QRinput *input) +{ + BitStream *bstream; + unsigned char *array; + + bstream = QRinput_getBitStream(input); + if(bstream == NULL) { + return NULL; + } + array = BitStream_toByte(bstream); + BitStream_free(bstream); + + return array; +} diff --git a/QtQREnCode/qrinput.h b/QtQREnCode/qrinput.h new file mode 100644 index 0000000..b84f78d --- /dev/null +++ b/QtQREnCode/qrinput.h @@ -0,0 +1,112 @@ +#ifndef QRINPUT_H +#define QRINPUT_H + +/* + * qrencode - QR Code encoder + * + * Input data chunk class + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __QRINPUT_H__ +#define __QRINPUT_H__ + +#include "qrencode.h" +#include "bistream.h" + +/****************************************************************************** + * Entry of input data + *****************************************************************************/ +typedef struct _QRinput_List QRinput_List; + +struct _QRinput_List { + QRencodeMode mode; + int size; ///< Size of data chunk (byte). + unsigned char *data; ///< Data chunk. + BitStream *bstream; + QRinput_List *next; +}; + +/****************************************************************************** + * Input Data + *****************************************************************************/ +struct _QRinput { + int version; + QRecLevel level; + QRinput_List *head; + QRinput_List *tail; +}; + +/** + * Get current error correction level. + * @param input input data. + * @return Current error correcntion level. + */ +extern QRecLevel QRinput_getErrorCorrectionLevel(QRinput *input); + +/** + * Set error correction level of the QR-code that is to be encoded. + * @param input input data. + * @param level Error correction level. + */ +extern void QRinput_setErrorCorrectionLevel(QRinput *input, QRecLevel level); + +/** + * Get current version. + * @param input input data. + * @return current version. + */ +extern int QRinput_getVersion(QRinput *input); + +/** + * Set version of the QR-code that is to be encoded. + * @param input input data. + * @param version version number (0 = auto) + */ +extern void QRinput_setVersion(QRinput *input, int version); + +/** + * Pack all bit streams padding bits into a byte array. + * @param input input data. + * @return padded merged byte stream + */ +extern unsigned char *QRinput_getByteStream(QRinput *input); + +extern int QRinput_estimateBitsModeNum(int size); +extern int QRinput_estimateBitsModeAn(int size); +extern int QRinput_estimateBitsMode8(int size); +extern int QRinput_estimateBitsModeKanji(int size); + +extern int QRinput_estimateBitStreamSize(QRinput *input, int version); +extern BitStream *QRinput_mergeBitStream(QRinput *input); +extern BitStream *QRinput_getBitStream(QRinput *input); + +extern const signed char QRinput_anTable[]; +extern QRencodeMode QRinput_identifyMode(const char *string); + +/** + * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19). + * @param __c__ character + * @return value + */ +#define QRinput_lookAnTable(__c__) \ + ((__c__ & 0x80)?-1:QRinput_anTable[(int)__c__]) + +#endif /* __QRINPUT_H__ */ + + +#endif // QRINPUT_H diff --git a/QtQREnCode/qrspec.cpp b/QtQREnCode/qrspec.cpp new file mode 100644 index 0000000..0203bda --- /dev/null +++ b/QtQREnCode/qrspec.cpp @@ -0,0 +1,574 @@ + +/* + * qrencode - QR Code encoder + * + * QR Code specification in convenient format. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include + +#include "qrspec.h" + +/****************************************************************************** + * Version and capacity + *****************************************************************************/ + +typedef struct { + int width; //< Edge length of the symbol + int words; //< Data capacity (bytes) + int remainder; //< Remainder bit (bits) + int ec[4]; //< Number of ECC code (bytes) +} QRspec_Capacity; + +/** + * Table of the capacity of symbols + * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004. + */ +static const QRspec_Capacity qrspecCapacity[QRSPEC_VERSION_MAX + 1] = { + { 0, 0, 0, { 0, 0, 0, 0}}, + { 21, 26, 0, { 7, 10, 13, 17}}, // 1 + { 25, 44, 7, { 10, 16, 22, 28}}, + { 29, 70, 7, { 15, 26, 36, 44}}, + { 33, 100, 7, { 20, 36, 52, 64}}, + { 37, 134, 7, { 26, 48, 72, 88}}, // 5 + { 41, 172, 7, { 36, 64, 96, 112}}, + { 45, 196, 0, { 40, 72, 108, 130}}, + { 49, 242, 0, { 48, 88, 132, 156}}, + { 53, 292, 0, { 60, 110, 160, 192}}, + { 57, 346, 0, { 72, 130, 192, 224}}, //10 + { 61, 404, 0, { 80, 150, 224, 264}}, + { 65, 466, 0, { 96, 176, 260, 308}}, + { 69, 532, 0, { 104, 198, 288, 352}}, + { 73, 581, 3, { 120, 216, 320, 384}}, + { 77, 655, 3, { 132, 240, 360, 432}}, //15 + { 81, 733, 3, { 144, 280, 408, 480}}, + { 85, 815, 3, { 168, 308, 448, 532}}, + { 89, 901, 3, { 180, 338, 504, 588}}, + { 93, 991, 3, { 196, 364, 546, 650}}, + { 97, 1085, 3, { 224, 416, 600, 700}}, //20 + {101, 1156, 4, { 224, 442, 644, 750}}, + {105, 1258, 4, { 252, 476, 690, 816}}, + {109, 1364, 4, { 270, 504, 750, 900}}, + {113, 1474, 4, { 300, 560, 810, 960}}, + {117, 1588, 4, { 312, 588, 870, 1050}}, //25 + {121, 1706, 4, { 336, 644, 952, 1110}}, + {125, 1828, 4, { 360, 700, 1020, 1200}}, + {129, 1921, 3, { 390, 728, 1050, 1260}}, + {133, 2051, 3, { 420, 784, 1140, 1350}}, + {137, 2185, 3, { 450, 812, 1200, 1440}}, //30 + {141, 2323, 3, { 480, 868, 1290, 1530}}, + {145, 2465, 3, { 510, 924, 1350, 1620}}, + {149, 2611, 3, { 540, 980, 1440, 1710}}, + {153, 2761, 3, { 570, 1036, 1530, 1800}}, + {157, 2876, 0, { 570, 1064, 1590, 1890}}, //35 + {161, 3034, 0, { 600, 1120, 1680, 1980}}, + {165, 3196, 0, { 630, 1204, 1770, 2100}}, + {169, 3362, 0, { 660, 1260, 1860, 2220}}, + {173, 3532, 0, { 720, 1316, 1950, 2310}}, + {177, 3706, 0, { 750, 1372, 2040, 2430}} //40 +}; + +int QRspec_getDataLength(int version, QRecLevel level) +{ + return qrspecCapacity[version].words - qrspecCapacity[version].ec[level]; +} + +int QRspec_getECCLength(int version, QRecLevel level) +{ + return qrspecCapacity[version].ec[level]; +} + +int QRspec_getMinimumVersion(int size, QRecLevel level) +{ + int i; + int words; + + for(i=1; i<= QRSPEC_VERSION_MAX; i++) { + words = qrspecCapacity[i].words - qrspecCapacity[i].ec[level]; + if(words >= size) return i; + } + + return -1; +} + +int QRspec_getWidth(int version) +{ + return qrspecCapacity[version].width; +} + +int QRspec_getRemainder(int version) +{ + return qrspecCapacity[version].remainder; +} + +/****************************************************************************** + * Length indicator + *****************************************************************************/ + +static const int lengthTableBits[4][3] = { + {10, 12, 14}, + { 9, 11, 13}, + { 8, 16, 16}, + { 8, 10, 12} +}; + +int QRspec_lengthIndicator(QRencodeMode mode, int version) +{ + int l; + + if(version <= 9) { + l = 0; + } else if(version <= 26) { + l = 1; + } else { + l = 2; + } + + return lengthTableBits[mode][l]; +} + +int QRspec_maximumWords(QRencodeMode mode, int version) +{ + int l; + int bits; + int words; + + if(version <= 9) { + l = 0; + } else if(version <= 26) { + l = 1; + } else { + l = 2; + } + + bits = lengthTableBits[mode][l]; + words = (1 << bits) - 1; + if(mode == QR_MODE_KANJI) { + words *= 2; // the number of bytes is required + } + + return words; +} + +/****************************************************************************** + * Error correction code + *****************************************************************************/ + +/** + * Table of the error correction code (Reed-Solomon block) + * See Table 12-16 (pp.30-36), JIS X0510:2004. + */ +static const int eccTable[QRSPEC_VERSION_MAX+1][4][2] = { + {{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}}, + {{ 1, 0}, { 1, 0}, { 1, 0}, { 1, 0}}, // 1 + {{ 1, 0}, { 1, 0}, { 1, 0}, { 1, 0}}, + {{ 1, 0}, { 1, 0}, { 2, 0}, { 2, 0}}, + {{ 1, 0}, { 2, 0}, { 2, 0}, { 4, 0}}, + {{ 1, 0}, { 2, 0}, { 2, 2}, { 2, 2}}, // 5 + {{ 2, 0}, { 4, 0}, { 4, 0}, { 4, 0}}, + {{ 2, 0}, { 4, 0}, { 2, 4}, { 4, 1}}, + {{ 2, 0}, { 2, 2}, { 4, 2}, { 4, 2}}, + {{ 2, 0}, { 3, 2}, { 4, 4}, { 4, 4}}, + {{ 2, 2}, { 4, 1}, { 6, 2}, { 6, 2}}, //10 + {{ 4, 0}, { 1, 4}, { 4, 4}, { 3, 8}}, + {{ 2, 2}, { 6, 2}, { 4, 6}, { 7, 4}}, + {{ 4, 0}, { 8, 1}, { 8, 4}, {12, 4}}, + {{ 3, 1}, { 4, 5}, {11, 5}, {11, 5}}, + {{ 5, 1}, { 5, 5}, { 5, 7}, {11, 7}}, //15 + {{ 5, 1}, { 7, 3}, {15, 2}, { 3, 13}}, + {{ 1, 5}, {10, 1}, { 1, 15}, { 2, 17}}, + {{ 5, 1}, { 9, 4}, {17, 1}, { 2, 19}}, + {{ 3, 4}, { 3, 11}, {17, 4}, { 9, 16}}, + {{ 3, 5}, { 3, 13}, {15, 5}, {15, 10}}, //20 + {{ 4, 4}, {17, 0}, {17, 6}, {19, 6}}, + {{ 2, 7}, {17, 0}, { 7, 16}, {34, 0}}, + {{ 4, 5}, { 4, 14}, {11, 14}, {16, 14}}, + {{ 6, 4}, { 6, 14}, {11, 16}, {30, 2}}, + {{ 8, 4}, { 8, 13}, { 7, 22}, {22, 13}}, //25 + {{10, 2}, {19, 4}, {28, 6}, {33, 4}}, + {{ 8, 4}, {22, 3}, { 8, 26}, {12, 28}}, + {{ 3, 10}, { 3, 23}, { 4, 31}, {11, 31}}, + {{ 7, 7}, {21, 7}, { 1, 37}, {19, 26}}, + {{ 5, 10}, {19, 10}, {15, 25}, {23, 25}}, //30 + {{13, 3}, { 2, 29}, {42, 1}, {23, 28}}, + {{17, 0}, {10, 23}, {10, 35}, {19, 35}}, + {{17, 1}, {14, 21}, {29, 19}, {11, 46}}, + {{13, 6}, {14, 23}, {44, 7}, {59, 1}}, + {{12, 7}, {12, 26}, {39, 14}, {22, 41}}, //35 + {{ 6, 14}, { 6, 34}, {46, 10}, { 2, 64}}, + {{17, 4}, {29, 14}, {49, 10}, {24, 46}}, + {{ 4, 18}, {13, 32}, {48, 14}, {42, 32}}, + {{20, 4}, {40, 7}, {43, 22}, {10, 67}}, + {{19, 6}, {18, 31}, {34, 34}, {20, 61}},//40 +}; + +int *QRspec_getEccSpec(int version, QRecLevel level) +{ + int b1, b2; + int data, ecc; + int *array; + + b1 = eccTable[version][level][0]; + b2 = eccTable[version][level][1]; + + data = QRspec_getDataLength(version, level); + ecc = QRspec_getECCLength(version, level); + + array = (int *)malloc(sizeof(int) * 6); + + if(b2 == 0) { + array[0] = b1; + array[1] = data / b1; + array[2] = ecc / b1; + array[3] = array[4] = array[5] = 0; + } else { + array[0] = b1; + array[1] = data / (b1 + b2); + array[2] = ecc / (b1 + b2); + array[3] = b2; + array[4] = array[1] + 1; + array[5] = (ecc - (array[2] * b1)) / b2; + } + + return array; +} + +/****************************************************************************** + * Alignment pattern + *****************************************************************************/ + +/** + * Positions of alignment patterns. + * This array includes only the second and the third position of the alignment + * patterns. Rest of them can be calculated from the distance between them. + * + * See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + */ +static const int alignmentPattern[QRSPEC_VERSION_MAX+1][2] = { + { 0, 0}, + { 0, 0}, {18, 0}, {22, 0}, {26, 0}, {30, 0}, // 1- 5 + {34, 0}, {22, 38}, {24, 42}, {26, 46}, {28, 50}, // 6-10 + {30, 54}, {32, 58}, {34, 62}, {26, 46}, {26, 48}, //11-15 + {26, 50}, {30, 54}, {30, 56}, {30, 58}, {34, 62}, //16-20 + {28, 50}, {26, 50}, {30, 54}, {28, 54}, {32, 58}, //21-25 + {30, 58}, {34, 62}, {26, 50}, {30, 54}, {26, 52}, //26-30 + {30, 56}, {34, 60}, {30, 58}, {34, 62}, {30, 54}, //31-35 + {24, 50}, {28, 54}, {32, 58}, {26, 54}, {30, 58}, //35-40 +}; + +QRspec_Alignment *QRspec_getAlignmentPattern(int version) +{ + int width; + int d, w, x, y, cx, cy; + QRspec_Alignment *al; + int *p; + + if(version < 2) return NULL; + + al = (QRspec_Alignment *)malloc(sizeof(QRspec_Alignment)); + + width = qrspecCapacity[version].width; + d = alignmentPattern[version][1] - alignmentPattern[version][0]; + if(d < 0) { + w = 2; + } else { + w = (width - alignmentPattern[version][0]) / d + 2; + } + + al->n = w * w - 3; + al->pos = (int *)malloc(sizeof(int) * al->n * 2); + + if(al->n == 1) { + al->pos[0] = alignmentPattern[version][0]; + al->pos[1] = alignmentPattern[version][0]; + + return al; + } +#if 0 + /* Just for debug purpose */ + printf("%d ", version); + cx = alignmentPattern[version][0]; + for(x=0; xpos; + + cx = alignmentPattern[version][0]; + for(x=1; xpos != NULL) { + free(al->pos); + } + free(al); + } +} + +/****************************************************************************** + * Version information pattern + *****************************************************************************/ + +/** + * Version information pattern (BCH coded). + * See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + */ +static const unsigned int versionPattern[QRSPEC_VERSION_MAX - 6] = { + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 +}; + +unsigned int QRspec_getVersionPattern(int version) +{ + if(version < 7 || version > QRSPEC_VERSION_MAX) return 0; + + return versionPattern[version -7]; +} + +/****************************************************************************** + * Format information + *****************************************************************************/ + +/* See calcFormatInfo in tests/test_qrspec.c */ +static const unsigned int formatInfo[4][8] = { + {0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976}, + {0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0}, + {0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed}, + {0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b} +}; + +unsigned int QRspec_getFormatInfo(int mask, QRecLevel level) +{ + if(mask < 0 || mask > 7) return 0; + + return formatInfo[level][mask]; +} + +/****************************************************************************** + * Frame + *****************************************************************************/ + +/** + * Cache of initial frames. + */ +/* C99 says that static storage shall be initialized to a null pointer + * by compiler. */ +static unsigned char *frames[QRSPEC_VERSION_MAX + 1]; + +/** + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ +static void putFinderPattern(unsigned char *frame, int width, int ox, int oy) +{ + static const unsigned char finder[] = { + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, + 0xc1, 0xc0, 0xc1, 0xc1, 0xc1, 0xc0, 0xc1, + 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, + }; + int x, y; + const unsigned char *s; + + frame += oy * width + ox; + s = finder; + for(y=0; y<7; y++) { + for(x=0; x<7; x++) { + frame[x] = s[x]; + } + frame += width; + s += 7; + } +} + +/** + * Put an alignment pattern. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ +static void putAlignmentPattern(unsigned char *frame, int width, int ox, int oy) +{ + static const unsigned char finder[] = { + 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, + 0xa1, 0xa0, 0xa0, 0xa0, 0xa1, + 0xa1, 0xa0, 0xa1, 0xa0, 0xa1, + 0xa1, 0xa0, 0xa0, 0xa0, 0xa1, + 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, + }; + int x, y; + const unsigned char *s; + + frame += (oy - 2) * width + ox - 2; + s = finder; + for(y=0; y<5; y++) { + for(x=0; x<5; x++) { + frame[x] = s[x]; + } + frame += width; + s += 5; + } +} + +static unsigned char *QRspec_createFrame(int version) +{ + unsigned char *frame, *p, *q; + int width; + int x, y; + unsigned int verinfo, mask; + QRspec_Alignment *alignment; + + width = qrspecCapacity[version].width; + frame = (unsigned char *)malloc(width * width); + memset(frame, 0, width * width); + /* Finder pattern */ + putFinderPattern(frame, width, 0, 0); + putFinderPattern(frame, width, width - 7, 0); + putFinderPattern(frame, width, 0, width - 7); + /* Separator */ + p = frame; + q = frame + width * (width - 7); + for(y=0; y<7; y++) { + p[7] = 0xc0; + p[width - 8] = 0xc0; + q[7] = 0xc0; + p += width; + q += width; + } + memset(frame + width * 7, 0xc0, 8); + memset(frame + width * 8 - 8, 0xc0, 8); + memset(frame + width * (width - 8), 0xc0, 8); + /* Mask format information area */ + memset(frame + width * 8, 0x84, 9); + memset(frame + width * 9 - 8, 0x84, 8); + p = frame + 8; + for(y=0; y<8; y++) { + *p = 0x84; + p += width; + } + p = frame + width * (width - 7) + 8; + for(y=0; y<7; y++) { + *p = 0x84; + p += width; + } + /* Timing pattern */ + p = frame + width * 6 + 8; + q = frame + width * 8 + 6; + for(x=1; xn; x++) { + putAlignmentPattern(frame, width, + alignment->pos[x*2], alignment->pos[x*2+1]); + } + QRspec_freeAlignment(alignment); + } + /* Version information */ + if(version >= 7) { + verinfo = QRspec_getVersionPattern(version); + + p = frame + width * (width - 11); + mask = 0x20000; + for(x=0; x<6; x++) { + for(y=0; y<3; y++) { + p[width * y + x] = 0x88 | ((mask & verinfo) != 0); + mask = mask >> 1; + } + } + + p = frame + width - 11; + mask = 0x20000; + for(y=0; y<6; y++) { + for(x=0; x<3; x++) { + p[x] = 0x88 | ((mask & verinfo) != 0); + mask = mask >> 1; + } + p += width; + } + } + /* and a little bit... */ + frame[width * (width - 8) + 8] = 0x81; + + return frame; +} + +unsigned char *QRspec_newFrame(int version) +{ + unsigned char *frame; + int width; + + if(version < 1 || version > QRSPEC_VERSION_MAX) return NULL; + + if(frames[version] == NULL) { + frames[version] = QRspec_createFrame(version); + } + width = qrspecCapacity[version].width; + frame = (unsigned char *)malloc(width * width); + memcpy(frame, frames[version], width * width); + + return frame; +} diff --git a/QtQREnCode/qrspec.h b/QtQREnCode/qrspec.h new file mode 100644 index 0000000..3f51b32 --- /dev/null +++ b/QtQREnCode/qrspec.h @@ -0,0 +1,193 @@ +#ifndef QRSPEC_H +#define QRSPEC_H + +/* + * qrencode - QR Code encoder + * + * QR Code specification in convenient format. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __QRSPEC_H__ +#define __QRSPEC_H__ + +#include "qrencode.h" + +/****************************************************************************** + * Version and capacity + *****************************************************************************/ + +/** + * Maximum version (size) of QR-code symbol. + */ +#define QRSPEC_VERSION_MAX 40 + +/** + * Maximum width of a symbol + */ +#define QRSPEC_WIDTH_MAX 177 + +/** + * Return maximum data code length (bytes) for the version. + * @param version + * @param level + * @return maximum size (bytes) + */ +extern int QRspec_getDataLength(int version, QRecLevel level); + +/** + * Return maximum error correction code length (bytes) for the version. + * @param version + * @param level + * @return ECC size (bytes) + */ +extern int QRspec_getECCLength(int version, QRecLevel level); + +/** + * Return a version number that satisfies the input code length. + * @param size input code length (byte) + * @param level + * @return version number + */ +extern int QRspec_getMinimumVersion(int size, QRecLevel level); + +/** + * Return the width of the symbol for the version. + * @param version + * @return width + */ +extern int QRspec_getWidth(int version); + +/** + * Return the numer of remainder bits. + * @param version + * @return number of remainder bits + */ +extern int QRspec_getRemainder(int version); + +/****************************************************************************** + * Length indicator + *****************************************************************************/ + +/** + * Return the size of lenght indicator for the mode and version. + * @param mode + * @param version + * @return the size of the appropriate length indicator (bits). + */ +extern int QRspec_lengthIndicator(QRencodeMode mode, int version); + +/** + * Return the maximum length for the mode and version. + * @param mode + * @param version + * @return the maximum length (bytes) + */ +extern int QRspec_maximumWords(QRencodeMode mode, int version); + +/****************************************************************************** + * Error correction code + *****************************************************************************/ + +/** + * Return an array of ECC specification. + * @param version + * @param level + * @return an array of ECC specification contains as following: + * {# of type1 blocks, # of data code, # of ecc code, + * # of type2 blocks, # of data code, # of ecc code} + * It can be freed by calling free(). + */ +int *QRspec_getEccSpec(int version, QRecLevel level); + +#define QRspec_rsBlockNum(__spec__) (__spec__[0] + __spec__[3]) +#define QRspec_rsBlockNum1(__spec__) (__spec__[0]) +#define QRspec_rsDataCodes1(__spec__) (__spec__[1]) +#define QRspec_rsEccCodes1(__spec__) (__spec__[2]) +#define QRspec_rsBlockNum2(__spec__) (__spec__[3]) +#define QRspec_rsDataCodes2(__spec__) (__spec__[4]) +#define QRspec_rsEccCodes2(__spec__) (__spec__[5]) + +/****************************************************************************** + * Alignment pattern + *****************************************************************************/ + +/** + * Array of positions of alignment patterns. + * X and Y coordinates are interleaved into 'pos'. + */ +typedef struct { + int n; //< Number of patterns + int *pos; +} QRspec_Alignment; + +/** + * Return positions of alignment patterns. + * @param version + * @return a QRspec_Alignment object that contains all of positions of alignment + * patterns. + */ +extern QRspec_Alignment *QRspec_getAlignmentPattern(int version); + +/** + * Free QRspec_Alignment instance. + * @param al QRspec_Alignment instance. + */ +extern void QRspec_freeAlignment(QRspec_Alignment *al); + +/****************************************************************************** + * Version information pattern + *****************************************************************************/ + +/** + * Return BCH encoded version information pattern that is used for the symbol + * of version 7 or greater. Use lower 18 bits. + * @param version + * @return BCH encoded version information pattern + */ +extern unsigned int QRspec_getVersionPattern(int version); + +/****************************************************************************** + * Format information + *****************************************************************************/ + +/** + * Return BCH encoded format information pattern. + * @param mask + * @param level + * @return BCH encoded format information pattern + */ +extern unsigned int QRspec_getFormatInfo(int mask, QRecLevel level); + +/****************************************************************************** + * Frame + *****************************************************************************/ + +/** + * Return a copy of initialized frame. + * When the same version is requested twice or more, a copy of cached frame + * is returned. + * @param version + * @return Array of unsigned char. You can free it by free(). + */ +/* WARNING: Thread unsafe!!! */ +extern unsigned char *QRspec_newFrame(int version); + +#endif /* __QRSPEC_H__ */ + + +#endif // QRSPEC_H diff --git a/QtQREnCode/rscode.cpp b/QtQREnCode/rscode.cpp new file mode 100644 index 0000000..0c5754d --- /dev/null +++ b/QtQREnCode/rscode.cpp @@ -0,0 +1,291 @@ + +/* + * qrencode - QR Code encoder + * + * Reed solomon encoder. This code is taken from Phil Karn's libfec then + * editted and packed into a pair of .c and .h files. + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include "rscode.h" + +/* Stuff specific to the 8-bit symbol version of the general purpose RS codecs + * + */ +typedef unsigned char data_t; + + +/** + * Reed-Solomon codec control block + */ +struct _RS { + int mm; /* Bits per symbol */ + int nn; /* Symbols per block (= (1<= rs->nn) { + x -= rs->nn; + x = (x >> rs->mm) + (x & rs->nn); + } + return x; +} + + +#define MODNN(x) modnn(rs,x) + +#define MM (rs->mm) +#define NN (rs->nn) +#define ALPHA_TO (rs->alpha_to) +#define INDEX_OF (rs->index_of) +#define GENPOLY (rs->genpoly) +#define NROOTS (rs->nroots) +#define FCR (rs->fcr) +#define PRIM (rs->prim) +#define IPRIM (rs->iprim) +#define PAD (rs->pad) +#define A0 (NN) + + +/* Initialize a Reed-Solomon codec + * symsize = symbol size, bits + * gfpoly = Field generator polynomial coefficients + * fcr = first root of RS code generator polynomial, index form + * prim = primitive element to generate polynomial roots + * nroots = RS code generator polynomial degree (number of roots) + * pad = padding bytes at front of shortened block + */ +static RS *init_rs_char(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad) +{ + RS *rs; + + +/* Common code for intializing a Reed-Solomon control block (char or int symbols) + * Copyright 2004 Phil Karn, KA9Q + * May be used under the terms of the GNU Lesser General Public License (LGPL) + */ +//#undef NULL +//#define NULL ((RS *)0) + + int i, j, sr,root,iprim; + + rs = NULL; + /* Check parameter ranges */ + if(symsize < 0 || symsize > 8*sizeof(data_t)){ + goto done; + } + + if(fcr < 0 || fcr >= (1<= (1<= (1<= ((1<mm = symsize; + rs->nn = (1<pad = pad; + + rs->alpha_to = (data_t *)malloc(sizeof(data_t)*(rs->nn+1)); + if(rs->alpha_to == NULL){ + free(rs); + rs = NULL; + goto done; + } + rs->index_of = (data_t *)malloc(sizeof(data_t)*(rs->nn+1)); + if(rs->index_of == NULL){ + free(rs->alpha_to); + free(rs); + rs = NULL; + goto done; + } + + /* Generate Galois field lookup tables */ + rs->index_of[0] = A0; /* log(zero) = -inf */ + rs->alpha_to[A0] = 0; /* alpha**-inf = 0 */ + sr = 1; + for(i=0;inn;i++){ + rs->index_of[sr] = i; + rs->alpha_to[i] = sr; + sr <<= 1; + if(sr & (1<nn; + } + if(sr != 1){ + /* field generator polynomial is not primitive! */ + free(rs->alpha_to); + free(rs->index_of); + free(rs); + rs = NULL; + goto done; + } + + /* Form RS code generator polynomial from its roots */ + rs->genpoly = (data_t *)malloc(sizeof(data_t)*(nroots+1)); + if(rs->genpoly == NULL){ + free(rs->alpha_to); + free(rs->index_of); + free(rs); + rs = NULL; + goto done; + } + rs->fcr = fcr; + rs->prim = prim; + rs->nroots = nroots; + rs->gfpoly = gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for(iprim=1;(iprim % prim) != 0;iprim += rs->nn) + ; + rs->iprim = iprim / prim; + + rs->genpoly[0] = 1; + for (i = 0,root=fcr*prim; i < nroots; i++,root += prim) { + rs->genpoly[i+1] = 1; + + /* Multiply rs->genpoly[] by @**(root + x) */ + for (j = i; j > 0; j--){ + if (rs->genpoly[j] != 0) + rs->genpoly[j] = rs->genpoly[j-1] ^ rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[j]] + root)]; + else + rs->genpoly[j] = rs->genpoly[j-1]; + } + /* rs->genpoly[0] can never be zero */ + rs->genpoly[0] = rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[0]] + root)]; + } + /* convert rs->genpoly[] to index form for quicker encoding */ + for (i = 0; i <= nroots; i++) + rs->genpoly[i] = rs->index_of[rs->genpoly[i]]; + done:; + + return rs; +} + +RS *init_rs(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad) +{ + RS *rs; + + for(rs = rslist; rs != NULL; rs = rs->next) { + if(rs->mm != symsize) continue; + if(rs->gfpoly != gfpoly) continue; + if(rs->fcr != fcr) continue; + if(rs->prim != prim) continue; + if(rs->nroots != nroots) continue; + if(rs->pad != pad) continue; + + return rs; + } + + rs = init_rs_char(symsize, gfpoly, fcr, prim, nroots, pad); + rs->next = rslist; + rslist = rs; + + return rs; +} + + +void free_rs_char(RS *rs) +{ + free(rs->alpha_to); + free(rs->index_of); + free(rs->genpoly); + free(rs); +} + +/* The guts of the Reed-Solomon encoder, meant to be #included + * into a function body with the following typedefs, macros and variables supplied + * according to the code parameters: + + * data_t - a typedef for the data symbol + * data_t data[] - array of NN-NROOTS-PAD and type data_t to be encoded + * data_t parity[] - an array of NROOTS and type data_t to be written with parity symbols + * NROOTS - the number of roots in the RS code generator polynomial, + * which is the same as the number of parity symbols in a block. + Integer variable or literal. + * + * NN - the total number of symbols in a RS block. Integer variable or literal. + * PAD - the number of pad symbols in a block. Integer variable or literal. + * ALPHA_TO - The address of an array of NN elements to convert Galois field + * elements in index (log) form to polynomial form. Read only. + * INDEX_OF - The address of an array of NN elements to convert Galois field + * elements in polynomial form to index (log) form. Read only. + * MODNN - a function to reduce its argument modulo NN. May be inline or a macro. + * GENPOLY - an array of NROOTS+1 elements containing the generator polynomial in index form + + * The memset() and memmove() functions are used. The appropriate header + * file declaring these functions (usually ) must be included by the calling + * program. + + * Copyright 2004, Phil Karn, KA9Q + * May be used under the terms of the GNU Lesser General Public License (LGPL) + */ + +#undef A0 +#define A0 (NN) /* Special reserved value encoding zero in index form */ + +void encode_rs_char(RS *rs, const data_t *data, data_t *parity) +{ + int i, j; + data_t feedback; + + memset(parity,0,NROOTS*sizeof(data_t)); + + for(i=0;i + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __RSCODE_H__ +#define __RSCODE_H__ + +/* + * General purpose RS codec, 8-bit symbols. + */ + +typedef struct _RS RS; + +/* WARNING: Thread unsafe!!! */ +extern RS *init_rs(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad); +extern void encode_rs_char(RS *rs, const unsigned char *data, unsigned char *parity); +extern void free_rs_char(RS *rs); + +#endif /* __RSCODE_H__ */ + + +#endif // RSCODE_H diff --git a/QtQREnCode/split.cpp b/QtQREnCode/split.cpp new file mode 100644 index 0000000..6574de8 --- /dev/null +++ b/QtQREnCode/split.cpp @@ -0,0 +1,213 @@ + +/* + * qrencode - QR Code encoder + * + * Input data splitter. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "qrencode.h" +#include "qrinput.h" +#include "qrspec.h" +#include "split.h" + +#define isdigit(__c__) ((unsigned char)((signed char)(__c__) - '0') < 10) +#define isalnum(__c__) (QRinput_lookAnTable(__c__) >= 0) + +static int Split_eatNum(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive); +static int Split_eatAn(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive); +static int Split_eat8(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive); +static int Split_eatKanji(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive); + +static int Split_eatNum(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive) +{ + const char *p; + int run; + int dif; + int ln; + + ln = QRspec_lengthIndicator(QR_MODE_NUM, version); + + p = string; + while(isdigit(*p)) { + p++; + } + run = p - string; + if(*p & 0x80) { + dif = QRinput_estimateBitsModeNum(run) + 4 + ln + + QRinput_estimateBitsMode8(1) /* + 4 + l8 */ + - QRinput_estimateBitsMode8(run + 1) /* - 4 - l8 */; + if(dif > 0) { + return Split_eat8(string, input, version, hint, casesensitive); + } + } + if(isalnum(*p) && !casesensitive) { + dif = QRinput_estimateBitsModeNum(run) + 4 + ln + + QRinput_estimateBitsModeAn(1) /* + 4 + la */ + - QRinput_estimateBitsModeAn(run + 1) /* - 4 - la */; + if(dif > 0) { + return Split_eatAn(string, input, version, hint, casesensitive); + } + } + + QRinput_append(input, QR_MODE_NUM, run, (unsigned char *)string); + return run; +} + +static int Split_eatAn(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive) +{ + const char *p, *q; + int run; + int dif; + int la, ln; + + if(casesensitive) { + return Split_eat8(string, input, version, hint, casesensitive); + } + + la = QRspec_lengthIndicator(QR_MODE_AN, version); + ln = QRspec_lengthIndicator(QR_MODE_NUM, version); + + p = string; + while(isalnum(*p)) { + if(isdigit(*p)) { + q = p; + while(isdigit(*q)) { + q++; + } + dif = QRinput_estimateBitsModeAn(p - string) /* + 4 + la */ + + QRinput_estimateBitsModeNum(q - p) + 4 + ln + - QRinput_estimateBitsModeAn(q - string) /* - 4 - la */; + if(dif < 0) { + break; + } else { + p = q; + } + } else { + p++; + } + } + + run = p - string; + + if(*p & 0x80) { + dif = QRinput_estimateBitsModeAn(run) + 4 + la + + QRinput_estimateBitsMode8(1) /* + 4 + l8 */ + - QRinput_estimateBitsMode8(run + 1) /* - 4 - l8 */; + if(dif > 0) { + return Split_eat8(string, input, version, hint, casesensitive); + } + } + + QRinput_append(input, QR_MODE_AN, run, (unsigned char *)string); + return run; +} + +static int Split_eatKanji(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive) +{ + const char *p; + + p = string; + while(QRinput_identifyMode(p) == QR_MODE_KANJI) { + p += 2; + } + QRinput_append(input, QR_MODE_KANJI, p - string, (unsigned char *)string); + return p - string; +} + +static int Split_eat8(const char *string, QRinput *input, int version, QRencodeMode hint, int casesensitive) +{ + const char *p, *q; + QRencodeMode mode; + int dif; + int la, ln; + + la = QRspec_lengthIndicator(QR_MODE_AN, version); + ln = QRspec_lengthIndicator(QR_MODE_NUM, version); + + p = string; + while(*p != '\0') { + mode = QRinput_identifyMode(p); + if(hint == QR_MODE_KANJI && mode == QR_MODE_KANJI) { + break; + } + if(mode != QR_MODE_8 && mode != QR_MODE_KANJI) { + if(mode == QR_MODE_NUM) { + q = p; + while(isdigit(*q)) { + q++; + } + dif = QRinput_estimateBitsMode8(p - string) /* + 4 + l8 */ + + QRinput_estimateBitsModeNum(q - p) + 4 + ln + - QRinput_estimateBitsMode8(q - string) /* - 4 - l8 */; + if(dif < 0) { + break; + } else { + p = q; + } + } else if(!casesensitive) { + q = p; + while(isalnum(*q)) { + q++; + } + dif = QRinput_estimateBitsMode8(p - string) /* + 4 + l8 */ + + QRinput_estimateBitsModeAn(q - p) + 4 + la + - QRinput_estimateBitsMode8(q - string) /* - 4 - l8 */; + if(dif < 0) { + break; + } else { + p = q; + } + } else { + p++; + } + } else { + p++; + } + } + + QRinput_append(input, QR_MODE_8, p - string, (unsigned char *)string); + return p - string; +} + +void Split_splitStringToQRinput(const char *string, QRinput *input, + int version, QRencodeMode hint, int casesensitive) +{ + int length; + QRencodeMode mode; + + if(*string == '\0') return; + + mode = QRinput_identifyMode(string); + if(mode == QR_MODE_NUM) { + length = Split_eatNum(string, input, version, hint, casesensitive); + } else if(mode == QR_MODE_AN && !casesensitive) { + length = Split_eatAn(string, input, version, hint, casesensitive); + } else if(mode == QR_MODE_KANJI && hint == QR_MODE_KANJI) { + length = Split_eatKanji(string, input, version, hint, casesensitive); + } else { + length = Split_eat8(string, input, version, hint, casesensitive); + } + if(length == 0) return; + Split_splitStringToQRinput(&string[length], input, hint, mode, casesensitive); +} diff --git a/QtQREnCode/split.h b/QtQREnCode/split.h new file mode 100644 index 0000000..c1058c1 --- /dev/null +++ b/QtQREnCode/split.h @@ -0,0 +1,40 @@ +#ifndef SPLIT_H +#define SPLIT_H + +/* + * qrencode - QR Code encoder + * + * Input data splitter. + * Copyright (C) 2006,2007 Kentaro Fukuchi + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __SPLIT_H__ +#define __SPLIT_H__ + +#include "qrencode.h" +void Split_splitStringToQRinput(const char *string, QRinput *input, + int version, QRencodeMode hint, int casesensitive); +#endif /* __SPLIT_H__ */ + + +#endif // SPLIT_H diff --git a/QtUI.pro b/QtUI.pro new file mode 100644 index 0000000..98dd555 --- /dev/null +++ b/QtUI.pro @@ -0,0 +1,394 @@ +###################################################################### +# Automatically generated by qmake (2.01a) ?? 11? 8 22:48:42 2013 +###################################################################### +# -spec /usr/local/Trolltech/QtEmbedded-4.6.3-arm/mkspecs/qws/linux-arm-g++ DEFINES+=ARM DEFINES+=QTV3 DEFINES+=VNLG +# DEFINES+=VNLG +# DEFINES+=UART2 DEFINES+=X86TEST DEFINES+=VNLG DEFINES+=UART1 +# GIT +#$ git config --global user.name "niexiong" +#$ git config --global user.email "nx@runoob.com" +# git clone git@119.23.201.56:/home/git/QtUI.git +# git pull +# git commit -am "提交说明" +# git push +# git add +# git add -f xxx.cpp #强制提交文件 +# git rm +# +# +QT += core gui network +QT += xml + +LIBS += -L/usr/local/openssl-1.0.2 -lssl -lcrypto + + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +include(qjson/upQJson.pri) + +TEMPLATE = app +#ifdef SPV210 + TARGET = qtUIV6 +#else + TARGET = QtUI +#endif +OBJECTS_DIR +=tmp +MOC_DIR +=tmp +DEPENDPATH += . +INCLUDEPATH += . +CODECFORTR = UTF-8 +#DEFINES+=UART1 +DEFINES+=UART2 +#DEFINES+=ENGLISH +DEFINES+=WARNING +#DFINES+=RANDDEBUGE +DEFINES+=ALT16 +DEFINES+=TEMPMIMA +DEFINES+=COUNTER1_BY_GROUP #分段计米 +DEFINES+=_2DCODE_ #QR二维码 +DEFINES+=PICSCENE +#DEFINES+=__2451WIFI__ +DEFINES+=__CONVERTERWIFI__ +DEFINES+=MODBUS + +#DEFINES+=__CONVERTERBOARD__ +DEFINES+=__VX__ +#DEFINES+=X86TEST + + + +#else +#{ + +#} + +# Input +HEADERS += ClickLabel.h \ + DevOp.h \ + DialogAuthorization.h \ + DialogFileOperation.h \ + DialogFontSize.h \ + DialogInsertVari.h \ + DialogLineSpace.h \ + DigitalInput.h \ + InkJetPrinter.h \ + InputMethod.h \ + InsertSpaceNumDialog.h \ + LogInfo.h \ + mainwindow.h \ + MemDisplayAndEdit.h \ + MyFileDialog.h \ + MyInputMethod.h \ + MyTextEdit.h \ + OtherInfo.h \ + ParaSettingUI.h \ + PhaseGraphic.h \ + PicEdit.h \ + PicWidget.h \ + PrintSetting.h \ + PrintTextDisplay.h \ + Public.h \ + PulseNumFix.h \ + SysPara.h \ + SystemManage.h \ + SystemSetting.h \ + TextEditOption.h \ + TimeSettingDialog.h \ + TriggerCtrl.h \ + ZkEdit.h \ + myinclude.h \ + dlgdrawinit.h \ + zkWidget.h \ + qextserialbase.h \ + posix_qextserialport.h \ + dlginputaddr.h \ + dlgshowmsg.h \ + QBarCode.h \ + dlgQrCode.h \ + BarCode/cmdline.h \ + BarCode/barcode.h \ + QtQREnCode/split.h \ + QtQREnCode/mask.h \ + QtQREnCode/bistream.h \ + QtQREnCode/qrinput.h \ + QtQREnCode/qrencode_inner.h \ + QtQREnCode/qrspec.h \ + QtQREnCode/qrencode.h \ + QtQREnCode/rscode.h \ + Matrix/reedsol.h \ + Matrix/zint.h \ + Matrix/common.h \ + Matrix/dm200.h \ + DialogInputTxt.h \ + dlgmutilanguage.h \ + dlgmywarring.h \ + dlgselectinputlanguage.h \ + DialogSaveFile.h \ + dlgvarlength.h \ + VerBVersion.h \ + scene/picscene.h \ + scene/pictextitem.h \ + scene/SceneEditOption.h \ + scene/sceneviewwidget.h \ + Network/NetworkManager.h \ + modbus/modbus/include/mbconfig.h \ + modbus/modbus/include/mbframe.h \ + modbus/modbus/include/mbfunc.h \ + modbus/modbus/include/mbport.h \ + modbus/modbus/include/mbproto.h \ + modbus/modbus/include/mbutils.h \ + modbus/port/port.h \ + Tftp/filetranseceiver.h \ + modbus/modbus/include/mb.h \ + modbus/modbus/rtu/mbcrc.h \ + modbus/modbus/rtu/mbrtu.h \ + dialogmodifypasswd.h \ + logo_form.h \ + modbus/demo.h \ + dialogshowcounter.h \ + dialogcycleprint.h \ + print_net.h \ + scene/myview.h \ + modbus/modbus/tcp/mbtcp.h \ + modbus/modbustcp.h \ + moveinput.h \ + Log/dualfilelogger.h \ + Log/filelogger.h \ + Log/logger.h \ + Log/logglobal.h \ + Log/logmessage.h \ + modbus/modbustcp.h \ + modbus/modbus/tcp/mbtcp.h \ + modbus/demo.h \ + scene/formscenedlg.h \ + HtmlDelegate.h \ + rfid/rfidfunction.h \ + rfid/sm3.h \ + rfid/sm4.h + + + +FORMS += dialogauthorization.ui \ + dialogfileoperation.ui \ + dialogfontsize.ui \ + dialoginsertvari.ui \ + dialoglinespace.ui \ + dialogpointdistanceadjust.ui \ + inkjetprinter.ui \ + InputMethod.ui \ + insertspacenumdialog.ui \ + loginfo.ui \ + mainwindow.ui \ + memdisplayandedit.ui \ + otherinfo.ui \ + printsetting.ui \ + pulsenumfix.ui \ + systemmanage.ui \ + systemsetting.ui \ + texteditoption.ui \ + timesettingdialog.ui \ + triggerctrl.ui \ + zkedit.ui \ + picedit.ui \ + dlgdrawinit.ui \ + digitalinput.ui \ + dlginputaddr.ui \ + dlgshowmsg.ui \ + QBarCode.ui \ + dlgQrCode.ui \ + DialogInputTxt.ui \ + dlgmutilanguage.ui \ + dlgmywarring.ui \ + dlgselectinputlanguage.ui \ + dialogsavefile.ui \ + dlgvarlength.ui \ + scene/sceneEditOption.ui \ + Network/NetworkManager.ui \ + dialoginputpasswd.ui \ + dialogmodifypasswd.ui \ + logo_form.ui \ + dialogshowcounter.ui \ + dialogcycleprint.ui \ + moveinput.ui \ + scene/formscenedlg.ui +SOURCES += ClickLabel.cpp \ + DevOp.cpp \ + DialogAuthorization.cpp \ + DialogFileOperation.cpp \ + DialogFontSize.cpp \ + DialogInsertVari.cpp \ + DialogLineSpace.cpp \ + DigitalInput.cpp \ + InkJetPrinter.cpp \ + InputMethod.cpp \ + InsertSpaceNumDialog.cpp \ + LogInfo.cpp \ + main.cpp \ + mainwindow.cpp \ + MemDisplayAndEdit.cpp \ + MyFileDialog.cpp \ + MyInputMethod.cpp \ + MyTextEdit.cpp \ + OtherInfo.cpp \ + ParaSettingUI.cpp \ + PhaseGraphic.cpp \ + PicEdit.cpp \ + PicWidget.cpp \ + PrintSetting.cpp \ + PrintTextDisplay.cpp \ + Public.cpp \ + PulseNumFix.cpp \ + SysPara.cpp \ + SystemManage.cpp \ + SystemSetting.cpp \ + TextEditOption.cpp \ + TimeSettingDialog.cpp \ + TriggerCtrl.cpp \ + ZkEdit.cpp \ + dlgdrawinit.cpp \ + zkWidget.cpp \ + qextserialbase.cpp \ + posix_qextserialport.cpp \ + dlginputaddr.cpp \ + dlgshowmsg.cpp \ + QBarCode.cpp \ + dlgQrCode.cpp \ + BarCode/ps.c \ + BarCode/plessey.c \ + BarCode/pcl.c \ + BarCode/msi.c \ + BarCode/library.c \ + BarCode/i25.c \ + BarCode/ean.c \ + BarCode/code128.c \ + BarCode/code93.c \ + BarCode/code39.c \ + BarCode/codabar.c \ + BarCode/cmdline.c \ + QtQREnCode/mask.cpp \ + QtQREnCode/bitstream.cpp \ + QtQREnCode/qrspec.cpp \ + QtQREnCode/split.cpp \ + QtQREnCode/qrinput.cpp \ + QtQREnCode/qrencode_inner.cpp \ + QtQREnCode/qrencode.cpp \ + QtQREnCode/rscode.cpp \ + Matrix/common.cpp \ + Matrix/reedsol.cpp \ + Matrix/dm200.cpp \ + Matrix/drawmatrix.cpp \ + DialogInputTxt.cpp \ + dlgmutilanguage.cpp \ + dlgmywarring.cpp \ + dlgselectinputlanguage.cpp \ + DialogSaveFile.cpp \ + dlgvarlength.cpp \ + scene/picscene.cpp \ + scene/pictextitem.cpp \ + scene/SceneEditOption.cpp \ + scene/sceneviewwidget.cpp \ + Network/NetworkManager.cpp \ + modbus/modbus/mb.c \ + modbus/modbus/functions/mbfunccoils.c \ + modbus/modbus/functions/mbfuncdiag.c \ + modbus/modbus/functions/mbfuncdisc.c \ + modbus/modbus/functions/mbfuncholding.c \ + modbus/modbus/functions/mbfuncinput.c \ + modbus/modbus/functions/mbfuncother.c \ + modbus/modbus/functions/mbutils.c \ + modbus/port/portevent.c \ + modbus/port/portother.c \ + Tftp/filetranseceiver.cpp \ + modbus/port/portserial.c \ + modbus/port/porttimer.c \ + modbus/modbus/rtu/mbcrc.c \ + modbus/modbus/rtu/mbrtu.c \ + dialogmodifypasswd.cpp \ + logo_form.cpp \ + dialogshowcounter.cpp \ + dialogcycleprint.cpp \ + print_net.cpp \ + scene/myview.cpp \ + moveinput.cpp \ + Log/dualfilelogger.cpp \ + Log/filelogger.cpp \ + Log/logger.cpp \ + Log/logmessage.cpp \ + modbus/modbustcp.cpp \ + modbus/modbus/tcp/mbtcp.c \ + modbus/port/porttcp.c \ + scene/formscenedlg.cpp \ + HtmlDelegate.cpp \ + rfid/rfidfunction.cpp \ + rfid/sm3.cpp \ + rfid/sm4.cpp + +#RESOURCES +=image.qrc EN/image.qrc +RESOURCES += \ + image.qrc +##ifdef VNLG +#TRANSLATIONS +=./../V0211X86QRVN/chinese.ts ./../V0211X86QRVN/vena.ts ./../V0211X86QRVN/english.ts +TRANSLATIONS += ./vena.ts ./chinese.ts ./turkey.ts ./spanish.ts ./thai.ts ./english.ts +#./../V0211X86QRVN/english.ts +##else +#TRANSLATIONS +=./../V0211X86QR/chinese.ts ./../V0211X86QR/english.ts +##endif + +OTHER_FILES += \ + buge_record.txt + + +if(contains(DEFINES,__VX__)) +{ + #DEFINES += CONFIG_CTRL_IFACE + #DEFINES += CONFIG_CTRL_IFACE_UNIX + #SOURCES += ../../src/utils/os_unix.c + #SOURCES += /home/student/newDisk/335x/original/am335x_src/third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils/os_unix.c + #SOURCES += /home/student/newDisk/335x/original/am335x_src/third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/common/wpa_ctrl.c + #INCLUDEPATH += /home/student/newDisk/335x/original/am335x_src/third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src + #INCLUDEPATH += /home/student/newDisk/335x/original/am335x_src/third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils +} +if(contains(DEFINES,__CONVERTERWIFI__)) +{ + DEFINES += CONFIG_CTRL_IFACE + DEFINES += CONFIG_CTRL_IFACE_UNIX + #SOURCES += ../../src/utils/os_unix.c + SOURCES += /third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils/os_unix.c + SOURCES += /third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/common/wpa_ctrl.c + INCLUDEPATH += /third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src + INCLUDEPATH += /third_part/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils +} +if(contains(DEFINES,MODBUS)) +{ + INCLUDEPATH += $$PWD/modbus/port + INCLUDEPATH += $$PWD/modbus/modbus/include + INCLUDEPATH += $$PWD/modbus/modbus/rtu + INCLUDEPATH += $$PWD/modbus/modbus/tcp + #HEADERS += modbus/modbustcp.h + #SOURCES += modbus/modbustcp.cpp +} + +if(contains(DEFINES,__2451WIFI__)) +{ + #DEFINES += CONFIG_CTRL_IFACE + #DEFINES += CONFIG_CTRL_IFACE_UNIX + ##SOURCES += ../../src/utils/os_unix.c + #SOURCES += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils/os_unix.c + #SOURCES += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/common/wpa_ctrl.c + #INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src + #INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils +} + + + + + + + + + + + + + + + diff --git a/SecondThread/SecondThread.cpp b/SecondThread/SecondThread.cpp new file mode 100644 index 0000000..9b2b594 --- /dev/null +++ b/SecondThread/SecondThread.cpp @@ -0,0 +1,107 @@ +#include +#include +#include "SecondThread.h" +#include "VerBVersion.h" + +SecondThread::SecondThread(QObject* par) : QThread(par) +,m_runCount(20) +{ + pDdlgShowMsg = new DlgShowMsg; + pDdlgShowMsg->hide(); + pTimer10s = new QTimer(); + pTimer10s->setInterval(10000); + //connect(pTimer10s, SIGNAL(timeout()), this, &SecondThread::timeoutSlot); + connect(pTimer10s, SIGNAL(timeout()), this, SLOT(timeoutSlot()),Qt::QueuedConnection); + pUpLicManager = new LicenseManger(); + licState = pUpLicManager->getLicState(); + if(licState) + { + //pDdlgShowMsg->showMsg(tr("license file was invalid,error code:%1").arg(licState)); + emit printerLicErr(licState); + qDebug()<<"asdfsdf"; + } + bLicFileUpdating = false; +} + +SecondThread::~SecondThread() +{ + qDebug() << "SecondThread::~SecondThread()"; +} + +void SecondThread::setSomething() +{ + msleep(500); + QString str = QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((int)QThread::currentThreadId()); + emit message(str); +} + +void SecondThread::getSomething() +{ + msleep(500); + emit message(QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((int)QThread::currentThreadId())); +} + +void SecondThread::setRunCount(int count) +{ + m_runCount = count; + emit message(QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((int)QThread::currentThreadId())); +} + +void SecondThread::timeoutSlot() +{ + QTime curTime=QTime::currentTime(); + qDebug()<CheckRemainingTime(); + if(remaining_time <= 3) + { + licState = -LICENSE_STATE_REMAIN_TIME_REARCH; + emit printerLicErr(licState); + } + } + emit printerLicErr(licState); + } +} +void SecondThread::update_license_file() +{ + pUpLicManager->UpdateLicenseFileData(); + licState = pUpLicManager->getLicState(); +} +void SecondThread::update_license_process() +{ + qint8 updateFileState = pUpLicManager->CheckUpdateFileState(); + if(updateFileState != UPDATE_LICENSE_FILE_OK) + { + //QMessageBox::critical(this,tr("错误"),tr("升级软件错误,错误码:%1").arg(updateState)); + emit update_license_complete(updateFileState); + } + else + { + bLicFileUpdating = true; + update_license_file(); + emit update_license_complete(UPDATE_LICENSE_FILE_OK); + bLicFileUpdating = false; + } +} + +void SecondThread::set_serial_number_process(quint32 serial_number) +{ + qDebug()<<"set_serial_number_process"<setMachineInfo(serial_number); +} +void SecondThread::run() +{ + qDebug()<<"second thread run"; + pTimer10s->start(); + this->exec(); +} + +void SecondThread::doSomething() +{ + msleep(500); + emit message(QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((int)QThread::currentThreadId())); +} diff --git a/SecondThread/SecondThread.h b/SecondThread/SecondThread.h new file mode 100644 index 0000000..3660230 --- /dev/null +++ b/SecondThread/SecondThread.h @@ -0,0 +1,44 @@ +#ifndef SECONDTHREADFROMQTHREAD_H +#define SECONDTHREADFROMQTHREAD_H +#include +#include +#include "LicenseManger/LicenseManger.h" +#include "dlgshowmsg.h" + +#include + +class SecondThread : public QThread +{ + Q_OBJECT +signals: + void message(const QString& info); + void progress(int present); + void printerLicErr(qint8); + void update_license_complete(qint8); + +public: + SecondThread(QObject* par); + ~SecondThread(); + void setSomething(); + void getSomething(); + void setRunCount(int count); + void run(); + void doSomething(); + void update_license_file(); +private: + int m_runCount; + QTimer *pTimer10s; + LicenseManger *pUpLicManager; + QDate curDate; + TAesClass *pAes; + qint8 licState; + DlgShowMsg *pDdlgShowMsg; + bool bLicFileUpdating; + +private slots: + void timeoutSlot(); + void update_license_process(); + void set_serial_number_process(quint32); +}; + +#endif // THREADFROMQTHREAD_H diff --git a/SysPara.cpp b/SysPara.cpp new file mode 100644 index 0000000..3e06d5a --- /dev/null +++ b/SysPara.cpp @@ -0,0 +1,747 @@ +/* + * SysPara.cpp + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + * + * 2013-9-29 高压 + */ + + +#include "SysPara.h" +#include +#include +#include +#include +#include +#include +//#include +#include "LogInfo.h" +#define VNLG +SysPara::SysPara(void): + devOp(new DevOp(this)){ + + + memset(¶,0,sizeof(para)); + memset(&status,0,sizeof(status)); + //qDebug("start to loadParaFromFile."); + loadParaFromFile(); + //qDebug("loadParaFromFile ok."); + + //para.HVFaultCloseEn= 0; + + if(para.ReadFileErrorCnt<10) para.ReadFileErrorCnt++; + if(para.PowerOnErrorCnt<10) para.PowerOnErrorCnt++; + // PowerOnErrorCnt + //qDebug()<<"cnt ++:"<3 || para.PowerOnErrorCnt>4) { + //loadDefaultPara(); + memset( para.lastOpenedFileName,0,sizeof(para.lastOpenedFileName)); + if(para.ReadFileErrorCnt>=4 ) + para.ReadFileErrorCnt=0; + if(para.PowerOnErrorCnt>=4) + para.PowerOnErrorCnt=0; + //qDebug()<<"sys Star Error, cnt :"<writeFpgaPrintPara(true)会调用这个,所以忽略 + + //para.HVFaultCloseEn= 1; //开机默认为1,允许高压故障自动关闭回收功能 + + devOp->writeFpgaPrintPara(true); //系统起来的时候,将上次记录的配置写入fpga,比如晶振分频等信息 + devOp->writeFpgaVariCtrl(); + devOp->resumeFault(); + + status.lastProductCnt = status.productCnt ; //这会让产品计数显示出来 + status.gearPumpRunStopFlag = false; + status.detectBestOscillatorFreqAppending = false; + status.isPumpValveControledByHand = false; //初始化为自动模式 + status.forTemplateUse = false; + status.lastHighVoltageFault = false; + status.needPowerOffTimerout = 0; + status.circleProductCnt = false; + status.flagOfWeiDaLiTCP = 0; + status.flagOfWeiDaLiTCPClear = 0; + status.flagLogInfo = 1; + status.flagOfWeiDaLiTCPStartPrinting = 0; + memset(para.reserved2,0,sizeof(para.reserved2)); +#ifdef __RFID_CARD + if(!loadRFIDPara()){ + memset(&RFIDPara,0,sizeof(RFIDPara)); + saveRFIDPara(); + } +#endif +} + +void SysPara::loadParaFromFile(){ + QFile file(PARA_FILE_PATH); + QFile DeviceCodefile(DeviceCode_FILE_PATH); + QDir dir; + char buf[200]; + //qDebug()<<"loadParaFromFile"; + if(!dir.exists(DOC_ROOT_DIR)){ + snprintf(buf,sizeof(buf),"mkdir -p %s",DOC_ROOT_DIR); + system(buf); + } + if(!dir.exists(PARA_ROOT_DIR)){ + snprintf(buf,sizeof(buf),"mkdir -p %s",PARA_ROOT_DIR); + system(buf); + } + if(!dir.exists(PARA_ROOT_DIR)){ + QMessageBox::warning(0,QString("warnning"),QString("Path") + PARA_ROOT_DIR + QString("not Found.")); + return ; + } + if(file.exists(PARA_FILE_PATH)){ + //qDebug("PARA_FILE_PATH"); + if(!file.open(QIODevice::ReadOnly)){ + //QMessageBox::warning(0,("警告"),QString("无法打开配置文件 ") + PARA_FILE_PATH); + loadDefaultPara(); + } + else { + //qDebug("PARA_FILE_PATH1"); +#if 0 + QMessageBox::StandardButton ret = QMessageBox::Ok; + qint32 copy_len; + if(file.size() != sizeof(para)){ +#ifdef VNLG + ; +#else + ret = QMessageBox::warning(NULL,QString("警告"),QString("配置文件大小不一致,按 确定 将采取兼容方式读取配置文件,否则将恢复成默认设置"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok ); + +#endif + if(ret == QMessageBox::Ok){ + if(file.size()>sizeof(print)) + copy_len = sizeof(print); + else + copy_len = file.size(); + file.seek(0); + file.read((char *)¶,copy_len); + file.close(); + //qDebug("normal load para"); + } + else if(ret == QMessageBox::Cancel){ + loadDefaultPara();//qDebug("loadDefaultPara"); + file.close(); + } + + } + else +#endif + { + file.seek(0); + file.read((char *)¶,(long long int)sizeof(para)); + file.close(); + //////////////////// + if (DeviceCodefile.isOpen()) { + DeviceCodefile.close(); + } + //jdDataRwLock.lockForRead(); + if(!DeviceCodefile.open(QIODevice::ReadOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + //QMessageBox::warning(0,"警告",QString("无法打开文件") ); + } + else { + DeviceCodefile.seek(0); + //file.read((char *)&jd.addr,(long long int)sizeof(jd)); + DeviceCodefile.read((char *)¶.Json_device_code,(qint64)sizeof(para.Json_device_code)); + DeviceCodefile.close(); + } + ////////////// + } + } + } + else { +#ifdef VNLG + ; +#else + QMessageBox::information(0,QString("提示"),QString("这可能是你设备第一次上电,或是进行了出厂设置,我们将使用系统默认配置")); +#endif + + loadDefaultPara(); + //loadDefaultPara();//qDebug("loadDefaultPara2"); + } + //qDebug()<<"SYSPrar:"<sizeof(print)) + copy_len = sizeof(print); + else + copy_len = file.size(); + file.seek(0); + file.read((char *)&print,copy_len); + file.close(); + } + else { + file.seek(0); + file.read((char *)&print,(long long int)sizeof(print)); + file.close(); + memcpy( (char *)¶.alterPrint,(char *)&print.alterPrint,sizeof(alterPrint_t)) ; + para.charBold = print.charBold ; + +#ifndef CABLEUSER + para.SynCntEn = 0 ; + para.autoSynSpeedEn =0 ; + para.cnt1CurrValue =0 ; + para.cnt1EndValue = 0 ; + para.Cnt1NatureValue =0 ; +#else + para.SynCntEn = print.SynCntEn ; + para.autoSynSpeedEn = print.autoSynSpeedEn ; + para.newAmplifyPlate = print.newAmplifyPlate; + para.cnt1CurrValue = print.cnt1CurrValue; // 20170313 cnt1StartValue;20191226 cnt1CurrValue + para.cnt1EndValue = print.cnt1EndValue ; + para.Cnt1NatureValue = print.Cnt1NatureValue ; +#endif + + para.mixValveisNewVersion = 1; + para.cnt1RepeateValue = print.cnt1RepeateValue ; + para.cnt1StartValue = print.cnt1StartValue ; + para.cnt1StepValue = print.cnt1StepValue ; + para.cnt2CurrValue = print.cnt2CurrValue;//20170313 cnt2StartValue ; /// 20191226cnt2CurrValue + para.cnt2EndValue = print.cnt2EndValue ; + para.cnt2RepeateValue = print.cnt2RepeateValue ; + para.cnt2StartValue = print.cnt2StartValue ; + para.cnt2StepValue = print.cnt2StepValue ; + +// para.cnt3CurrValue = print.cnt3CurrValue;//20170313 cnt2StartValue ; /// 20191226cnt2CurrValue +// para.cnt3EndValue = print.cnt3EndValue ; +// para.cnt3RepeateValue = print.cnt3RepeateValue ; +// para.cnt3StartValue = print.cnt3StartValue ; +// para.cnt3StepValue = print.cnt3StepValue ; + + para.cnt4CurrValue = print.cnt4CurrValue; + para.HiddenConditionValue = print.HiddenConditionValue; + para.HiddenFuncEnable = print.HiddenFuncEnable; + para.HiddenMeterEnable = print.HiddenMeterEnable; + + para.currPrintMode = print.currPrintMode ; + para.elecEyeTriggerInterval = print.elecEyeTriggerInterval ; + para.eleEyeClearCntInSynMode = print.eleEyeClearCntInSynMode ; + para.eleEyeTriggerPrintDelay = print.eleEyeTriggerPrintDelay ; + para.eleEyeTriggerSynPrintEn = print.eleEyeTriggerSynPrintEn ; + para.endVoltage = print.endVoltage ; + para.extClearAllCntEnable = print.extClearAllCntEnable ; + para.HighVoltageAmplitude = print.HighVoltageAmplitude ; + para.lastLineEndPointFixedDACValue = print.lastLineEndPointFixedDACValue ; + para.lastLineEndPointFixedValue = print.lastLineEndPointFixedValue ; + para.FullColFixVal = print.FullColFixVal ; + + para.leftRightInverse = print.leftRightInverse ; + para.lineEndAdjustPointCnt = print.lineEndAdjustPointCnt ; + para.lineEndAdjustPointDelay = print.lineEndAdjustPointDelay ; + para.outputPulseDelayMs = print.outputPulseDelayMs ; + para.photoElectricityRepeateNum = print.photoElectricityRepeateNum ; + para.pixNumPerCol = print.pixNumPerCol ; + para.pointVoltageAdjustPos = print.pointVoltageAdjustPos ; + para.PointVoltageAdjustValue = print.PointVoltageAdjustValue ; + para.printColDelay = print.printColDelay ; + para.printDelayMs = print.printDelayMs ; + para.printDirection = print.printDirection ; + para.printRowDelay = print.printRowDelay ; + para.printTotalColNum = print.printTotalColNum ; + para.printTriggerMode = print.printTriggerMode ; //打印触发模式 + para.productCntPerOutputPulse = print.productCntPerOutputPulse ; + para.productNumToGenerateOutputPulse = print.productNumToGenerateOutputPulse ; + para.pulseOutputEnable = print.pulseOutputEnable ; + para.reducedPixelMode = print.reducedPixelMode ; + para.reducedPixelNum = print.reducedPixelNum ; + para.reducedPixelNumRatio = print.reducedPixelNumRatio ; + para.scanInverse = print.scanInverse ; + para.startVoltage = print.startVoltage ; + //print.stepPrint = print.stepPrint ; + memcpy( (char *)¶.stepPrint,(char *)&print.stepPrint,sizeof(stepPrint_t)) ; + memcpy( (char *)¶.adjVolDacRate,(char *)&print.adjVolDacRate,sizeof(print.adjVolDacRate)) ; +//edit-12.2 + //para.synCharWidthRatio = print.synCharWidthRatio ; + para.synClearCntInEleEyeMode = print.synClearCntInEleEyeMode ; +#if 0 //不需要每个文件都存相位的参数 + para.synPulseNumPerMm = print.synPulseNumPerMm ; + para.synPulsePerMmX8 = print.synPulsePerMmX8 ; +#endif + para.synTriggerPrintLenMm = print.synTriggerPrintLenMm ; //喷印间隔 + //para.synTriggerPrintLenRatio = print.synTriggerPrintLenRatio ; + para.sysTriggerPrintMode = print.sysTriggerPrintMode ; + para.timeTriggerPrintDelayMs = print.timeTriggerPrintDelayMs ; + para.timeTriggerPrintMode = print.timeTriggerPrintMode ; + //para.totalSynPulseNum = print.totalSynPulseNum ; + para.upDownInverse = print.upDownInverse ; + + para.varLen = print.varLen; + print.varLen1 = para.varLen1; + para.varLenEn = print.varLenEn?1:0; + para.headLen = print.headLen; + para.endLen = print.endLen; + + para.set_HVData_Flag = 0; + + para.eleMaskTime = print.eleMaskTime; + para.AltMirrorGap = print.AltMirrorGap; + para.textEditLineSpace = print.textEditLineSpace; + //para.weihu = print.wehu; + //qDebug()<<"sysFile3:"<spinBoxHighLowRatio->value(); + para.phaseHighLowRatio = print.phaseHighLowRatio; + para.phaseShift = print.phaseShift; + para.OuputPulseCol = print.OuputPulseCol; +#ifndef FOR_PHASE_ADJUST + print.phase_detect_pulse_num = 7; + para.phaseDetectVol = 40; + print.phaseDetectDelay = 100; +#else + para.phase_detect_pulse_num = print.phase_detect_pulse_num; + if (print.phase_detect_pulse_num<3 || print.phase_detect_pulse_num>10) { + print.phase_detect_pulse_num = 7; + } + + para.phaseDetectVol = print.phaseDetectVol; + if (print.phaseDetectVol < 28 || print.phaseDetectVol > 70) + print.phaseDetectVol = 35; + + para.phaseDetectDelay = print.phaseDetectDelay;//120;// ui->spinBoxPhaseDetectDelay->value(); + if (print.phaseDetectDelay < 70 || print.phaseDetectDelay > 150) + print.phaseDetectDelay = 100; +#endif + para.enableChargeFullTime = 1; +#endif + } + } + +} + +void SysPara::loadDefaultPrintPara(){ +// memset(&print,0,sizeof(print)); +// print.alterPrint.enable = 0; +// print.stepPrint.enbale = 0; + loadDefaultPara(); +} + +void SysPara::savePrintParaToFile(){ +//qDebug()<<"savePrintParaToFile"; + if(sysFile=="") return; + QString fileName = QString( PARA_ROOT_DIR+QFileInfo( sysFile).baseName()+".dpn"); + //qDebug()<<"savePrintParaToFile1:"<> 12; + if(mode == FAST_PRINT ) + { + volParaFilePath = ":/conf/VoltParaHi.bin"; + } + else if(mode == STANDARD_PRINT) + { + volParaFilePath = PARA_ROOT_DIR"VoltParaStd.bin"; + } + if(status.build_dat.builTime == 73) + volParaFilePath = ":/conf/VoltePara_No73.bin"; + else if(type == 6){ + if(status.currPrintRow<=21){ + volParaFilePath = ":/conf/VoltDataStd21.bin"; + } + else if(status.currPrintRow <=25){ + volParaFilePath = ":/conf/VoltDataStd25.bin"; + } + else if(para.flagOf5Row5Dot){ + volParaFilePath = ":/conf/VoltDataStd5Row5Dot.bin"; + } + else + volParaFilePath = ":/conf/VoltDataStd32.bin"; + } + QFile file(volParaFilePath); +#if 1 + QDir dir; + char buf[200]; + if (!dir.exists(DOC_ROOT_DIR)){ + snprintf(buf, sizeof(buf), "mkdir -p %s", DOC_ROOT_DIR); + system(buf); + } + if (!dir.exists(PARA_ROOT_DIR)){ + snprintf(buf, sizeof(buf), "mkdir -p %s", PARA_ROOT_DIR); + system(buf); + } + if (!dir.exists(PARA_ROOT_DIR)){ + QMessageBox::warning(0, QString("warnning"), QString("Path") + PARA_ROOT_DIR + QString("not Found.")); + return; + } +#endif + if (file.exists(volParaFilePath)){ + if (!file.open(QIODevice::ReadOnly)){ + } + else { + QMessageBox::StandardButton ret = QMessageBox::Ok; + qint32 copy_len; + char *volteStruct = (char *)&voltePara; + size_t sizeofVolteParaStruct = sizeof(voltePara); + if(status.build_dat.builTime == 73){ + volteStruct = (char *)&voltePara_No73; + sizeofVolteParaStruct = sizeof(voltePara_No73); + } + else if(type == 6){ + memset(&voltePara_25Dots,0,sizeof(voltePara_25Dots)); + volteStruct = (char *)&voltePara_25Dots; + sizeofVolteParaStruct = sizeof(voltePara_25Dots); + } + if (file.size() != sizeofVolteParaStruct){ + qDebug()<<"注意,电压文件大小不对!"; + LogInfo::setRunStatusText(QString("注意,电压文件大小不对!")); +#ifdef VNLG + ; +#else + ret = QMessageBox::warning(NULL, QString("警告"), QString("配置文件大小不一致,按 确定 将采取兼容方式读取配置文件"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); + +#endif + if (ret == QMessageBox::Ok){ + copy_len = file.size() < sizeofVolteParaStruct?file.size():sizeofVolteParaStruct; + file.seek(0); + file.read(volteStruct, copy_len); + file.close(); + } + else if (ret == QMessageBox::Cancel){ + file.close(); + } + } + else { + file.seek(0); + file.read(volteStruct, (long long int)sizeofVolteParaStruct); + file.close(); + } + } + } + else{ + qDebug()<<"There is no Volte Para File."; + LogInfo::setRunStatusText(QString("There is no Volte Para File.")); + } +} +#ifdef __RFID_CARD +void SysPara::saveRFIDPara() +{ + QFile file(RFID_FILE_PATH); + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + qDebug() << "Error: Could not open file for writing"; + return; + } + QDataStream out(&file); + out.setVersion(QDataStream::Qt_4_6); // Set the version compatible with Qt 4.8.5 + out << RFIDPara.PrintInkDots; + out << RFIDPara.InkEmptyCnt; + out << RFIDPara.SOLVEmptyCnt; + out << RFIDPara.InkRFIDCnt; + out << RFIDPara.SOLVRFIDCnt; + out << RFIDPara.solventNumber; + + file.close(); +} +bool SysPara::loadRFIDPara() +{ + QFile file(RFID_FILE_PATH); + if (!file.open(QIODevice::ReadOnly)) { + qDebug() << "Error: Could not open file for reading"; + return false; + } + + QDataStream in(&file); + in.setVersion(QDataStream::Qt_4_6); // Set the version compatible with Qt 4.8.5 + + in >> RFIDPara.PrintInkDots; + in >> RFIDPara.InkEmptyCnt; + in >> RFIDPara.SOLVEmptyCnt; + in >> RFIDPara.InkRFIDCnt; + in >> RFIDPara.SOLVRFIDCnt; + in >> RFIDPara.solventNumber; + + file.close(); + return true; +} +#endif diff --git a/SysPara.h b/SysPara.h new file mode 100644 index 0000000..9e00ab5 --- /dev/null +++ b/SysPara.h @@ -0,0 +1,1216 @@ +/* + * SysPara.h + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + * 2013-11-09 聂雄 + * 修改了para 结构,增加了 alterPrint_t,setepPrint_t两组参数,放在0x3C~0x43传替给FPGA + * 占用的原来预留的17个字(68B)中的8字节,故预留空间改为 15字(60字节) + */ + +#ifndef SYSPARA_H_ +#define SYSPARA_H_ + + +#include "DevOp.h" +#include + +#ifndef SYS1 +#define PARA_ROOT_DIR "/home/plg/conf/" +#define DOC_ROOT_DIR "/home/plg/doc/" +#define UDISK_DOC_ROOT_DIR "/udisk/doc/" +#define UDISK_CONF_ROOT_DIR "/udisk/conf/" +#define TESTDIR "/home/plg/r_conf/" +#else +#define PARA_ROOT_DIR "./conf/" +#define DOC_ROOT_DIR "./doc/" +#define UDISK_DOC_ROOT_DIR "./udisk/doc/" +#define TESTDIR "./r_conf/" +#endif + +#define SPACEFLAG // 增加空列 2017.3.8 + +#define TESTFILES TESTDIR"UP.png" +#define TESTFILED DOC_ROOT_DIR"UP.png" +#define TESTFILECS TESTDIR"UP.dpn" +#define TESTFILECD PARA_ROOT_DIR"UP.dpn" + +#define PARA_FILE_PATH PARA_ROOT_DIR"sysPara.bin" +#define DeviceCode_FILE_PATH "/home/plg/conf/deviceCode.bin" +#define RFID_FILE_PATH "/home/plg/conf/RFID.bin" +#define FPGA_PRINT_PARA_BYTE_NUM 0x3C + +#define BATCHLEN 3 +#define VOLUMELEN 2 + +#define AUTH_NONE 0 +#define AUTH_DISPLAY_SYSTEM_SETTING (1<<0) +#define AUTH_DISPLAY_SYSTEM_MANAGE (1<<1) +#define AUTH_DISPLAY_LOG_INFO (1<<2) +#define AUTH_DISPLAY_OTHER_INFO (1<<3) + +#define AUTH_SUPER_USER1 (1<<16) +#define AUTH_SUPER_USER2 (1<<17) +#ifdef __STC_POWER__ +#define POWER_SOURCE_KEY 0x01 +#define POWER_SOURCE_TIMER 0x02 + +#define WAKEUP_TIMER_15DAYS 0x01 +#define WAKEUP_TIMER_30DAYS 0x02 +#endif +typedef enum { + PRINT_TRIGGER_TIME = 0, + PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL = 1, + PRINT_TRIGGER_ELEC_EYE_EDGE =2, + PRINT_TRIGGER_SYNCHRONIZER = 3, + PRINT_TRIGGER_NONE = 4, + PRINT_TRIGGER_EYESYN =5 + }print_trigger_mode_t; +typedef enum { + OSCILLATTOR_FREQ_64K = 0, + OSCILLATTOR_FREQ_76K = 1, + OSCILLATTOR_FREQ_96K =2, + OSCILLATTOR_FREQ_128K =3 +}oscillator_freq_t; + +#define TIME_TRIGGER_PRINT_MODE_END_TO_HEAD 0 +#define TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD 1 + +#define SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH 0 +#define SYN_PRINT_MODE_ACCORDING_RATIO 1 + +#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) +#define MAX_QVARI_NUM 4 +#define MAX_CNT1_GROUPS_NUM 50 + +typedef struct { + unsigned int second:6; + unsigned int minute:6; + unsigned int hour:5; + unsigned day:9; + unsigned month:4; + unsigned dummy:2; + unsigned dayofweek:3; + unsigned year:12; + + unsigned int leap_year:1; //标记当年是否是闰年 + unsigned int cntCurrValueInitEnable:8; //{[0] -> cnt1CurrValue [1] ->cun2CurrValue [2] ->cun3CurrValue} + unsigned int week:8; + unsigned int cnt1CurrValue;// BCD码 + unsigned int cnt2CurrValue; // 0x0f + + unsigned int cnt1End; //0x10 + unsigned int cnt2End; //0x14 + + unsigned short cnt1Repeat;//0x18 + unsigned short cnt2Repeat;//0x1a + + unsigned int cnt1Step;//0x1c + unsigned int cnt2Step;//0x20 + + unsigned int cnt1InitValue; //0x24 + unsigned int cnt2InitValue; //0x28 + + unsigned int RandomValue1; //0x2c + unsigned int RandomValue2; //0x30 + +}calandar_and_dat_t; + +typedef struct { + unsigned int cnt3CurrValue;// BCD码 + unsigned int cnt3End; + unsigned int cnt3Repeat; + unsigned int cnt3Step; + unsigned int cnt3InitValue; + +}stru_counter3; + +//hiddenfunction +typedef struct { + unsigned int cnt4CurrValue;// BCD码 0xb164 + unsigned int cnt4End = 0; + unsigned int cnt4Repeat = 0; + unsigned int cnt4Step = 0; + unsigned int cnt4InitValue = 0; + +}stru_counter4; + +typedef struct +{ + unsigned short builTime; + unsigned short inkDot; // + unsigned char year; + unsigned char month; + unsigned char day; + +}build_dat_t; + +typedef struct +{ + quint8 print_data_xor; + quint8 counter1_current_value; + quint64 sync_counter_at_zero; + +}xor_sync_couter; + +#ifdef ALT16 +typedef struct + { + unsigned short startValue; // 起始值 + unsigned short StepValue; // 跳米间隔 + unsigned short endValue; // 结束值 + unsigned char enbale; // + unsigned char nncc; // 实际跳米数 + }stepPrint_t; // 8Byte + +typedef struct + { + unsigned short startValue; // 起始值 + unsigned short repeatValue; // 重复间隔 + unsigned short repeatPrintTimes; //重复打印次数 + unsigned char DistanceTail; //距离尾部 + unsigned char enable:2; // 交替便能 + unsigned char lineSpace:6; //行距 + //unsigned int bak[10]; // 保留参数 + }alterPrint_t; // 8Byte + +//隐藏功能 +typedef struct + { + unsigned char SpecialVarEnable; //特殊变量使能 + unsigned char MeterEnable; //计数器4带米标使能 + unsigned short SpecialConditionValue; // 隐藏条件倍数值 + unsigned short SpecialVarCountEnd; + unsigned short SpecialVarColStart; + unsigned short SpecialVarColEnd; + unsigned char SpecialVarRowStart; + unsigned char SpecialVarRowEnd; + }SpecialVarPrint; // 8Byte + +#else +typedef struct + { + unsigned char startValue; // 起始值 + unsigned char StepValue; // 跳米间隔 + unsigned char endValue; // 结束值 + unsigned char enbale; // + }stepPrint_t; // 4Byte + +typedef struct + { + unsigned char startValue; // 起始值 + unsigned char repeatValue; // 重复间隔 + unsigned char repeatPrintTimes; //重复打印次数 + unsigned char enable; // 交替便能 + }alterPrint_t; // 4Byte +#endif + +typedef struct // BarCodeOption +{ + unsigned char xpos; + unsigned char font; + unsigned char width; + unsigned char height; + unsigned char scale; + unsigned char type:6; + unsigned char InkColor:1; + unsigned char autoFlash:1; + + unsigned char RecFromHost:1;// RecFromHost + unsigned char DisplayUpdate:1; //变量更新标志 + unsigned char AutoCount:1; // 自动变化 + unsigned char var1En:1; //变量1使用 + unsigned char var2En:1; //变量2使用 + + unsigned char barType;// 条形码类型 + + unsigned short var1Type;// 变量1类型 + unsigned short var2Type;// 变量2类型 + unsigned char var1Num;// 变量1位数 + unsigned char var2Num;// 变量2位数 + + + unsigned char NC2[11]; + char text[80]; + char TxtModule[40]; + char TxtLine[30]; + char TxtLine1[30]; +// unsigned char var3Num;// 变量3位数 +}bcOption_t; + +typedef struct { + unsigned int posx; + unsigned char cntNum; + unsigned char width; + unsigned char height; + unsigned char VarNum:3; //1 + unsigned char AutoRefresh:1; + unsigned char AutoCount:1; + unsigned char InkColor:1; + unsigned char RecFromHost:1;// RecFromHost + unsigned char DisplayUpdate:1; //变量更新标志 + unsigned char type; //0-DataMatrix, 1-QRCode,2-BAR + unsigned long counter; + char text[100]; + char textCnt[10]; + char text2[80]; + char text3[8]; + unsigned short CntInc; + unsigned char barCodeFlag:1;//条形码 +}qrOption_t; + +typedef struct { + int type; + int width; + int height; + int startColPos; + int endRowPos; + int startRowPos; + unsigned int Counter; // + unsigned char countEn; + unsigned char TimeEn; + unsigned char cntNum; // 未使用 + unsigned char NNC2; // 未使用 + //--------------------- + char text[100]; //指向申请内存的空间 生成字模数据 + char textCnt[10]; + char text2[90]; + bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 +}QRvars_t; + +/* 分段计米相关设定 */ +typedef struct { + unsigned char cnt1GroupCnt; //总共组数 + struct{ + int StartValue; + int EndValue; + //int StepValue; + //int RepeateValue; + int LoopTimes; + }cnt1GroupSettings[MAX_CNT1_GROUPS_NUM]; +}Cnt1ByGroup_t; + +typedef struct +{ + int type;// + int width; + int height; + int startColPos; + int endRowPos; + int startRowPos; + unsigned int year; // + unsigned char month; + unsigned char day; + unsigned char separate[3]; + unsigned char bold; + unsigned char letterSpace; + unsigned char splitMode;// '-','/',年05月24日 + //unsigned int addDays; // + //--------------------- + char text2[20]; + //bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 +}EXPIRYVAR_t; +// 打印参数 +typedef struct { + /* 打印参数 */ + unsigned int printTotalColNum:16; // 0,1 + unsigned int printDirection:8; // 2[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 + unsigned int reducedPixelNum:6; // 3 冗余点数 + unsigned int reducedPixelMode:2; // 冗余点比例 + + unsigned int printRowDelay:8; //4 打印模式 + unsigned int printColDelay:24; // 打印设置下的 5,6,7 字宽 + + unsigned char charBold; //8 字体加宽 + unsigned char pixNumPerCol; // 9 每列点阵数 + unsigned int timeTriggerPrintDelayMs:16; //a,b + unsigned int photoElectricityRepeateNum:16; //c,d + unsigned short eleEyeTriggerPrintDelay; // e,f + + unsigned int printTriggerMode:8; // 10 + unsigned int totalSynPulseNum:24; //11,12,13 + unsigned int elecEyeTriggerInterval:32; //14,15,16,17 + unsigned char lineEndAdjustPointCnt; //18 + unsigned char lineEndAdjustPointDelay; //19 + short lastLineEndPointFixedDACValue; //1a 1b + unsigned char extClearAllCntEnable; // 1c --- 通过外部(同步器或电眼)清零 0x3a + unsigned char HighVoltageAmplitude; //0x1d 字高// 字高电压系数 + unsigned char mmmee[2]; + //unsigned short timeTriggerPrintDelayMsH:16; // no use 1e,1f + + // FPGA ADDR 0x60~0x63 + unsigned short productNumToGenerateOutputPulse; //0x1d,1e num产品 out put a pulse + unsigned short outputPulseDelayMs; // 0x1f,0x20 + + // FPGA ADDR 0x44~ + alterPrint_t alterPrint; // 8Byte FPAG由地址0x44~0x4B + unsigned char Cnt1NatureValue:1; //0自然数 + unsigned char eleEyeTriggerSynPrintEn:1; //1电眼触发的同步打印使能 + unsigned char autoSynSpeedEn:1; //2同步打印自动模式 + unsigned char newAmplifyPlate:1;//新放大板选项 + unsigned char SynCntEn1:1; // 4 不打印走米 + unsigned char Vol1of8En:1; // 5 1/8电压打印 + unsigned char eleEyeReTrigDisable:1; // 6 + unsigned char set_HVData_Flag:1; // checkBoxYH + + unsigned char rrr_nc[1]; // 0x4d + unsigned short synPulsePerMmX8 ;// 0x4e~4f + + + bool leftRightInverse; + bool upDownInverse; + bool scanInverse; + int currPrintMode; + + int cnt1EndValue; + int cnt1StartValue; + int cnt1StepValue; + int cnt1RepeateValue; + int cnt1CurrValue; + int cnt2EndValue; + int cnt2StartValue; + int cnt2StepValue; + int cnt2RepeateValue; + int cnt2CurrValue; + +#ifdef SYNLENFLOAT + float +#else + int +#endif + synTriggerPrintLenMm; + + int synTriggerPrintLenRatio; + + int timeTriggerPrintMode; + int printDelayMs; + int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 + int synCharWidthRatio; + int rowSequenceMode; + int pointVoltageAdjustPos; + int PointVoltageAdjustValue; + + int synClearCntInEleEyeMode; //在电眼触发模式下通过同步器清零 + int eleEyeClearCntInSynMode; + int reducedPixelNumRatio; + int lastLineEndPointFixedValue; //对高压部分点的修正 + int pulseOutputEnable; // 脉冲使能输出 + int productCntPerOutputPulse;// + + int startVoltage; //首行电压 + int endVoltage; //行末电压 + + float synPulseNumPerMm;// 同步器参数 脉冲/毫米 + // 添加参数 + unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 + int FullColFixVal; + unsigned char SynCntEn:1; + unsigned char ENNCC:7; + unsigned char NCCC22; + unsigned short eleMaskTime; // 16bit + unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation + unsigned short headLen; + unsigned short endLen;//6 + unsigned char varLenEn;// + short varLen; // 可变长 + short varLen1; // 可变长 + unsigned char NCCC; + QRvars_t QRvars[MAX_QVARI_NUM]; + //BCvars_t BCvars[MAX_QVARI_NUM]; + stepPrint_t stepPrint; // 8Byte + int phaseHighLowRatio; //保存相检 + short phaseShift; //相位偏移 + unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数 + int phaseDetectVol; + unsigned int phase_detect_pulse_num:4; // 检测个数 + unsigned int phase_detect_voltage:12; // 相检电压阀值 + unsigned short phaseDetectDelay; + unsigned char rrrccc[2]; + quint16 phaseHighCnt; +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + Cnt1ByGroup_t Cnt1ByGroup; +#endif + EXPIRYVAR_t ExpiryVar; //有效期变量 2018.5.24 + EXPIRYVAR_t CurDateVar; + EXPIRYVAR_t ClassVari; + int ExpiryDay; //有效期天数 + //unsigned char ExpirySplitMode; + + int cnt4CurrValue; + int HiddenConditionValue; + bool HiddenFuncEnable; + bool HiddenMeterEnable; + +// int cnt3EndValue; +// int cnt3StartValue; +// int cnt3StepValue; +// int cnt3RepeateValue; + int cnt3CurrValue; + int textEditLineSpace; + unsigned char speedoverPaushPrint; // 3速度超速不打印标志 +}printPara_t; + +typedef struct { + + unsigned int printTotalColNum:16; + unsigned int printDirection:8; //[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 + unsigned int reducedPixelNum:6; + unsigned int reducedPixelMode:2; + + unsigned int printRowDelay:8; + unsigned int printColDelay:24; + + unsigned char oscillatorVoltage; //0x08 + unsigned char phaseByHand; + unsigned char charBold; + unsigned char pixNumPerCol; + + unsigned int timeTriggerPrintDelayMs:16; + unsigned int photoElectricityRepeateNum:16; + + unsigned int printTriggerMode:8; //0x10 + unsigned int totalSynPulseNum:24; + + + unsigned int elecEyeTriggerInterval:32; + + unsigned short divideRatio; //0x18 + unsigned char lineEndAdjustPointCnt; // 0x1a + unsigned char lineEndAdjustPointDelay; // 0x1b + unsigned char enableChargeFullTime; // 0x1c + unsigned char timeTriggerPrintDelayMsH:8; // 0x1 + //unsigned char phaseGroupCount:8; // 0x1 + short lastLineEndPointFixedDACValue; + + unsigned int synNumPerCol:16; //0x20,小数位占8位 //每列同步起脉冲数 + unsigned int dotNumPerCol:16; // 平均每列的像素点(减去冗余的点后) + 列延迟(即打印设置界面中的字体宽度printColDelay) + + unsigned short phase_detect_high_cnt; // + unsigned int phase_detect_pulse_num:4; // 检测个数 + unsigned int phase_detect_voltage:12; // 相检电压阀值 + + unsigned short maxHighVoltageDAC;//0x28 + + unsigned short phaseDetectDelay; //相检延迟 //可以认为是相检的间隔, 以墨点为单位 + short phaseShift; // 相位偏移 + unsigned char HighVoltageAmplitude; + unsigned char magicNum; + + unsigned short productNumToGenerateOutputPulse; //产生一个脉冲所需的产品计数个数//0x30 + unsigned short outputPulseDelayMs; + unsigned short septalPostion; //设置的隔膜位置 + unsigned short blinkLightPeriod; //频闪灯周期,以墨点为单位 + unsigned short eleEyeTriggerPrintDelay; // 0x38 + unsigned char extClearAllCntEnable; //通过外部(同步器或电眼)清零 0x3a + unsigned char FullColFixDacVal; // 0x3b + // 0x3C 0x3D 3E 3F USEING + +#ifdef ALT16 + alterPrint_t alterPrint; // 8Byte +#else + stepPrint_t stepPrint; // 4Byte FPAG地址0x44~0x4B + alterPrint_t alterPrint; // 4Byte +#endif + unsigned char Cnt1NatureValue:1; //自然数 + unsigned char eleEyeTriggerSynPrintEn:1; //电眼触发的同步打印使能 + unsigned char autoSynSpeedEn:1; //同步打印自动模式 + unsigned char newAmplifyPlate:1; + unsigned char SynCntEn1:1; // 不打印走米 + unsigned char Vol1of8En:1; //打印优化 + unsigned char eleEyeReTrigDisable:1; // 6 + unsigned char set_HVData_Flag:1; // +#if 0 + unsigned char rrr_nc[1]; // 0x4d +#else + unsigned char mode0211:1; //0211 模式 + unsigned char synchronizorActType:2; // 0b00:同步器正反转打印; 0b01:同步器只正转打印; 0b10:同步器只反转打印 + unsigned char cnt1ResetToInitValue:1; // 电眼复位时,选择复位到起始值还是当前值 + unsigned char flagOfFastMode:1; +// unsigned char rrr_nc:4; +// unsigned char printOnce:1; // 0x4D :[4:4]0-信息重复打印;1-每条信息只打印一次 + unsigned char rrr_nc0:1; // 0x4D :[5:5] + unsigned char printNumPoint:1; // 0x4D :[6:6]计数器1打印小数点使能位 + unsigned char rrr_nc:1; // 0x4D :[7:7] +#endif + unsigned short synPulsePerMmX8 ;// 0x4e~4f + /*-------------------------------cut line--------------------------------------*/ +#ifdef ALT16 + stepPrint_t stepPrint; // 8Byte + unsigned int reserved_reg[12]; // 4*(12)=48Byte // 地址: ~0x7F +#else + unsigned int reserved_reg[14]; // 4*(14)=56Byte // 地址: ~0x7F +#endif + unsigned short highVoltageRecord[10]; // 0x80 = 128开始 + int reclaimPumpPWMWidth; + bool leftRightInverse; + bool upDownInverse; + bool scanInverse; + int currPrintMode; + float synPulseNumPerMm; + int cnt1EndValue; + int cnt1StartValue; + int cnt1StepValue; + int cnt1RepeateValue; + int cnt1CurrValue; + int cnt2EndValue; + int cnt2StartValue; + int cnt2StepValue; + int cnt2RepeateValue; + int cnt2CurrValue; + + int startVoltage; + int endVoltage; +#ifdef SYNLENFLOAT + float +#else + int +#endif + synTriggerPrintLenMm; + + int highVoltageLevel; + int pressure; + int viscosityPumpInterval; + int reclaimTankTime; + int temperature;//喷头温度 + int viscosity; + int viscosityAdjust; + bool stopCounterMeterAfterFault; + bool suspendAfterPhaseFault; + int oscillatoFreq; + int synTriggerPrintLenRatio; + char lastOpenedFileName[100]; + int phaseHighLowRatio; //相位高电平占空比 + int phaseDetectVol; //因为和实际的值有一个转换过程,所以用此变量做中转 + int oscillatorFreqFix; + unsigned int totalProductCnt; + int timeTriggerPrintMode; + int printDelayMs; + int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 + int synCharWidthRatio; //字符宽度 或 喷印比例 触发设置界面 + int rowSequenceMode; + int pointVoltageAdjustPos; // 点距电压调整位置 + int PointVoltageAdjustValue; //点距调压调整值, 超过调整位置就需要增加充电电压 + int RecycleWarnAction; + int powerOffAfterPhaseFault; + int synClearCntInEleEyeMode; //在点眼触发模式下通过同步器清零 + int eleEyeClearCntInSynMode; // CNT2 D5=0选择电眼复位 D5=1选择电眼加1 ; + // CNT1 D4=0选择电眼复位 D4=1选择电眼加1 ; + // D2D1D0 =00 禁止电眼操作,01 电眼复位,打印完成,10 电眼立即复位 + + int fontPixelSize; //用来记录上一次设置的字体大小 + //int septalPostion; + int mixValveisNewVersion; //混和阀是否是新管路 + int lastLineEndPointFixedValue; //对高压部分点的修正 + int textEditLineSpace; + int textEditCharSpace; + int industryIndex; + int recommendedPrintSpeed; + int pulseOutputEnable; + int productCntPerOutputPulse; + int reducedPixelNumRatio; + int EditMode; //编辑模式 0 txt , 1 dot, 2 场景 + //int nncc:31; + int AlterMode; // 交替状态 0,1,2 + int SynCntEn:1; + int ResetProductCntEn:1; // 复位产品计数器 + int ResetAllProductCntEn:1;// 复位总产品计数器 + int HVFaultCloseEn:1;// 高压故障关回收槽 + int MirrABCEnable:2; // 0 无镜像,1 水平,2 垂直 + int checkSpace:1; //使用空列 + int varLenEn:1;// + int ExtScreenType:3;// 外接屏类型 + int ExtMeterType:3; // 显示屏显示米数类型 + int unc:15; // + int FullColFixVal; + unsigned char ReadFileErrorCnt; // + unsigned char PowerOnErrorCnt; // + unsigned char NozzleType; // 0 -- 小,1- 大 + unsigned char NNCC; //预留,这样可以保证每次的配置文件大小一致 + short varLen; // 头部可变长 + short varLen1; // 尾部可变长 + unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数-->现在用作充电脉宽 + // short reverse; //留,这样可以保证每次的配置文件大小一致 + unsigned char diameter:3; + unsigned char Reciclar:1; + unsigned char ResetSendData:1; + unsigned char reverse:2; + bool isCheckInsertTime; + calandar_and_dat_t calandar_and_dat; + // 添加参数 + unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 + + bcOption_t bcOption; + qrOption_t qrOption; + unsigned short eleMaskTime; //0x3C,3D 电眼锁定(屏蔽)间隔ms + unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation + long long openInkLineTime; //记录墨线开关时间 136年 以秒为单位 + long TrunOnPowerCnt; // 开机次数 20151218 +// int varLenEn:1;// +// unsigned char varLen; // 可变长 + unsigned short headLen; + unsigned short endLen; + int ExpiryDay; //有效期天数 + unsigned char ExpirySplitMode; + quint16 diaphramOffset; // 隔膜位置偏移,当隔膜位置低于(设定的隔膜位置-偏移),主墨泵就开启 + unsigned char gearPumpEnable:1; + + quint16 gearPumpValue; + quint16 steal_dac_row; + quint16 phaseHighCnt; + int reserved2[13];// 23 -1预留,这样可以保证每次的配置文件大小一致 + unsigned short reverse3; + bool isCheckBarDate; //条形码加入日期 + bool isCheckBarTime; //条形码加入时间 + bool cnt1ByGroupEnalbe; +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + Cnt1ByGroup_t Cnt1ByGroup; +#endif + quint16 printed_adj_dac[40]; + quint16 printed_continue_col_dac[40]; + quint16 printed_full_col_dac[40]; + quint16 dacScale; + unsigned int pulse_sinal_value:16; + + int cnt3EndValue; + int cnt3StartValue; + int cnt3StepValue; + int cnt3RepeateValue; + int cnt3CurrValue; + stru_counter3 Counter3; + stru_counter4 Counter4; + int cnt4CurrValue; + int HiddenConditionValue; + bool HiddenFuncEnable; + bool HiddenMeterEnable; + + //quint16 Json_device_code; + unsigned char Json_IP[4]; + quint16 Json_server_port; + bool charWidthSetEnable; + bool isCheckMagnet;//检测喷头盖磁铁 + bool isRemoveCode;//不显示二维码 + bool isCheckPrintLight;// + bool isEnableGetDataButton;//使能获取数据按钮 + bool isRemoveDigitCode;//不显示数字码 + bool isCntSaveStateValue;//计数器保存关机值 + bool isCheckBarCodeAddText; + bool isCnt1ShowNumPoint; //计数器1是否显示小数点 + char FanTemperature; + char Json_device_code[10]; + unsigned char speedoverPaushPrint:1; // 速度超速不打印标志 + bool flagOfModuleDecimal; + bool flagOfModuleHide; + bool flagOfstepPrint; + bool flagOfCnt1GroupDisp; + bool flagOfReclaimPumEnable; + unsigned int gearPumpSpeedAlarm; + bool flagOfWeiDaLiAutoPrint; + bool RFIDSolventWarn;//记录溶剂报警状态 + int RFIDSolventWarnMixCnt;//记录溶剂报警后打开混合阀次数 + bool RFIDInkWarn;//记录墨水报警状态 + bool flagOf5Row5Dot; + unsigned int inkWarnDate; + unsigned int inkWarnTime; + unsigned int solventWarnDate; + unsigned int solventWarnTime; + /* */ + // 1108Bytes +}sysPara_t; + +typedef struct +{ + quint8 header[32]; + qint16 pixel_full_table[40]; + qint16 pixel_1_table[40]; + qint16 pixel_2_table[40][2]; + qint16 pixel_3_table[40][3]; + qint16 pixel_4_table[40][4]; + qint16 pixel_para_table[16]; + qint16 pixel_5_table[40][5]; + qint16 pixel_gap_table[48][5]; + qint16 pixel_pre_table[16][5]; + qint16 pixel_c_table[32][4]; +}voltePara_t; + +typedef struct +{ + quint16 matchTotalTableDACArray1[64]; + quint16 matchTotalTableDACArray2[64][2]; + quint16 matchTotalTableDACArray3[64][3]; + quint16 matchTotalTableDACArray4[64][4]; + quint16 matchTotalTableDACArray5[64][5]; + quint16 matchContinousDACArray[64]; + qint8 matchTotalDiffVoltageValue[50][64]; + quint8 matchExtraLineDACArray[64]; + qint8 matchFirstOnePointExtraLineDACArray[64]; + qint8 matchAdjustParaDACArray[8]; + qint8 matchGiantPointVoltageValue[16][64]; + quint16 matchTotalTableDACArrayFirst1[64]; //调一列的第一个单点 +}voltePara_t_25Dots; + +typedef struct +{ + quint8 header[32]; + qint16 pixel_full_table[48]; + qint16 pixel_steal_table[48]; + qint16 pixel_head2_table[48]; + qint16 pixel_head3_table[48]; + + qint16 pixel_1_table[48]; + qint16 pixel_tail2_table[48]; + + qint16 pixel_2_table[48][2]; + + qint16 pixel_3_table[48][3]; + + qint16 pixel_4_table[48][4]; + + qint16 pixel_para_table[16]; + + qint16 pixel_5_table[48][5]; + qint16 pixel_continous_table[48]; + qint16 pixel_gap_table[48][5]; // kongdian + qint8 pixel_big_table[8][8]; + qint16 pixel_gap_post_3dot_table[48][5]; // 3 kongdian + + qint16 row_delay_table[48]; + qint16 head1_row_delay_table[48]; + qint16 pixel_general_dac_parameter[64]; +}voltePara_t_No73; +typedef struct +{ + unsigned int PrintInkDots; + unsigned int InkEmptyCnt; + unsigned int SOLVEmptyCnt; + unsigned int InkRFIDCnt; + unsigned int SOLVRFIDCnt; + unsigned short solventNumber; +}RFIDPara_t; + +#define MDT 0 +#define QR 1 +#define BAR 2 + +#define MAX_SELF_CHECK_CNT 6000 //60S,以10ms为单位s +#define MIX_VALVE_OPEN_DELAY 90 //混合阀打开的时间 +#define RECYCLE_WARN_DELAY 50 //回收故障延时,以300ms为单位 +#define MAX_VISCOSITY_WORK_TIME 500 //10ms为单位 +#define MAX_MAIN_INK_PUMP_RUN_TIME 1000 //10s +#define MAX_HEATER_TIME 3000 //300s +#define MAX_COMPRESS_PUMP_RUN_TIME 6000 //60 + +#define FPGA_MAGIC_NUM_AFTER_CONF 0x73 +#define MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF 280 // 以10ms为单位 230 + + + +#define FPGA_STATUS_BYTE_NUM 0x44 + +#define MAX_PRINT_COL_NUM_Wide (1000*8 - 1) +#define MAX_PRINT_COL_NUM_Normal (500*8 - 1) +#define MAX_PRINT_ROW_NUM 40 +#define MAX_PRINT_ROW_BYTE_NUM 5 +#define BLANK_COL_NUM 3 //信息前空3列 +#define RECLAIM_PUMP_FULL_SPEED_CNT 5300 //5s钟 +#define MAX_VARI_NUM 8 + + +#define CALANDAR_YEAR 0 +#define CALANDAR_MONTH 1 +#define CALANDAR_DAY 2 +#define CALANDAR_WEEK 3 +#define CALANDAR_HOUR 4 +#define CALANDAR_MINUTE 5 +#define CALANDAR_SECOND 6 +#define CALANDAR_CNT1 7 +#define CALANDAR_CNT2 8 +#define CALANDAR_CNT3 13 +#define CALANDAR_XDAY 14 +#define CALANDAR_CNT4 15 +#define RANDOMNUM 12 +#define EXPIRYDATE 80 +#define CURDATE 81 +#define CURCLASS 82 + +#define MAX_INK_EMTYTIME 86400//10800 // s 3hour 3*60*60 = 10800s +#define MAX_SOLV_EMTYTIME 21600//10800 // s 3hour 3*60*60 = 10800s +#define MAX_INK_RFIDTIME 86400//10800 // s 3hour 3*60*60 = 10800s +#define MAX_SOLV_RFIDTIME 7200//21600//10800 // s 3hour 3*60*60 = 10800s +#define MAX_INK_DOTS 2300000000//PrintInkDots +#define MAX_SOLV_OPENNUM 400//OpenNumber +#define MAX_INK_SOLV_EMTYTIME 10800 // s 3hour 3*60*60 = 10800s + +#define AUTOCLEAN_STATUS_NONE 0 +#define AUTOCLEAN_STATUS_STEP1 1 +#define AUTOCLEAN_STATUS_STEP2 2 +#define AUTOCLEAN_STATUS_STEP3 3 +#define AUTOCLEAN_STATUS_STEP1_TIME 60 +#define AUTOCLEAN_STATUS_STEP2_TIME (60*3) +#define AUTOCLEAN_STATUS_STEP3_TIME (5) + +typedef struct { + int type; + int digitalNum; + int width; // 字模的宽度 + int height; // 字模的高度 + int startColPos; + int endRowPos; + int startRowPos; + int bassAddr; // 字模的地址, 从0开始,不同类型会一直增加 + int currVal; + int bold; + int letterSpace; + //int chartype;// 字体类型:0 常规,1 左横,2 右横, 4 倒立(Nc) + //--------------------- + unsigned char *dat; //指向申请内存的空间 生成字模数据 + int datWidth; //datWidth * datHeight为像素的数目,申请空间的大小为datWidth*rowByteNum; + int datHeight; // 变量的高度 + int rowByteNum; + bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 +}vars_t; + + +typedef struct{ + unsigned int VREF:16; + unsigned int MOTOR_ISEN:16; + + unsigned int TEMP_ADIN:16; + unsigned int HV_DETOUT:16; + + unsigned int AD_FIXED:16; + unsigned int SEPTAL_POSITION:16; + + unsigned int PRESSURE:16; + unsigned int AD_UNUSED:16; + + unsigned int maginNum:8; //0x10 + unsigned int statWarn:8; //0x11 + unsigned int flightTm:16; + + unsigned int phase:16; + unsigned int viscosity:16; + + unsigned char phaseChargeResult[8]; + +/* + unsigned short ink_dot_num:6; //飞过相检头上的墨点数 0x20 + unsigned short detect_phase_error:1; + unsigned short flight_tm_error:1; + unsigned short synPulseCntPer1sH:8; + unsigned short synPulseCntPer1s:16; +*/ + unsigned int ink_dot_num:6; //飞过相检头上的墨点数 0x20 + unsigned int detect_phase_error:1; + unsigned int flight_tm_error:1; + unsigned int synPulseCntPer1s:24; + + unsigned int productCnt; + + unsigned int synColDelay:16; //0x28 + unsigned char phasePosEdge; //0x2a + unsigned char phaseNegEdge; //0x2b + + unsigned int synTotalPulseCnt; //0x2c~2f + + unsigned int warm_InkPump:1; // 0x30 + unsigned int ink_Ctrl:1; + unsigned int adj_warn:1; // 自动调速状态 NC 20140305 + unsigned int lesslen_warn:1; // 喷印不完整报警 20140305 + unsigned int wait_phdetect_ok:1; // 等待相检完成 V3W 版还没有对此作修改。 原V6S的参数 + unsigned int set_HVData_Flag:1; // 设置高压包电流标志 + unsigned int dummy:2; + unsigned char reclaimTankstatus; // 0x31 130113 + unsigned short curr_reclaimTankTime; // 0x32 33 电机当前开关时长(s) 130113 + unsigned char read_nc11[2]; //34,35 // no use + unsigned char ele_product_cnt_reset; //36 {ele_product_cnt_reset[1:0]}; + unsigned char RandomNum; // 目前实际只[4:0] 37 + unsigned int totalProductCnt ; // 总产品计数器 38393A3B // [1:0] 11立即清零, [2]计数器1单独清零 [3]计数2单独清零 [4]总产品计数器清零 + unsigned int total_syn_pulse_num ; // +#if(0) + unsigned int volGap_pulse_num; // +#else + unsigned int volGap_pulse_num:24; // + unsigned int AlterMode:8; // 交替状态 0,1,2; //0x43 共 0x44个字节 +#endif + //unsigned char read_ncba[6]; // 不用 3C + + + /*----------------------------cut line----------------------------*/ + unsigned short phaseDetectHighTm[64]; //每一个相位的高电平时间 + + unsigned char RandomDigitNum;// 随机码长度 + unsigned char RandomBackCnt; // 0不需要备份,>0需要备份 + + bool isPumpValveControledByHand; //0x20 + bool isCleanUp; + int reclaimCloseCnt; + bool selfCheckDone; + int selfCheckCnt; + int viscosityDelayCnt; + int viscosityFaultCnt; + int rWarnViscoReady; + int viscosityMaxFaultCnt; + int reclaimPumpFullSpeedCnt; //全速开 + bool mainInkPumpError; //主墨泵故障 + int mainInkPumpRunTmCnt; + bool compressPumpError; + int compressPumpRunTmCnt; + int currPrintCol; + int currPrintRow; + unsigned char printDat[MAX_PRINT_COL_NUM_Wide*MAX_PRINT_ROW_BYTE_NUM]; + unsigned char printDat_Normal[MAX_PRINT_COL_NUM_Normal*MAX_PRINT_ROW_BYTE_NUM]; + int currAlterPrintCol; + int currAlterPrintRow; + // unsigned char printAlterDat1[MAX_PRINT_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; + // unsigned char printAlterDat2[MAX_PRINT_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; + int delay10ms; + int delay100ms; + int delay1s; + int delay10s; + int delay100s; + int viscosityFault;// 0 正常,1-粘度值高,2-粘度值低 + int lastViscosityFault; //用来记录上一次的粘度错误状态 + int lastStatWarn; + int lastPhaseFault; + int phaseErrorCnt; + + /* Yang */ + int lastRecycleWarn; //记录上一次的回收故障状态 + int RecycleWarnCnt; + int LightUpCnt; + + bool gearPumpRunStopFlag; + unsigned short gearPumpRunSpeed; //齿轮泵转速 + int visocityValueOverflowNum; /*记录粘度溢出次数*/ + unsigned int lastProductCnt; + unsigned int lastSynPulseCntPer1s; // + int lastSynColDelay; + int configDone; //配置完成 + int currentRunStatus; + unsigned int fpgaVersionNum; + unsigned char FPGAChipType; + bool detectHighVoltageAppending; //检测高压 + bool detectedValidHighVoltage; //是否检测到高压 + unsigned int detectHighVoltageCnt; //检测高压的次数 + int lastwarmInkPump; + int variNum,QRvariNum,BCvariNum,ExpiryVarNum,ExpiryDispUpdate,CurrDateVariNum,classVariNum; + vars_t vars[MAX_VARI_NUM]; + //QRvars_t QRvars[MAX_QVARI_NUM]; + calandar_and_dat_t calandar_and_dat; + + /*---------------回收槽控制相关----------------------*/ + int currReclaimTankPos; + int currReclaimOperationCnt; + bool reclainTankReachEnd; //完全打开 + bool reclainOpenAppending; + bool reclainCloseAppending; + bool canRunAirPushing; + + int currMsCnt; + /*---------------------------------------------*/ + bool cnt1CurrentValueInitDoneFlag; // 将这两个值设为false,会另cnt1和cnt2的当前值初始化 + bool cnt2CurrentValueInitDoneFlag; // + /*----------------------------------------------*/ + /*----------------------------------------------*/ + bool RedLightOnFlag; + bool GreenLightOnFlag; + bool YellowLightOnFlag; + + bool beeperOnFlag; + /*--------------------------------------------*/ + int heaterONTimeCnt; //连续加热有时间限制 + + bool lostCommuFlag; //失去通信 + + bool isPrinting; // + + int cycleValveOpenCntAfterSWintOff; //墨线关掉的时候关循环阀的时间 + int cycleValveOpenCntAfterSWintOn; //墨线开启的时候开循环阀的时间 + + //2019/10/26 + bool autoCtlReclaimAfterSWintOff; + int reclaimOpenCntAfterSWintOff; //墨线关掉的时候关回收阀的时间 + bool byHandStore; // 为了控制主墨泵, 保存当前是否在手动状态,然后切换手动状态, + + bool powerOffAppending; //按下快速关机 + + bool reclaimTankBlockedAppending; //回收槽被卡住 + int airPushingOnTime; // 排气的运行时间 + bool airPushing; // 开回收槽执行排气动作 + bool airPushingDone; // 开回收槽执行排气动作完成 + + bool DACDisable; //相位故障,DAC被disable + bool WorkTimeOut; + bool detectBestOscillatorFreqAppending; //检测最佳晶振频率 + bool detectBestOscillatorVoltageAppending; //检测最佳晶振频率 + int currentDetectBestOscillatorCnt; + int longestPhaseHightLevelTm; //最长的相位高电平时间 + int detectedBestOscillatorFreq; // + int detectedStartOscillatorFreq; + int detectedBestOscillatorVoltage; // + int releaseValveDelayCnt; //开泄压阀后立刻关掉,等一定间隔在检测 + int reclaimBlockedCnt; + bool releaseValveOpenApending; + int powerOffAfterPhaseFaultAppending; + unsigned int pressureOverFlowCnt; + unsigned int septalPositionOverFlowCnt; + bool powerOffAfterInkOrSOLVEmptyAppending; //墨水或溶剂空3小时标志 + // + alterPrint_t alterPrint; // 交替打印 + stepPrint_t stepPrint; // 跳米打印 + build_dat_t build_dat; + xor_sync_couter xor_sync; + unsigned int InkOrSOLVEmptyCnt; + unsigned char EditMode; // + + unsigned char updateSoftEN:1; + unsigned char adjHightVolInitEN:1; + unsigned char FileChangeRestCntFlag:1; // 更换文件,清除计数器 + unsigned char HVFaultCloseEn:1;// 高压故障关回收槽 + unsigned char ExtScreenEn; // 外接屏连接正常 + unsigned char waitHightVolOff,waitHightVolOn; // + unsigned char addSpace;//sysPara->para.checkSpace + unsigned char autoCleanStatus; // clean status, 0: NONE,1: Step1 ... + unsigned int autoCleanTime; // clean time + + unsigned int cnt1GroupCurrentLoop; //分段计米 计数器1当前第几次循环 + unsigned char cnt1GroupRunningIndex; //分段计米 计数器1当前第几次段 + unsigned int indoorTemperature; //开机记录喷头温度,作为是否调整粘度的根据 + unsigned int needPowerOffTimerout; +#ifdef __STC_POWER__ + unsigned int powerSource; + unsigned int powerOnTimer; + unsigned int waitPowerOffTime; +#endif +#ifdef __ADC_INPUT__ + unsigned char boardTemp; //机箱温度 +#endif + unsigned char bLanConfigManual; //手动设定有线ip 地址 + quint16 r_print_q; + quint8 col_state; + quint8 r_row_sequcence; + quint8 dot_num; + quint8 curr_index; + quint16 RowADC; + quint16 w_curr_DAC; + quint16 curr_DAC; + quint16 printed_column; + + quint16 printed_adj_dac[40]; + bool cnt3CurrentValueInitDoneFlag; + stru_counter3 Status_Counter3; + bool printDoneFlag; + bool oneCodePrintOnce; + bool forTemplateUse; + SpecialVarPrint specialVarPrint; + bool lastHighVoltageFault; //高压错误 + bool circleProductCnt; + unsigned int printTotalColNum:16; + unsigned char pixNumPerCol; + unsigned short XXXDay; + int cnt4CurrValue; + bool flagOfAdjustWidth_1; + unsigned char splitMode_Adjust_1; + bool flagOfAdjustWidth_2; + unsigned char splitMode_Adjust_2; +//edit-12.2 + bool flagOfNo67FPGA; //识别67版本,67版本使用4000列,其他版本使用8000列 + short FPGAVersionType; //兼容旧的FPGA版本,0=新FPGA. 旧FPGA: 1=No66,2=No67,3=No72,4=No73 + unsigned int textEditTotalCol; + bool flagOfWeiDaLiTCP; + unsigned char flagOfWeiDaLiTCPClear; + unsigned char flagOfWeiDaLiTCPStartPrinting; +// unsigned int numberOfPrintWeiDaLiTCP; + bool flagOfPressureFault; + bool flagLogInfo; + bool flagOfDropNextSignal; + unsigned int TextInkDots; + bool flagOfSolventMaxNum; + bool flagOfInkMaxDot; + bool flagOfNeedInkCard; + bool flagOfNeedSolventCard; + bool flagOfSpeedAlarm; + +}sysStatus_t; + +#define RUN_STATUS_IDLE 0 +#define RUN_STATUS_LOST_COMMUNICATION_WITH_FPGA 1 +#include + +/* input registers */ +typedef struct { + uint16_t printFinishFlag;//(0) + uint16_t orderCode;//顺序号(1) + + uint8_t usedFileName[100];//(2-51) + uint16_t printStatus;// 1:正在打印, 2:暂停打印, 3:停止打印(52) + uint16_t statWarn;//(53) + calandar_and_dat_t curCalendarAndDate;//(54-79) + uint32_t mbCurrPrintRow;//(80-81) + uint32_t mbCurrPrintCol;//(82-83) + uint32_t productCnt; //产品计数器(84-85) + uint16_t receiveEnbleFlag;//(86) +}ModbusPrintStatus; + +/* holding registers */ +typedef struct { + uint8_t QRcode_buf[110]; //存二维码的buf(0-54) + uint16_t printCommand; // 1:开始打印, 2:暂停打印, 3:停止打印(55) + uint8_t selectFileName[100]; // 选择要打印的文件(56-105) + uint16_t faultRusume;//(106) + calandar_and_dat_t setCalendar;//(107-133) + uint32_t lineSpaceAndCharSpace; //高16作为行间距,低16位作为字符间距(134-135) + uint16_t clearProductCnt; //产品计数器(136) + uint16_t printContent;//2位数的打印内容(137) +}ModbusPrintParas; + + +/* net data */ +typedef struct { + //get data + char PrintingContent[2048]; + int ProductPlanQty; + char ProductUniqueCode[110];// 产品唯一编码 + int ProductionTask; + char QRCodeContent[110]; + int StartMetre; + bool TasdNeedConfirm; + int TaskSwitchingMode; +}JSON_DATA; + +class SysPara{ + //Q_OBJECT +public : + + SysPara(void); + QString sysFile; + printPara_t print; + sysPara_t para; + voltePara_t voltePara; + voltePara_t_No73 voltePara_No73; + voltePara_t_25Dots voltePara_25Dots; + RFIDPara_t RFIDPara; + sysStatus_t status; + ModbusPrintStatus modbusStatus; + ModbusPrintParas modbusParas; + JSON_DATA Get_JSON_DATA; + DevOp *devOp; /*设备操作*/ + void loadParaFromFile(); + void saveParaToFile(); + void loadDefaultPara(); + void loadDefaultPrintPara(); + void loadPrintParaFromFile(QString fileName); + void savePrintParaToFile(); + void showDebug(QString s); + void showDebug(int s); + void loadVolteParaFromFile(PRINT_MODE mode); + void saveRFIDPara(); + bool loadRFIDPara(); + private: + +}; + +#endif /* SYSPARA_H_ */ diff --git a/SystemManage.cpp b/SystemManage.cpp new file mode 100644 index 0000000..e2a60be --- /dev/null +++ b/SystemManage.cpp @@ -0,0 +1,1553 @@ +#include "SystemManage.h" +#include "ui_systemmanage.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "SysPara.h" +#include "DevOp.h" +#include "myinclude.h" +#include "Public.h" +#include "dlginputaddr.h" +#include "qprogressdialog.h" +#include "LogInfo.h" +#include +#include +#define RECLAIN_TANK_TEST_MAX_COUNT 10 +enum ReclainTankTestEnum{ReclainTankTest_eNotStart,ReclainTankTest_eOpenning,ReclainTankTest_eOpened,ReclainTankTest_eClosing,ReclainTankTest_Closed}; +SystemManage::SystemManage(QWidget *parent) : + QWidget(parent), + ui(new Ui::SystemManage),timeDia(0) +{ + ui->setupUi(this); + timeDia.hide(); + setPumpValveBottonEnable(false); + ui->pushButtonCompressPump->setEnabled(false); + ui->pushButtonMainInkPump->setEnabled(false); + ui->pushButtonReleaseValve->setEnabled(false); + ui->pushButtonReclaimPump->setEnabled(false); + ui->pushButtonGearPump->setEnabled(false); + ui->pushButtonGearPumpOff->setEnabled(false); + + ui->pushButtonPushAir->setEnabled(true); //2019-10-23 排气按钮始终使能 by kun + timer = new QTimer(); + connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); + timer2 = new QTimer(); + connect(timer2, SIGNAL(timeout()), this, SLOT(timerHandler2())); + autoCleanTimer = new QTimer(); + connect(autoCleanTimer, SIGNAL(timeout()), this, SLOT(autoCleanTimerHandler())); + connect(this,SIGNAL(autoCleanStart(void)),this,SLOT(onAutoCleanStart(void))); + + reclaimTankTestTimer = new QTimer(); + connect(reclaimTankTestTimer, SIGNAL(timeout()), this, SLOT(reclainTankTestHandler())); + +/***2019/10/22 start*****/ + inkcloseCountTimer = new QTimer(); + connect(inkcloseCountTimer, SIGNAL(timeout()), this, SLOT(inkcloseCountHandler())); + inkcloseCountTimer->start(1000); +/****2019/10/22 end****/ + +/***2019/10/23 start*****/ + MainnkCmpSepetalTimer = new QTimer(); + connect(MainnkCmpSepetalTimer, SIGNAL(timeout()), this, SLOT(MainInkCmpSepetalHandler())); + // MainnkCmpSepetalTimer->start(100); +/***2019/10/23 *****/ + +#ifdef MIMA + dialogUpateMm =new DialogAuthorization; + connect(dialogUpateMm,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted())); + + dialogTimeSetAuthorization = new DialogAuthorization; + connect(dialogTimeSetAuthorization,SIGNAL(accepted()),this,SLOT(on_dialogTimeSetAuthorizationAccepted())); + + dialogSysUpdateAuthorization = new DialogAuthorization; + connect(dialogSysUpdateAuthorization,SIGNAL(accepted()),this,SLOT(on_dialogSysUpdateAuthorizationAccepted())); +dialogFactorySetAuthorization = new DialogAuthorization; +connect(dialogFactorySetAuthorization,SIGNAL(accepted()),this,SLOT(on_dialogFactorySetAuthorizationAccepted())); + dlgInputAddr_TimeSet = new DlgInputAddr(parent); + dlgInputAddr_TimeSet->GetAddr(); + dlgInputAddr_TimeSet->vpnConnect(); + dlgInputAddr_TimeSet->hide(); + +#endif + connect(ui->spinBoxGearPumpValue,SIGNAL(valueChanged(int)),this,SLOT(updateGearPumpValue(int))); +#if 0 + dialogAutoClean = new QProgressDialog(this); + + dialogAutoClean->setWindowModality(Qt::WindowModal); + dialogAutoClean->setMinimumDuration(2); + dialogAutoClean->setCancelButtonText(tr("Cancel")); + dialogAutoClean->setWindowTitle(tr("(1/2) Cleaning, please wait... ")); + dialogAutoClean->setRange(0, AUTOCLEAN_STATUS_STEP1_TIME); + dialogAutoClean->setAutoClose(true); + dialogAutoClean->setAutoReset(true); +#endif + //ui->pushButtonCleanUP->hide(); + ui->pushButtonExportConfToUDisk->setDisabled(true); + ui->pushButtonImportConfFromUdisk->setDisabled(true); + ui->pushButtonFactorySetting->setDisabled(true); + ui->labelControlByHand->setText(tr("自动")); + ui->pushButtonMotorTest->hide(); + getCurrentScrennType(); +} + +void SystemManage::bindDlgInputAddr(DlgInputAddr *dlgInputAddr) +{ + dlgInputAddr_TimeSet = dlgInputAddr; + dlgInputAddr_TimeSet->GetAddr(); + dlgInputAddr_TimeSet->vpnConnect(); + dlgInputAddr_TimeSet->hide(); +} + +SystemManage::~SystemManage() +{ + delete ui; + delete timer2; + delete timer; + delete autoCleanTimer; + /***2019/10/22 start*****/ + delete inkcloseCountTimer; + /****2019/10/22 end****/ + + /***2019/10/23 start*****/ + delete MainnkCmpSepetalTimer; +} + +void SystemManage::on_pushButtonReleaseValve_pressed() +{ + if(sysPara){ + sysPara->devOp->controlReleaseValve(!sysPara->devOp->isReleaseValveOpen()); + ui->labelCompressPump->setText(sysPara->devOp->isReleaseValveOpen()?tr("开"):tr("关")); + sysPara->devOp->pumpValveCtrl(); + } +} +void SystemManage::on_pushButtonCompressPump_pressed() +{ + if(sysPara){ + sysPara->devOp->controlCompressPump(!sysPara->devOp->isCompressPumpOpen()); + ui->labelCompressPump->setText(sysPara->devOp->isCompressPumpOpen()?tr("开"):tr("关")); + } +} + +void SystemManage::on_pushButtonCycleValve_pressed() +{ + if(sysPara){ + sysPara->devOp->controlCycleValve(!sysPara->devOp->isCycleValveOpen()); + ui->labelCycleValve->setText(sysPara->devOp->isCycleValveOpen()?tr("开"):tr("关")); + } +} + +void SystemManage::updateGearPumpValue(int) +{ + if(sysPara->status.isPumpValveControledByHand) + { + if(sysPara->para.gearPumpEnable) + { + ui->pushButtonGearPump->setEnabled(true); + } + } +} + +void SystemManage::on_pushButtonGearPump_pressed() +{ + ui->pushButtonGearPump->setEnabled(false); + sysPara->para.gearPumpValue = ui->spinBoxGearPumpValue->value(); + sysPara->devOp->WriteMoterPump(); + ui->pushButtonGearPumpOff->setEnabled(true); +} + +void SystemManage::on_pushButtonInkValve_pressed() +{ + if(sysPara){ + //2019/10/22 + //2019/11/20 + //开供墨阀之前要判断回收泵有没有开,没开就提前打开;手动模式下,不需要提前开回收泵 + if((!sysPara->devOp->isInkValveOpen()) && (!sysPara->devOp->isReclaimPumpOpen()) && (!sysPara->status.isPumpValveControledByHand)) + { + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + } + sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); + sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); + ui->labelInkValve->setText(sysPara->devOp->isInkValveOpen1()?tr("开"):tr("关")); + } +} + +void SystemManage::on_pushButtonMainInkPump_pressed() +{ + if(sysPara){ + sysPara->devOp->controlMainInkPump(!sysPara->devOp->isMainInkPumpOpen()); + ui->labelMainInkPump->setText(sysPara->devOp->isMainInkPumpOpen()?tr("开"):tr("关")); + sysPara->devOp->mainInkCtrl(); + } +} + +void SystemManage::on_pushButtonMixValve_pressed() +{ + if(sysPara){ + sysPara->devOp->controlMixValve(!sysPara->devOp->isMixValveOpen()); + ui->labelMixValve->setText(sysPara->devOp->isMixValveOpen()?tr("开"):tr("关")); + } +} + +void SystemManage::on_pushButtonReclaimPump_pressed() +{ + if(sysPara){ + sysPara->devOp->controlReclaimPump(!sysPara->devOp->isReclaimPumpOpen(),false); + ui->labelReclaimPump->setText(sysPara->devOp->isReclaimPumpOpen()?tr("开"):tr("关")); + } +} + +void SystemManage::on_pushButtonViscosityPump_pressed() +{ + if(sysPara){ + sysPara->devOp->controlViscosityPump(!sysPara->devOp->isViscosityPumpOpen()); + ui->labelViscosityPump->setText(sysPara->devOp->isViscosityPumpOpen()?tr("开"):tr("关")); + } +} + + +void SystemManage::setPumpValveBottonEnable(bool enable){ + if(sysPara) + { + if(sysPara->para.gearPumpEnable) + { + ui->pushButtonCompressPump->setEnabled(false); + ui->pushButtonMainInkPump->setEnabled(false); + ui->pushButtonReleaseValve->setEnabled(false); + ui->pushButtonReclaimPump->setEnabled(enable); + } + else + { + ui->pushButtonCompressPump->setEnabled(enable); + ui->pushButtonMainInkPump->setEnabled(enable); + ui->pushButtonReleaseValve->setEnabled(enable); + ui->pushButtonReclaimPump->setEnabled(enable); + } + } + ui->pushButtonCycleValve->setEnabled(enable); + ui->pushButtonInkValve->setEnabled(enable); + + ui->pushButtonMixValve->setEnabled(enable); + + //ui->pushButtonReclaimTankClose->setEnabled(enable); + //ui->pushButtonReclaimTankOpen->setEnabled(enable); + + ui->pushButtonViscosityPump->setEnabled(enable); + //ui->pushButtonCleanUP->setEnabled(enable); + ui->pushButtonAutoClean->setEnabled(enable); + ui->pushButtonMotorTest->setEnabled(enable); + ui->pushButtonPushAir->setEnabled(enable); + if(sysPara) + { + if(sysPara->para.gearPumpEnable) + { + ui->pushButtonGearPump->setEnabled(enable); + ui->pushButtonGearPumpOff->setEnabled(enable); + } + else + { + ui->pushButtonGearPump->setEnabled(false); + ui->pushButtonGearPumpOff->setEnabled(false); + } + if(enable) + { + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + else + { + sysPara->para.gearPumpValue = 300; + sysPara->devOp->WriteMoterPump(); + } + } + + if(enable){ + if(sysPara){ + sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->controlMixValve(false); + sysPara->devOp->controlReclaimPump(true,true); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReleaseValve(false); + timer->start(2000); + } + } +} + + +void SystemManage::on_pushButtonControlByHand_pressed() +{ + if(sysPara){ + +#ifdef DEBUG1 + sysPara->status.statWarn =0| WARN_STATUS_HDINT;//sysPara->status.statWarn; +#endif + + if(!sysPara->status.isPumpValveControledByHand){ +#if 0 + if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::warning(this, tr("警告"), + tr("请先移开喷头盖!")); + return ; + } +#endif + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认进入手动模式?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret != QMessageBox::Ok){ + return; + }else + { + //qDebug()<<"disable inkcloseCountTimer"; + if(inkcloseCountTimer->isActive()) inkcloseCountTimer->stop(); + } + } + else { + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("请先确认已经关闭回收槽,确认进入自动模式?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret != QMessageBox::Ok){ + + return; + }else + { + // qDebug()<<"active inkcloseCountTimer"; + inkcloseCountTimer->start(1000); + } + } + if(timer2->isActive()) timer2->stop(); + sysPara->status.isPumpValveControledByHand = !sysPara->status.isPumpValveControledByHand; + setPumpValveBottonEnable(sysPara->status.isPumpValveControledByHand); + ui->pushButtonPushAir->setEnabled(true); //2019-10-20 自动还是手动模式,排气按钮都要使能 by kun + ui->labelControlByHand->setText(sysPara->status.isPumpValveControledByHand?tr("手动"):tr("自动")); + sysPara->devOp->mainInkCtrl(); + emit enableReclaimButton(!sysPara->status.isPumpValveControledByHand); + + qDebug()<<"手动控制泵阀"; + } +} + +void SystemManage::on_pushButtonReclaimTankOpen_pressed() +{ + if(sysPara){ +#ifdef DEBUG1 + sysPara->status.statWarn =0| WARN_STATUS_HDINT;//sysPara->status.statWarn; +#endif + if(!sysPara->para.isCheckMagnet) + { + if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::warning(this, tr("警告"), + tr("请先移开喷头盖!")); + return ; + } + } + sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); + ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止")); + sysPara->devOp->highVoltageCtrl(0); + sysPara->status.reclainOpenAppending = true; + sysPara->status.reclainCloseAppending = false; + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + } +} + +void SystemManage::on_pushButtonReclaimTankClose_pressed() +{ + if(sysPara){ +#ifdef DEBUG1 + sysPara->status.statWarn =0| WARN_STATUS_HDINT;//sysPara->status.statWarn; +#endif + if(!sysPara->para.isCheckMagnet) + { + if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::warning(this, tr("警告"), + tr("请先移开喷头盖!")); + return ; + } + } + sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); + ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止")); + sysPara->devOp->highVoltageCtrl(0); + sysPara->status.reclainOpenAppending = false; + sysPara->status.reclainCloseAppending = true; + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + } +} +#include +void adjustdate(int year, int mon, int mday, int hour, int min, int sec) { + time_t t; + struct tm nowtime; + nowtime.tm_sec = sec; // Seconds.[0-60] (1 leap second) + nowtime.tm_min = min; // Minutes.[0-59] + nowtime.tm_hour = hour; // Hours. [0-23] + nowtime.tm_mday = mday; // Day.[1-31] + nowtime.tm_mon = mon - 1; // Month. [0-11] + nowtime.tm_year = year - 1900; // Year- 1900. + nowtime.tm_isdst = -1; // DST.[-1/0/1] + t = mktime(&nowtime); + +#ifdef SYS_LINUX + stime(&t); +#endif + +} + +void SystemManage::on_dialogTimeSetAuthorizationAccepted() +{ + QString authString= dialogTimeSetAuthorization->getAuth(); + qDebug()<<"authString"<checWhJmDate(authString)) // 0xa001 + { + QTime tm = QTime::currentTime(); + QDate date = QDate::currentDate(); + timeDia.setYear(date.year()); + timeDia.setMonth(date.month()); + timeDia.setDay(date.day()); + timeDia.setHour(tm.hour()); + timeDia.setMinute(tm.minute()); + timeDia.setSecond(tm.second()); + timeDia.hide(); + timeDia.show(); + connect(&timeDia,SIGNAL(accepted()),this,SLOT(onTimeSettingDone())); + }else + { + QMessageBox::about(this, tr("提示"), tr("密码不正确!")); + return; + } + +} + +void SystemManage::on_pushButtonTimeSetting_clicked() +{ + dialogTimeSetAuthorization->clearAuth(); + dialogTimeSetAuthorization->show(); +// QTime tm = QTime::currentTime(); +// QDate date = QDate::currentDate(); +// timeDia.setYear(date.year()); +// timeDia.setMonth(date.month()); +// timeDia.setDay(date.day()); +// timeDia.setHour(tm.hour()); +// timeDia.setMinute(tm.minute()); +// timeDia.setSecond(tm.second()); +// timeDia.hide(); +// timeDia.show(); +// connect(&timeDia,SIGNAL(accepted()),this,SLOT(onTimeSettingDone())); +} + +void SystemManage::onTimeSettingDone(){ + adjustdate(timeDia.getYear(), timeDia.getMonth(), timeDia.getDay(), timeDia.getHour(), timeDia.getMinute(), timeDia.getSecond()); + system("hwclock --systohc"); + // qDebug() << "time setting done!"; +// QString authString= dialogTimeSetAuthorization->getAuth(); +// dlgInputAddr_TimeSet->checWhJmDate(authString); //再执行一次,不然时间改不过来 +} + + +void SystemManage::on_pushButtonUpdateCharLib_pressed() +{ + char cmd[500]; + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("Application"), + tr("是否确认更新字库?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + snprintf(cmd,sizeof(cmd),"rm /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/*.ttf"); + system(cmd); + snprintf(cmd,sizeof(cmd),"rm /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/*.ttc"); + system(cmd); + QDir FontsFile("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/"); + if(FontsFile.exists("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/"))//2451 + { + snprintf(cmd,sizeof(cmd),"cp /udisk/*.qpf2 /udisk/*.qpf /udisk/*.ttf /udisk/*.ttc /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/"); + system(cmd); + } + if(FontsFile.exists("/usr/lib/fonts/"))//am335x + { + snprintf(cmd,sizeof(cmd),"cp /udisk/*.qpf2 /udisk/*.qpf /udisk/*.ttf /udisk/*.ttc /usr/lib/fonts/"); + system(cmd); + } + + snprintf(cmd,sizeof(cmd),"chmod a+x /udisk/ss"); + system(cmd); + snprintf(cmd,sizeof(cmd),"/udisk/ss"); + system(cmd); + snprintf(cmd,sizeof(cmd),"mkdir /opt/zk/"); + system(cmd); + snprintf(cmd,sizeof(cmd),"cp -f /udisk/zk/* /opt/zk/"); + system(cmd); + snprintf(cmd,sizeof(cmd),"cp -rf /udisk/*_utf8.txt /home/plg/"); + system(cmd); + + QDir dir("/udisk/"); + QStringList filter; + filter<<"*.qpf2"<<"*.qpf"<<"*.ttf"; + QFileInfoList infolist = dir.entryInfoList(filter); + if(infolist.isEmpty()) + { + infolist.clear(); + QMessageBox::information(this, tr("提示"), tr("没找到对应字库,更新失败!")); + } + else + { + QMessageBox::information(this, tr("提示"), + tr("更新字库成功,重启后生效!")); + } + } +} + +void SystemManage::on_pushButtonFactorySetting_pressed() +{ + dialogFactorySetAuthorization->clearAuth(); + dialogFactorySetAuthorization->show(); +} + +void SystemManage::on_dialogFactorySetAuthorizationAccepted() +{ + QString authString= dialogFactorySetAuthorization->getAuth(); + qDebug()<<"authString"<checWhJmDate(authString)) + { + sysPara->loadDefaultPara(); + sysPara->saveParaToFile(); + QMessageBox::information(this,"提示",tr("恢复出厂设置成功,请重新关机上电")); + } + else + { + //QMessageBox::warning(this,tr("提示"),tr(+"密码不正确!"),QMessageBox::Ok); + QMessageBox::about(this, tr("提示"), tr("密码不正确!")); + return; + } +} + +void SystemManage::on_pushButtonScreenAdjust_pressed() +{ + QMessageBox::StandardButton ret; +ret = QMessageBox::information(NULL,tr("校准触摸屏"), tr("是否确认开始校准程序?请小心进行校准!"), + QMessageBox::Ok | QMessageBox::Cancel); +char buf [] = +"#!/bin/sh\n\ +TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent \n\ +TS_INFO_FILE1=/sys/class/input/input0/uevent \n\ +if [ -e $TS_INFO_FILE -a \"/bin/grep -q TouchScreen < $TS_INFO_FILE\" ]; then \n\ +export TSLIB_TSDEVICE=/dev/input/event0 \n\ +export TSLIB_CONFFILE=/usr/local/etc/ts.conf \n\ +export TSLIB_PLUGINDIR=/usr/local/lib/ts \n\ +export TSLIB_CALIBFILE=/etc/pointercal \n\ +export LD_LIBRARY_PATH=/usr/local/lib \n\ +export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin \n\ +export QWS_DISPLAY=:1 \n\ +export QWS_MOUSE_PROTO=\"Tslib:/dev/input/event0 MouseMan:/dev/input/mice\" \n\ +\#rm -f /etc/pointercal \n\ +\#if [ ! -s /etc/pointercal ] ; then \n\ + /usr/local/bin/ts_calibrate \n\ +\#fi \n\ +else \n\ +TS_INFO_FILE1=/sys/class/input/input0/uevent \n\ +if [ -e $TS_INFO_FILE1 -a \"/bin/grep -q tsc < $TS_INFO_FILE1\" ]; then \n\ + export QWS_MOUSE_PROTO=\"Tslib:/dev/input/event0 MouseMan:/dev/input/mice\" \n\ + /usr/local/bin/ts_calibrate \n\ +else \n\ + export QWS_MOUSE_PROTO=\"MouseMan:/dev/input/mice\" \n\ +fi \n\ +fi\n" ; + // QFile file("./calibrate"); + ui->pushButtonFactorySetting->setEnabled(0); + ui->pushButtonGhost->setEnabled(0); + ui->pushButtonImportConfFromUdisk->setEnabled(0); + ui->pushButtonExportConfToUDisk->setEnabled(0); + ui->pushButtonTimeSetting->setEnabled(0); + ui->pushButtonScreenAdjust->setEnabled(0); + ui->pushButtonUpdateCharLib->setEnabled(0); + ui->pushButtonUpdateSoftware->setEnabled(0); + ui->pushButtonReclaimTankOpen->setEnabled(0); + ui->pushButtonReclaimTankClose->setEnabled(0); + ui->pushButtonControlByHand->setEnabled(0); + + + if (ret == QMessageBox::Ok){ +// if(!file.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 +// QMessageBox::warning(0,tr("警告"),tr("无法生成脚本 ")); +// return ; +// } +// else { +// file.write(buf,(long long int)sizeof(buf)); +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 +// fsync(file.handle()); +#endif +// file.close(); + system("chmod a+x ./calibrate"); + system("./calibrate &"); +// } + } + + ui->pushButtonFactorySetting->setEnabled(1); + ui->pushButtonGhost->setEnabled(1); + ui->pushButtonImportConfFromUdisk->setEnabled(1); + ui->pushButtonExportConfToUDisk->setEnabled(1); + ui->pushButtonTimeSetting->setEnabled(1); + ui->pushButtonScreenAdjust->setEnabled(1); + ui->pushButtonUpdateCharLib->setEnabled(1); + ui->pushButtonUpdateSoftware->setEnabled(1); + ui->pushButtonReclaimTankOpen->setEnabled(1); + ui->pushButtonReclaimTankClose->setEnabled(1); + ui->pushButtonControlByHand->setEnabled(1); +} + +void SystemManage::on_pushButtonUpdateSoftware_pressed() +{ +#ifdef MIMA + if(sysPara->status.updateSoftEN==0){ + dialogUpateMm->clearAuth(); + dialogUpateMm->show(); + } + else ondialogAuthorizationAccepted(); + +#else + ondialogAuthorizationAccepted(); +#endif + +} +void SystemManage::ondialogAuthorizationAccepted() + { +#ifdef MIMA + QString authString= dialogUpateMm->getAuth(); + QString strDay; + strDay.sprintf("%02d", QDate::currentDate().day()); + if(sysPara->status.updateSoftEN==0 && !TEST_MODE)// + { + if(authString.left(5) != "39305" || authString.right(2)!=strDay.left(2) || authString.length()<7) + { + //QMessageBox::warning(this,tr("提示"),tr(+"密码不正确!"),QMessageBox::Ok); + QMessageBox::about(this, tr("提示"), tr("密码不正确!")); + return; + } + sysPara->status.updateSoftEN=1; + } + +#endif + char cmd[200]; + int res=0; + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("警告"), + tr("是否确认更新软件?"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); + if (ret == QMessageBox::Ok){ + QFile file("/udisk/QtUI"); + QFile file1("/udisk/InkJetPrinter"); + QFile file2("/udisk/InkJetPrinterEng"); + if(file1.exists()){ + file1.remove("/home/plg/InkJetPrinter"); + QFile::copy("/udisk/InkJetPrinter", "/home/plg/InkJetPrinter"); + } + if(file2.exists()){ + file2.remove("/home/plg/InkJetPrinterEng"); + QFile::copy("/udisk/InkJetPrinterEng", "/home/plg/InkJetPrinterEng"); + } + if(file.exists()) + { + system("cp -f /udisk/*.qm /home/plg/"); + file.remove("/home/plg/QtUI"); + + if(!QFile::copy("/udisk/QtUI", "/home/plg/QtUI")) + { + QMessageBox::about(this, tr("错误"), tr("更新失败!")); + return; + } + if(file.exists("/udisk/rcS")){ + file.remove("/etc/init.d/rcS"); + QFile::copy("/udisk/rcS", "/etc/init.d/rcS"); + } + if(file.exists("/udisk/qt4")){ + snprintf(cmd,sizeof(cmd),"cp /udisk/qt4 /home/plg/"); + system(cmd); + snprintf(cmd,sizeof(cmd),"chmod a+x /home/plg/qt4"); + res = system(cmd); + } + snprintf(cmd,sizeof(cmd),"cp /udisk/emergency /home/plg/"); + res = system(cmd); + snprintf(cmd,sizeof(cmd),"chmod a+x /udisk/ss"); + res = system(cmd); + snprintf(cmd,sizeof(cmd),"/udisk/ss"); + res = system(cmd); + QMessageBox::information(this, tr("提示"), tr("软件更新成功,重启后生效!")); + } + else + { + QFile file("/udisk/ss"); + if(file.exists()){ + if(file.exists("/udisk/rcS")){ + snprintf(cmd,sizeof(cmd),"cp /udisk/rcS /ect/init.d/"); + system(cmd); + } + if(file.exists("/udisk/qt4")){ + snprintf(cmd,sizeof(cmd),"cp /udisk/qt4 /home/plg/"); + system(cmd); + snprintf(cmd,sizeof(cmd),"chmod a+x /home/plg/qt4"); + system(cmd); + } + snprintf(cmd,sizeof(cmd),"cp /udisk/emergency /home/plg/"); + system(cmd); + snprintf(cmd,sizeof(cmd),"chmod a+x /udisk/ss"); + system(cmd); + snprintf(cmd,sizeof(cmd),"/udisk/ss"); + system(cmd); + } + snprintf(cmd,sizeof(cmd),"sync"); //防止拷贝不成功 + system(cmd); + QMessageBox::about(this, tr("错误"), tr("找不到更新软件!")); + } + snprintf(cmd,sizeof(cmd),"sync"); //防止拷贝不成功 + system(cmd); + + /****************wifi****************************/ + QFile file5("/udisk/libiw.so.29"); + QFile file6("/udisk/iwlist"); + if(file5.exists()){ + system("cp /udisk/libiw.so.29 /usr/lib/libiw.so.29"); + } + if(file6.exists()){ + system("cp /udisk/iwlist /home/plg/wireless/iwlist"); + } + /***********************************************/ + } +} + +void SystemManage::on_pushButtonGhost_pressed(){ + + dialogSysUpdateAuthorization->clearAuth(); + dialogSysUpdateAuthorization->show(); + +// QMessageBox::StandardButton ret; +// ret = QMessageBox::information(this, tr("警告"), +// tr("是否确认备份系统文件?"), +// QMessageBox::Ok | QMessageBox::Cancel); +// if (ret == QMessageBox::Ok){ +// QFile file("/home/plg/conf/sysPara.bin"); +// if(file.exists()){ +// Public::backupPara(); +// QMessageBox::information(this, tr("系统备份"), +// tr("系统备份成功!")); +// } +// else { +// QMessageBox::critical(this, tr("错误"), tr("备份操作失败!")); +// } +// } +} + +void SystemManage::on_dialogSysUpdateAuthorizationAccepted() +{ + +#ifdef MIMA + QString authString= dialogSysUpdateAuthorization->getAuth(); + QString strDay; + strDay.sprintf("%02d", QDate::currentDate().day()); + + if(authString.left(5) != "39305" || authString.right(2)!=strDay.left(2) || authString.length()<7) + { + //QMessageBox::warning(this,tr("提示"),tr(+"密码不正确!"),QMessageBox::Ok); + QMessageBox::about(this, tr("提示"), tr("密码不正确!")); + return; + } + +#endif + + char cmd[200]; + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("警告"), + tr("是否确认更新系统?"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); + if (ret == QMessageBox::Ok) + { + QFile file("/udisk/uImage_am335x"); + if(file.exists()) + { + qDebug()<<"start update..."; + snprintf(cmd,sizeof(cmd),"flash_erase /dev/mtd6 0x0 40;nandwrite -n -p -s 0 /dev/mtd6 /udisk/uImage_am335x"); + system(cmd); + QMessageBox::information(this, tr("提示"), tr("系统更新成功,重启后生效!")); + }else + { + QMessageBox::about(this, tr("提示"), tr("文件不存在!")); + } + } +} + +void SystemManage::on_pushButtonCleanUP_pressed() +{ + if(sysPara){ + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗")); + QPushButton *cleanButton = msgBox.addButton(tr("开始清洗"), QMessageBox::ActionRole); + QPushButton *cancleCleanButton = msgBox.addButton(tr("停止清洗"), QMessageBox::ActionRole); + msgBox.addButton(QMessageBox::Cancel); + msgBox.exec(); + if (msgBox.clickedButton() == cleanButton) { + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlReclaimPump(false,false); + timer2->start(60000); + //qDebug()<devOp->controlCycleValve(false); + //sysPara->devOp->controlViscosityPump(false); + timerHandler2(); + //emit timer2->timeout(); + + + } + } +} + + +void SystemManage::updateSysStatusToUI(){ + if(sysPara){ + ui->labelCompressPump->setText((sysPara->devOp->isCompressPumpOpen()?tr("开"):tr("关")) + QString("\n%1").arg(sysPara->status.PRESSURE)); + ui->labelCycleValve->setText(sysPara->devOp->isCycleValveOpen()?tr("开"):tr("关")); + ui->labelInkValve->setText(sysPara->devOp->isInkValveOpen()?tr("开"):tr("关")); + if(((PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV3) + || (PRODUCT_VERSION(sysPara->status.fpgaVersionNum) >= JETV23) //20170830修改主板硬件版本号,以便与主板硬件版本编号对应 + //|| (PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV32) + )&& (!sysPara->status.isPumpValveControledByHand)){ + if(sysPara->para.gearPumpEnable) + { + ui->labelMainInkPump->setText(tr("关")); + } + else + { + if(sysPara->status.ink_Ctrl == 1){ + ui->labelMainInkPump->setText(tr("关") + QString("\n%1").arg(sysPara->status.SEPTAL_POSITION)); + + } + if(sysPara->status.ink_Ctrl == 0){ + ui->labelMainInkPump->setText(tr("开") + QString("\n%1").arg(sysPara->status.SEPTAL_POSITION)); + + } + } + } + else{ + ui->labelMainInkPump->setText((sysPara->devOp->isMainInkPumpOpen()?tr("开"):tr("关")) + QString("\n%1").arg(sysPara->status.SEPTAL_POSITION)); + + } + ui->labelMixValve->setText(sysPara->devOp->isMixValveOpen()?tr("开"):tr("关")); + ui->labelReclaimPump->setText(sysPara->devOp->isReclaimPumpOpen()?tr("开"):tr("关")); + ui->labelReleaseValve->setText(sysPara->devOp->isReleaseValveOpen()?tr("开"):tr("关")); + ui->labelViscosityPump->setText(sysPara->devOp->isViscosityPumpOpen()?tr("开"):tr("关")); + ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止")); + ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止")); + + ui->labViscoCnt->setText( QString::number(sysPara->status.viscosityDelayCnt/100,10) );//labViscoCnt + //ui->labViscoFaultCnt->setText( QString::number(sysPara->status.viscosityFaultCnt,10) );//labViscoCnt + + if(sysPara->para.gearPumpEnable) + { + ui->pushButtonCompressPump->setText(tr("压力")); + } + else + { + ui->pushButtonCompressPump->setText(tr("压缩机")); + } + } +} + + +void SystemManage::timerHandler(){ + if(sysPara){ + if(sysPara->status.isPumpValveControledByHand){ //进入手动模式后,延时一点再关闭相关的泵阀 + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlReclaimPump(false,false); + timer->stop(); + } + } +} + + +void SystemManage::timerHandler2(){ + if(sysPara){ + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlViscosityPump(false); + timer2->stop(); + //sysPara->SysPara.showDebug(" timer2 stop"); + } +} +static int mainInkPumpCtrlStatus = 0; +static int mainInkPumpCtrlCnt = 0; +static int cycleValveOnCountInAirPush = 0; +void SystemManage::autoCleanTimerHandler(){ + static bool cleanDone = false; + static int lastCycleValveOpen = 0; + static int mainValve = 5; + if(sysPara){ + if (sysPara->status.airPushing) { + +// if (sysPara->status.SEPTAL_POSITION > sysPara->para.septalPostion + 50) { +// sysPara->devOp->controlCycleValve(true); +// } +// else if (sysPara->status.SEPTAL_POSITION < sysPara->para.septalPostion - 50) { +// sysPara->devOp->controlCycleValve(false); +// } + ++sysPara->status.airPushingOnTime; + // 以500ms 间隔开关循环阀 + if (sysPara->status.airPushingOnTime%10 >= 5) { + sysPara->devOp->controlCycleValve(true); + } + else { + sysPara->devOp->controlCycleValve(false); + } + + + if (mainInkPumpCtrlStatus == 0) { + if(++mainInkPumpCtrlCnt>16) { //90ms 为单位, 时间到关闭 + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 1; + mainInkPumpCtrlCnt = 0; + } + } + else if (mainInkPumpCtrlStatus == 1) { //90ms 为单位, 时间到开启 + sysPara->devOp->controlMainInkPump(true); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 2; + } + else if (mainInkPumpCtrlStatus == 2) { + if(++mainInkPumpCtrlCnt>8) { + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 3; + mainInkPumpCtrlCnt = 0; + } + } + else if (mainInkPumpCtrlStatus == 3) { + if(++mainInkPumpCtrlCnt>8) { + sysPara->devOp->controlMainInkPump(true); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 4; + mainInkPumpCtrlCnt = 0; + } + } + else if (mainInkPumpCtrlStatus == 4) { + if(++mainInkPumpCtrlCnt>8) { + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 3; + mainInkPumpCtrlCnt = 0; + } + } + return; + } + if(dialogAutoClean->wasCanceled()||sysPara->status.autoCleanStatus == AUTOCLEAN_STATUS_NONE) + { + if(autoCleanTimer->isActive()) + autoCleanTimer->stop(); + sysPara->status.autoCleanStatus=AUTOCLEAN_STATUS_NONE; + sysPara->status.autoCleanTime=0; + dialogAutoClean->hide(); + delete dialogAutoClean; + //sysPara->devOp->controlReclaimTankOpen(false); // 停止回收槽 + // step2 完成后进入自动模式,参考了on_pushButtonControlByHand_pressed + if(cleanDone) + { + if(timer2->isActive()) + timer2->stop(); + sysPara->status.isPumpValveControledByHand = !sysPara->status.isPumpValveControledByHand; + sysPara->status.isPumpValveControledByHand = false; + setPumpValveBottonEnable(sysPara->status.isPumpValveControledByHand); + ui->pushButtonPushAir->setEnabled(true); //2019-10-20 自动还是手动模式,排气按钮都要使能 by kun + ui->labelControlByHand->setText(sysPara->status.isPumpValveControledByHand?tr("手动"):tr("自动")); + sysPara->devOp->mainInkCtrl(); + cleanDone = false; + } + qDebug()<status.autoCleanStatus; + return; + } + + //qDebug()<status.autoCleanTime; + //qDebug()<status.autoCleanStatus; + + if(sysPara->status.autoCleanStatus != AUTOCLEAN_STATUS_NONE) + { + dialogAutoClean->setValue(sysPara->status.autoCleanTime); + QCoreApplication::processEvents(); + + ++sysPara->status.autoCleanTime; + if(sysPara->status.autoCleanStatus == AUTOCLEAN_STATUS_STEP1) + { + if(sysPara->status.autoCleanTime >= AUTOCLEAN_STATUS_STEP1_TIME) + { + sysPara->status.autoCleanStatus = AUTOCLEAN_STATUS_STEP2; + sysPara->status.autoCleanTime=0; + dialogAutoClean->setRange(0, AUTOCLEAN_STATUS_STEP2_TIME); + dialogAutoClean->setWindowTitle(tr("(2/3) Cleaning")); +#if 1 + //打开粘度泵,循环阀,墨水阀,主墨泵 + { + //sysPara->devOp->controlCompressPump(false); + if(!sysPara->devOp->isReclaimPumpOpen()) //开供墨阀之前要判断回收泵有没有开,没开就提前打开 + { + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + } + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlInkValve(true); + sysPara->devOp->controlInkValvePWM(true); + sysPara->devOp->controlMainInkPump(true); + //sysPara->devOp->controlMixValve(false); + //sysPara->devOp->controlReclaimPump(false,true); + sysPara->devOp->controlViscosityPump(true); + //sysPara->devOp->controlReleaseValve(false); + sysPara->devOp->mainInkCtrl(); + } +#endif + } + + } + else if(sysPara->status.autoCleanStatus == AUTOCLEAN_STATUS_STEP2) + { + if(sysPara->status.autoCleanTime >= AUTOCLEAN_STATUS_STEP2_TIME) + { + sysPara->status.autoCleanStatus = AUTOCLEAN_STATUS_STEP3; + sysPara->status.autoCleanTime=0; + + dialogAutoClean->setRange(0, (AUTOCLEAN_STATUS_STEP3_TIME-1)); + dialogAutoClean->setWindowTitle(tr("(3/3) Cleaning")); +#if 1 + //打开粘度泵,混合阀 + { + //--sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(false); //关循环阀,墨水阀,主墨泵 +//LogInfo::setRunStatusText(tr("混合阀打开3:")+QString::number(sysPara->status.viscosity)); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + sysPara->devOp->controlMainInkPump(false); + //--sysPara->devOp->controlReclaimPump(false,true); + //--sysPara->devOp->controlReleaseValve(false); + sysPara->devOp->controlMixValve(true); //开混合阀 + sysPara->devOp->controlViscosityPump(true);//开粘度泵 + sysPara->devOp->mainInkCtrl(); + } +#endif +#if 0 + if(sysPara->status.currReclaimTankPos<45){ + sysPara->devOp->controlReclaimTankOpen(1); // 开回收槽,下一个定时器(1s后)进来的时候会停止, + } + else + { + sysPara->devOp->controlReclaimTankClose(1); // 关回收槽,下一个定时器(1s后)进来的时候会停止 + } +#endif + + } + } + else if(sysPara->status.autoCleanStatus == AUTOCLEAN_STATUS_STEP3) + { + if(sysPara->status.autoCleanTime >= AUTOCLEAN_STATUS_STEP3_TIME) + { + sysPara->status.autoCleanStatus = AUTOCLEAN_STATUS_NONE; + sysPara->status.autoCleanTime=0; + cleanDone = true; + } + } + } + } +} + +void SystemManage::reclainTankTestHandler() +{ + static unsigned int waitTime = 0; + if(!sysPara) + { + return; + } + if(reclainTankTestProcess->wasCanceled()||reclainTankTestState == ReclainTankTest_eNotStart) + { + if(reclaimTankTestTimer->isActive()) + reclaimTankTestTimer->stop(); + //sysPara->status.autoCleanStatus=AUTOCLEAN_STATUS_NONE; + reclainTankTestState = ReclainTankTest_eNotStart; + reclainTankTestCount = 0; + reclainTankTestProcess->hide(); + reclainTankTestProcess->deleteLater(); + return; + } + if(reclainTankTestState == ReclainTankTest_eOpenning) { + if(sysPara->status.reclaimTankstatus == 0x05||sysPara->status.reclainTankReachEnd) { //open complete + reclainTankTestState = ReclainTankTest_eOpened; + waitTime = 4; + //qDebug()<<"ReclainTankTest_eOpened"; + } + } + else if(reclainTankTestState == ReclainTankTest_eOpened) { + if(waitTime > 0) + { + --waitTime; + return; + } + sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); + ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止")); + sysPara->status.reclainOpenAppending = false; + sysPara->status.reclainCloseAppending = true; + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + reclainTankTestState = ReclainTankTest_eClosing; + } + else if(reclainTankTestState == ReclainTankTest_eClosing) { + if(sysPara->status.reclaimTankstatus == 0x06||sysPara->status.reclainCloseAppending==false) { //close complete + reclainTankTestState = ReclainTankTest_Closed; + } + } + else if(reclainTankTestState == ReclainTankTest_Closed) { + reclainTankTestCount++; + if(reclainTankTestCount>=RECLAIN_TANK_TEST_MAX_COUNT) { + reclainTankTestState = ReclainTankTest_eNotStart; + reclaimTankTestTimer->stop(); + reclainTankTestProcess->hide(); + reclainTankTestProcess->deleteLater(); + } + else { + reclainTankTestProcess->setWindowTitle(QString("(%1/%2) reclain tank test").arg(reclainTankTestCount).arg(RECLAIN_TANK_TEST_MAX_COUNT)); + reclainTankTestProcess->setValue(reclainTankTestCount); + sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); + ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止")); + sysPara->status.reclainOpenAppending = true; + sysPara->status.reclainCloseAppending = false; + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + reclainTankTestState = ReclainTankTest_eOpenning; + } + } + else { + reclaimTankTestTimer->stop(); + } + +} + +void SystemManage::inkcloseCountHandler() +{ +// static uint8_t flag = true; + +// if(flag <50) +// { +// flag++; +// } + +// if(flag==10) +// { + +// sysPara->devOp->controlInkValve(true); +// }else +// if(flag == 15) +// { +// sysPara->devOp->controlInkValve(false); +// } + +// qDebug()<<"sysMana reclaimOpenCntAfterSWintOf" << sysPara->status.reclaimOpenCntAfterSWintOff; +// ui->labelReclaimPump->setText((sysPara->devOp->isReclaimPumpOpen()?tr("开"):tr("关")) + QString("\n%1").arg(sysPara->status.reclaimOpenCntAfterSWintOff)); + if(false == sysPara->devOp->isInkValveOpen()) + { +// qDebug()<<"Ink pump is off"; + //qDebug()<<"sysMana reclaimOpenCntAfterSWintOf" << sysPara->status.reclaimOpenCntAfterSWintOff; + if(sysPara->devOp->isReclaimPumpOpen()) + { + + sysPara->status.reclaimOpenCntAfterSWintOff++; + if(sysPara->status.reclaimOpenCntAfterSWintOff >= 60) //等待60s + { + sysPara->devOp->controlReclaimPump(false,false); // 墨线关闭一分钟后,回收阀再关闭 + sysPara->status.autoCtlReclaimAfterSWintOff = true; + } + } + }else + { +// qDebug()<<"Ink pump is open"; + sysPara->status.reclaimOpenCntAfterSWintOff = 0; + sysPara->status.autoCtlReclaimAfterSWintOff = false; + } +} +void SystemManage::MainInkCmpSepetalHandler() +{ + +// static unsigned int waitTime +// qDebug()<<"sysPara->status.SEPTAL_POSITION" << sysPara->status.SEPTAL_POSITION; + //2019/10/24 主泵由隔膜位置联动 + if(!sysPara->status.isPumpValveControledByHand) + { + if(sysPara->status.SEPTAL_POSITION >= 200) + { + if(true == sysPara->devOp->isMainInkPumpOpen()) + { + sysPara->devOp->controlMainInkPump(false); + } + }else + { + if(false == sysPara->devOp->isMainInkPumpOpen()) + { + sysPara->devOp->controlMainInkPump(true); + } + } + } +} + + +void SystemManage::on_pushButtonExportConfToUDisk_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("警告"), + tr("是否确认导出配置到U盘?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + QDir dir("/udisk"); + if(!dir.exists()){ + QMessageBox::warning(this, tr("错误"), + tr("检测不到U盘")); + return; + } + system((char *)((QString("cp /home/plg/conf/sysPara.bin /udisk/")).toAscii().data())); + QMessageBox::information(this, tr("提示"), + tr("成功导出配置到U盘")); + } +} + + +void SystemManage::on_pushButtonImportConfFromUdisk_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("警告"), + tr("是否确认从U盘导入配置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + QFile file("/udisk/sysPara.bin"); + if(!file.exists()){ + QMessageBox::warning(this, tr("错误"), + tr("配置文件/udisk/sysPara.bin不存在!")); + return; + } + system((char *)((QString("cp /udisk/sysPara.bin /home/plg/conf/ ")).toAscii().data())); + QMessageBox::information(this, tr("提示"), + tr("从U盘成功导入配置,重启后生效!")); + emit configChanged(); + } +} + +void SystemManage::onAutoCleanStart(void) +{ + if(sysPara){ + /* into manual control mode */ + // step 1:只开粘度泵; step 2:开粘度泵,循环阀,墨水阀,住墨泵 + //r_PumpValveControledByHand = sysPara->status.isPumpValveControledByHand; + //ui->label_status->setText(tr("正在进入手动模式......")); + //sysPara->status.isPumpValveControledByHand=true; + sysPara->devOp->highVoltageCtrl(0); //关闭高压 + sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->controlMixValve(false); + sysPara->devOp->controlReclaimPump(false,false); + sysPara->devOp->controlViscosityPump(true);//只开粘度泵 + sysPara->devOp->controlReleaseValve(false); + sysPara->devOp->mainInkCtrl(); + // 关闭回收槽 + { + sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); + ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止")); + sysPara->status.reclainOpenAppending = false; + sysPara->status.reclainCloseAppending = true; + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + } + + sysPara->status.autoCleanStatus = AUTOCLEAN_STATUS_STEP1; + sysPara->status.autoCleanTime = 0; + qDebug()<setWindowModality(Qt::WindowModal); + dialogAutoClean->setMinimumDuration(2); + dialogAutoClean->setCancelButtonText(tr("Cancel")); + dialogAutoClean->setWindowTitle(tr("(1/3) Cleaning")); + dialogAutoClean->setRange(0, AUTOCLEAN_STATUS_STEP1_TIME); + dialogAutoClean->setAutoClose(true); + dialogAutoClean->setAutoReset(true); +#endif + + emit autoCleanStart(); + autoCleanTimer->start(1000); // 1000 ms + + dialogAutoClean->show(); + /* + if(dialogAutoClean->wasCanceled()) + { + if(autoCleanTimer->isActive()) + autoCleanTimer->stop(); + dialogAutoClean->hide(); + sysPara->status.autoCleanStatus=AUTOCLEAN_STATUS_NONE; + sysPara->status.autoCleanTime=0; + qDebug()<status.autoCleanStatus; + return; + } + */ + } + } +} + + +void SystemManage::on_pushButtonFontToUdisk_pressed() +{ + // + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("警告"), + tr("是否确认导出字库到U盘?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok) + { + QFile file("/udisk"); + if(!file.exists()){ + QMessageBox::warning(this, tr("错误"), + tr("U盘不可识别!")); + return; + } + + system((char *)((QString("cp /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/* /udisk/.")).toAscii().data())); + system((char *)((QString("cp /usr/lib/fonts/* /udisk/.")).toAscii().data()));//am335x + system((char *)((QString("cp /usr/lib/fonts/* /udisk/.")).toAscii().data())); + system((char *)((QString("mkdir /udisk/zk")).toAscii().data())); + system((char *)((QString("cp /opt/zk/* /udisk/zk/ ")).toAscii().data())); + QMessageBox::information(this, tr("提示"), + tr("字库导出完成!")); + //emit configChanged(); + } + +} + +void SystemManage::on_pushButtonMotorTest_pressed() +{ + QMessageBox::StandardButton ret; + if(!sysPara->para.isCheckMagnet) + { + if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::warning(this, tr("警告"), + tr("请先移开喷头盖!")); + return ; + } + } + ret = QMessageBox::information(this, tr("警告"), + tr("是否开始电机测试?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + if(sysPara){ + reclainTankTestCount = 0; + reclainTankTestProcess = new QProgressDialog(this); + reclainTankTestProcess->setWindowModality(Qt::WindowModal); + reclainTankTestProcess->setMinimumDuration(2); + reclainTankTestProcess->setCancelButtonText(tr("Cancel")); + reclainTankTestProcess->setWindowTitle(QString("(%1/%2) reclain tank test").arg(reclainTankTestCount).arg(RECLAIN_TANK_TEST_MAX_COUNT)); + reclainTankTestProcess->setRange(0, RECLAIN_TANK_TEST_MAX_COUNT); + reclainTankTestProcess->setValue(reclainTankTestCount); + reclainTankTestProcess->setAutoClose(true); + reclainTankTestProcess->setAutoReset(true); + reclainTankTestProcess->show(); + + sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); + ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止")); + sysPara->status.reclainOpenAppending = true; + sysPara->status.reclainCloseAppending = false; + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + reclainTankTestState = ReclainTankTest_eOpenning; + reclaimTankTestTimer->start(1000); + } + } +} + +void SystemManage::on_pushButtonPushAir_pressed() +{ + sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand; + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + //ui->label_status->setText(tr("正在进入手动模式......")); + + sysPara->status.airPushing = 1; + sysPara->status.airPushingOnTime = 0; + cycleValveOnCountInAirPush = 0; + sysPara->devOp->controlCycleValve(true); + +#ifdef __AIR_RELEASE_OLD__ + // 粘度泵跟随循环阀动作 + sysPara->devOp->controlViscosityPump(true); +#else + sysPara->devOp->controlViscosityPump(true);//关闭粘度泵 + sysPara->devOp->controlMixValve(false); +#endif + + sysPara->devOp->controlMainInkPump(true);//主墨泵敞开 + sysPara->devOp->mainInkCtrl(); + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + sysPara->devOp->controlInkValve(true); //墨水阀 + sysPara->devOp->controlInkValvePWM(true); //墨水阀 + mainInkPumpCtrlStatus = 0; + mainInkPumpCtrlCnt = 0; + autoCleanTimer->start(90); // 90 ms + QMessageBox::StandardButton ret = QMessageBox::information(this, tr("提示"), + tr("正在排气,是否停止?"), + QMessageBox::Ok); + if (ret == QMessageBox::Ok) { + autoCleanTimer->stop(); + sysPara->status.airPushing = 0; + cycleValveOnCountInAirPush = 0; + // 还原当前模式 + sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + if(sysPara->status.SEPTAL_POSITION >= (sysPara->para.septalPostion - 10)) + { + sysPara->devOp->controlMainInkPump(false); + } + if(sysPara->status.isPumpValveControledByHand == true) + { + sysPara->devOp->controlMainInkPump(false); //Controled by hand mode, mainInkPump need to stop + } + + sysPara->devOp->controlMixValve(false); + sysPara->devOp->controlReclaimPump(false,false); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReleaseValve(false); + sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore;// 还原到之前的模式 + sysPara->devOp->mainInkCtrl(); + + + } + +} + +void SystemManage::on_pushButtonGearPumpOff_pressed() +{ + ui->pushButtonGearPumpOff->setEnabled(false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + ui->pushButtonGearPump->setEnabled(true); +} + + +void SystemManage::on_pushButtonChangeScreen_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::information(NULL,tr("提示"), tr("是否确认切换屏幕!"), + QMessageBox::Ok | QMessageBox::Cancel); + if(ret == QMessageBox::Ok){ + QFile fileIn; + QString fileName; + QString fileName2; + LogInfo::setRunStatusText(tr("flagOfTouchScreenType: %1").arg(flagOfTouchScreenType)); + if(flagOfTouchScreenType){ + fileName = ":/TouchScreenConf/qtui_Resistance"; + fileName2 = ":/TouchScreenConf/calibrate_Resistance"; + }else{ + fileName = ":/TouchScreenConf/qtui_Capacitance"; + fileName2 = ":/TouchScreenConf/calibrate_Capacitance"; + } + fileIn.setFileName(fileName); + if(!fileIn.open(QIODevice::ReadOnly)){ + qDebug()<<"open failed"<pushButtonChangeScreen->setEnabled(false); + } +} + +void SystemManage::getCurrentScrennType(){ + // std::cout<<"std getCurrentScrennType"<pushButtonChangeScreen->setEnabled(false); + return; + } + QTextStream in(&file); + QString str = in.readAll(); + int index = str.indexOf("event0"); + if(index != -1){ + // 电阻屏 + flagOfTouchScreenType = 0; + ui->pushButtonChangeScreen->setText(tr("切换电容屏")); + } + else{ + //电容屏 + flagOfTouchScreenType = 1; + ui->pushButtonChangeScreen->setText(tr("切换电阻屏")); + } + file.close(); + +} diff --git a/SystemManage.h b/SystemManage.h new file mode 100644 index 0000000..aba0351 --- /dev/null +++ b/SystemManage.h @@ -0,0 +1,125 @@ +#ifndef SYSTEMMANAGE_H +#define SYSTEMMANAGE_H + +#include +#include "ParaSettingUI.h" +#include "TimeSettingDialog.h" +#include +#include "DialogAuthorization.h" +#include "qprogressdialog.h" +#include "PrintSetting.h" +#include "dlginputaddr.h" + +namespace Ui { +class SystemManage; +} + +class SystemManage : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit SystemManage(QWidget *parent = 0); + ~SystemManage(); + void updateSysStatusToUI(); //重载 + void bindDlgInputAddr(DlgInputAddr *dlgInputAddr);//绑定时间权限管理对象 + void getCurrentScrennType(); + bool flagOfTouchScreenType; +private slots: + void on_pushButtonCompressPump_pressed(); + void on_pushButtonGhost_pressed(); + void on_pushButtonCycleValve_pressed(); + + void updateGearPumpValue(int); + void on_pushButtonGearPump_pressed(); + + void on_pushButtonInkValve_pressed(); + + void on_pushButtonMainInkPump_pressed(); + + void on_pushButtonMixValve_pressed(); + + void on_pushButtonReclaimPump_pressed(); + + void on_pushButtonViscosityPump_pressed(); + + void on_pushButtonControlByHand_pressed(); + + void on_pushButtonReclaimTankOpen_pressed(); + + void on_pushButtonReclaimTankClose_pressed(); + + void on_pushButtonTimeSetting_clicked(); + + void onTimeSettingDone(); //时间设置完成 + + void on_pushButtonUpdateCharLib_pressed(); + + void on_pushButtonFactorySetting_pressed(); + + void on_pushButtonScreenAdjust_pressed(); + + void on_pushButtonUpdateSoftware_pressed(); + + void on_pushButtonCleanUP_pressed(); + + void on_pushButtonReleaseValve_pressed(); + + + void timerHandler(); + void timerHandler2(); + void autoCleanTimerHandler(); + + void on_pushButtonExportConfToUDisk_clicked(); + + void on_pushButtonImportConfFromUdisk_clicked(); + void ondialogAuthorizationAccepted(); + + void on_pushButtonAutoClean_pressed(); + void onAutoCleanStart(); + void reclainTankTestHandler(); + /***2019/10/22 start*****/ + void inkcloseCountHandler(); + /***2019/10/22 end*****/ + /***2019/10/23 start*****/ + void MainInkCmpSepetalHandler(); + /***2019/10/23 */ + //void on_pushButtonAutoClean_clicked(); + + void on_pushButtonFontToUdisk_pressed(); + + void on_pushButtonMotorTest_pressed(); + + void on_pushButtonPushAir_pressed(); + + void on_dialogTimeSetAuthorizationAccepted();//2020/1/6 + void on_dialogFactorySetAuthorizationAccepted(); + void on_dialogSysUpdateAuthorizationAccepted(); + + void on_pushButtonGearPumpOff_pressed(); + + void on_pushButtonChangeScreen_clicked(); + +Q_SIGNALS: + void configChanged(); + void autoCleanStart(); + void enableReclaimButton(bool flag); +private: + Ui::SystemManage *ui; + + void setPumpValveBottonEnable(bool enable); + TimeSettingDialog timeDia; + QTimer *timer,*timer2,*autoCleanTimer,*reclaimTankTestTimer,*inkcloseCountTimer,*MainnkCmpSepetalTimer; + int reclainTankTestState; + int reclainTankTestCount;//测试次数 + DialogAuthorization *dialogUpateMm; + DialogAuthorization *dialogTimeSetAuthorization; //2020/1/6 + DialogAuthorization *dialogSysUpdateAuthorization; + DlgInputAddr *dlgInputAddr_TimeSet;//2020/1/6 + QProgressDialog *dialogAutoClean; + QProgressDialog *reclainTankTestProcess; + int pushAir;// 正在排气 + DialogAuthorization *dialogFactorySetAuthorization; +}; + +#endif // SYSTEMMANAGE_H diff --git a/SystemSetting.cpp b/SystemSetting.cpp new file mode 100644 index 0000000..177e032 --- /dev/null +++ b/SystemSetting.cpp @@ -0,0 +1,894 @@ +#include "SystemSetting.h" +#include "ui_systemsetting.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "LogInfo.h" +#include "myinclude.h" +#include "QInputDialog" +#include "dlgmutilanguage.h" +//#define FINDVOL +#include "InputMethod.h" +static int detectValidHVCnt = 0; +SystemSetting::SystemSetting(QWidget *parent) : + QWidget(parent),progressBar(0), + ui(new Ui::SystemSetting) +{ + + ui->setupUi(this); + progressBar.setGeometry(200,200,300,40); //将其放在最中间 + progressBar.hide(); + timer = new QTimer(); + connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); + timer2 = new QTimer(); + connect(timer2, SIGNAL(timeout()), this, SLOT(timerHandler2())); + timerAuto = new QTimer(); + connect(timerAuto,SIGNAL(timeout()),this,SLOT(autoControlPressure())); + + //setInterfaceMode(); + + enCleanUpAppendFlag=0; // 0空闲,1关开回收槽,2手动,3清洗,4恢复,5停止,6 +//ui->label_PulseCounterZero->hide();//隐藏界面无用信息 +//ui->labelPulseCounterAtZero->hide();//隐藏界面无用信息 +#ifdef SYSMIMA + dialogUpateMm =new DialogAuthorization; + connect(dialogUpateMm,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted())); +#endif + // ui->pushButtonCleanUP->hide(); +} + +SystemSetting::~SystemSetting() +{ + delete ui; + delete timer; + delete timer2; + +} + +void SystemSetting::SystemupdateSysParaToUI(){ + updateSysParaToUI(); +} + +void SystemSetting::on_pushButtonApply_pressed() +{ + applyUIPara(); + SystemSettingLog(); +} + +void SystemSetting::SystemSettingLog(){ + + qDebug()<spinBoxOscillatorVoltage->value()); + qDebug()<spinBoxHighVoltageLevel->value()); + qDebug()<spinBoxReclaimPumpPower->value()); + qDebug()<ViscosityAdujstSelect->currentIndex()); + qDebug()<spinBoxPumpInterval->value()); + qDebug()<spinBoxReclaimTankTime->value()); + qDebug()<spinBoxSeptalPostion->value()); + qDebug()<comboBoxDiaphramOffset->currentIndex()); + qDebug()<comboBoxEditMode->currentIndex()); + qDebug()<spinBoxPressure->value()); + qDebug()<spinBoxVIscosity->value()); + qDebug()<spinBoxTemperature->value()); + qDebug()<comboBoxOscillatorFreq->currentIndex()); + qDebug()<spinBoxOscillatorFreqFix->value()); + qDebug()<comboBoxDiameter->currentIndex()); + +} + + +void SystemSetting::updateSysParaToUI(){ + if(sysPara){ + ui->spinBoxHighVoltageLevel->setValue(sysPara->para.highVoltageLevel); + ui->spinBoxOscillatorVoltage->setValue((sysPara->para.oscillatorVoltage)); + ui->spinBoxPressure->setValue(sysPara->para.pressure); + ui->spinBoxPumpInterval->setValue(sysPara->para.viscosityPumpInterval); + ui->spinBoxReclaimPumpPower->setValue(sysPara->para.reclaimPumpPWMWidth); + ui->spinBoxReclaimTankTime->setValue(sysPara->para.reclaimTankTime); + ui->spinBoxTemperature->setValue(sysPara->para.temperature); + ui->spinBoxFanTemperature->setValue(sysPara->para.FanTemperature); + ui->spinBoxVIscosity->setValue( sysPara->para.viscosity); + ui->ViscosityAdujstSelect->setCurrentIndex(sysPara->para.viscosityAdjust); + ui->comboBoxOscillatorFreq->setCurrentIndex(sysPara->para.oscillatoFreq); + ui->spinBoxOscillatorFreqFix->setValue(sysPara->para.oscillatorFreqFix); + ui->spinBoxSeptalPostion->setValue(sysPara->para.septalPostion); + ui->comboBoxDiameter->setCurrentIndex(sysPara->para.diameter); + ui->comboBoxDiaphramOffset->setCurrentIndex(sysPara->para.diaphramOffset/5-1); + + if(sysPara->para.EditMode>SCENE) + sysPara->para.EditMode=TXTFILE; + ui->comboBoxEditMode->setCurrentIndex(sysPara->para.EditMode); + } +} + +int convertFreq(int index){ +// qDebug()<<"index="<para.highVoltageLevel = ui->spinBoxHighVoltageLevel->value(); + sysPara->para.oscillatorVoltage = ui->spinBoxOscillatorVoltage->value(); + sysPara->para.pressure = ui->spinBoxPressure->value(); + gearPumpRunNormalFlag = false;//重新设置压力标志设置 + sysPara->para.viscosityPumpInterval = ui->spinBoxPumpInterval->value(); + sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value(); + sysPara->para.reclaimTankTime = ui->spinBoxReclaimTankTime->value(); + sysPara->para.temperature = ui->spinBoxTemperature->value(); + sysPara->para.viscosity = ui->spinBoxVIscosity->value(); + //sysPara->para.viscosityAdjust = ui->spinBoxViscosityAdjust->value(); + sysPara->para.viscosityAdjust = ui->ViscosityAdujstSelect->currentIndex(); + sysPara->para.oscillatoFreq = ui->comboBoxOscillatorFreq->currentIndex(); + sysPara->para.oscillatorFreqFix = ui->spinBoxOscillatorFreqFix->value(); + sysPara->para.EditMode = ui->comboBoxEditMode->currentIndex(); + sysPara->para.diameter = ui->comboBoxDiameter->currentIndex();// qDebug()<<"EditMode1"<para.EditMode; + int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq); + + if(freq > 0){ + sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2; + } + else { + QMessageBox::critical(this,tr("错误"),tr("实际频率不能为%1").arg(freq)); + } + sysPara->para.FanTemperature = ui->spinBoxFanTemperature->value(); + sysPara->para.septalPostion = ui->spinBoxSeptalPostion->value(); + quint16 diaphramOffset = 5*(ui->comboBoxDiaphramOffset->currentIndex()+1); + sysPara->para.diaphramOffset = diaphramOffset; + //sysPara->para.mixValveisNewVersion = ui->radioButtonMixValveNewVersion->isChecked(); + if(sysPara->devOp->writeFpgaPrintPara() != -1){ + QMessageBox::information(this,tr("提示"),tr("应用成功")); + } + emit changeEditMode(sysPara->para.EditMode); + //qDebug()<<"EditMode"<para.EditMode; + } +} + +void SystemSetting::updateSysStatusToUI(){ + if(sysPara){ + ui->pushButtonHighVoltageData->setEnabled( sysPara->status.currReclaimTankPos <5 ); + //ui->pushButtonHighVoltageData->setEnabled( !sysPara->status.isPrinting); + ui->spinBoxPressure->setEnabled( !sysPara->status.isPrinting); + + ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); + //ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + "600");//FPGA那边已固定600 + ui->labelMotorCurrent->setText(QString::number(sysPara->status.MOTOR_ISEN)); + ui->labelPressure->setText(QString::number(sysPara->status.PRESSURE)); + ui->labelTemperature->setText(QString::number(sysPara->status.TEMP_ADIN/4)); + ui->labelPulseCounter->setText(QString::number(sysPara->status.synTotalPulseCnt)); + //ui->label_PulseCounterZero->setText(QString::number(sysPara->status.xor_sync.sync_counter_at_zero)); +// if( sysPara->status.viscosityFaultCnt || sysPara->status.rWarnViscoReady ) +// sysPara->status.viscosity = 0;//sysPara->status.rWarnViscoReady + ui->labelVIscosity->setText(QString::number(sysPara->status.viscosity)); + ui->labelReclaimTankCloseTime->setText(QString::number(sysPara->status.currReclaimTankPos/10)); + //ui->labelTotalPulseNum->setText(QString::number(sysPara->status.synTotalPulseCnt));//不需要显示 + ui->labelSpetalPosition->setText(QString::number(sysPara->status.SEPTAL_POSITION)); + if(sysPara->para.gearPumpEnable) + { + setSpinBoxPressureMaxValue(900); + } + else + { + setSpinBoxPressureMaxValue(5000); + } + if(!sysPara->para.isCheckMagnet) + { + ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT)); // sysPara->status.currReclaimTankPos + } + else + { + ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) ); + } + if(sysPara->status.currReclaimTankPos<55 && sysPara->status.currReclaimTankPos>44 && enCleanUpAppendFlag==2) + { + if(timer2->isActive()) timer2->stop(); + enCleanUpAppendFlag=3; + sysPara->devOp->controlReclaimTankOpen(0); + emit onCleanUPNow();// start cleanup + } + else if(sysPara->status.currReclaimTankPos >0 && enCleanUpAppendFlag==4) //? + { + enCleanUpAppendFlag=5; + //sysPara->devOp->controlReclaimTankClose(1); + //ui->label_status->setText(tr("正在关回收槽......")); + } + else if(sysPara->status.currReclaimTankPos ==0 && (enCleanUpAppendFlag==5 ||enCleanUpAppendFlag==4)) //? + { + if(sysPara->status.reclaimCloseCnt)sysPara->status.reclaimCloseCnt--; + else { + sysPara->devOp->controlReclaimTankOpen(0); + timerHandler2(); + if(timer2->isActive()) timer2->stop(); + enCleanUpAppendFlag=0; + } + } + else + { + + } + } +} + +void SystemSetting::on_pushButtonCleanUP_pressed() +{ + if(sysPara){ + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("自动清洗时间约为一分钟,然后自动停止")); + QPushButton *cleanButton; + QPushButton *cancleCleanButton; + cleanButton=NULL; + cancleCleanButton=NULL; + r_PumpValveControledByHand = false; + if( enCleanUpAppendFlag==0) cleanButton = msgBox.addButton(tr("开始清洗"), QMessageBox::ActionRole); + else cancleCleanButton = msgBox.addButton(tr("停止清洗"), QMessageBox::ActionRole); + msgBox.addButton(QMessageBox::Cancel); + msgBox.exec(); + if (msgBox.clickedButton() == cleanButton) + { + r_PumpValveControledByHand = sysPara->status.isPumpValveControledByHand; + //ui->label_status->setText(tr("正在进入手动模式......")); + sysPara->status.isPumpValveControledByHand=true; + sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->controlMixValve(false); + sysPara->devOp->controlReclaimPump(true,true); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReleaseValve(false); + + if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){ + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlReclaimPump(true,false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->devOp->controlInkValvePWM(false); + } + + enCleanUpAppendFlag=1;// 开始启动手动模式 + sysPara->devOp->mainInkCtrl(); + timer2->start(2000); // 暂时循环一下2s + } + else if (msgBox.clickedButton() == cancleCleanButton) { + enCleanUpAppendFlag=3; + timerHandler2(); + return ; + } + } + +} +void SystemSetting::onCleanUPNow() +{ + if(sysPara){ + emit setRunStatus(tr("正在喷嘴逆清洗......")); + if(!(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)){ + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlReclaimPump(true,false); + } + timer2->start(60000); + } +} + +void SystemSetting::autoControlPressure(){ + emit pressureAdjust(); +} + +void SystemSetting::timerHandler2(){ + if(sysPara){ + if(enCleanUpAppendFlag==1) + { + //2s循环结束 +// sysPara->devOp->controlCycleValve(false); +// sysPara->devOp->controlReclaimPump(false,false); + if(timer2->isActive()) timer2->stop(); + // 已经进入手动模式了 + // 判断回收槽位置,并控制回收槽打开10mm以上; + enCleanUpAppendFlag=2; + if(sysPara->status.currReclaimTankPos<45) + { + sysPara->devOp->controlReclaimTankOpen(1); + //ui->label_status->setText(tr("正在开回收槽......")); + } + else if(sysPara->status.currReclaimTankPos>55){ + sysPara->devOp->controlReclaimTankClose(1); + //ui->label_status->setText(tr("正在关回收槽......")); + } + timer2->start(5500); + } + else if(enCleanUpAppendFlag==2) // 正在开回收槽 + { + if(timer2->isActive()) timer2->stop(); + enCleanUpAppendFlag=3; + sysPara->devOp->controlReclaimTankOpen(0); + emit onCleanUPNow();// start cleanup + } + else if(enCleanUpAppendFlag==3){// 清洗完成 + enCleanUpAppendFlag=4; +// emit setRunStatus(tr("清洗完成")); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReclaimTankClose(1); + sysPara->status.reclaimCloseCnt=10; + if(timer2->isActive()) timer2->stop(); + timer2->start(8300); // close reclaimTandk + if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){ + timerAuto->start(100); + } + } + else if(enCleanUpAppendFlag==4){ + emit setRunStatus(tr("清洗完成")); + if(sysPara->status.currReclaimTankPos==0){ + enCleanUpAppendFlag=0; + if(timer2->isActive()) timer2->stop(); + sysPara->devOp->controlReclaimTankClose(0); + } + sysPara->status.isPumpValveControledByHand = false; + if(timerAuto->isActive()) timerAuto->stop(); + sysPara->devOp->mainInkCtrl(); + } + else if(enCleanUpAppendFlag==5){ + if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0; + sysPara->devOp->controlReclaimTankClose(0); + sysPara->status.isPumpValveControledByHand =false; + sysPara->devOp->mainInkCtrl(); + } + else if(enCleanUpAppendFlag==6){ + if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0; + sysPara->status.isPumpValveControledByHand =false ; + } + else {if(timer2->isActive()) timer2->stop();} + } +} + +void SystemSetting::on_spinBoxReclaimPumpPower_valueChanged(int arg1) +{ + Q_UNUSED(arg1); + if(sysPara){ + if(sysPara->devOp->isReclaimPumpOpen()){ //在当前是开的情况下重设pwm + sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value(); + sysPara->devOp->controlReclaimPump(true,false); + } + } +} + + + +void SystemSetting::on_pushButtonHighVoltageData_pressed() +{ +#if 0//def SYSMIMA + if(sysPara->status.adjHightVolInitEN==0){ + dialogUpateMm->clearAuth(); + dialogUpateMm->show(); + } + else ondialogAuthorizationAccepted(); +#else + ondialogAuthorizationAccepted(); +#endif +} +//void ondialogAuthorizationAccepted(); +void SystemSetting::ondialogAuthorizationAccepted() +{ + if(sysPara){ + QMessageBox::StandardButton ret; +#ifdef SYSMIMA + if(sysPara->status.adjHightVolInitEN==0){ + //QString authString= dialogUpateMm->getAuth(); + //if(authString == "07710665") + { + sysPara->status.adjHightVolInitEN =1; + } +// else { +// QMessageBox::warning(this,tr("提示"),tr(+"密码不正确!"),QMessageBox::Ok); +// sysPara->status.adjHightVolInitEN =0; +// return ; +// } + } + + //if(sysPara->status.adjHightVolInitEN==0) return; + +#endif + + ret = QMessageBox::information(this, tr("Application"), + tr("是否更新高压包电流数据?"), + QMessageBox::Ok | QMessageBox::Cancel); + + + + if (ret == QMessageBox::Ok){ + + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + + sysPara->status.detectHighVoltageAppending = true; + sysPara->status.detectedValidHighVoltage = false; + sysPara->status.detectHighVoltageCnt = 0; + detectValidHVCnt = 0; + progressBar.setMaximum (ARRAY_SIZE(sysPara->para.highVoltageRecord)); + progressBar.setMinimum (0); + progressBar.setValue(sysPara->status.detectHighVoltageCnt); + progressBar.show(); + timer->start(1000); + //ui->label_HVFlag->setText(tr("")); + sysPara->para.set_HVData_Flag = 1; // + sysPara->devOp->writeFpgaPrintPara(true); + //--sysPara->devOp->setCtrlFlags(); + //qDebug()<<"set_HVData_Flag"<para.set_HVData_Flag ; + + } + } +} +//#define VOLDIV 5 // 原来的值 +//#define VOLNUM 20 // 原来的值 +#define VOLDIV 2 // 测试的值 +#define VOLNUM 50 // 测试的值 +void SystemSetting::on_pushButtonSearchBestOscillatorVoltage_pressed() +{ + if(sysPara){ + if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ + QMessageBox::information(this,tr("错误"),tr("墨线开关未开,请先打开墨线开关!")); + return ; + } + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + if(!sysPara->status.reclainTankReachEnd){ + QMessageBox::information(this,tr("错误"),tr("回收槽未全部打开!")); + return ; + } + + QMessageBox::StandardButton ret; + + ret = QMessageBox::information(this, tr("Application"), + tr("自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->printCtrl(PRINT_CTRL_STOP); //停止打印 + sysPara->devOp->highVoltageCtrl(0); // 关高压 + progressBar.setMaximum (VOLNUM); + progressBar.setMinimum (0); + progressBar.setValue(0); + progressBar.show(); + sysPara->status.detectBestOscillatorVoltageAppending = true; + sysPara->status.currentDetectBestOscillatorCnt = 0; + sysPara->status.longestPhaseHightLevelTm = 0; + sysPara->status.detectedBestOscillatorVoltage = 0; + sysPara->devOp->setOscillatorVoltage(0); + timer->start(6000); + } + } +} + +void SystemSetting::on_pushButtonSearchBestOscillatorFreq_pressed() +{ + if(sysPara){ + if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ + QMessageBox::information(this,tr("错误"),tr("墨线开关未开,请先打开墨线开关!")); + return ; + } + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + if(!sysPara->status.reclainTankReachEnd){ + QMessageBox::information(this,tr("错误"),tr("回收槽未全部打开!")); + return ; + } + + QMessageBox::StandardButton ret; + + ret = QMessageBox::information(this, tr("Application"), + tr("自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->printCtrl(PRINT_CTRL_STOP); //停止打印 + sysPara->devOp->highVoltageCtrl(0); // 关高压 + progressBar.setMaximum (20); + progressBar.setMinimum (0); + progressBar.setValue(0); + progressBar.show(); + + if(sysPara->para.divideRatio){ + sysPara->status.detectedStartOscillatorFreq = FPGA_SYS_HZ/(2*sysPara->para.divideRatio); + sysPara->status.detectedStartOscillatorFreq -= 2000; + } + else { + sysPara->status.detectedStartOscillatorFreq = 63000; + } + if(sysPara->status.detectedStartOscillatorFreq < 50000 || sysPara->status.detectedStartOscillatorFreq > 110000){ + QMessageBox::critical(this, tr("错误"), + tr("搜索的起始频率%1 HZ超出范围?").arg(sysPara->status.detectedStartOscillatorFreq)); + return ; + } + sysPara->status.detectBestOscillatorFreqAppending = true; + sysPara->status.currentDetectBestOscillatorCnt = 0; + sysPara->status.longestPhaseHightLevelTm = 0; + sysPara->status.detectedBestOscillatorFreq = sysPara->status.detectedStartOscillatorFreq; + sysPara->devOp->setDivideRatio(0); + timer->start(6000); + } + } +} + +//排序函数 +void bubbleSort(unsigned short arr[], int n) { + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + int temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } +} + +void SystemSetting::timerHandler(){ + if(sysPara){ + /*-------------------------------------高压检测-----------------------------------*/ + if(sysPara->status.detectHighVoltageAppending){ +#if 1 + if(sysPara->status.detectHighVoltageCnt < ARRAY_SIZE(sysPara->para.highVoltageRecord)-1){ + sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] = + sysPara->status.detectHighVoltageCnt?sysPara->status.HV_DETOUT:0; + sysPara->devOp->maxHighVoltageDACCtrl(0); //将其detectHighVoltageCnt设置为零,不处理高压故障 + sysPara->devOp->resumeFault(); //如果有高压故障,恢复高压故障 + progressBar.setValue(sysPara->status.detectHighVoltageCnt); + /* 应要求去掉多余到信息*/ + LogInfo::setRunStatusText(QString("High voltage %1 --- value %2") + .arg(sysPara->status.detectHighVoltageCnt).arg(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt])); + + if(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] > 30) //起始电压太小不算 + { + if(sysPara->status.detectedValidHighVoltage) + sysPara->status.detectHighVoltageCnt ++; + else{ //从无到有第一次检测高压的话,计数不加1 + + } + sysPara->status.detectedValidHighVoltage = true; + } + else + sysPara->status.detectHighVoltageCnt ++; +#ifdef __HV_FOR_WANG_DEBUG__ + int actHvAmp = sysPara->status.detectHighVoltageCnt*10; +#if 0 + float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73; + if(sysPara->status.detectHighVoltageCnt*10 == 0) { + tempHvAmp = 0; + } + else if(sysPara->status.detectHighVoltageCnt*10 == 1) { + tempHvAmp = 63.5; + } + else { + tempHvAmp = 63.5 + (sysPara->status.detectHighVoltageCnt*10 - 1) * 0.51; + } + sysPara->devOp->highVoltageCtrl(tempHvAmp); +#endif + //sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp; + sysPara->devOp->highVoltageCtrl(actHvAmp); + sysPara->para.HighVoltageAmplitude = actHvAmp; +#else + sysPara->devOp->highVoltageCtrl(sysPara->status.detectHighVoltageCnt*10); +#endif +#else + if(detectValidHVCnt < ARRAY_SIZE(sysPara->para.highVoltageRecord) && sysPara->status.detectHighVoltageCnt<16){ +// sysPara->para.highVoltageRecord[detectValidHVCnt] = +// detectValidHVCnt?sysPara->status.HV_DETOUT:0; + sysPara->para.highVoltageRecord[detectValidHVCnt] = sysPara->status.HV_DETOUT; + sysPara->devOp->maxHighVoltageDACCtrl(0); //将其detectHighVoltageCnt设置为零,不处理高压故障 + sysPara->devOp->resumeFault(); //如果有高压故障,恢复高压故障 + progressBar.setValue(detectValidHVCnt); + /* 应要求去掉多余到信息 + LogInfo::setRunStatusText(QString("High voltage %1 --- value %2") + .arg(sysPara->status.detectHighVoltageCnt).arg(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt])); + */ + //if(sysPara->para.highVoltageRecord[detectValidHVCnt] > 30) //起始电压太小不算 + if(sysPara->status.HV_DETOUT > 30) //起始电压太小不算 + { +// if(sysPara->status.detectedValidHighVoltage) +// detectValidHVCnt ++; +// else{ //从无到有第一次检测高压的话,计数不加1 + +// } +// sysPara->status.detectedValidHighVoltage = true; + detectValidHVCnt ++; + } + //else + sysPara->status.detectHighVoltageCnt ++; + + sysPara->devOp->highVoltageCtrl(sysPara->status.detectHighVoltageCnt*6); + +#endif + }else { + sysPara->para.highVoltageRecord[9] = sysPara->para.highVoltageRecord[8]; + sysPara->status.detectHighVoltageAppending = 0; + LogInfo::setRunStatusText(tr("高压设置完成")); + sysPara->para.set_HVData_Flag = 0; // + sysPara->devOp->writeFpgaPrintPara(true); //在这里面不能产生阻塞 + progressBar.hide(); + timer->stop(); + } + } + else if(sysPara->status.detectBestOscillatorFreqAppending){ + sysPara->devOp->readPhaseDetectHighTm(); + int longestPhaseHightLevelTm = 0; + if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ +#if 0 + for(unsigned int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){ + if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){ + longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i]; + } + } +#else + int n = ARRAY_SIZE(sysPara->status.phaseDetectHighTm); + bubbleSort(sysPara->status.phaseDetectHighTm, n); + + int sum = 0; + for (int i= 1; i < n -1; i++) + { + sum += sysPara->status.phaseDetectHighTm[i]; + } + longestPhaseHightLevelTm = sum / (n-2); + +#endif + } + LogInfo::setRunStatusText(tr("Oscillator Freq %1 --- 最长高电平时钟 %2") + .arg( sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200).arg(longestPhaseHightLevelTm)); + + if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ + sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; + sysPara->status.detectedBestOscillatorFreq = sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200; + } + sysPara->status.currentDetectBestOscillatorCnt++; + sysPara->devOp->setDivideRatio((FPGA_SYS_HZ/(sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200))/2); + progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); + if(sysPara->status.currentDetectBestOscillatorCnt == 20){ //100分了20份 + sysPara->status.detectBestOscillatorFreqAppending= false; + int bestRatio = (FPGA_SYS_HZ/(sysPara->status.detectedBestOscillatorFreq))/2; + /*------------------------------------------------------------------------------------*/ + ui->spinBoxOscillatorFreqFix->setValue(sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq)); + sysPara->para.oscillatorFreqFix = sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq); + /*------------------------------------------------------------------------------------*/ + sysPara->devOp->setDivideRatio(bestRatio); + sysPara->para.divideRatio = bestRatio; + progressBar.hide(); + timer->stop(); + LogInfo::setRunStatusText(tr("最佳晶振频率完成")); + } + } +#ifdef FINDVOL + else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压 + sysPara->devOp->readPhaseDetectHighTm(); + int longestPhaseHightLevelTm = 0; + if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ + for(int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){ + if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){ + longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i]; + } + } + } + LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2") + .arg(sysPara->status.currentDetectBestOscillatorCnt*3).arg(longestPhaseHightLevelTm)); + + if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ + sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; + sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*3; + } + sysPara->status.currentDetectBestOscillatorCnt++; + sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*3); + progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); + if(sysPara->status.currentDetectBestOscillatorCnt == 32){ //分了32份 + sysPara->status.detectBestOscillatorVoltageAppending = false; + ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage); + sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage); + sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage; + progressBar.hide(); + timer->stop(); + LogInfo::setRunStatusText(tr("最佳晶振电压完成")); + } + } +#else + else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压 + sysPara->devOp->readPhaseDetectHighTm(); + int longestPhaseHightLevelTm = 0; + if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ + for(unsigned int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){ + if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){ + longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i]; + } + } + } + LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2") + .arg(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV).arg(longestPhaseHightLevelTm)); + + if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ + sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; + sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*VOLDIV; + } + sysPara->status.currentDetectBestOscillatorCnt++; + sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV); + progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); + if(sysPara->status.currentDetectBestOscillatorCnt == VOLNUM){ //分了20份 + sysPara->status.detectBestOscillatorVoltageAppending = false; + ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage); + sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage); + sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage; + progressBar.hide(); + timer->stop(); + LogInfo::setRunStatusText(tr("最佳晶振电压完成")); + } + } +#endif + + } +} + + + +void SystemSetting::updateReclaimTime(int time){ + if(sysPara){ + ui->spinBoxReclaimTankTime->setValue(time); + } +} +void SystemSetting::updateViscosityAdjust(int offset){ + if(sysPara){ + int viscostyRealValue; + if(offset>0) + { + if(offset>5) + offset = 5; + if(sysPara->para.viscosityAdjust==1)//0.6% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/500; + } + else if(sysPara->para.viscosityAdjust==2)//1.0% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*5)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset/100; + } + else if(sysPara->para.viscosityAdjust==3)//1.6% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*8)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*8/500; + } + else if(sysPara->para.viscosityAdjust==4)//2.0% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*10)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*2/100; + } + else + { + viscostyRealValue = sysPara->para.viscosity; + } + } + else + { + viscostyRealValue = sysPara->para.viscosity; + } + if(sysPara->para.viscosityAdjust!=0) + { + ui->ViscosityAdjustText->setText(QString("%1").arg(viscostyRealValue)); + } + } +} + +void SystemSetting::updateAuthorization(int auth){ + Q_UNUSED(auth); + if(sysPara){ + //ui->labelMixValveVersion->setVisible(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1); + //ui->radioButtonMixValveNewVersion->setVisible(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1); + //ui->radioButtonMixValveOldVersion->setVisible(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1); + + } +} + void SystemSetting::setSpinBoxPressureMaxValue(int pressureVal) + { + ui->spinBoxPressure->setMaximum(pressureVal); + } + +//简单的使用输入框值变化事件时,会在用户输入个位数(未输入完成时),就触发发送修改命令,造成断点不正常 +void SystemSetting::on_spinBoxOscillatorVoltage_valueChanged(int arg1) +{ + static int vol=0; // + if(sysPara){ + if(vol-1==arg1 || vol+1==arg1) + { + //qDebug()<<"OSCVOL:"<devOp->setOscillatorVoltage(ui->spinBoxOscillatorVoltage->value()); + } + vol = arg1; + } +} +#include "Public.h" + +void SystemSetting::on_pushButtonInterFace_pressed() +{ + + + QString s1 = Public::ReadLanguageName(); + if(s1 =="English") { + dlgLanguage.LangIndex =INPUT_METHOD_TYPE_ENGLISH; + } + //else if(s1 =="Vietnamese") { + // dlgLanguage.LangIndex =INPUT_METHOD_TYPE_VIETNAM; + // } + else{ + dlgLanguage.LangIndex =INPUT_METHOD_TYPE_CHINESE; + } + + dlgLanguage.setCurrentLanguage(); + dlgLanguage.show(); + + + +/* + QFile file(SYS_ROOT_DIR"UseEn"); + + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("警告"), + tr("确定要切换显示语言吗?\r\n(重启才能生效)"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret != QMessageBox::Ok){ + return; + } + + QString s1 = Public::ReadLanguageName(); + + if(file.open(QIODevice::ReadWrite| QIODevice::Truncate)) { + QByteArray buf; + buf.clear(); + if(s1 =="English") {// English--> Vietnamese + QMessageBox::information(this,tr("提示"),tr("重启后切换到越南语界面")); + buf.append("Vietnamese\r\n"); + buf.append("YN_utf8.txt\r\n"); + } + else if(s1 =="Vietnamese") {// Vietnamese--> Chinese + QMessageBox::information(this,tr("提示"),tr("重启后切换到中文界面")); + buf.append("Chinese\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + else{// Chinese--> English + QMessageBox::information(this,tr("提示"),tr("重启后切换到英文界面")); + buf.append("English\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + file.write(buf); + file.close(); + setInterfaceMode(); + } +*/ +} + +void SystemSetting::setInterfaceMode() +{ + QString s1 = Public::ReadLanguageName(); + if(s1 =="English") {// English--> Vietnamese + ui->pushButtonInterFace->setText( tr("Tiếng Việt(Vietnamese interface)")); + } + else if(s1 =="Vietnamese") {// Vietnamese--> Chinese + ui->pushButtonInterFace->setText( tr("Chinese interface(中文界面)")); + } + else{// Chinese--> English + ui->pushButtonInterFace->setText( tr("English interface(英文界面)")); + } + +} diff --git a/SystemSetting.h b/SystemSetting.h new file mode 100644 index 0000000..f78d959 --- /dev/null +++ b/SystemSetting.h @@ -0,0 +1,68 @@ +#ifndef SSYSTEMSETTING_H +#define SSYSTEMSETTING_H + +#include +#include +#include "ParaSettingUI.h" +#include "TimeSettingDialog.h" +#include +#include "DialogAuthorization.h" +#include "dlgmutilanguage.h" + +#define SYSMIMA +namespace Ui { +class SystemSetting; +} + +class SystemSetting : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit SystemSetting(QWidget *parent = 0); + ~SystemSetting(); + + void updateSysParaToUI(); //重载 + void applyUIPara(); //重载 + void updateSysStatusToUI(); //重载 + QProgressBar progressBar; + void updateReclaimTime(int time); + void updateViscosityAdjust(int offset); + void updateAuthorization(int auth); + void setSpinBoxPressureMaxValue(int pressureVal); + void SystemSettingLog(); + +Q_SIGNALS: + void changeEditMode(int); + void setRunStatus(QString); + void pressureAdjust(); +private slots: + void setInterfaceMode(); + void SystemupdateSysParaToUI(); + + void on_spinBoxReclaimPumpPower_valueChanged(int arg1); + void on_pushButtonCleanUP_pressed(); + void on_pushButtonHighVoltageData_pressed(); + void on_pushButtonApply_pressed(); + void on_pushButtonSearchBestOscillatorVoltage_pressed(); + void on_pushButtonSearchBestOscillatorFreq_pressed(); + void timerHandler(); + void on_spinBoxOscillatorVoltage_valueChanged(int arg1); + void on_pushButtonInterFace_pressed(); + void ondialogAuthorizationAccepted(); + void onCleanUPNow(); + void timerHandler2(); + void autoControlPressure(); + +private: + Ui::SystemSetting *ui; + DlgMutiLanguage dlgLanguage; + QTimer *timer,*timer2, *SetinkcloseCountTimer, *timerAuto; + unsigned char enCleanUpAppendFlag; // 0空闲,1关开回收槽,2手动,3清洗,4恢复,5停止,6 + bool r_PumpValveControledByHand; +#ifdef SYSMIMA + DialogAuthorization *dialogUpateMm; +#endif +}; + +#endif // SSYSTEMSETTING_H diff --git a/TextEditOption.cpp b/TextEditOption.cpp new file mode 100644 index 0000000..05397df --- /dev/null +++ b/TextEditOption.cpp @@ -0,0 +1,1559 @@ +#include "TextEditOption.h" +#include "ui_texteditoption.h" +#include "PicWidget.h" +#include "scene/picscene.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include "Public.h" +#include "myinclude.h" + +#include "QBarCode.h" +#include "dlgQrCode.h" +#include +#include +TextEditOption::TextEditOption(QWidget *parent) : + QWidget(parent), + ui(new Ui::TextEditOption) +{ + ui->setupUi(this); + fileDialog = 0; + fileName = ""; + textEdit = 0; + newFileAppending = false; + dialogFileOperation = new DialogFileOperation(0); + dialogInsertVari = new DialogInsertVari(0); + dialogFontSize = new DialogFontSize(0); + dialogLineSpace = new DialogLineSpace(0); + editMode=0; +#ifdef _2DCODE_ + dlgQrcode = new dlgQrCode(); + barcode= new QBarCode(); + connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); + connect(dlgQrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); +#endif + //textEdit->setFontFamily(Public::getFontFamily(12)); + //textEdit->clear(); +#ifdef MYSAVEFILEDLG + dialogSaveFile =new DialogSaveFile(0); +#endif + + sceneEditItem = false; +} + +TextEditOption::~TextEditOption() +{ + delete ui; + if(fileDialog) + delete fileDialog; + if(dialogInsertVari) + delete dialogInsertVari; + if(dialogFontSize) + delete dialogFontSize; + if(dialogLineSpace) + delete dialogLineSpace; +#if _2DCODE_ + if(dlgQrcode) + delete dlgQrcode; +#endif + //free(dlgQrCode); +#ifdef MYSAVEFILEDLG + if(dialogSaveFile) delete dialogSaveFile; + if(dialogFileOperation) delete dialogFileOperation; +#endif +} + +void TextEditOption::enableButtonSave(){ + if(!ui->bottonSave->isEnabled()) + ui->bottonSave->setEnabled(true); +} + +void TextEditOption::bindText(QTextEdit *textEdit){ + this->textEdit = textEdit; + + connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); + + ui->bottonSave->setEnabled(false); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); +#ifdef MYSAVEFILEDLG + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); +#endif + + + +} +void TextEditOption::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; +#ifdef _2DCODE_ + if(sysPara) + { + barcode->bindSysPara(sysPara); + //qDebug()<<"TextEditOption bind by TextEdit."; + } +#endif + //else qDebug()<<"TextEditOption bind by TextEdit failure"; +} + +void TextEditOption::bindPicWidget(PicWidget *picwidget){ + this->picwidget = picwidget;// stackedWidgetOption + +// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); +// ui->bottonSave->setEnabled(false); +// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + + +} +void TextEditOption::bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText){ + this->stackedWidgetOption = stackedWidgetOption;// stackedWidgetOption + this->stackedWidgetText = stackedWidgetText; +// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); +// ui->bottonSave->setEnabled(false); +// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + + + +} +void TextEditOption::showDlg(){ + +if(editMode==PICFILE){ + + disconnect(textEdit,SIGNAL(textChanged()),0,0); + + connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); + ui->bottonSave->setEnabled(false); + disconnect(dialogFileOperation,SIGNAL(openFile(QString,bool)),0,0); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + on_pushButtonFile_pressed(); + + // dialogFileOperation->show(); +} +} + +/* + * 和DialogFileOperation对接 + * */ +void TextEditOption::onFileOpen(QString filePath,bool insertFlag) +{ + if(editMode==PICFILE){ + if(filePath.endsWith(".png") )//||filePath.endsWith(".bmp") ) + { + if(insertFlag){ + emit PicfileNameOpen(filePath,insertFlag); + } + else { + // + emit PicfileNameOpen(filePath,0); + } + return ; + } + else{ + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(1); + stackedWidgetText->setCurrentIndex(1); + } + } + } + else if(editMode==TXTFILE) { + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") + || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) + { + QString html = ""; + QTextCharFormat fmt = textEdit->currentCharFormat (); + if(insertFlag){ + textEdit->insertHtml (html); + } + else { + textEdit->setHtml (html); + textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 + } + textEdit->mergeCurrentCharFormat(fmt); + } + else if(filePath.endsWith(".xml")) + { + memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); + return; + } + else { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + } + else { + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + // if (Qt::mightBeRichText(str)) { + // textEdit->setHtml(str); + // } else { + // str = QString::fromLocal8Bit(data); + // textEdit->setPlainText(str); + // } + // QTextStream in (&file);in.readAll() + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + } + + if(insertFlag){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + textEdit->insertHtml(str); + } + } + else + { + updateFileVariWidth(str); + textEdit->setHtml(str); + fileName = filePath; + + if(sysPara){ + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + textEdit->moveCursor(QTextCursor::EndOfLine); + onDialogLineSpaceAccepted(); + } + } +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); + } + if(insertFlag) //在打开文件的时候不设置焦点 + textEdit->setFocus(); + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(0); + stackedWidgetText->setCurrentIndex(0); + // textEdit->setFocus(); + } + } + else if(editMode==SCENE) { + //开机会调用到此,然后打开文件 + if(filePath.endsWith(".xml")) + { + memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); + emit scenefileOpen(filePath,false);//sceneeditoption 接收这个信号然后打开文件 + emit fileNameChanged(QFileInfo(filePath).fileName()); + } + else + { + if(sceneEditItem == true) + { + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") + || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) + { + QString html = ""; + QTextCharFormat fmt = textEdit->currentCharFormat (); + if(insertFlag){ + textEdit->insertHtml (html); + } + else { + textEdit->setHtml(html); + textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 + } + textEdit->mergeCurrentCharFormat(fmt); + } + else { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + } + else { + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + } + + if(insertFlag){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + textEdit->insertHtml(str); + } + } + else + { + textEdit->setHtml(str); + fileName = filePath; + + if(sysPara){ + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"onFileOpen"<sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + textEdit->moveCursor(QTextCursor::EndOfLine); + } + } +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); + } + } + /* + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(0); + stackedWidgetText->setCurrentIndex(0); + } + */ + } + } +} + + +void TextEditOption::onbottonInsertImgclicked() +{ + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertImgFIle_select())); + fileDialog->showFileDialog(tr("插入图片"),QString("/"),QString("img (*.bmp *.jpg *.png *.gif)")); +} + +void TextEditOption::onInsertImgFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + + for(int i = 0;i < files.size(); i++){ + QString html = ""; + textEdit->insertHtml (html); + + } +} + + +void TextEditOption::onbottonInsertTextclicked() +{ + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertTextFIle_select())); + fileDialog->showFileDialog(tr("插入文本"),QString(DOC_ROOT_DIR),QString("text (*.html *.txt)")); +} + +void TextEditOption::onInsertTextFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + QFile file(files.value(i)); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + files.value(i)); + } + else{ + QTextStream in (&file); + textEdit->insertHtml(in.readAll()); + } +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); + } +} + + + +void TextEditOption::onbuttonOpenclicked() +{ + if(!textEdit){ + QMessageBox::critical(this,tr("错误"),tr("TextEditOption 构造函数参数textEdit 不应当为空")); // + } + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onOpenFIle_select())); + fileDialog->DontUseNativeDialog; + + fileDialog->showFileDialog(tr("打开文件"),QString(DOC_ROOT_DIR),QString("Text files (*.txt *.html)")); +} + + +void TextEditOption::openFIle(QString openFileName){ + QFile file(openFileName); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + openFileName); + } + else{ + QTextStream in (&file); + textEdit->setText(in.readAll()); + fileName = openFileName; + if(sysPara){ + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"openFIle"<sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + } + file.close(); +} + + +void TextEditOption::onOpenFIle_select(){ + + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + openFIle(files.value(i)); + } +} + + + +void TextEditOption::on_buttonSaveAS_clicked() +{ +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); +#else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + fileDialog->showFileDialog(tr("另存为"),QString(DOC_ROOT_DIR),QString("files (*.html *.txt)")); +#endif + +} + + +void TextEditOption::saveFile(){ + if(fileName.endsWith(".txt")){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("以.txt保存将丢失所有格式,你是否愿意保存为.html格式?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + fileName += ".html"; + } + } + QString html = textEdit->toHtml(); + QString pattern = "setHtml(html.replace(UDISK_DOC_ROOT_DIR,DOC_ROOT_DIR)); + } + QTextDocumentWriter writer(fileName); + + //writer.setFormat("html"); + bool success = writer.write(textEdit->document()); + if (success){ + textEdit->document()->setModified(false); + ui->bottonSave->setEnabled(false); + if(sysPara){ + sysPara->sysFile =fileName; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + } + else { + QMessageBox::warning(this,tr("警告"),tr("无法保存文件") + fileName); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + checkNewFileAppending(); +} + + +void TextEditOption::onSaveAS_FIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + fileName = files[i]; + + if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) + fileName += ".html"; + saveFile(); + } +} + + +void TextEditOption::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class + fileName = filename; + if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) + fileName += ".html"; + + saveFile(); + //emit fileNameChanged(QFileInfo(fileName).fileName()); + //qDebug()<clear(); + fileName = ""; + emit fileNameChanged(QFileInfo(fileName).fileName()); + setFontFormat(); + onDialogLineSpaceAccepted(); + } + newFileAppending = false; +} + +void TextEditOption::onSave_File_reject(){ + checkNewFileAppending(); +} + +void TextEditOption::on_bottonSave_clicked() +{ + if(sysPara->para.EditMode==SCENE){ + //在场景模式下,这个是确定按钮,切换到场景模式 + if(sceneEditItem) + { + editItemModeDone(); + emit editItemDone(); + } + + } + else + { + if(fileName.isEmpty()){ + #ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); + #else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + connect(fileDialog,SIGNAL(rejected()),this,SLOT(onSave_File_reject())); + fileDialog->showFileDialog(tr("保存..."),QString(DOC_ROOT_DIR),QString("HTML files (*.html)")); + #endif + } + else { + saveFile(); + newFileAppending = false; + } + } +} + + + +bool TextEditOption::maybeSave(){ + if (!textEdit->document()->isModified()) + return true; + if (fileName.startsWith(QLatin1String(":/"))) + return true; + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("文档已经改变,是否保存?")); + QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == saveButton) { + newFileAppending = true; + on_bottonSave_clicked(); + return false; + } else if (msgBox.clickedButton() == cancleSaveButton) { + return true; + } + else + return false; + + return true; +} +void TextEditOption::on_bottonNew_pressed() +{ + if (maybeSave()) { + //setFontFormat(); + textEdit->clear(); + fileName = ""; + QFile file(fileName); + emit fileNameChanged(QFileInfo(fileName).fileName()); + } +#ifdef VARCOLOR + textEdit->insertHtml(QString("  ")); +#endif + +} + +void TextEditOption::onOpenNewFile() +{ + //if (maybeSave()) + { + //setFontFormat(); + textEdit->clear(); + fileName = ""; + QFile file(fileName); + emit fileNameChanged(QFileInfo(fileName).fileName()); + } +#ifdef VARCOLOR + textEdit->insertHtml(QString("  ")); +#endif + +} + +void TextEditOption::on_buttonInsertVari_pressed() +{ QString s,fontname=""; + if(sysPara) + { + + //s.sprintf("%s(%02dX%02d)",sysPara->para.qrOption.text,sysPara->para.qrOption.width,sysPara->para.qrOption.height); + s= sysPara->para.qrOption.text; + if(s.length()>120)s="string to long."; + dialogInsertVari->setValue(""); + } + + if(dialogInsertVari->exec() == QDialog::Accepted && sysPara){ +// qDebug()<< "dialogInsertVari::Accepted"; + int pixelSize = ui->labelFontSize->text().toInt(); + QFont font; + fontname=ui->labFontFamily->text(); + //qDebug()<< "fontname:"<checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); + + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + + //qDebug()<para.textEditCharSpace<para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + width = (fontMetrics.width("0123456789.m "))/13; + } +// if(sysPara->para.printNumPoint) +// { +// width = (fontMetrics.width("0123456789."))/11 ; +// } +// else +// { +// width = (fontMetrics.width("0123456789"))/10 ; +// } + + + int height = fontMetrics.ascent()+ fontMetrics.descent(); + int digitalNum; + int varType; + + // 调整变量占位区的大小 + //qDebug()<<"leading:"<para.ExpirySplitMode; + dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); + + fmt = textEdit->currentCharFormat (); + + if((varType<9 || varType==13 || varType==14 || varType == 15) // 普通变量;varType=13 is CNT3 var + // ||(varType>=20 && varType<29) // 横左变量 + // ||(varType>=40 && varType<49) // 右横变量 + ) + { + int varType1= varType; + + if(fontname.contains("SerifL") ||fontname.contains("serifl") ) + varType1= 20+varType; + else if(fontname.contains("SerifR") ||fontname.contains("serifr") ) + varType1= 20+varType; + else if(fontname.contains("bangla") ) + varType1= 30+varType; + else if(fontname.contains("biyangF") ) + varType1= 50+varType; + else if(fontname.contains("Roman") ) + varType1= 60+varType; + // varType1= 40+varType; // 变量右横时取 40,左横时取 20 + // qDebug()<<"pixelSize:"<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) + .arg(height+1).arg(width*digitalNum).arg(varType1)); //插入索引后 + +// qDebug()<<"vari heigh:"<mergeCurrentCharFormat(fmt); + } // 普通变量 VarType<=8 + else if(varType >=9 && varType <=11) + { // +#ifdef _2DCODE_ + s= sysPara->para.qrOption.text; + dlgQrcode->move( (this->width() - dlgQrcode->width())/2 ,10); + if(varType==9){ + dlgQrcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=0; + sysPara->para.qrOption.cntNum=digitalNum; //digitalNum + dlgQrcode->setWindowTitle(tr("二维码变量设置")); + dlgQrcode->SetOption(&sysPara->para.qrOption); + dlgQrcode->setCntCheckBoxHide(0); + dlgQrcode->show(); + } + + else if(varType==10){ + dlgQrcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=1; + sysPara->para.qrOption.cntNum=digitalNum; + dlgQrcode->setCntCheckBoxHide(0); + dlgQrcode->setWindowTitle("二维码变量设置"); + dlgQrcode->SetOption(&sysPara->para.qrOption); + dlgQrcode->show(); + } + + else if(varType==11){ + barcode->move(0,0); + barcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=1; + sysPara->para.qrOption.cntNum=digitalNum; + barVarFont = font; + barVarHeight=height; + barVarWidth =width; + //barcode->setCntCheckBoxHide(0); + barcode->setWindowTitle("条形码变量设置"); + barcode->SetOption(&sysPara->para.bcOption); + barcode->show(); + + } + textEdit->mergeCurrentCharFormat(fmt); +#endif + } + else if(varType ==RANDOMNUM){ //12 + //digitalNum=13; + //qDebug()<<"digitalNum"<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) + .arg(height+1).arg(width*digitalNum)); //插入索引后 + + textEdit->mergeCurrentCharFormat(fmt); + } + else if(varType ==EXPIRYDATE){ //80 :/80/image/expiryDate8.bmp qrc:/80/image/expiryDate875.bmp +// QImage img; +// img.load("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/digitalWidth8.bmp"); +// img.setPixel(0,4,0xffff0Cfc); +// img.setPixel(0,5,0xffff0Cfc); +// img.save("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/curDate8.bmp"); + // 0xff00fc + int varType1 = varType; + if(fontname.contains("bangla") ) + { + varType1= 10+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 20+varType; + } + else if(fontname.contains("Roman") ) + { + varType1= 30+varType; + } + + sysPara->print.ExpiryVar.splitMode=splitMode; + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + //dateFormat.insert(10,"x"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + //qDebug()<<"DateTime "<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(175):1) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); + textEdit->mergeCurrentCharFormat(fmt); + }else + { + if(splitMode == 3 || splitMode ==7 ) + { + height = fontMetrics.ascent(); + } + // textEdit->insertHtml(QString("") + // .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + // .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 + //sysPara->print.ExpiryVar.bold = ui->checkBoxBold->isChecked(); + textEdit->insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); + textEdit->mergeCurrentCharFormat(fmt); + } + } + else if(varType ==CURDATE ){ //81 :/80/image/expiryDate8.bmp qrc:/80/image/curDate8.bmp +#if 0 + QImage img; + img.load("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/digitalWidth8.bmp"); + img.setPixel(0,4,0xffff0Cfc); + img.setPixel(0,5,0xffff0Cfc); + img.save("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/81/image/curDate8.bmp"); +#endif + int varType1 = varType; + if(fontname.contains("bangla") ) + { + varType1= 10+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 20+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 30+varType; + } + + // 0xff00fc + //qDebug()<<"CurDateVar height"<print.CurDateVar.splitMode = splitMode; + font.setLetterSpacing(QFont::AbsoluteSpacing, sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + //dateFormat.insert(10,"x"); +// dateFormat.insert(10,"A dd MM yy"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + int dateTimeWidth = fontMetrics.width(DateTime) ; + qDebug()<<"insert splitMode="<insertHtml(QString("") +// .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) +// .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 +// sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + textEdit->insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height+1).arg(dateTimeWidth+2)); //插入索引后 + sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + //qDebug()<<"sysPara->print.CurDateVar.bold:"<print.CurDateVar.bold; + textEdit->mergeCurrentCharFormat(fmt); + } +#endif + if(DateTime == "x") + { + qDebug()<<" x handle"; + textEdit->insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):1) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + }else + { + if(splitMode == 3 || splitMode ==7 ) + { + height = fontMetrics.ascent();//fontMetrics.ascent()+ fontMetrics.descent(); + } +// textEdit->insertHtml(QString("") +// .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) +// .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 +// sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + qDebug()<<"height:"<insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + //sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + //qDebug()<<"sysPara->print.CurDateVar.bold:"<print.CurDateVar.bold; + textEdit->mergeCurrentCharFormat(fmt); + } + } + else if(varType == CURCLASS) { //82 :/82/image/curDate1.bmp + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + int dateTimeWidth = fontMetrics.width("A") ; + int pixBmpSize = 1; + if (ui->checkBoxBold->checkState() && (pixelSize<=16)) { + pixBmpSize = 875; + } + else { + if(pixelSize >= 9) { + pixBmpSize = 91; + } + else { + pixBmpSize = 1; + } + } + qDebug()<<"height:"<insertHtml(QString("") + .arg(varType).arg(pixBmpSize) + .arg(height+1).arg(dateTimeWidth+2)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + } + textEdit->setFocus(); + } +} + + +void TextEditOption::mergeFormatOnWordOrSelection(const QTextCharFormat &format) +{ + + QTextCursor cursor = textEdit->textCursor(); + //if (!cursor.hasSelection()) + // cursor.select(QTextCursor::WordUnderCursor); + //cursor.mergeCharFormat(format); + //textEdit->setTextCursor(cursor); + //qDebug()<<"mergeFormatOnWordOrSelection"<mergeCurrentCharFormat(format); +} + +void TextEditOption::updateSysParaToUI() //重载 +{ + if(sysPara){ + /*务必先设置行距*/ + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); + /*将文件打开*/ + QString file = QString(sysPara->para.lastOpenedFileName); + if(QFile::exists(file)){ + sysPara->sysFile =file; + onFileOpen(file,false); + } + dialogFontSize->setValue(sysPara->para.fontPixelSize); + } +} + +void TextEditOption::onMbSetLineAndChar(int line_space, int char_space) +{ + sysPara->para.textEditLineSpace = line_space; + sysPara->para.textEditCharSpace = char_space; + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); +} + +QLabel *TextEditOption::getLabelFontSize(){ + return ui->labelFontSize; +} + +QLabel *TextEditOption::getLabelFontFamily(){ + return ui->labFontFamily; +} + +void TextEditOption::setFontFormat(){ + if(sysPara){ + + qreal pixelSize = ui->labelFontSize->text().toFloat(); + if(pixelSize < Public::getMinFontPixelSize()) + pixelSize = sysPara->para.fontPixelSize; + + if(pixelSize < Public::getMinFontPixelSize()){ + pixelSize = Public::getMinFontPixelSize(); + } + + if (pixelSize >= 0) { + QTextCharFormat fmt; + int DPI = textEdit->logicalDpiX(); + DPI = DPI?DPI:1; + qreal pointSize = pixelSize*72/DPI; //Pixel = DPI * Point / 72 + fmt.setFontPointSize(pointSize); +#ifdef VNLGXX + QString fontFamily = dialogFontSize->getFontFamily(); + +#else + QString fontFamily = // Public::getFontFamily((int)pixelSize); + ui->labFontFamily->text(); + ui->labFontFamily->setText(fontFamily); +#endif + fmt.setFontFamily(fontFamily); + fmt.setFontWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16)? QFont::Bold:QFont::Normal); + //fmt.setUnderlineStyle(); + //fmt.setVerticalAlignment(QTextCharFormat::AlignBottom); + //QfontMetrics.bottom + //fmt.setUnderlineStyle(QTextCharFormat::NoUnderline); + //qDebug() << "logicalDpiX:" << textEdit->logicalDpiX() << "logicalDpiY:" << textEdit->logicalDpiY(); + //qDebug() << "physicalDpiX:" << textEdit->physicalDpiX() << "physicalDpiX:" << textEdit->physicalDpiX(); + mergeFormatOnWordOrSelection(fmt); +// QFont font = textEdit->document()->defaultFont(); +// font.setPointSizeF(pointSize); +// textEdit->document()->setDefaultFont(font); + + //qDebug()<<"Font:"<para.fontPixelSize = font.pointSize(); + dialogFontSize->setValue(sysPara->para.fontPixelSize); + ui->checkBoxBold->setChecked(font.bold()); +} + +QPushButton * TextEditOption::getPushButtonPreview(){ + return ui->pushButtonPreview; +} +QCheckBox *TextEditOption::getCheckBoxBold(){ + return ui->checkBoxBold; +} + +void TextEditOption::on_pushButtonFile_pressed() +{ + if(sceneEditItem) + { + dialogFileOperation->refreshListView(TXTFILE); + dialogFileOperation->exec(); + } + else + { + dialogFileOperation->refreshListView(editMode); + dialogFileOperation->exec(); + } +} + + +void TextEditOption::on_buttonSelectFont_pressed() +{ + if(dialogFontSize->exec() == QDialog::Accepted){ + int fontSize; + QString fontFamily; + dialogFontSize->getValue(&fontSize); + fontFamily = dialogFontSize->getFontFamily(); + ui->labFontFamily->setText(fontFamily); +#ifdef EnableArabic + bool switchArabicFlag=false; + bool arabicSelect=fontFamily.contains("arabic"); + if((fontFamily=="biyang" || fontFamily=="wenquanyi")&&(fontSize==7 || fontSize==9)){ + switchArabicFlag=true; + emit EnableSwitchArabicFlag(switchArabicFlag); + }else { + emit EnableSwitchArabicFlag(switchArabicFlag); + } + dialogSaveFile->setFileNameEnglishOrArabic(false); + emit fontSizeArabicSelect(arabicSelect); +#endif + if(sysPara){ + sysPara->para.fontPixelSize = fontSize; + } + ui->labelFontSize->setText(QString::number(fontSize)); + setFontFormat(); + textEdit->setFocus(); + emit fontSizeChange(fontSize); + bool flagBangal=false; + if(dialogFontSize->getFontFamily() == "bangla") + flagBangal = true; + emit switchBengalLanguage(flagBangal); + } + +} + +void TextEditOption::on_checkBoxBold_released() +{ + setFontFormat(); + textEdit->setFocus(); +} + + +void TextEditOption::onDialogLineSpaceAccepted(){ + dialogLineSpace->getValue(&sysPara->para.textEditLineSpace,&sysPara->para.textEditCharSpace); +// QString str = textEdit->toHtml(); +// updateFileVariWidth(str); +// textEdit->setHtml(str); + for(QTextBlock textBlock = textEdit->document()->begin();textBlock != textEdit->document()->end(); textBlock = textBlock.next()){ + QTextBlockFormat textBlockFormat = textBlock.blockFormat(); + textBlockFormat.setAlignment(Qt::AlignBottom); + textBlockFormat.setTopMargin(-1); + textBlockFormat.setBottomMargin(sysPara->para.textEditLineSpace-1); + QTextCursor textCursor = textEdit->textCursor(); + textCursor.setPosition(textBlock.position()); + textCursor.setBlockFormat(textBlockFormat); + textEdit->setTextCursor(textCursor); + } + +// QString str = textEdit->toHtml(); +// updateFileVariWidth(str); +// textEdit->setHtml(str); + + QFont font = textEdit->font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + textEdit->setFont(font); +} +void TextEditOption::on_buttonLineSpace_clicked() +{ + if(dialogLineSpace->exec() == QDialog::Accepted){ + onDialogLineSpaceAccepted(); + sysPara->saveParaToFile(); + textEdit->setFocus(); + sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; + } +} + +void TextEditOption::InsertQRCodeToEdit(QString barCodeName,int width,int height ,int enSave){ +#ifdef _2DCODE_ + textEdit->setText(""); + InsertQRCodeToEdit(barCodeName, width, height); + fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; + if(enSave) saveFile(); +#endif +} +void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ,int enSave){ +#ifdef _2DCODE_ + textEdit->setText(""); + InsertBarCodeToEdit(barCodeName, width, height); + fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; + if(enSave) saveFile(); +#endif +} +void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ) +{ +#ifdef _2DCODE_ + //dialogInsertVari->getValue(&varType,&digitalNum); + QTextCharFormat fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(barCodeName) + .arg(height).arg(width)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + //textEdit->setFocus(); + //qDebug()<<"TEOption:"<getValue(&varType,&digitalNum); + QTextCharFormat fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(barCodeName)//QFileInfo(barCodeName). + .arg(width).arg(height)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + //textEdit->setFocus(); + //qDebug()<<"TEOption:"<flagInsert ) { + dlgQrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + dlgQrcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + + } + else { + + if(sysPara->para.qrOption.type==0){ + textEdit->insertHtml(QString("") + .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->para.qrOption.type==1){ + textEdit->insertHtml(QString("") + .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->para.qrOption.type==2){ + textEdit->insertHtml(QString("") + .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + } + } + sysPara->saveParaToFile(); +#endif +} +void TextEditOption::onBarCodeClose(){ +#ifdef _2DCODE_ + bcPara_t bcoption; + if(barcode->flagInsert ) { + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + //qDebug()<<"onBarCodeClose"<para.bcOption.barType<para.bcOption.height; + barcode->GetOption2((bcPara_t*)&bcoption); + //qDebug()<<"onBarCodeClose"<para.bcOption.barType = bcoption.type; + barcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + + } + else + { + fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height)); + + //插入索引后 + //qDebug()<") + // .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height); + + int varType1= 7;//CNT1:7, CNT2:8 + int digitalNum; + if(sysPara->para.bcOption.var1En){ + digitalNum=sysPara->para.bcOption.var1Num; + textEdit->insertHtml(QString("%1%2").arg(sysPara->para.bcOption.TxtModule).arg(sysPara->para.bcOption.TxtLine)); + textEdit->insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) + .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 + } + if(sysPara->para.bcOption.var2En) + { + digitalNum=sysPara->para.bcOption.var2Num; + textEdit->insertHtml(QString("") + .arg(varType1+1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) + .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 + } + + textEdit->mergeCurrentCharFormat(fmt); + } + } + sysPara->saveParaToFile(); +#endif +} + +void TextEditOption::onEditItemMode() +{ + ui->bottonNew->setDisabled(true); + ui->buttonSaveAS->setDisabled(true); + ui->pushButtonPreview->setDisabled(true); + ui->bottonSave->setText(tr("完成")); + sceneEditItem = true; +} +void TextEditOption::editItemModeDone() +{ + sceneEditItem = false; + ui->bottonNew->setDisabled(false); + ui->buttonSaveAS->setDisabled(false); + ui->pushButtonPreview->setDisabled(false); + ui->bottonSave->setText(tr("保存")); +} + +void TextEditOption::modbus_insert_pic(QString filename) +{ +// on_pushButtonFile_pressed(); + dialogFileOperation->modbus_openfile(filename); + +} + +void TextEditOption::updateSysParaToZero() //重载 +{ + if(sysPara){ + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); + } +} + +void TextEditOption::SetHiddenValue(bool select) +{ + dialogInsertVari->EnableHiddenValue(select); +} + +void TextEditOption::updateFileVariWidth(QString &str) +{ + QString patternNormalVar = ""; + updateNormalVarWidth(str,patternNormalVar); + + QString patternCurDateVar = ""; + updateProduceDateVarWidth(str,patternCurDateVar,2); + + QString patternExpiryDateVar = ""; + updateProduceDateVarWidth(str,patternExpiryDateVar,1); + +} + +void TextEditOption::updateNormalVarWidth(QString& str,const QString& pattern) +{ + QRegExp rx(pattern); + int from = 0; + // 正常变量 + while(from < str.size() && from != -1) { + from = str.indexOf(rx,from);//返回匹配到到起始地址 + bool ok; + if(from != -1){//找到匹配的 + int width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); + int height = rx.cap(5).toInt(&ok); + int height2 = getVariableHight(height); + int digitalNum = rx.cap(3).toInt(&ok);//第二个匹配,数字到个数 + if(digitalNum>100){ //加粗 + digitalNum/=100; + ui->checkBoxBold->setChecked(true); + } + // 获取匹配的标签 + QString matchedTag = rx.cap(0); + // 构建新的标签,替换width属性值 + QString newTag = matchedTag; + int singlewidth = getSingleDigitWidth(height2); + int newWidth= (singlewidth + sysPara->para.textEditCharSpace) * digitalNum; + if(newWidth == width){ + return; + } + newTag.replace(QString("width=\"%1\"").arg(rx.cap(4)), QString("width=\"%1\"").arg(newWidth)); + // 替换原始文本中的标签 + str.replace(from, rx.matchedLength(), newTag); + from ++; + from+=newTag.length(); + } + } +} + +void TextEditOption::updateProduceDateVarWidth(QString &str,const QString pattern,int mode){ + QRegExp rx(pattern); + int from = 0; + // 正常变量 + while(from < str.size() && from != -1) { + from = str.indexOf(rx,from);//返回匹配到到起始地址 + bool ok; + if(from != -1){//找到匹配的 + int width = rx.cap(3).toInt(&ok)*(sysPara->status.addSpace?2:1); + int height = rx.cap(4).toInt(&ok); + int digitalNum = rx.cap(2).toInt(&ok);//第二个匹配,数字到个数 + if(digitalNum>100){ //加粗 + digitalNum/=100; + ui->checkBoxBold->setChecked(true); + } + // 获取匹配的标签 + QString matchedTag = rx.cap(0); + // 构建新的标签,替换width属性值 + QString newTag = matchedTag; + int newWidth= getDateVarWidth(height,mode); +// std::cout<<"newWidth:"<标签 + str.replace(from, rx.matchedLength(), newTag); + from ++; + from+=newTag.length(); + } + } + } + + +int TextEditOption::getDateVarWidth(int height,int mode) +{ + int pixelSize = getVariableHight(height); + QFont font; + QString fontname="biyang"; + if(pixelSize>=12){ + fontname="wenquanyi"; + } + font.setFamily( + fontname // 20160812 + ); + font.setPixelSize(pixelSize); + font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); + unsigned char splitMode=sysPara->para.ExpirySplitMode; + std::cout<<"sysPara->para.ExpirySplitMode"<< static_cast(sysPara->para.ExpirySplitMode)<status.flagOfAdjustWidth_1 = 1; + sysPara->status.splitMode_Adjust_1= splitMode; + } + else if(mode ==2 ){ + sysPara->status.flagOfAdjustWidth_2 = 1; + sysPara->status.splitMode_Adjust_2= splitMode; + } +// std::cout<<"mode:"<print.CurDateVar.splitMode1:"<< static_cast(sysPara->print.CurDateVar.splitMode)<para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + int dateTimeWidth = fontMetrics.width(DateTime) ; + return dateTimeWidth+4; +} + + +int TextEditOption::getSingleDigitWidth(int height) +{ + // int pixelSize = ui->labelFontSize->text().toInt(); + int pixelSize = height; + QFont font; + QString fontname="biyang"; + if(height>=12){ + fontname="wenquanyi"; + } + font.setFamily( + fontname // 20160812 + ); + font.setPixelSize(pixelSize); + font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); + font.setLetterSpacing(QFont::AbsoluteSpacing,0); + QFontMetrics fontMetrics(font); + int width = (fontMetrics.width("0")); + // int width = (fontMetrics.width("0123456789"))/10; + // if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + // width = (fontMetrics.width("0123456789.m "))/13; + // } + return width; +} + +int TextEditOption::getVariableHight(int height){ + if(height<7){ + return 5; + }else if(height<9){ + return 7; + }else if(height <12){ + return 9; + }else if(height<16){ + return 12; + }else if(height<22){ //24点阵变量高23 + return 16; + }else if(height<30){ + return 24; + }else if(height>=30){ + return 32; + } + +} + +#ifdef EnableArabic +void TextEditOption::changeArabicPage(int page){ + int fontSize; + dialogFontSize->getValue(&fontSize); + switch (page) { + case 1: + ui->labFontFamily->setText("biyangarabic"); + break; +// case 2: +// ui->labFontFamily->setText("biyangarabicb"); +// break; + case 3: + ui->labFontFamily->setText("biyangarabicc"); + break; + default: + ui->labFontFamily->setText(dialogFontSize->getFontFamily()); + break; + } + //ui->labFontFamily->setText(dialogFontSize->getFontFamily()); + if(sysPara){ + sysPara->para.fontPixelSize = fontSize; + } + ui->labelFontSize->setText(QString::number(fontSize)); + setFontFormat(); + textEdit->setFocus(); + emit fontSizeChange(fontSize); +} + +void TextEditOption::swithchEnglisOrArabic(bool flag){ + // qDebug()<<"englistOrArabicFlag:"<getValue(&fontSize); + dialogSaveFile->setFileNameEnglishOrArabic(flag); + if(flag){ + // if(fontSize==7 || fontSize==9 || fontSize==12){ + if(fontSize==9 || fontSize==7){ + ui->labFontFamily->setText("biyangarabic"); + }else{ + //fontSize=9; + //ui->labFontFamily->setText("biyangarabic"); + } + }else{ + if(fontSize==7 || fontSize==9){ + ui->labFontFamily->setText("biyang"); + }else{ + ui->labFontFamily->setText("wenquanyi"); + } + } + if(sysPara){ + sysPara->para.fontPixelSize = fontSize; + } + ui->labelFontSize->setText(QString::number(fontSize)); + setFontFormat(); + textEdit->setFocus(); + emit fontSizeChange(fontSize); +} +#endif diff --git a/TextEditOption.h b/TextEditOption.h new file mode 100644 index 0000000..007bd0f --- /dev/null +++ b/TextEditOption.h @@ -0,0 +1,154 @@ +#ifndef TEXTEDITOPTION_H +#define TEXTEDITOPTION_H + +#include +#include +#include +#include +#include +#include "ParaSettingUI.h" +#include "MyFileDialog.h" +#include +#include +#include +#include "DialogFileOperation.h" +#include "DialogInsertVari.h" +#include "DialogFontSize.h" +#include "DialogLineSpace.h" +#include "PicWidget.h" +#include +#include "dlgQrCode.h" +#include "QBarCode.h" +#include "DialogSaveFile.h" +namespace Ui { +class TextEditOption; +} + +class TextEditOption : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + + explicit TextEditOption(QWidget *parent = 0); + ~TextEditOption(); + void updateSysParaToUI(); + void bindText(QTextEdit *textEdit); + + QLabel *getLabelFontSize(); + QPushButton *getPushButtonPreview(); + QCheckBox *getCheckBoxBold(); + void setFontFormat(); + void onbuttonOpenclicked(); + void bindPicWidget(PicWidget *picwidget); + void editItemModeDone(); + + void bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText); + int editMode; + bool sceneEditItem; + QString fileName; + void InsertBarCodeToEdit(QString barCodeName,int width,int height); + void InsertBarCodeToEdit(QString barCodeName,int width,int height,int EnSave); + void InsertQRCodeToEdit(QString barCodeName,int width,int height ); + void InsertQRCodeToEdit(QString barCodeName,int width,int height ,int EnSave); + void modbus_insert_pic(QString filename); + dlgQrCode *dlgQrcode; + QBarCode *barcode; + QLabel * getLabelFontFamily(); + int barVarHeight,barVarWidth; + QFont barVarFont; + QTextCharFormat fmt; + QTextEdit *textEdit; + + void bindSysPara(SysPara *sysPara); + DialogFontSize *dialogFontSize; + void updateFileVariWidth(QString &str); + int getSingleDigitWidth(int); + int getVariableHight(int); + void updateNormalVarWidth(QString&,const QString&); + void updateProduceDateVarWidth(QString &,const QString,int); + int getDateVarWidth(int height,int); +public slots: + void on_bottonSave_clicked(); + void currentCharFormatChanged(const QTextCharFormat &format); + void onMbSetLineAndChar(int line_space, int char_space); + void onOpenNewFile(); + void updateSysParaToZero(); + void SetHiddenValue(bool); + void onFileOpen(QString filePath,bool insertFlag); +private slots: + void onQRCodeClose(); + void onBarCodeClose(); // barDlgClose + void showDlg(); + + void enableButtonSave(); + /*--------------因为按钮被取消,功能消失-------------------------*/ + void onbottonInsertImgclicked(); + void onInsertImgFIle_select(); //选则文件后 + void onbottonInsertTextclicked(); + void onInsertTextFIle_select(); //选则文件后 + + void onOpenFIle_select(); //选则文件后 + /*-----------------------------------------------------------*/ + void on_buttonSaveAS_clicked(); + void onSaveAS_FIle_select(); //选则文件后 + + void onSave_File_reject(); + void on_bottonNew_pressed(); + + void on_buttonInsertVari_pressed(); + + void on_pushButtonFile_pressed(); + + void on_buttonSelectFont_pressed(); + + void on_checkBoxBold_released(); + void on_buttonLineSpace_clicked(); +#ifdef EnableArabic + void changeArabicPage(int); + void swithchEnglisOrArabic(bool); +#endif +Q_SIGNALS: + void fileNameChanged(QString); + void PicfileNameOpen(QString,bool); + void scenefileOpen(QString,bool); + void editItemDone(); + void fontSizeChange(int); + void switchBengalLanguage(bool); + +signals: +#ifdef EnableArabic + void fontSizeArabicSelect(bool); + void EnableSwitchArabicFlag(bool); +#endif +protected slots: + void onSaveASFile(QString filename, bool Flag); + void onEditItemMode(); +private: + Ui::TextEditOption *ui; + QStackedWidget *stackedWidgetOption; + QStackedWidget *stackedWidgetText; + +// QTextEdit *textEdit; + PicWidget *picwidget; + + void saveFile(); + MyFileDialog *fileDialog; + bool maybeSave(); + void openFIle(QString fileName); + void mergeFormatOnWordOrSelection(const QTextCharFormat &format); + + + bool newFileAppending; + void checkNewFileAppending(); + void onDialogLineSpaceAccepted(); + + DialogFileOperation *dialogFileOperation; + DialogInsertVari *dialogInsertVari; + DialogLineSpace *dialogLineSpace; +#ifdef MYSAVEFILEDLG + DialogSaveFile *dialogSaveFile; +#endif +}; + +#endif // TEXTEDITOPTION_H diff --git a/TextEditOption_backup.cpp b/TextEditOption_backup.cpp new file mode 100644 index 0000000..8d66d70 --- /dev/null +++ b/TextEditOption_backup.cpp @@ -0,0 +1,1366 @@ +#include "TextEditOption.h" +#include "ui_texteditoption.h" +#include "PicWidget.h" +#include "scene/picscene.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include "Public.h" +#include "myinclude.h" + +#include "QBarCode.h" +#include "dlgQrCode.h" +#include +#include + +TextEditOption::TextEditOption(QWidget *parent) : + QWidget(parent), + ui(new Ui::TextEditOption) +{ + ui->setupUi(this); + fileDialog = 0; + fileName = ""; + textEdit = 0; + newFileAppending = false; + dialogFileOperation = new DialogFileOperation(0); + dialogInsertVari = new DialogInsertVari(0); + dialogFontSize = new DialogFontSize(0); + dialogLineSpace = new DialogLineSpace(0); + editMode=0; +#ifdef _2DCODE_ + dlgQrcode = new dlgQrCode(); + barcode= new QBarCode(); + connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); + connect(dlgQrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); +#endif + //textEdit->setFontFamily(Public::getFontFamily(12)); + //textEdit->clear(); +#ifdef MYSAVEFILEDLG + dialogSaveFile =new DialogSaveFile(0); +#endif + + sceneEditItem = false; +} + +TextEditOption::~TextEditOption() +{ + delete ui; + if(fileDialog) + delete fileDialog; + if(dialogInsertVari) + delete dialogInsertVari; + if(dialogFontSize) + delete dialogFontSize; + if(dialogLineSpace) + delete dialogLineSpace; +#if _2DCODE_ + if(dlgQrcode) + delete dlgQrcode; +#endif + //free(dlgQrCode); +#ifdef MYSAVEFILEDLG + if(dialogSaveFile) delete dialogSaveFile; + if(dialogFileOperation) delete dialogFileOperation; +#endif +} + +void TextEditOption::enableButtonSave(){ + if(!ui->bottonSave->isEnabled()) + ui->bottonSave->setEnabled(true); +} + +void TextEditOption::bindText(QTextEdit *textEdit){ + this->textEdit = textEdit; + + connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); + + ui->bottonSave->setEnabled(false); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); +#ifdef MYSAVEFILEDLG + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); +#endif + + + +} +void TextEditOption::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; +#ifdef _2DCODE_ + if(sysPara) + { + barcode->bindSysPara(sysPara); + //qDebug()<<"TextEditOption bind by TextEdit."; + } +#endif + //else qDebug()<<"TextEditOption bind by TextEdit failure"; +} + +void TextEditOption::bindPicWidget(PicWidget *picwidget){ + this->picwidget = picwidget;// stackedWidgetOption + +// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); +// ui->bottonSave->setEnabled(false); +// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + + +} +void TextEditOption::bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText){ + this->stackedWidgetOption = stackedWidgetOption;// stackedWidgetOption + this->stackedWidgetText = stackedWidgetText; +// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); +// ui->bottonSave->setEnabled(false); +// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + + +} +void TextEditOption::showDlg(){ + +if(editMode==PICFILE){ + + disconnect(textEdit,SIGNAL(textChanged()),0,0); + + connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); + ui->bottonSave->setEnabled(false); + disconnect(dialogFileOperation,SIGNAL(openFile(QString,bool)),0,0); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + on_pushButtonFile_pressed(); + + // dialogFileOperation->show(); +} +} + +/* + * 和DialogFileOperation对接 + * */ +void TextEditOption::onFileOpen(QString filePath,bool insertFlag) +{ + if(editMode==PICFILE){ + if(filePath.endsWith(".png") )//||filePath.endsWith(".bmp") ) + { + if(insertFlag){ + emit PicfileNameOpen(filePath,insertFlag); + } + else { + // + emit PicfileNameOpen(filePath,0); + } + return ; + } + else{ + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(1); + stackedWidgetText->setCurrentIndex(1); + } + } + } + else if(editMode==TXTFILE) { + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") + || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) + { + QString html = ""; + QTextCharFormat fmt = textEdit->currentCharFormat (); + if(insertFlag){ + textEdit->insertHtml (html); + } + else { + textEdit->setHtml (html); + textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 + } + textEdit->mergeCurrentCharFormat(fmt); + } + else if(filePath.endsWith(".xml")) + { + memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); + return; + } + else { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + } + else { + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + // if (Qt::mightBeRichText(str)) { + // textEdit->setHtml(str); + // } else { + // str = QString::fromLocal8Bit(data); + // textEdit->setPlainText(str); + // } + // QTextStream in (&file);in.readAll() + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + } + + if(insertFlag){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + textEdit->insertHtml(str); + } + } + else + { + //updateFileVariWidth(str); + textEdit->setHtml(str); + fileName = filePath; + + if(sysPara){ + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + textEdit->moveCursor(QTextCursor::EndOfLine); + onDialogLineSpaceAccepted(); + } + } +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); + } + if(insertFlag) //在打开文件的时候不设置焦点 + textEdit->setFocus(); + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(0); + stackedWidgetText->setCurrentIndex(0); + // textEdit->setFocus(); + } + } + else if(editMode==SCENE) { + //开机会调用到此,然后打开文件 + if(filePath.endsWith(".xml")) + { + memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); + emit scenefileOpen(filePath,false);//sceneeditoption 接收这个信号然后打开文件 + emit fileNameChanged(QFileInfo(filePath).fileName()); + } + else + { + if(sceneEditItem == true) + { + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") + || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) + { + QString html = ""; + QTextCharFormat fmt = textEdit->currentCharFormat (); + if(insertFlag){ + textEdit->insertHtml (html); + } + else { + textEdit->setHtml(html); + textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 + } + textEdit->mergeCurrentCharFormat(fmt); + } + else { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + } + else { + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + } + + if(insertFlag){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + textEdit->insertHtml(str); + } + } + else + { + textEdit->setHtml(str); + fileName = filePath; + + if(sysPara){ + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"onFileOpen"<sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + textEdit->moveCursor(QTextCursor::EndOfLine); + } + } +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); + } + } + /* + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(0); + stackedWidgetText->setCurrentIndex(0); + } + */ + } + } +} + + +void TextEditOption::onbottonInsertImgclicked() +{ + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertImgFIle_select())); + fileDialog->showFileDialog(tr("插入图片"),QString("/"),QString("img (*.bmp *.jpg *.png *.gif)")); +} + +void TextEditOption::onInsertImgFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + + for(int i = 0;i < files.size(); i++){ + QString html = ""; + textEdit->insertHtml (html); + + } +} + + +void TextEditOption::onbottonInsertTextclicked() +{ + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertTextFIle_select())); + fileDialog->showFileDialog(tr("插入文本"),QString(DOC_ROOT_DIR),QString("text (*.html *.txt)")); +} + +void TextEditOption::onInsertTextFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + QFile file(files.value(i)); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + files.value(i)); + } + else{ + QTextStream in (&file); + textEdit->insertHtml(in.readAll()); + } +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); + } +} + + + +void TextEditOption::onbuttonOpenclicked() +{ + if(!textEdit){ + QMessageBox::critical(this,tr("错误"),tr("TextEditOption 构造函数参数textEdit 不应当为空")); // + } + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onOpenFIle_select())); + fileDialog->DontUseNativeDialog; + + fileDialog->showFileDialog(tr("打开文件"),QString(DOC_ROOT_DIR),QString("Text files (*.txt *.html)")); +} + + +void TextEditOption::openFIle(QString openFileName){ + QFile file(openFileName); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + openFileName); + } + else{ + QTextStream in (&file); + textEdit->setText(in.readAll()); + fileName = openFileName; + if(sysPara){ + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"openFIle"<sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + } + file.close(); +} + + +void TextEditOption::onOpenFIle_select(){ + + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + openFIle(files.value(i)); + } +} + + + +void TextEditOption::on_buttonSaveAS_clicked() +{ +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); +#else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + fileDialog->showFileDialog(tr("另存为"),QString(DOC_ROOT_DIR),QString("files (*.html *.txt)")); +#endif + +} + + +void TextEditOption::saveFile(){ + if(fileName.endsWith(".txt")){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("以.txt保存将丢失所有格式,你是否愿意保存为.html格式?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + fileName += ".html"; + } + } + QString html = textEdit->toHtml(); + QString pattern = "setHtml(html.replace(UDISK_DOC_ROOT_DIR,DOC_ROOT_DIR)); + } + QTextDocumentWriter writer(fileName); + + //writer.setFormat("html"); + bool success = writer.write(textEdit->document()); + if (success){ + textEdit->document()->setModified(false); + ui->bottonSave->setEnabled(false); + if(sysPara){ + sysPara->sysFile =fileName; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); + } + } + else { + QMessageBox::warning(this,tr("警告"),tr("无法保存文件") + fileName); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + checkNewFileAppending(); +} + + +void TextEditOption::onSaveAS_FIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + fileName = files[i]; + + if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) + fileName += ".html"; + saveFile(); + } +} + + +void TextEditOption::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class + fileName = filename; + if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) + fileName += ".html"; + + saveFile(); + //emit fileNameChanged(QFileInfo(fileName).fileName()); + //qDebug()<clear(); + fileName = ""; + emit fileNameChanged(QFileInfo(fileName).fileName()); + setFontFormat(); + onDialogLineSpaceAccepted(); + } + newFileAppending = false; +} + +void TextEditOption::onSave_File_reject(){ + checkNewFileAppending(); +} + +void TextEditOption::on_bottonSave_clicked() +{ + if(sysPara->para.EditMode==SCENE){ + //在场景模式下,这个是确定按钮,切换到场景模式 + if(sceneEditItem) + { + editItemModeDone(); + emit editItemDone(); + } + + } + else + { + if(fileName.isEmpty()){ + #ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); + #else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + connect(fileDialog,SIGNAL(rejected()),this,SLOT(onSave_File_reject())); + fileDialog->showFileDialog(tr("保存..."),QString(DOC_ROOT_DIR),QString("HTML files (*.html)")); + #endif + } + else { + saveFile(); + newFileAppending = false; + } + } +} + + + +bool TextEditOption::maybeSave(){ + if (!textEdit->document()->isModified()) + return true; + if (fileName.startsWith(QLatin1String(":/"))) + return true; + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("文档已经改变,是否保存?")); + QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == saveButton) { + newFileAppending = true; + on_bottonSave_clicked(); + return false; + } else if (msgBox.clickedButton() == cancleSaveButton) { + return true; + } + else + return false; + + return true; +} +void TextEditOption::on_bottonNew_pressed() +{ + if (maybeSave()) { + //setFontFormat(); + textEdit->clear(); + fileName = ""; + QFile file(fileName); + emit fileNameChanged(QFileInfo(fileName).fileName()); + } +#ifdef VARCOLOR + textEdit->insertHtml(QString("  ")); +#endif + +} + +void TextEditOption::onOpenNewFile() +{ + //if (maybeSave()) + { + //setFontFormat(); + textEdit->clear(); + fileName = ""; + QFile file(fileName); + emit fileNameChanged(QFileInfo(fileName).fileName()); + } +#ifdef VARCOLOR + textEdit->insertHtml(QString("  ")); +#endif + +} + +void TextEditOption::on_buttonInsertVari_pressed() +{ QString s,fontname=""; + if(sysPara) + { + + //s.sprintf("%s(%02dX%02d)",sysPara->para.qrOption.text,sysPara->para.qrOption.width,sysPara->para.qrOption.height); + s= sysPara->para.qrOption.text; + if(s.length()>120)s="string to long."; + dialogInsertVari->setValue(""); + } + + if(dialogInsertVari->exec() == QDialog::Accepted && sysPara){ +// qDebug()<< "dialogInsertVari::Accepted"; + int pixelSize = ui->labelFontSize->text().toInt(); + QFont font; + fontname=ui->labFontFamily->text(); + //qDebug()<< "fontname:"<checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); + + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + + //qDebug()<para.textEditCharSpace<para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + width = (fontMetrics.width("0123456789.m "))/13; + } +// if(sysPara->para.printNumPoint) +// { +// width = (fontMetrics.width("0123456789."))/11 ; +// } +// else +// { +// width = (fontMetrics.width("0123456789"))/10 ; +// } + + + int height = fontMetrics.ascent()+ fontMetrics.descent(); + int digitalNum; + int varType; + + // 调整变量占位区的大小 + //qDebug()<<"leading:"<para.ExpirySplitMode; + dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); + + fmt = textEdit->currentCharFormat (); + + if((varType<9 || varType==13 || varType==14 || varType == 15) // 普通变量;varType=13 is CNT3 var + // ||(varType>=20 && varType<29) // 横左变量 + // ||(varType>=40 && varType<49) // 右横变量 + ) + { + int varType1= varType; + + if(fontname.contains("SerifL") ||fontname.contains("serifl") ) + varType1= 20+varType; + else if(fontname.contains("SerifR") ||fontname.contains("serifr") ) + varType1= 20+varType; + else if(fontname.contains("bangla") ) + varType1= 30+varType; + else if(fontname.contains("biyangF") ) + varType1= 50+varType; + else if(fontname.contains("Roman") ) + varType1= 60+varType; + // varType1= 40+varType; // 变量右横时取 40,左横时取 20 + // qDebug()<<"pixelSize:"<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) + .arg(height+1).arg(width*digitalNum).arg(varType1)); //插入索引后 + +// qDebug()<<"vari heigh:"<mergeCurrentCharFormat(fmt); + } // 普通变量 VarType<=8 + else if(varType >=9 && varType <=11) + { // +#ifdef _2DCODE_ + s= sysPara->para.qrOption.text; + dlgQrcode->move( (this->width() - dlgQrcode->width())/2 ,10); + if(varType==9){ + dlgQrcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=0; + sysPara->para.qrOption.cntNum=digitalNum; //digitalNum + dlgQrcode->setWindowTitle(tr("二维码变量设置")); + dlgQrcode->SetOption(&sysPara->para.qrOption); + dlgQrcode->setCntCheckBoxHide(0); + dlgQrcode->show(); + } + + else if(varType==10){ + dlgQrcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=1; + sysPara->para.qrOption.cntNum=digitalNum; + dlgQrcode->setCntCheckBoxHide(0); + dlgQrcode->setWindowTitle("二维码变量设置"); + dlgQrcode->SetOption(&sysPara->para.qrOption); + dlgQrcode->show(); + } + + else if(varType==11){ + barcode->move(0,0); + barcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=1; + sysPara->para.qrOption.cntNum=digitalNum; + barVarFont = font; + barVarHeight=height; + barVarWidth =width; + //barcode->setCntCheckBoxHide(0); + barcode->setWindowTitle("条形码变量设置"); + barcode->SetOption(&sysPara->para.bcOption); + barcode->show(); + + } + textEdit->mergeCurrentCharFormat(fmt); +#endif + } + else if(varType ==RANDOMNUM){ //12 + //digitalNum=13; + //qDebug()<<"digitalNum"<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) + .arg(height+1).arg(width*digitalNum)); //插入索引后 + + textEdit->mergeCurrentCharFormat(fmt); + } + else if(varType ==EXPIRYDATE){ //80 :/80/image/expiryDate8.bmp qrc:/80/image/expiryDate875.bmp +// QImage img; +// img.load("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/digitalWidth8.bmp"); +// img.setPixel(0,4,0xffff0Cfc); +// img.setPixel(0,5,0xffff0Cfc); +// img.save("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/curDate8.bmp"); + // 0xff00fc + int varType1 = varType; + if(fontname.contains("bangla") ) + { + varType1= 10+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 20+varType; + } + else if(fontname.contains("Roman") ) + { + varType1= 30+varType; + } + + sysPara->print.ExpiryVar.splitMode=splitMode; + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + //dateFormat.insert(10,"x"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + //qDebug()<<"DateTime "<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(175):1) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); + textEdit->mergeCurrentCharFormat(fmt); + }else + { + if(splitMode == 3 || splitMode ==7 ) + { + height = fontMetrics.ascent(); + } + // textEdit->insertHtml(QString("") + // .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + // .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 + //sysPara->print.ExpiryVar.bold = ui->checkBoxBold->isChecked(); + textEdit->insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); + textEdit->mergeCurrentCharFormat(fmt); + } + } + else if(varType ==CURDATE ){ //81 :/80/image/expiryDate8.bmp qrc:/80/image/curDate8.bmp +#if 0 + QImage img; + img.load("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/digitalWidth8.bmp"); + img.setPixel(0,4,0xffff0Cfc); + img.setPixel(0,5,0xffff0Cfc); + img.save("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/81/image/curDate8.bmp"); +#endif + int varType1 = varType; + if(fontname.contains("bangla") ) + { + varType1= 10+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 20+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 30+varType; + } + + // 0xff00fc + //qDebug()<<"CurDateVar height"<print.CurDateVar.splitMode = splitMode; + font.setLetterSpacing(QFont::AbsoluteSpacing, sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + //dateFormat.insert(10,"x"); +// dateFormat.insert(10,"A dd MM yy"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + int dateTimeWidth = fontMetrics.width(DateTime) ; + qDebug()<<"insert splitMode="<insertHtml(QString("") +// .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) +// .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 +// sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + textEdit->insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height+1).arg(dateTimeWidth+2)); //插入索引后 + sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + //qDebug()<<"sysPara->print.CurDateVar.bold:"<print.CurDateVar.bold; + textEdit->mergeCurrentCharFormat(fmt); + } +#endif + if(DateTime == "x") + { + qDebug()<<" x handle"; + textEdit->insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):1) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + }else + { + if(splitMode == 3 || splitMode ==7 ) + { + height = fontMetrics.ascent();//fontMetrics.ascent()+ fontMetrics.descent(); + } +// textEdit->insertHtml(QString("") +// .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) +// .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 +// sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + qDebug()<<"height:"<insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 + //sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); + //qDebug()<<"sysPara->print.CurDateVar.bold:"<print.CurDateVar.bold; + textEdit->mergeCurrentCharFormat(fmt); + } + } + else if(varType == CURCLASS) { //82 :/82/image/curDate1.bmp + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + int dateTimeWidth = fontMetrics.width("A") ; + int pixBmpSize = 1; + if (ui->checkBoxBold->checkState() && (pixelSize<=16)) { + pixBmpSize = 875; + } + else { + if(pixelSize >= 9) { + pixBmpSize = 91; + } + else { + pixBmpSize = 1; + } + } + qDebug()<<"height:"<insertHtml(QString("") + .arg(varType).arg(pixBmpSize) + .arg(height+1).arg(dateTimeWidth+2)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + } + textEdit->setFocus(); + } +} + + +void TextEditOption::mergeFormatOnWordOrSelection(const QTextCharFormat &format) +{ + + QTextCursor cursor = textEdit->textCursor(); + //if (!cursor.hasSelection()) + // cursor.select(QTextCursor::WordUnderCursor); + //cursor.mergeCharFormat(format); + //textEdit->setTextCursor(cursor); + //qDebug()<<"mergeFormatOnWordOrSelection"<mergeCurrentCharFormat(format); +} + +void TextEditOption::updateSysParaToUI() //重载 +{ + if(sysPara){ + /*务必先设置行距*/ + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); + /*将文件打开*/ + QString file = QString(sysPara->para.lastOpenedFileName); + if(QFile::exists(file)){ + sysPara->sysFile =file; + onFileOpen(file,false); + } + dialogFontSize->setValue(sysPara->para.fontPixelSize); + } +} + +void TextEditOption::onMbSetLineAndChar(int line_space, int char_space) +{ + sysPara->para.textEditLineSpace = line_space; + sysPara->para.textEditCharSpace = char_space; + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); +} + +QLabel *TextEditOption::getLabelFontSize(){ + return ui->labelFontSize; +} + +QLabel *TextEditOption::getLabelFontFamily(){ + return ui->labFontFamily; +} + +void TextEditOption::setFontFormat(){ + if(sysPara){ + + qreal pixelSize = ui->labelFontSize->text().toFloat(); + if(pixelSize < Public::getMinFontPixelSize()) + pixelSize = sysPara->para.fontPixelSize; + + if(pixelSize < Public::getMinFontPixelSize()){ + pixelSize = Public::getMinFontPixelSize(); + } + + if (pixelSize >= 0) { + QTextCharFormat fmt; + int DPI = textEdit->logicalDpiX(); + DPI = DPI?DPI:1; + qreal pointSize = pixelSize*72/DPI; //Pixel = DPI * Point / 72 + fmt.setFontPointSize(pointSize); +#ifdef VNLGXX + QString fontFamily = dialogFontSize->getFontFamily(); + +#else + QString fontFamily = // Public::getFontFamily((int)pixelSize); + ui->labFontFamily->text(); + ui->labFontFamily->setText(fontFamily); +#endif + fmt.setFontFamily(fontFamily); + fmt.setFontWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16)? QFont::Bold:QFont::Normal); + //fmt.setUnderlineStyle(); + //fmt.setVerticalAlignment(QTextCharFormat::AlignBottom); + //QfontMetrics.bottom + //fmt.setUnderlineStyle(QTextCharFormat::NoUnderline); + //qDebug() << "logicalDpiX:" << textEdit->logicalDpiX() << "logicalDpiY:" << textEdit->logicalDpiY(); + //qDebug() << "physicalDpiX:" << textEdit->physicalDpiX() << "physicalDpiX:" << textEdit->physicalDpiX(); + mergeFormatOnWordOrSelection(fmt); +// QFont font = textEdit->document()->defaultFont(); +// font.setPointSizeF(pointSize); +// textEdit->document()->setDefaultFont(font); + + //qDebug()<<"Font:"<para.fontPixelSize = font.pointSize(); + dialogFontSize->setValue(sysPara->para.fontPixelSize); + ui->checkBoxBold->setChecked(font.bold()); +} + +QPushButton * TextEditOption::getPushButtonPreview(){ + return ui->pushButtonPreview; +} +QCheckBox *TextEditOption::getCheckBoxBold(){ + return ui->checkBoxBold; +} + +void TextEditOption::on_pushButtonFile_pressed() +{ + if(sceneEditItem) + { + dialogFileOperation->refreshListView(TXTFILE); + dialogFileOperation->exec(); + } + else + { + dialogFileOperation->refreshListView(editMode); + dialogFileOperation->exec(); + } +} + + +void TextEditOption::on_buttonSelectFont_pressed() +{ + if(dialogFontSize->exec() == QDialog::Accepted){ + int fontSize; + dialogFontSize->getValue(&fontSize); + ui->labFontFamily->setText(dialogFontSize->getFontFamily()); + if(sysPara){ + sysPara->para.fontPixelSize = fontSize; + } + ui->labelFontSize->setText(QString::number(fontSize)); + setFontFormat(); + textEdit->setFocus(); + emit fontSizeChange(fontSize); + bool flagBangal=false; + if(dialogFontSize->getFontFamily() == "bangla") + flagBangal = true; + emit switchBengalLanguage(flagBangal); + } + +} + +void TextEditOption::on_checkBoxBold_released() +{ + setFontFormat(); + textEdit->setFocus(); +} + + +void TextEditOption::onDialogLineSpaceAccepted(){ + dialogLineSpace->getValue(&sysPara->para.textEditLineSpace,&sysPara->para.textEditCharSpace); +// QString str = textEdit->toHtml(); +// updateFileVariWidth(str); +// textEdit->setHtml(str); + for(QTextBlock textBlock = textEdit->document()->begin();textBlock != textEdit->document()->end(); textBlock = textBlock.next()){ + QTextBlockFormat textBlockFormat = textBlock.blockFormat(); + textBlockFormat.setAlignment(Qt::AlignBottom); + textBlockFormat.setTopMargin(-1); + textBlockFormat.setBottomMargin(sysPara->para.textEditLineSpace-1); + QTextCursor textCursor = textEdit->textCursor(); + textCursor.setPosition(textBlock.position()); + textCursor.setBlockFormat(textBlockFormat); + textEdit->setTextCursor(textCursor); + } + +// QString str = textEdit->toHtml(); +// updateFileVariWidth(str); +// textEdit->setHtml(str); + + QFont font = textEdit->font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + textEdit->setFont(font); +} +void TextEditOption::on_buttonLineSpace_clicked() +{ + if(dialogLineSpace->exec() == QDialog::Accepted){ + onDialogLineSpaceAccepted(); + sysPara->saveParaToFile(); + textEdit->setFocus(); + sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; + } +} + +void TextEditOption::InsertQRCodeToEdit(QString barCodeName,int width,int height ,int enSave){ +#ifdef _2DCODE_ + textEdit->setText(""); + InsertQRCodeToEdit(barCodeName, width, height); + fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; + if(enSave) saveFile(); +#endif +} +void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ,int enSave){ +#ifdef _2DCODE_ + textEdit->setText(""); + InsertBarCodeToEdit(barCodeName, width, height); + fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; + if(enSave) saveFile(); +#endif +} +void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ) +{ +#ifdef _2DCODE_ + //dialogInsertVari->getValue(&varType,&digitalNum); + QTextCharFormat fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(barCodeName) + .arg(height).arg(width)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + //textEdit->setFocus(); + //qDebug()<<"TEOption:"<getValue(&varType,&digitalNum); + QTextCharFormat fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(barCodeName)//QFileInfo(barCodeName). + .arg(width).arg(height)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + //textEdit->setFocus(); + //qDebug()<<"TEOption:"<flagInsert ) { + dlgQrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + dlgQrcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + + } + else { + + if(sysPara->para.qrOption.type==0){ + textEdit->insertHtml(QString("") + .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->para.qrOption.type==1){ + textEdit->insertHtml(QString("") + .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->para.qrOption.type==2){ + textEdit->insertHtml(QString("") + .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + } + } + sysPara->saveParaToFile(); +#endif +} +void TextEditOption::onBarCodeClose(){ +#ifdef _2DCODE_ + bcPara_t bcoption; + if(barcode->flagInsert ) { + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + //qDebug()<<"onBarCodeClose"<para.bcOption.barType<para.bcOption.height; + barcode->GetOption2((bcPara_t*)&bcoption); + //qDebug()<<"onBarCodeClose"<para.bcOption.barType = bcoption.type; + barcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + + } + else + { + fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height)); + + //插入索引后 + //qDebug()<") + // .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height); + + int varType1= 7;//CNT1:7, CNT2:8 + int digitalNum; + if(sysPara->para.bcOption.var1En){ + digitalNum=sysPara->para.bcOption.var1Num; + textEdit->insertHtml(QString("%1%2").arg(sysPara->para.bcOption.TxtModule).arg(sysPara->para.bcOption.TxtLine)); + textEdit->insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) + .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 + } + if(sysPara->para.bcOption.var2En) + { + digitalNum=sysPara->para.bcOption.var2Num; + textEdit->insertHtml(QString("") + .arg(varType1+1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) + .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 + } + + textEdit->mergeCurrentCharFormat(fmt); + } + } + sysPara->saveParaToFile(); +#endif +} + +void TextEditOption::onEditItemMode() +{ + ui->bottonNew->setDisabled(true); + ui->buttonSaveAS->setDisabled(true); + ui->pushButtonPreview->setDisabled(true); + ui->bottonSave->setText(tr("完成")); + sceneEditItem = true; +} +void TextEditOption::editItemModeDone() +{ + sceneEditItem = false; + ui->bottonNew->setDisabled(false); + ui->buttonSaveAS->setDisabled(false); + ui->pushButtonPreview->setDisabled(false); + ui->bottonSave->setText(tr("保存")); +} + +void TextEditOption::modbus_insert_pic(QString filename) +{ +// on_pushButtonFile_pressed(); + dialogFileOperation->modbus_openfile(filename); + +} + +void TextEditOption::updateSysParaToZero() //重载 +{ + if(sysPara){ + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); + } +} + +void TextEditOption::SetHiddenValue(bool select) +{ + dialogInsertVari->EnableHiddenValue(select); +} + +void TextEditOption::updateFileVariWidth(QString &str) + { + QString pattern = ""; + QRegExp rx(pattern); + int from = 0; + // 正常变量 + while(from < str.size() && from != -1) { + from = str.indexOf(rx,from);//返回匹配到到起始地址 + bool ok; + if(from != -1){//找到匹配的 + int width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); + int digitalNum = rx.cap(3).toInt(&ok);//第二个匹配,数字到个数 + if(digitalNum>100){ //加粗 + digitalNum/=100; + ui->checkBoxBold->setChecked(true); + } + // 获取匹配的标签 + QString matchedTag = rx.cap(0); + // 构建新的标签,替换width属性值 + QString newTag = matchedTag; + int singlewidth = getSingleDigitWidth(); + int newWidth= (singlewidth + sysPara->para.textEditCharSpace) * digitalNum; + if(newWidth == width){ + return; + } + newTag.replace(QString("width=\"%1\"").arg(rx.cap(4)), QString("width=\"%1\"").arg(newWidth)); + // 替换原始文本中的标签 + str.replace(from, rx.matchedLength(), newTag); + from ++; + from+=newTag.length(); + } + } + } + +int TextEditOption::getSingleDigitWidth() +{ + int pixelSize = ui->labelFontSize->text().toInt(); + QFont font; + QString fontname=ui->labFontFamily->text(); + font.setFamily( + fontname // 20160812 + ); + font.setPixelSize(pixelSize); + font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); + font.setLetterSpacing(QFont::AbsoluteSpacing,0); + QFontMetrics fontMetrics(font); + int width = (fontMetrics.width("0")); + // int width = (fontMetrics.width("0123456789"))/10; + // if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + // width = (fontMetrics.width("0123456789.m "))/13; + // } + return width; +} diff --git a/Tftp/filetranseceiver.cpp b/Tftp/filetranseceiver.cpp new file mode 100644 index 0000000..507da78 --- /dev/null +++ b/Tftp/filetranseceiver.cpp @@ -0,0 +1,437 @@ +#include "filetranseceiver.h" +#include +#include +#include +#include +#include +#include +//#include "LogInfo.h" +#include + +FileTranseceiver::FileTranseceiver(uint16_t hostshort) +{ +// struct sockaddr_in server_addr; +// bzero(&server_addr, sizeof(server_addr)); // 置字节字符串前n个字节为0,包括'\0' +// server_addr.sin_family = AF_INET; +// server_addr.sin_addr.s_addr = htons(INADDR_ANY); // 转小端,INADDR_ANY就是指定地址为0.0.0.0的地址 +// server_addr.sin_port = htons(5000); + serverThead = NULL; + sockfd = socket(PF_INET, SOCK_STREAM, 0); + + port=hostshort; + struct sockaddr_in seraddr; + seraddr.sin_family = AF_INET; + seraddr.sin_port = htons(hostshort); + seraddr.sin_addr.s_addr = htons(INADDR_ANY); + int tmp = 1; + setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &tmp, sizeof(int)); + if(bind(sockfd,(struct sockaddr *)&seraddr,sizeof(seraddr)) == -1) + { + qDebug() << "tftp server bind error"; + return; + } + + if(listen(sockfd,5) == -1) + { + qDebug() << "listen error"; + return; + } + + serverThead = new QThread(); + moveToThread(serverThead); + QObject::connect(serverThead, SIGNAL(started()), this, SLOT(connectListen())); + //connect(&m_thread, SIGNAL(finished()), this, SLOT(deleteLater())); +// serverThead->start(); +// qDebug()<<"tftp server on..."; + if(hostshort==5002) + { + refresh_timer = new QTimer(); + connect(refresh_timer, SIGNAL(timeout()), this, SLOT(refreshtimerHandler()),Qt::DirectConnection); + } +} +FileTranseceiver::~FileTranseceiver(void) +{ + if(serverThead) { + disconnect(serverThead, SIGNAL(started()), this, SLOT(connectListen())); + if (serverThead->isRunning()) { + serverThead->quit(); + serverThead->wait(); + } + } + if(connfd) + close(connfd); + if(sockfd) + close(sockfd); +} +void FileTranseceiver::start() +{ + if(serverThead) + { + serverThead->start(); + } + qDebug()<<"tftp server on..."; +} + +void FileTranseceiver::connectListen() +{ + switch(port) + { + case 5001: + connectListen5001(); + break; + case 5002: + connectListen5002(); + break; + } +} + +void FileTranseceiver::connectListen5001() +{ + + struct msg info; + struct sockaddr_in cliaddr; + int len = sizeof(cliaddr); + pid_t pid; + int n; + QString fileName; + do + { + connfd = accept(sockfd,(struct sockaddr *)&cliaddr,(socklen_t *)&len); + if(connfd == -1) + { + qDebug() << "accept"; + continue; + } + + { + //close(sockfd); + while(1) + { + n = recv(connfd,&info,sizeof(info),0); + if(n == -1) + { + qDebug() << "recv"; + //exit(EXIT_FAILURE); + break; + } + if(n == 0) + { + qDebug() << "客户端退出"; + break; + } + switch(info.type) + { + case DOWN: + ftp_download(connfd,info); + break; + case UP: + upload_ftp(connfd,info); + fileName = QString(info.fname); + qDebug()<<"emit fileRecieved(fileName)"; + emit fileRecieved(fileName); + break; + case UPGRADE: + upload_and_upgrade(connfd,info); + QFile::remove("/home/plg/QtUI"); + if(!QFile::copy("/tmp/QtUI", "/home/plg/QtUI")) + { + QMessageBox::about(0, tr("错误"), tr("更新失败!")); + break; + } + QMessageBox::information(0, tr("提示"), tr("软件更新成功,重启后生效!")); + break; + default: + break; + } + } + close(connfd); + } + } + while(1); +} + +//将某文件中的内容传给客户端 +int FileTranseceiver::ftp_download(int connfd,struct msg info) +{ + FILE *fp; + + char name[100]; + memset(name,0,100); + sprintf(name, DOC_DIR"/%s",info.fname); + fp = fopen(name,"r"); + if(fp == NULL) + { + info.flag = FAIL; + send(connfd,&info,sizeof(info),0); + return -1; + } + else + { + info.flag = SUCCESS; + send(connfd,&info,sizeof(info),0); + } + + unsigned int len; + while(1) + { + len = fread(info.buf,1,sizeof(info.buf),fp); + send(connfd,info.buf,len,0); + + if(len < sizeof(info.buf) && feof(fp) != 0) + break; + } + + fclose(fp); + return 0; +} + +//接收客户端上传的文件内容 +int FileTranseceiver::upload_ftp(int connfd,struct msg info) +{ + FILE *fp; + char name[100]; + sprintf(name, "/tmp/%s",info.fname); + fp = fopen(name,"w"); + if(fp == NULL) + { + info.flag = FAIL; + send(connfd,&info,sizeof(info),0); + return -1; + } + else + { + info.flag = SUCCESS; + send(connfd,&info,sizeof(info),0); + } + unsigned int len; + while(1) + { + len = recv(connfd,info.buf,sizeof(info.buf),0); + fwrite(info.buf,1,len,fp); + if(len < sizeof(info.buf)) + break; + } + fclose(fp); + return 0; +} + +int FileTranseceiver::upload_and_upgrade(int connfd,struct msg info) +{ + FILE *fp; + char name[100]; + sprintf(name, "/tmp/%s",info.fname); + fp = fopen(name,"wb"); + unsigned int len; + while(1) + { + len = recv(connfd,info.buf,sizeof(info.buf),0); + if(0start(5000); + { + while(1) + { + if(flagOfSockfdClosed) + break; + QByteArray a=read(7); + showData("read-a=",a); + if(!a.startsWith(QByteArray::fromHex("5aa5"))) + { + qDebug() << "无效数据-Header"; + break; + } + + int InstructionCode=a.mid(2,1).toHex().toInt(0,16); + int DataLenght=a.mid(3,4).toHex().toInt(0,16); + + if(DataLenght >60) + { + qDebug() << "无效数据-DataLenght"; + break; + } + + QByteArray b=read(DataLenght+3); + showData("read-b=",b); + if(!b.endsWith(QByteArray::fromHex("a55a"))) + { + qDebug() << "无效数据-Ender"; + break; + } + if(CheckSumIn(a+b)) + { + switch (InstructionCode) { + case 0x01:InstructionCode1(a+b); break;//启动指令 + case 0x02:InstructionCode2(a+b); break;//停止指令 + case 0x03:InstructionCode3(b.left(DataLenght));break;//喷码指令 + case 0x04:InstructionCode4(a+b);break;//获取缓存指令 + //case 0x05:break;//喷码完成 + //case 0x06:break;// + case 0x07:InstructionCode7(a+b);break;//清空缓存 + case 0x08:InstructionCode8(a+b);break;//丢弃废膜指令 + default: + write(InstructionCode,QByteArray::fromHex("00")); + break; + } + } + else { + write(InstructionCode,QByteArray::fromHex("00")); + qDebug() << "无效数据-Checksum"; + break; + } + } + if(!flagOfSockfdClosed) + close(connfd); + } + refresh_timer->stop(); + } + while(1); +} +bool FileTranseceiver::CheckSumIn( QByteArray a) +{ + UCHAR add8=CheckSumIn((UCHAR*)a.data(),a.length()-3); +// qDebug()<<"CheckSumIn: "<stop(); + flagOfSockfdClosed = true; + } + mutex.unlock(); +} + +void FileTranseceiver::InstructionCode1(QByteArray d){ + emit printer_operate_0x01(); +} +void FileTranseceiver::InstructionCode2(QByteArray d){ + emit printer_operate_0x02(); + write(2,QByteArray::fromHex("01")); +} +void FileTranseceiver::InstructionCode3(QByteArray d) +{ + emit printer_operate_0x03(QString::fromUtf8(d)); + write(3,QByteArray::fromHex("01")); +} +void FileTranseceiver::InstructionCode4(QByteArray d){ + emit printer_operate_0x04(); +} +void FileTranseceiver::InstructionCode5(QByteArray d){ + write(5,QByteArray::fromHex("01")); +} +void FileTranseceiver::InstructionCode6(QByteArray d){} + +void FileTranseceiver::InstructionCode7(QByteArray d){ + emit clear_DataCache(); + write(7,QByteArray::fromHex("01")); +} + +void FileTranseceiver::InstructionCode8(QByteArray d){ + emit drop_NextSignal(); + write(8,QByteArray::fromHex("01")); +} + +//启动指令-回收槽就绪 +void FileTranseceiver::printer_operate_0x01_result(int status) +{ + write(1,QByteArray::fromHex(status==0?"00":"01")); +} +void FileTranseceiver::WriteInstructionCodeAck(int InstructionCode,QByteArray data) +{ + write(InstructionCode,data); +} diff --git a/Tftp/filetranseceiver.h b/Tftp/filetranseceiver.h new file mode 100644 index 0000000..80c22f7 --- /dev/null +++ b/Tftp/filetranseceiver.h @@ -0,0 +1,92 @@ +#ifndef FILETRANSECEIVER_H +#define FILETRANSECEIVER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define DOC_DIR "/home/plg/doc" +#define SEARCH 100 +#define DOWN 200 +#define END 500 +#define FAIL 300 +#define SUCCESS 400 +#define UP 600 +#define UPGRADE 601 + +struct msg +{ + int type; + int flag; + char buf[64]; + char fname[100]; +}; + +typedef unsigned char UCHAR; + +class FileTranseceiver : public QObject +{ + Q_OBJECT +public: + explicit FileTranseceiver(uint16_t hostshort); + ~FileTranseceiver(void); + + int ftp_download(int connfd,struct msg info); + int upload_ftp(int connfd,struct msg info); + void start(); + void showData(QString tag,QByteArray dat)const; + QByteArray read(int length); + bool CheckSumIn(QByteArray a); + void write(int code, QByteArray d); + void InstructionCode1(QByteArray d); + void InstructionCode2(QByteArray d); + void InstructionCode3(QByteArray d); + void InstructionCode4(QByteArray d); + void InstructionCode5(QByteArray d); + void InstructionCode6(QByteArray d); + void InstructionCode7(QByteArray d); + void InstructionCode8(QByteArray d); + +private slots: + void refreshtimerHandler(); +protected slots: + void connectListen(); + //void printer_operate_0x05(); + void printer_operate_0x01_result(int status); + void WriteInstructionCodeAck(int InstructionCode,QByteArray data); +private: + uint16_t port; + int sockfd; + int connfd; + QThread *serverThead; + int upload_and_upgrade(int connfd, msg info); + void connectListen5001(); + void connectListen5002(); + UCHAR CheckSumIn( UCHAR *buf, unsigned int len); + QTimer *refresh_timer; + QMutex mutex; +signals: + void fileRecieved(QString fileName); + void printer_operate_0x01(); + void printer_operate_0x02(); + void printer_operate_0x03(QString); + void printer_operate_0x04(); + void printer_operate_0x06(); + void clear_DataCache(); + void drop_NextSignal(); +}; + +#endif // FILETRANSECEIVER_H diff --git a/TimeSettingDialog.cpp b/TimeSettingDialog.cpp new file mode 100644 index 0000000..bd2a76a --- /dev/null +++ b/TimeSettingDialog.cpp @@ -0,0 +1,53 @@ +#include "TimeSettingDialog.h" +#include "ui_timesettingdialog.h" + +TimeSettingDialog::TimeSettingDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::TimeSettingDialog) +{ + ui->setupUi(this); + this->setWindowTitle(tr("设置时间")); + this->setFixedSize(this->geometry().width(),this->geometry().height()); +} + +TimeSettingDialog::~TimeSettingDialog() +{ + delete ui; +} + +int TimeSettingDialog::getYear(){ + return ui->spinBoxYear->value(); +} +int TimeSettingDialog::getMonth(){ + return ui->spinBoxMonth->value(); +} +int TimeSettingDialog::getDay(){ + return ui->spinBoxDay->value(); +} +int TimeSettingDialog::getHour(){ + return ui->spinBoxHour->value(); +} +int TimeSettingDialog::getMinute(){ + return ui->spinBoxMinute->value(); +} +int TimeSettingDialog::getSecond(){ + return ui->spinBoxSecond->value(); +} +void TimeSettingDialog::setYear(int value){ + ui->spinBoxYear->setValue(value); +} +void TimeSettingDialog::setMonth(int value){ + ui->spinBoxMonth->setValue(value); +} +void TimeSettingDialog::setDay(int value){ + ui->spinBoxDay->setValue(value); +} +void TimeSettingDialog::setHour(int value){ + ui->spinBoxHour->setValue(value); +} +void TimeSettingDialog::setMinute(int value){ + ui->spinBoxMinute->setValue(value); +} +void TimeSettingDialog::setSecond(int value){ + ui->spinBoxSecond->setValue(value); +} diff --git a/TimeSettingDialog.h b/TimeSettingDialog.h new file mode 100644 index 0000000..81f19eb --- /dev/null +++ b/TimeSettingDialog.h @@ -0,0 +1,34 @@ +#ifndef TIMESETTINGDIALOG_H +#define TIMESETTINGDIALOG_H + +#include + +namespace Ui { +class TimeSettingDialog; +} + +class TimeSettingDialog : public QDialog +{ + Q_OBJECT + +public: + explicit TimeSettingDialog(QWidget *parent = 0); + ~TimeSettingDialog(); + + int getYear(); + int getMonth(); + int getDay(); + int getHour(); + int getMinute(); + int getSecond(); + void setYear(int value); + void setMonth(int value); + void setDay(int value); + void setHour(int value); + void setMinute(int value); + void setSecond(int value); +private: + Ui::TimeSettingDialog *ui; +}; + +#endif // TIMESETTINGDIALOG_H diff --git a/TouchScreenConf/calibrate_Capacitance b/TouchScreenConf/calibrate_Capacitance new file mode 100644 index 0000000000000000000000000000000000000000..094b3cc36efdcc805b52caaafff1d71eb5a4a894 GIT binary patch literal 1199 zcmbu8%T9wp6oy^*DNdUI|&73hDP7s1C*9hTcfg=kU9Uk zf79!dC5s7PbzH|YrX$N68Rk$U{F9Scx?ut3WWzF%`w?Mrnv3eZCOO^ESipgsQuzgu z&v{d=?9?oTXOJmeHnV~3gH)FBmeCaCcW{$DSUEvPX$-fAVhLVuK&;Tvp&x0I32+_L zxbs|RFnl!nSUQ%yOeYM&Ieofrk=Xw-??_cgL-WJ6UDJt*C^TXOXyAl3JFqzpH9T z%g*)T$?*n;Gc)ytrtTXrt|!*q8G19@axG1AIkuo4Pim6noKAeqydUBk8IYjU%hn)= zP>!nETd!Pc7i4~9dx3gWu>Be{EE*Er!}+jf<_n4$LWYe*9Dkd1{1GbU8>*~%f86Ft z`8`mF;Qhc;OMD8FT6Uh1T6GGMlZ4cchk!J1|I0_Q;j`?RZ{yEOXm9iX&;7Oflz*?D*7 zotcMjhpbpc_*!yoSD#HxccL5P0pXvVywV->DJMIYh|~)Si?*pK-aV4i9gPIkuBpX6 zKlC{NSu7slJh#|u2#4luQuLVegoLq=ol)Tv!LR%{3L0w5SlsEekv<=gqda6Q zlsA+^4Q&*Ovvk{-MS>=n{h%{OE=uOweCb-6bKl5#kQFi9N}urjofXcO)Xyy(&kFAt zIb3~svfYtxTZXnA^wrw&)LhtO*P5G-IglNWE%cj{QehgWoK8Kgd>rBi8IVEhCL2%! z$VXM}t(&j30}B5Zdx3IOuzxBu%o-Bh#rd#R;t7fs0)~!5j-ORJ{t1|S zg{p@56e^{xos?2_3Y3$alo#umR8RjvNw1BPY|pJrF7}(r_J42YrB=0t!3>aqNf%#D C+KSr% literal 0 HcmV?d00001 diff --git a/TouchScreenConf/qtui_Capacitance b/TouchScreenConf/qtui_Capacitance new file mode 100644 index 0000000..8a07da0 --- /dev/null +++ b/TouchScreenConf/qtui_Capacitance @@ -0,0 +1,49 @@ +#!/bin/sh +#echo "start up qtui...." +export QT_QWS_FONTDIR=/usr/lib/fonts +export QWS_MOUSE_PROTO="TSLIB:/dev/input/event1 mouseman:/dev/input/mice" + +cd /dev/ && ln -s am335x_visco_pwm pwm && ln -s am335x_suction_pwm pwm1 + +if [ -e /dev/input/touchscreen0 ]; then + TSLIB_TSDEVICE=/dev/input/touchscreen0 + export TSLIB_CALIBFILE=/etc/pointercal + export TSLIB_CONFFILE=/usr/local/etc/ts.conf + export TSLIB_PLUGINDIR=/usr/lib/ts + export TSLIB_TSDEVICE +fi + + +if [ ! -f /etc/pointercal ];then + touch /etc/pointercal + ts_calibrate +fi + +cd /home/plg +if [ ! -f /home/plg/runFlag ];then + chmod a+x InkJetPrinter + ./InkJetPrinter -qws +fi + + +#bootup QtUI +chmod +x QtUI +./QtUI -qws -display VNC:LinuxFb & +rm /home/plg/runFlag + +sleep 1 +#mount mmc and usb disk +if [ -f /dev/mmcblk0p1 ];then + mount /dev/mmcblk0p1 /mnt/mmc/ +fi + +ln -sf /mnt/udisk /udisk +if [ -f /dev/sda1 ];then + mount /dev/sda1 /mnt/udisk/ +fi + +sleep 2 +#start quectel-CM +./quectel-CM & + + diff --git a/TouchScreenConf/qtui_Resistance b/TouchScreenConf/qtui_Resistance new file mode 100644 index 0000000..aa71a2c --- /dev/null +++ b/TouchScreenConf/qtui_Resistance @@ -0,0 +1,49 @@ +#!/bin/sh +#echo "start up qtui...." +export QT_QWS_FONTDIR=/usr/lib/fonts +export QWS_MOUSE_PROTO="TSLIB:/dev/input/event0 mouseman:/dev/input/mice" + +cd /dev/ && ln -s am335x_visco_pwm pwm && ln -s am335x_suction_pwm pwm1 + +if [ -e /dev/input/touchscreen0 ]; then + TSLIB_TSDEVICE=/dev/input/touchscreen0 + export TSLIB_CALIBFILE=/etc/pointercal + export TSLIB_CONFFILE=/usr/local/etc/ts.conf + export TSLIB_PLUGINDIR=/usr/lib/ts + export TSLIB_TSDEVICE +fi + + +if [ ! -f /etc/pointercal ];then + touch /etc/pointercal + ts_calibrate +fi + +cd /home/plg +if [ ! -f /home/plg/runFlag ];then + chmod a+x InkJetPrinter + ./InkJetPrinter -qws +fi + + +#bootup QtUI +chmod +x QtUI +./QtUI -qws -display VNC:LinuxFb & +rm /home/plg/runFlag + +sleep 1 +#mount mmc and usb disk +if [ -f /dev/mmcblk0p1 ];then + mount /dev/mmcblk0p1 /mnt/mmc/ +fi + +ln -sf /mnt/udisk /udisk +if [ -f /dev/sda1 ];then + mount /dev/sda1 /mnt/udisk/ +fi + +sleep 2 +#start quectel-CM +./quectel-CM & + + diff --git a/TriggerCtrl.cpp b/TriggerCtrl.cpp new file mode 100644 index 0000000..c9e2ecd --- /dev/null +++ b/TriggerCtrl.cpp @@ -0,0 +1,741 @@ +#include "TriggerCtrl.h" +#include "ui_triggerctrl.h" +#include +#include +#include +#include +#include "qdebug.h" +#include +#include "myinclude.h" +#include "Public.h" +#include "VerBVersion.h" +#include "DevOp.h" +#include "InkJetPrinter.h" +extern InkJetPrinter *pInkJectPrinter; +/* readme: 20140809 +1. 同步字宽mm: 0.1+ w*(4-0.1) = 0.1+3.9w (mm) +2. 按长度喷印: +*/ + +// 20140923-12:05版本存在图形方式下变量不变绿问题,新版本已经更正 +// 20141013-16:36修正密码有效期设置错误。 +//2015-10-17 二维码变量问题 +// 2015-11-01 无聊: 要从V6S版本恢复原来的 para.set_HVData_Flag = 0; 参数 +// 估计过段时间又要要求增加 UART功能。 V6S 原来已经有这个功能了。但他们不用!! +// 20151109 新增计数1和计数器2单独立即清零 版本号 No42 +// 更新了Vietname字库,使用中文使用wenquanyiBitmap,编译uncode编码使用wenquanyimicrohei,英文自己编,越南语自己编,基于DejaVu Sans +// 新版软件更新或升级,会因参数错位,出现隔膜位置设定值(等参数)错误,引起主墨泵不工作,开机不循环等现象。(解决办法,重新检查并设置所有参数) +// 20160203:修改了变量定位方式,更新的Image图片。 将左下角更换为RGB = 250,250,0 -=== 0xFFF7FC00 +// 修正了停止打印关闭高压的问题,重新打印出现高压故障 +// 修改了密码一周一变,增加了密码校验,需要使用新版20以上的手机密码软件,密码为7位; +// 20160218 修改了提示框显示方式,避免提示阻塞处理进程 + +// 20160304 优化了变量显示; 增加了中心旋转交替功能;增加了 13位随机码打印功能; 修正界面显示字库部分汉字问题 +// 本次修改需要同时更并按ARM和FPGA + +// FPGA实现自动点距调整,实现连续点位置修正 20160714 FPGA版本 V44, 0714B +// 20160715 : 去掉了“点距电压微调”、“内存数据显示”、部分相检控制参数设置 +// 20160729: 发现打开历史记录会死机问题,原因待查。但执行删除历史记录后,可避免再次死机。 +// 20160723: 增加电眼复位功能。 与电眼清零不同,复位时,计数不清零,而是等于预设的当前值。 +// 20160718: 参考日立方案,优化打印效果 +/* + 20160728:发现历史记录打开时,会死机 + 20160729: 查找原因:fi +// 20160806:重要修改 : 毫米脉冲的系数由X8改为X256,原因是:使用X8时传递误差较大,导致1000mm会有6mm误差, 使用X256(即8位二进制表示小数时,可以精确到0.004,从而提高精度) + X8 时,小数精度为0.125而已 + + 20160812:增加左横,右横变量 + if((varType<9) // 普通变量 + ||(varType>=20 && varType<29) // 横左变量 + ||(varType>=40 && varType<49) // 右横变量 + if(fontname.contains("SerifL") ||fontname.contains("serifl") ) varType1= 20+varType; + else if(fontname.contains("SerifR") ||fontname.contains("serifr") ) varType1= 40+varType; + 20160831: 增加临时密码,每小时一变 + + 20160904: 解决重新开机后,有时不能自动打印文件问题。 + 20160905: 第二行单独变量时显示不全问题 + + // 20160912: 去掉高压故障自动关闭回收的默认值 1 + // 20160912: 设置了隐藏按键,用于对墨线时间和开机次数进行复位 No49 + 20160927: FIFO实现RAND 码上传,暂时与RST0806 No49区别开来 No50 + 20161212: 修改总产品计数器清零功能。由ARM清零改为FPGA清零 No51 // [3]总产品计数器清零FPGA + 20161217: 增加了 SPV210编译选项,以处理V6核心版驱动问题 + 修改随机码处理函数,以解决 不能输出奇数位 随机码问题。 + + 20170217: 有厂家只想打一条横线,改最小列点阵数。 + 20170224: 输入密码不回显 + 20170313: 修改开机重启或重载参数时,设定计数当前值为起始值 + 20170318: 制作0318版本的刷机文件 + + 20170803: 增加外接屏功能,20170808完成 + + */ + +#ifdef MIMA +#ifdef ALT16 +#define BVER "(ALT53)" TST // 20160801 之前使用 RST46 +#else +#define BVER "(SUN53)" TST // 20160801 之前使用 RST46 +#endif +#endif +//#define NON_CABLE//喷印间隔固定 +// 20160507 1138 +// 20161209 编辑 小数点喷印间隔 +// 20170603: 太阳能条码专用版本 +// Nam Ninh phồng tuyệt vời Mã Technology Co., Ltd. +TriggerCtrl::TriggerCtrl(QWidget *parent) : + QWidget(parent), + ui(new Ui::TriggerCtrl) +{ + ui->setupUi(this); + //#ifdef SYNLENFLOAT + QRegExp double_rx100("10000000|([0-9]{1,8}[\.][0-9]{0,1})"); + ui->spinBoxSynTriggerPrintLen->setValidator(new QRegExpValidator(double_rx100,ui->spinBoxSynTriggerPrintLen)); +#ifdef NON_CABLE + ui->spinBoxSynTriggerPrintLen->setEnabled(0); +#endif + //#endif + pulseNumFix = new PulseNumFix(parent); + pulseNumFix->hide(); + ui->lineEditTriggerPulsePerMm->setValidator(new QDoubleValidator(0)); + connect(pulseNumFix,SIGNAL(pulseNuxFixDone(float)),this,SLOT(onPulseNumFixDone(float))); + //ui->test_version->setText (tr(BUILD_DATE)); + + updateSysStatusToUI(); + QString s; +#if 0 /* roger use new Version manage,so delete it */ + s.sprintf(" %s ",__TIME__); + +#ifdef MYTEST + s = (QString) Public::DateToString(__DATE__)+s + "A2451测试"; +#else + s = (QString) Public::DateToString(__DATE__)+s + BVER; +#endif + +#else + s.sprintf("%d.%d.%02d_%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION); + s = s + (QString) Public::DateToString(__DATE__)+"_"+ QString(__TIME__)+"_"+ UP_PRINTER_STAGE_VER; + //s = s + BVER; +#endif + ui->test_version->setText(s); + + ui->checkBoxEleEyeMakeClean->setVisible(false); + tr("独立参数"); + //ui->labelDelayTriggerValue->setText(tr("重复间隔(毫秒)")); + //--if( QString(BUILD_DATE).left(21)!="2015-10-26 20:56(M40)"){ + //--ui->labelEleMaskTime->hide(); + //--ui->spinBoxEleMaskTime->hide(); + //--} + + if(Public::ReadLanguageName()=="Chinese"){ + ui->label_miv12->setPixmap(QPixmap(QString::fromUtf8(":/image/MIV12.png"))); + }else + { + ui->label_miv12->setPixmap(QPixmap(QString::fromUtf8(":/image/MIV13.png"))); + } + //qDebug()<<"Run TriggerCtrl ok."; +#ifdef ENGLISH + ui->label_miv12->setPixmap(QPixmap(QString::fromUtf8(":/image/MIV13.png"))); +#endif + ui->spinBoxOuputPulseCol->setHidden(1); + // ui->labelOuputPulseCol->setHidden(1); +} + +TriggerCtrl::~TriggerCtrl() +{ + delete ui; + delete pulseNumFix; +} + +void TriggerCtrl::setTriggerUI(int triggerMode){ + + ui->radioButtonDelayTrigger->setChecked(triggerMode == PRINT_TRIGGER_TIME); + ui->spinBoxDelayTriggerValue->setEnabled(triggerMode == PRINT_TRIGGER_TIME); + ui->labelDelayTriggerValue->setEnabled(triggerMode == PRINT_TRIGGER_TIME); + ui->comboBoxTimeTriggerMode->setEnabled(triggerMode == PRINT_TRIGGER_TIME); + ui->labelTimeTriggerMode->setEnabled(triggerMode == PRINT_TRIGGER_TIME); + + ui->radioButtonEleEyeEdgetTrigger->setChecked( triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->radioButtonEleEyeLevelTrigger->setChecked(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL); + ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->labelEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->labelEleEyeTriggerRepeatCnt->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->spinBoxEleEyeTriggerPrintDelay->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || PRINT_TRIGGER_SYNCHRONIZER); + ui->labelEleEyeTriggerPrintDelay->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || PRINT_TRIGGER_SYNCHRONIZER); + ui->checkBoxSynMakeClean->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->checkEyeTriggerSynPrintEn->setEnabled (triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->labelEleMaskTime->setEnabled (triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + ui->spinBoxEleMaskTime->setEnabled (triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); + + if(sysPara->para.eleEyeTriggerSynPrintEn && + (triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + ) + { + //ui->radioButtonSynTrigger->setChecked(1); + ui->spinBoxSynTriggerPrintLen->setEnabled(0); + ui->labelSynTriggerPrintLen->setEnabled(1); + ui->lineEditTriggerPulsePerMm->setEnabled(1); + ui->labelTriggerPulsePerMm->setEnabled(1); + ui->spinBoxSynTriggerPrintLenRatio->setEnabled(1); + ui->labelSynTriggerPrintLenRatio->setEnabled(1); + ui->checkBoxEleEyeMakeClean->setEnabled(1); + ui->pushButtonApplyPulseFix->setEnabled(1); + ui->comboBoxSynPrintMode->setEnabled(1); + ui->labelSynPrintMode->setEnabled(1); + //ui->checkBoxAutoSpeedEN->setEnabled (1); + ui->labelEleMaskTime->setEnabled(1); + ui->spinBoxEleMaskTime->setEnabled(1); + + //ui->spinBoxEleMaskTime->setEnabled(1); + + ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); + ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)")); + ui->labelEleMaskTime->setText(tr("封锁间隔(毫米)")); + } + else + { + ui->radioButtonSynTrigger->setChecked(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); +#ifndef NON_CABLE + ui->spinBoxSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); +#endif + ui->labelSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->lineEditTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->spinBoxSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->checkBoxEleEyeMakeClean->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->pushButtonApplyPulseFix->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->comboBoxSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + //ui->checkBoxAutoSpeedEN->setEnabled (triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + //ui->labelEleMaskTime->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + //ui->spinBoxEleMaskTime->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + if(triggerMode == PRINT_TRIGGER_SYNCHRONIZER) + { + ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); + } + else + { + ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫秒)")); + } + ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫秒)")); + ui->labelEleMaskTime->setText(tr("封锁时间(毫秒)")); + } + if(( ( //sysPara->para.eleEyeTriggerSynPrintEn || + ui->checkEyeTriggerSynPrintEn->isChecked()) + &&(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)) + || triggerMode == PRINT_TRIGGER_SYNCHRONIZER ) + { + ui->labelOutputPulseDelayMs->setText(tr("延时(毫米):")); + } + else ui->labelOutputPulseDelayMs->setText(tr("延时(毫秒):")); + + setSynPrintMode(sysPara->para.sysTriggerPrintMode); + + + //72版本禁用该输入框 + //67打开 + // if(triggerMode== PRINT_TRIGGER_SYNCHRONIZER){ + // const unsigned short &FpgaVer=sysPara->status.build_dat.builTime; + // if(72==FpgaVer) + // { + // ui->spinBoxSynTriggerPrintLenRatio->setValue(0); + // ui->spinBoxSynTriggerPrintLenRatio->setEnabled(false); + // } + // else if(67==FpgaVer) + // { + // ui->spinBoxSynTriggerPrintLenRatio->setEnabled(true); + // } + // } + // else{ + // ui->spinBoxSynTriggerPrintLenRatio->setValue(0); + // ui->spinBoxSynTriggerPrintLenRatio->setEnabled(false); + // } +} + +void TriggerCtrl::setSynPrintMode(int mode){ + ui->labelSynTriggerPrintLenRatio->setText((mode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH)?tr("字符宽度"):tr("喷印比例(%)")); + ui->comboBoxSynPrintMode->setCurrentIndex(mode); + //ui->spinBoxSynTriggerPrintLenRatio->setValue((mode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH)?sysPara->para.synCharWidthRatio:sysPara->para.synTriggerPrintLenRatio); + //edit@11-18 + if(SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH!=mode) + { + ui->spinBoxSynTriggerPrintLenRatio->setValue(sysPara->para.synTriggerPrintLenRatio); + } + + const bool bShow=SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH!=mode; + //隐藏文本框 + ui->labelSynTriggerPrintLenRatio->setVisible(bShow); + //隐藏输入框 + ui->spinBoxSynTriggerPrintLenRatio->setVisible(bShow); +} + +void TriggerCtrl::GetTriggerUIPara(){ + if(sysPara){ + sysPara->para.printDelayMs = ui->spinBoxDelayTriggerValue->value(); + sysPara->para.timeTriggerPrintMode = ui->comboBoxTimeTriggerMode->currentIndex(); + sysPara->para.elecEyeTriggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value(); + sysPara->para.photoElectricityRepeateNum = ui->spinBoxEleEyeTriggerRepeatCnt->value(); + + // + sysPara->para.synTriggerPrintLenMm = ui->spinBoxSynTriggerPrintLen->text().toFloat(); + //sysPara->para.synTriggerPrintLenMm = ui->spinBoxSynTriggerPrintLen->value(); +#ifdef NON_CABLE + sysPara->para.synTriggerPrintLenMm = 255.0; + ui->spinBoxSynTriggerPrintLen->setText("255"); +#endif + sysPara->para.synPulseNumPerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); + + sysPara->para.sysTriggerPrintMode = ui->comboBoxSynPrintMode->currentIndex(); + if(sysPara->para.sysTriggerPrintMode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH) + //edit@11-19 + ;//sysPara->para.synCharWidthRatio = ui->spinBoxSynTriggerPrintLenRatio->value(); + else + sysPara->para.synTriggerPrintLenRatio = ui->spinBoxSynTriggerPrintLenRatio->value(); + + // 原代码: + //sysPara->para.AltMirrorGap =(unsigned int) ( ((unsigned int)ui->spinBoxAltMirrorGap->value()) & 0x7fff) | ( ui->comboBoxAltMirrType->currentIndex()==1?0x8000:0x0000); + + // 20160303: + sysPara->para.AltMirrorGap =(unsigned int) ( ((unsigned int)ui->spinBoxAltMirrorGap->value()) & 0x0fff) |( ( ui->comboBoxAltMirrType->currentIndex())<<12 ); + + //qDebug()<< (sysPara->para.AltMirrorGap & 0x0fff) << (sysPara->para.AltMirrorGap & 0xf000); + + if(ui->radioButtonDelayTrigger->isChecked()) + sysPara->para.printTriggerMode = PRINT_TRIGGER_TIME; + else if(ui->radioButtonEleEyeLevelTrigger->isChecked()) + sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; + else if(ui->radioButtonEleEyeEdgetTrigger->isChecked()) + sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_EDGE; + else if(ui->radioButtonSynTrigger->isChecked()) + sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; + else + sysPara->para.printTriggerMode = PRINT_TRIGGER_NONE; + + sysPara->para.eleEyeTriggerSynPrintEn = ui->checkEyeTriggerSynPrintEn->isChecked (); + sysPara->para.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value(); + sysPara->para.synClearCntInEleEyeMode = ui->checkBoxSynMakeClean->isChecked(); + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xf0) + ui->comboBoxEleEyeMakeClean->currentIndex(); //ui->checkBoxEleEyeMakeClean->isChecked(); + //sysPara->para.autoSynSpeedEn = ui->checkBoxAutoSpeedEN->isChecked (); + sysPara->para.autoSynSpeedEn = 0; + //sysPara->para.synPulsePerMmX8 = (unsigned short)(sysPara->para.synPulseNumPerMm *256); + sysPara->para.synPulsePerMmX8 = (unsigned short)((unsigned int)sysPara->para.synPulseNumPerMm <<8); + sysPara->para.eleMaskTime = ui->spinBoxEleMaskTime->value(); + //qDebug()<<"eleEyeClearCntInSynMode"<< sysPara->para.eleEyeClearCntInSynMode ; + sysPara->para.synchronizorActType = ui->comboBoxSyncActType->currentIndex(); + //qDebug()<<"synchronizorActType"<< sysPara->para.synchronizorActType; + + sysPara->para.pulse_sinal_value = ui->spinBoxpluseSinal->value(); + } +} +void TriggerCtrl::TriggerupdateSysParaToUI(){ + updateSysParaToUI(); +} + +void TriggerCtrl::updateSysParaToUI(){ + if(sysPara) + { + /*----------------------------------------*/ + setTriggerUI(sysPara->para.printTriggerMode); + ui->spinBoxDelayTriggerValue->setValue(sysPara->para.printDelayMs); +#ifndef NON_CABLE + ui->comboBoxTimeTriggerMode->setCurrentIndex(sysPara->para.timeTriggerPrintMode); +#endif + ui->spinBoxEleEyeTriggerIntervalMs->setValue(sysPara->para.elecEyeTriggerInterval); + ui->spinBoxOutputPulseDelayMs->setValue(sysPara->para.outputPulseDelayMs); + ui->spinBoxEleEyeTriggerRepeatCnt->setValue(sysPara->para.photoElectricityRepeateNum); + + //ui->spinBoxSynTriggerPrintLen->setValue(sysPara->para.synTriggerPrintLenMm); + ui->spinBoxSynTriggerPrintLen->setText(QString::number(sysPara->para.synTriggerPrintLenMm)); + ui->lineEditTriggerPulsePerMm->setText(QString::number(sysPara->para.synPulseNumPerMm)); + if(sysPara->para.sysTriggerPrintMode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH) + //edit@11-19 + ;//ui->spinBoxSynTriggerPrintLenRatio->setValue(sysPara->para.synCharWidthRatio); + else + ui->spinBoxSynTriggerPrintLenRatio->setValue(sysPara->para.synTriggerPrintLenRatio); + + /*----------------------------------------*/ + ui->spinBoxEleEyeTriggerPrintDelay->setValue(sysPara->para.eleEyeTriggerPrintDelay); + ui->checkBoxSynMakeClean->setChecked(sysPara->para.synClearCntInEleEyeMode); + //ui->checkBoxEleEyeMakeClean->setChecked(sysPara->para.eleEyeClearCntInSynMode); + ui->comboBoxEleEyeMakeClean->setCurrentIndex( sysPara->para.eleEyeClearCntInSynMode & 0x0f); + + ui->checkBoxPulseOutputEnable->setChecked(sysPara->para.pulseOutputEnable); + ui->labelProductCntPerOutputPulse->setEnabled(sysPara->para.pulseOutputEnable); + ui->spinBoxProductCntPerOutputPulse->setEnabled(sysPara->para.pulseOutputEnable); + ui->spinBoxProductCntPerOutputPulse->setValue(sysPara->para.productCntPerOutputPulse); + + ui->labelOutputPulseDelayMs->setEnabled(sysPara->para.pulseOutputEnable); + + //ui->spinBoxOutputPulseDelayMs->setEnabled(sysPara->para.pulseOutputEnable); + + ui->spinBoxOutputPulseDelayMs->setEnabled(true /*sysPara->para.outputPulseDelayMs*/); + ui->spinBoxOuputPulseCol->setValue(sysPara->para.OuputPulseCol); + ui->checkEyeTriggerSynPrintEn->setChecked (sysPara->para.eleEyeTriggerSynPrintEn); + ui->comboBoxSyncActType->setCurrentIndex (sysPara->para.synchronizorActType); + //ui->checkBoxAutoSpeedEN->setChecked (sysPara->para.autoSynSpeedEn ); + ui->spinBoxEleMaskTime->setValue(sysPara->para.eleMaskTime); + + ui->spinBoxAltMirrorGap->setValue( sysPara->para.AltMirrorGap & 0x0fff ); + + ui->comboBoxAltMirrType->setCurrentIndex( (sysPara->para.AltMirrorGap>>12) & 0x000F); + ui->spinBoxpluseSinal->setValue(sysPara->para.pulse_sinal_value); + + + //72版本禁用该输入框 + //67打开 + } +} + +void TriggerCtrl::applyUIPara(){ + if(sysPara){ + GetTriggerUIPara(); + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + { + if( sysPara->para.synTriggerPrintLenMm < sysPara->para.eleEyeTriggerPrintDelay ) + { + QMessageBox::information(this,tr("提示:参数不正确"),tr("要求:触发长度小于喷印间隔")); + } + } + sysPara->para.pulseOutputEnable = ui->checkBoxPulseOutputEnable->isChecked(); + sysPara->para.productCntPerOutputPulse = ui->spinBoxProductCntPerOutputPulse->value(); + sysPara->para.outputPulseDelayMs = ui->spinBoxOutputPulseDelayMs->value(); + sysPara->para.OuputPulseCol = ui->spinBoxOuputPulseCol->value(); + if(( ( //sysPara->para.eleEyeTriggerSynPrintEn || + ui->checkEyeTriggerSynPrintEn->checkState()==1 ) + &&(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)) + || sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER ) + { + ui->labelOutputPulseDelayMs->setText(tr("延时(毫米):")); + } + else ui->labelOutputPulseDelayMs->setText(tr("延时(毫秒):")); +#ifdef DEBUG1 + qDebug()<<"TriggerCtrl::applyUIPara"<<"1"; +#endif + if(sysPara->devOp->writeFpgaPrintPara() != -1) + QMessageBox::information(this,tr("提示"),tr("应用成功")); +#ifdef DEBUG1 + qDebug()<<"TriggerCtrl::applyUIPara"<<"3"; +#endif + + } +} + +void TriggerCtrl::updateSysStatusToUI(){ + static char t_init = 0; + if(sysPara){ + if(t_init == 0){ + sysPara->loadParaFromFile(); + //qDebug()<<"sysPara->para.pulse_sinal_value="<para.pulse_sinal_value; + ui->spinBoxpluseSinal->setValue(sysPara->para.pulse_sinal_value); + t_init = 1; + } + // if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)) + // { + // ui->lineEditPulseCount ->setText(QString::number((int )((sysPara->para.synTriggerPrintLenMm)*sysPara->para.synPulseNumPerMm))); + // } + // else if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + // ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + // && sysPara->para.eleEyeTriggerSynPrintEn)) + // { + // ui->lineEditPulseCount ->setText(QString::number( (int )((sysPara->para.elecEyeTriggerInterval)*sysPara->para.synPulseNumPerMm))); + // } + } +} + +void TriggerCtrl::on_checkEyeTriggerSynPrintEn_pressed() +{ +#if 0 + int triggerMode = sysPara->para.printTriggerMode; + if(sysPara) + { + //if( !sysPara->para.eleEyeTriggerSynPrintEn ) + if( !ui->checkEyeTriggerSynPrintEn->isChecked() ) + { + //ui->radioButtonSynTrigger->setChecked(1); + + ui->spinBoxSynTriggerPrintLen->setEnabled(1); + ui->labelSynTriggerPrintLen->setEnabled(1); + ui->lineEditTriggerPulsePerMm->setEnabled(1); + ui->labelTriggerPulsePerMm->setEnabled(1); + ui->spinBoxSynTriggerPrintLenRatio->setEnabled(1); + ui->labelSynTriggerPrintLenRatio->setEnabled(1); + ui->checkBoxEleEyeMakeClean->setEnabled(1); + ui->pushButtonApplyPulseFix->setEnabled(1); + ui->comboBoxSynPrintMode->setEnabled(1); + ui->labelSynPrintMode->setEnabled(1); + ui->checkBoxAutoSpeedEN->setEnabled (1); + ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(0); + ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); + ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)")); + ui->labelOutputPulseDelayMs->setText("延时(毫米):"); + if(ui->checkBoxpausePrintSyncInv->isChecked()) + { + ui->checkBoxpausePrintSyncInv->setChecked(false); + } + } + else + { + ui->radioButtonSynTrigger->setChecked(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->spinBoxSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->lineEditTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->spinBoxSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->checkBoxEleEyeMakeClean->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->pushButtonApplyPulseFix->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->comboBoxSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->checkBoxAutoSpeedEN->setEnabled (triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + //ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(1); + ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫秒)")); + ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫秒)")); + ui->labelOutputPulseDelayMs->setText( ui->radioButtonSynTrigger->isChecked()?"延时(毫米):":"延时(毫秒):"); + + } + // sysPara->para.eleEyeTriggerSynPrintEn=!sysPara->para.eleEyeTriggerSynPrintEn; + } +#endif +} + +void TriggerCtrl::on_radioButtonDelayTrigger_pressed() +{ + setTriggerUI(PRINT_TRIGGER_TIME); +// emit synDisableFontWidth(false); +} + +void TriggerCtrl::on_radioButtonEleEyeEdgetTrigger_pressed() +{ + setTriggerUI(PRINT_TRIGGER_ELEC_EYE_EDGE); +// emit synDisableFontWidth(false); +} + +void TriggerCtrl::on_radioButtonEleEyeLevelTrigger_pressed() +{ + setTriggerUI(PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL); +// emit synDisableFontWidth(false); +} + +void TriggerCtrl::on_radioButtonSynTrigger_pressed() +{ + //edit@11-19 + sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; + setTriggerUI(PRINT_TRIGGER_SYNCHRONIZER); +// const unsigned short &FpgaVer=sysPara->status.build_dat.builTime; +// //72版本禁用字符宽度 +// if(72 == FpgaVer){ +// ui->spinBoxSynTriggerPrintLenRatio->setValue(0); +// ui->spinBoxSynTriggerPrintLenRatio->setEnabled(0); +// }else if (67 == FpgaVer) +// ui->spinBoxSynTriggerPrintLenRatio->setEnabled(1); +// emit synDisableFontWidth(true); +} + +void TriggerCtrl::on_pushButtonApplyPulseFix_clicked() +{ + pulseNumFix->bindSysPara(sysPara); + pulseNumFix->hide(); + pulseNumFix->show(); +} + +void TriggerCtrl::onPulseNumFixDone(float value){ + ui->lineEditTriggerPulsePerMm->setText(QString::number(value)); +} + +void TriggerCtrl::on_comboBoxSynPrintMode_currentIndexChanged(int index) +{ + setSynPrintMode(index); +} +void TriggerCtrl::on_pushButtonApply_pressed() +{ + applyUIPara(); + if(sysPara)sysPara->saveParaToFile (); + emit autoUpdateFontWidthByTriggerCtrl(sysPara->status.textEditTotalCol); + TriggerCtrlLog(); +} + +void TriggerCtrl::TriggerCtrlLog(){ + + qDebug()<para.printTriggerMode); + qDebug()<lineEditTriggerPulsePerMm->text().toFloat()); + qDebug()<spinBoxSynTriggerPrintLen->text().toFloat()); + qDebug()<comboBoxSynPrintMode->currentIndex()); + qDebug()<spinBoxSynTriggerPrintLenRatio->value()); + qDebug()<comboBoxEleEyeMakeClean->currentIndex()); + qDebug()<comboBoxAltMirrType->currentIndex()); + qDebug()<spinBoxAltMirrorGap->value()); + qDebug()<spinBoxpluseSinal->value()); + qDebug()<spinBoxEleEyeTriggerRepeatCnt->value()); + qDebug()<spinBoxEleEyeTriggerIntervalMs->value()); + qDebug()<checkEyeTriggerSynPrintEn->isChecked ()); + qDebug()<spinBoxEleEyeTriggerPrintDelay->value()); + qDebug()<spinBoxEleMaskTime->value()); + qDebug()<checkBoxSynMakeClean->isChecked()); + qDebug()<spinBoxDelayTriggerValue->value()); + qDebug()<comboBoxTimeTriggerMode->currentIndex()); + qDebug()<comboBoxSyncActType->currentIndex()); + qDebug()<spinBoxProductCntPerOutputPulse->value()); + qDebug()<spinBoxOutputPulseDelayMs->value()); + qDebug()<checkBoxPulseOutputEnable->isChecked()); + + +} + +void TriggerCtrl::on_checkBoxPulseOutputEnable_clicked() +{ + bool checked = ui->checkBoxPulseOutputEnable->isChecked(); + ui->labelProductCntPerOutputPulse->setEnabled(checked); + ui->spinBoxProductCntPerOutputPulse->setEnabled(checked); + //ui->labelOutputPulseDelayMs->setEnabled(checked); + //ui->spinBoxOutputPulseDelayMs->setEnabled(checked); +} + +void TriggerCtrl::setBuildTime(QString s1) +{ + QString s; + +#if 0 /* roger use new Version manage,so delete it */ + s.sprintf(" %s ",__TIME__); + s = (QString) Public::DateToString(__DATE__)+s + BVER; +#else + s.sprintf("%d.%d.%02d_%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION); + s = s + (QString) Public::DateToString(__DATE__)+ "_"+ QString(__TIME__)+"_"+UP_PRINTER_STAGE_VER; + // s = s + BVER; +#endif + ui->test_version->setText(s+s1); + + //ui->test_version->setText (BUILD_DATE+s); + +} + +void TriggerCtrl::on_checkEyeTriggerSynPrintEn_clicked(bool checked) +{ + int triggerMode = sysPara->para.printTriggerMode; + if(sysPara) + { + //if( !sysPara->para.eleEyeTriggerSynPrintEn ) + if( checked) + { + //ui->radioButtonSynTrigger->setChecked(1); +#ifndef NON_CABLE + ui->spinBoxSynTriggerPrintLen->setEnabled(1); +#endif + ui->labelSynTriggerPrintLen->setEnabled(1); + ui->lineEditTriggerPulsePerMm->setEnabled(1); + ui->labelTriggerPulsePerMm->setEnabled(1); + ui->spinBoxSynTriggerPrintLenRatio->setEnabled(1); + ui->labelSynTriggerPrintLenRatio->setEnabled(1); + ui->checkBoxEleEyeMakeClean->setEnabled(1); + ui->pushButtonApplyPulseFix->setEnabled(1); + ui->comboBoxSynPrintMode->setEnabled(1); + ui->labelSynPrintMode->setEnabled(1); + //ui->checkBoxAutoSpeedEN->setEnabled (1); + ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(0); + ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); + ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)")); + ui->labelEleMaskTime->setText(tr("封锁间隔(毫米)")); + ui->labelOutputPulseDelayMs->setText(tr("延时(毫米):")); + if(ui->comboBoxSyncActType->currentIndex() || 0b11) //如果不是在正反转打印的模式下,就切换到正反转模式 + { + ui->comboBoxSyncActType->setCurrentIndex(0); + } + } + else + { + ui->radioButtonSynTrigger->setChecked(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); +#ifndef NON_CABLE + ui->spinBoxSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); +#endif + ui->labelSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->lineEditTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->spinBoxSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->checkBoxEleEyeMakeClean->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->pushButtonApplyPulseFix->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->comboBoxSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->labelSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + //ui->checkBoxAutoSpeedEN->setEnabled (triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + //ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); + ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(1); + ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫秒)")); + ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫秒)")); + ui->labelEleMaskTime->setText(tr("封锁间隔(毫秒)")); + ui->labelOutputPulseDelayMs->setText( ui->radioButtonSynTrigger->isChecked()?tr("延时(毫米):"):tr("延时(毫秒):")); + + } + } +} + +void TriggerCtrl::on_comboBoxSyncActType_activated(int index) +{ + if(index>0) + { + on_checkEyeTriggerSynPrintEn_clicked(false); + } +} + + +void TriggerCtrl::on_lineEditTriggerPulsePerMm_textChanged(const QString &arg1) +{ + Q_UNUSED(arg1); + sysPara->para.synPulseNumPerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); +} +void TriggerCtrl::on_spinBoxSynTriggerPrintLen_textChanged(const QString &arg1) +{ + Q_UNUSED(arg1); + //sysPara->para.synTriggerPrintLenMm = ui->spinBoxSynTriggerPrintLen->text().toFloat(); + +} + +//void TriggerCtrl::on_spinBoxEleEyeTriggerIntervalMs_valueChanged(int arg1) +//{ +// sysPara->para.elecEyeTriggerInterval = arg1; +//} + +// //2020/3/2 +// void TriggerCtrl::on_radioButtonSynTrigger_clicked() +// { + // sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; + // sysPara->para.printColDelay = 0; +// } + +void TriggerCtrl::on_radioButtonEleEyeLevelTrigger_clicked() +{ + sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; +} + +void TriggerCtrl::on_radioButtonEleEyeEdgetTrigger_clicked() +{ + sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_EDGE; +} + +void TriggerCtrl::on_radioButtonDelayTrigger_clicked() +{ + sysPara->para.printTriggerMode = PRINT_TRIGGER_TIME; +} + + + +#define PRINT_CTRL_ADDR_BASE 0xa400 +typedef struct pulse_struct { + unsigned int pulse_value:16; +}Pulse_struct; + +void TriggerCtrl::on_spinBoxpluseSinal_valueChanged(int arg1) +{ + Pulse_struct t_pulse_struct; + sysPara->para.pulse_sinal_value = arg1; + t_pulse_struct.pulse_value = arg1*10*ui->lineEditTriggerPulsePerMm->text().toFloat(); + sysPara->devOp->fpgaWr(PRINT_CTRL_ADDR_BASE + 0x88, (unsigned char *)&t_pulse_struct, 2); +} + +void TriggerCtrl::OutputPulse() +{ + ui->checkBoxPulseOutputEnable->setChecked(true); + ui->spinBoxProductCntPerOutputPulse->setEnabled(true); + ui->spinBoxProductCntPerOutputPulse->setValue(sysPara->para.productCntPerOutputPulse); +} diff --git a/TriggerCtrl.h b/TriggerCtrl.h new file mode 100644 index 0000000..6375000 --- /dev/null +++ b/TriggerCtrl.h @@ -0,0 +1,86 @@ +#ifndef TRIGGERCTRL_H +#define TRIGGERCTRL_H + +#include +#include "ParaSettingUI.h" +#include "PulseNumFix.h" +#include "mainwindow.h" +namespace Ui { +class TriggerCtrl; +} + +class TriggerCtrl : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit TriggerCtrl(QWidget *parent = 0); + ~TriggerCtrl(); + void updateSysParaToUI(); //重载 + void applyUIPara(); //重载 + void updateSysStatusToUI(); + + void setBuildTime(QString s); + void TriggerCtrlLog(); + +signals: + Q_SIGNALS: + // void synDisableFontWidth(bool); + //修改字体宽度 + + void autoUpdateFontWidthByTriggerCtrl(const unsigned int); + +private slots: + void on_radioButtonDelayTrigger_pressed(); + void TriggerupdateSysParaToUI(); + void on_checkEyeTriggerSynPrintEn_pressed(); + void on_radioButtonEleEyeEdgetTrigger_pressed(); + + void on_radioButtonEleEyeLevelTrigger_pressed(); + + void on_radioButtonSynTrigger_pressed(); + + void on_pushButtonApplyPulseFix_clicked(); + + void onPulseNumFixDone(float); + + void on_comboBoxSynPrintMode_currentIndexChanged(int index); + void on_pushButtonApply_pressed(); + + void on_checkBoxPulseOutputEnable_clicked(); + + void on_checkEyeTriggerSynPrintEn_clicked(bool checked); + + void on_comboBoxSyncActType_activated(int index); + + void on_lineEditTriggerPulsePerMm_textChanged(const QString &arg1); + + void on_spinBoxSynTriggerPrintLen_textChanged(const QString &arg1); + + //void on_spinBoxEleEyeTriggerIntervalMs_valueChanged(int arg1); + + //void on_radioButtonSynTrigger_clicked(); + + void on_radioButtonEleEyeLevelTrigger_clicked(); + + void on_radioButtonEleEyeEdgetTrigger_clicked(); + + void on_radioButtonDelayTrigger_clicked(); + + void on_spinBoxpluseSinal_valueChanged(int arg1); + + void OutputPulse(); + +signals: + void synDisableFontWidth(bool); + +private: + Ui::TriggerCtrl *ui; + + void setTriggerUI(int triggerMode); + void setSynPrintMode(int mode); + void GetTriggerUIPara(); + PulseNumFix *pulseNumFix; +}; + +#endif // TRIGGERCTRL_H diff --git a/VerBVersion.h b/VerBVersion.h new file mode 100644 index 0000000..63b1d62 --- /dev/null +++ b/VerBVersion.h @@ -0,0 +1,20 @@ +#ifndef VERBVERSION_H +#define VERBVERSION_H +/* + Major.Minor.Rivison.yyyy-MM-DD_Beta +*/ +#define UP_PRINTER_MAJOR_VER 6 +#define UP_PRINTER_MINOR_VER 8 +#define UP_PRINTER_RIVISION_VER 1 +#define UP_PRINTER_STAGE_VER "Std" +#define SUB_VERSION "WeiDL2" +//#define UP_PRINTER_STAGE_VER "Beta" +//#define UP_PRINTER_STAGE_VER "RC" +//#define UP_PRINTER_STAGE_VER "Release" + + +#define VERNONBACH_VERSION(a,b,c) (((a)<<16) + ((b)<<8) + (c)) + +#define VERNONBACH_VERSION_CODE VERNONBACH_VERSION(UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER, UP_PRINTER_RIVISION_VER) + +#endif // VERBVERSION_H diff --git a/VerBVersion.h.r24 b/VerBVersion.h.r24 new file mode 100644 index 0000000..e69de29 diff --git a/WINPY_utf8.txt b/WINPY_utf8.txt new file mode 100644 index 0000000..529c3b9 --- /dev/null +++ b/WINPY_utf8.txt @@ -0,0 +1,20915 @@ +安a +按a +爱a +阿a +暗a +啊a +埃a +碍a +凹a +奥a +岸a +矮a +案a +俺a +挨a +唉a +昂a +氨a +胺a +哎a +吖a +嗄a +腌a +锕a +安徽省ahs +爱ai +埃ai +碍ai +矮ai +挨ai +唉ai +哎ai +哀ai +皑ai +癌ai +蔼ai +艾ai +隘ai +呆*ai +捱ai +嗳ai +嗌ai +嫒ai +瑷ai +暧ai +砹ai +锿ai +霭ai +安an +按an +暗an +岸an +案an +俺an +氨an +胺an +鞍an +谙an +埯an +揞an +犴an +庵an +桉an +铵an +鹌an +黯an +昂ang +肮ang +盎ang +安徽anhui +凹ao +奥ao +敖ao +熬ao +翱ao +袄ao +傲ao +懊ao +澳ao +嚣*ao +坳ao +拗ao +嗷ao +岙ao +廒ao +遨ao +媪ao +骜ao +獒ao +聱ao +螯ao +鏊ao +鳌ao +鏖ao +不b +部b +本b +表b +把b +变b +比b +并b +别b +百b +报b +保b +病b +北b +被b +步b +边b +八b +办b +布b +把ba +八ba +吧ba +巴ba +拔ba +霸ba +罢ba +爸ba +坝ba +芭ba +捌ba +扒ba +叭ba +笆ba +疤ba +跋ba +靶ba +耙ba +茇ba +菝ba +岜ba +灞ba +钯ba +粑ba +鲅ba +魃ba +百bai +白bai +败bai +摆bai +伯*bai +柏bai +佰bai +拜bai +稗bai +捭bai +掰bai +办ban +半ban +板ban +班ban +般ban +版ban +拌ban +搬ban +斑ban +扳ban +伴ban +颁ban +扮ban +瓣ban +绊ban +阪ban +坂ban +钣ban +瘢ban +癍ban +舨ban +帮bang +棒bang +邦bang +榜bang +梆bang +膀bang +绑bang +磅bang +蚌bang +镑bang +傍bang +谤bang +蒡bang +浜bang +报bao +保bao +包bao +剥bao +薄bao +胞bao +暴bao +宝bao +饱bao +抱bao +爆bao +炮*bao +堡bao +刨*bao +苞bao +褒bao +雹bao +豹bao +鲍bao +曝*bao +瀑*bao +葆bao +孢bao +煲bao +鸨bao +褓bao +趵bao +龅bao +北bei +被bei +倍bei +备bei +背bei +辈bei +贝bei +杯bei +卑bei +臂*bei +悲bei +碑bei +钡bei +狈bei +惫bei +焙bei +孛bei +陂bei +邶bei +埤bei +萆bei +蓓bei +呗bei +悖bei +碚bei +鹎bei +褙bei +鐾bei +鞴bei +本ben +奔ben +苯ben +笨ben +夯*ben +畚ben +坌ben +贲ben +锛ben +本报benbao +奔波benbo +本部benbu +本厂benchang +奔驰benchi +本地bendi +奔放benfang +泵beng +崩beng +蚌*beng +绷beng +甭beng +蹦beng +迸beng +嘣beng +甏beng +比bi +必bi +避bi +闭bi +辟bi +笔bi +壁bi +臂bi +毕bi +彼bi +逼bi +币bi +鼻bi +蔽bi +秘*bi +鄙bi +碧bi +蓖bi +毙bi +毖bi +庇bi +痹bi +敝bi +弊bi +陛bi +拂*bi +泌*bi +匕bi +俾bi +埤*bi +芘*bi +荜bi +荸bi +萆*bi +薜bi +吡bi +哔bi +狴bi +庳bi +愎bi +滗bi +濞bi +弼bi +妣bi +婢bi +嬖bi +璧bi +贲*bi +睥*bi +畀bi +铋bi +秕bi +裨bi +筚bi +箅bi +篦bi +舭bi +襞bi +跸bi +髀bi +变bian +边bian +便bian +编bian +遍bian +辩bian +扁bian +辨bian +鞭bian +贬bian +卞bian +辫bian +匾bian +弁bian +苄bian +忭bian +汴bian +缏bian +飚bian +煸bian +砭bian +碥bian +窆bian +褊bian +蝙bian +笾bian +鳊bian +表biao +标biao +彪biao +膘biao +勺*biao +婊biao +骠biao +杓biao +飑biao +飙biao +镖biao +镳biao +瘭biao +裱biao +鳔biao +髟biao +别bie +鳖bie +憋bie +瘪bie +蹩bie +宾bin +彬bin +斌bin +濒bin +滨bin +摈bin +傧bin +豳bin +缤bin +玢bin +槟bin +殡bin +膑bin +镔bin +髌bin +鬓bin +并bing +病bing +兵bing +柄bing +冰bing +丙bing +饼bing +秉bing +炳bing +屏*bing +禀bing +邴bing +摒bing +槟*bing +波bo +播bo +剥*bo +伯bo +拨bo +薄*bo +博bo +勃bo +驳bo +玻bo +泊bo +柏*bo +卜*bo +菠bo +钵bo +搏bo +铂bo +箔bo +帛bo +舶bo +脖bo +膊bo +渤bo +魄*bo +孛*bo +亳bo +啵bo +饽bo +檗bo +掰*bo +擘bo +礴bo +钹bo +鹁bo +簸bo +趵*bo +跛bo +踣bo +不bu +部bu +步bu +布bu +补bu +捕bu +埔*bu +卜bu +堡*bu +哺bu +埠bu +簿bu +怖bu +卟bu +逋bu +瓿bu +晡bu +钚bu +钸bu +醭bu +不安buan +不比bubi +不必bubi +不变bubian +不便bubian +步兵bubing +步步bubu +不曾buceng +补偿buchang +不啻buchi +补充buchong +不错bucuo +不大buda +不待budai +不但budan +不当budang +不得bude +不等budeng +步调budiao +不动budong +不断buduan +不对budui +部队budui +不法bufa +补发bufa +步伐bufa +不凡bufan +不妨bufang +不分bufen +部分bufen +不服bufu +不符bufu +不该bugai +不敢bugan +不甘bugan +布告bugao +不够bugou +不顾bugu +不管buguan +不过buguo +不会buhui +补给buji +部件bujian +不借bujie +不尽bujin +不仅bujin +不禁bujin +布景bujing +不久bujiu +补救bujiu +布局buju +不堪bukan +不可buke +不快bukuai +不愧bukui +不理buli +不利buli +不良buliang +不料buliao +步履bulu +不论bulun +部落buluo +不满buman +部门bumen +不免bumian +不能buneng +不怕bupa +补品bupin +不平buping +步枪buqiang +不屈buqu +不然buran +不如buru +不少bushao +不是bushi +不识bushi +部首bushou +部属bushu +部署bushu +补贴butie +不同butong +不妥butuo +部位buwei +部委buwei +不问buwen +不惜buxi +补习buxi +部下buxia +不行buxing +不幸buxing +步行buxing +不朽buxiu +不许buxu +哺养buyang +不要buyao +不宜buyi +不用buyong +哺育buyu +不在buzai +部长buzhang +不振buzhen +不只buzhi +不止buzhi +不知buzhi +不致buzhi +布置buzhi +步骤buzhou +补助buzhu +捕捉buzhuo +步子buzi +不足buzu +博物馆bwg +产c +成c +出c +长c +从c +此c +常c +处c +车c +场c +传c +采c +层c +厂c +才c +次c +虫c +除c +查c +差c +擦ca +拆*ca +嚓ca +礤ca +采cai +才cai +材cai +菜cai +财cai +裁cai +彩cai +猜cai +睬cai +踩cai +蔡cai +参can +残can +蚕can +灿can +餐can +惭can +惨can +孱can +骖can +璨can +粲can +黪can +惨案canan +惨白canbai +残暴canbao +惨怛canda +残废canfei +藏cang +仓cang +苍cang +舱cang +沧cang +苍白cangbai +仓促cangcu +仓库cangku +苍老canglao +苍茫cangmang +藏匿cangni +苍穹cangqiong +沧桑cangsang +苍天cangtian +参观canguan +残骸canhai +残疾canji +参加canjia +参见canjian +残局canju +惨剧canju +参军canjun +参看cankan +参考cankao +残酷canku +惭愧cankui +灿烂canlan +参谋canmou +残缺canque +残忍canren +孱弱canruo +残杀cansha +残生cansheng +蚕食canshi +参数canshu +惨痛cantong +参与canyu +残余canyu +残月canyue +参阅canyue +参赞canzan +惨遭canzao +参战canzhan +参照canzhao +参政canzheng +惨重canzhong +草cao +槽cao +操cao +糙cao +曹cao +嘈cao +漕cao +螬cao +艚cao +草案caoan +草稿caogao +槽糕caogao +操劳caolao +操练caolian +草率caolu +草木caomu +草拟caoni +草签caoqian +操心caoxin +草原caoyuan +嘈杂caoza +操纵caozong +操作caozuo +差不多cbd +成本核算cbhs +出版社cbs +层出不穷ccbq +从长计议ccjy +存储器ccq +长春市ccs +成都市cds +测ce +策ce +侧ce +册ce +厕ce +恻ce +测定ceding +策动cedong +策反cefan +策划cehua +测量celiang +策略celue +侧面cemian +参*cen +岑cen +涔cen +涔涔cencen +层ceng +曾*ceng +蹭ceng +层层cengceng +层次cengci +曾经cengjing +测试ceshi +厕所cesuo +测验ceyan +侧重cezhong +出发点cfd +充分发挥cffh +唱高调cgd +从古到今cgdj +查cha +差cha +插cha +察cha +茶cha +叉cha +茬cha +碴cha +搽cha +岔cha +诧cha +刹*cha +喳*cha +嚓*cha +猹cha +馇cha +汊cha +姹cha +杈cha +楂cha +槎cha +檫cha +锸cha +镲cha +衩cha +查办chaban +差别chabie +差错chacuo +差点chadian +查对chadui +差额chae +查访chafang +察访chafang +查封chafeng +查获chahuo +差*chai +柴chai +拆chai +豺chai +侪chai +钗chai +瘥chai +虿chai +拆穿chaichuan +豺狼chailang +拆散chaisan +差使chaishi +拆卸chaixie +柴油chaiyou +差价chajia +差距chaju +察觉chajue +查看chakan +察看chakan +查考chakao +查明chaming +产chan +单*chan +铲chan +阐chan +搀chan +掺chan +蝉chan +馋chan +谗chan +缠chan +颤chan +冁chan +谄chan +蒇chan +廛chan +忏chan +潺chan +澶chan +孱*chan +羼chan +婵chan +骣chan +觇chan +禅chan +镡chan +蟾chan +躔chan +铲除chanchu +产地chandi +阐发chanfa +搀扶chanfu +长chang +常chang +场chang +厂chang +唱chang +肠chang +昌chang +倡chang +偿chang +畅chang +猖chang +尝chang +敞chang +裳*chang +倘*chang +伥chang +鬯chang +苌chang +菖chang +徜chang +怅chang +惝chang +阊chang +娼chang +嫦chang +昶chang +氅chang +鲳chang +长安changan +常常changchang +长城changcheng +长春changchun +畅达changda +倡导changdao +长度changdu +长短changduan +唱歌changge +常规changgui +长河changhe +场合changhe +偿还changhuan +厂家changjia +常见changjian +长江changjiang +长久changjiu +猖獗changjue +长空changkong +畅快changkuai +猖狂changkuang +场面changmian +长眠changmian +长年changnian +长篇changpian +长期changqi +长驱changqu +常任changren +长沙changsha +厂商changshang +常识changshi +尝试changshi +长寿changshou +常数changshu +场所changsuo +畅谈changtan +长途changtu +怅惘changwang +常委changwei +倘未changwei +常温changwen +常务changwu +畅想changxiang +畅销changxiao +倡议changyi +畅饮changyin +常用changyong +常有changyou +畅游changyou +长远changyuan +厂长changzhang +长征changzheng +厂址changzhi +常驻changzhu +婵娟chanjuan +蝉联chanlian +产量chanliang +缠绵chanmian +阐明chanming +产品chanpin +产权chanquan +缠绕chanrao +产生chansheng +禅师chanshi +阐述chanshu +产物chanwu +产销chanxiao +产业chanye +产值chanzhi +朝chao +超chao +潮chao +巢chao +抄chao +钞chao +嘲chao +吵chao +炒chao +绰*chao +剿*chao +怊chao +晁chao +焯*chao +耖chao +抄报chaobao +超产chaochan +超出chaochu +朝代chaodai +超额chaoe +嘲讽chaofeng +超过chaoguo +朝晖chaohui +超级chaoji +吵架chaojia +潮解chaojie +潮流chaoliu +抄录chaolu +吵闹chaonao +嘲弄chaonong +潮湿chaoshi +潮水chaoshui +抄送chaosong +超脱chaotuo +抄袭chaoxi +朝鲜chaoxian +嘲笑chaoxiao +巢穴chaoxue +朝阳chaoyang +朝野chaoye +超越chaoyue +超支chaozhi +查清chaqing +插曲chaqu +插入charu +查哨chashao +插手chashou +查收chashou +插图chatu +查问chawen +查询chaxun +茶叶chaye +差异chayi +查阅chayue +查证chazheng +岔子chazi +插足chazu +车che +彻che +尺*che +撤che +扯che +掣che +澈che +坼che +砗che +彻底chedi +车祸chehuo +车间chejian +车辆cheliang +陈chen +沉chen +称chen +衬chen +尘chen +臣chen +晨chen +沈*chen +郴chen +辰chen +忱chen +趁chen +伧chen +谌chen +谶chen +抻chen +嗔chen +宸chen +琛chen +榇chen +碜chen +龀chen +尘埃chenai +沉淀chendian +陈腐chenfu +沉浮chenfu +成cheng +程cheng +称cheng +城cheng +承cheng +乘cheng +呈cheng +盛*cheng +撑cheng +诚cheng +橙cheng +惩cheng +澄cheng +逞cheng +骋cheng +秤cheng +丞cheng +埕cheng +噌cheng +枨cheng +柽cheng +塍cheng +瞠cheng +铖cheng +铛cheng +裎cheng +蛏cheng +酲cheng +成败chengbai +承办chengban +惩办chengban +呈报chengbao +承包chengbao +成本chengben +成材chengcai +惩处chengchu +乘除chengchu +承担chengdan +承当chengdang +成都chengdu +程度chengdu +乘法chengfa +惩罚chengfa +成功chenggong +成规chenggui +成果chengguo +称号chenghao +称呼chenghu +成绩chengji +乘机chengji +成家chengjia +成见chengjian +成交chengjiao +承接chengjie +惩戒chengjie +成就chengjiu +乘客chengke +诚恳chengken +成立chengli +乘凉chengliang +成名chengming +成年chengnian +成批chengpi +成品chengpin +诚朴chengpu +逞强chengqiang +澄清chengqing +城区chengqu +成全chengquan +诚然chengran +成人chengren +承认chengren +成色chengse +成事chengshi +诚实chengshi +城市chengshi +承受chengshou +成熟chengshu +成为chengwei +称谓chengwei +成文chengwen +呈现chengxian +呈献chengxian +城乡chengxiang +成效chengxiao +称心chengxin +诚心chengxin +程序chengxu +乘虚chengxu +撑腰chengyao +诚意chengyi +成语chengyu +成员chengyuan +称赞chengzan +成长chengzhang +城镇chengzhen +称职chengzhi +诚挚chengzhi +趁机chenji +沉积chenji +陈迹chenji +沉浸chenjin +沉静chenjing +陈旧chenjiu +陈列chenlie +沉沦chenlun +沉闷chenmen +沉湎chenmian +沉默chenmo +沉溺chenni +陈设chenshe +陈述chenshu +陈说chenshuo +沉思chensi +沉痛chentong +衬托chentuo +沉吟chenyin +衬映chenying +趁早chenzao +沉重chenzhong +沉着chenzhuo +车皮chepi +扯皮chepi +撤退chetui +撤消chexiao +车站chezhan +撤职chezhi +持chi +尺chi +齿chi +吃chi +赤chi +池chi +迟chi +翅chi +斥chi +耻chi +痴chi +匙chi +弛chi +驰chi +侈chi +炽chi +傺chi +坻chi +墀chi +茌chi +叱chi +哧chi +啻chi +嗤chi +彳chi +饬chi +媸chi +敕chi +眵chi +鸱chi +瘛chi +褫chi +蚩chi +螭chi +笞chi +篪chi +豉chi +踟chi +魑chi +翅膀chibang +赤诚chicheng +驰骋chicheng +尺寸chicun +迟到chidao +赤道chidao +尺度chidu +迟钝chidun +吃喝chihe +迟缓chihuan +吃紧chijin +吃惊chijing +持久chijiu +吃苦chiku +吃亏chikui +吃力chili +炽烈chilie +齿轮chilun +持平chiping +痴情chiqing +炽热chire +耻辱chiru +池塘chitang +耻笑chixiao +赤心chixin +痴心chixin +迟疑chiyi +迟早chizao +斥责chize +叱咤chizha +持重chizhong +吃重chizhong +赤字chizi +催化剂chj +种*chong +虫chong +重*chong +充chong +冲chong +崇chong +涌*chong +宠chong +茺chong +忡chong +憧chong +铳chong +舂chong +艟chong +宠爱chongai +崇拜chongbai +充斥chongchi +冲刺chongci +冲淡chongdan +充当chongdang +重叠chongdie +冲动chongdong +宠儿chonger +充分chongfen +冲锋chongfeng +重复chongfu +崇高chonggao +重合chonghe +重婚chonghun +冲击chongji +重建chongjian +崇敬chongjing +憧憬chongjing +充满chongman +充沛chongpei +冲破chongpo +重庆chongqing +崇尚chongshang +重申chongshen +充实chongshi +冲刷chongshua +冲天chongtian +冲突chongtu +重温chongwen +冲洗chongxi +重新chongxin +重演chongyan +重印chongyin +充裕chongyu +充足chongzu +抽chou +仇chou +臭chou +酬chou +畴chou +踌chou +稠chou +愁chou +筹chou +绸chou +瞅chou +丑chou +俦chou +帱chou +惆chou +瘳chou +雠chou +筹办chouban +筹备choubei +惆怅chouchang +抽搐chouchu +踌躇chouchu +筹措choucuo +抽调choudiao +丑恶choue +仇恨chouhen +丑化chouhua +筹划chouhua +筹集chouji +筹建choujian +酬金choujin +抽空choukong +酬劳choulao +丑陋choulou +筹码chouma +稠密choumi +筹谋choumou +愁容chourong +抽象chouxiang +酬谢chouxie +抽噎chouye +出chu +处chu +除chu +初chu +础chu +触chu +楚chu +锄chu +储chu +畜*chu +橱chu +厨chu +躇chu +雏chu +滁chu +矗chu +搐chu +亍chu +刍chu +怵chu +憷chu +绌chu +杵chu +楮chu +樗chu +褚chu +蜍chu +蹰chu +黜chu +揣chuai +搋chuai +啜chuai +嘬*chuai +膪chuai +踹chuai +揣度chuaidu +揣摩chuaimo +传chuan +船chuan +穿chuan +串chuan +川chuan +椽chuan +喘chuan +舛chuan +遄chuan +巛chuan +氚chuan +钏chuan +舡chuan +传遍chuanbian +传标chuanbiao +传播chuanbo +船舶chuanbo +船埠chuanbu +穿插chuancha +传达chuanda +传单chuandan +传导chuandao +传递chuandi +床chuang +创chuang +窗chuang +闯chuang +疮chuang +幢chuang +怆chuang +创办chuangban +闯荡chuangdang +窗户chuanghu +创见chuangjian +创建chuangjian +闯劲chuangjin +创举chuangju +窗口chuangkou +创立chuangli +窗帘chuanglian +创始chuangshi +创新chuangxin +创业chuangye +创造chuangzao +创作chuangzuo +串联chuanlian +喘气chuanqi +传奇chuanqi +传染chuanran +传授chuanshou +传输chuanshu +传述chuanshu +传说chuanshuo +传送chuansong +传统chuantong +串通chuantong +喘息chuanxi +传讯chuanxun +传扬chuanyang +传阅chuanyue +传真chuanzhen +船只chuanzhi +穿着chuanzhuo +出版chuban +出榜chubang +储备chubei +出兵chubing +初步chubu +储藏chucang +出差chucha +出产chuchan +出场chuchang +出厂chuchang +处处chuchu +橱窗chuchuang +初次chuci +储存chucun +初等chudeng +出动chudong +触动chudong +出发chufa +触发chufa +除法chufa +处罚chufa +触犯chufan +出访chufang +除非chufei +处分chufen +出轨chugui +出海chuhai +吹chui +垂chui +锤chui +椎*chui +炊chui +捶chui +陲chui +棰chui +槌chui +吹棒chuibang +吹风chuifeng +吹拂chuifu +锤炼chuilian +吹牛chuiniu +垂青chuiqing +垂涎chuixian +吹嘘chuixu +垂直chuizhi +初级chuji +出击chuji +出界chujie +出境chujing +处境chujing +处决chujue +触觉chujue +除开chukai +出口chukou +出来chulai +除了chule +出力chuli +处理chuli +矗立chuli +初恋chulian +出笼chulong +出路chulu +出马chuma +出卖chumai +出面chumian +出名chuming +除名chuming +出没chumo +春chun +纯chun +醇chun +椿chun +唇chun +淳chun +蠢chun +莼chun +鹑chun +蝽chun +出纳chuna +春播chunbo +纯粹chuncui +纯度chundu +春分chunfen +春风chunfeng +春耕chungeng +春光chunguang +醇厚chunhou +春辉chunhui +春季chunji +春节chunjie +纯洁chunjie +纯净chunjing +纯利chunli +纯朴chunpu +春秋chunqiu +春色chunse +春笋chunsun +春天chuntian +处女chunu +触怒chunu +春意chunyi +纯真chunzhen +纯正chunzheng +戳chuo +绰chuo +啜*chuo +辍chuo +踔chuo +龊chuo +戳穿chuochuan +绰号chuohao +啜泣chuoqi +出品chupin +出奇chuqi +初期chuqi +出勤chuqin +出去chuqu +出让churang +出任churen +出入churu +出色chuse +出身chushen +出神chushen +出生chusheng +畜生chusheng +出事chushi +出世chushi +处世chushi +厨师chushi +出售chushou +处所chusuo +出庭chuting +锄头chutou +出土chutu +出外chuwai +除外chuwai +出席chuxi +出息chuxi +除夕chuxi +出现chuxian +初小chuxiao +雏形chuxing +储蓄chuxu +刍议chuyi +处于chuyu +初战chuzhan +处长chuzhang +出诊chuzhen +出征chuzheng +处置chuzhi +初中chuzhong +出租chuzu +此ci +次ci +刺ci +磁ci +雌ci +词ci +茨ci +疵ci +辞ci +慈ci +瓷ci +赐ci +伺*ci +兹*ci +茈ci +呲ci +祠ci +鹚ci +糍ci +慈爱ciai +辞别cibie +磁场cichang +磁带cidai +磁道cidao +此地cidi +词典cidian +辞典cidian +刺耳cier +词根cigen +刺骨cigu +此后cihou +词汇cihui +刺激ciji +赐教cijiao +此刻cike +刺客cike +词类cilei +辞令ciling +磁盘cipan +次品cipin +辞去ciqu +刺杀cisha +此时cishi +次数cishu +辞书cishu +词素cisu +祠堂citang +辞退citui +此外ciwai +慈祥cixiang +辞行cixing +词性cixing +雌雄cixiong +次序cixu +词序cixu +刺眼ciyan +次要ciyao +词语ciyu +赐予ciyu +此致cizhi +辞职cizhi +词缀cizhui +词组cizu +超级大国cjdg +参考书cks +参考消息ckxx +参考资料ckzl +触类旁通clpt +藏龙卧虎clwh +参谋长cmc +聪明才智cmcz +出谋划策cmhc +从难从严cncy +从cong +丛cong +聪cong +葱cong +囱cong +匆cong +苁cong +淙cong +骢cong +琮cong +璁cong +从此congci +匆匆congcong +匆促congcu +从而conger +从犯congfan +聪慧conghui +从来conglai +丛林conglin +匆忙congmang +聪明congming +从前congqian +从容congrong +从事congshi +丛书congshu +从速congsu +从新congxin +从严congyan +聪颖congying +葱郁congyu +从中congzhong +凑cou +楱cou +辏cou +腠cou +凑合couhe +凑巧couqiao +成品率cpl +成千上万cqsw +从容不迫crbp +承认错误crcw +趁热打铁crdt +措手不及csbj +出生率csl +长沙市css +炊事员csy +彻头彻尾ctcw +垂头丧气ctsq +粗cu +促cu +醋cu +簇cu +卒*cu +蔟cu +徂cu +猝cu +殂cu +酢cu +蹙cu +蹴cu +篡cuan +蹿cuan +窜cuan +攒*cuan +汆cuan +撺cuan +爨cuan +镩cuan +篡夺cuanduo +窜犯cuanfan +篡改cuangai +篡权cuanquan +粗暴cubao +粗糙cucao +粗犷cuguang +催cui +脆cui +淬cui +粹cui +摧cui +衰*cui +崔cui +瘁cui +翠cui +萃cui +啐cui +悴cui +璀cui +榱cui +毳cui +隹cui +摧残cuican +脆弱cuiruo +促进cujin +存cun +村cun +寸cun +蹲*cun +忖cun +皴cun +存储cunchu +存档cundang +存放cunfang +存款cunkuan +村落cunluo +存亡cunwang +存在cunzai +村镇cunzhen +村庄cunzhuang +村子cunzi +错cuo +措cuo +撮cuo +磋cuo +搓cuo +挫cuo +厝cuo +嵯cuo +脞cuo +锉cuo +矬cuo +痤cuo +瘥*cuo +鹾cuo +蹉cuo +错案cuoan +挫败cuobai +错处cuochu +措辞cuoci +错怪cuoguai +错过cuoguo +撮合cuohe +错觉cuojue +磋商cuoshang +挫伤cuoshang +措施cuoshi +错误cuowu +挫折cuozhe +错综cuozong +粗浅cuqian +促使cushi +粗俗cusu +粗心cuxin +粗壮cuzhuang +常委会cwh +崇文区cwq +常务委员会cwwh +乘务员cwy +诚心诚意cxcy +程序控制cxkz +程序设计cxsj +长远利益cyly +朝阳区cyq +财政部czb +错综复杂czfz +操之过急czgj +出租汽车czqc +此之外czw +财政危机czwj +创造性czx +操作系统czxt +操作员czy +持之以恒czyh +的d +大d +地d +动d +到d +对d +度d +多d +电d +党d +得d +定d +等d +斗d +当d +队d +都d +点d +代d +道d +大da +打da +达da +答da +搭da +塔*da +瘩da +耷da +哒da +嗒da +怛da +妲da +沓*da +疸da +褡da +笪da +靼da +鞑da +答案daan +打败dabai +大办daban +大半daban +打扮daban +答辩dabian +大伯dabo +大部dabu +达成dacheng +大胆dadan +搭档dadang +大道dadao +达到dadao +打倒dadao +大地dadi +大敌dadi +大抵dadi +打断daduan +大队dadui +大多daduo +大凡dafan +大夫dafu +大幅dafu +答复dafu +大概dagai +大纲dagang +大国daguo +大海dahai +大好dahao +大河dahe +大亨daheng +大会dahui +大*dai +代dai +带dai +待dai +袋dai +戴dai +呆dai +歹dai +傣dai +殆dai +贷dai +逮dai +怠dai +埭dai +甙dai +呔dai +岱dai +迨dai +骀dai +绐dai +玳dai +黛dai +呆板daiban +代表daibiao +逮捕daibu +逮逋daibu +代词daici +带动daidong +怠工daigong +代价daijia +贷款daikuan +带来dailai +代理daili +带领dailing +带路dailu +黛绿dailu +代码daima +怠慢daiman +待命daiming +代数daishu +代替daiti +带头daitou +歹徒daitu +待遇daiyu +呆滞daizhi +呆子daizi +打击daji +大家dajia +打搅dajiao +大街dajie +大捷dajie +打劫dajie +搭救dajiu +大局daju +答卷dajuan +打开dakai +耷拉dala +大力dali +大连dalian +大量daliang +打量daliang +大陆dalu +大略dalue +大妈dama +单dan +但dan +弹dan +担dan +石*dan +蛋dan +淡dan +胆dan +氮dan +丹dan +旦dan +耽dan +郸dan +掸dan +惮dan +诞dan +儋dan +萏dan +啖dan +澹*dan +殚dan +赕dan +眈dan +疸dan +瘅dan +聃dan +箪dan +大脑danao +担保danbao +单薄danbao +淡薄danbao +单产danchan +诞辰danchen +单纯danchun +单词danci +担当dandang +单调dandiao +单独dandu +单方danfang +担负danfu +党dang +当dang +档dang +挡dang +荡dang +谠dang +凼dang +菪dang +宕dang +砀dang +裆dang +单干dangan +胆敢dangan +档案dangan +当场dangchang +当初dangchu +当代dangdai +当地dangdi +单个dange +耽搁dange +党风dangfeng +党纲danggang +党纪dangji +党籍dangji +当即dangji +当家dangjia +当今dangjin +当局dangju +当量dangliang +当面dangmian +党内dangnei +当年dangnian +党派dangpai +当铺dangpu +当前dangqian +当然dangran +当日dangri +当时dangshi +当天dangtian +当头dangtou +党团dangtuan +当晚dangwan +党委dangwei +当先dangxian +党校dangxiao +当心dangxin +党性dangxing +荡漾dangyang +党员dangyuan +当月dangyue +党章dangzhang +当真dangzhen +党政dangzheng +当政dangzheng +当中dangzhong +当众dangzhong +当做dangzuo +单价danjia +担架danjia +胆量danliang +胆略danlue +淡漠danmo +胆怯danqie +丹青danqing +担任danren +单身danshen +诞生dansheng +但是danshi +胆识danshi +单体danti +丹田dantian +单位danwei +耽误danwu +单项danxiang +胆小danxiao +担心danxin +淡雅danya +弹药danyao +单一danyi +单元danyuan +但愿danyuan +单质danzhi +担子danzi +掸子danzi +单字danzi +到dao +道dao +导dao +刀dao +倒dao +稻dao +岛dao +捣dao +盗dao +蹈dao +祷dao +悼dao +叨dao +帱*dao +忉dao +氘dao +焘*dao +纛dao +倒闭daobi +到处daochu +悼词daoci +到达daoda +导弹daodan +道德daode +到底daodi +倒戈daoge +捣鬼daogui +捣毁daohui +到来daolai +到了daole +道理daoli +倒立daoli +道路daolu +捣乱daoluan +倒霉daomei +叨念daonian +道歉daoqian +刀枪daoqiang +盗窃daoqie +到时daoshi +导师daoshi +倒数daoshu +导体daoti +倒退daotui +导演daoyan +道义daoyi +盗用daoyong +岛屿daoyu +导致daozhi +大批dapi +大破dapo +打破dapo +大气daqi +大庆daqing +打扰darao +打扫dasao +大厦dasha +搭讪dashan +大赦dashe +大使dashi +大事dashi +大师dashi +大势dashi +大肆dasi +打算dasuan +大体dati +大厅dating +打听dating +大同datong +大小daxiao +大写daxie +答谢daxie +大选daxuan +大学daxue +大业daye +达因dayin +打印dayin +答应daying +大于dayu +大院dayuan +大约dayue +打仗dazhang +大致dazhi +大众dazhong +打字dazi +代办处dbc +得不偿失dbcs +大部分dbf +电报挂号dbgh +大不了dbl +大步流星dblx +对不起dbq +代表团dbt +电冰箱dbx +东城区dcq +到此为止dcwz +独创性dcx +调查研究dcyj +打成一片dcyp +打电话ddh +电动机ddj +对得起ddq +大多数dds +的de +得de +地*de +德de +底*de +锝de +得逞decheng +的当dedang +得当dedang +得到dedao +得分defen +德国deguo +得奖dejiang +得救dejiu +得了dele +得力deli +等deng +灯deng +登deng +邓deng +澄*deng +蹬deng +瞪deng +凳deng +噔deng +嶝deng +戥deng +磴deng +镫deng +簦deng +登场dengchang +等待dengdai +等到dengdao +灯光dengguang +等候denghou +等级dengji +登记dengji +等价dengjia +灯具dengju +登门dengmen +灯谜dengmi +登攀dengpan +登山dengshan +灯塔dengta +登台dengtai +等同dengtong +等闲dengxian +等于dengyu +登载dengzai +得胜desheng +得失deshi +得体deti +德行dexing +得以deyi +得意deyi +德育deyu +得志dezhi +得知dezhi +得罪dezui +大幅度dfd +多方面dfm +单方面dfm +电风扇dfs +大规模dgm +多功能dgn +大公无私dgws +帝国主义dgzy +电话号码dhhm +电化教育dhjy +大会堂dht +的*di +地di +第di +低di +敌di +底di +提*di +帝di +抵di +滴di +弟di +递di +堤di +迪di +笛di +狄di +涤di +翟di +嫡di +蒂di +缔di +氐di +籴di +诋di +谛di +邸di +坻*di +荻di +嘀di +娣di +绨di +柢di +棣di +觌di +砥di +碲di +睇di +镝di +羝di +骶di +嗲dia +电dian +点dian +垫dian +典dian +店dian +颠dian +淀dian +掂dian +滇dian +碘dian +靛dian +佃dian +甸dian +惦dian +奠dian +殿dian +阽dian +坫dian +巅dian +玷dian +钿dian +癜dian +癫dian +簟dian +踮dian +电报dianbao +点播dianbo +电场dianchang +电车dianche +电池dianchi +电传dianchuan +颠倒diandao +电灯diandeng +点滴diandi +奠定dianding +电动diandong +典范dianfan +淀粉dianfen +垫付dianfu +颠覆dianfu +电感diangan +典故diangu +电荷dianhe +电弧dianhu +电话dianhua +电汇dianhui +电机dianji +电极dianji +奠基dianji +惦记dianji +典籍dianji +点将dianjiang +电解dianjie +殿军dianjun +癫狂diankuang +电缆dianlan +电力dianli +电离dianli +典礼dianli +电流dianliu +电路dianlu +电脑diannao +电能dianneng +店铺dianpu +电气dianqi +电器dianqi +点燃dianran +电容dianrong +电扇dianshan +电视dianshi +电台diantai +电梯dianti +点头diantou +电网dianwang +电位dianwei +玷污dianwu +殿下dianxia +电线dianxian +癫痫dianxian +电信dianxin +典型dianxing +电讯dianxun +电压dianya +电影dianying +店员dianyuan +点阵dianzhen +点缀dianzhui +电子dianzi +点子dianzi +电阻dianzu +调diao +掉diao +吊diao +鸟*diao +碉diao +叼diao +雕diao +凋diao +刁diao +钓diao +铞diao +铫diao +貂diao +鲷diao +碉堡diaobao +凋敝diaobi +调查diaocha +吊车diaoche +调动diaodong +调度diaodu +钓饵diaoer +调换diaohuan +掉换diaohuan +雕刻diaoke +调令diaoling +刁难diaonan +调遣diaoqian +调任diaoren +雕塑diaosu +吊唁diaoyan +调用diaoyong +钓鱼diaoyu +调子diaozi +第八diba +地板diban +地步dibu +低沉dichen +抵触dichu +抵达dida +地带didai +低档didang +抵挡didang +地道didao +弟弟didi +地点didian +地段diduan +敌对didui +迭die +跌die +爹die +碟die +蝶die +谍die +叠die +垤die +堞die +揲die +喋die +牒die +瓞die +耋die +踮*die +蹀die +鲽die +迭起dieqi +第二dier +地方difang +低估digu +敌国diguo +帝国diguo +敌后dihou +诋毁dihui +低级diji +递加dijia +递减dijian +地窖dijiao +递交dijiao +缔交dijiao +缔结dijie +第九dijiu +敌军dijun +抵抗dikang +地牢dilao +地理dili +低劣dilie +第六diliu +低落diluo +地貌dimao +地面dimian +抵命diming +定ding +顶ding +钉ding +丁ding +订ding +盯ding +叮ding +鼎ding +锭ding +仃ding +啶ding +玎ding +腚ding +碇ding +町ding +铤*ding +疔ding +耵ding +酊ding +定案dingan +定产dingchan +丁当dingdang +顶点dingdian +定夺dingduo +定额dinge +顶峰dingfeng +顶锋dingfeng +定购dinggou +订购dinggou +订户dinghu +定货dinghuo +订货dinghuo +定价dingjia +定局dingju +定居dingju +定理dingli +订立dingli +鼎立dingli +定量dingliang +定律dinglu +定期dingqi +定然dingran +盯梢dingshao +定时dingshi +顶替dingti +定性dingxing +定型dingxing +定义dingyi +定语dingyu +定员dingyuan +订阅dingyue +订正dingzheng +叮嘱dingzhu +顶撞dingzhuang +钉子dingzi +嫡派dipai +地盘dipan +第七diqi +嫡亲diqin +敌情diqing +地球diqiu +地区diqu +的确dique +敌人diren +第三disan +地势dishi +第十dishi +滴水dishui +第四disi +地铁ditie +地图ditu +丢diu +铥diu +丢掉diudiao +丢脸diulian +丢失diushi +地位diwei +敌伪diwei +第五diwu +嫡系dixi +底细dixi +地下dixia +低下dixia +底下dixia +地形dixing +弟兄dixiong +第一diyi +敌意diyi +地域diyu +抵御diyu +缔造dizao +递增dizeng +地震dizhen +敌阵dizhen +地质dizhi +地址dizhi +抵制dizhi +底子dizi +弟子dizi +党纪国法djgf +当机立断djld +多劳多得dldd +大力发展dlfz +大力加强dljq +大力开展dlkz +独立自主dlzz +多面手dms +对内搞活dngh +多年来dnl +东南亚dny +动dong +东dong +冬dong +懂dong +洞dong +冻dong +董dong +栋dong +侗dong +恫dong +垌dong +咚dong +岽dong +峒dong +氡dong +胨dong +胴dong +硐dong +鸫dong +东北dongbei +东边dongbian +东部dongbu +洞察dongcha +动词dongci +动荡dongdang +懂得dongde +东方dongfang +东风dongfeng +动工donggong +东海donghai +恫吓donghe +动机dongji +冬季dongji +东家dongjia +冻结dongjie +动静dongjing +东京dongjing +动力dongli +动量dongliang +栋梁dongliang +动乱dongluan +动脉dongmai +东南dongnan +东欧dongou +动人dongren +动身dongshen +董事dongshi +动手dongshou +动态dongtai +冬天dongtian +动听dongting +动物dongwu +东西dongxi +洞悉dongxi +动向dongxiang +动心dongxin +东亚dongya +东洋dongyang +动摇dongyao +动用dongyong +动员dongyuan +动辄dongzhe +动作dongzuo +斗dou +都*dou +豆dou +读*dou +兜dou +抖dou +陡dou +逗dou +痘dou +蔸dou +窦dou +蚪dou +篼dou +兜风doufeng +逗号douhao +逗留douliu +斗室doushi +兜售doushou +斗争douzheng +斗志douzhi +斗智douzhi +抖嘴douzui +打破常规dpcg +地平线dpx +电器化dqh +待人接物drjw +第三产业dscy +第十二届dsej +大使馆dsg +到时候dsh +电视机dsj +多少年dsn +大失所望dssw +电视台dst +低三下四dsxs +第十一届dsyj +大踏步dtb +到头来dtl +大体上dts +大同小异dtxy +度du +都du +毒du +独du +读du +渡du +杜du +堵du +镀du +顿du +督du +犊du +睹du +赌du +肚du +妒du +芏du +嘟du +渎du +椟du +牍du +蠹du +笃du +髑du +黩du +断duan +端duan +段duan +短duan +锻duan +缎duan +椴duan +煅duan +簖duan +短波duanbo +短处duanchu +短促duancu +断定duanding +短短duanduan +断交duanjiao +断绝duanjue +锻练duanlian +锻炼duanlian +短路duanlu +段落duanluo +短评duanping +短期duanqi +短缺duanque +断然duanran +煅烧duanshao +断送duansong +短途duantu +端午duanwu +端详duanxiang +短小duanxiao +断言duanyan +端阳duanyang +短语duanyu +短暂duanzan +端正duanzheng +端庄duanzhuang +读报dubao +读本duben +赌博dubo +独裁ducai +毒草ducao +独唱duchang +独创duchuang +督促ducu +毒打duda +独到dudao +度过duguo +毒害duhai +毒化duhua +都会duhui +对dui +队dui +堆dui +敦*dui +兑dui +怼dui +憝dui +碓dui +对比duibi +队部duibu +对策duice +对称duichen +对此duici +对待duidai +对等duideng +对调duidiao +对方duifang +对付duifu +对话duihua +兑换duihuan +对讲duijiang +对抗duikang +对口duikou +对垒duilei +对立duili +对联duilian +队列duilie +对流duiliu +对面duimian +对内duinei +对偶duiou +对手duishou +对数duishu +对外duiwai +队伍duiwu +兑现duixian +对象duixiang +对应duiying +对于duiyu +队员duiyuan +堆栈duizhan +队长duizhang +对照duizhao +对证duizheng +对质duizhi +对峙duizhi +对准duizhun +镀金dujin +杜绝dujue +渡口dukou +都来dulai +独立duli +度量duliang +盾dun +吨dun +顿dun +蹲dun +敦dun +墩dun +囤dun +钝dun +遁dun +沌dun +炖dun +砘dun +礅dun +盹dun +镦dun +趸dun +蹲点dundian +顿号dunhao +囤积dunji +遁迹dunji +钝角dunjiao +顿时dunshi +敦实dunshi +多duo +度*duo +夺duo +朵duo +掇duo +哆duo +垛duo +躲duo +跺duo +舵duo +剁duo +惰duo +堕duo +驮*duo +咄duo +哚duo +沲duo +缍duo +柁duo +铎duo +裰duo +踱duo +多半duoban +躲避duobi +多变duobian +多边duobian +躲藏duocang +多次duoci +夺得duode +多端duoduan +多方duofang +躲开duokai +多亏duokui +夺魁duokui +堕落duoluo +多么duome +夺目duomu +多年duonian +多情duoqing +夺取duoqu +多少duoshao +多事duoshi +掇拾duoshi +舵手duoshou +多数duoshu +多谢duoxie +多心duoxin +惰性duoxing +多样duoyang +多余duoyu +多种duozhong +肚皮dupi +毒品dupin +毒气duqi +读取duqu +度日duri +读入duru +堵塞duse +毒蛇dushe +都是dushi +毒手dushou +读数dushu +读书dushu +毒素dusu +独特dute +读物duwu +毒药duyao +独占duzhan +读者duzhe +毒汁duzhi +渎职duzhi +赌注duzhu +杜撰duzhuan +独自duzi +党委会dwh +对外开放dwkf +敌我矛盾dwmd +对外贸易dwmy +大无畏dww +动物园dwy +当务之急dwzj +邓小平dxp +大学生dxs +大显身手dxss +大西洋dxy +大跃进dyj +打印机dyj +大有可为dykw +待业青年dyqn +掉以轻心dyqx +电影院dyy +大洋洲dyz +大有作为dyzw +党支部dzb +多种多样dzdy +党政机关dzjg +多种经营dzjy +断章取义dzqy +大自然dzr +德智体dzt +电子学dzx +党中央dzy +而e +二e +尔e +儿e +恶e +额e +恩e +俄e +耳e +饵e +蛾e +饿e +峨e +鹅e +讹e +娥e +厄e +扼e +遏e +鄂e +噩e +谔e +垩e +苊e +莪e +萼e +呃e +愕e +屙e +婀e +轭e +腭e +锇e +锷e +鹗e +颚e +鳄e +恶霸eba +恶毒edu +恶感egan +恶棍egun +噩耗ehao +恶化ehua +诶ei +二极管ejg +二进制ejz +恶劣elie +鹅毛emao +噩梦emeng +恶魔emo +耳目一新emyx +恩en +蒽en +摁en +恩爱enai +恩赐enci +恩典endian +恩惠enhui +恩情enqing +而er +二er +尔er +儿er +耳er +饵er +洱er +贰er +佴er +迩er +珥er +铒er +鸸er +鲕er +耳朵erduo +儿歌erge +耳光erguang +而后erhou +尔后erhou +二届erjie +而今erjin +而况erkuang +而且erqie +而是ershi +儿童ertong +儿戏erxi +而已eryi +耳语eryu +二月eryue +儿子erzi +扼杀esha +额外ewai +扼腕ewan +额外负担ewfd +恶习exi +恶心exin +恶性exing +恶性循环exxh +扼要eyao +厄运eyun +讹诈ezha +遏止ezhi +分f +发f +方f +法f +反f +放f +复f +风f +防f +非f +服f +肥f +副f +粉f +府f +夫f +负f +封f +富f +翻f +发fa +法fa +阀fa +乏fa +伐fa +罚fa +筏fa +珐fa +垡fa +砝fa +发报fabao +法宝fabao +发表fabiao +发布fabu +发财facai +发愁fachou +发出fachu +发达fada +发电fadian +法典fadian +法定fading +发动fadong +发放fafang +发奋fafen +发愤fafen +法官faguan +法规fagui +法国faguo +发慌fahuang +发挥fahui +发火fahuo +发给faji +发迹faji +法纪faji +发家fajia +发奖fajiang +发酵fajiao +罚金fajin +发觉fajue +发掘fajue +罚款fakuan +发狂fakuang +法郎falang +法令faling +法律falu +发落faluo +发明faming +反fan +翻fan +范fan +犯fan +饭fan +繁fan +泛fan +番fan +凡fan +烦fan +返fan +藩fan +帆fan +樊fan +矾fan +钒fan +贩fan +蕃fan +蘩fan +幡fan +梵fan +燔fan +畈fan +蹯fan +翻版fanban +反比fanbi +反驳fanbo +帆布fanbu +反常fanchang +范畴fanchou +犯愁fanchou +帆船fanchuan +饭店fandian +反动fandong +翻动fandong +反对fandui +繁多fanduo +反而faner +反复fanfu +方fang +放fang +防fang +访fang +房fang +纺fang +仿fang +妨fang +芳fang +肪fang +坊fang +邡fang +彷*fang +枋fang +钫fang +舫fang +鲂fang +妨碍fangai +方案fangan +反感fangan +防备fangbei +方便fangbian +防潮fangchao +方程fangcheng +放大fangda +放荡fangdang +防盗fangdao +方法fangfa +防范fangfan +防风fangfeng +防腐fangfu +仿佛fangfu +妨害fanghai +防护fanghu +防火fanghuo +放假fangjia +房间fangjian +方面fangmian +放牧fangmu +返工fangong +反攻fangong +放屁fangpi +放弃fangqi +防区fangqu +放任fangren +放哨fangshao +放射fangshe +方式fangshi +防守fangshou +放肆fangsi +放松fangsong +仿宋fangsong +翻滚fangun +方位fangwei +防卫fangwei +访问fangwen +房屋fangwu +放下fangxia +防线fangxian +方向fangxiang +芳香fangxiang +仿效fangxiao +放心fangxin +放行fangxing +方言fangyan +防疫fangyi +防御fangyu +仿造fangzao +仿照fangzhao +方针fangzhen +仿真fangzhen +防治fangzhi +仿制fangzhi +放置fangzhi +防止fangzhi +纺织fangzhi +房子fangzi +放纵fangzong +房租fangzu +番号fanhao +繁华fanhua +反悔fanhui +返回fanhui +反击fanji +反抗fankang +反馈fankui +泛滥fanlan +范例fanli +凡例fanli +翻脸fanlian +贩卖fanmai +繁忙fanmang +烦闷fanmen +反面fanmian +反目fanmu +烦恼fannao +反叛fanpan +犯人fanren +繁荣fanrong +反射fanshe +翻身fanshen +繁盛fansheng +凡是fanshi +凡事fanshi +繁琐fansuo +烦琐fansuo +翻腾fanteng +繁体fanti +饭桶fantong +发怒fanu +饭碗fanwan +范围fanwei +反问fanwen +反响fanxiang +返销fanxiao +反省fanxing +翻修fanxiu +繁衍fanyan +翻译fanyi +翻印fanyin +反应fanying +反映fanying +繁育fanyu +翻越fanyue +翻阅fanyue +贩运fanyun +繁杂fanza +烦燥fanzao +反正fanzheng +反之fanzhi +繁殖fanzhi +繁重fanzhong +贩子fanzi +犯罪fanzui +发起faqi +法权faquan +发射fashe +发生fasheng +发誓fashi +发售fashou +法庭fating +发现faxian +发泄faxie +发行faxing +发言fayan +发扬fayang +法医fayi +发育fayu +发源fayuan +法院fayuan +法则faze +发展fazhan +法制fazhi +法治fazhi +发作fazuo +奋不顾身fbgs +分崩离析fblx +副产品fcp +发电机fdj +发动机fdj +反动派fdp +分道扬镳fdyb +非fei +肥fei +飞fei +费fei +废fei +肺fei +沸fei +菲fei +匪fei +啡fei +诽fei +吠fei +芾fei +狒fei +悱fei +淝fei +妃fei +绯fei +榧fei +腓fei +斐fei +扉fei +镄fei +痱fei +蜚fei +篚fei +翡fei +霏fei +鲱fei +匪帮feibang +诽谤feibang +飞奔feiben +非常feichang +飞驰feichi +废除feichu +非但feidan +非得feide +沸点feidian +非法feifa +非凡feifan +肺腑feifu +绯红feihong +废话feihua +飞机feiji +飞溅feijian +费解feijie +费劲feijin +飞快feikuai +费力feili +肥料feiliao +废料feiliao +肥胖feipang +废品feipin +废弃feiqi +费神feishen +废水feishui +飞速feisu +沸腾feiteng +匪徒feitu +肥沃feiwo +废物feiwu +飞舞feiwu +飞翔feixiang +费心feixin +飞行feixing +废墟feixu +飞扬feiyang +扉页feiye +非议feiyi +费用feiyong +飞跃feiyue +肥皂feizao +飞涨feizhang +废止feizhi +非洲feizhou +妃子feizi +分fen +粉fen +奋fen +份fen +粪fen +纷fen +芬fen +愤fen +酚fen +吩fen +氛fen +坟fen +焚fen +汾fen +忿fen +偾fen +瀵fen +玢*fen +棼fen +鲼fen +鼢fen +分贝fenbei +分辩fenbian +分辨fenbian +粪便fenbian +分别fenbie +分部fenbu +分布fenbu +分册fence +分寸fencun +分担fendan +分得fende +分店fendian +奋斗fendou +分队fendui +分发fenfa +奋发fenfa +纷纷fenfen +吩咐fenfu +风feng +封feng +蜂feng +丰feng +缝feng +峰feng +锋feng +疯feng +奉feng +枫feng +烽feng +逢feng +冯feng +讽feng +凤feng +俸feng +酆feng +葑feng +唪feng +沣feng +砜feng +风暴fengbao +丰碑fengbei +封闭fengbi +风波fengbo +丰产fengchan +奉承fengcheng +讽刺fengci +封存fengcun +风度fengdu +分割fenge +分隔fenge +风发fengfa +风帆fengfan +丰富fengfu +奉告fenggao +风格fengge +奉公fenggong +风光fengguang +风寒fenghan +奉还fenghuan +凤凰fenghuang +烽火fenghuo +封建fengjian +风景fengjing +疯狂fengkuang +风浪fenglang +风力fengli +风流fengliu +丰满fengman +锋芒fengmang +风貌fengmao +奉命fengming +丰年fengnian +分工fengong +奉陪fengpei +风气fengqi +风情fengqing +风趣fengqu +奉劝fengquan +缝纫fengren +风骚fengsao +风沙fengsha +风尚fengshang +风声fengsheng +丰盛fengsheng +丰收fengshou +风霜fengshuang +风水fengshui +丰硕fengshuo +奉祀fengsi +风俗fengsu +封锁fengsuo +疯瘫fengtan +封条fengtiao +风头fengtou +分管fenguan +风味fengwei +缝隙fengxi +风险fengxian +奉献fengxian +风向fengxiang +风行fengxing +奉行fengxing +蜂拥fengyong +风云fengyun +风韵fengyun +风灾fengzai +疯子fengzi +风姿fengzi +分号fenhao +分毫fenhao +分红fenhong +粉红fenhong +分化fenhua +分会fenhui +焚毁fenhui +分级fenji +分解fenjie +分界fenjie +奋进fenjin +分居fenju +分开fenkai +愤慨fenkai +分类fenlei +分离fenli +奋力fenli +分量fenliang +分裂fenlie +纷乱fenluan +分娩fenmian +分秒fenmiao +分明fenming +粉末fenmo +坟墓fenmu +愤怒fennu +分派fenpai +分配fenpei +分批fenpi +分期fenqi +分歧fenqi +奋起fenqi +分清fenqing +分区fenqu +分散fensan +焚烧fenshao +分数fenshu +分说fenshuo +粉碎fensui +分摊fentan +粪土fentu +分外fenwai +氛围fenwei +分析fenxi +奋勇fenyong +分赃fenzang +奋战fenzhan +分支fenzhi +分子fenzi +分组fenzu +丰富多采ffdc +奋发图强fftq +反过来说fgls +反革命fgm +福建省fjs +封建主义fjzy +翻来覆去flfq +法律顾问flgw +分秒必争fmbz +发明创造fmcz +否fou +缶fou +否定fouding +否决foujue +否认fouren +否则fouze +费品率fpl +废寝忘食fqws +缝纫机frj +分水岭fsl +翻天复地ftfd +丰台区ftq +非同小可ftxk +繁体字ftz +复fu +服fu +副fu +府fu +夫fu +负fu +富fu +附fu +福fu +伏fu +符fu +幅fu +腐fu +浮fu +辅fu +付fu +腹fu +妇fu +孵fu +覆fu +扶fu +辐fu +傅fu +佛fu +缚fu +父fu +弗fu +甫fu +肤fu +氟fu +敷fu +拂fu +俘fu +涪fu +袱fu +抚fu +俯fu +釜fu +斧fu +脯fu +腑fu +赴fu +赋fu +阜fu +讣fu +咐fu +匐fu +凫fu +郛fu +芙fu +芾*fu +苻fu +茯fu +莩fu +菔fu +拊fu +呋fu +幞fu +怫fu +滏fu +艴fu +孚fu +驸fu +绂fu +绋fu +桴fu +赙fu +祓fu +砩fu +黻fu +黼fu +罘fu +稃fu +馥fu +蚨fu +蜉fu +蝠fu +蝮fu +麸fu +趺fu +跗fu +鲋fu +鳆fu +腐败fubai +复辟fubi +复查fucha +浮沉fuchen +扶持fuchi +付出fuchu +副词fuci +服从fucong +附带fudai +负担fudan +辅导fudao +浮雕fudiao +浮动fudong +幅度fudu +复发fufa +伏法fufa +夫妇fufu +覆盖fugai +讣告fugao +富贵fugui +符号fuhao +附和fuhe +符合fuhe +负荷fuhe +腐化fuhua +浮华fuhua +复活fuhuo +俘获fuhuo +伏击fuji +附加fujia +附件fujian +福建fujian +佛教fujiao +附近fujin +副刊fukan +俯瞰fukan +浮夸fukua +付款fukuan +腐烂fulan +福利fuli +浮力fuli +富丽fuli +妇联fulian +附录fulu +俘虏fulu +覆灭fumie +覆没fumo +父母fumu +富农funong +妇女funu +扶贫fupin +服气fuqi +福气fuqi +夫妻fuqi +付讫fuqi +肤浅fuqian +富强fuqiang +父亲fuqin +富饶furao +夫人furen +芙蓉furong +妇孺furu +负伤fushang +辐射fushe +复试fushi +腐蚀fushi +俯视fushi +副手fushou +复数fushu +负数fushu +附属fushu +富庶fushu +赋税fushui +伏特fute +覆亡fuwang +富翁fuweng +服务fuwu +复习fuxi +浮现fuxian +赋闲fuxian +浮想fuxiang +腐朽fuxiu +抚恤fuxu +敷衍fuyan +扶养fuyang +抚养fuyang +俯仰fuyang +副业fuye +服役fuyi +复印fuyin +富有fuyou +赋有fuyou +赋于fuyu +抚育fuyu +富裕fuyu +赋予fuyu +复员fuyuan +复原fuyuan +负约fuyue +复杂fuza +负载fuzai +附则fuze +负责fuze +负债fuzhai +付帐fuzhang +复制fuzhi +扶植fuzhi +附中fuzhong +福州fuzhou +抚州fuzhou +附注fuzhu +辅助fuzhu +扶助fuzhu +服装fuzhuang +附着fuzhuo +富足fuzu +辅佐fuzuo +服务部fwb +服务态度fwtd +服务员fwy +方兴未艾fxwa +奋勇当先fydx +翻一番fyf +风言风语fyfy +发扬光大fygd +复印机fyj +发言人fyr +风雨同舟fytz +房租费fzf +副总理fzl +纺织品fzp +福州市fzs +反作用fzy +副作用fzy +负责制fzz +发展中国家fzzj +个g +国g +工g +过g +高g +干g +关g +各g +革g +公g +根g +更g +改g +管g +光g +广g +果g +格g +共g +搞g +夹*ga +噶ga +嘎ga +胳*ga +尬ga +尕ga +尜ga +旮ga +钆ga +公安部gab +改gai +该gai +盖gai +概gai +钙gai +溉gai +芥*gai +丐gai +陔gai +垓gai +戤gai +赅gai +改变gaibian +改编gaibian +该当gaidang +改道gaidao +改动gaidong +改革gaige +改观gaiguan +改过gaiguo +改悔gaihui +改建gaijian +改进gaijin +概况gaikuang +概括gaikuo +改良gailiang +概率gailu +概论gailun +概貌gaimao +概念gainian +改期gaiqi +改善gaishan +概述gaishu +概叹gaitan +改天gaitian +改选gaixuan +概要gaiyao +改造gaizao +改正gaizheng +改装gaizhuang +改组gaizu +公安局gaj +干gan +杆gan +感gan +敢gan +赶gan +甘gan +肝gan +秆gan +柑gan +竿gan +赣gan +乾*gan +坩gan +苷gan +尴gan +擀gan +泔gan +淦gan +澉gan +绀gan +橄gan +旰gan +矸gan +疳gan +酐gan +干部ganbu +感触ganchu +干脆gancui +敢当gandang +甘当gandang +感到gandao +感动gandong +感恩ganen +刚gang +钢gang +缸gang +纲gang +岗gang +港gang +杠gang +冈gang +肛gang +扛*gang +戆gang +罡gang +筻gang +尴尬ganga +港澳gangao +刚才gangcai +钢材gangcai +刚刚ganggang +刚好ganghao +港口gangkou +纲领gangling +岗哨gangshao +钢铁gangtie +港湾gangwan +岗位gangwei +港务gangwu +刚要gangyao +纲要gangyao +刚毅gangyi +干旱ganhan +感化ganhua +干活ganhuo +肝火ganhuo +感激ganji +干劲ganjin +赶紧ganjin +干净ganjing +感觉ganjue +感慨gankai +甘苦ganku +赶快gankuai +赶忙ganmang +感冒ganmao +感情ganqing +感染ganran +干扰ganrao +干涉ganshe +干事ganshi +感受ganshou +甘肃gansu +感叹gantan +干线ganxian +感想ganxiang +敢想ganxiang +感谢ganxie +甘心ganxin +感性ganxing +感应ganying +敢于ganyu +干预ganyu +甘愿ganyuan +干燥ganzao +感召ganzhao +赣州ganzhou +敢做ganzuo +高gao +搞gao +告gao +稿gao +膏gao +篙gao +皋gao +羔gao +糕gao +镐gao +睾gao +诰gao +郜gao +藁gao +缟gao +槔gao +槁gao +杲gao +锆gao +高矮gaoai +高昂gaoang +告别gaobie +高产gaochan +高超gaochao +高潮gaochao +告成gaocheng +告辞gaoci +高大gaoda +高档gaodang +高等gaodeng +高地gaodi +高低gaodi +糕点gaodian +高度gaodu +告发gaofa +高峰gaofeng +高高gaogao +高歌gaoge +高贵gaogui +高喊gaohan +搞好gaohao +高呼gaohu +搞坏gaohuai +高级gaoji +告急gaoji +高价gaojia +高见gaojian +稿件gaojian +告捷gaojie +告诫gaojie +高龄gaoling +高楼gaolou +告密gaomi +高明gaoming +高能gaoneng +高攀gaopan +高频gaopin +高强gaoqiang +高山gaoshan +高尚gaoshang +高深gaoshen +告示gaoshi +高耸gaosong +高速gaosu +告诉gaosu +高温gaowen +高小gaoxiao +高校gaoxiao +高兴gaoxing +膏药gaoyao +高原gaoyuan +高涨gaozhang +高招gaozhao +高中gaozhong +告终gaozhong +告状gaozhuang +稿子gaozi +港澳同胞gatb +怪不得gbd +各部门gbm +各部委gbw +供不应求gbyq +故步自封gbzf +共产党gcd +共产党员gcdy +工程师gcs +顾此失彼gcsb +贯彻执行gczx +共产主义gczy +各地方gdf +各大军区gdjq +广东省gds +高档商品gdsp +各单位gdw +高等院校gdyx +固定资产gdzc +个ge +各ge +革ge +合*ge +格ge +割ge +歌ge +隔ge +盖*ge +哥ge +铬ge +阁ge +戈ge +葛ge +搁ge +鸽ge +胳ge +疙ge +蛤ge +咯*ge +屹*ge +鬲ge +仡ge +哿ge +圪ge +塥ge +嗝ge +纥*ge +搿ge +膈ge +硌ge +镉ge +袼ge +颌*ge +虼ge +舸ge +骼ge +隔壁gebi +戈壁gebi +个别gebie +歌唱gechang +各处gechu +革除gechu +疙瘩geda +各地gedi +格调gediao +隔断geduan +个个gege +各个gege +各国geguo +隔阂gehe +歌喉gehou +各级geji +各界gejie +格局geju +割据geju +隔绝gejue +各类gelei +隔离geli +割裂gelie +格律gelu +革命geming +隔膜gemo +给gei +根gen +跟gen +亘gen +茛gen +哏gen +艮gen +根本genben +根除genchu +根底gendi +更geng +耕geng +颈geng +庚geng +羹geng +埂geng +耿geng +梗geng +哽geng +赓geng +绠geng +鲠geng +耕地gengdi +更迭gengdie +更动gengdong +更多gengduo +更改genggai +梗概genggai +更高genggao +更换genghuan +更加gengjia +更为gengwei +颈项gengxiang +更新gengxin +哽咽gengyan +耕耘gengyun +更正gengzheng +耿直gengzhi +梗直gengzhi +耕种gengzhong +梗阻gengzu +耕作gengzuo +根基genji +根据genju +跟前genqian +跟随gensui +根源genyuan +根治genzhi +跟着genzhuo +根子genzi +跟踪genzong +搁浅geqian +歌曲gequ +个人geren +格式geshi +歌颂gesong +个体geti +格外gewai +各位gewei +歌舞gewu +阁下gexia +各项gexiang +革新gexin +个性gexing +格言geyan +各样geyang +歌咏geyong +搁置gezhi +各种gezhong +各族gezu +国防部gfb +各方面gfm +格格不入ggbr +归根到底ggdd +恭恭敬敬ggjj +滚瓜烂熟ggls +歌功颂德ggsd +共和国ghg +各行各业ghgy +干劲冲天gjct +各级党委gjdw +各级领导gjld +国家利益gjly +国计民生gjms +工具书gjs +各尽所能gjsn +国库券gkq +工矿企业gkqy +孤陋寡闻glgw +规律性glx +国民党gmd +革命化gmh +革命家gmj +国民经济gmjj +购买力gml +光明磊落gmll +光明日报gmrb +顾名思义gmsy +冠冕堂皇gmth +刮目相看gmxk +光明正大gmzd +工农兵gnb +国内外gnw +工农业gny +工gong +公gong +共gong +供gong +功gong +攻gong +红*gong +巩gong +贡gong +汞gong +宫gong +恭gong +龚gong +躬gong +弓gong +拱gong +珙gong +肱gong +蚣gong +觥gong +公安gongan +公报gongbao +工本gongben +公布gongbu +公差gongcha +公拆gongchai +工厂gongchang +功臣gongchen +工程gongcheng +共处gongchu +供词gongci +共存gongcun +公道gongdao +公德gongde +功德gongde +工地gongdi +公敌gongdi +宫殿gongdian +攻读gongdu +公费gongfei +公愤gongfen +工夫gongfu +功夫gongfu +公告gonggao +公共gonggong +巩固gonggu +公关gongguan +公害gonghai +公函gonghan +共和gonghe +工会gonghui +供给gongji +共计gongji +攻击gongji +功绩gongji +公家gongjia +公斤gongjin +恭敬gongjing +工具gongju +公开gongkai +功课gongke +公款gongkuan +功劳gonglao +公理gongli +公里gongli +公历gongli +公路gonglu +功率gonglu +公民gongmin +共鸣gongming +公墓gongmu +功能gongneng +工农gongnong +公判gongpan +公平gongping +公仆gongpu +供求gongqiu +工区gongqu +公然gongran +工人gongren +公认gongren +供认gongren +工伤gongshang +公社gongshe +公审gongshen +工时gongshi +公事gongshi +共事gongshi +公式gongshi +公署gongshu +公司gongsi +公私gongsi +公诉gongsu +宫廷gongting +共同gongtong +恭维gongwei +公文gongwen +公物gongwu +公务gongwu +恭喜gongxi +贡献gongxian +工效gongxiao +功效gongxiao +供销gongxiao +共性gongxing +工序gongxu +共需gongxu +功勋gongxun +供养gongyang +工业gongye +工艺gongyi +供应gongying +公用gongyong +共有gongyou +公元gongyuan +公园gongyuan +公约gongyue +公允gongyun +公债gongzhai +公章gongzhang +共振gongzhen +工整gongzheng +公正gongzheng +公证gongzheng +供职gongzhi +公众gongzhong +工资gongzi +工作gongzuo +够gou +构gou +沟gou +句*gou +狗gou +钩gou +勾gou +购gou +苟gou +垢gou +佝gou +诟gou +岣gou +遘gou +媾gou +缑gou +枸gou +觏gou +彀gou +笱gou +篝gou +鞲gou +构成goucheng +勾搭gouda +勾当goudang +媾和gouhe +沟壑gouhe +构件goujian +勾结goujie +购买goumai +苟且gouqie +构思gousi +沟通goutong +勾通goutong +构陷gouxian +勾销gouxiao +购销gouxiao +勾引gouyin +构造gouzao +购置gouzhi +钩子gouzi +国庆节gqj +共青团gqt +光荣榜grb +根深蒂固gsdg +瓜熟蒂落gsdl +公使馆gsg +各式各样gsgy +甘肃省gss +工商业gsy +个体户gth +改头换面gthm +高谈阔论gtkl +鼓gu +固gu +古gu +骨gu +故gu +顾gu +股gu +谷gu +估gu +雇gu +孤gu +姑gu +贾*gu +辜gu +菇gu +咕gu +箍gu +沽gu +蛊gu +嘏gu +诂gu +菰gu +呱gu +崮gu +汩gu +梏gu +轱gu +牯gu +牿gu +臌gu +毂gu +瞽gu +罟gu +钴gu +锢gu +鸪gu +鹄*gu +痼gu +蛄gu +酤gu +觚gu +鲴gu +鹘gu +挂gua +刮gua +瓜gua +括*gua +剐gua +寡gua +褂gua +卦gua +诖gua +呱gua +栝gua +胍gua +鸹gua +瓜分guafen +瓜葛guage +挂号guahao +怪guai +乖guai +拐guai +乖舛guaichuan +乖戾guaili +乖僻guaipi +乖巧guaiqiao +怪物guaiwu +怪异guaiyi +拐杖guaizhang +挂名guaming +关guan +管guan +观guan +官guan +灌guan +贯guan +惯guan +冠guan +馆guan +罐guan +棺guan +纶*guan +倌guan +莞guan +掼guan +涫guan +盥guan +鹳guan +矜guan +鳏guan +关闭guanbi +观测guance +观察guancha +贯彻guanche +贯穿guanchuan +管道guandao +官邸guandi +观点guandian +官方guanfang +光guang +广guang +逛guang +咣guang +犷guang +桄guang +胱guang +灌溉guangai +光标guangbiao +广播guangbo +广博guangbo +光彩guangcai +广场guangchang +光大guangda +广大guangda +广东guangdong +广度guangdu +广泛guangfan +广告guanggao +光顾guanggu +光滑guanghua +光辉guanghui +光景guangjing +广阔guangkuo +光芒guangmang +广袤guangmao +光明guangming +光盘guangpan +光谱guangpu +光荣guangrong +观光guanguang +广西guangxi +光线guangxian +广义guangyi +光阴guangyin +光涌guangyong +广州guangzhou +关怀guanhuai +挂念guanian +管家guanjia +关键guanjian +管教guanjiao +关节guanjie +冠军guanjun +关卡guanka +观看guankan +关口guankou +管理guanli +贯例guanli +惯例guanli +官吏guanli +关联guanlian +官僚guanliao +观摩guanmo +灌木guanmu +官能guanneng +观念guannian +关切guanqie +观赏guanshang +管事guanshi +管束guanshu +灌输guanshu +关税guanshui +官司guansi +贯通guantong +关头guantou +观望guanwang +关系guanxi +管辖guanxia +官衔guanxian +关心guanxin +惯性guanxing +关押guanya +惯用guanyong +关于guanyu +官员guanyuan +观战guanzhan +关照guanzhao +管制guanzhi +观止guanzhi +观众guanzhong +关注guanzhu +贯注guanzhu +馆子guanzi +挂失guashi +挂帅guashuai +鼓吹guchui +故此guci +古代gudai +孤单gudan +故地gudi +古典gudian +固定guding +鼓动gudong +股东gudong +古董gudong +孤独gudu +咕嘟gudu +孤儿guer +股份gufen +辜负gufu +骨干gugan +雇工gugong +故宫gugong +古怪guguai +蛊惑guhuo +规gui +贵gui +归gui +硅gui +鬼gui +轨gui +龟gui +桂gui +瑰gui +圭gui +闺gui +诡gui +癸gui +柜gui +跪gui +刽gui +傀*gui +炔*gui +匦gui +刿gui +庋gui +宄gui +妫gui +桧gui +炅gui +晷gui +皈gui +簋gui +鲑gui +鳜gui +诡辩guibian +贵宾guibin +归并guibing +规程guicheng +归档guidang +轨道guidao +规定guiding +归队guidui +规范guifan +规格guige +归公guigong +归功guigong +桂冠guiguan +归国guiguo +规划guihua +鬼话guihua +归还guihuan +诡计guiji +轨迹guiji +贵贱guijian +归咎guijiu +规矩guiju +瑰丽guili +鬼脸guilian +龟裂guilie +规律guilu +诡秘guimi +规模guimo +归纳guina +闺女guinu +规劝guiquan +贵人guiren +归属guishu +龟缩guisuo +柜台guitai +闺秀guixiu +归于guiyu +规则guize +规章guizhang +贵重guizhong +贵州guizhou +鬼子guizi +贵族guizu +归罪guizui +顾及guji +估计guji +古迹guji +顾忌guji +估价gujia +古今gujin +古旧gujiu +故旧gujiu +故居guju +顾客guke +孤苦guku +古老gulao +孤立guli +鼓励guli +估量guliang +顾虑gulu +估摸gumo +滚gun +辊gun +棍gun +衮gun +绲gun +磙gun +鲧gun +滚动gundong +姑娘guniang +雇农gunong +滚烫guntang +棍子gunzi +国guo +过guo +果guo +锅guo +郭guo +涡*guo +裹guo +馘guo +埚guo +掴guo +呙guo +帼guo +崞guo +猓guo +椁guo +虢guo +聒guo +蜾guo +蝈guo +过半guoban +国策guoce +国产guochan +过程guocheng +过错guocuo +过度guodu +过渡guodu +果断guoduan +国法guofa +国防guofang +过分guofen +果腹guofu +果敢guogan +国歌guoge +过关guoguan +过后guohou +国会guohui +国际guoji +国籍guoji +国家guojia +国界guojie +国境guojing +国库guoku +过来guolai +过量guoliang +过虑guolu +锅炉guolu +国民guomin +过目guomu +果木guomu +国难guonan +国内guonei +果皮guopi +果品guopin +国旗guoqi +过期guoqi +国情guoqing +国庆guoqing +过去guoqu +果然guoran +过少guoshao +过甚guoshen +过剩guosheng +过时guoshi +国事guoshi +过失guoshi +果实guoshi +过头guotou +国外guowai +国王guowang +过问guowen +国务guowu +过细guoxi +国药guoyao +国营guoying +过硬guoying +过于guoyu +果园guoyuan +果真guozhen +锅子guozi +顾盼gupan +孤僻gupi +股票gupiao +骨气guqi +姑且guqie +顾全guquan +固然guran +古人guren +骨肉gurou +故事gushi +股市gushi +固守gushou +估算gusuan +固体guti +骨头gutou +故土gutu +顾问guwen +古文guwen +谷物guwu +鼓舞guwu +姑息guxi +故乡guxiang +故意guyi +雇佣guyong +固有guyou +雇员guyuan +鼓掌guzhang +故障guzhang +固执guzhi +拐弯抹角gwmj +国务委员gwwy +国务院gwy +改邪归正gxgz +更新换代gxhd +各行其事gxqs +感性认识gxrs +广西壮族gxzz +工业化gyh +工艺流程gylc +工艺美术gyms +工业品gyp +工艺品gyp +贵阳市gys +公有制gyz +各种各样gzgy +工资级别gzjb +各族人民gzrm +工作上gzs +广州市gzs +贵州省gzs +各自为政gzwz +高瞻远瞩gzyz +高瞻远嘱gzyz +工作者gzz +和h +会h +后h +化h +好h +合h +还h +活h +很h +回h +号h +毫h +花h +或h +海h +话h +红h +火h +黄h +害h +哈ha +蛤*ha +虾*ha +铪ha +哈达hada +还hai +海hai +害hai +孩hai +骸hai +氦hai +亥hai +骇hai +嘿*hai +咳*hai +嗨hai +胲hai +醢hai +海岸haian +海拔haiba +海报haibao +害虫haichong +害处haichu +海岛haidao +海港haigang +海关haiguan +还好haihao +海疆haijiang +海军haijun +海浪hailang +海绵haimian +害怕haipa +海上haishang +还是haishi +海外haiwai +海湾haiwan +海峡haixia +海啸haixiao +害羞haixiu +海洋haiyang +还要haiyao +还有haiyou +海域haiyu +海员haiyuan +孩子haizi +含han +焊han +旱han +喊han +汉han +寒han +汗han +函han +韩han +酣han +憨han +邯han +涵han +罕han +翰han +撼han +捍han +憾han +悍han +邗han +菡han +撖han +阚han +瀚han +晗han +焓han +顸han +颔han +蚶han +鼾han +寒潮hanchao +寒带handai +行*hang +航hang +夯hang +杭hang +吭*hang +巷*hang +沆hang +绗hang +珩hang +颃hang +航标hangbiao +航程hangcheng +航船hangchuan +行当hangdang +航道hangdao +航海hanghai +行家hangjia +行距hangju +航空hangkong +行列hanglie +航路hanglu +航模hangmo +函购hangou +行情hangqing +航天hangtian +航线hangxian +航向hangxiang +航行hangxing +航运hangyun +杭州hangzhou +含糊hanhu +含混hanhun +旱季hanji +函件hanjian +罕见hanjian +汉奸hanjian +喊叫hanjiao +焊接hanjie +寒冷hanleng +翰林hanlin +寒流hanliu +函授hanshou +函数hanshu +酣睡hanshui +寒酸hansuan +捍卫hanwei +含蓄hanxu +寒暄hanxuan +涵养hanyang +含义hanyi +涵义hanyi +汉语hanyu +含冤hanyuan +旱灾hanzai +汉字hanzi +汉族hanzu +好hao +号hao +毫hao +耗hao +豪hao +郝hao +浩hao +镐*hao +壕hao +嚎hao +貉*hao +蒿hao +薅hao +嗥hao +嚆hao +濠hao +灏hao +昊hao +皓hao +颢hao +蚝hao +好比haobi +毫不haobu +号称haocheng +好处haochu +浩大haoda +好歹haodai +浩荡haodang +好的haode +浩繁haofan +耗费haofei +好感haogan +好汉haohan +豪华haohua +好坏haohuai +号角haojiao +耗竭haojie +豪杰haojie +浩劫haojie +好看haokan +毫厘haoli +号令haoling +号码haoma +豪迈haomai +毫毛haomao +毫米haomi +浩淼haomiao +好奇haoqi +豪强haoqiang +豪情haoqing +好人haoren +豪绅haoshen +毫升haosheng +好事haoshi +豪爽haoshuang +好似haosi +耗损haosun +号啕haotao +好听haoting +好玩haowan +毫无haowu +好象haoxiang +好些haoxie +好样haoyang +好意haoyi +号召haozhao +好转haozhuan +汇编程序hbcx +货币回笼hbhl +货币流通hblt +河北省hbs +湖北省hbs +汇编语言hbyy +或多或少hdhs +海淀区hdq +和he +合he +河he +何he +核he +赫he +荷he +褐he +喝he +贺he +呵he +禾he +吓*he +盒he +菏he +貉he +阂he +涸he +鹤he +诃he +劾he +壑he +嗬he +阖he +纥he +曷he +盍he +颌he +蚵he +翮he +和蔼heai +哈尔滨heb +合办heban +荷包hebao +河北hebei +何必hebi +合并hebing +哈尔滨市hebs +何不hebu +喝彩hecai +合唱hechang +何尝hechang +合成hecheng +呵斥hechi +何处hechu +河川hechuan +河床hechuang +贺词heci +何等hedeng +贺电hedian +核定heding +核对hedui +合法hefa +何妨hefang +合肥hefei +合格hege +和好hehao +赫赫hehe +合乎hehu +合伙hehuo +黑hei +嘿hei +黑暗heian +黑白heibai +黑帮heibang +嘿嘿heihei +黑人heiren +黑色heise +黑市heishi +黑夜heiye +合计heji +核计heji +和解hejie +合金hejin +何苦heku +何况hekuang +合理heli +合力heli +合流heliu +河流heliu +合谋hemou +和睦hemu +很hen +狠hen +痕hen +恨hen +河南henan +狠毒hendu +很多henduo +河内henei +行*heng +横heng +衡heng +恒heng +哼heng +亨heng +蘅heng +珩*heng +桁heng +横财hengcai +哼哧hengchi +横幅hengfu +横亘henggen +横贯hengguan +横祸henghuo +横加hengjia +衡量hengliang +横蛮hengman +横批hengpi +衡器hengqi +横扫hengsao +横竖hengshu +恒心hengxin +横行hengxing +恒星hengxing +很好henhao +贺年henian +痕迹henji +很快henkuai +狠心henxin +狠抓henzhua +和平heping +和气heqi +河渠hequ +赫然heran +河山heshan +和尚heshang +合适heshi +核实heshi +合算hesuan +核算hesuan +河滩hetan +合同hetong +贺喜hexi +和谐hexie +核心hexin +贺信hexin +和煦hexu +何以heyi +合影heying +合营heying +核准hezhun +合资hezi +赫兹hezi +合作hezuo +合法权益hfqy +合肥市hfs +宏观世界hgsj +化公为私hgws +好高务远hgwy +核工业部hgyb +海关总署hgzs +后顾之忧hgzy +呼和浩特hhht +轰轰烈烈hhll +换句话说hjhs +黄金时代hjsd +环境卫生hjws +后继有人hjyr +海枯石烂hksl +合理化hlh +糊里糊涂hlht +黑龙江hlj +汗流浃背hljb +汗马功劳hmgl +海南岛hnd +河南省hns +湖南省hns +红hong +洪hong +轰hong +烘hong +哄hong +虹hong +鸿hong +宏hong +弘hong +黉hong +訇hong +讧hong +荭hong +蕻hong +薨hong +闳hong +泓hong +红尘hongchen +轰动hongdong +洪都hongdu +洪峰hongfeng +鸿沟honggou +宏观hongguan +红光hongguang +红花honghua +红军hongjun +红利hongli +洪亮hongliang +轰隆honglong +弘论honglun +鸿毛hongmao +轰鸣hongming +哄骗hongpian +红旗hongqi +红人hongren +红色hongse +洪水hongshui +哄抬hongtai +宏图hongtu +宏伟hongwei +红星hongxing +弘扬hongyang +鸿运hongyun +红晕hongyun +轰炸hongzha +后hou +候hou +厚hou +侯hou +喉hou +猴hou +吼hou +堠hou +後hou +逅hou +瘊hou +篌hou +糇hou +鲎hou +骺hou +后备houbei +后辈houbei +后边houbian +厚薄houbo +候补houbu +后尘houchen +后代houdai +厚道houdao +厚度houdu +后盾houdun +后方houfang +后果houguo +后患houhuan +后悔houhui +后记houji +后进houjin +后劲houjin +后来houlai +喉咙houlong +后门houmen +后面houmian +后期houqi +后勤houqin +后人houren +喉舌houshe +厚实houshi +后嗣housi +后台houtai +后天houtian +后退houtui +后续houxu +候选houxuan +后裔houyi +后缀houzhui +和平共处hpgc +黄埔江hpj +后勤部hqb +何去何从hqhc +合情合理hqhl +好容易hry +好事多磨hsdm +胡思乱想hslx +航天工业部htgb +昏头昏脑hthn +欢天喜地htxd +和*hu +护hu +互hu +湖hu +呼hu +户hu +弧hu +乎hu +胡hu +糊hu +虎hu +忽hu +核*hu +瑚hu +戏*hu +壶hu +葫hu +蝴hu +狐hu +唬hu +沪hu +冱hu +唿hu +囫hu +岵hu +猢hu +怙hu +惚hu +浒hu +滹hu +琥hu +槲hu +轷hu +觳hu +烀hu +煳hu +戽hu +扈hu +祜hu +瓠hu +鹄hu +鹕hu +鹱hu +笏hu +醐hu +斛hu +化hua +花hua +话hua +划hua +滑hua +华hua +画hua +哗hua +猾hua +豁*hua +骅hua +桦hua +砉hua +铧hua +画报huabao +华北huabei +哗变huabian +话柄huabing +划拨huabo +划策huace +画册huace +华东huadong +花朵huaduo +花儿huaer +化肥huafei +花费huafei +划分huafen +化工huagong +华贵huagui +化合huahe +花卉huahui +坏huai +怀huai +划*huai +淮huai +槐huai +徊huai +踝huai +怀抱huaibao +淮北huaibei +坏处huaichu +怀古huaigu +淮海huaihai +怀恨huaihen +怀旧huaijiu +淮南huainan +怀念huainian +坏人huairen +坏事huaishi +怀疑huaiyi +怀着huaizhe +滑稽huaji +画家huajia +话剧huaju +哗啦huala +画廊hualang +华丽huali +画面huamian +化名huaming +还*huan +环huan +换huan +欢huan +缓huan +患huan +幻huan +焕huan +桓huan +唤huan +痪huan +豢huan +涣huan +宦huan +郇huan +奂huan +萑huan +擐huan +圜huan +獾huan +洹huan +浣huan +漶huan +寰huan +逭huan +缳huan +锾huan +鲩huan +鬟huan +华南huanan +欢畅huanchang +缓冲huanchong +幻灯huandeng +欢度huandu +焕发huanfa +黄huang +簧huang +荒huang +皇huang +慌huang +蝗huang +磺huang +凰huang +惶huang +煌huang +晃huang +幌huang +恍huang +谎huang +隍huang +徨huang +湟huang +潢huang +遑huang +璜huang +肓huang +癀huang +蟥huang +篁huang +鳇huang +磺胺huangan +皇朝huangchao +荒诞huangdan +晃荡huangdang +皇帝huangdi +荒废huangfei +黄海huanghai +黄河huanghe +恍惚huanghu +谎话huanghua +黄昏huanghun +黄金huangjin +皇历huangli +荒凉huangliang +荒乱huangluan +慌乱huangluan +慌忙huangmang +荒谬huangmiu +恍然huangran +黄色huangse +黄山huangshan +皇上huangshang +荒唐huangtang +环顾huangu +宦官huanguan +谎言huangyan +慌张huangzhang +幌子huangzi +缓和huanhe +欢呼huanhu +环环huanhuan +滑腻huani +花鸟huaniao +还给huanji +缓急huanji +还价huanjia +环节huanjie +环境huanjing +幻境huanjing +幻景huanjing +欢聚huanju +幻觉huanjue +欢乐huanle +缓慢huanman +患难huannan +唤起huanqi +缓期huanqi +欢庆huanqing +环球huanqiu +寰球huanqiu +换取huanqu +环绕huanrao +涣散huansan +欢声huansheng +环视huanshi +欢送huansong +换算huansuan +欢腾huanteng +欢喜huanxi +幻想huanxiang +欢笑huanxiao +欢心huanxin +欢欣huanxin +环行huanxing +缓刑huanxing +唤醒huanxing +幻影huanying +欢迎huanying +寰宇huanyu +还原huanyuan +患者huanzhe +滑坡huapo +花腔huaqiang +华侨huaqiao +划清huaqing +花圈huaquan +划拳huaquan +哗然huaran +华人huaren +花色huase +化身huashen +化石huashi +划算huasuan +话题huati +滑头huatou +花纹huawen +华夏huaxia +化纤huaxian +画像huaxiang +花絮huaxu +化学huaxue +画押huaya +化验huayan +花样huayang +华裔huayi +话音huayin +话语huayu +花园huayuan +画展huazhan +花招huazhao +华中huazhong +化装huazhuang +化妆huazhuang +湖北hubei +胡扯huche +弧度hudu +忽而huer +呼喊huhan +呼号huhao +呼唤huhuan +互惠huhui +会hui +回hui +灰hui +挥hui +辉hui +汇hui +毁hui +慧hui +恢hui +绘hui +惠hui +徽hui +溃*hui +堕*hui +徊*hui +蛔hui +悔hui +卉hui +晦hui +贿hui +秽hui +烩hui +讳hui +诲hui +诙hui +茴hui +荟hui +蕙hui +咴hui +哕hui +喙hui +隳hui +洄hui +浍hui +彗hui +缋hui +珲hui +桧*hui +晖hui +恚hui +虺hui +蟪hui +麾hui +灰暗huian +回报huibao +汇报huibao +回避huibi +汇编huibian +会场huichang +回潮huichao +灰尘huichen +回春huichun +荟萃huicui +回答huida +回荡huidang +回电huidian +汇兑huidui +挥发huifa +汇费huifei +会风huifeng +回复huifu +恢复huifu +悔改huigai +回顾huigu +惠顾huigu +悔过huiguo +会合huihe +回合huihe +汇合huihe +悔恨huihen +恢弘huihong +会话huihua +回话huihua +绘画huihua +毁坏huihuai +辉煌huihuang +挥霍huihuo +会集huiji +回击huiji +汇集huiji +回家huijia +会见huijian +会聚huiju +汇聚huiju +回扣huikou +汇款huikuan +回来huilai +回笼huilong +汇率huilu +贿赂huilu +会面huimian +毁灭huimie +回民huimin +汇票huipiao +回去huiqu +挥洒huisa +灰色huise +晦涩huise +回收huishou +回首huishou +会谈huitan +会堂huitang +会同huitong +回头huitou +回味huiwei +会晤huiwu +挥舞huiwu +悔悟huiwu +麾下huixia +回想huixiang +回响huixiang +诙谐huixie +灰心huixin +彗星huixing +会演huiyan +汇演huiyan +会议huiyi +回忆huiyi +回音huiyin +辉映huiying +会员huiyuan +会战huizhan +徽章huizhang +会诊huizhen +绘制huizhi +回转huizhuan +汇总huizong +回族huizu +户籍huji +呼叫hujiao +户口hukou +虎口hukou +护理huli +互利huli +护林hulin +呼噜hulu +胡乱huluan +忽略hulue +互勉humian +混hun +浑hun +荤hun +昏hun +婚hun +魂hun +诨hun +馄hun +阍hun +溷hun +湖南hunan +胡闹hunao +昏沉hunchen +混合hunhe +浑厚hunhou +昏黄hunhuang +混迹hunji +婚礼hunli +混乱hunluan +糊弄hunong +婚配hunpei +混入hunru +浑身hunshen +混同huntong +混淆hunxiao +婚姻hunyin +昏庸hunyong +混杂hunza +混帐hunzhang +混浊hunzhuo +浑浊hunzhuo +和*huo +活huo +或huo +火huo +货huo +获huo +伙huo +霍huo +豁huo +惑huo +祸huo +劐huo +藿huo +攉huo +嚯huo +夥huo +钬huo +锪huo +镬huo +耠huo +蠖huo +火把huoba +伙伴huoban +火暴huobao +货币huobi +火柴huochai +火车huoche +豁达huoda +获得huode +霍地huodi +活动huodong +伙房huofang +祸根huogen +祸害huohai +火候huohou +火化huohua +火花huohua +祸患huohuan +活活huohuo +伙计huoji +火箭huojian +火警huojing +火炬huoju +火坑huokeng +活力huoli +霍乱huoluan +活泼huopo +获取huoqu +豁然huoran +货色huose +火山huoshan +获胜huosheng +或是huoshi +伙食huoshi +祸首huoshou +伙同huotong +货物huowu +获悉huoxi +火线huoxian +活现huoxian +或许huoxu +火药huoyao +活页huoye +活跃huoyue +货运huoyun +火灾huozai +火葬huozang +或则huoze +或者huozhe +获准huozhun +湖泊hupo +忽然huran +呼声husheng +护士hushi +忽视hushi +湖水hushui +胡说hushuo +护送husong +胡同hutong +互通hutong +户头hutou +糊涂hutu +护卫huwei +呼吸huxi +互相huxiang +呼啸huxiao +虎穴huxue +护养huyang +呼应huying +呼吁huyu +护照huzhao +互助huzhu +毫无疑问hwyw +互相爱护hxah +横行霸道hxbd +互相帮助hxbz +欢欣鼓舞hxgw +候选人hxr +合作化hzh +杭州市hzs +化整为零hzwl +级j +就j +进j +加j +经j +家j +结j +阶j +间j +件j +及j +解j +较j +机j +军j +接j +教j +极j +九j +见j +基本国策jbgc +基本上jbs +据不完全统计jbwj +饥不择食jbzs +坚持不懈jcbx +集成电路jcdl +基础上jcs +绝大部分jdbf +坚定不移jdby +绝大多数jdds +鉴定会jdh +绝对化jdh +经得起jdq +见多识广jdsg +精打细算jdxs +接二连三jels +解放后jfh +解放军jfj +解放军报jfjb +解放前jfq +仅供参考jgck +机构改革jggg +坚固耐用jgny +襟怀坦白jhtb +计划性jhx +级ji +及ji +机ji +极ji +几ji +积ji +给ji +基ji +其*ji +记ji +己ji +期*ji +系*ji +革*ji +计ji +集ji +即ji +际ji +季ji +激ji +济ji +技ji +击ji +继ji +急ji +剂ji +既ji +纪ji +寄ji +挤ji +鸡ji +迹ji +绩ji +齐*ji +奇*ji +吉ji +脊ji +辑ji +籍ji +疾ji +肌ji +棘ji +畸ji +圾ji +稽ji +箕ji +饥ji +讥ji +姬ji +缉ji +汲ji +嫉ji +蓟ji +冀ji +伎ji +祭ji +悸ji +寂ji +忌ji +妓ji +藉ji +丌ji +亟ji +乩ji +剞ji +佶ji +偈ji +诘ji +墼ji +芨ji +芰ji +荠ji +蒺ji +蕺ji +掎ji +叽ji +咭ji +哜ji +唧ji +岌ji +嵴ji +洎ji +屐ji +骥ji +畿ji +玑ji +楫ji +殛ji +戟ji +戢ji +赍ji +觊ji +犄ji +齑ji +矶ji +羁ji +嵇ji +稷ji +瘠ji +虮ji +笈ji +笄ji +暨ji +跻ji +跽ji +霁ji +鲚ji +鲫ji +髻ji +麂ji +加jia +家jia +架jia +价jia +甲jia +夹jia +假jia +钾jia +贾jia +稼jia +驾jia +嘉jia +枷jia +佳jia +荚jia +颊jia +嫁jia +茄*jia +挟*jia +嘏*jia +伽jia +郏jia +葭jia +岬jia +浃jia +迦jia +珈jia +戛jia +胛jia +恝jia +铗jia +镓jia +痂jia +瘕jia +袷jia +蛱jia +笳jia +袈jia +跏jia +加班jiaban +甲板jiaban +加倍jiabei +甲虫jiachong +家畜jiachu +家当jiadang +家底jiadi +假定jiading +加法jiafa +家访jiafang +价格jiage +加工jiagong +佳话jiahua +家伙jiahuo +加急jiaji +嘉奖jiajiang +家教jiajiao +嫁接jiajie +佳节jiajie +假借jiajie +加紧jiajin +家境jiajing +家具jiaju +加剧jiaju +加快jiakuai +加仑jialun +加码jiama +假冒jiamao +家门jiamen +加密jiami +加冕jiamian +价目jiamu +间jian +件jian +见jian +建jian +坚jian +减jian +检jian +践jian +尖jian +简jian +碱jian +剪jian +艰jian +渐jian +肩jian +键jian +健jian +柬jian +鉴jian +剑jian +歼jian +监jian +兼jian +浅*jian +奸jian +箭jian +茧jian +舰jian +俭jian +笺jian +煎jian +缄jian +硷jian +拣jian +捡jian +荐jian +槛jian +贱jian +饯jian +溅jian +涧jian +僭jian +谏jian +谫jian +菅jian +蒹jian +搛jian +囝*jian +湔jian +蹇jian +謇jian +缣jian +枧jian +楗jian +戋jian +戬jian +牮jian +犍jian +毽jian +腱jian +睑jian +锏jian +鹣jian +裥jian +笕jian +翦jian +趼jian +踺jian +鲣jian +鞯jian +吉安jian +煎熬jianao +简报jianbao +渐变jianbian +简便jianbian +简编jianbian +鉴别jianbie +兼并jianbing +尖兵jianbing +剪裁jiancai +剪彩jiancai +检测jiance +检查jiancha +检察jiancha +监察jiancha +减产jianchan +建成jiancheng +简称jiancheng +坚持jianchi +简单jiandan +建党jiandang +减低jiandi +检点jiandian +间谍jiandie +坚定jianding +鉴定jianding +监督jiandu +间断jianduan +尖端jianduan +简短jianduan +舰队jiandui +健儿jianer +减法jianfa +肩负jianfu +将jiang +降jiang +讲jiang +强*jiang +江jiang +浆jiang +蒋jiang +奖jiang +疆jiang +僵jiang +姜jiang +桨jiang +匠jiang +酱jiang +茳jiang +洚jiang +绛jiang +缰jiang +犟jiang +礓jiang +耩jiang +糨jiang +豇jiang +奖杯jiangbei +疆场jiangchang +奖惩jiangcheng +僵持jiangchi +降低jiangdi +间隔jiange +讲稿jianggao +江湖jianghu +僵化jianghua +讲话jianghua +降级jiangji +降价jiangjia +讲解jiangjie +疆界jiangjie +将近jiangjin +奖金jiangjin +讲究jiangjiu +僵局jiangju +将军jiangjun +讲课jiangke +将来jianglai +讲理jiangli +奖励jiangli +降临jianglin +将领jiangling +降落jiangluo +江南jiangnan +奖品jiangpin +讲评jiangping +奖券jiangquan +江山jiangshan +讲师jiangshi +僵尸jiangshi +讲授jiangshou +讲述jiangshu +降水jiangshui +江苏jiangsu +讲台jiangtai +讲坛jiangtan +疆土jiangtu +坚固jiangu +兼顾jiangu +监管jianguan +建国jianguo +降温jiangwen +江西jiangxi +讲习jiangxi +匠心jiangxin +讲学jiangxue +讲演jiangyan +将要jiangyao +讲义jiangyi +僵硬jiangying +奖章jiangzhang +讲座jiangzuo +监护jianhu +简化jianhua +间或jianhuo +奸计jianji +歼击jianji +剪辑jianji +减价jianjia +渐渐jianjian +健将jianjiang +建交jianjiao +间接jianjie +见解jianjie +简介jianjie +简洁jianjie +简捷jianjie +渐进jianjin +监禁jianjin +检举jianju +艰巨jianju +坚决jianjue +健康jiankang +尖刻jianke +坚苦jianku +艰苦jianku +监牢jianlao +建立jianli +尖利jianli +简历jianli +简练jianlian +简陋jianlou +简略jianlue +健美jianmei +减免jianmian +歼灭jianmie +简明jianming +缄默jianmo +艰难jiannan +键盘jianpan +简拼jianpin +简朴jianpu +俭朴jianpu +坚强jianqiang +减轻jianqing +健全jianquan +兼任jianren +坚韧jianren +兼容jianrong +尖锐jianrui +减弱jianruo +艰涩jianse +鉴赏jianshang +减少jianshao +建设jianshe +艰深jianshen +见识jianshi +坚实jianshi +监视jianshi +建树jianshu +减速jiansu +检索jiansuo +践踏jianta +健谈jiantan +检讨jiantao +简体jianti +舰艇jianting +减退jiantui +健忘jianwang +间文jianwen +见闻jianwen +间隙jianxi +奸细jianxi +艰险jianxian +见效jianxiao +间歇jianxie +简写jianxie +坚信jianxin +艰辛jianxin +减刑jianxing +检修jianxiu +简讯jianxun +检验jianyan +简要jianyao +建议jianyi +坚毅jianyi +简易jianyi +奸淫jianyin +坚硬jianying +剪影jianying +鉴于jianyu +监狱jianyu +减员jianyuan +检阅jianyue +建造jianzao +简则jianze +坚贞jianzhen +监制jianzhi +简直jianzhi +兼职jianzhi +建筑jianzhu +简装jianzhuang +健壮jianzhuang +较jiao +教jiao +交jiao +角jiao +叫jiao +脚jiao +胶jiao +浇jiao +焦jiao +觉*jiao +校*jiao +搅jiao +酵jiao +郊jiao +铰jiao +窖jiao +椒jiao +礁jiao +骄jiao +娇jiao +嚼jiao +矫jiao +侥jiao +狡jiao +饺jiao +缴jiao +绞jiao +剿jiao +轿jiao +佼jiao +僬jiao +艽jiao +茭jiao +挢jiao +噍jiao +峤jiao +徼jiao +湫*jiao +姣jiao +敫jiao +皎jiao +鹪jiao +蛟jiao +醮jiao +跤jiao +鲛jiao +骄傲jiaoao +搅拌jiaoban +狡辩jiaobian +教材jiaocai +交叉jiaocha +教程jiaocheng +交错jiaocuo +较大jiaoda +交代jiaodai +交淡jiaodan +教导jiaodao +交点jiaodian +焦点jiaodian +校订jiaoding +角度jiaodu +校对jiaodui +较多jiaoduo +焦耳jiaoer +交锋jiaofeng +交付jiaofu +浇灌jiaoguan +娇贵jiaogui +叫喊jiaohan +较好jiaohao +叫好jiaohao +狡猾jiaohua +交换jiaohuan +叫唤jiaohuan +教诲jiaohui +缴获jiaohuo +交际jiaoji +矫健jiaojian +交接jiaojie +交界jiaojie +叫苦jiaoku +较快jiaokuai +教练jiaolian +较量jiaoliang +交流jiaoliu +搅乱jiaoluan +角落jiaoluo +叫骂jiaoma +剿灭jiaomie +酵母jiaomu +交纳jiaona +缴纳jiaona +娇嫩jiaonen +交配jiaopei +骄气jiaoqi +交情jiaoqing +郊区jiaoqu +叫嚷jiaorang +角色jiaose +交涉jiaoshe +教师jiaoshi +教授jiaoshou +教唆jiaosuo +脚踏jiaota +交谈jiaotan +教堂jiaotang +交替jiaoti +教条jiaotiao +交通jiaotong +郊外jiaowai +交往jiaowang +较为jiaowei +狡黠jiaoxia +叫嚣jiaoxiao +侥幸jiaoxing +绞刑jiaoxing +教学jiaoxue +教训jiaoxun +教养jiaoyang +骄阳jiaoyang +教益jiaoyi +交易jiaoyi +交谊jiaoyi +教育jiaoyu +教员jiaoyuan +狡诈jiaozha +校正jiaozheng +脚注jiaozhu +角逐jiaozhu +浇铸jiaozhu +校准jiaozhun +焦灼jiaozhuo +娇纵jiaozong +叫做jiaozuo +家谱jiapu +假期jiaqi +价钱jiaqian +加强jiaqiang +假日jiari +加入jiaru +假如jiaru +假若jiaruo +加上jiashang +假设jiashe +加深jiashen +假使jiashi +架势jiashi +驾驶jiashi +家属jiashu +假说jiashuo +加速jiasu +枷锁jiasuo +家庭jiating +家乡jiaxiang +假想jiaxiang +家业jiaye +加以jiayi +佳音jiayin +家用jiayong +加油jiayou +家园jiayuan +夹杂jiaza +加载jiazai +家长jiazhang +价值jiazhi +加重jiazhong +假装jiazhuang +嫁妆jiazhuang +架子jiazi +家族jiazu +击败jibai +羁绊jiban +几倍jibei +基本jiben +击毙jibi +级别jibie +疾病jibing +计策jice +基层jiceng +稽查jicha +机场jichang +集成jicheng +继承jicheng +计酬jichou +基础jichu +机床jichuang +几次jici +急促jicu +积存jicun +寄存jicun +极大jida +亟待jidai +激荡jidang +记得jide +基地jidi +机电jidian +极点jidian +基调jidiao +机动jidong +激动jidong +极度jidu +几度jidu +即度jidu +季度jidu +基督jidu +嫉妒jidu +忌妒jidu +极端jiduan +结jie +阶jie +解jie +接jie +节jie +家*jie +界jie +截jie +介jie +借jie +价*jie +届jie +街jie +揭jie +洁jie +杰jie +竭jie +皆jie +秸jie +劫jie +桔jie +捷jie +睫jie +姐jie +戒jie +藉jie +芥jie +疥jie +诫jie +楷*jie +偈*jie +讦jie +诘*jie +拮jie +喈jie +嗟jie +婕jie +孑jie +桀jie +碣jie +疖jie +颉jie +蚧jie +羯jie +鲒jie +骱jie +饥饿jie +结案jiean +洁白jiebai +接班jieban +捷报jiebao +戒备jiebei +结彩jiecai +节操jiecao +阶层jieceng +劫持jiechi +杰出jiechu +解除jiechu +接触jiechu +戒除jiechu +揭穿jiechuan +结存jiecun +解答jieda +接待jiedai +借贷jiedai +街道jiedao +解冻jiedong +阶段jieduan +截断jieduan +揭发jiefa +借方jiefang +解放jiefang +街坊jiefang +结构jiegou +解雇jiegu +借故jiegu +结果jieguo +结合jiehe +结核jiehe +结婚jiehun +阶级jieji +接见jiejian +节俭jiejian +借鉴jiejian +结交jiejiao +姐姐jiejie +接近jiejin +竭尽jiejin +结晶jiejing +捷径jiejing +洁净jiejing +解救jiejiu +结局jieju +解决jiejue +孑孓jiejue +解开jiekai +揭开jiekai +解渴jieke +接口jiekou +借口jiekou +借款jiekuan +竭力jieli +接连jielian +揭露jielu +戒律jielu +结论jielun +解闷jiemen +结盟jiemeng +界面jiemian +节目jiemu +揭幕jiemu +接纳jiena +解聘jiepin +解剖jiepou +节气jieqi +接洽jieqia +截取jiequ +既而jier +节日jieri +介入jieru +解散jiesan +介绍jieshao +节省jiesheng +届时jieshi +结实jieshi +解释jieshi +揭示jieshi +解手jieshou +接受jieshou +接收jieshou +结束jieshu +解说jieshuo +结算jiesuan +解体jieti +阶梯jieti +接替jieti +接头jietou +街头jietou +解脱jietuo +结尾jiewei +解围jiewei +接吻jiewen +解析jiexi +界线jiexian +界限jiexian +揭晓jiexiao +戒严jieyan +结业jieye +介意jieyi +接应jieying +结余jieyu +节约jieyue +结帐jiezhang +接着jiezhao +节制jiezhi +介质jiezhi +戒指jiezhi +借支jiezhi +截止jiezhi +借助jiezhu +节奏jiezou +杰作jiezuo +激发jifa +技法jifa +讥讽jifeng +几个jige +及格jige +技工jigong +记功jigong +机构jigou +叽咕jigu +机关jiguan +籍贯jiguan +极光jiguang +激光jiguang +记过jiguo +极好jihao +记号jihao +集合jihe +几何jihe +稽核jihe +几乎jihu +激化jihua +计划jihua +饥荒jihuang +机会jihui +集会jihui +击毁jihui +忌讳jihui +积极jiji +机件jijian +计件jijian +急件jijian +击剑jijian +即将jijiang +计较jijiao +季节jijie +急进jijin +基金jijin +机警jijing +即景jijing +寂静jijing +急救jijiu +积聚jiju +急剧jiju +急遽jiju +寄居jiju +季刊jikan +即刻jike +疾苦jiku +击溃jikui +积累jilei +极力jili +吉利jili +激励jili +伎俩jilia +计量jiliang +寂寥jiliao +激烈jilie +吉林jilin +机灵jiling +激流jiliu +记录jilu +纪律jilu +纪录jilu +辑录jilu +击落jiluo +急忙jimang +机密jimi +寂寞jimo +计谋jimou +进jin +金jin +近jin +紧jin +斤jin +今jin +尽jin +仅jin +劲jin +浸jin +禁jin +津jin +筋jin +锦jin +晋jin +巾jin +襟jin +谨jin +靳jin +烬jin +卺jin +荩jin +堇jin +噤jin +馑jin +廑jin +妗jin +缙jin +瑾jin +槿jin +赆jin +觐jin +衿jin +缉拿jina +济南jinan +禁闭jinbi +锦标jinbiao +进步jinbu +浸沉jinchen +进程jincheng +进出jinchu +紧凑jincou +近代jindai +劲敌jindi +进度jindu +金额jine +机能jineng +技能jineng +进而jiner +进犯jinfan +经jing +精jing +京jing +径jing +井jing +静jing +竟jing +晶jing +净jing +境jing +镜jing +景jing +警jing +劲*jing +茎jing +敬jing +惊jing +睛jing +竞jing +荆jing +兢jing +鲸jing +粳jing +痉jing +靖jing +刭jing +儆jing +阱jing +菁jing +獍jing +憬jing +泾jing +迳jing +弪jing +婧jing +肼jing +胫jing +腈jing +旌jing +靓*jing +敬爱jingai +警报jingbao +警备jingbei +精兵jingbing +精采jingcai +精彩jingcai +警察jingcha +经常jingchang +精粹jingcui +静电jingdian +经典jingdian +惊动jingdong +精度jingdu +经费jingfei +精干jinggan +竟敢jinggan +警告jinggao +经过jingguo +净化jinghua +精华jinghua +经济jingji +竞技jingji +荆棘jingji +精简jingjian +境界jingjie +警戒jingjie +经久jingjiu +惊恐jingkong +经理jingli +经历jingli +精力jingli +敬礼jingli +精练jinglian +精良jingliang +经络jingluo +精美jingmei +精密jingmi +精明jingming +进攻jingong +敬佩jingpei +精辟jingpi +景气jingqi +惊奇jingqi +精巧jingqiao +精确jingque +竟然jingran +竞赛jingsai +景色jingse +经商jingshang +精神jingshen +经手jingshou +经受jingshou +精髓jingsui +静态jingtai +惊叹jingtan +晶体jingti +警惕jingti +精通jingtong +镜头jingtou +筋骨jingu +禁锢jingu +尽管jinguan +巾帼jinguo +经委jingwei +警卫jingwei +敬畏jingwei +景物jingwu +精细jingxi +京戏jingxi +惊险jingxian +景象jingxiang +经销jingxiao +经心jingxin +精心jingxin +惊心jingxin +惊醒jingxing +竞选jingxuan +惊讶jingya +经验jingyan +敬仰jingyang +经营jingying +晶莹jingying +经由jingyou +境遇jingyu +精湛jingzhan +竞争jingzheng +精制jingzhi +径直jingzhi +精致jingzhi +静止jingzhi +净值jingzhi +竟址jingzhi +净重jingzhong +镜子jingzi +静坐jingzuo +近海jinhai +今后jinhou +近乎jinhu +进化jinhua +几年jinian +记念jinian +纪念jinian +晋级jinji +紧急jinji +近郊jinjiao +紧紧jinjin +仅仅jinjin +进军jinjun +进口jinkou +尽快jinkuai +近况jinkuang +进来jinlai +近来jinlai +尽力jinli +尽量jinliang +斤两jinliang +禁令jinling +劲旅jinlu +紧密jinmi +近年jinnian +今年jinnian +金牌jinpai +紧迫jinpo +近期jinqi +近前jinqian +金钱jinqian +尽情jinqing +进去jinqu +进取jinqu +禁区jinqu +近日jinri +今日jinri +金融jinrong +进入jinru +浸入jinru +谨慎jinshen +晋升jinsheng +今是jinshi +尽是jinshi +近视jinshi +金属jinshu +近似jinsi +紧缩jinsuo +今天jintian +津贴jintie +尽头jintou +劲头jintou +浸透jintou +进退jintui +今晚jinwan +今昔jinxi +尽心jinxin +进行jinxing +进修jinxiu +锦秀jinxiu +谨严jinyan +紧要jinyao +进展jinzhan +紧张jinzhang +今朝jinzhao +紧着jinzhe +禁止jinzhi +尽职jinzhi +进驻jinzhu +金子jinzi +炯jiong +窘jiong +迥jiong +炅*jiong +扃jiong +窘迫jiongpo +迥然jiongran +击破jipo +急迫jipo +及其jiqi +极其jiqi +激起jiqi +机器jiqi +机枪jiqiang +技巧jiqiao +急切jiqie +激情jiqing +汲取jiqu +集权jiquan +既然jiran +己任jiren +继任jiren +即日jiri +吉日jiri +肌肉jirou +极少jishao +寄生jisheng +即是jishi +及时jishi +几时jishi +计时jishi +即时jishi +即使jishi +记事jishi +基石jishi +集市jishi +级数jishu +基数jishu +计数jishu +记述jishu +技术jishu +祭祀jisi +激素jisu +急速jisu +计算jisuan +机体jiti +集体jiti +肌体jiti +几天jitian +集团jituan +寄托jituo +就jiu +九jiu +旧jiu +究jiu +久jiu +救jiu +酒jiu +纠jiu +揪jiu +玖jiu +韭jiu +灸jiu +厩jiu +臼jiu +舅jiu +咎jiu +疚jiu +僦jiu +啾jiu +阄jiu +柩jiu +桕jiu +鸠jiu +鹫jiu +赳jiu +鬏jiu +就餐jiucan +纠察jiucha +纠缠jiuchan +就此jiuci +就地jiudi +就范jiufan +纠纷jiufen +纠葛jiuge +救国jiuguo +救护jiuhu +救火jiuhuo +纠集jiuji +鸠集jiuji +救济jiuji +救急jiuji +九江jiujiang +九届jiujie +就近jiujin +酒精jiujing +究竟jiujing +救命jiuming +救生jiusheng +就是jiushi +就事jiushi +救亡jiuwang +久违jiuwei +酒窝jiuwo +酒席jiuxi +救险jiuxian +揪心jiuxin +救星jiuxing +就绪jiuxu +就学jiuxue +久仰jiuyang +就要jiuyao +就业jiuye +久远jiuyuan +九月jiuyue +救灾jiuzai +纠正jiuzheng +就职jiuzhi +救治jiuzhi +九洲jiuzhou +救助jiuzhu +极为jiwei +纪委jiwei +极限jixian +迹象jixiang +吉祥jixiang +讥笑jixiao +机械jixie +记性jixing +急性jixing +畸形jixing +即兴jixing +吉凶jixiong +几许jixu +积蓄jixu +继续jixu +记叙jixu +急需jixu +集训jixun +积压jiya +羁押jiya +给养jiyang +机要jiyao +纪要jiyao +给以jiyi +记忆jiyi +技艺jiyi +基因jiyin +急用jiyong +基于jiyu +急于jiyu +机遇jiyu +给予jiyu +寄予jiyu +觊觎jiyu +纪元jiyuan +集约jiyue +记载jizai +及早jizao +急躁jizao +激增jizeng +记帐jizhang +记者jizhe +集镇jizhen +机制jizhi +及至jizhi +机智jizhi +集中jizhong +击中jizhong +记住jizhu +基准jizhun +集资jizi +经济核算jjhs +聚精会神jjhs +将计就计jjjj +戒骄戒躁jjjz +近几年来jjnl +竭尽全力jjql +节假日jjr +积极性jjx +经济效益jjxy +兢兢业业jjyy +精简整编jjzb +叽叽喳喳jjzz +艰苦奋斗jkfd +尽可能jkn +教科书jks +俱乐部jlb +交流电jld +吉林省jls +价廉物美jlwm +纪律性jlx +纪念碑jnb +几年来jnl +近年来jnl +纪念品jnp +济南市jns +吉普车jpc +坚强不屈jqbq +奖勤罚懒jqfl +机器人jqr +急起直追jqzz +截然不同jrbt +兼容性jrx +积少成多jscd +金山公司jsgs +集思广益jsgy +精神焕发jshf +计算机jsj +尽善尽美jsjm +集市贸易jsmy +介绍人jsr +就是说jss +计算所jss +江苏省jss +举世闻名jswm +介绍信jsx +技术员jsy +计算中心jszx +交通部jtb +家庭出身jtcs +惊天动地jtdd +具体地说jtds +晶体管jtg +交通工具jtgj +脚踏实地jtsd +具体说来jtsl +具ju +据ju +局ju +举ju +车*ju +句ju +聚ju +距ju +巨ju +居ju +锯ju +剧ju +矩ju +拒ju +柜*ju +桔*ju +鞠ju +拘ju +狙ju +疽ju +驹ju +菊ju +咀ju +沮ju +踞ju +俱ju +惧ju +炬ju +倨ju +讵ju +苣ju +苴ju +莒ju +掬ju +遽ju +屦ju +琚ju +枸*ju +椐ju +榘ju +榉ju +橘ju +犋ju +飓ju +钜ju +锔ju +窭ju +裾ju +趄ju +醵ju +踽ju +龃ju +雎ju +瞿*ju +鞫ju +卷juan +捐juan +鹃juan +娟juan +倦juan +眷juan +绢juan +俊*juan +鄄juan +狷juan +涓juan +桊juan +蠲juan +锩juan +镌juan +隽juan +卷进juanjin +捐款juankuan +眷恋juanlian +眷念juannian +捐躯juanqu +卷入juanru +眷属juanshu +捐献juanxian +卷烟juanyan +卷帙juanzhi +捐助juanzhu +卷宗juanzong +举办juban +具备jubei +剧本juben +巨变jubian +局部jubu +拘捕jubu +剧场juchang +据此juci +巨大juda +举动judong +居多juduo +决jue +觉jue +绝jue +角*jue +脚*jue +掘jue +嚼*jue +撅jue +攫jue +抉jue +倔jue +爵jue +诀jue +厥jue +劂jue +谲jue +矍jue +蕨jue +嗟*jue +噘jue +噱jue +崛jue +獗jue +孓jue +珏jue +桷jue +橛jue +爝jue +镢jue +蹶jue +觖jue +巨额jue +诀别juebie +决不juebu +绝不juebu +决策juece +觉察juecha +觉得juede +决定jueding +决断jueduan +绝对juedui +绝迹jueji +倔强juejiang +绝交juejiao +绝径juejing +绝境juejing +绝句jueju +决裂juelie +绝路juelu +绝密juemi +绝妙juemiao +崛起jueqi +诀窍jueqiao +决赛juesai +绝食jueshi +决死juesi +决算juesuan +绝望juewang +爵位juewei +觉悟juewu +决心juexin +觉醒juexing +决议jueyi +绝缘jueyuan +抉择jueze +决战juezhan +绝招juezhao +绝症juezheng +巨幅jufu +居功jugong +鞠躬jugong +句号juhao +聚合juhe +聚会juhui +聚集juji +巨匠jujiang +拘谨jujin +拒绝jujue +咀嚼jujue +距离juli +举例juli +剧烈julie +拘留juliu +局面jumian +居民jumin +剧目jumu +军jun +均jun +菌jun +君jun +龟*jun +钧jun +峻jun +俊jun +竣jun +浚jun +郡jun +骏jun +捃jun +皲jun +筠jun +麇jun +军操juncao +君臣junchen +均等jundeng +军队jundui +军法junfa +军阀junfa +军服junfu +军港jungang +军工jungong +竣工jungong +均衡junheng +军火junhuo +拘泥juni +军机junji +军纪junji +军舰junjian +俊杰junjie +军垦junken +军粮junliang +军令junling +骏马junma +军民junmin +军旗junqi +峻峭junqiao +俊俏junqiao +军区junqu +军权junquan +军人junren +军事junshi +军师junshi +军属junshu +军团juntuan +军委junwei +军衔junxian +军校junxiao +军械junxie +军心junxin +俊秀junxiu +军需junxu +军训junxun +军医junyi +军营junying +军用junyong +军邮junyou +均匀junyun +军长junzhang +军政junzheng +君主junzhu +军装junzhuang +君子junzi +俱全juquan +居然juran +遽然juran +沮丧jusang +局势jushi +举手jushou +拘束jushu +据说jushuo +具体juti +剧团jutuan +据悉juxi +局限juxian +居心juxin +举行juxing +矩形juxing +巨型juxing +具有juyou +据有juyou +剧院juyuan +局长juzhang +剧照juzhao +举止juzhi +居中juzhong +剧终juzhong +巨著juzhu +居住juzhu +句子juzi +节外生枝jwsz +惊心动魄jxdp +继续革命jxgm +机械化jxh +江西省jxs +谨小慎微jxsw +局限性jxx +教育部jyb +进一步jyb +家用电器jydq +教育方针jyfz +家喻户晓jyhx +加以解决jyjj +记忆力jyl +精益求精jyqj +教研室jys +见义勇为jyyw +旧中国jzg +建筑物jzw +可k +开k +看k +克k +孔k +科k +口k +空k +苦k +快k +考k +刻k +靠k +况k +块k +困k +宽k +矿k +抗k +卡k +卡ka +喀ka +咖ka +咯ka +佧ka +咔ka +胩ka +喀嚓kacha +卡车kache +咖啡kafei +开kai +凯kai +揩kai +楷kai +慨kai +剀kai +垲kai +蒈kai +忾kai +恺kai +铠kai +锎kai +锴kai +开办kaiban +开遍kaibian +开采kaicai +开场kaichang +开车kaiche +开除kaichu +开创kaichuang +开导kaidao +开刀kaidao +开动kaidong +开端kaiduan +开发kaifa +开放kaifang +开封kaifeng +开赴kaifu +凯歌kaige +开关kaiguan +开航kaihang +开户kaihu +开花kaihua +开怀kaihuai +开荒kaihuang +开会kaihui +开掘kaijue +开垦kaiken +开口kaikou +开矿kaikuang +开阔kaikuo +开朗kailang +开郎kailang +开路kailu +开明kaiming +楷模kaimo +开幕kaimu +开炮kaipao +开辟kaipi +开启kaiqi +开枪kaiqiang +开窍kaiqiao +开设kaishe +开始kaishi +开庭kaiting +开头kaitou +开脱kaituo +开拓kaituo +开外kaiwai +开销kaixiao +开心kaixin +凯旋kaixuan +开学kaixue +开颜kaiyan +开业kaiye +开战kaizhan +开展kaizhan +开张kaizhang +开支kaizhi +看kan +刊kan +坎kan +槛*kan +堪kan +勘kan +砍kan +嵌*kan +侃kan +莰kan +阚*kan +戡kan +龛kan +瞰kan +勘测kance +勘察kancha +看出kanchu +看待kandai +看到kandao +刊登kandeng +看法kanfa +砍伐kanfa +抗kang +康kang +炕kang +慷kang +糠kang +扛kang +亢kang +伉kang +闶kang +钪kang +亢奋kangfen +康复kangfu +抗衡kangheng +抗击kangji +亢进kangjin +抗拒kangju +伉俪kangli +抗日kangri +看管kanguan +抗议kangyi +看见kanjian +坎坷kanke +看来kanlai +看齐kanqi +刊头kantou +看望kanwang +刊物kanwu +勘误kanwu +看样kanyang +刊载kanzai +考kao +靠kao +拷kao +烤kao +尻kao +栲kao +犒kao +铐kao +拷贝kaobei +靠边kaobian +考查kaocha +考察kaocha +考核kaohe +靠近kaojin +考究kaojiu +靠拢kaolong +考虑kaolu +考勤kaoqin +靠山kaoshan +考试kaoshi +考题kaoti +考验kaoyan +考证kaozheng +卡片kapian +看不惯kbg +看不起kbq +刻不容缓kbrh +开诚布公kcbg +矿产资源kczy +扩大化kdh +可ke +克ke +科ke +刻ke +客ke +壳ke +颗ke +棵ke +柯ke +呵*ke +坷ke +苛ke +磕ke +咳ke +渴ke +课ke +嗑ke +岢ke +恪ke +溘ke +骒ke +缂ke +珂ke +轲ke +氪ke +瞌ke +钶ke +锞ke +稞ke +疴ke +窠ke +颏ke +蝌ke +髁ke +可爱keai +科班keban +课本keben +可比kebi +刻薄kebo +可不kebu +客车keche +课程kecheng +可耻kechi +可恶kee +可风kefeng +可否kefou +克服kefu +可观keguan +客观keguan +可贵kegui +可好kehao +可恨kehen +刻划kehua +刻画kehua +克己keji +客机keji +科技keji +可见kejian +科教kejiao +可敬kejing +窠臼kejiu +科举keju +可靠kekao +苛刻keke +可口kekou +克扣kekou +刻苦keku +克拉kela +克朗kelang +颗粒keli +可怜kelian +科目kemu +肯ken +啃ken +垦ken +恳ken +裉ken +肯定kending +可能keneng +坑keng +吭keng +铿keng +坑道kengdao +坑害kenghai +铿锵kengqiang +恳切kenqie +恳求kenqiu +垦殖kenzhi +可怕kepa +磕碰kepeng +科普kepu +客气keqi +可亲keqin +可取kequ +客人keren +客商keshang +可是keshi +科室keshi +课堂ketang +客套ketao +课题keti +客体keti +客厅keting +磕头ketou +可望kewang +渴望kewang +可喜kexi +可惜kexi +可行kexing +科学kexue +科研keyan +可以keyi +可疑keyi +刻意keyi +科员keyuan +科长kezhang +可知kezhi +克制kezhi +狂风暴雨kfby +克己奉公kjfg +科技司kjs +苦口婆心kkpx +昆明市kms +可能性knx +孔kong +空kong +控kong +恐kong +倥kong +崆kong +箜kong +空白kongbai +恐怖kongbu +控拆kongchai +空洞kongdong +空额konge +空乏kongfa +控告konggao +空喊konghan +恐吓konghe +空话konghua +恐慌konghuang +空间kongjian +空降kongjiang +恐惧kongju +空军kongjun +空旷kongkuang +恐龙konglong +空虑konglu +恐怕kongpa +空气kongqi +空前kongqian +孔雀kongque +控诉kongsu +空谈kongtan +空头kongtou +空文kongwen +空隙kongxi +空闲kongxian +空想kongxiang +空虚kongxu +空运kongyun +控制kongzhi +空中kongzhong +口kou +扣kou +抠kou +寇kou +芤kou +蔻kou +叩kou +眍kou +筘kou +口岸kouan +叩拜koubai +口才koucai +扣除kouchu +口传kouchuan +口服koufu +口供kougong +口号kouhao +口红kouhong +口角koujiao +口径koujing +口诀koujue +口令kouling +扣留kouliu +口气kouqi +口腔kouqiang +口哨koushao +口试koushi +口述koushu +口头koutou +叩头koutou +口信kouxin +扣押kouya +口语kouyu +看起来kql +口若悬河krxh +口是心非ksxf +苦ku +库ku +枯ku +酷ku +哭ku +窟ku +裤ku +刳ku +堀ku +喾ku +绔ku +骷ku +跨kua +夸kua +垮kua +挎kua +胯kua +侉kua +跨步kuabu +夸大kuada +跨度kuadu +会*kuai +快kuai +块kuai +筷kuai +侩kuai +蒯kuai +郐kuai +哙kuai +狯kuai +浍*kuai +脍kuai +会计kuaiji +快乐kuaile +快速kuaisu +宽kuan +款kuan +髋kuan +宽敞kuanchang +宽绰kuanchuo +宽大kuanda +宽待kuandai +款待kuandai +宽度kuandu +况kuang +矿kuang +狂kuang +框kuang +匡kuang +筐kuang +眶kuang +旷kuang +诓kuang +诳kuang +邝kuang +圹kuang +夼kuang +哐kuang +纩kuang +贶kuang +矿藏kuangcang +矿产kuangchan +狂风kuangfeng +矿工kuanggong +旷工kuanggong +矿井kuangjing +框框kuangkuang +哐啷kuanglang +况且kuangqie +矿区kuangqu +矿泉kuangquan +狂热kuangre +矿山kuangshan +矿石kuangshi +框图kuangtu +宽广kuanguang +狂妄kuangwang +矿物kuangwu +旷野kuangye +宽宏kuanhong +宽厚kuanhou +宽阔kuankuo +宽容kuanrong +款式kuanshi +宽恕kuanshu +款项kuanxiang +宽心kuanxin +宽裕kuanyu +垮台kuatai +跨越kuayue +夸张kuazhang +裤衩kucha +库存kucun +哭喊kuhan +奎kui +溃kui +馈kui +亏kui +盔kui +岿kui +窥kui +葵kui +魁kui +傀kui +愧kui +馗kui +匮kui +夔kui +隗kui +蒉kui +揆kui +喹kui +喟kui +悝kui +愦kui +逵kui +暌kui +睽kui +聩kui +蝰kui +篑kui +跬kui +亏本kuiben +窥测kuice +亏待kuidai +愧疚kuijiu +亏空kuikong +亏损kuisun +魁梧kuiwu +溃疡kuiyang +枯竭kujie +库仑kulun +苦闷kumen +枯木kumu +困kun +昆kun +坤kun +捆kun +悃kun +阃kun +琨kun +锟kun +醌kun +鲲kun +髡kun +苦难kunan +苦恼kunao +困厄kune +困乏kunfa +困惑kunhuo +困境kunjing +困苦kunku +昆明kunming +困难kunnan +扩kuo +括kuo +适*kuo +阔kuo +廓kuo +栝*kuo +蛞kuo +阔别kuobie +扩充kuochong +阔绰kuochuo +扩大kuoda +括号kuohao +扩建kuojian +阔气kuoqi +扩展kuozhan +扩张kuozhang +哭泣kuqi +酷暑kushu +苦头kutou +苦维kuwei +枯萎kuwei +酷刑kuxing +苦于kuyu +枯燥kuzao +可想而知kxez +科学家kxj +科学技术kxjs +可行性kxx +科学院kxy +科研部kyb +开源节流kyjl +看样子kyz +了l +来l +量l +理l +路l +里l +论l +两l +利l +领l +流l +力l +立l +料l +连l +老l +六l +轮l +类l +列l +拉la +落*la +啦la +蜡la +腊la +蓝la +垃la +喇la +辣la +剌la +邋la +旯la +砬la +瘌la +喇叭laba +来lai +赖lai +莱lai +崃lai +徕lai +涞lai +濑lai +赉lai +睐lai +铼lai +癞lai +籁lai +来宾laibin +来到laidao +来犯laifan +来访laifang +来函laihan +来回laihui +来历laili +来临lailin +赖皮laipi +来日lairi +来势laishi +来头laitou +来往laiwang +来信laixin +来源laiyuan +来者laizhe +来自laizi +癞子laizi +辣椒lajiao +拉拢lalong +喇嘛lama +腊梅lamei +兰lan +烂lan +蓝lan +览lan +栏lan +婪lan +拦lan +篮lan +阑lan +澜lan +谰lan +揽lan +懒lan +缆lan +滥lan +岚lan +漤lan +榄lan +斓lan +罱lan +镧lan +褴lan +蓝本lanben +懒怠landai +滥调landiao +懒惰landuo +浪lang +朗lang +郎lang +狼lang +琅lang +榔lang +廊lang +莨lang +蒗lang +啷lang +阆lang +锒lang +稂lang +螂lang +栏杆langan +狼狈langbei +浪潮langchao +浪荡langdang +朗读langdu +浪费langfei +狼藉langji +浪漫langman +朗诵langsong +郎中langzhong +兰花lanhua +拦截lanjie +烂漫lanman +懒散lansan +蓝色lanse +缆绳lansheng +烂熟lanshu +蓝天lantian +蓝图lantu +阑尾lanwei +拦腰lanyao +滥用lanyong +兰州lanzhou +老lao +劳lao +落*lao +牢lao +涝lao +捞lao +络*lao +佬lao +姥lao +酪lao +烙lao +潦*lao +唠lao +崂lao +栳lao +铑lao +铹lao +痨lao +耢lao +醪lao +老板laoban +老伴laoban +老本laoben +劳动laodong +牢固laogu +老汉laohan +老化laohua +牢记laoji +劳驾laojia +牢靠laokao +劳苦laoku +牢牢laolao +劳累laolei +劳力laoli +老练laolian +牢笼laolong +劳模laomo +老年laonian +老人laoren +牢骚laosao +老少laoshao +老是laoshi +老实laoshi +老师laoshi +老乡laoxiang +老爷laoye +烙印laoyin +劳支laozhi +劳资laozi +劳作laozuo +腊月layue +狼狈不堪lbbk +力不从心lbcx +来不及lbj +来不了lbl +了不起lbq +劳动保险ldbx +来得及ldj +劳动量ldl +劳动力ldl +灵丹妙药ldmy +拉丁美洲ldmz +劳动者ldz +劳动致富ldzf +了le +乐le +勒le +肋le +仂le +叻le +泐le +鳓le +乐观leguan +类lei +雷lei +累lei +勒*lei +垒lei +泪lei +镭lei +蕾lei +磊lei +儡lei +擂lei +肋lei +羸lei +诔lei +嘞lei +嫘lei +缧lei +檑lei +耒lei +酹lei +类别leibie +类次leici +雷达leida +雷管leiguan +泪痕leihen +泪花leihua +累积leiji +累计leiji +累进leijin +磊落leiluo +累年leinian +类似leisi +擂台leitai +雷同leitong +类推leitui +类型leixing +雷雨leiyu +累月leiyue +累赘leizhui +勒令leling +冷leng +棱leng +楞leng +塄leng +愣leng +冷藏lengcang +冷淡lengdan +冷宫lenggong +棱角lengjiao +冷静lengjing +冷落lengluo +冷门lengmen +冷漠lengmo +冷暖lengnuan +冷僻lengpi +冷气lengqi +冷却lengque +冷水lengshui +冷遇lengyu +乐趣lequ +勒索lesuo +乐意leyi +乐园leyuan +两个文明lgwm +拉关系lgx +联合国lhg +联合会lhh +两回事lhs +联合体lht +理li +里li +利li +力li +立li +离li +例li +历li +粒li +厘li +礼li +李li +隶li +黎li +璃li +励li +犁li +梨li +丽li +厉li +篱li +狸li +漓li +鲤li +莉li +荔li +吏li +栗li +砾li +傈li +俐li +痢li +沥li +哩li +鬲*li +俪li +俚li +郦li +坜li +苈li +莅li +蓠li +藜li +呖li +唳li +喱li +猁li +悝*li +溧li +澧li +逦li +娌li +嫠li +骊li +缡li +枥li +栎li +轹li +戾li +砺li +詈li +罹li +锂li +鹂li +疠li +疬li +蛎li +蜊li +蠡li +笠li +篥li +粝li +醴li +跞li +雳li +鲡li +鳢li +黧li +俩lia +连lian +联lian +练lian +炼lian +脸lian +链lian +莲lian +镰lian +廉lian +怜lian +涟lian +帘lian +敛lian +恋lian +蔹lian +奁lian +潋lian +濂lian +琏lian +楝lian +殓lian +臁lian +裢lian +裣lian +蠊lian +鲢lian +立案lian +恋爱lianai +联邦lianbang +练兵lianbing +联播lianbo +练达lianda +连队liandui +量liang +两liang +粮liang +良liang +亮liang +梁liang +凉liang +辆liang +粱liang +晾liang +谅liang +墚liang +莨*liang +椋liang +踉liang +靓liang +魉liang +炼钢liangang +两半liangban +量变liangbian +两边liangbian +两便liangbian +两侧liangce +两次liangci +两地liangdi +两点liangdian +量度liangdu +良方liangfang +两广liangguang +良好lianghao +两极liangji +良机liangji +谅解liangjie +量具liangju +凉快liangkuai +两立liangli +两面liangmian +练功liangong +两栖liangqi +两讫liangqi +两全liangquan +粮食liangshi +两手liangshou +凉爽liangshuang +亮堂liangtang +两条liangtiao +两头liangtou +连贯lianguan +联贯lianguan +亮相liangxiang +良心liangxin +两性liangxing +量刑liangxing +两样liangyang +粮油liangyou +良缘liangyuan +粮站liangzhan +两者liangzhe +两重liangzhong +良种liangzhong +量子liangzi +联合lianhe +联欢lianhuan +廉价lianjia +联结lianjie +连接lianjie +联接lianjie +廉洁lianjie +联军lianjun +连累lianlei +联络lianluo +连忙lianmang +联盟lianmeng +怜悯lianmin +连年liannian +脸谱lianpu +连日lianri +炼乳lianru +联赛liansai +脸色lianse +连锁liansuo +练武lianwu +联系lianxi +练习lianxi +怜惜lianxi +联想lianxiang +连续lianxu +涟漪lianyi +联姻lianyin +联营lianying +炼油lianyou +联运lianyun +连载lianzai +了*liao +料liao +疗liao +辽liao +僚liao +撩liao +聊liao +燎liao +寥liao +潦liao +撂liao +镣liao +廖liao +蓼liao +尥liao +嘹liao +獠liao +寮liao +缭liao +钌liao +鹩liao +撩拨liaobo +潦草liaocao +疗程liaocheng +料到liaodao +潦倒liaodao +料定liaoding +了结liaojie +了解liaojie +辽阔liaokuo +料理liaoli +寥寥liaoliao +寥落liaoluo +辽宁liaoning +了却liaoque +了事liaoshi +聊天liaotian +料想liaoxiang +疗养liaoyang +礼拜libai +利弊libi +里边libian +理财licai +理睬licai +立场lichang +里程licheng +历程licheng +立春lichun +历次lici +历代lidai +理当lidang +立冬lidong +列lie +裂lie +烈lie +劣lie +猎lie +冽lie +埒lie +捩lie +咧lie +洌lie +趔lie +躐lie +鬣lie +裂变liebian +列车lieche +列出liechu +列岛liedao +裂缝liefeng +列国lieguo +烈火liehuo +劣迹lieji +列举lieju +裂开liekai +裂口liekou +列宁liening +猎奇lieqi +列强lieqiang +猎取liequ +烈日lieri +列入lieru +劣绅lieshen +烈士lieshi +劣势lieshi +烈属lieshu +裂纹liewen +列席liexi +烈性liexing +立法lifa +立方lifang +礼服lifu +立功ligong +利害lihai +厉害lihai +理化lihua +礼花lihua +理会lihui +离婚lihun +立即liji +理解lijie +礼节lijie +历届lijie +力矩liju +离开likai +理科like +立刻like +理亏likui +历来lilai +历历lili +力量liliang +利率lilu +理论lilun +立论lilun +礼貌limao +里面limian +利民limin +黎民limin +黎明liming +林lin +磷lin +临lin +邻lin +淋lin +麟lin +琳lin +霖lin +鳞lin +凛lin +赁lin +吝lin +蔺lin +啉lin +嶙lin +廪lin +懔lin +遴lin +檩lin +辚lin +膦lin +瞵lin +粼lin +躏lin +淋巴linba +临别linbie +淋病linbing +林场linchang +临床linchuang +临到lindao +领ling +另ling +零ling +令ling +灵ling +岭ling +铃ling +龄ling +凌ling +棱*ling +陵ling +拎ling +玲ling +菱ling +伶ling +羚ling +酃ling +苓ling +呤ling +囹ling +泠ling +绫ling +柃ling +棂ling +瓴ling +聆ling +蛉ling +翎ling +鲮ling +令爱lingai +凌晨lingchen +灵丹lingdan +领导lingdao +领地lingdi +零点lingdian +领队lingdui +灵感linggan +领海linghai +领航linghang +领会linghui +灵魂linghun +灵活linghuo +灵机lingji +零件lingjian +领教lingjiao +灵杰lingjie +领空lingkong +凌空lingkong +玲珑linglong +零乱lingluan +凌乱lingluan +领略linglue +灵敏lingmin +陵墓lingmu +灵巧lingqiao +领取lingqu +令人lingren +凌辱lingru +零散lingsan +领事lingshi +领受lingshou +领司lingsi +零碎lingsui +灵堂lingtang +零头lingtou +领土lingtu +磷光linguang +另外lingwai +领悟lingwu +领先lingxian +领衔lingxian +零星lingxing +领袖lingxiu +另选lingxuan +灵验lingyan +领域lingyu +令尊lingzun +磷火linhuo +历年linian +临界linjie +临近linjin +邻近linjin +邻里linli +淋漓linli +凛冽linlie +临摹linmo +里弄linong +鳞伤linshang +临时linshi +临死linsi +吝惜linxi +临行linxing +林业linye +临战linzhan +临终linzhong +礼炮lipao +李鹏lipeng +礼品lipin +力气liqi +离奇liqi +力求liqiu +立秋liqiu +历任liren +例如liru +利润lirun +离散lisan +理事lishi +历史lishi +隶属lishu +礼堂litang +立体liti +例题liti +力图litu +流liu +六liu +留liu +刘liu +硫liu +柳liu +陆*liu +馏liu +瘤liu +溜liu +琉liu +榴liu +碌*liu +浏liu +遛liu +骝liu +绺liu +旒liu +熘liu +锍liu +镏liu +鹨liu +鎏liu +留步liubu +流产liuchan +流畅liuchang +流程liucheng +流传liuchuan +流窜liucuan +流动liudong +流毒liudu +流放liufang +六届liujie +浏览liulan +流利liuli +留恋liulian +流露liulu +流落liuluo +流氓liumang +留念liunian +流失liushi +流逝liushi +流体liuti +流通liutong +流亡liuwang +流泻liuxie +留心liuxin +流行liuxing +流星liuxing +留学liuxue +流血liuxue +流言liuyan +留言liuyan +留洋liuyang +留影liuying +留用liuyong +流域liuyu +六月liuyue +流转liuzhuan +例外liwai +礼物liwu +利息lixi +立夏lixia +理想lixiang +立新lixin +离心lixin +理性lixing +力行lixing +厉行lixing +离休lixiu +立意liyi +利益liyi +离异liyi +利用liyong +理由liyou +力争lizheng +立正lizheng +理智lizhi +立志lizhi +离职lizhi +例子lizi +粒子lizi +立足lizu +屡见不鲜ljbx +两极分化ljfh +逻辑设计ljsj +逻辑思维ljsw +逻辑性ljx +灵机一动ljyd +落落大方lldf +拦路虎llh +来龙去脉llqm +零零碎碎llss +来来往往llww +联绵不断lmbd +灵敏度lmd +辽宁省lns +列宁主义lnzy +龙long +垄long +弄*long +笼long +隆long +聋long +咙long +窿long +拢long +陇long +垅long +茏long +泷long +珑long +栊long +胧long +砻long +癃long +隆冬longdong +垄断longduan +隆隆longlong +笼络longluo +笼统longtong +笼罩longzhao +隆重longzhong +漏lou +露*lou +楼lou +娄lou +搂lou +篓lou +陋lou +偻lou +蒌lou +喽lou +嵝lou +镂lou +瘘lou +耧lou +蝼lou +髅lou +漏洞loudong +漏斗loudou +镂空loukong +漏网louwang +来日方长lrfc +来人来函lrlh +了如指掌lrzz +理所当然lsdr +连锁反应lsfy +领事馆lsg +理事会lsh +力所能及lsnj +拉萨市lss +流水线lsx +良师益友lsyy +路lu +六*lu +率lu +露lu +绿lu +炉lu +律lu +虑lu +滤lu +陆lu +氯lu +鲁lu +铝lu +录lu +旅lu +卢lu +吕lu +芦lu +颅lu +庐lu +掳lu +卤lu +虏lu +麓lu +碌lu +赂lu +鹿lu +潞lu +禄lu +戮lu +驴lu +侣lu +履lu +屡lu +缕lu +垆lu +蓼*lu +撸lu +噜lu +闾lu +泸lu +渌lu +漉lu +逯lu +璐lu +栌lu +榈lu +橹lu +轳lu +辂lu +辘lu +氇lu +胪lu +膂lu +镥lu +稆lu +鸬lu +鹭lu +褛lu +簏lu +舻lu +鲈lu +卵luan +乱luan +峦luan +挛luan +孪luan +滦luan +脔luan +娈luan +栾luan +鸾luan +銮luan +卵巢luanchao +乱伦luanlun +乱子luanzi +旅伴luban +路标lubiao +路程lucheng +旅程lucheng +露出luchu +屡次luci +陆地ludi +露底ludi +旅店ludian +略lue +掠lue +锊lue +掠夺lueduo +旅费lufei +露骨lugu +旅馆luguan +路过luguo +绿化luhua +炉火luhuo +路径lujing +路局luju +陆军lujun +旅客luke +履历luli +率领luling +鲁莽lumang +露面lumian +论lun +轮lun +伦lun +抡lun +仑lun +沦lun +纶lun +囵lun +论处lunchu +轮船lunchuan +论点lundian +论调lundiao +伦敦lundun +轮换lunhuan +论据lunju +轮廓lunkuo +论理lunli +伦理lunli +轮流lunliu +论述lunshu +轮胎luntai +论坛luntan +沦为lunwei +论文lunwen +沦陷lunxian +轮训lunxun +论战lunzhan +论正lunzheng +论证lunzheng +轮轴lunzhou +论著lunzhu +落luo +罗luo +螺luo +洛luo +络luo +逻luo +咯*luo +烙*luo +萝luo +锣luo +箩luo +骡luo +裸luo +骆luo +倮luo +蠃luo +荦luo +捋luo +摞luo +猡luo +泺luo +漯luo +珞luo +椤luo +脶luo +硌*luo +镙luo +瘰luo +雒luo +萝卜luobu +落成luocheng +螺钉luoding +罗汉luohan +落后luohou +落户luohu +逻辑luoji +落空luokong +落款luokuan +箩筐luokuang +罗列luolie +罗马luoma +螺母luomu +罗盘luopan +落泊luopo +落实luoshi +螺栓luoshuan +裸体luoti +骆驼luotuo +罗网luowang +螺纹luowen +落伍luowu +落选luoxuan +螺旋luoxuan +络绎luoyi +录取luqu +路人luren +绿色luse +庐山lushan +旅社lushe +律师lushi +露天lutian +路途lutu +旅途lutu +路线luxian +率先luxian +录像luxiang +旅行luxing +履行luxing +陆续luxu +录音luyin +绿荫luyin +录用luyong +旅游luyou +绿洲luzhou +露珠luzhu +路子luzi +炉子luzi +另行安排lxap +例行公事lxgs +联系人lxr +留学生lxs +另行通知lxtz +林业部lyb +老一辈lyb +另一方面lyfm +劳逸结合lyjh +利用率lyl +老一套lyt +留有余地lyyd +来者不拒lzbj +立足点lzd +老中青lzq +理直气壮lzqz +兰州市lzs +两重性lzx +面m +命m +们m +民m +毛m +没m +米m +明m +马m +么m +每m +门m +名m +磨m +美m +密m +苗m +满m +亩m +目m +呒m +马ma +么*ma +麻ma +吗ma +妈ma +骂ma +嘛ma +码ma +摩*ma +抹*ma +玛ma +蚂ma +唛ma +犸ma +嬷ma +杩ma +蟆ma +马鞍maan +麻痹mabi +马达mada +麻烦mafan +麻纺mafang +马虎mahu +麦mai +脉mai +卖mai +买mai +埋mai +迈mai +劢mai +荬mai +霾mai +买办maiban +脉搏maibo +迈步maibu +埋藏maicang +脉冲maichong +脉动maidong +埋伏maifu +卖国maiguo +脉络mailuo +买卖maimai +卖命maiming +埋没maimo +卖弄mainong +埋头maitou +卖淫maiyin +埋怨maiyuan +埋葬maizang +买帐maizhang +卖座maizuo +马力mali +麻利mali +马路malu +妈妈mama +麻木mamu +满man +慢man +曼man +漫man +蔓man +瞒man +馒man +蛮man +谩man +墁man +幔man +缦man +熳man +镘man +颟man +螨man +鳗man +鞔man +漫长manchang +忙mang +芒mang +盲mang +茫mang +氓mang +莽mang +邙mang +漭mang +硭mang +蟒mang +忙碌manglu +莽莽mangmang +盲目mangmu +茫然mangran +盲人mangren +忙于mangyu +莽原mangyuan +蛮横manheng +漫画manhua +满怀manhuai +谩骂manma +满目manmu +满腔manqiang +蔓延manyan +满意manyi +满载manzai +满足manzu +毛mao +矛mao +冒mao +貌mao +贸mao +帽mao +猫mao +茅mao +锚mao +铆mao +卯mao +茂mao +袤mao +茆mao +峁mao +泖mao +瑁mao +昴mao +牦mao +耄mao +旄mao +懋mao +瞀mao +蟊mao +髦mao +毛病maobing +毛糙maocao +冒充maochong +铆钉maoding +矛盾maodun +冒犯maofan +毛纺maofang +冒号maohao +冒尖maojian +冒进maojin +茅坑maokeng +毛利maoli +冒昧maomei +茂密maomi +冒牌maopai +毛坯maopi +贸然maoran +茂盛maosheng +冒失maoshi +矛头maotou +冒险maoxian +贸易maoyi +冒雨maoyu +毛重maozhong +帽子maozi +马上mashang +马桶matong +码头matou +马戏maxi +麻醉mazui +免不了mbl +明辨是非mbsf +满不在乎mbzh +默不作声mbzs +满城风雨mcfy +目的地mdd +目瞪口呆mdkd +描淡写mdx +么me +麽me +秘而不宣mebx +没mei +每mei +美mei +煤mei +霉mei +酶mei +梅mei +妹mei +眉mei +玫mei +枚mei +媒mei +镁mei +昧mei +寐mei +媚mei +糜*mei +谜*mei +莓mei +嵋mei +猸mei +浼mei +湄mei +楣mei +镅mei +鹛mei +袂mei +魅mei +每次meici +每当meidang +美德meide +没法meifa +每逢meifeng +每个meige +美观meiguan +玫瑰meigui +美国meiguo +美好meihao +美化meihua +媒介meijie +眉睫meijie +枚举meiju +煤矿meikuang +霉烂meilan +魅力meili +美丽meili +美满meiman +眉毛meimao +美貌meimao +妹妹meimei +美妙meimiao +眉目meimu +每年meinian +煤气meiqi +每人meiren +每日meiri +美容meirong +眉梢meishao +每时meishi +美术meishu +媒妁meishuo +煤炭meitan +每天meitian +煤田meitian +美学meixue +没有meiyou +煤油meiyou +美元meiyuan +每月meiyue +没治meizhi +每周meizhou +们men +门men +闷men +扪men +焖men +懑men +钔men +门房menfang +孟meng +猛meng +蒙meng +盟meng +梦meng +萌meng +锰meng +氓*meng +檬meng +勐meng +甍meng +瞢meng +懵meng +朦meng +礞meng +虻meng +蜢meng +蠓meng +艋meng +艨meng +蒙蔽mengbi +萌发mengfa +蒙古menggu +盟国mengguo +梦幻menghuan +蒙混menghun +梦见mengjian +猛进mengjin +梦境mengjing +猛烈menglie +蒙胧menglong +蒙昧mengmei +猛然mengran +萌生mengsheng +猛士mengshi +蒙受mengshou +梦想mengxiang +梦乡mengxiang +猛醒mengxing +萌芽mengya +盟友mengyou +盟约mengyue +猛增mengzeng +门户menhu +门路menlu +门牌menpai +门票menpiao +闷气menqi +门诊menzhen +名副其实mfqs +眉飞色舞mfsw +没关系mgx +蒙古族mgz +蒙混过关mhgg +米mi +密mi +迷mi +蜜mi +秘mi +眯mi +醚mi +靡mi +糜mi +谜mi +弥mi +觅mi +泌mi +幂mi +芈mi +谧mi +蘼mi +咪mi +嘧mi +猕mi +汨mi +宓mi +弭mi +脒mi +祢mi +敉mi +糸mi +縻mi +麋mi +面mian +棉mian +免mian +绵mian +眠mian +冕mian +勉mian +娩mian +缅mian +沔mian +渑mian +湎mian +腼mian +眄mian +面部mianbu +免除mianchu +免得miande +面对miandui +面额miane +棉花mianhua +缅怀mianhuai +面积mianji +面具mianju +面孔miankong +勉励mianli +面临mianlin +面貌mianmao +面面mianmian +绵绵mianmian +面目mianmu +面庞mianpang +面前mianqian +勉强mianqiang +面容mianrong +面色mianse +棉纱miansha +面授mianshou +免税mianshui +面谈miantan +面向mianxiang +免刑mianxing +棉絮mianxu +绵延mianyan +面议mianyi +免疫mianyi +面罩mianzhao +免职mianzhi +面子mianzi +苗miao +秒miao +描miao +庙miao +妙miao +瞄miao +藐miao +渺miao +喵miao +邈miao +缈miao +缪miao +杪miao +淼miao +眇miao +鹋miao +秒表miaobiao +描绘miaohui +妙龄miaoling +渺茫miaomang +描摹miaomo +藐视miaoshi +描述miaoshu +苗条miaotiao +苗头miaotou +描写miaoxie +瞄准miaozhun +弥补mibu +谜底midi +密度midu +灭mie +蔑mie +乜*mie +咩mie +蠛mie +篾mie +灭火miehuo +灭迹mieji +灭绝miejue +灭口miekou +蔑视mieshi +灭亡miewang +密封mifeng +蜜蜂mifeng +眯缝mifeng +迷航mihang +迷糊mihu +迷惑mihuo +密集miji +密件mijian +迷津mijin +秘诀mijue +糜烂milan +迷恋milian +密令miling +迷路milu +密码mima +迷漫miman +弥漫miman +秘密mimi +汨汨mimi +谜面mimian +密谋mimou +民min +敏min +抿min +皿min +悯min +闽min +苠min +岷min +闵min +泯min +缗min +玟min +珉min +愍min +黾min +鳘min +民办minban +民兵minbing +民法minfa +民愤minfen +民风minfeng +命ming +明ming +名ming +鸣ming +螟ming +盟*ming +铭ming +冥ming +茗ming +溟ming +暝ming +瞑ming +酩ming +敏感mingan +明白mingbai +名册mingce +名称mingcheng +明处mingchu +名次mingci +名词mingci +名单mingdan +明灯mingdeng +民歌minge +名额minge +名贵minggui +铭记mingji +名家mingjia +铭刻mingke +明快mingkuai +明朗minglang +名利mingli +明亮mingliang +明了mingliao +命令mingling +名流mingliu +明码mingma +明媚mingmei +明明mingming +名目mingmu +明年mingnian +名牌mingpai +名片mingpian +名气mingqi +明确mingque +明人mingren +名人mingren +名胜mingsheng +名声mingsheng +名堂mingtang +明天mingtian +名望mingwang +明文mingwen +明细mingxi +明显mingxian +鸣谢mingxie +明星mingxing +名言mingyan +名义mingyi +名誉mingyu +命运mingyun +明知mingzhi +明智mingzhi +明珠mingzhu +名著mingzhu +名字mingzi +民航minhang +民间minjian +敏捷minjie +民警minjing +民情minqing +敏锐minrui +民事minshi +民心minxin +民意minyi +民用minyong +民运minyun +民政minzheng +民众minzhong +民主minzhu +民族minzu +密切miqie +迷人miren +迷失mishi +秘书mishu +密探mitan +迷途mitu +谬miu +谬论miulun +谬误miuwu +迷惘miwang +迷雾miwu +迷信mixin +密友miyou +谜语miyu +蜜月miyue +马克思mks +眉开眼笑mkyx +马列主义mlzy +满面春风mmcf +马马虎虎mmhh +面面俱到mmjd +莫名其妙mmqm +默默无闻mmww +明目张胆mmzd +无*mo +磨mo +没*mo +万*mo +末mo +模mo +膜mo +摸mo +墨mo +摩mo +脉*mo +莫mo +抹mo +冒*mo +默mo +貉*mo +嘿*mo +摹mo +蘑mo +魔mo +沫mo +漠mo +寞mo +陌mo +谟mo +茉mo +蓦mo +馍mo +嫫mo +殁mo +镆mo +秣mo +瘼mo +耱mo +貊mo +貘mo +默哀moai +莫不mobu +磨擦moca +摩擦moca +磨蹭moceng +莫大moda +磨刀modao +摩登modeng +摸底modi +模范mofan +模仿mofang +摹仿mofang +莫非mofei +魔鬼mogui +模糊mohu +墨迹moji +模块mokuai +磨砺moli +磨练molian +末了moliao +末路molu +没落moluo +磨灭momie +默默momo +磨难monan +模拟moni +摹拟moni +末期moqi +默契moqi +默然moran +漠然moran +默认moren +末日mori +莫如moru +抹杀mosha +抹煞mosha +末梢moshao +陌生mosheng +模式moshi +没收moshou +魔术moshu +磨损mosun +摸索mosuo +模特mote +摩托motuo +某mou +谋mou +牟mou +侔mou +哞mou +缪*mou +眸mou +蛑mou +蝥mou +鍪mou +某地moudi +某个mouge +谋害mouhai +谋划mouhua +某军moujun +牟利mouli +谋略moulue +谋求mouqiu +牟取mouqu +谋杀mousha +谋生mousheng +某些mouxie +末尾mowei +默写moxie +模型moxing +默许moxu +模样moyang +魔掌mozhang +模子mozi +妙趣横生mqhs +门市部msb +名胜古迹msgj +妙手回春mshc +莫斯科msk +没什么msm +每时每刻msmk +秘书长msz +没事找事mszs +摩托车mtc +埋头工作mtgz +埋头苦干mtkg +亩mu +目mu +木mu +母mu +墓mu +模*mu +幕mu +牧mu +姆mu +穆mu +姥*mu +牟*mu +拇mu +牡mu +暮mu +募mu +慕mu +睦mu +仫mu +坶mu +苜mu +沐mu +毪mu +钼mu +母爱muai +墓碑mubei +目标mubiao +木材mucai +牧草mucao +目测muce +牧场muchang +目次muci +牡丹mudan +目的mudi +牧歌muge +目光muguang +幕后muhou +目击muji +募集muji +木刻muke +木料muliao +幕僚muliao +目录mulu +牧民mumin +木讷mune +木偶muou +目前muqian +母亲muqin +牧区muqu +木然muran +暮色muse +牧师mushi +目送musong +牧童mutong +牧业muye +沐浴muyu +民意测验mycy +贸易市场mysc +贸易协定myxd +民政部mzb +美中不足mzbz +毛泽东mzd +满载而归mzeg +明知故犯mzgf +毛织品mzp +目中无人mzwr +毛主席mzx +年n +能n +内n +那n +农n +你n +南n +难n +呢n +女n +泥n +哪n +拿n +念n +牛n +宁n +脑n +粘n +尼n +纳n +嗯n +那na +南na +哪na +拿na +纳na +呢*na +钠na +呐na +娜na +捺na +肭na +镎na +衲na +那边nabian +纳粹nacui +哪儿naer +那个nage +哪个nage +呐喊nahan +哪会nahui +耐nai +哪*nai +奶nai +乃nai +氖nai +奈nai +鼐nai +艿nai +萘nai +柰nai +耐烦naifan +奈何naihe +耐久naijiu +耐劳nailao +奶奶nainai +耐心naixin +耐性naixing +耐用naiyong +奶油naiyou +乃至naizhi +那里nali +哪里nali +那么name +南nan +难nan +男nan +喃nan +囝nan +囡nan +楠nan +腩nan +蝻nan +赧nan +难办nanban +南北nanbei +南边nanbian +难产nanchan +南昌nanchang +难处nanchu +难道nandao +难得nande +难点nandian +难度nandu +哪能naneng +南方nanfang +南非nanfei +难分nanfen +南风nanfeng +囊nang +攮nang +囔nang +馕nang +曩nang +囊括nangkuo +难怪nanguai +难关nanguan +南国nanguo +难过nanguo +南海nanhai +南货nanhuo +南极nanji +难解nanjie +南京nanjing +难看nankan +难堪nankan +南面nanmian +难免nanmian +难民nanmin +南宁nanning +男女nannu +赧然nanran +男人nanren +难色nanse +难事nanshi +难受nanshou +难说nanshuo +难题nanti +难听nanting +难为nanwei +男性nanxing +南亚nanya +南洋nanyang +难以nanyi +难友nanyou +难于nanyu +脑nao +闹nao +努*nao +挠nao +恼nao +淖nao +孬nao +垴nao +呶nao +猱nao +瑙nao +硇nao +铙nao +蛲nao +脑袋naodai +脑海naohai +恼火naohuo +脑筋naojin +闹剧naoju +闹事naoshi +哪怕napa +纳入naru +那时nashi +拿手nashou +纳税nashui +那些naxie +哪些naxie +纳新naxin +那样nayang +哪样nayang +那种nazhong +年产量ncl +农产品ncp +南昌市ncs +难道说nds +呢ne +哪*ne +呐*ne +讷ne +内nei +那*nei +哪*nei +馁nei +内部neibu +内存neicun +内地neidi +内阁neige +内涵neihan +内行neihang +内奸neijian +内疚neijiu +内科neike +内乱neiluan +内幕neimu +内勤neiqin +内容neirong +内外neiwai +内销neixiao +内心neixin +内因neiyin +内应neiying +内在neizai +嫩nen +恁nen +能neng +能动nengdong +能否nengfou +能干nenggan +能够nenggou +能力nengli +能量nengliang +能耐nengnai +能人nengren +能手nengshou +能源nengyuan +能者nengzhe +农副产品nfcp +年富力强nflq +能工巧匠ngqj +你ni +泥ni +尼ni +呢*ni +逆ni +拟ni +尿ni +妮ni +霓ni +倪ni +匿ni +腻ni +溺ni +伲ni +坭ni +猊ni +怩ni +昵ni +旎ni +祢*ni +慝ni +睨ni +铌ni +鲵ni +年nian +念nian +粘nian +蔫nian +拈nian +碾nian +撵nian +捻nian +酿nian +廿nian +埝nian +辇nian +黏nian +鲇nian +鲶nian +年初nianchu +年代niandai +念叨niandao +年底niandi +年度niandu +年份nianfen +娘niang +年华nianhua +年画nianhua +年级nianji +年纪nianji +年鉴nianjian +年来nianlai +年利nianli +年历nianli +拈量nianliang +年龄nianling +年迈nianmai +年年niannian +年青nianqing +年轻nianqing +年岁niansui +年头niantou +念头niantou +年限nianxian +年月nianyue +酿造nianzao +年终nianzhong +尿niao +鸟niao +溺*niao +茑niao +嬲niao +脲niao +袅niao +鸟瞰niaokan +逆差nicha +你处nichu +你的nide +拟定niding +拟订niding +镍nie +啮nie +涅nie +捏nie +聂nie +孽nie +镊nie +乜nie +陧nie +蘖nie +嗫nie +颞nie +臬nie +蹑nie +捏造niezao +腻烦nifan +泥浆nijiang +逆境nijing +泥坑nikeng +逆流niliu +你们nimen +您nin +宁ning +凝ning +拧ning +柠ning +狞ning +泞ning +佞ning +苎ning +咛ning +甯ning +聍ning +凝固ninggu +凝结ningjie +宁静ningjing +凝聚ningju +宁可ningke +宁肯ningken +宁日ningri +凝视ningshi +凝望ningwang +宁夏ningxia +宁愿ningyuan +泥泞nining +泥塑nisu +牛niu +扭niu +钮niu +纽niu +拗*niu +狃niu +忸niu +妞niu +纽带niudai +牛犊niudu +纽扣niukou +纽约niuyue +扭转niuzhuan +腻味niwei +你我niwo +拟议niyi +泥沼nizhao +逆转nizhuan +难解难分njnf +南京市njs +南极洲njz +扭亏为盈nkwy +脑力劳动nlld +年老体弱nltr +内蒙古nmg +农贸市场nmsc +那么些nmx +那么样nmy +念念不忘nnbw +难能可贵nnkg +南宁市nns +农nong +弄nong +浓nong +脓nong +侬nong +哝nong +脓包nongbao +农村nongcun +浓度nongdu +农妇nongfu +浓厚nonghou +农会nonghui +农活nonghuo +农具nongju +农历nongli +农林nonglin +农忙nongmang +农民nongmin +弄清nongqing +农时nongshi +农药nongyao +农业nongye +农艺nongyi +浓郁nongyu +耨nou +年轻化nqh +年轻人nqr +那时候nsh +能说会道nshd +南斯拉夫nslf +能上能下nsnx +逆水行舟nsxz +农田水利ntsl +女nu +奴nu +努nu +怒nu +弩nu +胬nu +孥nu +驽nu +恧nu +钕nu +衄nu +暖nuan +暖和nuanhe +暖流nuanliu +暖气nuanqi +奴婢nubi +奴才nucai +虐nue +虐待nuedai +虐疾nueji +女儿nuer +女工nugong +怒吼nuhou +奴化nuhua +怒火nuhuo +努力nuli +奴隶nuli +诺nuo +娜*nuo +挪nuo +懦nuo +糯nuo +傩nuo +搦nuo +喏nuo +锘nuo +挪用nuoyong +奴仆nupu +女人nuren +女色nuse +女士nushi +女性nuxing +女婿nuxu +女子nuzi +能文能武nwnw +弄虚作假nxzj +农作物nzw +你争我夺nzwd +欧o +偶o +哦o +鸥o +殴o +藕o +呕o +沤o +讴o +噢o +怄o +瓯o +耦o +偶然性orx +区*ou +欧ou +偶ou +鸥ou +殴ou +藕ou +呕ou +沤ou +讴ou +怄ou +瓯ou +耦ou +殴打ouda +偶尔ouer +讴歌ouge +偶合ouhe +耦合ouhe +欧姆oumu +怄气ouqi +偶然ouran +藕色ouse +偶数oushu +呕吐outu +欧阳ouyang +欧洲ouzhou +批p +平p +判p +配p +片p +派p +破p +排p +品p +皮p +喷p +盘p +偏p +评p +怕p +培p +普p +贫p +跑p +炮p +怕pa +派pa +爬pa +帕pa +扒*pa +耙*pa +啪pa +趴pa +琶pa +葩pa +杷pa +钯*pa +筢pa +派pai +排pai +拍pai +牌pai +迫*pai +哌pai +徘pai +湃pai +俳pai +蒎pai +排版paiban +拍板paiban +排比paibi +派别paibie +排场paichang +排斥paichi +排除paichu +排队paidui +牌号paihao +徘徊paihuai +排挤paiji +牌价paijia +排列pailie +拍卖paimai +派遣paiqian +排球paiqiu +派生paisheng +派头paitou +排外paiwai +排泄paixie +排演paiyan +牌照paizhao +判pan +盘pan +叛pan +番*pan +潘pan +攀pan +磐pan +盼pan +畔pan +胖pan +拚*pan +爿pan +泮pan +袢pan +襻pan +蟠pan +蹒pan +叛变panbian +判别panbie +盘缠panchan +盘存pancun +叛党pandang +攀登pandeng +盘点pandian +判定panding +判断panduan +攀附panfu +旁pang +膀*pang +磅*pang +乓pang +庞pang +耪pang +胖pang +彷pang +滂pang +逄pang +螃pang +旁边pangbian +庞大pangda +盘亘pangen +旁观pangguan +旁听pangting +旁通pangtong +滂沱pangtuo +庞杂pangza +盘踞panju +判决panjue +叛乱panluan +判明panming +叛逆panni +盘算pansuan +蟠桃pantao +叛徒pantu +盼望panwang +判刑panxing +盘旋panxuan +跑pao +炮pao +刨pao +抛pao +泡pao +咆pao +袍pao +匏pao +狍pao +庖pao +脬pao +疱pao +炮兵paobing +跑步paobu +炮弹paodan +跑道paodao +抛光paoguang +炮火paohuo +炮击paoji +抛锚paomao +泡沫paomo +抛弃paoqi +炮手paoshou +炮台paotai +炮艇paoting +咆哮paoxiao +泡影paoying +炮仗paozhang +炮制paozhi +怕死pasi +疲惫不堪pbbk +迫不急待pbjd +破除迷信pcmx +平等互利pdhl +配pei +培pei +陪pei +胚pei +呸pei +裴pei +赔pei +佩pei +沛pei +辔pei +帔pei +旆pei +锫pei +醅pei +霈pei +陪伴peiban +配备peibei +赔本peiben +赔偿peichang +陪衬peichen +配方peifang +佩服peifu +配合peihe +配给peiji +配件peijian +配角peijiao +赔款peikuan +赔礼peili +配偶peiou +陪审peishen +陪送peisong +胚胎peitai +配套peitao +陪同peitong +培训peixun +培养peiyang +配音peiyin +培育peiyu +配乐peiyue +陪葬peizang +配制peizhi +配置peizhi +培植peizhi +喷pen +盆pen +湓pen +盆地pendi +碰peng +棚peng +蓬peng +朋peng +捧peng +膨peng +砰peng +抨peng +烹peng +澎peng +彭peng +硼peng +篷peng +鹏peng +堋peng +嘭peng +怦peng +蟛peng +碰杯pengbei +碰壁pengbi +蓬勃pengbo +捧场pengchang +抨击pengji +蓬莱penglai +蓬乱pengluan +澎湃pengpai +烹饪pengren +硼砂pengsha +蓬松pengsong +烹调pengtiao +朋友pengyou +膨胀pengzhang +喷溅penjian +盆景penjing +喷射penshe +喷嚏penti +平方公里pfgl +平分秋色pfqs +批pi +皮pi +坏*pi +否*pi +辟*pi +坯pi +脾pi +疲pi +砒pi +霹pi +披pi +劈pi +琵pi +毗pi +啤pi +匹pi +痞pi +僻pi +屁pi +譬pi +丕pi +仳pi +陂*pi +陴pi +邳pi +郫pi +圮pi +埤*pi +鼙pi +芘pi +擗pi +吡*pi +噼pi +庀pi +淠pi +媲pi +纰pi +枇pi +甓pi +睥pi +罴pi +铍pi +癖pi +裨*pi +疋pi +蚍pi +蜱pi +貔pi +片pian +偏pian +便*pian +篇pian +骗pian +扁*pian +谝pian +骈pian +缏*pian +犏pian +胼pian +翩pian +蹁pian +偏差piancha +片断pianduan +片段pianduan +偏废pianfei +篇幅pianfu +偏激pianji +偏见pianjian +骗局pianju +片刻pianke +偏离pianli +片面pianmian +偏旁pianpang +偏僻pianpi +偏颇pianpo +骗取pianqu +骗人pianren +骗术pianshu +偏袒piantan +翩跹pianxian +偏向pianxiang +偏移pianyi +便宜pianyi +篇章pianzhang +骗子pianzi +票piao +漂piao +朴*piao +飘piao +瓢piao +剽piao +莩*piao +嘌piao +嫖piao +骠*piao +缥piao +殍piao +瞟piao +螵piao +漂泊piaobo +票房piaofang +漂浮piaofu +票价piaojia +票据piaoju +漂亮piaoliang +漂流piaoliu +飘流piaoliu +飘落piaoluo +票面piaomian +飘渺piaomiao +飘泊piaopo +剽窃piaoqie +飘然piaoran +飘散piaosan +飘扬piaoyang +飘游piaoyou +疲惫pibei +批驳pibo +撇pie +瞥pie +丿pie +苤pie +氕pie +批发pifa +批复pifu +皮肤pifu +皮革pige +屁股pigu +疲倦pijuan +疲劳pilao +纰漏pilou +披露pilu +品pin +贫pin +频pin +拼pin +苹pin +聘pin +拚pin +姘pin +嫔pin +榀pin +牝pin +颦pin +品尝pinchang +频传pinchuan +拼凑pincou +频带pindai +频道pindao +品德pinde +贫乏pinfa +频繁pinfan +平ping +评ping +瓶ping +凭ping +苹ping +冯*ping +乒ping +坪ping +萍ping +屏ping +俜ping +娉ping +枰ping +鲆ping +平安pingan +评比pingbi +屏蔽pingbi +平常pingchang +平川pingchuan +平淡pingdan +平等pingdeng +平地pingdi +平定pingding +评定pingding +品格pinge +平反pingfan +平凡pingfan +平方pingfang +平分pingfen +评分pingfen +评功pinggong +平衡pingheng +评级pingji +平价pingjia +评价pingjia +评奖pingjiang +凭借pingjie +平静pingjing +平均pingjun +平空pingkong +凭空pingkong +评理pingli +评论pinglun +平面pingmian +平民pingmin +屏幕pingmu +评判pingpan +乒乓pingpang +平平pingping +平壤pingrang +平日pingri +平时pingshi +平手pingshou +评说pingshuo +平素pingsu +平坦pingtan +乒坛pingtan +平稳pingwen +平息pingxi +萍乡pingxiang +平行pingxing +平易pingyi +评议pingyi +平庸pingyong +平原pingyuan +平仄pingze +屏障pingzhang +凭着pingzhe +平整pingzheng +凭证pingzheng +评注pingzhu +贫寒pinhan +品级pinji +贫困pinkun +频率pinlu +品貌pinmao +拼命pinming +品名pinming +品评pinping +聘请pinqing +贫穷pinqiong +聘任pinren +聘书pinshu +拼写pinxie +品行pinxing +品性pinxing +拼音pinyin +品质pinzhi +品种pinzhong +批判pipan +匹配pipei +批评piping +脾气piqi +譬如piru +疲软piruan +批示pishi +脾胃piwei +脾性pixing +辟谣piyao +批语piyu +批阅piyue +批注pizhu +批准pizhun +平均数pjs +披荆斩棘pjzj +评论员ply +跑马观花pmgh +破po +迫po +坡po +泼po +繁*po +朴*po +泊*po +颇po +婆po +魄po +粕po +叵po +陂*po +鄱po +泺*po +珀po +攴po +钋po +钷po +钹*po +皤po +笸po +破案poan +破产pochan +破除pochu +坡度podu +泼妇pofu +破格poge +迫害pohai +破坏pohuai +破获pohuo +迫近pojin +破旧pojiu +泼辣pola +破烂polan +魄力poli +破例poli +破裂polie +破灭pomie +迫切poqie +迫使poshi +破碎posui +破损posun +破土potu +剖pou +裒pou +掊pou +剖解poujie +剖析pouxi +破绽pozhan +蓬蓬勃勃ppbb +普普通通pptt +旁若无人prwr +普通话pth +抛头露面ptlm +普pu +谱pu +扑pu +埔pu +铺pu +暴*pu +葡pu +朴pu +蒲pu +堡*pu +脯*pu +仆pu +莆pu +菩pu +圃pu +浦pu +曝pu +瀑pu +匍pu +噗pu +溥pu +濮pu +璞pu +氆pu +镤pu +镨pu +蹼pu +普遍pubian +普查pucha +扑哧puchi +扑打puda +铺盖pugai +普及puji +铺平puping +仆人puren +菩萨pusa +铺设pushe +朴实pushi +朴素pusu +葡萄putao +普通putong +扑通putong +铺位puwei +谱写puxie +普选puxuan +铺张puzhang +普照puzhao +朴直puzhi +平易近人pyjr +拼音字母pyzm +铺张浪费pzlf +起q +前q +其q +去q +气q +全q +期q +群q +情q +区q +强q +切q +取q +七q +求q +清q +确q +权q +且q +青q +亲爱的qad +情报所qbs +千百万qbw +千变万化qbwh +取长补短qcbd +千锤百炼qcbl +恰到好处qdhc +全党全军和全国qdqg +取而代之qedz +轻而易举qeyj +千方百计qfbj +清规戒律qgjl +勤工俭学qgjx +旗鼓相当qgxd +轻工业qgy +轻工业部qgyb +勤工助学qgzx +权衡利弊qhlb +骑虎难下qhnx +青海省qhs +青红皂白qhzb +起qi +其qi +气qi +期qi +七qi +器qi +齐qi +奇qi +汽qi +企qi +漆qi +欺qi +旗qi +畦qi +启qi +弃qi +歧qi +稽*qi +缉*qi +栖qi +戚qi +妻qi +凄qi +柒qi +沏qi +棋qi +崎qi +脐qi +祈qi +祁qi +骑qi +岂qi +乞qi +契qi +砌qi +迄qi +泣qi +讫qi +亟*qi +亓qi +俟qi +圻qi +芑qi +芪qi +荠*qi +萁qi +萋qi +葺qi +蕲qi +嘁qi +屺qi +岐qi +岖*qi +汔qi +淇qi +骐qi +绮qi +琪qi +琦qi +杞qi +桤qi +槭qi +耆qi +欹qi +祺qi +憩qi +碛qi +颀qi +蛴qi +蜞qi +綦qi +綮qi +蹊qi +鳍qi +麒qi +卡*qia +恰qia +掐qia +洽qia +伽*qia +葜qia +袷*qia +髂qia +恰当qiadang +恰好qiahao +前qian +千qian +钱qian +浅qian +签qian +迁qian +铅qian +潜qian +牵qian +钳qian +纤*qian +谴qian +扦qian +钎qian +仟qian +谦qian +乾qian +黔qian +遣qian +堑qian +嵌qian +欠qian +歉qian +倩qian +佥qian +阡qian +芊qian +芡qian +茜qian +荨qian +掮qian +岍qian +悭qian +慊qian +骞qian +搴qian +褰qian +缱qian +椠qian +犍*qian +肷qian +愆qian +钤qian +虔qian +箬qian +箝qian +前辈qianbei +前边qianbian +浅薄qianbo +钱财qiancai +欠产qianchan +前程qiancheng +签到qiandao +前敌qiandi +签订qianding +签发qianfa +遣返qianfan +前方qianfang +强qiang +将*qiang +枪qiang +抢qiang +墙qiang +腔qiang +呛qiang +羌qiang +蔷qiang +戕qiang +嫱qiang +樯qiang +戗qiang +炝qiang +锖qiang +锵qiang +镪qiang +襁qiang +蜣qiang +羟qiang +跄qiang +墙壁qiangbi +枪毙qiangbi +强辩qiangbian +强大qiangda +枪弹qiangdan +强盗qiangdao +强调qiangdiao +腔调qiangdiao +强度qiangdu +抢夺qiangduo +强攻qianggong +强国qiangguo +强化qianghua +强加qiangjia +强奸qiangjian +抢劫qiangjie +强劲qiangjin +抢救qiangjiu +枪决qiangjue +强烈qianglie +强迫qiangpo +强权qiangquan +强弱qiangruo +枪杀qiangsha +强盛qiangsheng +千古qiangu +牵挂qiangua +蔷薇qiangwei +抢险qiangxian +强行qiangxing +强硬qiangying +强占qiangzhan +强者qiangzhe +强制qiangzhi +枪支qiangzhi +强壮qiangzhuang +前后qianhou +前进qianjin +前景qianjing +迁就qianjiu +歉疚qianjiu +迁居qianju +乾坤qiankun +千里qianli +前例qianli +潜力qianli +牵连qianlian +前列qianlie +浅陋qianlou +前面qianmian +签名qianming +前年qiannian +前期qianqi +千秋qianqiu +前驱qianqu +欠缺qianque +前人qianren +前任qianren +纤弱qianruo +前哨qianshao +牵涉qianshe +歉收qianshou +签署qianshu +遣送qiansong +前提qianti +前天qiantian +欠条qiantiao +前途qiantu +千瓦qianwa +千万qianwan +前往qianwang +前夕qianxi +纤细qianxi +前线qianxian +浅显qianxian +谦虚qianxu +谦逊qianxun +前言qianyan +前沿qianyan +前夜qianye +歉意qianyi +迁移qianyi +牵引qianyin +潜在qianzai +谴责qianze +前者qianzhe +签证qianzheng +牵制qianzhi +钳制qianzhi +签字qianzi +前奏qianzou +桥qiao +瞧qiao +壳*qiao +巧qiao +敲qiao +乔qiao +蕉qiao +橇qiao +锹qiao +悄qiao +侨qiao +鞘qiao +撬qiao +翘qiao +峭qiao +俏qiao +窍qiao +雀*qiao +劁qiao +诮qiao +谯qiao +荞qiao +峤*qiao +愀qiao +憔qiao +缲*qiao +樵qiao +硗qiao +跷qiao +鞒qiao +侨胞qiaobao +桥墩qiaodun +巧计qiaoji +瞧见qiaojian +侨居qiaoju +桥梁qiaoliang +窍门qiaomen +巧妙qiaomiao +桥牌qiaopai +乔迁qiaoqian +悄然qiaoran +侨务qiaowu +敲诈qiaozha +恰似qiasi +洽谈qiatan +岂不qibu +起步qibu +器材qicai +奇才qicai +凄惨qican +起草qicao +汽车qiche +骑车qiche +启程qicheng +起初qichu +凄楚qichu +其次qici +期待qidai +脐带qidai +岂但qidan +启迪qidi +起点qidian +启动qidong +气度qidu +切qie +且qie +砌*qie +茄qie +怯qie +窃qie +伽*qie +郄qie +惬qie +慊*qie +妾qie +挈qie +锲qie +箧qie +窃案qiean +切断qieduan +切合qiehe +窃据qieju +窃取qiequ +怯弱qieruo +切身qieshen +切实qieshi +切题qieti +窃听qieting +切削qiexiao +惬意qieyi +启发qifa +起飞qifei +岂非qifei +气愤qifen +气氛qifen +欺负qifu +气概qigai +乞丐qigai +岂敢qigan +气功qigong +奇怪qiguai +器官qiguan +旗号qihao +漆黑qihei +气候qihou +期货qihuo +契机qiji +奇迹qiji +期间qijian +起见qijian +器件qijian +七届qijie +迄今qijin +起来qilai +凄凉qiliang +欺凌qiling +气流qiliu +歧路qilu +起码qima +骑马qima +启蒙qimeng +奇妙qimiao +器皿qimin +亲qin +侵qin +勤qin +秦qin +钦qin +琴qin +芹qin +擒qin +禽qin +寝qin +沁qin +芩qin +揿qin +吣qin +嗪qin +噙qin +廑*qin +溱qin +檎qin +锓qin +矜*qin +覃qin +螓qin +衾qin +亲爱qinai +亲笔qinbi +岂能qineng +侵犯qinfan +勤奋qinfen +情qing +清qing +青qing +轻qing +倾qing +请qing +亲*qing +庆qing +氢qing +晴qing +卿qing +擎qing +氰qing +顷qing +苘qing +圊qing +檠qing +磬qing +蜻qing +罄qing +箐qing +綮*qing +謦qing +鲭qing +黥qing +清白qingbai +青白qingbai +情报qingbao +情操qingcao +青草qingcao +清查qingcha +清除qingchu +清楚qingchu +青春qingchun +青翠qingcui +清单qingdan +倾倒qingdao +清点qingdian +情调qingdiao +轻浮qingfu +青工qinggong +青海qinghai +庆贺qinghe +清华qinghua +情怀qinghuai +清还qinghuan +请假qingjia +请柬qingjian +请教qingjiao +情节qingjie +清洁qingjie +情景qingjing +顷刻qingke +晴空qingkong +轻快qingkuai +情况qingkuang +青睐qinglai +晴朗qinglang +情理qingli +清理qingli +轻率qinglu +轻蔑qingmie +青年qingnian +氢气qingqi +轻巧qingqiao +请求qingqiu +情趣qingqu +青山qingshan +请示qingshi +清爽qingshuang +青松qingsong +轻松qingsong +倾诉qingsu +青天qingtian +晴天qingtian +倾听qingting +倾吐qingtu +请问qingwen +倾向qingxiang +倾销qingxiao +情形qingxing +清醒qingxing +情绪qingxu +情谊qingyi +轻易qingyi +轻盈qingying +情愿qingyuan +请愿qingyuan +请战qingzhan +轻重qingzhong +倾注qingzhu +庆祝qingzhu +请罪qingzui +侵害qinhai +勤俭qinjian +亲近qinjin +亲眷qinjuan +勤快qinkuai +勤劳qinlao +亲历qinli +亲临qinlin +侵略qinlue +亲密qinmi +勤勉qinmian +钦佩qinpei +亲戚qinqi +亲切qinqie +亲热qinre +亲人qinren +侵入qinru +亲身qinshen +侵蚀qinshi +寝室qinshi +亲手qinshou +亲属qinshu +侵吞qintun +勤务qinwu +亲信qinxin +亲眼qinyan +亲友qinyou +侵占qinzhan +亲自qinzi +穷qiong +琼qiong +邛qiong +茕qiong +穹qiong +蛩qiong +筇qiong +跫qiong +銎qiong +穷国qiongguo +穷苦qiongku +穷困qiongkun +穹隆qionglong +穷期qiongqi +穷人qiongren +穷途qiongtu +气派qipai +欺骗qipian +气魄qipo +乞求qiqiu +崎岖qiqu +齐全qiquan +凄然qiran +起色qise +气色qise +其实qishi +起始qishi +启事qishi +气势qishi +启示qishi +歧视qishi +奇数qishu +汽水qishui +起诉qisu +其他qita +其它qita +奇特qite +气体qiti +汽艇qiting +企图qitu +歧途qitu +求qiu +球qiu +秋qiu +丘qiu +仇*qiu +龟*qiu +邱qiu +囚qiu +酋qiu +泅qiu +俅qiu +巯qiu +犰qiu +湫qiu +逑qiu +遒qiu +楸qiu +赇qiu +虬qiu +蚯qiu +蝤qiu +裘qiu +糗qiu +鳅qiu +鼽qiu +秋播qiubo +球场qiuchang +囚犯qiufan +秋风qiufeng +秋季qiuji +求教qiujiao +囚禁qiujin +求救qiujiu +丘陵qiuling +秋千qiuqian +求情qiuqing +求全qiuquan +秋色qiuse +求实qiushi +秋收qiushou +秋天qiutian +求学qiuxue +求战qiuzhan +求证qiuzheng +求知qiuzhi +求助qiuzhu +期望qiwang +气味qiwei +气温qiwen +奇闻qiwen +欺侮qiwu +气息qixi +栖息qixi +起先qixian +期限qixian +气象qixiang +器械qixie +齐心qixin +气压qiya +欺压qiya +气焰qiyan +企业qiye +起义qiyi +歧义qiyi +起因qiyin +启用qiyong +汽油qiyou +其余qiyu +起源qiyuan +七月qiyue +契约qiyue +欺诈qizha +气质qizhi +旗帜qizhi +其中qizhong +器重qizhong +旗子qizi +妻子qizi +勤俭建国qjjg +勤俭节约qjjy +迄今为止qjwz +取决于qjy +千钧一发qjyf +旗开得胜qkds +全力以赴qlyf +勤劳致富qlzf +千里之行qlzx +亲密无间qmwj +青年人qnr +千篇一律qpyl +清清楚楚qqcc +勤勤恳恳qqkk +切切实实qqss +确确实实qqss +恰恰相反qqxf +求全责备qqzb +恰如其分qrqf +欺人之谈qrzt +七手八脚qsbj +全神贯注qsgz +全世界qsj +切实可行qskx +切身利益qsly +青少年qsn +前所未闻qsww +前所未有qswy +气势汹汹qsxx +齐头并进qtbj +奇谈怪论qtgl +千头万绪qtwx +前提下qtx +去qu +区qu +取qu +曲qu +且*qu +渠qu +屈qu +趋qu +驱qu +趣qu +蛆qu +躯qu +娶qu +龋qu +戌*qu +诎qu +劬qu +苣*qu +蕖qu +蘧qu +岖qu +衢qu +阒qu +璩qu +觑qu +氍qu +朐qu +祛qu +磲qu +鸲qu +癯qu +蛐qu +蠼qu +麴qu +瞿qu +黢qu +全quan +权quan +圈quan +劝quan +泉quan +醛quan +颧quan +痊quan +拳quan +犬quan +券quan +诠quan +荃quan +悛quan +绻quan +辁quan +畎quan +铨quan +蜷quan +筌quan +鬈quan +全部quanbu +全党quandang +劝导quandao +蜷伏quanfu +劝告quangao +全国quanguo +权衡quanheng +全会quanhui +拳击quanji +劝解quanjie +全局quanju +全军quanjun +全力quanli +权利quanli +权力quanli +全貌quanmao +全面quanmian +劝勉quanmian +全民quanmin +全能quanneng +全年quannian +全盘quanpan +全拼quanpin +全球quanqiu +蜷曲quanqu +全权quanquan +全然quanran +全胜quansheng +权术quanshu +泉水quanshui +劝说quanshuo +圈套quantao +全体quanti +拳头quantou +权威quanwei +劝慰quanwei +全文quanwen +全县quanxian +权限quanxian +全校quanxiao +权益quanyi +权宜quanyi +劝诱quanyou +痊愈quanyu +劝止quanzhi +劝阻quanzu +区别qubie +屈才qucai +驱除quchu +取代qudai +渠道qudao +取得qude +取缔qudi +曲调qudiao +驱动qudong +确que +却que +缺que +炔que +瘸que +鹊que +榷que +雀que +阕que +阙que +悫que +确保quebao +缺点quedian +确定queding +缺乏quefa +缺口quekou +确立queli +确切queqie +确认queren +缺少queshao +缺省quesheng +确实queshi +缺席quexi +缺陷quexian +确信quexin +确凿quezao +瘸子quezi +区分qufen +屈服qufu +躯干qugan +区划quhua +曲解qujie +取经qujing +取决qujue +躯壳quke +取乐qule +群qun +裙qun +逡qun +裙带qundai +群岛qundao +去年qunian +群众qunzhong +区区ququ +屈辱quru +驱散qusan +取舍qushe +取胜qusheng +去世qushi +驱使qushi +趋势qushi +躯体quti +区位quwei +区委quwei +趣味quwei +区县quxian +去向quxiang +趋向quxiang +取消quxiao +取信quxin +曲艺quyi +区域quyu +区长quzhang +曲折quzhe +屈指quzhi +驱逐quzhu +曲子quzi +奇形怪状qxgz +全心全意qxqy +气象台qxt +气象万千qxwq +齐心协力qxxl +岂有此理qycl +前因后果qyhg +情有可原qyky +强有力qyl +求之不得qzbd +取之不尽qzbj +轻重缓急qzhj +气壮山河qzsh +千真万确qzwq +人r +如r +日r +认r +入r +任r +热r +然r +容r +让r +润r +弱r +燃r +染r +壤r +绕r +仁r +溶r +刃r +仍r +然ran +燃ran +染ran +冉ran +苒ran +蚺ran +髯ran +燃点randian +然而raner +让rang +壤rang +嚷rang +瓤rang +攘rang +禳rang +穰rang +让步rangbu +让位rangwei +让贤rangxian +然后ranhou +燃料ranliao +染料ranliao +冉冉ranran +燃烧ranshao +绕rao +扰rao +饶rao +荛rao +娆rao +桡rao +扰乱raoluan +如此而已rcey +人才济济rcjj +热re +若*re +惹re +热爱reai +热潮rechao +热忱rechen +热诚recheng +热带redai +热火rehuo +热量reliang +热烈relie +人ren +认ren +任ren +仁ren +刃ren +忍ren +壬ren +韧ren +妊ren +纫ren +仞ren +荏ren +葚ren +饪ren +轫ren +稔ren +衽ren +热闹renao +人才rencai +人次renci +仁慈renci +认错rencuo +人大renda +韧带rendai +人道rendao +认得rende +认定rending +人防renfang +仍reng +扔reng +扔掉rengdiao +人格renge +仍旧rengjiu +人工rengong +认购rengou +仍然rengran +任何renhe +人家renjia +人间renjian +人杰renjie +认可renke +人口renkou +人类renlei +人力renli +人们renmen +任免renmian +人民renmin +任命renming +忍耐rennai +任凭renping +任期renqi +认清renqing +人权renquan +荏苒renran +忍让renrang +人人renren +人参renshen +人生rensheng +人事renshi +人士renshi +认识renshi +人手renshou +忍受renshou +认输renshu +忍痛rentong +人为renwei +认为renwei +人物renwu +任务renwu +人心renxin +忍心renxin +人选renxuan +任意renyi +仁义renyi +任用renyong +人员renyuan +认帐renzhang +认真renzhen +人质renzhi +任职renzhi +认罪renzui +认作renzuo +热切reqie +热情reqing +惹事reshi +热线rexian +热心rexin +热血rexue +人工合成rghc +热火朝天rhct +如虎添翼rhty +日ri +日报ribao +日本riben +日产richan +日常richang +日程richeng +日光riguang +日后rihou +日记riji +日久rijiu +日历rili +日落riluo +日内rinei +日期riqi +日夜riye +日益riyi +日用riyong +日照rizhao +日中rizhong +日子rizi +软件包rjb +人杰地灵rjdl +人尽其才rjqc +如饥似渴rjsk +日久天长rjtc +任劳任怨rlry +热泪盈眶rlyk +人民币rmb +人民代表大会rmdh +人民日报rmrb +燃眉之急rmzj +容rong +溶rong +荣rong +熔rong +融rong +绒rong +戎rong +茸rong +蓉rong +冗rong +嵘rong +狨rong +榕rong +肜rong +蝾rong +熔点rongdian +容光rongguang +融合ronghe +溶化ronghua +熔化ronghua +融化ronghua +融会ronghui +荣获ronghuo +容积rongji +溶解rongjie +容量rongliang +戎马rongma +容貌rongmao +容纳rongna +融洽rongqia +容忍rongren +荣辱rongru +容身rongshen +绒线rongxian +荣幸rongxing +容许rongxu +荣耀rongyao +溶液rongye +容易rongyi +荣誉rongyu +溶质rongzhi +肉rou +揉rou +柔rou +糅rou +蹂rou +鞣rou +柔和rouhe +肉麻rouma +柔软rouruan +肉体routi +任人为贤rrwx +日日夜夜rryy +人生观rsg +认识论rsl +惹事生非rssf +如上所述rsss +如ru +入ru +儒ru +乳ru +茹ru +蠕ru +孺ru +辱ru +汝ru +褥ru +蓐ru +薷ru +嚅ru +洳ru +溽ru +濡ru +缛ru +铷ru +襦ru +颥ru +软ruan +阮ruan +朊ruan +软骨ruangu +软件ruanjian +软禁ruanjin +软盘ruanpan +如常ruchang +如此ruci +入党rudang +蠕动rudong +乳房rufang +如果ruguo +如何ruhe +瑞rui +锐rui +蕊rui +芮rui +蕤rui +枘rui +睿rui +蚋rui +锐利ruili +瑞雪ruixue +锐意ruiyi +儒家rujia +如今rujin +辱骂ruma +入门rumen +入迷rumi +润run +闰run +润滑runhua +弱ruo +若ruo +偌ruo +弱点ruodian +若干ruogan +若是ruoshi +弱小ruoxiao +如期ruqi +入侵ruqin +如若ruruo +儒生rusheng +入手rushou +如同rutong +如下ruxia +入选ruxuan +如意ruyi +如愿ruyuan +入帐ruzhang +人武部rwb +若无其事rwqs +人言可畏rykw +日用品ryp +若有所思ryss +人之长情rzcq +是s +上s +时s +生s +说s +社s +深s +水s +所s +三s +十s +使s +事s +数s +四s +实s +少s +式s +山s +手s +撒sa +萨sa +洒sa +卅sa +仨sa +挲sa +脎sa +飒sa +撒谎sahuang +塞sai +思*sai +赛sai +腮sai +鳃sai +噻sai +赛车saiche +塞子saizi +撒娇sajiao +三san +散san +叁san +伞san +馓san +毵san +糁san +散步sanbu +散布sanbu +散发sanfa +三废sanfei +桑sang +丧sang +嗓sang +搡sang +磉sang +颡sang +丧命sangming +丧失sangshi +三国sanguo +三好sanhao +散会sanhui +三角sanjiao +三届sanjie +散失sanshi +散文sanwen +三月sanyue +扫sao +梢*sao +搔sao +骚sao +嫂sao +埽sao +缫sao +缲sao +臊sao +瘙sao +鳋sao +扫除saochu +扫荡saodang +扫地saodi +骚动saodong +骚乱saoluan +扫描saomiao +扫墓saomu +骚扰saorao +瘙痒saoyang +扫帚saozhou +洒脱satuo +说不定sbd +舍不得sbd +说不过去sbgq +说不来sbl +数不胜数sbss +素不相识sbxs +身不由己sbyj +上层建筑scjz +生产力scl +生产率scl +水产品scp +四川省scs +市场调节sctj +市场信息scxx +生动活泼sdhp +山东省sds +水电站sdz +色se +塞*se +瑟se +涩se +啬se +铯se +穑se +视而不见sebj +色彩secai +色调sediao +色盲semang +森sen +僧seng +僧侣senglu +森林senlin +森严senyan +色情seqing +瑟瑟sese +十二月sey +色泽seze +司法部sfb +赏罚分明sffm +说服力sfl +手风琴sfq +三番五次sfwc +四个现代化sgxh +手工业sgy +沙sha +杀sha +砂sha +啥sha +纱sha +莎sha +刹sha +傻sha +煞sha +杉sha +厦*sha +唼sha +嗄*sha +挲*sha +歃sha +铩sha +痧sha +裟sha +霎sha +鲨sha +煞白shabai +刹车shache +煞车shache +沙发shafa +傻瓜shagua +沙皇shahuang +色*shai +筛shai +晒shai +晒台shaitai +砂烬shajin +沙龙shalong +沙漠shamo +山shan +单*shan +闪shan +善shan +珊shan +扇shan +陕shan +掸*shan +苫shan +杉shan +删shan +煽shan +衫shan +擅shan +赡shan +膳shan +汕shan +缮shan +栅*shan +剡shan +讪shan +鄯shan +埏shan +芟shan +潸shan +姗shan +嬗shan +骟shan +膻shan +禅*shan +钐shan +疝shan +蟮shan +舢shan +跚shan +鳝shan +刹那shana +山坳shanao +陕北shanbei +擅长shanchang +删除shanchu +山川shanchuan +山地shandi +闪电shandian +扇动shandong +煽动shandong +山东shandong +山峰shanfeng +上shang +商shang +伤shang +尚shang +汤*shang +墒shang +赏shang +晌shang +裳shang +垧shang +绱shang +殇shang +熵shang +觞shang +删改shangai +山岗shangang +山冈shangang +上班shangban +上报shangbao +上边shangbian +商标shangbiao +上部shangbu +上策shangce +上层shangceng +商场shangchang +上次shangci +赏赐shangci +上当shangdang +上等shangdeng +上帝shangdi +商店shangdian +上调shangdiao +商定shangding +上访shangfang +伤感shanggan +上告shanggao +赏光shangguang +上海shanghai +伤害shanghai +商行shanghang +上级shangji +上集shangji +上进shangjin +上空shangkong +上来shanglai +商量shangliang +上流shangliu +上门shangmen +上面shangmian +上年shangnian +山沟shangou +商品shangpin +商洽shangqia +上前shangqian +尚且shangqie +上去shangqu +商榷shangque +商人shangren +上任shangren +上山shangshan +上升shangsheng +赏识shangshi +上述shangshu +上司shangsi +上诉shangsu +商谈shangtan +商讨shangtao +闪光shanguang +上文shangwen +上午shangwu +商务shangwu +上下shangxia +上限shangxian +伤心shangxin +上旬shangxun +上演shangyan +商业shangye +商议shangyi +上映shangying +上游shangyou +上涨shangzhang +上阵shangzhen +山河shanhe +善后shanhou +删节shanjie +善良shanliang +山林shanlin +山岭shanling +山脉shanmai +杉木shanmu +山区shanqu +扇区shanqu +山水shanshui +闪烁shanshuo +山头shantou +山西shanxi +陕西shanxi +赡养shanyang +闪耀shanyao +善意shanyi +善于shanyu +善战shanzhan +擅自shanzi +少shao +烧shao +稍shao +绍shao +召*shao +哨shao +梢shao +鞘*shao +捎shao +芍shao +勺shao +韶shao +邵shao +劭shao +苕shao +潲shao +杓*shao +蛸shao +筲shao +艄shao +哨兵shaobing +艄公shaogong +烧毁shaohui +少见shaojian +哨卡shaoka +少量shaoliang +少年shaonian +少女shaonu +烧伤shaoshang +少数shaoshu +哨所shaosuo +稍微shaowei +少许shaoxu +稍许shaoxu +少爷shaoye +少有shaoyou +少于shaoyu +少壮shaozhuang +沙哑shaya +砂眼shayan +傻子shazi +社she +设she +射she +摄she +舌she +折*she +涉she +舍she +蛇she +奢she +赊she +赦she +慑she +厍she +佘she +摺*she +猞she +滠she +歙she +畲she +麝she +设备shebei +射程shecheng +奢侈shechi +舍得shede +设法shefa +慑服shefu +赊购shegou +奢华shehua +社会shehui +社稷sheji +涉及sheji +设计sheji +射击sheji +舍己sheji +社交shejiao +设立sheli +涉猎shelie +社论shelun +深shen +身shen +神shen +什*shen +伸shen +参*shen +甚shen +渗shen +沈shen +肾shen +审shen +申shen +慎shen +砷shen +呻shen +娠shen +绅shen +婶shen +诜shen +谂shen +莘shen +葚*shen +哂shen +渖shen +椹shen +胂shen +矧shen +蜃shen +深奥shenao +申报shenbao +身边shenbian +申辩shenbian +身材shencai +审查shencha +深沉shenchen +深处shenchu +审处shenchu +审定shending +深度shendu +甚而shener +身分shenfen +身份shenfen +生sheng +胜sheng +声sheng +省sheng +升sheng +盛sheng +绳sheng +剩sheng +圣sheng +牲sheng +乘*sheng +甥sheng +嵊sheng +渑*sheng +晟sheng +眚sheng +笙sheng +生财shengcai +生产shengchan +生成shengcheng +牲畜shengchu +生存shengcun +盛大shengda +省得shengde +胜地shengdi +盛典shengdian +声调shengdiao +生动shengdong +省份shengfen +胜负shengfu +省府shengfu +生根shenggen +升华shenghua +省会shenghui +盛会shenghui +生活shenghuo +生机shengji +生计shengji +升级shengji +圣洁shengjie +圣经shengjing +盛开shengkai +牲口shengkou +盛况shengkuang +生理shengli +胜利shengli +省力shengli +省略shenglue +生命shengming +声明shengming +盛名shengming +生怕shengpa +生僻shengpi +生平shengping +升旗shengqi +生前shengqian +升迁shengqian +盛情shengqing +生趣shengqu +省去shengqu +胜任shengren +生日shengri +省事shengshi +盛事shengshi +声势shengshi +生疏shengshu +生死shengsi +胜似shengsi +胜诉shengsu +绳索shengsuo +生态shengtai +声讨shengtao +声望shengwang +省委shengwei +生物shengwu +生息shengxi +剩下shengxia +盛夏shengxia +圣贤shengxian +生效shengxiao +生肖shengxiao +盛行shengxing +生涯shengya +生意shengyi +声音shengyin +生于shengyu +生育shengyu +胜于shengyu +声誉shengyu +剩余shengyu +声援shengyuan +生长shengzhang +省长shengzhang +声张shengzhang +胜仗shengzhang +生殖shengzhi +圣旨shengzhi +盛装shengzhuang +审核shenhe +深厚shenhou +深化shenhua +神话shenhua +甚或shenhuo +审计shenji +神经shenjing +深刻shenke +审理shenli +什么shenme +审美shenmei +神秘shenmi +申明shenming +审判shenpan +身旁shenpang +审批shenpi +神气shenqi +神奇shenqi +深浅shenqian +深切shenqie +深情shenqing +申请shenqing +身躯shenqu +深入shenru +渗入shenru +神圣shensheng +身世shenshi +绅士shenshi +伸手shenshou +申述shenshu +神速shensu +申诉shensu +伸缩shensuo +神态shentai +身体shenti +神通shentong +渗透shentou +审问shenwen +神仙shenxian +审讯shenxun +沈阳shenyang +审议shenyi +呻吟shenyin +身影shenying +深远shenyuan +申冤shenyuan +审阅shenyue +深造shenzao +伸张shenzhang +深圳shenzhen +甚至shenzhi +深重shenzhong +慎重shenzhong +神州shenzhou +舍弃sheqi +赊欠sheqian +设施sheshi +社团shetuan +奢望shewang +射线shexian +涉嫌shexian +设想shexiang +赊销shexiao +设宴sheyan +摄影sheying +社员sheyuan +社长shezhang +设置shezhi +涉足shezu +社会公德shgd +是shi +时shi +十shi +使shi +事shi +实shi +式shi +识shi +世shi +试shi +石shi +什shi +示shi +市shi +史shi +师shi +始shi +施shi +士shi +势shi +湿shi +适shi +食shi +失shi +视shi +室shi +氏shi +似*shi +蚀shi +诗shi +释shi +殖*shi +拾shi +饰shi +驶shi +匙*shi +狮shi +尸shi +虱shi +矢shi +屎shi +柿shi +拭shi +誓shi +逝shi +嗜shi +噬shi +仕shi +侍shi +恃shi +嘘*shi +峙*shi +谥shi +埘shi +莳shi +蓍shi +弑shi +轼shi +贳shi +炻shi +铈shi +螫shi +舐shi +筮shi +酾shi +豕shi +鲥shi +鲺shi +失败shibai +势必shibi +事变shibian +师表shibiao +识别shibie +失策shice +史册shice +视察shicha +时常shichang +失常shichang +市场shichang +时辰shichen +失传shichuan +侍从shicong +时代shidai +世代shidai +适当shidang +是的shide +实地shidi +试点shidian +失调shidiao +失掉shidiao +事端shiduan +拾掇shiduo +时而shier +示范shifan +师范shifan +施放shifang +释放shifang +是非shifei +时分shifen +十分shifen +侍奉shifeng +是否shifou +师傅shifu +实干shigan +是个shige +诗歌shige +施工shigong +事故shigu +世故shigu +尸骨shigu +使馆shiguan +时光shiguang +嗜好shihao +适合shihe +时候shihou +事后shihou +侍候shihou +使唤shihuan +实惠shihui +失火shihuo +时机shiji +事迹shiji +实际shiji +世纪shiji +试剂shiji +史籍shiji +施加shijia +市价shijia +时间shijian +事件shijian +世间shijian +实践shijian +视角shijiao +市郊shijiao +使节shijie +十届shijie +世界shijie +使劲shijin +市井shijing +时局shiju +视觉shijue +时刻shike +石刻shike +市侩shikuai +实况shikuang +事理shili +实力shili +事例shili +势利shili +失利shili +势力shili +视力shili +示例shili +失恋shilian +适量shiliang +矢量shiliang +拾零shiling +失灵shiling +适龄shiling +时髦shimao +失密shimi +市民shimin +使命shiming +市内shinei +室内shinei +诗篇shipian +食品shipin +视频shipin +识破shipo +时期shiqi +事前shiqian +失窃shiqie +事情shiqing +实情shiqing +时区shiqu +时取shiqu +失去shiqu +市区shiqu +诗人shiren +市容shirong +湿润shirun +示弱shiruo +失散shisan +失色shise +施舍shishe +师生shisheng +失声shisheng +时时shishi +时事shishi +适时shishi +事实shishi +失事shishi +实施shishi +失实shishi +逝世shishi +史诗shishi +失势shishi +誓师shishi +尸首shishou +失守shishou +实数shishu +施属shishu +世俗shisu +失算shisuan +事态shitai +试探shitan +食堂shitang +实体shiti +尸体shiti +石头shitou +势头shitou +师团shituan +十万shiwan +失望shiwang +市委shiwei +示威shiwei +时务shiwu +事物shiwu +事务shiwu +实物shiwu +食物shiwu +饰物shiwu +失误shiwu +实习shixi +事先shixian +视线shixian +实现shixian +试想shixiang +事项shixiang +实效shixiao +试销shixiao +失信shixin +实行shixing +试行shixing +施行shixing +失修shixiu +实学shixue +史学shixue +实验shiyan +试验shiyan +食言shiyan +誓言shiyan +式样shiyang +事业shiye +实业shiye +失业shiye +视野shiye +时宜shiyi +事宜shiyi +示意shiyi +诗意shiyi +适宜shiyi +释疑shiyi +适应shiying +使用shiyong +实用shiyong +试用shiyong +适用shiyong +事由shiyou +石油shiyou +誓由shiyou +适于shiyu +誓愿shiyuan +十月shiyue +失约shiyue +实在shizai +实战shizhan +施展shizhan +市长shizhang +师长shizhang +使者shizhe +侍者shizhe +失真shizhen +市镇shizhen +市政shizheng +试制shizhi +实质shizhi +市制shizhi +食指shizhi +失职shizhi +适中shizhong +示众shizhong +始终shizhong +时装shizhuang +师资shizi +十足shizu +实足shizu +失足shizu +始祖shizu +手shou +受shou +收shou +首shou +守shou +熟*shou +授shou +寿shou +兽shou +售shou +瘦shou +狩shou +绶shou +艏shou +守备shoubei +手表shoubiao +收兵shoubing +收藏shoucang +手册shouce +首倡shouchang +寿辰shouchen +收成shoucheng +首创shouchuang +首次shouci +收存shoucun +寿诞shoudan +受到shoudao +守敌shoudi +首度shoudu +首都shoudu +手段shouduan +守法shoufa +首犯shoufan +收复shoufu +首府shoufu +手感shougan +手稿shougao +收割shouge +收购shougou +受害shouhai +守候shouhou +守护shouhu +收回shouhui +受贿shouhui +收获shouhuo +收集shouji +售价shoujia +受奖shoujiang +授奖shoujiang +手脚shoujiao +收缴shoujiao +首届shoujie +守旧shoujiu +收据shouju +授课shouke +受理shouli +收敛shoulian +首领shouling +收留shouliu +收录shoulu +收买shoumai +授命shouming +寿命shouming +首脑shounao +首批shoupi +授权shouquan +收容shourong +收入shouru +手软shouruan +瘦弱shouruo +首饰shoushi +手术shoushu +收缩shousuo +收条shoutiao +收听shouting +收尾shouwei +首尾shouwei +首先shouxian +首相shouxiang +瘦小shouxiao +收效shouxiao +手续shouxu +瘦削shouxue +收养shouyang +首要shouyao +受益shouyi +收益shouyi +兽医shouyi +受用shouyong +授予shouyu +守则shouze +首长shouzhang +收支shouzhi +生活上shs +上海市shs +数shu +书shu +树shu +属shu +术shu +输shu +述shu +熟shu +束shu +鼠shu +疏shu +殊shu +舒shu +蔬shu +薯shu +叔shu +署shu +枢shu +梳shu +抒shu +淑shu +赎shu +孰shu +暑shu +曙shu +蜀shu +黍shu +戍shu +竖shu +墅shu +庶shu +漱shu +恕shu +俞*shu +丨shu +倏shu +塾shu +菽shu +摅shu +沭shu +澍shu +姝shu +纾shu +毹shu +腧shu +殳shu +秫shu +刷shua +耍shua +唰shua +衰shuai +帅shuai +摔shuai +甩shuai +蟀shuai +衰败shuaibai +摔打shuaida +摔交shuaijiao +衰竭shuaijie +衰老shuailao +衰弱shuairuo +衰退shuaitui +衰亡shuaiwang +耍赖shualai +栓shuan +拴shuan +闩shuan +涮shuan +双shuang +霜shuang +爽shuang +泷*shuang +孀shuang +双边shuangbian +双方shuangfang +爽口shuangkou +爽快shuangkuai +爽朗shuanglang +双拼shuangpin +双重shuangzhong +耍弄shuanong +刷洗shuaxi +刷新shuaxin +书报shubao +书本shuben +蔬菜shucai +舒畅shuchang +输出shuchu +树丛shucong +疏导shudao +书店shudian +数额shue +抒发shufa +书法shufa +舒服shufu +束缚shufu +曙光shuguang +蜀汉shuhan +疏忽shuhu +倏忽shuhu +书画shuhua +水shui +说*shui +谁shui +睡shui +税shui +水稻shuidao +水电shuidian +水分shuifen +水果shuiguo +水火shuihuo +水晶shuijing +水库shuiku +水利shuili +水流shuiliu +睡眠shuimian +水平shuiping +税收shuishou +税务shuiwu +水下shuixia +水性shuixing +水源shuiyuan +水灾shuizai +谁知shuizhi +书记shuji +书籍shuji +暑假shujia +数据shuju +书刊shukan +数理shuli +树立shuli +竖立shuli +熟练shulian +数量shuliang +数列shulie +疏漏shulou +数落shuluo +数码shuma +书面shumian +庶民shumin +数目shumu +书目shumu +树木shumu +顺shun +吮shun +瞬shun +舜shun +顺便shunbian +顺差shuncha +顺次shunci +顺从shuncong +顺当shundang +顺道shundao +顺风shunfeng +枢纽shuniu +顺利shunli +顺路shunlu +瞬时shunshi +顺势shunshi +顺心shunxin +顺序shunxu +顺应shunying +顺着shunzhuo +说shuo +数*shuo +硕shuo +朔shuo +烁shuo +蒴shuo +搠shuo +妁shuo +槊shuo +铄shuo +说到shuodao +说道shuodao +说动shuodong +说法shuofa +说服shuofu +硕果shuoguo +说话shuohua +说教shuojiao +说明shuoming +说情shuoqing +硕士shuoshi +述评shuping +署期shuqi +暑期shuqi +抒情shuqing +熟人shuren +输入shuru +疏散shusan +属实shushi +熟识shushi +舒适shushi +束手shushou +叔叔shushu +数说shushuo +述说shushuo +输送shusong +疏松shusong +舒坦shutan +疏通shutong +熟悉shuxi +属相shuxiang +舒心shuxin +书信shuxin +属性shuxing +数学shuxue +属于shuyu +术语shuyu +疏远shuyuan +舒展shuzhan +数值shuzhi +树脂shuzhi +梳妆shuzhuang +数字shuzi +赎罪shuzui +售货员shy +社会主义shzy +四si +思si +死si +斯si +丝si +似si +司si +饲si +食*si +私si +厕*si +撕si +嘶si +肆si +寺si +嗣si +伺si +巳si +厮si +俟*si +兕si +厶si +咝si +汜si +泗si +澌si +姒si +驷si +缌si +祀si +锶si +鸶si +耜si +蛳si +笥si +死板siban +四边sibian +死别sibie +思潮sichao +丝绸sichou +四处sichu +四川sichuan +死党sidang +死敌sidi +司法sifa +四方sifang +四海sihai +丝毫sihao +嗣后sihou +似乎sihu +四化sihua +死缓sihuan +撕毁sihui +死活sihuo +四季siji +司机siji +私交sijiao +四届sijie +思考sikao +私利sili +私了siliao +司令siling +思路silu +四面simian +思念sinian +私念sinian +死去siqu +私人siren +死伤sishang +私事sishi +死尸sishi +死水sishui +思索sisuo +四体siti +私吞situn +死亡siwang +思维siwei +斯文siwen +私下sixia +思想sixiang +四项sixiang +死心sixin +私心sixin +肆行sixing +死刑sixing +私有siyou +私欲siyu +寺院siyuan +四月siyue +死者sizhe +四周sizhou +私自sizi +死罪sizui +拾金不昧sjbm +身经百战sjbz +书记处sjc +世界观sjg +舍己救人sjjr +数据库sjk +省军区sjq +杀鸡取蛋sjqd +实际上sjs +设计所sjs +试金石sjs +舍己为人sjwr +设计院sjy +随机应变sjyb +十进制sjz +石家庄sjz +适可而止skez +数理化slh +收录机slj +十六进制sljz +三令五申slws +司令员sly +四面八方smbf +手忙脚乱smjl +生命力sml +说明书sms +什么样smy +深谋远虑smyl +数目字smz +松song +送song +宋song +颂song +耸song +怂song +讼song +诵song +凇song +菘song +崧song +嵩song +忪song +悚song +淞song +竦song +松绑songbang +送别songbie +松弛songchi +松动songdong +颂歌songge +松劲songjin +松快songkuai +耸立songli +送礼songli +松散songsan +松涛songtao +松懈songxie +颂扬songyang +怂恿songyong +送葬songzang +送终songzhong +搜sou +艘sou +擞sou +嗽sou +叟sou +薮sou +嗖sou +嗾sou +馊sou +溲sou +飕sou +瞍sou +锼sou +螋sou +搜查soucha +搜集souji +搜索sousuo +搜寻souxun +售票处spc +食品工业spgy +水平线spx +生气勃勃sqbb +诗情画意sqhy +盛气凌人sqlr +山穷水尽sqsj +十全十美sqsm +首屈一指sqyz +四人帮srb +损人利己srlj +深入浅出srqc +似是而非ssef +时时刻刻sskk +姗姗来迟sslc +实事求是ssqs +事实上sss +随时随地sssd +善始善终sssz +顺水推舟sstz +四通公司stgs +四通集团stjt +身体力行stlx +生态平衡stph +素su +速su +苏su +塑su +缩su +俗su +诉su +宿su +肃su +酥su +粟su +僳su +溯su +夙su +谡su +蔌su +嗉su +愫su +涑su +簌su +觫su +稣su +算suan +酸suan +蒜suan +狻suan +酸楚suanchu +算法suanfa +算计suanji +算了suanle +算盘suanpan +算术suanshu +酸疼suanteng +酸痛suantong +素材sucai +速成sucheng +苏丹sudan +速度sudu +俗话suhua +随sui +穗sui +碎sui +虽sui +岁sui +尿*sui +隋sui +绥sui +髓sui +遂sui +隧sui +祟sui +谇sui +荽sui +濉sui +邃sui +燧sui +眭sui +睢sui +随笔suibi +随便suibian +随处suichu +随从suicong +随地suidi +随和suihe +随后suihou +随机suiji +随即suiji +虽然suiran +随身suishen +随时suishi +随手suishou +岁数suishu +虽说suishuo +随同suitong +随心suixin +随行suixing +随意suiyi +遂意suiyi +岁月suiyue +虽则suize +随着suizhe +诉苦suku +苏联sulian +塑料suliao +速率sulu +素描sumiao +肃穆sumu +损sun +孙sun +笋sun +荪sun +狲sun +飧sun +榫sun +隼sun +损害sunhai +损耗sunhao +损坏sunhuai +损伤sunshang +损失sunshi +孙子sunzi +所suo +缩suo +锁suo +索suo +莎*suo +蓑suo +梭suo +唆suo +琐suo +唢suo +嗦suo +嗍suo +娑suo +桫suo +挲*suo +睃suo +羧suo +所得suode +缩短suoduan +缩减suojian +锁链suolian +所能suoneng +索取suoqu +唆使suoshi +所属suoshu +琐碎suosui +所为suowei +所谓suowei +缩小suoxiao +缩写suoxie +琐屑suoxie +索性suoxing +所以suoyi +索引suoyin +缩影suoying +所有suoyou +所在suozai +所长suozhang +所至suozhi +梭子suozi +肃清suqing +苏区suqu +宿舍sushe +素数sushu +诉说sushuo +诉讼susong +速效suxiao +速写suxie +苏醒suxing +素养suyang +宿营suying +溯源suyuan +宿愿suyuan +夙愿suyuan +塑造suzao +速战suzhan +素质suzhi +苏州suzhou +苏维埃swa +税务局swj +手舞足蹈swzd +少先队sxd +身心健康sxjk +思想上sxs +山西省sxs +陕西省sxs +顺息万变sxwb +所向无敌sxwd +思想性sxx +商业部syb +说一不二sybe +收音机syj +使用价值syjz +所有权syq +沈阳市sys +实用性syx +十一月syy +所有制syz +私有制syz +时至今日szjr +三中全会szqh +始终如一szry +深圳四通szst +所作所为szsw +甚至于szy +他t +同t +它t +提t +题t +体t +图t +天t +头t +通t +条t +特t +土t +团t +统t +台t +她t +太t +套t +铁t +他ta +它ta +她ta +塔ta +踏ta +塌ta +獭ta +挞ta +蹋ta +拓*ta +嗒*ta +闼ta +溻ta +漯*ta +遢ta +榻ta +沓ta +铊ta +趿ta +鳎ta +踏步tabu +他的tade +它的tade +她的tade +塌方tafang +台tai +太tai +态tai +胎tai +抬tai +泰tai +苔tai +酞tai +汰tai +邰tai +薹tai +呔*tai +骀*tai +肽tai +炱tai +钛tai +跆tai +鲐tai +台北taibei +台词taici +态度taidu +台风taifeng +台阶taijie +太平taiping +泰然tairan +泰山taishan +态势taishi +太太taitai +抬头taitou +台湾taiwan +太阳taiyang +太原taiyuan +天安门tam +他们tamen +它们tamen +她们tamen +谈tan +碳tan +探tan +炭tan +弹*tan +坦tan +贪tan +滩tan +坍tan +摊tan +瘫tan +坛tan +檀tan +痰tan +潭tan +谭tan +毯tan +袒tan +叹tan +郯tan +澹tan +昙tan +忐tan +钽tan +锬tan +镡*tan +坦白tanbai +探测tance +探访tanfang +谈锋tanfeng +叹服tanfu +堂tang +糖tang +唐tang +塘tang +汤tang +搪tang +棠tang +膛tang +倘tang +躺tang +淌tang +趟tang +烫tang +傥tang +帑tang +溏tang +瑭tang +樘tang +铴tang +镗tang +耥tang +螗tang +螳tang +羰tang +醣tang +倘不tangbu +搪瓷tangci +弹弓tangong +倘若tangruo +搪塞tangsai +烫伤tangshang +堂堂tangtang +唐突tangtu +弹劾tanhe +袒护tanhu +谈话tanhua +瘫痪tanhuan +探究tanjiu +坦克tanke +贪婪tanlan +坦率tanlu +谈论tanlun +摊派tanpai +谈判tanpan +叹气tanqi +探亲tanqin +弹琴tanqin +坦然tanran +探索tansuo +探讨tantao +谈天tantian +探听tanting +贪图tantu +谈吐tantu +滩涂tantu +探望tanwang +探问tanwen +贪污tanwu +叹息tanxi +探险tanxian +谈心tanxin +弹性tanxing +探询tanxun +贪赃tanzang +套tao +讨tao +逃tao +陶tao +萄tao +桃tao +掏tao +涛tao +滔tao +绦tao +淘tao +鼗tao +叨*tao +啕tao +洮tao +韬tao +焘tao +饕tao +逃奔taoben +逃避taobi +逃兵taobing +逃窜taocuan +逃遁taodun +讨伐taofa +讨饭taofan +套购taogou +讨好taohao +讨还taohuan +讨价taojia +桃李taoli +韬略taolue +讨论taolun +逃命taoming +逃难taonan +逃跑taopao +淘气taoqi +逃生taosheng +淘汰taotai +滔滔taotao +逃脱taotuo +逃亡taowang +讨厌taoyan +陶冶taoye +桃子taozi +逃走taozou +陶醉taozui +踏青taqing +他人taren +踏实tashi +他说tashuo +他乡taxiang +挑拨离间tblj +台北市tbs +贪便宜tby +统筹兼顾tcjg +铁道部tdb +土地改革tdgg +同等学历tdxl +特te +忒te +忑te +慝*te +铽te +特别tebie +特产techan +特长techang +特出techu +特此teci +特大teda +特等tedeng +特地tedi +特点tedian +特定teding +特级teji +特技teji +特急teji +特将tejiang +特刊tekan +特快tekuai +特例teli +腾teng +疼teng +藤teng +誊teng +滕teng +疼爱tengai +腾达tengda +誊写tengxie +特派tepai +特区tequ +特权tequan +托儿所tes +特色tese +特使teshi +特殊teshu +特为tewei +特务tewu +特效texiao +特写texie +特性texing +特邀teyao +特意teyi +特有teyou +特约teyue +特征tezheng +特制tezhi +特种tezhong +突飞猛进tfmj +铁饭碗tfw +同甘共苦tggk +提货单thd +谈何容易thry +提ti +题ti +体ti +替ti +梯ti +惕ti +剔ti +踢ti +锑ti +蹄ti +啼ti +嚏ti +涕ti +剃ti +屉ti +倜ti +荑*ti +悌ti +逖ti +绨*ti +缇ti +鹈ti +裼ti +醍ti +天tian +田tian +添tian +填tian +甜tian +佃*tian +恬tian +舔tian +腆tian +掭tian +忝tian +阗tian +殄tian +畋tian +填报tianbao +天边tianbian +填表tianbiao +填补tianbu +天才tiancai +天长tianchang +填充tianchong +天地tiandi +田地tiandi +天鹅tiane +天府tianfu +天赋tianfu +天机tianji +天际tianji +添加tianjia +天津tianjin +恬静tianjing +天空tiankong +填空tiankong +天理tianli +天良tianliang +天亮tianliang +甜美tianmei +甜蜜tianmi +天明tianming +天平tianping +天气tianqi +天桥tianqiao +天然tianran +天壤tianrang +天色tianse +天上tianshang +天生tiansheng +天使tianshi +天堂tiantang +天体tianti +天天tiantian +甜头tiantou +天文tianwen +天下tianxia +天险tianxian +天仙tianxian +天性tianxing +天涯tianya +田野tianye +天真tianzhen +天职tianzhi +添置tianzhi +天资tianzi +条tiao +调*tiao +跳tiao +挑tiao +迢tiao +眺tiao +佻tiao +苕*tiao +祧tiao +窕tiao +蜩tiao +笤tiao +粜tiao +龆tiao +鲦tiao +髫tiao +挑拔tiaoba +跳动tiaodong +挑动tiaodong +挑逗tiaodou +跳高tiaogao +调和tiaohe +调剂tiaoji +条件tiaojian +调解tiaojie +调节tiaojie +条款tiaokuan +调理tiaoli +条理tiaoli +条例tiaoli +条令tiaoling +调配tiaopei +挑剔tiaoti +调停tiaoting +条文tiaowen +跳舞tiaowu +调戏tiaoxi +挑衅tiaoxin +挑选tiaoxuan +条约tiaoyue +挑战tiaozhan +调整tiaozheng +条子tiaozi +提拨tibo +题材ticai +体裁ticai +体操ticao +体察ticha +提倡tichang +提成ticheng +提出tichu +剔除tichu +题词tici +替代tidai +梯队tidui +铁tie +贴tie +帖tie +萜tie +餮tie +贴补tiebu +铁道tiedao +贴近tiejin +铁路tielu +贴切tieqie +贴身tieshen +铁证tiezheng +提法tifa +提防tifang +提纲tigang +提高tigao +体格tige +提供tigong +替换tihuan +体会tihui +提货tihuo +体积tiji +提价tijia +体力tili +体例tili +提炼tilian +体谅tiliang +体面timian +提名timing +题名timing +题目timu +听ting +停ting +庭ting +挺ting +廷ting +厅ting +烃ting +汀ting +亭ting +艇ting +莛ting +葶ting +婷ting +梃ting +町*ting +铤ting +蜓ting +霆ting +挺拔tingba +停办tingban +停泊tingbo +停产tingchan +听从tingcong +停顿tingdun +停工tinggong +挺括tinggua +听候tinghou +听话tinghua +停火tinghuo +听见tingjian +厅局tingju +听觉tingjue +停留tingliu +听凭tingping +听取tingqu +听任tingren +听说tingshuo +听信tingxin +厅长tingzhang +停止tingzhi +停职tingzhi +停滞tingzhi +听众tingzhong +提起tiqi +提前tiqian +提取tiqu +提升tisheng +提示tishi +体坛titan +体贴titie +提问tiwen +体温tiwen +体系tixi +体现tixian +体型tixing +提醒tixing +体验tiyan +提要tiyao +提议tiyi +体育tiyu +体制tizhi +体质tizhi +题字tizi +统计表tjb +条件反射tjfs +讨价还价tjhj +天津市tjs +条件下tjx +讨论会tlh +拖拉机tlj +他们的tmd +同盟会tmh +天南地北tndb +同tong +通tong +统tong +铜tong +痛tong +筒tong +童tong +桶tong +侗*tong +恫*tong +桐tong +酮tong +瞳tong +彤tong +捅tong +佟tong +仝tong +垌*tong +茼tong +嗵tong +峒*tong +恸tong +潼tong +砼tong +同伴tongban +同胞tongbao +通报tongbao +同辈tongbei +通病tongbing +同步tongbu +通常tongchang +通称tongcheng +统称tongcheng +痛斥tongchi +统筹tongchou +痛楚tongchu +同窗tongchuang +同道tongdao +通道tongdao +同等tongdeng +通电tongdian +通牒tongdie +通读tongdu +通告tonggao +统购tonggou +通过tongguo +通航tonghang +痛恨tonghen +同化tonghua +通话tonghua +童话tonghua +痛悔tonghui +通婚tonghun +统计tongji +通辑tongji +痛击tongji +同居tongju +痛苦tongku +痛哭tongku +痛快tongkuai +同僚tongliao +通令tongling +同盟tongmeng +同年tongnian +童年tongnian +同期tongqi +通气tongqi +同情tongqing +通融tongrong +同上tongshang +通商tongshang +同时tongshi +同事tongshi +统属tongshu +统帅tongshuai +通顺tongshun +通俗tongsu +通往tongwang +痛恶tongwu +痛惜tongxi +统辖tongxia +通向tongxiang +同乡tongxiang +统销tongxiao +通宵tongxiao +通晓tongxiao +同心tongxin +痛心tongxin +通信tongxin +同行tongxing +通行tongxing +同性tongxing +同学tongxue +通讯tongxun +同样tongyang +统一tongyi +同意tongyi +通用tongyong +通邮tongyou +统战tongzhan +同志tongzhi +统治tongzhi +通知tongzhi +头tou +投tou +透tou +偷tou +钭tou +骰tou +投案touan +头版touban +投奔touben +投标toubiao +投产touchan +透彻touche +头等toudeng +投放toufang +投机touji +投靠toukao +投篮toulan +偷懒toulan +头颅toulu +透露toulu +头面toumian +透明touming +头目toumu +头脑tounao +投票toupiao +透气touqi +投入touru +投身toushen +透视toushi +头痛toutong +偷闲touxian +投降touxiang +头绪touxu +投影touying +投掷touzhi +头子touzi +投资touzi +突破口tpk +太平洋tpy +通情达理tqdl +天气预报tqyb +突然袭击trxj +妥善处理tscl +通俗读物tsdw +挺身而出tsec +图书馆tsg +滔滔不绝ttbj +痛痛快快ttkk +团体赛tts +踏踏实实ttss +图tu +土tu +突tu +途tu +徒tu +凸tu +涂tu +吐tu +兔tu +屠tu +秃tu +堍tu +荼tu +菟tu +钍tu +酴tu +团tuan +湍tuan +抟tuan +彖tuan +疃tuan +图案tuan +湍急tuanji +团结tuanjie +团聚tuanju +湍流tuanliu +团体tuanti +团员tuanyuan +团圆tuanyuan +团长tuanzhang +突变tubian +图表tubiao +土产tuchan +突出tuchu +土地tudi +徒弟tudi +土匪tufei +土改tugai +涂改tugai +图画tuhua +土话tuhua +推tui +退tui +腿tui +颓tui +蜕tui +褪tui +忒*tui +煺tui +蜕变tuibian +退步tuibu +推测tuice +推迟tuichi +推崇tuichong +退出tuichu +推导tuidao +推动tuidong +推断tuiduan +推翻tuifan +颓废tuifei +推广tuiguang +退化tuihua +蜕化tuihua +退回tuihui +推荐tuijian +推进tuijin +推举tuiju +推开tuikai +推理tuili +推论tuilun +推敲tuiqiao +推却tuique +退却tuique +推让tuirang +退让tuirang +颓丧tuisang +退色tuise +推算tuisuan +退缩tuisuo +颓唐tuitang +推托tuituo +退伍tuiwu +推向tuixiang +推销tuixiao +推卸tuixie +推行tuixing +退休tuixiu +退学tuixue +推移tuiyi +退职tuizhi +突击tuji +图解tujie +途径tujing +徒劳tulao +图例tuli +吐露tulu +囤*tun +褪*tun +吞tun +屯tun +臀tun +氽tun +饨tun +暾tun +豚tun +吞并tunbing +吞没tunmo +吞吐tuntu +脱tuo +拖tuo +托tuo +妥tuo +椭tuo +舵*tuo +魄*tuo +鸵tuo +陀tuo +驮tuo +驼tuo +拓tuo +唾tuo +乇tuo +佗tuo +坨tuo +庹tuo +沱tuo +柝tuo +柁*tuo +橐tuo +砣tuo +铊*tuo +箨tuo +酡tuo +跎tuo +鼍tuo +驼背tuobei +拓补tuobu +脱出tuochu +妥当tuodang +脱轨tuogui +拓荒tuohuang +脱节tuojie +拖拉tuola +脱离tuoli +唾骂tuoma +唾弃tuoqi +妥善tuoshan +脱身tuoshen +妥协tuoxie +拖延tuoyan +唾液tuoye +图片tupian +突破tupo +突起tuqi +突然turan +徒然turan +土壤turang +屠杀tusha +徒手tushou +图书tushu +吐痰tutan +突围tuwei +突兀tuwu +图象tuxiang +图像tuxiang +图形tuxing +徒刑tuxing +图章tuzhang +图纸tuzhi +途中tuzhong +土著tuzhu +秃子tuzi +贪污盗窃twdq +台湾省tws +贪污受贿twsh +提心吊胆txdd +通讯社txs +同心同德txtd +同心协力txxl +推心置腹txzf +体育场tyc +体育锻炼tydl +体育馆tyg +腾云驾雾tyjw +太阳能tyn +太原市tys +天衣无缝tywf +通用性tyx +体育运动tyyd +团支部tzb +停滞不前tzbq +同志们tzm +天灾人祸tzrh +听之任之tzrz +通知书tzs +为w +我w +无w +问w +外w +五w +位w +物w +委w +完w +温w +万w +文w +往w +武w +务w +王w +围w +误w +晚w +瓦wa +挖wa +凹*wa +哇wa +蛙wa +洼wa +娃wa +袜wa +佤wa +娲wa +腽wa +外wai +歪wai +外币waibi +外边waibian +外表waibiao +外宾waibin +外部waibu +外传waichuan +外存waicun +外地waidi +外调waidiao +歪风waifeng +外观waiguan +外国waiguo +外行waihang +外汇waihui +外加waijia +外交waijiao +外界waijie +外景waijing +外科waike +外快waikuai +外流wailiu +外貌waimao +外贸waimao +外面waimian +外勤waiqin +歪曲waiqu +外商waishang +外伤waishang +外设waishe +外省waisheng +外甥waisheng +外事waishi +外围waiwei +外文waiwen +外线waixian +外销waixiao +歪斜waixie +外延waiyan +外因waiyin +外语waiyu +外援waiyuan +外在waizai +外债waizhai +外资waizi +瓦解wajie +挖掘wajue +挖苦waku +瓦砾wali +完wan +万wan +晚wan +弯wan +碗wan +顽wan +湾wan +挽wan +玩wan +蔓*wan +娩*wan +豌wan +丸wan +烷wan +皖wan +惋wan +宛wan +婉wan +腕wan +剜wan +芄wan +莞*wan +菀wan +纨wan +绾wan +琬wan +脘wan +畹wan +蜿wan +万般wanban +晚报wanbao +完备wanbei +完毕wanbi +完成wancheng +万代wandai +顽敌wandi +万吨wandun +万恶wane +万分wanfen +往wang +王wang +望wang +网wang +忘wang +妄wang +亡wang +旺wang +芒*wang +汪wang +枉wang +罔wang +尢wang +惘wang +辋wang +魍wang +往常wangchang +王朝wangchao +忘掉wangdiao +妄动wangdong +枉法wangfa +往返wangfan +枉费wangfei +往复wangfu +王国wangguo +亡国wangguo +往后wanghou +忘怀wanghuai +忘记wangji +旺季wangji +往来wanglai +网络wangluo +亡命wangming +往年wangnian +完工wangong +忘却wangque +枉然wangran +惘然wangran +往日wangri +旺盛wangsheng +往事wangshi +妄图wangtu +万古wangu +顽固wangu +往往wangwang +汪汪wangwang +忘我wangwo +往昔wangxi +妄想wangxiang +汪洋wangyang +望远wangyuan +王子wangzi +完好wanhao +晚会wanhui +挽回wanhui +晚婚wanhun +晚间wanjian +完结wanjie +挽救wanjiu +玩具wanju +顽抗wankang +完了wanle +挽力wanli +弯路wanlu +完美wanmei +万能wanneng +万年wannian +晚年wannian +玩弄wannong +晚期wanqi +顽强wanqiang +弯曲wanqu +完全wanquan +完善wanshan +晚上wanshang +玩赏wanshang +万事wanshi +万世wanshi +玩耍wanshua +万岁wansui +万万wanwan +万物wanwu +晚霞wanxia +万象wanxiang +玩笑wanxiao +万幸wanxing +婉言wanyan +万一wanyi +万元wanyuan +完整wanzheng +顽症wanzheng +万众wanzhong +宛转wanzhuan +瓦斯wasi +瓦特wate +娃娃wawa +外部设备wbsb +微不足道wbzd +无产阶级wcjj +微处理机wclj +无产者wcz +为wei +位wei +委wei +围wei +维wei +唯wei +卫wei +微wei +伟wei +未wei +威wei +危wei +尾wei +谓wei +喂wei +味wei +胃wei +魏wei +伪wei +遗*wei +违wei +韦wei +畏wei +纬wei +巍wei +桅wei +惟wei +潍wei +苇wei +萎wei +蔚wei +渭wei +尉wei +慰wei +偎wei +诿wei +隈wei +隗*wei +圩*wei +葳wei +薇wei +囗wei +帏wei +帷wei +崴wei +嵬wei +猥wei +猬wei +闱wei +沩wei +洧wei +涠wei +逶wei +娓wei +玮wei +韪wei +軎wei +炜wei +煨wei +痿wei +艉wei +鲔wei +尾巴weiba +违背weibei +未必weibi +威逼weibi +微波weibo +微薄weibo +未曾weiceng +未尝weichang +维持weichi +为此weici +伟大weida +味道weidao +纬度weidu +唯独weidu +巍峨weie +违法weifa +违反weifan +违犯weifan +威风weifeng +桅杆weigan +微观weiguan +危害weihai +为何weihe +维护weihu +危及weiji +微机weiji +危机weiji +危急weiji +围歼weijian +围剿weijiao +慰藉weijie +违禁weijin +未经weijing +畏惧weiju +违抗weikang +未可weike +唯恐weikong +惟恐weikong +胃口weikou +未来weilai +慰劳weilao +为了weile +威力weili +委靡weimi +未免weimian +微妙weimiao +帷幕weimu +危难weinan +畏难weinan +未能weineng +委派weipai +为期weiqi +畏怯weiqie +委曲weiqu +委屈weiqu +未然weiran +巍然weiran +围绕weirao +伟人weiren +委任weiren +微弱weiruo +威慑weishe +为生weisheng +卫生weisheng +尾声weisheng +卫士weishi +威势weishi +为首weishou +为数weishu +尾随weisui +未遂weisui +畏缩weisuo +萎缩weisuo +猥琐weisuo +委托weituo +委婉weiwan +危亡weiwang +巍巍weiwei +慰问weiwen +唯物weiwu +威武weiwu +微细weixi +威吓weixia +危险weixian +微小weixiao +微笑weixiao +威协weixie +威胁weixie +猥亵weixie +维新weixin +唯心weixin +违心weixin +威信weixin +微型weixing +卫星weixing +维修weixiu +威严weiyan +伟业weiye +唯一weiyi +位移weiyi +位于weiyu +谓语weiyu +委员weiyuan +为止weizhi +位置weizhi +未知weizhi +为重weizhong +为主weizhu +伪装weizhuang +问wen +温wen +文wen +稳wen +纹wen +闻wen +蚊wen +瘟wen +吻wen +紊wen +刎wen +阌wen +汶wen +璺wen +雯wen +文本wenben +瘟病wenbing +稳步wenbu +问答wenda +稳定wending +温度wendu +嗡weng +翁weng +瓮weng +蓊weng +蕹weng +稳固wengu +问好wenhao +温和wenhe +吻合wenhe +文化wenhua +文件wenjian +稳健wenjian +问津wenjin +文静wenjing +文具wenju +文科wenke +文盲wenmang +文明wenming +闻名wenming +温暖wennuan +文凭wenping +文人wenren +温柔wenrou +问世wenshi +文坛wentan +问题wenti +文体wenti +稳妥wentuo +文物wenwu +文献wenxian +文选wenxuan +文学wenxue +问讯wenxun +闻讯wenxun +文艺wenyi +瘟疫wenyi +文娱wenyu +文摘wenzhai +文章wenzhang +稳重wenzhong +文字wenzi +问罪wenzui +望而生畏wesw +闻风而动wfed +违法乱纪wflj +歪风邪气wfxq +温故知新wgzx +文化部whb +文汇报whb +文化馆whg +文化宫whg +武汉市whs +五湖四海whsh +忘乎所以whsy +问寒问暖whwn +文化娱乐whyl +玩忽职守whzs +外交部wjb +无纪律wjl +五讲四美wjsm +无拘无束wjws +无可奉告wkfg +无可非议wkfy +无可奈何wknh +乌鲁木齐wlmq +无理取闹wlqn +无论如何wlrh +物美价廉wmjl +误码率wml +文明礼貌wmlm +无名英雄wmyx +无能为力wnwl +我wo +握wo +窝wo +蜗wo +涡wo +沃wo +挝wo +卧wo +斡wo +倭wo +莴wo +喔wo +幄wo +渥wo +肟wo +硪wo +龌wo +窝藏wocang +卧床wochuang +我党wodang +卧倒wodao +我的wode +窝工wogong +我国woguo +我军wojun +我们women +窝囊wonang +我省wosheng +我校woxiao +为期不远wqby +无穷无尽wqwj +误入歧途wrqt +卫生部wsb +纹丝不动wsbd +万事大吉wsdj +万事俱备wsjb +为什么wsm +无所谓wsw +为所欲为wsyw +无所作为wszw +无wu +五wu +物wu +武wu +务wu +误wu +伍wu +舞wu +污wu +悟wu +雾wu +午wu +恶*wu +屋wu +乌wu +吴wu +亡*wu +诬wu +钨wu +巫wu +呜wu +芜wu +梧wu +吾wu +毋wu +捂wu +侮wu +坞wu +戊wu +晤wu +勿wu +兀wu +仵wu +阢wu +邬wu +圬wu +芴wu +唔wu +庑wu +怃wu +忤wu +浯wu +寤wu +迕wu +妩wu +婺wu +骛wu +杌wu +牾wu +於*wu +焐wu +鹉wu +鹜wu +痦wu +蜈wu +鋈wu +鼯wu +吾辈wubei +无比wubi +五笔wubi +务必wubi +舞弊wubi +无边wubian +无不wubu +五彩wucai +误差wucha +无常wuchang +无偿wuchang +舞场wuchang +武昌wuchang +无耻wuchi +无从wucong +武打wuda +舞蹈wudao +无敌wudi +舞动wudong +武斗wudou +武断wuduan +无法wufa +无妨wufang +无非wufei +武功wugong +污垢wugou +无故wugu +无关wuguan +五官wuguan +武官wuguan +无害wuhai +诬害wuhai +武汉wuhan +无何wuhe +乌黑wuhei +五湖wuhu +呜呼wuhu +误会wuhui +舞会wuhui +污秽wuhui +无及wuji +无机wuji +物价wujia +无间wujian +物件wujian +误解wujie +五届wujie +五金wujin +无愧wukui +无赖wulai +诬赖wulai +无理wuli +物理wuli +无礼wuli +物力wuli +武力wuli +无聊wuliao +无虑wulu +无论wulun +污蔑wumie +诬蔑wumie +无奈wunai +无能wuneng +毋宁wuning +务农wunong +物品wupin +无期wuqi +五七wuqi +武器wuqi +无情wuqing +无穷wuqiong +舞曲wuqu +无权wuquan +污染wuran +无任wuren +污辱wuru +侮辱wuru +物色wuse +无上wushang +误伤wushang +无声wusheng +午时wushi +务使wushi +无视wushi +误事wushi +务实wushi +无数wushu +武术wushu +无双wushuang +午睡wushui +五四wusi +无私wusi +舞台wutai +无题wuti +物体wuti +舞厅wuting +无为wuwei +无谓wuwei +无物wuwu +无暇wuxia +无限wuxian +诬陷wuxian +无效wuxiao +五星wuxing +午休wuxiu +无须wuxu +无需wuxu +务虚wuxu +午夜wuye +五一wuyi +无益wuyi +无疑wuyi +无垠wuyin +无用wuyong +毋庸wuyong +无余wuyu +无缘wuyuan +五月wuyue +物证wuzheng +无知wuzhi +物质wuzhi +武装wuzhuang +物资wuzi +兀自wuzi +误字wuzi +无罪wuzui +无微不至wwbz +唯物论wwl +卧薪尝胆wxcd +无线电wxd +微型机wxj +唯心论wxl +问心无愧wxwk +委员会wyh +无缘无故wywg +委员长wyz +误字率wzl +无足轻重wzqz +未知数wzs +完整无缺wzwq +学x +下x +行x +小x +线x +性x +新x +些x +想x +心x +向x +相x +系x +席x +现x +西x +修x +象x +先x +形x +心安理得xald +西安市xas +西半球xbq +相比之下xbzx +宣传部xcb +新陈代谢xcdx +新产品xcp +畜产品xcp +西城区xcq +喜出望外xcww +相对而言xdey +现代化xdh +想当然xdr +相对误差xdwc +先睹为快xdwk +形而上学xesx +显而易见xeyj +西方国家xfgj +消费品xfp +想方设法xfsf +先发制人xfzr +兴高采烈xgcl +新华社xhs +新华书店xhsd +系xi +席xi +西xi +习xi +细xi +吸xi +析xi +喜xi +洗xi +铣xi +稀xi +戏xi +隙xi +希xi +息xi +袭xi +锡xi +烯xi +牺xi +悉xi +惜xi +溪xi +腊*xi +栖*xi +昔xi +熙xi +硒xi +矽xi +晰xi +嘻xi +膝xi +夕xi +熄xi +汐xi +犀xi +檄xi +媳xi +僖xi +兮xi +隰xi +郗xi +茜*xi +菥xi +葸xi +蓰xi +奚xi +唏xi +徙xi +饩xi +阋xi +浠xi +淅xi +屣xi +嬉xi +玺xi +樨xi +曦xi +觋xi +欷xi +歙*xi +熹xi +禊xi +禧xi +皙xi +穸xi +裼*xi +蜥xi +螅xi +蟋xi +舄xi +舾xi +羲xi +粞xi +翕xi +醯xi +蹊*xi +鼷xi +下xia +夏xia +吓xia +狭xia +霞xia +唬*xia +瞎xia +虾xia +匣xia +辖xia +暇xia +峡xia +侠xia +厦xia +呷xia +狎xia +遐xia +瑕xia +柙xia +硖xia +瘕*xia +罅xia +黠xia +狭隘xiaai +下班xiaban +下辈xiabei +下边xiabian +下策xiace +下层xiaceng +下场xiachang +下沉xiachen +下次xiaci +瑕疵xiaci +下达xiada +吓倒xiadao +下等xiadeng +下毒xiadu +下发xiafa +下放xiafang +峡谷xiagu +霞光xiaguang +瞎话xiahua +喜爱xiai +下级xiaji +下集xiaji +夏季xiaji +下降xiajiang +侠客xiake +下来xialai +下联xialian +夏粮xialiang +下列xialie +下令xialing +下流xialiu +下落xialuo +下马xiama +厦门xiamen +下面xiamian +线xian +现xian +先xian +县xian +限xian +见*xian +显xian +鲜xian +献xian +险xian +陷xian +宪xian +纤xian +洗*xian +掀xian +弦xian +铣*xian +腺xian +锨xian +仙xian +咸xian +贤xian +衔xian +舷xian +闲xian +涎xian +嫌xian +馅xian +羡xian +冼xian +苋xian +莶xian +藓xian +岘xian +猃xian +暹xian +娴xian +氙xian +燹xian +祆xian +鹇xian +痫xian +蚬xian +筅xian +籼xian +酰xian +跣xian +跹xian +霰xian +西安xian +献宝xianbao +先辈xianbei +现场xianchang +现成xiancheng +县城xiancheng +献丑xianchou +献词xianci +现存xiancun +现代xiandai +先导xiandao +显得xiande +险地xiandi +限定xianding +限度xiandu +线段xianduan +限额xiane +险恶xiane +宪法xianfa +先锋xianfeng +险峰xianfeng +想xiang +向xiang +相xiang +象xiang +响xiang +项xiang +箱xiang +乡xiang +降*xiang +香xiang +像xiang +详xiang +橡xiang +享xiang +湘xiang +厢xiang +镶xiang +襄xiang +翔xiang +祥xiang +巷xiang +芗xiang +葙xiang +饷xiang +庠xiang +骧xiang +缃xiang +蟓xiang +鲞xiang +飨xiang +相爱xiangai +相比xiangbi +想必xiangbi +相差xiangcha +相称xiangcheng +相处xiangchu +相传xiangchuan +乡村xiangcun +相当xiangdang +向导xiangdao +相等xiangdeng +相对xiangdui +想法xiangfa +相反xiangfan +相仿xiangfang +相干xianggan +香港xianggang +相隔xiangge +相关xiangguan +相好xianghao +相互xianghu +相继xiangji +相加xiangjia +相见xiangjian +相减xiangjian +相交xiangjiao +橡胶xiangjiao +相近xiangjin +详尽xiangjin +巷口xiangkou +向来xianglai +相连xianglian +向量xiangliang +响亮xiangliang +相貌xiangmao +项目xiangmu +想念xiangnian +相片xiangpian +想起xiangqi +详情xiangqing +向上xiangshang +相声xiangsheng +响声xiangsheng +相识xiangshi +翔实xiangshi +享受xiangshou +相思xiangsi +相似xiangsi +香甜xiangtian +相同xiangtong +相投xiangtou +显贵xiangui +向往xiangwang +详细xiangxi +向下xiangxia +乡下xiangxia +象限xiangxian +想象xiangxiang +相信xiangxin +香烟xiangyan +相依xiangyi +相宜xiangyi +相应xiangying +相映xiangying +响应xiangying +享用xiangyong +相遇xiangyu +相约xiangyue +乡镇xiangzhen +象征xiangzheng +箱子xiangzi +陷害xianhai +显赫xianhe +鲜红xianhong +先后xianhou +鲜花xianhua +献花xianhua +闲话xianhua +贤惠xianhui +献计xianji +献技xianji +显见xianjian +衔接xianjie +先进xianjin +现金xianjin +险境xianjing +陷阱xianjing +现款xiankuan +现况xiankuang +先例xianli +献礼xianli +先烈xianlie +线路xianlu +显露xianlu +鲜美xianmei +鲜明xianming +贤明xianming +显目xianmu +羡慕xianmu +贤能xianneng +先期xianqi +掀起xianqi +限期xianqi +嫌弃xianqi +先前xianqian +先遣xianqian +险情xianqing +先驱xianqu +显然xianran +贤人xianren +闲人xianren +现任xianren +陷入xianru +闲散xiansan +献身xianshen +先生xiansheng +先是xianshi +现实xianshi +显示xianshi +娴熟xianshu +线索xiansuo +闲谈xiantan +险滩xiantan +先天xiantian +线条xiantiao +县委xianwei +纤维xianwei +显现xianxian +现象xianxiang +现行xianxing +鲜血xianxue +显眼xianyan +鲜艳xianyan +显要xianyao +险要xianyao +显耀xianyao +现役xianyi +嫌疑xianyi +现有xianyou +限于xianyu +闲杂xianza +现在xianzai +县长xianzhang +宪章xianzhang +限制xianzhi +先知xianzhi +闲置xianzhi +闲职xianzhi +显著xianzhu +现状xianzhuang +险阻xianzu +小xiao +消xiao +削xiao +效xiao +笑xiao +校xiao +销xiao +硝xiao +萧xiao +肖xiao +孝xiao +霄xiao +哮xiao +嚣xiao +宵xiao +淆xiao +晓xiao +啸xiao +哓xiao +崤xiao +潇xiao +逍xiao +骁xiao +绡xiao +枭xiao +枵xiao +蛸*xiao +筱xiao +箫xiao +魈xiao +小报xiaobao +小辈xiaobei +笑柄xiaobing +消沉xiaochen +消除xiaochu +消毒xiaodu +效法xiaofa +小贩xiaofan +消防xiaofang +消费xiaofei +校风xiaofeng +小鬼xiaogui +效果xiaoguo +小孩xiaohai +消耗xiaohao +消化xiaohua +笑话xiaohua +小惠xiaohui +销毁xiaohui +销魂xiaohun +消极xiaoji +削减xiaojian +小结xiaojie +小姐xiaojie +孝敬xiaojing +校刊xiaokan +小康xiaokang +效劳xiaolao +效力xiaoli +销路xiaolu +效率xiaolu +消灭xiaomie +消磨xiaomo +效能xiaoneng +消气xiaoqi +消遣xiaoqian +笑容xiaorong +削弱xiaoruo +潇洒xiaosa +校舍xiaoshe +小时xiaoshi +消失xiaoshi +消逝xiaoshi +消瘦xiaoshou +销售xiaoshou +小数xiaoshu +小说xiaoshuo +萧条xiaotiao +消息xiaoxi +肖像xiaoxiang +小心xiaoxin +枭雄xiaoxiong +小学xiaoxue +效验xiaoyan +逍遥xiaoyao +效益xiaoyi +效应xiaoying +校友xiaoyou +小于xiaoyu +校园xiaoyuan +销赃xiaozang +校长xiaozhang +嚣张xiaozhang +效忠xiaozhong +小组xiaozu +下情xiaqing +下去xiaqu +辖区xiaqu +下手xiashou +夏收xiashou +下属xiashu +下水xiashui +下台xiatai +夏天xiatian +下文xiawen +下午xiawu +下限xiaxian +下乡xiaxiang +遐想xiaxiang +狭义xiayi +下游xiayou +狭窄xiazhai +夏至xiazhi +夏种xiazhong +喜报xibao +细胞xibao +西北xibei +西边xibian +稀薄xibo +锡箔xibo +西餐xican +洗涤xidi +吸毒xidu +些xie +解*xie +写xie +斜xie +谢xie +协xie +械xie +叶*xie +血*xie +卸xie +屑xie +鞋xie +歇xie +邪xie +胁xie +蟹xie +泄xie +泻xie +契*xie +楔xie +蝎xie +挟xie +携xie +谐xie +懈xie +偕xie +亵xie +勰xie +燮xie +薤xie +撷xie +獬xie +廨xie +渫xie +瀣xie +邂xie +绁xie +缬xie +榭xie +榍xie +颉*xie +躞xie +写出xiechu +协从xiecong +携带xiedai +邪道xiedao +协调xiediao +协定xieding +亵渎xiedu +邪恶xiee +协和xiehe +谐和xiehe +协会xiehui +谢绝xiejue +协力xieli +泄漏xielou +邪路xielu +泄露xielu +泄密xiemi +邪念xienian +胁迫xiepo +邪气xieqi +协商xieshang +写生xiesheng +携手xieshou +邪说xieshuo +协同xietong +歇息xiexi +谢谢xiexie +协议xieyi +谐音xieyin +协约xieyue +写照xiezhao +协助xiezhu +鞋子xiezi +写作xiezuo +协作xiezuo +西方xifang +西风xifeng +西服xifu +吸附xifu +媳妇xifu +习惯xiguan +西汉xihan +稀罕xihan +希罕xihan +喜欢xihuan +袭击xiji +细节xijie +洗劫xijie +喜剧xiju +戏剧xiju +席卷xijuan +细菌xijun +犀利xili +系列xilie +奚落xiluo +熄灭ximie +新xin +心xin +信xin +锌xin +芯xin +辛xin +寻*xin +欣xin +薪xin +忻xin +衅xin +囟xin +馨xin +昕xin +歆xin +镡*xin +鑫xin +心爱xinai +西南xinan +新春xinchun +信贷xindai +心得xinde +心烦xinfan +心服xinfu +信服xinfu +行xing +性xing +形xing +型xing +星xing +兴xing +省*xing +醒xing +姓xing +幸xing +腥xing +猩xing +惺xing +刑xing +邢xing +杏xing +陉xing +荇xing +荥xing +擤xing +饧xing +悻xing +硎xing +心甘xingan +兴办xingban +性别xingbie +姓别xingbie +刑场xingchang +星辰xingchen +形成xingcheng +行程xingcheng +行动xingdong +幸而xinger +刑法xingfa +刑罚xingfa +兴奋xingfen +幸福xingfu +性格xingge +幸好xinghao +型号xinghao +行贿xinghui +星火xinghuo +性急xingji +形迹xingji +兴建xingjian +行径xingjing +行军xingjun +星空xingkong +幸亏xingkui +行李xingli +行旅xinglu +幸免xingmian +性命xingming +姓名xingming +醒目xingmu +性能xingneng +行期xingqi +兴起xingqi +星期xingqi +性情xingqing +星球xingqiu +兴趣xingqu +形容xingrong +行商xingshang +兴盛xingsheng +行使xingshi +行事xingshi +行驶xingshi +形式xingshi +幸事xingshi +刑事xingshi +形势xingshi +姓氏xingshi +行署xingshu +兴衰xingshuai +形态xingtai +形体xingti +兴亡xingwang +兴旺xingwang +行为xingwei +行文xingwen +醒悟xingwu +形象xingxiang +行销xingxiao +星星xingxing +行凶xingxiong +兴修xingxiu +行业xingye +星夜xingye +幸运xingyun +行政xingzheng +性质xingzhi +兴致xingzhi +形状xingzhuang +行走xingzou +信号xinhao +心狠xinhen +心慌xinhuang +信汇xinhui +细腻xini +西宁xining +心急xinji +信件xinjian +新疆xinjiang +新近xinjin +新居xinju +心坎xinkan +辛苦xinku +信赖xinlai +辛劳xinlao +心理xinli +心里xinli +心灵xinling +心目xinmu +信念xinnian +戏弄xinong +新奇xinqi +辛勤xinqin +心情xinqing +新区xinqu +新人xinren +信任xinren +欣赏xinshang +新生xinsheng +心声xinsheng +新事xinshi +新式xinshi +新书xinshu +薪水xinshui +心酸xinsuan +辛酸xinsuan +心疼xinteng +心田xintian +心跳xintiao +心头xintou +欣慰xinwei +新闻xinwen +心细xinxi +信息xinxi +欣喜xinxi +新鲜xinxian +心想xinxiang +信箱xinxiang +馨香xinxiang +信心xinxin +新型xinxing +新星xinxing +新兴xinxing +心虚xinxu +心血xinxue +信仰xinyang +心意xinyi +新异xinyi +新颖xinying +信用xinyong +新余xinyu +信誉xinyu +心愿xinyuan +心脏xinzang +新址xinzhi +心中xinzhong +雄xiong +胸xiong +兄xiong +凶xiong +熊xiong +匈xiong +汹xiong +芎xiong +雄辩xiongbian +雄兵xiongbing +凶残xiongcan +兄弟xiongdi +凶恶xionge +雄关xiongguan +凶狠xionghen +雄厚xionghou +胸怀xionghuai +雄健xiongjian +胸口xiongkou +熊猫xiongmao +凶猛xiongmeng +匈奴xiongnu +凶器xiongqi +凶杀xiongsha +雄师xiongshi +凶手xiongshou +胸膛xiongtang +雄伟xiongwei +雄心xiongxin +汹涌xiongyong +雄壮xiongzhuang +雄姿xiongzi +西欧xiou +习气xiqi +吸气xiqi +喜气xiqi +稀奇xiqi +希奇xiqi +喜庆xiqing +吸取xiqu +戏曲xiqu +昔日xiri +牺牲xisheng +西式xishi +喜事xishi +稀释xishi +吸收xishou +系数xishu +洗刷xishua +吸吮xishun +习俗xisu +习题xiti +西天xitian +系统xitong +修xiu +锈xiu +休xiu +袖xiu +秀xiu +朽xiu +宿*xiu +臭*xiu +羞xiu +嗅xiu +绣xiu +咻xiu +岫xiu +馐xiu +庥xiu +溴xiu +鸺xiu +貅xiu +髹xiu +修补xiubu +秀才xiucai +羞耻xiuchi +修辞xiuci +修订xiuding +修复xiufu +修改xiugai +修建xiujian +修剪xiujian +嗅觉xiujue +休克xiuke +羞愧xiukui +修理xiuli +秀丽xiuli +秀气xiuqi +羞辱xiuru +羞涩xiuse +修饰xiushi +休息xiuxi +休想xiuxiang +修养xiuyang +休养xiuyang +修造xiuzao +袖章xiuzhang +袖珍xiuzhen +修正xiuzheng +修筑xiuzhu +希望xiwang +席位xiwei +细微xiwei +西文xiwen +檄文xiwen +细小xixiao +细心xixin +悉心xixin +喜讯xixun +吸烟xiyan +西洋xiyang +西医xiyi +吸引xiyin +希有xiyou +戏院xiyuan +喜悦xiyue +西藏xizang +洗澡xizao +细则xize +细致xizhi +习作xizuo +下基层xjc +现阶段xjd +新技术xjs +献计献策xjxc +先见之明xjzm +兴利除弊xlcb +系列化xlh +稀里糊涂xlht +狭路相逢xlxf +畜牧业xmy +心满意足xmyz +西宁市xns +小朋友xpy +向前看xqk +喜气洋洋xqyy +先人后己xrhj +兴师动众xsdz +销售额xse +刑事犯罪xsfz +小时候xsh +新时期xsq +新生事物xssw +形式主义xszy +相提并论xtbl +续xu +许xu +须xu +需xu +序xu +虚xu +絮xu +畜xu +叙xu +蓄xu +绪xu +徐xu +墟xu +戌xu +嘘xu +酗xu +旭xu +恤xu +婿xu +吁*xu +诩xu +勖xu +圩xu +蓿xu +洫xu +浒*xu +溆xu +顼xu +栩xu +煦xu +砉*xu +盱xu +胥xu +糈xu +醑xu +选xuan +旋xuan +宣xuan +悬xuan +玄xuan +券*xuan +轩xuan +喧xuan +癣xuan +眩xuan +绚xuan +儇xuan +谖xuan +萱xuan +揎xuan +泫xuan +渲xuan +漩xuan +璇xuan +楦xuan +暄xuan +炫xuan +煊xuan +碹xuan +铉xuan +镟xuan +痃xuan +悬案xuanan +轩昂xuanang +选拔xuanba +宣布xuanbu +选材xuancai +选场xuanchang +宣称xuancheng +宣传xuanchuan +选定xuanding +宣读xuandu +宣告xuangao +选购xuangou +悬挂xuangua +玄乎xuanhu +喧哗xuanhua +选集xuanji +宣讲xuanjiang +选举xuanju +绚烂xuanlan +绚丽xuanli +选录xuanlu +旋律xuanlu +选民xuanmin +喧闹xuannao +悬念xuannian +选派xuanpai +宣判xuanpan +选配xuanpei +选票xuanpiao +选区xuanqu +选取xuanqu +喧嚷xuanrang +宣誓xuanshi +选手xuanshou +悬殊xuanshu +旋涡xuanwo +玄虚xuanxu +悬崖xuanya +宣言xuanyan +宣扬xuanyang +炫耀xuanyao +选用xuanyong +选择xuanze +宣战xuanzhan +选种xuanzhong +旋转xuanzhuan +许多xuduo +学xue +血xue +削*xue +雪xue +穴xue +靴xue +薛xue +谑xue +噱*xue +泶xue +踅xue +鳕xue +学报xuebao +学部xuebu +学潮xuechao +学费xuefei +学风xuefeng +学府xuefu +血汗xuehan +学好xuehao +学会xuehui +学籍xueji +血迹xueji +学科xueke +血泪xuelei +学历xueli +学龄xueling +学年xuenian +学派xuepai +学期xueqi +血肉xuerou +学生xuesheng +学时xueshi +学识xueshi +学士xueshi +学术xueshu +血书xueshu +学说xueshuo +血统xuetong +学徒xuetu +学位xuewei +学问xuewen +学习xuexi +血洗xuexi +学校xuexiao +血压xueya +学业xueye +血液xueye +学友xueyou +学员xueyuan +学院xueyuan +血晕xueyun +血战xuezhan +学者xuezhe +学制xuezhi +虚构xugou +序号xuhao +蓄积xuji +虚假xujia +叙旧xujiu +许可xuke +序列xulie +绪论xulun +虚名xuming +序幕xumu +畜牧xumu +训xun +旬xun +迅xun +讯xun +寻xun +循xun +巡xun +荤*xun +浚*xun +勋xun +熏xun +询xun +驯xun +殉xun +汛xun +逊xun +巽xun +郇*xun +埙xun +荀xun +蕈xun +薰xun +峋xun +徇xun +獯xun +恂xun +洵xun +浔xun +曛xun +窨*xun +醺xun +鲟xun +巡捕xunbu +巡查xuncha +寻常xunchang +驯服xunfu +殉国xunguo +巡航xunhang +循环xunhuan +巡回xunhui +虚拟xuni +寻机xunji +巡警xunjing +勋爵xunjue +训练xunlian +巡逻xunluo +迅猛xunmeng +寻求xunqiu +逊色xunse +巡视xunshi +徇私xunsi +迅速xunsu +熏陶xuntao +许诺xunuo +讯问xunwen +询问xunwen +寻衅xunxin +循序xunxu +勋章xunzhang +寻找xunzhao +殉职xunzhi +寻址xunzhi +需求xuqiu +序曲xuqu +虚荣xurong +虚弱xuruo +虚设xushe +叙事xushi +虚实xushi +序数xushu +虚数xushu +叙述xushu +叙说xushuo +虚伪xuwei +虚心xuxin +序言xuyan +需要xuyao +须臾xuyu +许愿xuyuan +须知xuzhi +宣武区xwq +信息处理xxcl +循序见进xxjj +辛辛苦苦xxkk +信息量xxl +熙熙攘攘xxrr +小学生xxs +欣欣向荣xxxr +小心翼翼xxyy +下一步xyb +胸有成竹xycz +洗衣机xyj +小意思xys +习以为常xywc +新颖性xyx +兴致勃勃xzbb +新中国xzg +行政区域xzqy +雪中送炭xzst +心中无数xzws +选择性xzx +心中有数xzys +行之有效xzyx +一y +有y +用y +要y +以y +于y +也y +样y +义y +与y +由y +压y +员y +月y +意y +又y +运y +原y +油y +验y +压ya +亚ya +呀ya +牙ya +芽ya +雅ya +蚜ya +鸭ya +匹*ya +押ya +鸦ya +丫ya +崖ya +衙ya +涯ya +哑ya +讶ya +伢ya +垭ya +揠ya +岈ya +迓ya +娅ya +琊ya +桠ya +氩ya +砑ya +睚ya +痖ya +哑巴yaba +牙齿yachi +压倒yadao +压服yafu +牙关yaguan +雅观yaguan +压价yajia +押金yajin +亚军yajun +压力yali +验yan +研yan +严yan +眼yan +言yan +盐yan +演yan +岩yan +沿yan +烟yan +延yan +掩yan +宴yan +炎yan +颜yan +燕yan +衍yan +铅*yan +焉yan +咽yan +阉yan +淹yan +蜒yan +阎yan +奄yan +艳yan +堰yan +厌yan +砚yan +雁yan +唁yan +彦yan +焰yan +谚yan +殷*yan +厣yan +赝yan +剡*yan +俨yan +偃yan +兖yan +谳yan +阽*yan +郾yan +鄢yan +芫*yan +菸yan +崦yan +恹yan +闫yan +阏yan +湮yan +滟yan +妍yan +嫣yan +琰yan +檐yan +晏yan +胭yan +腌*yan +焱yan +罨yan +筵yan +酽yan +魇yan +餍yan +鼹yan +沿岸yanan +严办yanban +掩蔽yanbi +演变yanbian +烟草yancao +延长yanchang +演唱yanchang +严惩yancheng +延迟yanchi +演出yanchu +唁电yandian +严冬yandong +厌恶yane +厌烦yanfan +样yang +养yang +氧yang +扬yang +洋yang +阳yang +羊yang +秧yang +央yang +杨yang +仰yang +殃yang +鸯yang +佯yang +疡yang +痒yang +漾yang +徉yang +怏yang +泱yang +炀yang +烊yang +恙yang +蛘yang +鞅yang +掩盖yangai +样板yangban +样本yangben +洋财yangcai +养成yangcheng +沿革yange +严格yange +阳光yangguang +洋行yanghang +养护yanghu +氧化yanghua +养料yangliao +杨柳yangliu +仰面yangmian +殃民yangmin +仰慕yangmu +样品yangpin +洋气yangqi +扬弃yangqi +央求yangqiu +养伤yangshang +样式yangshi +阳台yangtai +眼光yanguang +仰望yangwang +洋务yangwu +洋相yangxiang +扬言yangyan +样样yangyang +洋溢yangyi +养育yangyu +养殖yangzhi +样子yangzi +沿海yanhai +严寒yanhan +眼红yanhong +咽喉yanhou +掩护yanhu +眼花yanhua +延缓yanhuan +宴会yanhui +焰火yanhuo +演讲yanjiang +眼界yanjie +严禁yanjin +严谨yanjin +眼镜yanjing +眼睛yanjing +研究yanjiu +严峻yanjun +眼看yankan +严酷yanku +眼眶yankuang +眼泪yanlei +眼力yanli +严厉yanli +艳丽yanli +眼帘yanlian +眼亮yanliang +言路yanlu +沿路yanlu +言论yanlun +掩埋yanmai +严密yanmi +严明yanming +烟幕yanmu +延年yannian +延期yanqi +眼前yanqian +宴请yanqing +俨然yanran +炎热yanre +眼色yanse +颜色yanse +延伸yanshen +岩石yanshi +演示yanshi +掩饰yanshi +验收yanshou +严守yanshou +延寿yanshou +演说yanshuo +严肃yansu +演算yansuan +言谈yantan +研讨yantao +沿途yantu +阎王yanwang +延误yanwu +烟雾yanwu +宴席yanxi +筵席yanxi +演习yanxi +沿袭yanxi +眼下yanxia +沿线yanxian +言行yanxing +严刑yanxing +延续yanxu +艳阳yanyang +演义yanyi +演绎yanyi +掩映yanying +沿用yanyong +言语yanyu +演员yanyuan +厌战yanzhan +沿着yanzhe +验证yanzheng +研制yanzhi +严重yanzhong +演奏yanzou +要yao +药yao +约*yao +摇yao +腰yao +咬yao +邀yao +耀yao +陶*yao +侥*yao +疟yao +妖yao +瑶yao +尧yao +遥yao +窑yao +谣yao +姚yao +舀yao +钥*yao +夭yao +爻yao +吆yao +崾yao +徭yao +幺yao +珧yao +杳yao +轺yao +曜yao +肴yao +铫*yao +鹞yao +窈yao +繇yao +鳐yao +摇摆yaobai +腰包yaobao +要不yaobu +谣传yaochuan +要得yaode +要点yaodian +摇动yaodong +窑洞yaodong +遥感yaogan +妖怪yaoguai +要害yaohai +摇撼yaohan +摇晃yaohuang +要件yaojian +要紧yaojin +摇控yaokong +遥控yaokong +摇篮yaolan +要领yaoling +要么yaome +妖魔yaomo +要目yaomu +邀请yaoqing +要求yaoqiu +要塞yaosai +要是yaoshi +钥匙yaoshi +要素yaosu +窈窕yaotiao +摇头yaotou +要闻yaowen +药物yaowu +要挟yaoxie +耀眼yaoyan +谣言yaoyan +妖艳yaoyan +夭折yaozhe +要职yaozhi +鸦片yapian +压迫yapo +压强yaqiang +压缩yasuo +雅兴yaxing +压仰yayang +压抑yayi +压榨yazha +压制yazhi +雅致yazhi +亚洲yazhou +鸭子yazi +雅座yazuo +要不得ybd +一般的说ybds +一部分ybf +要不然ybr +要不是ybs +一般说来ybsl +要不要yby +一辈子ybz +一把抓ybz +用不着ybz +扬长避短ycbd +由此可见yckj +银川市ycs +与此同时ycts +有偿转让yczr +邮电部ydb +有道德ydd +邮电局ydj +一刀切ydq +运动员ydy +印度洋ydy +因地制宜ydzy +也ye +业ye +页ye +叶ye +液ye +夜ye +野ye +爷ye +冶ye +邪*ye +哗*ye +咽*ye +椰ye +噎ye +耶ye +掖ye +曳ye +腋ye +拽*ye +靥ye +谒ye +邺ye +揶ye +晔ye +烨ye +铘ye +夜餐yecan +野餐yecan +野火yehuo +业绩yeji +夜间yejian +冶金yejin +夜里yeli +冶练yelian +野蛮yeman +夜幕yemu +夜色yese +也是yeshi +夜市yeshi +野兽yeshou +液体yeti +野外yewai +夜晚yewan +业务yewu +夜校yexiao +野心yexin +野性yexing +也许yexu +幼儿园yey +爷爷yeye +野营yeying +业余yeyu +野战yezhan +叶子yezi +一方面yfm +一分为二yfwe +阳奉阴违yfyw +一概而论ygel +一国两制yglz +有根有据ygyj +严格要求ygyq +有何特长yhtc +银行帐号yhzh +炎黄子孙yhzs +一yi +以yi +义yi +意yi +已yi +移yi +医yi +议yi +依yi +易yi +乙yi +艺yi +益yi +异yi +宜yi +仪yi +亿yi +遗yi +伊yi +役yi +衣yi +疑yi +亦yi +谊yi +翼yi +译yi +抑yi +忆yi +疫yi +壹yi +揖yi +铱yi +颐yi +夷yi +胰yi +沂yi +姨yi +彝yi +椅yi +蚁yi +倚yi +矣yi +邑yi +屹yi +臆yi +逸yi +肄yi +裔yi +毅yi +溢yi +诣yi +翌yi +绎yi +刈yi +劓yi +仡*yi +佚yi +佾yi +诒yi +圯yi +埸yi +懿yi +苡yi +荑yi +薏yi +弈yi +奕yi +挹yi +弋yi +呓yi +咦yi +咿yi +嗌*yi +噫yi +峄yi +嶷yi +猗yi +饴yi +怿yi +怡yi +悒yi +漪yi +迤yi +驿yi +缢yi +殪yi +轶yi +贻yi +欹*yi +旖yi +熠yi +眙yi +钇yi +镒yi +镱yi +痍yi +瘗yi +癔yi +翊yi +蜴yi +舣yi +羿yi +翳yi +酏yi +黟yi +议案yian +疑案yian +一半yiban +一般yiban +一斑yiban +一边yibian +以便yibian +仪表yibiao +一并yibing +异步yibu +遗产yichan +异常yichang +议程yicheng +益处yichu +遗传yichuan +一次yici +依次yici +依从yicong +一代yidai +一带yidai +一旦yidan +一点yidian +一定yiding +议定yiding +移动yidong +一度yidu +遗毒yidu +一端yiduan +臆断yiduan +亿吨yidun +一发yifa +依法yifa +义愤yifen +衣服yifu +依附yifu +一概yigai +一个yige +一共yigong +议购yigou +已故yigu +一贯yiguan +异国yiguo +遗憾yihan +遗恨yihen +以后yihou +异化yihua +议会yihui +疑惑yihuo +以及yiji +异己yiji +遗迹yiji +议价yijia +意见yijian +移交yijiao +一届yijie +一经yijing +已经yijing +意境yijing +依旧yijiu +一举yiju +依据yiju +移居yiju +议决yijue +依靠yikao +倚靠yikao +一刻yike +医科yike +一块yikuai +以来yilai +依赖yilai +一览yilan +一例yili +毅力yili +屹立yili +一连yilian +意料yiliao +医疗yiliao +遗留yiliu +遗漏yilou +一律yilu +疑虑yilu +议论yilun +一面yimian +以免yimian +疫苗yimiao +移民yimin +因yin +引yin +阴yin +印yin +音yin +银yin +烟*yin +隐yin +饮yin +荫yin +茵yin +殷yin +姻yin +吟yin +淫yin +寅yin +尹yin +胤yin +鄞yin +圻*yin +垠yin +堙yin +茚yin +吲yin +喑yin +狺yin +夤yin +洇yin +湮*yin +氤yin +铟yin +瘾yin +窨yin +蚓yin +霪yin +龈yin +疑难yinan +阴暗yinan +隐蔽yinbi +音标yinbiao +隐藏yincang +阴沉yinchen +银川yinchuan +因此yinci +引导yindao +音调yindiao +印度yindu +引渡yindu +以内yinei +因而yiner +印发yinfa +音符yinfu +应ying +影ying +硬ying +营ying +英ying +映ying +迎ying +樱ying +婴ying +鹰ying +缨ying +莹ying +萤ying +荧ying +蝇ying +赢ying +盈ying +颖ying +嬴ying +郢ying +茔ying +荥*ying +莺ying +萦ying +蓥ying +撄ying +嘤ying +膺ying +滢ying +潆ying +瀛ying +瑛ying +璎ying +楹ying +媵ying +鹦ying +瘿ying +颍ying +罂ying +英镑yingbang +硬币yingbi +应变yingbian +映衬yingchen +应酬yingchou +迎春yingchun +应当yingdang +赢得yingde +婴儿yinger +营房yingfang +迎风yingfeng +应付yingfu +应该yinggai +英国yingguo +樱花yinghua +英魂yinghun +应急yingji +硬件yingjian +迎接yingjie +应届yingjie +英杰yingjie +营救yingjiu +英俊yingjun +盈亏yingkui +赢利yingli +盈利yingli +英烈yinglie +迎面yingmian +英明yingming +硬盘yingpan +影片yingpian +硬拼yingpin +影射yingshe +映射yingshe +樱桃yingtao +迎头yingtou +因果yinguo +影响yingxiang +硬性yingxing +英雄yingxiong +营养yingyang +应邀yingyao +营业yingye +应用yingyong +英勇yingyong +应有yingyou +英语yingyu +盈余yingyu +营造yingzao +应战yingzhan +迎战yingzhan +映照yingzhao +应征yingzheng +影子yingzi +英姿yingzi +银行yinhang +引号yinhao +殷红yinhong +隐患yinhuan +淫秽yinhui +阴魂yinhun +意念yinian +姨娘yiniang +阴极yinji +印鉴yinjian +引进yinjin +引力yinli +阴历yinli +阴凉yinliang +引路yinlu +隐瞒yinman +阴谋yinmou +银幕yinmu +隐慝yinni +银牌yinpai +引起yinqi +殷切yinqie +殷勤yinqin +引擎yinqing +引人yinren +饮食yinshi +印刷yinshua +饮水yinshui +因素yinsu +阴天yintian +引退yintui +因为yinwei +淫威yinwei +阴险yinxian +印象yinxiang +音响yinxiang +音信yinxin +因循yinxun +引言yinyan +阴影yinying +引用yinyong +引诱yinyou +阴雨yinyu +姻缘yinyuan +隐约yinyue +音乐yinyue +引证yinzheng +印证yinzheng +一片yipian +一瞥yipie +一起yiqi +一齐yiqi +义气yiqi +意气yiqi +仪器yiqi +遗弃yiqi +以前yiqian +一切yiqie +依然yiran +亦然yiran +毅然yiran +艺人yiren +宜人yiren +遗容yirong +以上yishang +一生yisheng +医生yisheng +一时yishi +一事yishi +意识yishi +议事yishi +逸事yishi +仪式yishi +医师yishi +医士yishi +遗失yishi +一手yishou +遗书yishu +艺术yishu +意思yisi +一体yiti +议题yiti +遗体yiti +一天yitian +一同yitong +异同yitong +一头yitou +意图yitu +疑团yituan +以外yiwai +意外yiwai +亿万yiwan +以往yiwang +遗忘yiwang +以为yiwei +意味yiwei +意文yiwen +疑问yiwen +译文yiwen +一无yiwu +义务yiwu +遗物yiwu +医务yiwu +贻误yiwu +一下yixia +以下yixia +一线yixian +一向yixiang +一项yixiang +意向yixiang +遗像yixiang +一些yixie +一心yixin +疑心yixin +异性yixing +医学yixue +一言yiyan +义演yiyan +遗言yiyan +一样yiyang +医药yiyao +意义yiyi +异议yiyi +义勇yiyong +易于yiyu +议员yiyuan +意愿yiyuan +医院yiyuan +亿元yiyuan +遗愿yiyuan +疑云yiyun +一再yizai +一早yizao +臆造yizao +依仗yizhang +仪仗yizhang +一朝yizhao +衣着yizhao +依照yizhao +一阵yizhen +一直yizhi +一致yizhi +以至yizhi +以致yizhi +意志yizhi +抑制yizhi +医治yizhi +抑止yizhi +移植yizhi +遗址yizhi +一种yizhong +遗嘱yizhu +研究会yjh +有纪律yjl +研究生yjs +研究所yjs +研究室yjs +养精畜锐yjxr +研究员yjy +拥军优属yjys +一技之长yjzc +一口气ykq +一览表ylb +以理服人ylfr +阅览室yls +有理想ylx +有利于yly +越来越yly +有目共睹ymgd +一目了然ymlr +有没有ymy +云南省yns +育*yo +哟yo +唷yo +用yong +勇yong +永yong +拥yong +涌yong +蛹yong +庸yong +佣yong +臃yong +痈yong +雍yong +踊yong +咏yong +泳yong +恿yong +俑yong +壅yong +墉yong +喁yong +慵yong +邕yong +镛yong +甬yong +鳙yong +饔yong +拥抱yongbao +永别yongbie +永不yongbu +用处yongchu +用度yongdu +用法yongfa +用费yongfei +勇敢yonggan +用功yonggong +永恒yongheng +用户yonghu +拥护yonghu +拥挤yongji +永久yongjiu +用具yongju +永诀yongjue +用力yongli +庸碌yonglu +勇猛yongmeng +用品yongpin +勇气yongqi +勇士yongshi +庸俗yongsu +咏叹yongtan +用途yongtu +涌现yongxian +用心yongxin +用意yongyi +拥有yongyou +用于yongyu +勇于yongyu +永远yongyuan +踊跃yongyue +有you +由you +又you +油you +右you +友you +优you +幼you +游you +尤you +诱you +犹you +幽you +悠you +忧you +邮you +铀you +酉you +佑you +釉you +卣you +攸you +侑you +莠you +莜you +莸you +尢*you +呦you +囿you +宥you +柚you +猷you +牖you +铕you +疣you +蚰you +蚴you +蝣you +蝤*you +繇*you +鱿you +黝you +鼬you +有碍youai +友爱youai +幽暗youan +友邦youbang +右边youbian +忧愁youchou +由此youci +有错youcuo +有待youdai +优待youdai +诱导youdao +有的youde +优等youdeng +有点youdian +邮电youdian +优点youdian +诱发youfa +有功yougong +有关youguan +有害youhai +友好youhao +优化youhua +油画youhua +幽会youhui +优惠youhui +诱惑youhuo +有机youji +游击youji +有劲youjin +幽静youjing +悠久youjiu +邮局youju +由来youlai +游览youlan +有劳youlao +有利youli +有力youli +游离youli +优良youliang +优劣youlie +幽灵youling +忧虑youlu +优美youmei +幼苗youmiao +有名youming +幽默youmo +右派youpai +诱骗youpian +邮票youpiao +尤其youqi +油漆youqi +友情youqing +右倾youqing +有趣youqu +油然youran +犹如youru +有色youse +优胜yousheng +有时youshi +有事youshi +有失youshi +优势youshi +有数youshu +油水youshui +有所yousuo +有望youwang +有为youwei +游戏youxi +有限youxian +优先youxian +悠闲youxian +有效youxiao +幼小youxiao +有些youxie +有心youxin +游行youxing +优秀youxiu +幽雅youya +悠扬youyang +又要youyao +有益youyi +优异youyi +友谊youyi +有用youyong +游泳youyong +有余youyu +由于youyu +犹豫youyu +忧郁youyu +悠远youyuan +优越youyue +有着youzhe +邮政youzheng +优质youzhi +幼稚youzhi +由衷youzhong +邮资youzi +有求必应yqby +以权谋私yqms +有气无力yqwl +迎刃而解yrej +因人而异yrey +与人为善yrws +引人注目yrzm +意识到ysd +艺术家ysj +因势利导ysld +印刷体yst +意识形态ysxt +衣食住行yszx +以身作则yszz +研讨会yth +一条龙ytl +一条心ytx +有条有理ytyl +于yu +与yu +育yu +鱼yu +雨yu +玉yu +余yu +遇yu +预yu +域yu +语yu +愈yu +渔yu +予yu +羽yu +愚yu +御yu +谷*yu +欲yu +宇yu +蔚*yu +尉*yu +迂yu +淤yu +盂yu +榆yu +虞yu +舆yu +俞yu +逾yu +愉yu +渝yu +隅yu +娱yu +屿yu +禹yu +芋yu +郁yu +吁yu +喻yu +峪yu +狱yu +誉yu +浴yu +寓yu +裕yu +豫yu +驭yu +粥*yu +禺yu +毓yu +伛yu +俣yu +谀yu +谕yu +萸yu +菀*yu +蓣yu +揄yu +圄yu +圉yu +嵛yu +狳yu +饫yu +馀yu +庾yu +阈yu +鬻yu +妪yu +妤yu +纡yu +瑜yu +昱yu +觎yu +腴yu +腧*yu +欤yu +於yu +煜yu +熨yu +燠yu +聿yu +钰yu +鹆yu +鹬yu +瘐yu +瘀yu +窬yu +窳yu +蜮yu +蝓yu +竽yu +臾yu +舁yu +雩yu +龉yu +员yuan +原yuan +圆yuan +源yuan +元yuan +远yuan +愿yuan +院yuan +缘yuan +援yuan +园yuan +怨yuan +鸳yuan +渊yuan +冤yuan +垣yuan +袁yuan +辕yuan +猿yuan +苑yuan +垸yuan +塬yuan +芫yuan +掾yuan +圜*yuan +沅yuan +媛yuan +瑗yuan +橼yuan +爰yuan +眢yuan +鸢yuan +螈yuan +箢yuan +鼋yuan +原本yuanben +渊博yuanbo +冤仇yuanchou +远大yuanda +元旦yuandan +园地yuandi +园丁yuanding +远东yuandong +远方yuanfang +缘分yuanfen +原告yuangao +原故yuangu +缘故yuangu +圆滑yuanhua +原籍yuanji +冤家yuanjia +元件yuanjian +远见yuanjian +远近yuanjin +远景yuanjing +援救yuanjiu +原来yuanlai +原理yuanli +原谅yuanliang +原料yuanliao +远虑yuanlu +圆满yuanman +远谋yuanmou +远期yuanqi +冤屈yuanqu +源泉yuanquan +原始yuanshi +远视yuanshi +元首yuanshou +元帅yuanshuai +元素yuansu +援外yuanwai +愿望yuanwang +冤枉yuanwang +原先yuanxian +远销yuanxiao +元宵yuanxiao +院校yuanxiao +原形yuanxing +怨言yuanyan +原野yuanye +愿意yuanyi +园艺yuanyi +原因yuanyin +援引yuanyin +原有yuanyou +缘由yuanyou +远游yuanyou +远远yuanyuan +渊源yuanyuan +元月yuanyue +原则yuanze +院长yuanzhang +远征yuanzheng +援助yuanzhu +原子yuanzi +院子yuanzi +预报yubao +预备yubei +愚笨yuben +余步yubu +预测yuce +愚蠢yuchun +遇到yudao +预定yuding +预订yuding +余毒yudu +月yue +说*yue +越yue +约yue +乐*yue +跃yue +曰yue +阅yue +钥yue +岳yue +粤yue +悦yue +龠yue +瀹yue +栎*yue +樾yue +刖yue +钺yue +月报yuebao +月初yuechu +月底yuedi +约定yueding +月度yuedu +阅读yuedu +乐队yuedui +约法yuefa +月份yuefen +月光yueguang +越轨yuegui +约会yuehui +越界yuejie +跃进yuejin +越境yuejing +阅览yuelan +阅历yueli +月亮yueliang +月末yuemo +约莫yuemo +越南yuenan +乐谱yuepu +乐器yueqi +月球yueqiu +乐曲yuequ +月色yuese +越是yueshi +约束yueshu +月台yuetai +乐团yuetuan +约有yueyou +乐章yuezhang +预防yufang +预风yufeng +预付yufu +预感yugan +预告yugao +预购yugou +遇害yuhai +宇航yuhang +与会yuhui +迂回yuhui +雨季yuji +预计yuji +遇见yujian +预见yujian +语句yuju +豫剧yuju +愉快yukuai +娱乐yule +鱼雷yulei +预料yuliao +雨露yulu +舆论yulun +愚昧yumei +育苗yumiao +预谋yumou +运yun +员*yun +云yun +匀yun +均*yun +允yun +孕yun +耘yun +郧yun +陨yun +蕴yun +酝yun +晕yun +韵yun +郓yun +芸yun +狁yun +恽yun +愠yun +纭yun +韫yun +殒yun +昀yun +氲yun +熨yun +遇难yunan +云彩yuncai +蕴藏yuncang +匀称yuncheng +运动yundong +熨斗yundou +云海yunhai +运河yunhe +韵律yunlu +陨落yunluo +云南yunnan +酝酿yunnian +允诺yunnuo +愚弄yunong +运气yunqi +运输yunshu +运算yunsuan +云梯yunti +运往yunwang +韵味yunwei +云雾yunwu +云霞yunxia +运行yunxing +允许yunxu +运用yunyong +孕育yunyu +运载yunzai +运转yunzhuan +与其yuqi +语气yuqi +预期yuqi +预审yushen +于是yushi +预示yushi +预售yushou +雨水yushui +预算yusuan +欲望yuwang +语文yuwen +预习yuxi +预先yuxian +遇险yuxian +预想yuxiang +预言yuyan +语言yuyan +寓言yuyan +预演yuyan +予以yuyi +寓于yuyu +愉悦yuyue +预兆yuzhao +预支yuzhi +宇宙yuzhou +有文化ywh +业务联系ywlx +意味着ywz +有限公司yxgs +一系列yxl +有效期yxq +医学院yxy +一心一意yxyy +游泳池yyc +营业额yye +夜以继日yyjr +应用科学yykx +一言堂yyt +引以为戒yywj +优越性yyx +营业员yyy +隐隐约约yyyy +运用自如yyzr +拥政爱民yzam +原子能yzn +已知数yzs +有助于yzy +言之有理yzyl +在z +这z +主z +中z +种z +着z +争z +战z +作z +正z +之z +制z +重z +组z +治z +只z +子z +自z +质z +指z +杂za +扎*za +咱za +匝za +砸za +咋za +咂za +在zai +再zai +载zai +栽zai +灾zai +仔*zai +哉zai +宰zai +崽zai +甾zai +再版zaiban +再不zaibu +在场zaichang +再度zaidu +宰割zaige +灾害zaihai +再好zaihao +在乎zaihu +灾荒zaihuang +再会zaihui +灾祸zaihuo +再见zaijian +在理zaili +灾民zaimin +灾难zainan +栽培zaipei +再起zaiqi +灾情zaiqing +灾区zaiqu +再三zaisan +在世zaishi +再说zaishuo +载体zaiti +在下zaixia +再现zaixian +宰相zaixiang +在意zaiyi +在于zaiyu +再造zaizao +再则zaize +在职zaizhi +再植zaizhi +杂技zaji +杂粮zaliang +杂乱zaluan +赞zan +咱zan +暂zan +攒zan +拶zan +瓒zan +昝zan +簪zan +糌zan +趱zan +錾zan +赞成zancheng +暂定zanding +藏*zang +脏zang +葬zang +赃zang +奘zang +驵zang +臧zang +赞歌zange +赃款zangkuan +葬送zangsong +赃物zangwu +藏族zangzu +杂念zanian +赞美zanmei +咱们zanmen +暂且zanqie +暂缺zanque +赞赏zanshang +暂时zanshi +赞颂zansong +赞叹zantan +暂停zanting +赞同zantong +暂行zanxing +赞扬zanyang +暂用zanyong +赞助zanzhu +造zao +早zao +遭zao +燥zao +凿zao +糟zao +枣zao +皂zao +藻zao +澡zao +蚤zao +躁zao +噪zao +灶zao +唣zao +早晨zaochen +造成zaocheng +凿穿zaochuan +造次zaoci +造词zaoci +遭到zaodao +早稻zaodao +造反zaofan +早饭zaofan +造福zaofu +糟糕zaogao +造化zaohua +造价zaojia +造就zaojiu +造林zaolin +早年zaonian +糟粕zaopo +早期zaoqi +早日zaori +早上zaoshang +遭受zaoshou +早衰zaoshuai +糟蹋zaota +早晚zaowan +造型zaoxing +遭殃zaoyang +造谣zaoyao +造诣zaoyi +早已zaoyi +噪音zaoyin +遭遇zaoyu +造字zaozi +杂谈zatan +杂文zawen +杂质zazhi +杂志zazhi +资本主义zbzy +资产阶级zcjj +增长率zcl +总参谋部zcmb +真才实学zcsx +自动化zdh +自动检测zdjc +自动检索zdjs +自动控制zdkz +主动权zdq +招待所zds +总的说来zdsl +主动性zdx +则ze +择ze +责ze +侧*ze +泽ze +咋*ze +仄ze +赜ze +啧ze +帻ze +迮ze +昃ze +笮ze +箦ze +舴ze +责备zebei +责成zecheng +责罚zefa +责怪zeguai +贼zei +责令zeling +责骂zema +怎zen +谮zen +增zeng +曾zeng +综*zeng +憎zeng +赠zeng +缯zeng +甑zeng +罾zeng +锃zeng +增补zengbu +增产zengchan +增长zengchang +增大zengda +增订zengding +增多zengduo +增高zenggao +憎恨zenghen +增加zengjia +增减zengjian +增进zengjin +增量zengliang +赠品zengpin +增强zengqiang +增删zengshan +增设zengshe +赠送zengsong +增添zengtian +赠言zengyan +增益zengyi +增援zengyuan +怎么zenme +怎奈zennai +怎样zenyang +责任zeren +责问zewen +总而言之zeyz +争分夺秒zfdm +针锋相对zfxd +自负盈亏zfyk +中关村zgc +自告奋勇zgfy +中国共产党zggd +总工会zgh +中国特色的zgtd +中国银行zgyh +自古以来zgyl +中国政府zgzf +中共中央zgzy +查*zha +扎zha +炸zha +闸zha +铡zha +轧zha +渣zha +蜡*zha +喳zha +札zha +眨zha +栅zha +榨zha +咋*zha +乍zha +诈zha +柞*zha +揸zha +吒zha +咤zha +哳zha +喋*zha +楂*zha +砟zha +痄zha +蚱zha +齄zha +炸弹zhadan +扎根zhagen +炸毁zhahui +寨zhai +侧*zhai +择*zhai +摘zhai +窄zhai +斋zhai +翟*zhai +祭*zhai +宅zhai +债zhai +砦zhai +瘵zhai +摘录zhailu +债权zhaiquan +债务zhaiwu +窄小zhaixiao +摘要zhaiyao +札记zhaji +战zhan +展zhan +站zhan +占zhan +粘*zhan +颤*zhan +瞻zhan +毡zhan +詹zhan +沾zhan +盏zhan +斩zhan +辗zhan +崭zhan +蘸zhan +栈zhan +湛zhan +绽zhan +谵zhan +搌zhan +旃zhan +战败zhanbai +战报zhanbao +战备zhanbei +战场zhanchang +展翅zhanchi +展出zhanchu +战地zhandi +战斗zhandou +战犯zhanfan +长*zhang +张zhang +章zhang +掌zhang +仗zhang +障zhang +胀zhang +涨zhang +账zhang +樟zhang +彰zhang +漳zhang +杖zhang +丈zhang +帐zhang +瘴zhang +仉zhang +鄣zhang +幛zhang +嶂zhang +獐zhang +嫜zhang +璋zhang +蟑zhang +障碍zhangai +站岗zhangang +长辈zhangbei +章程zhangcheng +长大zhangda +战歌zhange +章法zhangfa +帐房zhangfang +丈夫zhangfu +掌管zhangguan +帐号zhanghao +章节zhangjie +帐目zhangmu +战功zhangong +掌权zhangquan +张贴zhangtie +战鼓zhangu +沾光zhanguang +战国zhanguo +战果zhanguo +张望zhangwang +掌握zhangwo +张扬zhangyang +战壕zhanhao +战后zhanhou +战机zhanji +战绩zhanji +战局zhanju +占据zhanju +展开zhankai +战况zhankuang +展览zhanlan +占领zhanling +战略zhanlue +战马zhanma +展品zhanpin +战区zhanqu +沾染zhanran +战胜zhansheng +战时zhanshi +战事zhanshi +战士zhanshi +展示zhanshi +战术zhanshu +展望zhanwang +战线zhanxian +展现zhanxian +展销zhanxiao +崭新zhanxin +瞻仰zhanyang +战役zhanyi +占用zhanyong +占有zhanyou +战友zhanyou +站长zhanzhang +战争zhanzheng +着*zhao +照zhao +找zhao +招zhao +朝*zhao +召zhao +赵zhao +爪zhao +罩zhao +沼zhao +兆zhao +嘲*zhao +昭zhao +肇zhao +诏zhao +啁*zhao +棹zhao +钊zhao +笊zhao +照办zhaoban +照搬zhaoban +招标zhaobiao +照常zhaochang +照抄zhaochao +招待zhaodai +照发zhaofa +招工zhaogong +照顾zhaogu +招呼zhaohu +召唤zhaohuan +照会zhaohui +着急zhaoji +招集zhaoji +召集zhaoji +招架zhaojia +召开zhaokai +招考zhaokao +招揽zhaolan +着力zhaoli +照例zhaoli +照料zhaoliao +着落zhaoluo +着迷zhaomi +照明zhaoming +招聘zhaopin +朝气zhaoqi +招惹zhaore +照射zhaoshe +招生zhaosheng +着手zhaoshou +招手zhaoshou +招收zhaoshou +招贴zhaotie +朝夕zhaoxi +朝霞zhaoxia +着想zhaoxiang +照相zhaoxiang +昭雪zhaoxue +找寻zhaoxun +着眼zhaoyan +照样zhaoyang +照耀zhaoyao +照应zhaoying +招展zhaozhan +招致zhaozhi +着重zhaozhong +照着zhaozhuo +诈骗zhapian +榨取zhaqu +诈取zhaqu +扎实zhashi +炸药zhayao +渣滓zhazi +这zhe +着zhe +者zhe +折zhe +哲zhe +浙zhe +遮zhe +蛰zhe +辙zhe +锗zhe +蔗zhe +谪zhe +摺zhe +柘zhe +辄zhe +磔zhe +鹧zhe +褶zhe +蜇zhe +赭zhe +这般zheban +这边zhebian +这次zheci +遮挡zhedang +这点zhedian +折叠zhedie +折服zhefu +遮盖zhegai +这个zhege +折合zhehe +浙江zhejiang +折旧zhejiu +折扣zhekou +这里zheli +哲理zheli +这么zheme +折磨zhemo +真zhen +针zhen +阵zhen +镇zhen +振zhen +震zhen +珍zhen +诊zhen +斟zhen +甄zhen +砧zhen +臻zhen +贞zhen +侦zhen +枕zhen +疹zhen +圳zhen +蓁zhen +浈zhen +溱*zhen +缜zhen +桢zhen +椹*zhen +榛zhen +轸zhen +赈zhen +胗zhen +朕zhen +祯zhen +畛zhen +稹zhen +鸩zhen +箴zhen +珍爱zhenai +珍宝zhenbao +针砭zhenbian +珍藏zhencang +贞操zhencao +侦察zhencha +真诚zhencheng +震荡zhendang +阵地zhendi +真谛zhendi +震动zhendong +诊断zhenduan +针对zhendui +振奋zhenfen +争zheng +正zheng +政zheng +整zheng +证zheng +征zheng +蒸zheng +症zheng +丁*zheng +郑zheng +挣zheng +睁zheng +狰zheng +怔zheng +拯zheng +帧zheng +诤zheng +峥zheng +徵zheng +钲zheng +铮zheng +筝zheng +争霸zhengba +整备zhengbei +正比zhengbi +政变zhengbian +争辩zhengbian +整编zhengbian +征兵zhengbing +政策zhengce +正常zhengchang +争吵zhengchao +征程zhengcheng +争持zhengchi +正大zhengda +正当zhengdang +政党zhengdang +整党zhengdang +正道zhengdao +争端zhengduan +整顿zhengdun +争夺zhengduo +蒸发zhengfa +政法zhengfa +正反zhengfan +整风zhengfeng +政府zhengfu +征服zhengfu +整改zhenggai +整个zhengge +征购zhenggou +争光zhengguang +正规zhenggui +正轨zhenggui +正好zhenghao +政绩zhengji +征集zhengji +证件zhengjian +政见zhengjian +整洁zhengjie +政局zhengju +证据zhengju +正理zhengli +整理zhengli +正梁zhengliang +政令zhengling +争论zhenglun +政论zhenglun +正面zhengmian +争鸣zhengming +证明zhengming +正派zhengpai +征聘zhengpin +争气zhengqi +正气zhengqi +蒸气zhengqi +整齐zhengqi +正巧zhengqiao +征求zhengqiu +争取zhengqu +政权zhengquan +正确zhengque +证人zhengren +正是zhengshi +正式zhengshi +正视zhengshi +证实zhengshi +征收zhengshou +整数zhengshu +证书zhengshu +征税zhengshui +整套zhengtao +正题zhengti +政体zhengti +整体zhengti +整天zhengtian +征调zhengtiao +正统zhengtong +征途zhengtu +珍贵zhengui +政委zhengwei +正文zhengwen +征文zhengwen +政务zhengwu +争先zhengxian +政协zhengxie +整形zhengxing +整修zhengxiu +征询zhengxun +争艳zhengyan +正业zhengye +正义zhengyi +争议zhengyi +征用zhengyong +正月zhengyue +正在zhengzai +挣扎zhengzha +整整zhengzheng +正直zhengzhi +政治zhengzhi +争执zhengzhi +正中zhengzhong +郑重zhengzhong +郑州zhengzhou +症状zhengzhuang +正宗zhengzong +震撼zhenhan +侦缉zhenji +真假zhenjia +阵脚zhenjiao +贞节zhenjie +贞洁zhenjie +镇静zhenjing +震惊zhenjing +真空zhenkong +真理zhenli +诊疗zhenliao +珍品zhenpin +珍奇zhenqi +真切zhenqie +真情zhenqing +真确zhenque +真人zhenren +阵容zhenrong +真是zhenshi +真实zhenshi +阵势zhenshi +珍视zhenshi +侦探zhentan +阵亡zhenwang +珍惜zhenxi +阵线zhenxian +真相zhenxiang +振兴zhenxing +镇压zhenya +阵阵zhenzhen +真正zhenzheng +真知zhenzhi +真挚zhenzhi +珍重zhenzhong +珍珠zhenzhu +斟酌zhenzhuo +振作zhenzuo +这是zheshi +这时zheshi +折腾zheteng +这些zhexie +哲学zhexue +遮掩zheyan +这样zheyang +这种zhezhong +折中zhezhong +之zhi +制zhi +治zhi +只zhi +质zhi +指zhi +直zhi +支zhi +织zhi +止zhi +至zhi +置zhi +志zhi +值zhi +知zhi +识*zhi +执zhi +职zhi +植zhi +纸zhi +致zhi +枝zhi +殖zhi +脂zhi +智zhi +氏*zhi +肢zhi +秩zhi +址zhi +滞zhi +汁zhi +芝zhi +吱zhi +蜘zhi +侄zhi +趾zhi +旨zhi +挚zhi +掷zhi +帜zhi +峙zhi +稚zhi +炙zhi +痔zhi +窒zhi +卮zhi +陟zhi +郅zhi +埴zhi +芷zhi +摭zhi +帙zhi +徵*zhi +忮zhi +彘zhi +咫zhi +骘zhi +栉zhi +枳zhi +栀zhi +桎zhi +轵zhi +轾zhi +贽zhi +胝zhi +膣zhi +祉zhi +祗zhi +黹zhi +雉zhi +鸷zhi +痣zhi +蛭zhi +絷zhi +酯zhi +跖zhi +踬zhi +踯zhi +豸zhi +觯zhi +治安zhian +值班zhiban +植保zhibao +置备zhibei +质变zhibian +指标zhibiao +职别zhibie +支部zhibu +制裁zhicai +支撑zhicheng +职称zhicheng +支持zhichi +指出zhichu +支出zhichu +至此zhici +值此zhici +直达zhida +只当zhidang +直到zhidao +指导zhidao +知道zhidao +只得zhide +值得zhide +质地zhidi +指点zhidian +制定zhiding +指定zhiding +制订zhiding +制度zhidu +支队zhidui +至多zhiduo +知法zhifa +执法zhifa +制服zhifu +支付zhifu +职工zhigong +只顾zhigu +只管zhiguan +直观zhiguan +治国zhiguo +只好zhihao +之后zhihou +指挥zhihui +智慧zhihui +知己zhiji +指甲zhijia +之间zhijian +只见zhijian +指教zhijiao +直接zhijie +枝节zhijie +至今zhijin +直经zhijing +直径zhijing +止境zhijing +致敬zhijing +知觉zhijue +治理zhili +致力zhili +智力zhili +质量zhiliang +治疗zhiliao +指令zhiling +直流zhiliu +支流zhiliu +殖民zhimin +致命zhiming +指明zhiming +知名zhiming +智谋zhimou +指南zhinan +智囊zhinang +之内zhinei +只能zhineng +职能zhineng +智能zhineng +只怕zhipa +指派zhipai +支配zhipei +支票zhipiao +制品zhipin +志气zhiqi +之前zhiqian +支前zhiqian +值勤zhiqin +执勤zhiqin +知情zhiqing +知青zhiqing +智取zhiqu +志趣zhiqu +知趣zhiqu +职权zhiquan +值日zhiri +治丧zhisang +之上zhishang +直上zhishang +至上zhishang +至少zhishao +制胜zhisheng +之声zhisheng +只是zhishi +指使zhishi +支使zhishi +致使zhishi +知事zhishi +指示zhishi +知识zhishi +指数zhishu +支书zhishu +直属zhishu +植树zhishu +直爽zhishuang +治水zhishui +直说zhishuo +致死zhisi +之外zhiwai +指望zhiwang +职位zhiwei +质问zhiwen +植物zhiwu +职务zhiwu +窒息zhixi +之下zhixia +直线zhixian +指向zhixiang +志向zhixiang +知心zhixin +执行zhixing +只许zhixu +秩序zhixu +直言zhiyan +只要zhiyao +职业zhiye +致意zhiyi +旨意zhiyi +质疑zhiyi +指引zhiyin +知音zhiyin +只有zhiyou +至于zhiyu +置于zhiyu +智育zhiyu +职员zhiyuan +支援zhiyuan +志愿zhiyuan +制约zhiyue +制造zhizao +指责zhize +职责zhize +纸张zhizhang +职掌zhizhang +执照zhizhao +指正zhizheng +执政zhizheng +制止zhizhi +直至zhizhi +之中zhizhong +支助zhizhu +支柱zhizhu +知足zhizu +制作zhizuo +走后门zhm +中华民国zhmg +中华民族zhmz +中zhong +种zhong +重zhong +众zhong +钟zhong +终zhong +忠zhong +肿zhong +仲zhong +盅zhong +衷zhong +冢zhong +忪*zhong +锺zhong +螽zhong +舯zhong +踵zhong +钟爱zhongai +重办zhongban +重兵zhongbing +中部zhongbu +仲裁zhongcai +中层zhongceng +衷肠zhongchang +忠诚zhongcheng +重大zhongda +重担zhongdan +中等zhongdeng +种地zhongdi +重地zhongdi +重点zhongdian +终点zhongdian +中东zhongdong +中断zhongduan +终端zhongduan +中队zhongdui +众多zhongduo +重犯zhongfan +忠告zhonggao +中共zhonggong +中国zhongguo +忠厚zhonghou +中华zhonghua +中级zhongji +终极zhongji +重价zhongjia +中间zhongjian +中坚zhongjian +中奖zhongjiang +终结zhongjie +终究zhongjiu +终久zhongjiu +终局zhongju +中肯zhongken +种类zhonglei +中立zhongli +重量zhongliang +终了zhongliao +中流zhongliu +肿瘤zhongliu +中美zhongmei +众目zhongmu +中年zhongnian +终年zhongnian +中秋zhongqiu +重任zhongren +中日zhongri +终日zhongri +中伤zhongshang +重赏zhongshang +终身zhongshen +终生zhongsheng +重视zhongshi +忠实zhongshi +中枢zhongshu +众说zhongshuo +中苏zhongsu +终天zhongtian +中途zhongtu +重托zhongtuo +中外zhongwai +重围zhongwei +中文zhongwen +中午zhongwu +中西zhongxi +中心zhongxin +忠心zhongxin +衷心zhongxin +中性zhongxing +中学zhongxue +中旬zhongxun +忠言zhongyan +中央zhongyang +中药zhongyao +重要zhongyao +中医zhongyi +重用zhongyong +中庸zhongyong +中游zhongyou +终于zhongyu +忠于zhongyu +忠贞zhongzhen +中止zhongzhi +种植zhongzhi +终止zhongzhi +种种zhongzhong +中专zhongzhuan +种族zhongzu +轴zhou +周zhou +洲zhou +州zhou +皱zhou +骤zhou +舟zhou +诌zhou +粥zhou +肘zhou +帚zhou +咒zhou +宙zhou +昼zhou +荮zhou +啁zhou +妯zhou +纣zhou +绉zhou +胄zhou +碡zhou +籀zhou +繇*zhou +酎zhou +周到zhoudao +咒骂zhouma +周密zhoumi +周末zhoumo +周期zhouqi +周全zhouquan +周围zhouwei +周旋zhouxuan +昼夜zhouye +周折zhouzhe +周知zhouzhi +周转zhouzhuan +总后勤部zhqb +中华人民共和国zhrg +主zhu +注zhu +著zhu +住zhu +助zhu +猪zhu +铸zhu +属*zhu +株zhu +筑zhu +柱zhu +术*zhu +驻zhu +逐zhu +祝zhu +竹zhu +贮zhu +珠zhu +朱zhu +诸zhu +蛛zhu +诛zhu +烛zhu +煮zhu +拄zhu +瞩zhu +嘱zhu +蛀zhu +伫zhu +侏zhu +邾zhu +茱zhu +洙zhu +渚zhu +潴zhu +杼zhu +槠zhu +橥zhu +炷zhu +铢zhu +疰zhu +瘃zhu +褚*zhu +竺zhu +箸zhu +舳zhu +翥zhu +躅zhu +麈zhu +抓zhua +挝*zhua +抓好zhuahao +转*zhuai +曳*zhuai +拽zhuai +抓紧zhuajin +转zhuan +专zhuan +传*zhuan +砖zhuan +撰zhuan +赚zhuan +篆zhuan +啭zhuan +馔zhuan +沌*zhuan +颛zhuan +转变zhuanbian +转播zhuanbo +专长zhuanchang +专程zhuancheng +转达zhuanda +转发zhuanfa +装zhuang +状zhuang +壮zhuang +庄zhuang +撞zhuang +幢*zhuang +桩zhuang +妆zhuang +僮zhuang +奘*zhuang +转告zhuangao +装扮zhuangban +装备zhuangbei +壮大zhuangda +装订zhuangding +壮观zhuangguan +装甲zhuangjia +庄稼zhuangjia +庄嫁zhuangjia +壮举zhuangju +状况zhuangkuang +壮阔zhuangkuo +壮丽zhuangli +壮烈zhuanglie +装配zhuangpei +装饰zhuangshi +状态zhuangtai +装卸zhuangxie +庄严zhuangyan +庄园zhuangyuan +装运zhuangyun +装置zhuangzhi +壮志zhuangzhi +庄重zhuangzhong +转化zhuanhua +转换zhuanhuan +转给zhuanji +专家zhuanjia +专科zhuanke +专利zhuanli +专门zhuanmen +转让zhuanrang +专题zhuanti +转向zhuanxiang +专心zhuanxin +转眼zhuanyan +专业zhuanye +转移zhuanyi +专员zhuanyuan +转载zhuanzai +转折zhuanzhe +转正zhuanzheng +专政zhuanzheng +专制zhuanzhi +专职zhuanzhi +专注zhuanzhu +专著zhuanzhu +主办zhuban +逐步zhubu +贮藏zhucang +注册zhuce +助长zhuchang +主持zhuchi +主次zhuci +主导zhudao +注定zhuding +主动zhudong +主队zhudui +主犯zhufan +住房zhufang +祝福zhufu +嘱咐zhufu +逐个zhuge +主攻zhugong +助工zhugong +主管zhuguan +主观zhuguan +追zhui +锥zhui +椎zhui +赘zhui +坠zhui +缀zhui +惴zhui +骓zhui +缒zhui +追捕zhuibu +追查zhuicha +追悼zhuidao +追赶zhuigan +坠毁zhuihui +追加zhuijia +追究zhuijiu +追求zhuiqiu +追认zhuiren +追溯zhuisu +追随zhuisui +追问zhuiwen +追逐zhuizhu +追踪zhuizong +主机zhuji +主见zhujian +逐渐zhujian +主将zhujiang +主讲zhujiang +主教zhujiao +主角zhujiao +注解zhujie +祝酒zhujiu +主力zhuli +助理zhuli +株连zhulian +主粮zhuliang +主流zhuliu +驻留zhuliu +著名zhuming +主谋zhumou +注目zhumu +瞩目zhumu +准zhun +屯*zhun +谆zhun +肫zhun +窀zhun +准备zhunbei +逐年zhunian +准确zhunque +准绳zhunsheng +准时zhunshi +准许zhunxu +准则zhunze +着*zhuo +著*zhuo +捉zhuo +桌zhuo +缴*zhuo +拙zhuo +卓zhuo +琢zhuo +茁zhuo +酌zhuo +啄zhuo +灼zhuo +浊zhuo +倬zhuo +诼zhuo +擢zhuo +浞zhuo +涿zhuo +濯zhuo +棹*zhuo +焯zhuo +禚zhuo +斫zhuo +镯zhuo +拙劣zhuolie +琢磨zhuomo +捉弄zhuonong +酌情zhuoqing +卓越zhuoyue +茁壮zhuozhuang +主权zhuquan +主人zhuren +主任zhuren +诸如zhuru +注色zhuse +注视zhushi +柱石zhushi +注释zhushi +助手zhushou +主送zhusong +住宿zhusu +珠算zhusuan +主题zhuti +主体zhuti +逐条zhutiao +嘱托zhutuo +诸位zhuwei +主席zhuxi +注销zhuxiao +主要zhuyao +逐一zhuyi +主义zhuyi +主意zhuyi +注意zhuyi +祝愿zhuyuan +逐月zhuyue +主宰zhuzai +铸造zhuzao +驻扎zhuzha +住宅zhuzhai +主张zhuzhang +住址zhuzhi +注重zhuzhong +著作zhuzuo +子zi +自zi +资zi +字zi +紫zi +仔zi +籽zi +姿zi +吱*zi +兹zi +咨zi +滋zi +淄zi +孜zi +滓zi +渍zi +谘zi +茈*zi +呲*zi +嵫zi +姊zi +孳zi +缁zi +梓zi +辎zi +赀zi +恣zi +眦zi +锱zi +秭zi +耔zi +笫zi +粢zi +趑zi +觜zi +訾zi +龇zi +鲻zi +髭zi +自爱ziai +自白zibai +自卑zibei +资本ziben +资产zichan +滋长zichang +自称zicheng +自传zichuan +自从zicong +子弟zidi +字典zidian +自动zidong +自发zifa +自费zifei +自封zifeng +自负zifu +字符zifu +资格zige +字根zigen +自豪zihao +自给ziji +自己ziji +字迹ziji +字节zijie +资金zijin +自救zijiu +自居ziju +自觉zijue +字库ziku +自夸zikua +自理zili +资历zili +资料ziliao +自满ziman +自勉zimian +字母zimu +字幕zimu +子女zinu +自强ziqiang +自然ziran +滋润zirun +自杀zisha +自身zishen +姿势zishi +自述zishu +自私zisi +姿态zitai +字体ziti +字帖zitie +自卫ziwei +滋味ziwei +自问ziwen +自我ziwo +仔细zixi +自信zixin +自修zixiu +自叙zixu +自选zixuan +自学zixue +咨询zixun +滋养ziyang +自由ziyou +自愿ziyuan +资源ziyuan +自找zizhao +自治zizhi +自重zizhong +资助zizhu +自尊zizun +直截了当zjld +浙江省zjs +这就是说zjss +中纪委zjw +再接再厉zjzl +中联部zlb +专利法zlf +质量管理zlgl +自力更生zlgs +展览会zlh +智力开发zlkf +专利权zlq +知名人士zmrs +这么些zmx +这么样zmy +怎么样zmy +总zong +纵zong +宗zong +综zong +棕zong +鬃zong +踪zong +偬zong +枞zong +腙zong +粽zong +总部zongbu +总裁zongcai +总参zongcan +总队zongdui +总额zonge +总纲zonggang +总共zonggong +纵贯zongguan +总和zonghe +综合zonghe +纵横zongheng +总后zonghou +总计zongji +踪迹zongji +宗教zongjiao +总结zongjie +总局zongju +总括zongkuo +总理zongli +总论zonglun +宗派zongpai +纵情zongqing +纵深zongshen +总是zongshi +纵使zongshi +总数zongshu +总算zongsuan +总体zongti +总统zongtong +总务zongwu +踪影zongying +总帐zongzhang +总政zongzheng +总之zongzhi +宗旨zongzhi +走zou +邹zou +奏zou +揍zou +诹zou +陬zou +鄹zou +驺zou +鲰zou +走访zoufang +邹虹zouhong +走私zousi +奏效zouxiao +酌情处理zqcl +中青年zqn +朝气蓬勃zqpb +准确无误zqww +正确性zqx +诸如此类zrcl +责任感zrg +自然界zrj +主人翁zrw +责任心zrx +责任制zrz +再生产zsc +自上而下zsex +知识分子zsfz +这时候zsh +知识化zsh +株式会社zshs +总书记zsj +装饰品zsp +综上所述zsss +之所以zsy +自始至终zszz +众所周知zszz +座谈会zth +组zu +族zu +足zu +阻zu +祖zu +租zu +卒zu +诅zu +俎zu +菹zu +镞zu +阻碍zuai +钻zuan +赚*zuan +纂zuan +攥zuan +缵zuan +躜zuan +钻研zuanyan +组成zucheng +阻挡zudang +组阁zuge +足够zugou +祖国zuguo +组合zuhe +最zui +罪zui +嘴zui +堆*zui +咀*zui +醉zui +蕞zui +最初zuichu +最大zuida +最低zuidi +罪恶zuie +罪犯zuifan +最高zuigao +罪过zuiguo +最好zuihao +最后zuihou +最坏zuihuai +最佳zuijia +最近zuijin +嘴脸zuilian +罪名zuiming +罪孽zuinie +罪人zuiren +最先zuixian +最小zuixiao +最新zuixin +醉心zuixin +罪行zuixing +罪责zuize +罪证zuizheng +最终zuizhong +罪状zuizhuang +阻击zuji +租界zujie +租借zujie +阻拦zulan +阻力zuli +租赁zulin +尊zun +遵zun +撙zun +樽zun +鳟zun +阻挠zunao +遵从zuncong +尊贵zungui +尊敬zunjing +遵守zunshou +遵循zunxun +尊严zunyan +遵照zunzhao +尊重zunzhong +作zuo +做zuo +左zuo +座zuo +坐zuo +昨zuo +撮*zuo +凿*zuo +搓*zuo +琢*zuo +佐zuo +柞zuo +阼zuo +唑zuo +嘬zuo +怍zuo +胙zuo +祚zuo +笮*zuo +作案zuoan +作弊zuobi +左边zuobian +坐标zuobiao +做到zuodao +作法zuofa +做法zuofa +作废zuofei +作风zuofeng +做工zuogong +作怪zuoguai +做好zuohao +作家zuojia +作客zuoke +作乐zuole +作乱zuoluan +坐落zuoluo +左派zuopai +作品zuopin +左倾zuoqing +做人zuoren +昨日zuori +做事zuoshi +坐视zuoshi +座谈zuotan +昨天zuotian +昨晚zuowan +作为zuowei +座位zuowei +坐位zuowei +作文zuowen +作物zuowu +作业zuoye +昨夜zuoye +作用zuoyong +左右zuoyou +作战zuozhan +作者zuozhe +作证zuozheng +作主zuozhu +做主zuozhu +做作zuozuo +足球zuqiu +阻塞zuse +祖师zushi +祖先zuxian +组长zuzhang +组织zuzhi +阻止zuzhi +祖宗zuzong +中外合资zwhz +责无旁贷zwpd +中宣部zxb +自行车zxc +自下而上zxes +忠心耿耿zxgg +展销会zxh +照相机zxj +争先恐后zxkh +中学生zxs +主席团zxt +中小学zxx +自信心zxx +中央办公厅zybt +着眼点zyd +专业对口zydk +中央电视台zydt +中央各部委zygw +专业化zyh +专业户zyh +中央军委zyjw +座右铭zym +中央全会zyqh +中央人民广播电台zyrt +主要人员zyry +专业人员zyry +中央书记处zysc +中央委员会zywh +中央委员zywy +重要性zyx +主要原因zyyy +中央政治局zyzj +专业知识zyzs +中组部zzb +组织部zzb +政治部zzb +政治处zzc +转折点zzd +置之度外zzdw +政治局zzj +自治区zzq +蒸蒸日上zzrs +组织上zzs +郑州市zzs +组织性zzx +自尊心zzx +赵紫阳zzy +总政治部zzzb +喷码pm +优喷yp +科技kj +比洋by +公司gs +有限公司yxgz +股份公司gfgs +企业qy +标准bz +喷码机pmj +电线dx +电缆dl +电线电缆dxdl +电力电缆dldl +绝缘jy +绝缘层jyc +导体dt +导线dx +电力dl +通信tx +控制电缆kzdl +补偿电缆bcdl +屏蔽电缆pbdl +高温电缆gwdl +计算机电缆jsjdl +信号电缆xhdl +同轴电缆tzdl +耐火电缆nhdl +船用电缆cydl +铝合金电缆lhjdl +单股dg +多股dg +连接lj +电路dl +电器dq +型号xh +铜t +铝l +铅包qb +铝包qb +聚氯乙烯jlyx +电磁线dcx +北京市bj +东城区dcq +西城区xcq +崇文区cwq +宣武区xwq +朝阳区zyq +海淀区hdq +丰台区ftq +房山区fsq +通州区tzq +顺义区syq +昌平区cpq +大兴区txq +怀柔区hrq +平谷区pgq +门头沟区mtgq +石景山区sjsq +天津市tjs +和平区hpq +河东区hdq +河西区hxq +南开区nkq +河北区hbq +红桥区hqq +塘沽区tgq +汉沽区hgq +大港区tgq +东丽区dlq +西青区xqq +北辰区bcq +津南区jnq +武清区wqq +宝坻区bdq +河北省hbs +辛集市xjs +藁城市gcs +晋州市jzs +新乐市xls +鹿泉市lqs +唐山市tss +遵化市zhs +安市as +邯郸市hds +武安市was +邢台市xts +南宫市ngs +沙河市shs +保定市bds +涿州市zzs +定州市dzs +安国市ags +承德市cds +沧州市czs +泊头市bts +任丘市rqs +黄骅市hhs +河间市hjs +廊坊市lfs +霸州市bzs +三河市shs +衡水市hss +冀州市jzs +深州市szs +石家庄市sjzs +张家口市zjks +高碑店市gbds +秦皇岛市qhds +山西省sxs +太原市tys +古交市gjs +大同市dts +阳泉市yqs +长治市czs +潞城市lcs +晋城市jcs +高平市gps +朔州市szs +晋中市jzs +介休市jxs +运城市ycs +河津市hjs +永济市sjs +忻州市xzs +原平市yps +临汾市lfs +侯马市hms +霍州市hzs +吕梁市lls +孝义市xys +汾阳市fys +内蒙古自治区nmg +包头市bts +乌海市whs +赤峰市cfs +通辽市tls +根河市ghs +丰镇市fzs +辽宁省LNS +沈阳市sys +新民市xms +大连市dls +庄河市zhs +鞍山市ass +海城市hcs +抚顺市fss +本溪市bxs +丹东市dds +东港市dgs +凤城市fcs +锦州市jzs +凌海市lhs +北宁市bns +营口市yks +盖州市gzs +阜新市fxs +辽阳市lys +灯塔市dts +盘锦市pjs +铁岭市tls +开原市kys +朝阳市zys +凌源市lys +北票市bps +兴城市xcs +大石桥市dsqs +瓦房店市wfds +普兰店市plds +调兵山市dbss +葫芦岛市hlds +吉林省jls +长春市ccs +九台市jts +榆树市yss +德惠市dhs +吉林市jls +舒兰市sls +桦甸市hds +蛟河市jhs +磐石市pss +四平市sps +双辽市sls +辽源市lys +通化市ths +集安市jas +白山市bss +临江市ljs +松原市sys +白城市bcs +大安市das +洮南市tns +延吉市yjs +图们市tms +敦化市ghs +龙井市ljs +珲春市hcs +和龙市hls +公主岭市gzls +梅河口市mhks +黑龙江省hljs +阿城市acs +尚志市szs +双城市scs +五常市wcs +讷河市nhs +鹤岗市hgs +鸡西市jxs +密山市mss +虎林市hls +大庆市dqs +伊春市ycs +铁力市tls +宁安市nas +海林市hls +穆棱市mls +同江市tjs +富锦市fjs +黑河市hhs +北安市bas +绥化市shs +安达市ads +肇东市zds +海伦市hls +七台河市qths +双鸭山市syss +牡丹江市mdjs +佳木斯市jmss +绥芬河市sfhs +哈尔滨市hebs +齐齐哈尔市qqhes +五大连池市wdlcs +上海市shs +黄浦区hpq +卢湾区lwq +徐汇区xhq +长宁区cnq +静安区jaq +普陀区ptq +闸北区zbq +虹口区hkq +杨浦区ypq +宝山区bsq +闵行区mxq +嘉定区jdq +松江区sjq +金山区jsq +青浦区qpq +南汇区nhq +奉贤区fxq +崇明县浦东新区cmxpdxq +江苏省jss +南京市njs +无锡市wxs +江阴市jys +宜兴市yxs +徐州市xzs +邳州市pzs +新沂市xys +常州市czs +金坛市jts +溧阳市lys +苏州市szs +常熟市css +太仓市dcs +昆山市hss +吴江市wjs +南通市nns +如皋市rgs +通州市tzs +海门市hms +启东市qds +淮安市has +盐城市ycs +东台市dts +大丰市dfs +扬州市yzs +高邮市gys +江都市jds +仪征市yzs +镇江市zjs +丹阳市dys +扬中市yzs +句容市jrs +泰州市dzs +泰兴市dxs +姜堰市jys +靖江市jjs +兴化市xhs +宿迁市sqs +连云港市lygs +张家港市zjgs +浙江省zjs +杭州市hzs +建德市jds +富阳市fys +临安市las +宁波市nbx +余姚市yys +慈溪市cxs +奉化市fhs +温州市wzs +瑞安市ras +乐清市lqs +嘉兴市jxs +海宁市hns +平湖市phs +桐乡市txs +湖州市hzs +绍兴市sxs +诸暨市zjs +上虞市sys +嵊州市szs +金华市jhs +兰溪市lxs +义乌市yws +东阳市dys +永康市yks +衢州市qzs +江山市jss +舟山市zss +台州市tzs +临海市lhs +丽水市lss +龙泉市lqs +安徽省ahs +合肥市hfs +芜湖市whs +蚌埠市bbs +淮南市hns +淮北市hbs +铜陵市tls +安庆市aqs +桐城市tcs +黄山市hss +滁州市czs +天长市dcs +明光市mgs +阜阳市fys +界首市jss +宿州市szs +巢湖市chs +六安市las +亳州市hzs +池州市czs +宣城市ycs +宁国市ngs +马鞍山市mass +福建省fjs +福州市fjs +福清市fqs +长乐市cls +厦门市xms +莆田市pts +三明市sms +永安市yas +泉州市qzs +石狮市sss +晋江市jjs +南安市nas +漳州市zzs +龙海市lhs +南平市nps +建瓯市jos +邵武市sws +建阳市jys +龙岩市lys +漳平市zps +宁德市nds +福安市fas +福鼎市fds +武夷山市wyss +江西省jxs +南昌市ncs +乐平市lps +萍乡市pxs +九江市jjs +瑞昌市rcs +新余市xys +鹰潭市yts +贵溪市gxs +赣州市gzs +瑞金市rjs +南康市nks +吉安市jas +宜春市ycs +丰城市fcs +樟树市zss +高安市gas +抚州市fzs +上饶市srs +德兴市dxs +井冈山市jgss +景德镇市jdzs +山东省sds +济南市jns +章丘市zqs +青岛市qds +胶南市jns +胶州市jzs +平度市pds +莱西市lxs +即墨市jms +淄博市zbs +枣庄市zzs +滕州市tzs +烟台市yts +龙口市lks +莱阳市lys +莱州市lzs +招远市zys +蓬莱市pls +栖霞市qxs +海阳市hys +潍坊市wfs +青州市qzs +诸城市zcs +寿光市sgs +安丘市aqs +高密市gms +昌邑市cys +济宁市jns +曲阜市qfs +兖州市yzs +邹城市zcs +泰安市tas +新泰市xts +肥城市fcs +威海市whs +乳山市rss +文登市wds +荣成市rcs +日照市rzs +莱芜市lws +临沂市lys +德州市dzs +乐陵市lls +禹城市ycs +聊城市lcs +临清市lqs +滨州市bzs +菏泽市hzs +河南省hns +郑州市zzs +巩义市gys +新郑市xzs +新密市xms +登封市dfs +荥阳市xys +开封市kfs +洛阳市lys +偃师市yss +汝州市rzs +舞钢市wgs +安阳市ays +林州市lzs +新乡市xxs +卫辉市whs +辉县市hxs +焦作市jzs +沁阳市qys +孟州市mzs +濮阳市pys +许昌市xcs +禹州市yzs +长葛市cgs +漯河市lhs +义马市yms +灵宝市lbs +南阳市nys +邓州市dzs +商丘市sqs +永城市ycs +信阳市xys +周口市zks +项城市dcs +济源市jys +三门峡市smxs +平顶山市pdss +驻马店市zmds +湖北省hbs +武汉市whs +黄石市hss +大冶市dys +十堰市sys +荆州市jzs +洪湖市hhs +石首市sss +松滋市szs +宜昌市ycs +宜都市yds +当阳市dys +枝江市jjs +襄樊市xfs +枣阳市zys +宜城市ycs +鄂州市ezs +荆门市jms +钟祥市zxs +孝感市xgs +应城市ycs +安陆市als +汉川市hcs +黄冈市hgs +麻城市mcs +武穴市wxs +咸宁市xns +赤壁市cbs +随州市szs +广水市gss +仙桃市xts +天门市tms +潜江市qjs +恩施市ess +利川市lcs +丹江口市djks +老河口市lhks +神农架林区snjlq +湖南省hns +长沙市css +浏阳市lys +株洲市zzs +醴陵市lls +湘潭市xts +湘乡市xxs +韶山市sss +衡阳市hys +耒阳市lys +常宁市cns +邵阳市sys +武冈市wgs +岳阳市yys +临湘市lxs +汨罗市mls +常德市cds +津市市jss +益阳市yys +沅江市yjs +郴州市czs +资兴市zxs +永州市yzs +怀化市hhs +洪江市hjs +娄底市lds +涟源市lys +吉首市jss +冷水江市lsjs +张家界市zjjs +广东省gds +广州市gzs +从化市chs +增城市zcs +深圳市szs +珠海市zhs +汕头市sts +韶关市sgs +乐昌市lcs +南雄市nxs +佛山市fss +江门市jms +台山市tss +开平市kps +鹤山市hss +恩平市eps +湛江市zjs +廉江市ljs +雷州市lzs +吴川市wcs +茂名市mms +西昌市xcs +峨眉山市emss +都江堰市djys +攀枝花市pzhs +贵州省gzs +贵阳市gys +清镇市qzs +遵义市zys +赤水市css +仁怀市rhs +安顺市ass +毕节市bjs +兴义市xys +凯里市kls +都匀市dys +福泉市fqs +六盘水市lpss +六枝特区lztq +万山特区wstq +云南省yns +昆明市kms +安宁市ans +曲靖市qjs +宣威市xws +玉溪市yxs +保山市bss +昭通市zts +丽江市ljs +思茅市sms +临沧市lqs +个旧市gjs +开远市kys +景洪市jhs +楚雄市cxs +大理市dls +潞西市lxs +瑞丽市rls +西藏自治区xzzzq +拉萨市lss +陕西省sxs +西安市xas +铜川市tcs +宝鸡市bjs +咸阳市xys +渭南市wns +韩城市hcs +华阴市hys +延安市yas +汉中市azs +榆林市yls +安康市aks +商洛市sls +甘肃省gss +兰州市lzs +金昌市jcs +白银市bys +天水市tss +武威市wws +张掖市zys +平凉市pls +酒泉市jqs +玉门市yms +敦煌市dhs +庆阳市qys +定西市dxs +陇南市lns +临夏市lxs +合作市hzs +嘉峪关市jygs +青海省qhs +西宁市xns +德令哈市dlhs +格尔木市gems +宁夏回族自治区nxhzzzq +银川市ycs +灵武市lws +吴忠市wzs +固原市gys +中卫市zws +石嘴山市szss +青铜峡市qtxs +新疆维吾尔自治区xjwwezzq +喀什市kss +昌吉市cjs +阜康市fks +米泉市mqs +博乐市bls +伊宁市yns +奎屯市kts +塔城市tcs +乌苏市wss +石河子市shzs +阿拉尔市ales +五家渠市wjqs +吐鲁番市tlfs +阿克苏市akss +阿图什市atss +库尔勒市kels +阿勒泰市alts +乌鲁木齐市wlmqs +克拉玛依市klmys +图木舒克市tmsks +香港特别行政区 +中西区zxq +东区dq +观塘区gtq +南区nq +湾仔区wzq +离岛区ldq +葵青区kqq +北区bq +西贡区xgq +沙田区stq +屯门区tmq +大埔区dpq +荃湾区qwq +元朗区ylq +九龙城区jtcq +油尖旺区yjwq +深水埗区ssbq +黄大仙区hdxq +台湾省tws +台北市tbs +高雄市gxs +基隆市jls +台中市tzs +台南市tns +新竹市xzs +嘉义市jys +板桥市bqs +宜兰市yls +竹北市zbs +桃园市tys +苗栗市mls +丰原市fys +彰化市zhs +南投市nts +太保市tbs +斗六市dls +新营市xys +凤山市fss +屏东市pds +台东市tds +花莲市hls +马公市mgs diff --git a/WINPY_utf8.txt.backup b/WINPY_utf8.txt.backup new file mode 100644 index 0000000..70fda10 --- /dev/null +++ b/WINPY_utf8.txt.backup @@ -0,0 +1,21660 @@ +安a +按a +爱a +阿a +暗a +啊a +埃a +碍a +凹a +奥a +岸a +矮a +案a +俺a +挨a +唉a +昂a +氨a +胺a +哎a +吖a +嗄a +腌a +锕a +按步就班abjb +阿飞afei +按规定agd +爱国主义agzy +安徽省ahs +爱ai +埃ai +碍ai +矮ai +挨ai +唉ai +哎ai +哀ai +皑ai +癌ai +蔼ai +艾ai +隘ai +呆*ai +捱ai +嗳ai +嗌ai +嫒ai +瑷ai +暧ai +砹ai +锿ai +霭ai +爱戴aidai +哀悼aidao +爱抚aifu +爱国aiguo +爱好aihao +爱护aihu +挨近aijin +暧昧aimei +爱幕aimu +爱情aiqing +哀求aiqiu +爱人airen +爱惜aixi +哀乐aiyue +癌症aizheng +按计划ajh +爱科学akx +阿拉伯alb +爱劳动ald +按劳分配alfp +按劳取酬alqc +安an +按an +广*an +厂*an +暗an +岸an +案an +俺an +氨an +胺an +鞍an +谙an +埯an +揞an +犴an +庵an +桉an +铵an +鹌an +黯an +暗暗anan +岸边anbian +暗藏ancang +安插ancha +暗淡andan +安定anding +安放anfang +昂ang +肮ang +盎ang +昂贵anggui +昂然angran +盎然angran +昂首angshou +昂扬angyang +肮脏angzang +暗害anhai +安徽anhui +案件anjian +暗箭anjian +安静anjing +鞍马anma +安谧anmi +按摩anmo +安宁anning +安排anpai +按期anqi +案情anqing +安全anquan +岸然anran +暗杀ansha +暗伤anshang +按时anshi +暗示anshi +暗室anshi +暗算ansuan +安慰anwei +安稳anwen +暗想anxiang +安详anxiang +案由anyou +按照anzhao +安置anzhi +暗中anzhong +安装anzhuang +凹ao +奥ao +敖ao +熬ao +翱ao +袄ao +傲ao +懊ao +澳ao +嚣*ao +坳ao +拗ao +嗷ao +岙ao +廒ao +遨ao +媪ao +骜ao +獒ao +聱ao +螯ao +鏊ao +鳌ao +鏖ao +懊悔aohui +傲慢aoman +奥秘aomi +奥秒aomiao +奥妙aomiao +懊丧aosang +翱翔aoxiang +安全生产aqsc +爱人民arm +按时完成aswc +按需分配axfp +奥运会ayh +阿姨ayi +爱祖国azg +不b +部b +本b +表b +把b +变b +比b +并b +别b +百b +报b +保b +病b +北b +被b +步b +边b +八b +办b +布b +把ba +八ba +吧ba +巴ba +拔ba +霸ba +罢ba +爸ba +坝ba +芭ba +捌ba +扒ba +叭ba +笆ba +疤ba +跋ba +靶ba +耙ba +茇ba +菝ba +岜ba +灞ba +钯ba +粑ba +鲅ba +魃ba +爸爸baba +把柄babing +八成bacheng +把持bachi +霸道badao +八方bafang +拔高bagao +罢工bagong +八股bagu +八卦bagua +把关baguan +罢官baguan +百bai +白bai +败bai +摆bai +伯*bai +柏bai +佰bai +拜bai +稗bai +捭bai +掰bai +百般baiban +百倍baibei +败北baibei +摆布baibu +白痴baichi +摆动baidong +摆渡baidu +拜访baifang +百分baifen +白宫baigong +白话baihua +败坏baihuai +百货baihuo +拜见baijian +败将baijiang +白金baijin +败局baiju +败类bailei +败露bailu +拜年bainian +摆弄bainong +白色baise +摆设baishe +白天baitian +摆脱baituo +拜托baituo +百万baiwan +百姓baixing +败仗baizhang +拔尖bajian +巴结bajie +八届bajie +罢了bale +巴黎bali +笆篱bali +罢免bamian +办ban +半ban +板ban +班ban +般ban +版ban +拌ban +搬ban +斑ban +扳ban +伴ban +颁ban +扮ban +瓣ban +绊ban +阪ban +坂ban +钣ban +瘢ban +癍ban +舨ban +办案banan +版本banben +半边banbian +颁布banbu +办厂banchang +班车banche +班次banci +半岛bandao +半点bandian +颁发banfa +办法banfa +班房banfang +帮bang +棒bang +邦bang +榜bang +梆bang +膀bang +绑bang +磅bang +蚌bang +镑bang +傍bang +谤bang +蒡bang +浜bang +帮会banghui +绑架bangjia +邦交bangjiao +邦联banglian +帮忙bangmang +办公bangong +帮派bangpai +帮腔bangqiang +帮手bangshou +傍晚bangwan +帮凶bangxiong +榜样bangyang +帮助bangzhu +版画banhua +班级banji +班机banji +半截banjie +半径banjing +办理banli +伴侣banlu +版面banmian +半年bannian +搬弄bannong +般配banpei +版权banquan +办事banshi +板书banshu +半月banyue +搬运banyun +班长banzhang +班子banzi +伴奏banzou +班组banzu +报bao +保bao +包bao +剥bao +薄bao +胞bao +暴bao +宝bao +饱bao +抱bao +爆bao +炮*bao +堡bao +刨*bao +苞bao +褒bao +雹bao +豹bao +鲍bao +曝*bao +瀑*bao +葆bao +孢bao +煲bao +鸨bao +褓bao +趵bao +龅bao +保安baoan +包办baoban +宝贝baobei +包庇baobi +褒庇baobi +褒贬baobian +报表baobiao +保镖baobiao +包藏baocang +包产baochan +保持baochi +报仇baochou +报酬baochou +保存baocun +报答baoda +报到baodao +报道baodao +报导baodao +暴发baofa +爆发baofa +报废baofei +暴风baofeng +报复baofu +抱负baofu +包袱baofu +报告baogao +包工baogong +保管baoguan +曝光baoguang +宝贵baogui +包含baohan +饱含baohan +包涵baohan +饱和baohe +保护baohu +报价baojia +保健baojian +报警baojing +暴君baojun +报刊baokan +宝库baoku +包括baokuo +包揽baolan +堡垒baolei +暴利baoli +暴力baoli +保留baoliu +暴露baolu +曝露baolu +暴乱baoluan +饱满baoman +保密baomi +报名baoming +报幕baomu +保姆baomu +爆破baopo +抱歉baoqian +报社baoshe +报失baoshi +宝石baoshi +保守baoshou +宝塔baota +报童baotong +报头baotou +暴徒baotu +保卫baowei +包围baowei +保险baoxian +报销baoxiao +包销baoxiao +暴行baoxing +保养baoyang +报应baoying +保佑baoyou +暴雨baoyu +抱怨baoyuan +包扎baoza +宝藏baozang +爆炸baozha +保障baozhang +保证baozheng +报纸baozhi +保重baozhong +爆竹baozhu +包装baozhuang +霸权baquan +跋涉bashe +把守bashou +扒手bashou +霸王bawang +把握bawo +把戏baxi +巴西baxi +罢休baxiu +八月bayue +霸占bazhan +巴不得bbd +并不是bbs +半边天bbt +本报讯bbx +北冰洋bby +不败之地bbzd +不白之冤bbzy +半成品bcp +不得不bdb +背道而驰bdec +标点符号bdfh +不断发展bdfz +不得了bdl +背地里bdl +不动声色bdss +半导体bdt +本单位bdw +北bei +被bei +倍bei +备bei +背bei +辈bei +贝bei +杯bei +卑bei +臂*bei +悲bei +碑bei +钡bei +狈bei +惫bei +焙bei +孛bei +陂bei +邶bei +埤bei +萆bei +蓓bei +呗bei +悖bei +碚bei +鹎bei +褙bei +鐾bei +鞴bei +悲哀beiai +备案beian +背包beibao +卑鄙beibi +北边beibian +北部beibu +被捕beibu +悲惨beican +被动beidong +北方beifang +备份beifen +悲愤beifen +被告beigao +悲观beiguan +被害beihai +背后beihou +悲欢beihuan +北极beiji +备件beijian +卑贱beijian +北京beijing +背景beijing +悲剧beiju +碑刻beike +备课beike +背离beili +卑劣beilie +北面beimian +北能beineng +悖逆beini +背叛beipan +被迫beipo +背弃beiqi +悲伤beishang +北宋beisong +背诵beisong +被套beitao +悲痛beitong +北纬beiwei +卑微beiwei +碑文beiwen +背心beixin +背影beiying +备用beiyong +备注beizhu +本ben +奔ben +苯ben +笨ben +夯*ben +畚ben +坌ben +贲ben +锛ben +本报benbao +奔波benbo +本部benbu +本厂benchang +奔驰benchi +本地bendi +奔放benfang +泵beng +崩beng +蚌*beng +绷beng +甭beng +蹦beng +迸beng +嘣beng +甏beng +绷带bengdai +迸发bengfa +崩溃bengkui +崩裂benglie +迸裂benglie +崩塌bengta +本国benguo +本届benjie +本科benke +本来benlai +本领benling +奔流benliu +奔命benming +本能benneng +本年bennian +本钱benqian +本人benren +本色bense +本身benshen +本事benshi +本市benshi +奔腾benteng +本文benwen +本校benxiao +本性benxing +本月benyue +本着benzhe +本质benzhi +本职benzhi +笨重benzhong +笨拙benzhuo +奔走benzou +百分比bfb +半封建bfj +百废具兴bfjx +暴风雪bfx +不管不顾bgbg +不甘落后bglh +办公室bgs +办公厅bgt +报告文学bgwx +闭关自守bgzs +不寒而栗bhel +百花齐放bhqf +百货商店bhsd +比bi +必bi +避bi +闭bi +辟bi +笔bi +壁bi +臂bi +毕bi +彼bi +逼bi +币bi +鼻bi +蔽bi +秘*bi +鄙bi +碧bi +蓖bi +毙bi +毖bi +庇bi +痹bi +敝bi +弊bi +陛bi +拂*bi +泌*bi +匕bi +俾bi +埤*bi +芘*bi +荜bi +荸bi +萆*bi +薜bi +吡bi +哔bi +狴bi +庳bi +愎bi +滗bi +濞bi +弼bi +妣bi +婢bi +嬖bi +璧bi +贲*bi +睥*bi +畀bi +铋bi +秕bi +裨bi +筚bi +箅bi +篦bi +舭bi +襞bi +跸bi +髀bi +变bian +边bian +便bian +编bian +遍bian +辩bian +扁bian +辨bian +鞭bian +贬bian +卞bian +辫bian +匾bian +弁bian +苄bian +忭bian +汴bian +缏bian +飚bian +煸bian +砭bian +碥bian +窆bian +褊bian +蝙bian +笾bian +鳊bian +彼岸bian +辨别bianbie +辩驳bianbo +鞭策biance +变成biancheng +编程biancheng +鞭笞bianchi +边陲bianchui +便当biandang +编导biandao +遍地biandi +贬低biandi +变动biandong +匾额biane +边防bianfang +变革biange +变更biangeng +变卦biangua +边关bianguan +便函bianhan +编号bianhao +辩护bianhu +变化bianhua +变换bianhuan +变幻bianhuan +边际bianji +编辑bianji +边疆bianjiang +辩解bianjie +边界bianjie +边境bianjing +便利bianli +变量bianliang +辩论bianlun +编码bianma +辩明bianming +编排bianpai +鞭炮bianpao +变迁bianqian +辨认bianren +鞭挞bianta +变态biantai +变天biantian +便条biantiao +变为bianwei +辨析bianxi +变相bianxiang +编写bianxie +变心bianxin +边沿bianyan +变样bianyang +贬义bianyi +便衣bianyi +编译bianyi +便于bianyu +边远bianyuan +边缘bianyuan +编造bianzao +编者bianzhe +辩证bianzheng +变质bianzhi +编制bianzhi +编织bianzhi +贬值bianzhi +编撰bianzhuan +辫子bianzi +编组bianzu +编纂bianzuan +表biao +标biao +彪biao +膘biao +勺*biao +婊biao +骠biao +杓biao +飑biao +飙biao +镖biao +镳biao +瘭biao +裱biao +鳔biao +髟biao +表白biaobai +标榜biaobang +标本biaoben +标兵biaobing +表层biaoceng +表达biaoda +标点biaodian +表格biaoge +标号biaohao +标记biaoji +标价biaojia +表决biaojue +标量biaoliang +表露biaolu +表面biaomian +表明biaoming +标明biaoming +标签biaoqian +表情biaoqing +表示biaoshi +表述biaoshu +表态biaotai +标题biaoti +表现biaoxian +表演biaoyan +表扬biaoyang +表语biaoyu +标语biaoyu +表彰biaozhang +标志biaozhi +标致biaozhi +标准biaozhun +臂膀bibang +必备bibei +弊病bibing +彼此bici +笔调bidiao +必定biding +笔端biduan +弊端biduan +别bie +鳖bie +憋bie +瘪bie +蹩bie +别称biecheng +别处biechu +别的biede +别动biedong +别管bieguan +别后biehou +憋脚biejiao +别看biekan +别离bieli +别名bieming +别扭bieniu +憋气bieqi +别人bieren +别墅bieshu +别提bieti +别样bieyang +别致biezhi +笔法bifa +比反bifan +比方bifang +逼供bigong +闭关biguan +庇护bihu +笔画bihua +避讳bihui +笔记biji +笔迹biji +比价bijia +必将bijiang +比较bijiao +逼近bijin +毕竟bijing +避开bikai +碧空bikong +比来bilai +碧蓝bilan +壁垒bilei +比例bili +碧绿bilu +避免bimian +笔名biming +闭幕bimu +宾bin +彬bin +斌bin +濒bin +滨bin +摈bin +傧bin +豳bin +缤bin +玢bin +槟bin +殡bin +膑bin +镔bin +髌bin +鬓bin +避难binan +彬彬binbin +鬓发binfa +缤纷binfen +并bing +病bing +兵bing +柄bing +冰bing +丙bing +饼bing +秉bing +炳bing +屏*bing +禀bing +邴bing +摒bing +槟*bing +冰雹bingbao +病变bingbian +兵变bingbian +并不bingbu +冰川bingchuan +并存bingcun +冰冻bingdong +病毒bingdu +并发bingfa +并非bingfei +禀赋bingfu +秉公binggong +病故binggu +病假bingjia +并肩bingjian +并进bingjin +并举bingju +病菌bingjun +冰冷bingleng +并力bingli +兵力bingli +并联binglian +并列binglie +兵马bingma +病魔bingmo +兵器bingqi +并且bingqie +病情bingqing +兵权bingquan +病人bingren +冰山bingshan +冰霜bingshuang +病态bingtai +兵团bingtuan +宾馆binguan +病危bingwei +并行bingxing +秉性bingxing +禀性bingxing +兵役bingyi +病因bingyin +兵营bingying +兵员bingyuan +病灶bingzao +兵站bingzhan +兵种bingzhong +并重bingzhong +比拟bini +濒临binlin +摈弃binqi +宾语binyu +逼迫bipo +必然biran +比如biru +比赛bisai +闭塞bise +毕生bisheng +必胜bisheng +比试bishi +笔试bishi +鄙视bishi +匕首bishou +避暑bishu +笔挺biting +比武biwu +避嫌bixian +必须bixu +必需bixu +碧血bixue +必要biyao +毕业biye +裨益biyi +鄙夷biyi +比喻biyu +笔者bizhe +逼真bizhen +比值bizhi +笔直bizhi +比重bizhong +鼻祖bizu +编辑部bjb +并驾齐驱bjqq +北京市bjs +不拘小节bjxj +八进制bjz +百家争呜bjzw +不可不bkb +不可否认bkfr +不可思议bksy +报刊杂志bkzz +拨乱反正blfz +博览会blh +不了了之bllz +芭蕾舞blw +不谋而合bmeh +表面化bmh +八面玲珑bmll +不能不bnb +百年大计bndj +苯鸟先飞bnxf +波bo +播bo +剥*bo +伯bo +拨bo +薄*bo +博bo +勃bo +驳bo +玻bo +泊bo +柏*bo +卜*bo +菠bo +钵bo +搏bo +铂bo +箔bo +帛bo +舶bo +脖bo +膊bo +渤bo +魄*bo +孛*bo +亳bo +啵bo +饽bo +檗bo +掰*bo +擘bo +礴bo +钹bo +鹁bo +簸bo +趵*bo +跛bo +踣bo +博爱boai +伯伯bobo +勃勃bobo +驳斥bochi +博大boda +驳倒bodao +博得bode +波动bodong +搏斗bodou +剥夺boduo +博古bogu +渤海bohai +驳回bohui +搏击boji +拨款bokuan +博览bolan +波浪bolang +玻璃boli +伯母bomu +勃然boran +薄弱boruo +博士boshi +播送bosong +波涛botao +博物bowu +博学boxue +剥削boxue +播音boyin +波折bozhe +播种bozhong +不求甚解bqsj +不切实际bqsj +霸权主义bqzy +薄弱环节brhj +必然性brx +不三不四bsbs +办事处bsc +不胜举bsj +本世纪bsj +办事员bsy +饱食终日bszr +半途而废btef +不同凡响btfx +遍体鳞伤btls +不bu +部bu +步bu +布bu +补bu +捕bu +埔*bu +卜bu +堡*bu +哺bu +埠bu +簿bu +怖bu +卟bu +逋bu +瓿bu +晡bu +钚bu +钸bu +醭bu +不安buan +不比bubi +不必bubi +不变bubian +不便bubian +步兵bubing +步步bubu +不曾buceng +补偿buchang +不啻buchi +补充buchong +不错bucuo +不大buda +不待budai +不但budan +不当budang +不得bude +不等budeng +步调budiao +不动budong +不断buduan +不对budui +部队budui +不法bufa +补发bufa +步伐bufa +不凡bufan +不妨bufang +不分bufen +部分bufen +不服bufu +不符bufu +不该bugai +不敢bugan +不甘bugan +布告bugao +不够bugou +不顾bugu +不管buguan +不过buguo +不会buhui +补给buji +部件bujian +不借bujie +不尽bujin +不仅bujin +不禁bujin +布景bujing +不久bujiu +补救bujiu +布局buju +不堪bukan +不可buke +不快bukuai +不愧bukui +不理buli +不利buli +不良buliang +不料buliao +步履bulu +不论bulun +部落buluo +不满buman +部门bumen +不免bumian +不能buneng +不怕bupa +补品bupin +不平buping +步枪buqiang +不屈buqu +不然buran +不如buru +不少bushao +不是bushi +不识bushi +部首bushou +部属bushu +部署bushu +补贴butie +不同butong +不妥butuo +部位buwei +部委buwei +不问buwen +不惜buxi +补习buxi +部下buxia +不行buxing +不幸buxing +步行buxing +不朽buxiu +不许buxu +哺养buyang +不要buyao +不宜buyi +不用buyong +哺育buyu +不在buzai +部长buzhang +不振buzhen +不只buzhi +不止buzhi +不知buzhi +不致buzhi +布置buzhi +步骤buzhou +补助buzhu +捕捉buzhuo +步子buzi +不足buzu +博物馆bwg +保卫祖国bwzg +标新立异bxly +必需品bxp +背信弃义bxqy +不相上下bxsx +不学无术bxws +不约而同byet +不言而喻byey +不要紧byj +边缘科学bykx +半夜三更bysg +别有天地bytd +必要性byx +不由自主byzz +编者按bza +不着边际bzbj +百折不挠bzbn +辩证法bzf +标准化bzh +标准件bzj +不知所措bzsc +不择手段bzsd +不至于bzy +标志着bzz +不正之风bzzf +产c +成c +出c +长c +从c +此c +常c +处c +车c +场c +传c +采c +层c +厂c +才c +次c +虫c +除c +查c +差c +擦ca +拆*ca +嚓ca +礤ca +采cai +才cai +材cai +菜cai +财cai +裁cai +彩cai +猜cai +睬cai +踩cai +蔡cai +财宝caibao +猜测caice +财产caichan +菜单caidan +彩电caidian +裁定caiding +采伐caifa +采访caifang +财富caifu +才干caigan +采购caigou +才华caihua +采集caiji +裁减caijian +财经caijing +采掘caijue +裁决caijue +采矿caikuang +财力caili +材料cailiao +财贸caimao +采纳caina +才能caineng +彩排caipai +裁判caipan +彩票caipiao +才气caiqi +采取caiqu +财权caiquan +猜拳caiquan +彩色caise +才识caishi +财团caituan +财物caiwu +财务caiwu +采撷caixie +才学caixue +菜肴caiyao +猜疑caiyi +采用caiyong +财源caiyuan +财政caizheng +才智caizhi +财主caizhu +才子caizi +参can +残can +蚕can +灿can +餐can +惭can +惨can +孱can +骖can +璨can +粲can +黪can +惨案canan +惨白canbai +残暴canbao +惨怛canda +残废canfei +藏cang +仓cang +苍cang +舱cang +沧cang +苍白cangbai +仓促cangcu +仓库cangku +苍老canglao +苍茫cangmang +藏匿cangni +苍穹cangqiong +沧桑cangsang +苍天cangtian +参观canguan +残骸canhai +残疾canji +参加canjia +参见canjian +残局canju +惨剧canju +参军canjun +参看cankan +参考cankao +残酷canku +惭愧cankui +灿烂canlan +参谋canmou +残缺canque +残忍canren +孱弱canruo +残杀cansha +残生cansheng +蚕食canshi +参数canshu +惨痛cantong +参与canyu +残余canyu +残月canyue +参阅canyue +参赞canzan +惨遭canzao +参战canzhan +参照canzhao +参政canzheng +惨重canzhong +草cao +槽cao +操cao +糙cao +曹cao +嘈cao +漕cao +螬cao +艚cao +草案caoan +草稿caogao +槽糕caogao +操劳caolao +操练caolian +草率caolu +草木caomu +草拟caoni +草签caoqian +操心caoxin +草原caoyuan +嘈杂caoza +操纵caozong +操作caozuo +差不多cbd +成本核算cbhs +出版社cbs +层出不穷ccbq +从长计议ccjy +存储器ccq +长春市ccs +成都市cds +测ce +策ce +侧ce +册ce +厕ce +恻ce +测定ceding +策动cedong +策反cefan +策划cehua +测量celiang +策略celue +侧面cemian +参*cen +岑cen +涔cen +涔涔cencen +层ceng +曾*ceng +蹭ceng +层层cengceng +层次cengci +曾经cengjing +测试ceshi +厕所cesuo +测验ceyan +侧重cezhong +出发点cfd +充分发挥cffh +唱高调cgd +从古到今cgdj +查cha +差cha +插cha +察cha +茶cha +叉cha +茬cha +碴cha +搽cha +岔cha +诧cha +刹*cha +喳*cha +嚓*cha +猹cha +馇cha +汊cha +姹cha +杈cha +楂cha +槎cha +檫cha +锸cha +镲cha +衩cha +查办chaban +差别chabie +差错chacuo +差点chadian +查对chadui +差额chae +查访chafang +察访chafang +查封chafeng +查获chahuo +差*chai +柴chai +拆chai +豺chai +侪chai +钗chai +瘥chai +虿chai +拆穿chaichuan +豺狼chailang +拆散chaisan +差使chaishi +拆卸chaixie +柴油chaiyou +差价chajia +差距chaju +察觉chajue +查看chakan +察看chakan +查考chakao +查明chaming +产chan +单*chan +铲chan +阐chan +搀chan +掺chan +蝉chan +馋chan +谗chan +缠chan +颤chan +冁chan +谄chan +蒇chan +廛chan +忏chan +潺chan +澶chan +孱*chan +羼chan +婵chan +骣chan +觇chan +禅chan +镡chan +蟾chan +躔chan +铲除chanchu +产地chandi +阐发chanfa +搀扶chanfu +长chang +常chang +场chang +厂chang +唱chang +肠chang +昌chang +倡chang +偿chang +畅chang +猖chang +尝chang +敞chang +裳*chang +倘*chang +伥chang +鬯chang +苌chang +菖chang +徜chang +怅chang +惝chang +阊chang +娼chang +嫦chang +昶chang +氅chang +鲳chang +长安changan +常常changchang +长城changcheng +长春changchun +畅达changda +倡导changdao +长度changdu +长短changduan +唱歌changge +常规changgui +长河changhe +场合changhe +偿还changhuan +厂家changjia +常见changjian +长江changjiang +长久changjiu +猖獗changjue +长空changkong +畅快changkuai +猖狂changkuang +场面changmian +长眠changmian +长年changnian +长篇changpian +长期changqi +长驱changqu +常任changren +长沙changsha +厂商changshang +常识changshi +尝试changshi +长寿changshou +常数changshu +场所changsuo +畅谈changtan +长途changtu +怅惘changwang +常委changwei +倘未changwei +常温changwen +常务changwu +畅想changxiang +畅销changxiao +倡议changyi +畅饮changyin +常用changyong +常有changyou +畅游changyou +长远changyuan +厂长changzhang +长征changzheng +厂址changzhi +常驻changzhu +婵娟chanjuan +蝉联chanlian +产量chanliang +缠绵chanmian +阐明chanming +产品chanpin +产权chanquan +缠绕chanrao +产生chansheng +禅师chanshi +阐述chanshu +产物chanwu +产销chanxiao +产业chanye +产值chanzhi +朝chao +超chao +潮chao +巢chao +抄chao +钞chao +嘲chao +吵chao +炒chao +绰*chao +剿*chao +怊chao +晁chao +焯*chao +耖chao +抄报chaobao +超产chaochan +超出chaochu +朝代chaodai +超额chaoe +嘲讽chaofeng +超过chaoguo +朝晖chaohui +超级chaoji +吵架chaojia +潮解chaojie +潮流chaoliu +抄录chaolu +吵闹chaonao +嘲弄chaonong +潮湿chaoshi +潮水chaoshui +抄送chaosong +超脱chaotuo +抄袭chaoxi +朝鲜chaoxian +嘲笑chaoxiao +巢穴chaoxue +朝阳chaoyang +朝野chaoye +超越chaoyue +超支chaozhi +查清chaqing +插曲chaqu +插入charu +查哨chashao +插手chashou +查收chashou +插图chatu +查问chawen +查询chaxun +茶叶chaye +差异chayi +查阅chayue +查证chazheng +岔子chazi +插足chazu +车che +彻che +尺*che +撤che +扯che +掣che +澈che +坼che +砗che +彻底chedi +车祸chehuo +车间chejian +车辆cheliang +陈chen +沉chen +称chen +衬chen +尘chen +臣chen +晨chen +沈*chen +郴chen +辰chen +忱chen +趁chen +伧chen +谌chen +谶chen +抻chen +嗔chen +宸chen +琛chen +榇chen +碜chen +龀chen +尘埃chenai +沉淀chendian +陈腐chenfu +沉浮chenfu +成cheng +程cheng +称cheng +城cheng +承cheng +乘cheng +呈cheng +盛*cheng +撑cheng +诚cheng +橙cheng +惩cheng +澄cheng +逞cheng +骋cheng +秤cheng +丞cheng +埕cheng +噌cheng +枨cheng +柽cheng +塍cheng +瞠cheng +铖cheng +铛cheng +裎cheng +蛏cheng +酲cheng +成败chengbai +承办chengban +惩办chengban +呈报chengbao +承包chengbao +成本chengben +成材chengcai +惩处chengchu +乘除chengchu +承担chengdan +承当chengdang +成都chengdu +程度chengdu +乘法chengfa +惩罚chengfa +成功chenggong +成规chenggui +成果chengguo +称号chenghao +称呼chenghu +成绩chengji +乘机chengji +成家chengjia +成见chengjian +成交chengjiao +承接chengjie +惩戒chengjie +成就chengjiu +乘客chengke +诚恳chengken +成立chengli +乘凉chengliang +成名chengming +成年chengnian +成批chengpi +成品chengpin +诚朴chengpu +逞强chengqiang +澄清chengqing +城区chengqu +成全chengquan +诚然chengran +成人chengren +承认chengren +成色chengse +成事chengshi +诚实chengshi +城市chengshi +承受chengshou +成熟chengshu +成为chengwei +称谓chengwei +成文chengwen +呈现chengxian +呈献chengxian +城乡chengxiang +成效chengxiao +称心chengxin +诚心chengxin +程序chengxu +乘虚chengxu +撑腰chengyao +诚意chengyi +成语chengyu +成员chengyuan +称赞chengzan +成长chengzhang +城镇chengzhen +称职chengzhi +诚挚chengzhi +趁机chenji +沉积chenji +陈迹chenji +沉浸chenjin +沉静chenjing +陈旧chenjiu +陈列chenlie +沉沦chenlun +沉闷chenmen +沉湎chenmian +沉默chenmo +沉溺chenni +陈设chenshe +陈述chenshu +陈说chenshuo +沉思chensi +沉痛chentong +衬托chentuo +沉吟chenyin +衬映chenying +趁早chenzao +沉重chenzhong +沉着chenzhuo +车皮chepi +扯皮chepi +撤退chetui +撤消chexiao +车站chezhan +撤职chezhi +持chi +尺chi +齿chi +吃chi +赤chi +池chi +迟chi +翅chi +斥chi +耻chi +痴chi +匙chi +弛chi +驰chi +侈chi +炽chi +傺chi +坻chi +墀chi +茌chi +叱chi +哧chi +啻chi +嗤chi +彳chi +饬chi +媸chi +敕chi +眵chi +鸱chi +瘛chi +褫chi +蚩chi +螭chi +笞chi +篪chi +豉chi +踟chi +魑chi +翅膀chibang +赤诚chicheng +驰骋chicheng +尺寸chicun +迟到chidao +赤道chidao +尺度chidu +迟钝chidun +吃喝chihe +迟缓chihuan +吃紧chijin +吃惊chijing +持久chijiu +吃苦chiku +吃亏chikui +吃力chili +炽烈chilie +齿轮chilun +持平chiping +痴情chiqing +炽热chire +耻辱chiru +池塘chitang +耻笑chixiao +赤心chixin +痴心chixin +迟疑chiyi +迟早chizao +斥责chize +叱咤chizha +持重chizhong +吃重chizhong +赤字chizi +催化剂chj +种*chong +虫chong +重*chong +充chong +冲chong +崇chong +涌*chong +宠chong +茺chong +忡chong +憧chong +铳chong +舂chong +艟chong +宠爱chongai +崇拜chongbai +充斥chongchi +冲刺chongci +冲淡chongdan +充当chongdang +重叠chongdie +冲动chongdong +宠儿chonger +充分chongfen +冲锋chongfeng +重复chongfu +崇高chonggao +重合chonghe +重婚chonghun +冲击chongji +重建chongjian +崇敬chongjing +憧憬chongjing +充满chongman +充沛chongpei +冲破chongpo +重庆chongqing +崇尚chongshang +重申chongshen +充实chongshi +冲刷chongshua +冲天chongtian +冲突chongtu +重温chongwen +冲洗chongxi +重新chongxin +重演chongyan +重印chongyin +充裕chongyu +充足chongzu +抽chou +仇chou +臭chou +酬chou +畴chou +踌chou +稠chou +愁chou +筹chou +绸chou +瞅chou +丑chou +俦chou +帱chou +惆chou +瘳chou +雠chou +筹办chouban +筹备choubei +惆怅chouchang +抽搐chouchu +踌躇chouchu +筹措choucuo +抽调choudiao +丑恶choue +仇恨chouhen +丑化chouhua +筹划chouhua +筹集chouji +筹建choujian +酬金choujin +抽空choukong +酬劳choulao +丑陋choulou +筹码chouma +稠密choumi +筹谋choumou +愁容chourong +抽象chouxiang +酬谢chouxie +抽噎chouye +出chu +处chu +除chu +初chu +础chu +触chu +楚chu +锄chu +储chu +畜*chu +橱chu +厨chu +躇chu +雏chu +滁chu +矗chu +搐chu +亍chu +刍chu +怵chu +憷chu +绌chu +杵chu +楮chu +樗chu +褚chu +蜍chu +蹰chu +黜chu +揣chuai +搋chuai +啜chuai +嘬*chuai +膪chuai +踹chuai +揣度chuaidu +揣摩chuaimo +传chuan +船chuan +穿chuan +串chuan +川chuan +椽chuan +喘chuan +舛chuan +遄chuan +巛chuan +氚chuan +钏chuan +舡chuan +传遍chuanbian +传标chuanbiao +传播chuanbo +船舶chuanbo +船埠chuanbu +穿插chuancha +传达chuanda +传单chuandan +传导chuandao +传递chuandi +床chuang +创chuang +窗chuang +闯chuang +疮chuang +幢chuang +怆chuang +创办chuangban +闯荡chuangdang +窗户chuanghu +创见chuangjian +创建chuangjian +闯劲chuangjin +创举chuangju +窗口chuangkou +创立chuangli +窗帘chuanglian +创始chuangshi +创新chuangxin +创业chuangye +创造chuangzao +创作chuangzuo +串联chuanlian +喘气chuanqi +传奇chuanqi +传染chuanran +传授chuanshou +传输chuanshu +传述chuanshu +传说chuanshuo +传送chuansong +传统chuantong +串通chuantong +喘息chuanxi +传讯chuanxun +传扬chuanyang +传阅chuanyue +传真chuanzhen +船只chuanzhi +穿着chuanzhuo +出版chuban +出榜chubang +储备chubei +出兵chubing +初步chubu +储藏chucang +出差chucha +出产chuchan +出场chuchang +出厂chuchang +处处chuchu +橱窗chuchuang +初次chuci +储存chucun +初等chudeng +出动chudong +触动chudong +出发chufa +触发chufa +除法chufa +处罚chufa +触犯chufan +出访chufang +除非chufei +处分chufen +出轨chugui +出海chuhai +吹chui +垂chui +锤chui +椎*chui +炊chui +捶chui +陲chui +棰chui +槌chui +吹棒chuibang +吹风chuifeng +吹拂chuifu +锤炼chuilian +吹牛chuiniu +垂青chuiqing +垂涎chuixian +吹嘘chuixu +垂直chuizhi +初级chuji +出击chuji +出界chujie +出境chujing +处境chujing +处决chujue +触觉chujue +除开chukai +出口chukou +出来chulai +除了chule +出力chuli +处理chuli +矗立chuli +初恋chulian +出笼chulong +出路chulu +出马chuma +出卖chumai +出面chumian +出名chuming +除名chuming +出没chumo +春chun +纯chun +醇chun +椿chun +唇chun +淳chun +蠢chun +莼chun +鹑chun +蝽chun +出纳chuna +春播chunbo +纯粹chuncui +纯度chundu +春分chunfen +春风chunfeng +春耕chungeng +春光chunguang +醇厚chunhou +春辉chunhui +春季chunji +春节chunjie +纯洁chunjie +纯净chunjing +纯利chunli +纯朴chunpu +春秋chunqiu +春色chunse +春笋chunsun +春天chuntian +处女chunu +触怒chunu +春意chunyi +纯真chunzhen +纯正chunzheng +戳chuo +绰chuo +啜*chuo +辍chuo +踔chuo +龊chuo +戳穿chuochuan +绰号chuohao +啜泣chuoqi +出品chupin +出奇chuqi +初期chuqi +出勤chuqin +出去chuqu +出让churang +出任churen +出入churu +出色chuse +出身chushen +出神chushen +出生chusheng +畜生chusheng +出事chushi +出世chushi +处世chushi +厨师chushi +出售chushou +处所chusuo +出庭chuting +锄头chutou +出土chutu +出外chuwai +除外chuwai +出席chuxi +出息chuxi +除夕chuxi +出现chuxian +初小chuxiao +雏形chuxing +储蓄chuxu +刍议chuyi +处于chuyu +初战chuzhan +处长chuzhang +出诊chuzhen +出征chuzheng +处置chuzhi +初中chuzhong +出租chuzu +此ci +次ci +刺ci +磁ci +雌ci +词ci +茨ci +疵ci +辞ci +慈ci +瓷ci +赐ci +伺*ci +兹*ci +茈ci +呲ci +祠ci +鹚ci +糍ci +慈爱ciai +辞别cibie +磁场cichang +磁带cidai +磁道cidao +此地cidi +词典cidian +辞典cidian +刺耳cier +词根cigen +刺骨cigu +此后cihou +词汇cihui +刺激ciji +赐教cijiao +此刻cike +刺客cike +词类cilei +辞令ciling +磁盘cipan +次品cipin +辞去ciqu +刺杀cisha +此时cishi +次数cishu +辞书cishu +词素cisu +祠堂citang +辞退citui +此外ciwai +慈祥cixiang +辞行cixing +词性cixing +雌雄cixiong +次序cixu +词序cixu +刺眼ciyan +次要ciyao +词语ciyu +赐予ciyu +此致cizhi +辞职cizhi +词缀cizhui +词组cizu +超级大国cjdg +参考书cks +参考消息ckxx +参考资料ckzl +触类旁通clpt +藏龙卧虎clwh +参谋长cmc +聪明才智cmcz +出谋划策cmhc +从难从严cncy +从cong +丛cong +聪cong +葱cong +囱cong +匆cong +苁cong +淙cong +骢cong +琮cong +璁cong +从此congci +匆匆congcong +匆促congcu +从而conger +从犯congfan +聪慧conghui +从来conglai +丛林conglin +匆忙congmang +聪明congming +从前congqian +从容congrong +从事congshi +丛书congshu +从速congsu +从新congxin +从严congyan +聪颖congying +葱郁congyu +从中congzhong +凑cou +楱cou +辏cou +腠cou +凑合couhe +凑巧couqiao +成品率cpl +成千上万cqsw +从容不迫crbp +承认错误crcw +趁热打铁crdt +措手不及csbj +出生率csl +长沙市css +炊事员csy +彻头彻尾ctcw +垂头丧气ctsq +粗cu +促cu +醋cu +簇cu +卒*cu +蔟cu +徂cu +猝cu +殂cu +酢cu +蹙cu +蹴cu +篡cuan +蹿cuan +窜cuan +攒*cuan +汆cuan +撺cuan +爨cuan +镩cuan +篡夺cuanduo +窜犯cuanfan +篡改cuangai +篡权cuanquan +粗暴cubao +粗糙cucao +粗犷cuguang +催cui +脆cui +淬cui +粹cui +摧cui +衰*cui +崔cui +瘁cui +翠cui +萃cui +啐cui +悴cui +璀cui +榱cui +毳cui +隹cui +摧残cuican +脆弱cuiruo +促进cujin +存cun +村cun +寸cun +蹲*cun +忖cun +皴cun +存储cunchu +存档cundang +存放cunfang +存款cunkuan +村落cunluo +存亡cunwang +存在cunzai +村镇cunzhen +村庄cunzhuang +村子cunzi +错cuo +措cuo +撮cuo +磋cuo +搓cuo +挫cuo +厝cuo +嵯cuo +脞cuo +锉cuo +矬cuo +痤cuo +瘥*cuo +鹾cuo +蹉cuo +错案cuoan +挫败cuobai +错处cuochu +措辞cuoci +错怪cuoguai +错过cuoguo +撮合cuohe +错觉cuojue +磋商cuoshang +挫伤cuoshang +措施cuoshi +错误cuowu +挫折cuozhe +错综cuozong +粗浅cuqian +促使cushi +粗俗cusu +粗心cuxin +粗壮cuzhuang +常委会cwh +崇文区cwq +常务委员会cwwh +乘务员cwy +诚心诚意cxcy +程序控制cxkz +程序设计cxsj +长远利益cyly +朝阳区cyq +财政部czb +错综复杂czfz +操之过急czgj +出租汽车czqc +此之外czw +财政危机czwj +创造性czx +操作系统czxt +操作员czy +持之以恒czyh +的d +大d +地d +动d +到d +对d +度d +多d +电d +党d +得d +定d +等d +斗d +当d +队d +都d +点d +代d +道d +大da +打da +达da +答da +搭da +塔*da +瘩da +耷da +哒da +嗒da +怛da +妲da +沓*da +疸da +褡da +笪da +靼da +鞑da +答案daan +打败dabai +大办daban +大半daban +打扮daban +答辩dabian +大伯dabo +大部dabu +达成dacheng +大胆dadan +搭档dadang +大道dadao +达到dadao +打倒dadao +大地dadi +大敌dadi +大抵dadi +打断daduan +大队dadui +大多daduo +大凡dafan +大夫dafu +大幅dafu +答复dafu +大概dagai +大纲dagang +大国daguo +大海dahai +大好dahao +大河dahe +大亨daheng +大会dahui +大*dai +代dai +带dai +待dai +袋dai +戴dai +呆dai +歹dai +傣dai +殆dai +贷dai +逮dai +怠dai +埭dai +甙dai +呔dai +岱dai +迨dai +骀dai +绐dai +玳dai +黛dai +呆板daiban +代表daibiao +逮捕daibu +逮逋daibu +代词daici +带动daidong +怠工daigong +代价daijia +贷款daikuan +带来dailai +代理daili +带领dailing +带路dailu +黛绿dailu +代码daima +怠慢daiman +待命daiming +代数daishu +代替daiti +带头daitou +歹徒daitu +待遇daiyu +呆滞daizhi +呆子daizi +打击daji +大家dajia +打搅dajiao +大街dajie +大捷dajie +打劫dajie +搭救dajiu +大局daju +答卷dajuan +打开dakai +耷拉dala +大力dali +大连dalian +大量daliang +打量daliang +大陆dalu +大略dalue +大妈dama +单dan +但dan +弹dan +担dan +石*dan +蛋dan +淡dan +胆dan +氮dan +丹dan +旦dan +耽dan +郸dan +掸dan +惮dan +诞dan +儋dan +萏dan +啖dan +澹*dan +殚dan +赕dan +眈dan +疸dan +瘅dan +聃dan +箪dan +大脑danao +担保danbao +单薄danbao +淡薄danbao +单产danchan +诞辰danchen +单纯danchun +单词danci +担当dandang +单调dandiao +单独dandu +单方danfang +担负danfu +党dang +当dang +档dang +挡dang +荡dang +谠dang +凼dang +菪dang +宕dang +砀dang +裆dang +单干dangan +胆敢dangan +档案dangan +当场dangchang +当初dangchu +当代dangdai +当地dangdi +单个dange +耽搁dange +党风dangfeng +党纲danggang +党纪dangji +党籍dangji +当即dangji +当家dangjia +当今dangjin +当局dangju +当量dangliang +当面dangmian +党内dangnei +当年dangnian +党派dangpai +当铺dangpu +当前dangqian +当然dangran +当日dangri +当时dangshi +当天dangtian +当头dangtou +党团dangtuan +当晚dangwan +党委dangwei +当先dangxian +党校dangxiao +当心dangxin +党性dangxing +荡漾dangyang +党员dangyuan +当月dangyue +党章dangzhang +当真dangzhen +党政dangzheng +当政dangzheng +当中dangzhong +当众dangzhong +当做dangzuo +单价danjia +担架danjia +胆量danliang +胆略danlue +淡漠danmo +胆怯danqie +丹青danqing +担任danren +单身danshen +诞生dansheng +但是danshi +胆识danshi +单体danti +丹田dantian +单位danwei +耽误danwu +单项danxiang +胆小danxiao +担心danxin +淡雅danya +弹药danyao +单一danyi +单元danyuan +但愿danyuan +单质danzhi +担子danzi +掸子danzi +单字danzi +到dao +道dao +导dao +刀dao +倒dao +稻dao +岛dao +捣dao +盗dao +蹈dao +祷dao +悼dao +叨dao +帱*dao +忉dao +氘dao +焘*dao +纛dao +倒闭daobi +到处daochu +悼词daoci +到达daoda +导弹daodan +道德daode +到底daodi +倒戈daoge +捣鬼daogui +捣毁daohui +到来daolai +到了daole +道理daoli +倒立daoli +道路daolu +捣乱daoluan +倒霉daomei +叨念daonian +道歉daoqian +刀枪daoqiang +盗窃daoqie +到时daoshi +导师daoshi +倒数daoshu +导体daoti +倒退daotui +导演daoyan +道义daoyi +盗用daoyong +岛屿daoyu +导致daozhi +大批dapi +大破dapo +打破dapo +大气daqi +大庆daqing +打扰darao +打扫dasao +大厦dasha +搭讪dashan +大赦dashe +大使dashi +大事dashi +大师dashi +大势dashi +大肆dasi +打算dasuan +大体dati +大厅dating +打听dating +大同datong +大小daxiao +大写daxie +答谢daxie +大选daxuan +大学daxue +大业daye +达因dayin +打印dayin +答应daying +大于dayu +大院dayuan +大约dayue +打仗dazhang +大致dazhi +大众dazhong +打字dazi +代办处dbc +得不偿失dbcs +大部分dbf +电报挂号dbgh +大不了dbl +大步流星dblx +对不起dbq +代表团dbt +电冰箱dbx +东城区dcq +到此为止dcwz +独创性dcx +调查研究dcyj +打成一片dcyp +打电话ddh +电动机ddj +对得起ddq +大多数dds +的de +得de +地*de +德de +底*de +锝de +得逞decheng +的当dedang +得当dedang +得到dedao +得分defen +德国deguo +得奖dejiang +得救dejiu +得了dele +得力deli +等deng +灯deng +登deng +邓deng +澄*deng +蹬deng +瞪deng +凳deng +噔deng +嶝deng +戥deng +磴deng +镫deng +簦deng +登场dengchang +等待dengdai +等到dengdao +灯光dengguang +等候denghou +等级dengji +登记dengji +等价dengjia +灯具dengju +登门dengmen +灯谜dengmi +登攀dengpan +登山dengshan +灯塔dengta +登台dengtai +等同dengtong +等闲dengxian +等于dengyu +登载dengzai +得胜desheng +得失deshi +得体deti +德行dexing +得以deyi +得意deyi +德育deyu +得志dezhi +得知dezhi +得罪dezui +大幅度dfd +多方面dfm +单方面dfm +电风扇dfs +大规模dgm +多功能dgn +大公无私dgws +帝国主义dgzy +电话号码dhhm +电化教育dhjy +大会堂dht +的*di +地di +第di +低di +敌di +底di +提*di +帝di +抵di +滴di +弟di +递di +堤di +迪di +笛di +狄di +涤di +翟di +嫡di +蒂di +缔di +氐di +籴di +诋di +谛di +邸di +坻*di +荻di +嘀di +娣di +绨di +柢di +棣di +觌di +砥di +碲di +睇di +镝di +羝di +骶di +嗲dia +电dian +点dian +垫dian +典dian +店dian +颠dian +淀dian +掂dian +滇dian +碘dian +靛dian +佃dian +甸dian +惦dian +奠dian +殿dian +阽dian +坫dian +巅dian +玷dian +钿dian +癜dian +癫dian +簟dian +踮dian +电报dianbao +点播dianbo +电场dianchang +电车dianche +电池dianchi +电传dianchuan +颠倒diandao +电灯diandeng +点滴diandi +奠定dianding +电动diandong +典范dianfan +淀粉dianfen +垫付dianfu +颠覆dianfu +电感diangan +典故diangu +电荷dianhe +电弧dianhu +电话dianhua +电汇dianhui +电机dianji +电极dianji +奠基dianji +惦记dianji +典籍dianji +点将dianjiang +电解dianjie +殿军dianjun +癫狂diankuang +电缆dianlan +电力dianli +电离dianli +典礼dianli +电流dianliu +电路dianlu +电脑diannao +电能dianneng +店铺dianpu +电气dianqi +电器dianqi +点燃dianran +电容dianrong +电扇dianshan +电视dianshi +电台diantai +电梯dianti +点头diantou +电网dianwang +电位dianwei +玷污dianwu +殿下dianxia +电线dianxian +癫痫dianxian +电信dianxin +典型dianxing +电讯dianxun +电压dianya +电影dianying +店员dianyuan +点阵dianzhen +点缀dianzhui +电子dianzi +点子dianzi +电阻dianzu +调diao +掉diao +吊diao +鸟*diao +碉diao +叼diao +雕diao +凋diao +刁diao +钓diao +铞diao +铫diao +貂diao +鲷diao +碉堡diaobao +凋敝diaobi +调查diaocha +吊车diaoche +调动diaodong +调度diaodu +钓饵diaoer +调换diaohuan +掉换diaohuan +雕刻diaoke +调令diaoling +刁难diaonan +调遣diaoqian +调任diaoren +雕塑diaosu +吊唁diaoyan +调用diaoyong +钓鱼diaoyu +调子diaozi +第八diba +地板diban +地步dibu +低沉dichen +抵触dichu +抵达dida +地带didai +低档didang +抵挡didang +地道didao +弟弟didi +地点didian +地段diduan +敌对didui +迭die +跌die +爹die +碟die +蝶die +谍die +叠die +垤die +堞die +揲die +喋die +牒die +瓞die +耋die +踮*die +蹀die +鲽die +迭起dieqi +第二dier +地方difang +低估digu +敌国diguo +帝国diguo +敌后dihou +诋毁dihui +低级diji +递加dijia +递减dijian +地窖dijiao +递交dijiao +缔交dijiao +缔结dijie +第九dijiu +敌军dijun +抵抗dikang +地牢dilao +地理dili +低劣dilie +第六diliu +低落diluo +地貌dimao +地面dimian +抵命diming +定ding +顶ding +钉ding +丁ding +订ding +盯ding +叮ding +鼎ding +锭ding +仃ding +啶ding +玎ding +腚ding +碇ding +町ding +铤*ding +疔ding +耵ding +酊ding +定案dingan +定产dingchan +丁当dingdang +顶点dingdian +定夺dingduo +定额dinge +顶峰dingfeng +顶锋dingfeng +定购dinggou +订购dinggou +订户dinghu +定货dinghuo +订货dinghuo +定价dingjia +定局dingju +定居dingju +定理dingli +订立dingli +鼎立dingli +定量dingliang +定律dinglu +定期dingqi +定然dingran +盯梢dingshao +定时dingshi +顶替dingti +定性dingxing +定型dingxing +定义dingyi +定语dingyu +定员dingyuan +订阅dingyue +订正dingzheng +叮嘱dingzhu +顶撞dingzhuang +钉子dingzi +嫡派dipai +地盘dipan +第七diqi +嫡亲diqin +敌情diqing +地球diqiu +地区diqu +的确dique +敌人diren +第三disan +地势dishi +第十dishi +滴水dishui +第四disi +地铁ditie +地图ditu +丢diu +铥diu +丢掉diudiao +丢脸diulian +丢失diushi +地位diwei +敌伪diwei +第五diwu +嫡系dixi +底细dixi +地下dixia +低下dixia +底下dixia +地形dixing +弟兄dixiong +第一diyi +敌意diyi +地域diyu +抵御diyu +缔造dizao +递增dizeng +地震dizhen +敌阵dizhen +地质dizhi +地址dizhi +抵制dizhi +底子dizi +弟子dizi +党纪国法djgf +当机立断djld +多劳多得dldd +大力发展dlfz +大力加强dljq +大力开展dlkz +独立自主dlzz +多面手dms +对内搞活dngh +多年来dnl +东南亚dny +动dong +东dong +冬dong +懂dong +洞dong +冻dong +董dong +栋dong +侗dong +恫dong +垌dong +咚dong +岽dong +峒dong +氡dong +胨dong +胴dong +硐dong +鸫dong +东北dongbei +东边dongbian +东部dongbu +洞察dongcha +动词dongci +动荡dongdang +懂得dongde +东方dongfang +东风dongfeng +动工donggong +东海donghai +恫吓donghe +动机dongji +冬季dongji +东家dongjia +冻结dongjie +动静dongjing +东京dongjing +动力dongli +动量dongliang +栋梁dongliang +动乱dongluan +动脉dongmai +东南dongnan +东欧dongou +动人dongren +动身dongshen +董事dongshi +动手dongshou +动态dongtai +冬天dongtian +动听dongting +动物dongwu +东西dongxi +洞悉dongxi +动向dongxiang +动心dongxin +东亚dongya +东洋dongyang +动摇dongyao +动用dongyong +动员dongyuan +动辄dongzhe +动作dongzuo +斗dou +都*dou +豆dou +读*dou +兜dou +抖dou +陡dou +逗dou +痘dou +蔸dou +窦dou +蚪dou +篼dou +兜风doufeng +逗号douhao +逗留douliu +斗室doushi +兜售doushou +斗争douzheng +斗志douzhi +斗智douzhi +抖嘴douzui +打破常规dpcg +地平线dpx +电器化dqh +待人接物drjw +第三产业dscy +第十二届dsej +大使馆dsg +到时候dsh +电视机dsj +多少年dsn +大失所望dssw +电视台dst +低三下四dsxs +第十一届dsyj +大踏步dtb +到头来dtl +大体上dts +大同小异dtxy +度du +都du +毒du +独du +读du +渡du +杜du +堵du +镀du +顿du +督du +犊du +睹du +赌du +肚du +妒du +芏du +嘟du +渎du +椟du +牍du +蠹du +笃du +髑du +黩du +断duan +端duan +段duan +短duan +锻duan +缎duan +椴duan +煅duan +簖duan +短波duanbo +短处duanchu +短促duancu +断定duanding +短短duanduan +断交duanjiao +断绝duanjue +锻练duanlian +锻炼duanlian +短路duanlu +段落duanluo +短评duanping +短期duanqi +短缺duanque +断然duanran +煅烧duanshao +断送duansong +短途duantu +端午duanwu +端详duanxiang +短小duanxiao +断言duanyan +端阳duanyang +短语duanyu +短暂duanzan +端正duanzheng +端庄duanzhuang +读报dubao +读本duben +赌博dubo +独裁ducai +毒草ducao +独唱duchang +独创duchuang +督促ducu +毒打duda +独到dudao +度过duguo +毒害duhai +毒化duhua +都会duhui +对dui +队dui +堆dui +敦*dui +兑dui +怼dui +憝dui +碓dui +对比duibi +队部duibu +对策duice +对称duichen +对此duici +对待duidai +对等duideng +对调duidiao +对方duifang +对付duifu +对话duihua +兑换duihuan +对讲duijiang +对抗duikang +对口duikou +对垒duilei +对立duili +对联duilian +队列duilie +对流duiliu +对面duimian +对内duinei +对偶duiou +对手duishou +对数duishu +对外duiwai +队伍duiwu +兑现duixian +对象duixiang +对应duiying +对于duiyu +队员duiyuan +堆栈duizhan +队长duizhang +对照duizhao +对证duizheng +对质duizhi +对峙duizhi +对准duizhun +镀金dujin +杜绝dujue +渡口dukou +都来dulai +独立duli +度量duliang +盾dun +吨dun +顿dun +蹲dun +敦dun +墩dun +囤dun +钝dun +遁dun +沌dun +炖dun +砘dun +礅dun +盹dun +镦dun +趸dun +蹲点dundian +顿号dunhao +囤积dunji +遁迹dunji +钝角dunjiao +顿时dunshi +敦实dunshi +多duo +度*duo +夺duo +朵duo +掇duo +哆duo +垛duo +躲duo +跺duo +舵duo +剁duo +惰duo +堕duo +驮*duo +咄duo +哚duo +沲duo +缍duo +柁duo +铎duo +裰duo +踱duo +多半duoban +躲避duobi +多变duobian +多边duobian +躲藏duocang +多次duoci +夺得duode +多端duoduan +多方duofang +躲开duokai +多亏duokui +夺魁duokui +堕落duoluo +多么duome +夺目duomu +多年duonian +多情duoqing +夺取duoqu +多少duoshao +多事duoshi +掇拾duoshi +舵手duoshou +多数duoshu +多谢duoxie +多心duoxin +惰性duoxing +多样duoyang +多余duoyu +多种duozhong +肚皮dupi +毒品dupin +毒气duqi +读取duqu +度日duri +读入duru +堵塞duse +毒蛇dushe +都是dushi +毒手dushou +读数dushu +读书dushu +毒素dusu +独特dute +读物duwu +毒药duyao +独占duzhan +读者duzhe +毒汁duzhi +渎职duzhi +赌注duzhu +杜撰duzhuan +独自duzi +党委会dwh +对外开放dwkf +敌我矛盾dwmd +对外贸易dwmy +大无畏dww +动物园dwy +当务之急dwzj +邓小平dxp +大学生dxs +大显身手dxss +大西洋dxy +大跃进dyj +打印机dyj +大有可为dykw +待业青年dyqn +掉以轻心dyqx +电影院dyy +大洋洲dyz +大有作为dyzw +党支部dzb +多种多样dzdy +党政机关dzjg +多种经营dzjy +断章取义dzqy +大自然dzr +德智体dzt +电子学dzx +党中央dzy +而e +二e +尔e +儿e +恶e +额e +恩e +俄e +耳e +饵e +蛾e +饿e +峨e +鹅e +讹e +娥e +厄e +扼e +遏e +鄂e +噩e +谔e +垩e +苊e +莪e +萼e +呃e +愕e +屙e +婀e +轭e +腭e +锇e +锷e +鹗e +颚e +鳄e +恶霸eba +恶毒edu +恶感egan +恶棍egun +噩耗ehao +恶化ehua +诶ei +二极管ejg +二进制ejz +恶劣elie +鹅毛emao +噩梦emeng +恶魔emo +耳目一新emyx +恩en +蒽en +摁en +恩爱enai +恩赐enci +恩典endian +恩惠enhui +恩情enqing +而er +二er +尔er +儿er +耳er +饵er +洱er +贰er +佴er +迩er +珥er +铒er +鸸er +鲕er +耳朵erduo +儿歌erge +耳光erguang +而后erhou +尔后erhou +二届erjie +而今erjin +而况erkuang +而且erqie +而是ershi +儿童ertong +儿戏erxi +而已eryi +耳语eryu +二月eryue +儿子erzi +扼杀esha +额外ewai +扼腕ewan +额外负担ewfd +恶习exi +恶心exin +恶性exing +恶性循环exxh +扼要eyao +厄运eyun +讹诈ezha +遏止ezhi +分f +发f +方f +法f +反f +放f +复f +风f +防f +非f +服f +肥f +副f +粉f +府f +夫f +负f +封f +富f +翻f +发fa +法fa +阀fa +乏fa +伐fa +罚fa +筏fa +珐fa +垡fa +砝fa +发报fabao +法宝fabao +发表fabiao +发布fabu +发财facai +发愁fachou +发出fachu +发达fada +发电fadian +法典fadian +法定fading +发动fadong +发放fafang +发奋fafen +发愤fafen +法官faguan +法规fagui +法国faguo +发慌fahuang +发挥fahui +发火fahuo +发给faji +发迹faji +法纪faji +发家fajia +发奖fajiang +发酵fajiao +罚金fajin +发觉fajue +发掘fajue +罚款fakuan +发狂fakuang +法郎falang +法令faling +法律falu +发落faluo +发明faming +反fan +翻fan +范fan +犯fan +饭fan +繁fan +泛fan +番fan +凡fan +烦fan +返fan +藩fan +帆fan +樊fan +矾fan +钒fan +贩fan +蕃fan +蘩fan +幡fan +梵fan +燔fan +畈fan +蹯fan +翻版fanban +反比fanbi +反驳fanbo +帆布fanbu +反常fanchang +范畴fanchou +犯愁fanchou +帆船fanchuan +饭店fandian +反动fandong +翻动fandong +反对fandui +繁多fanduo +反而faner +反复fanfu +方fang +放fang +防fang +访fang +房fang +纺fang +仿fang +妨fang +芳fang +肪fang +坊fang +邡fang +彷*fang +枋fang +钫fang +舫fang +鲂fang +妨碍fangai +方案fangan +反感fangan +防备fangbei +方便fangbian +防潮fangchao +方程fangcheng +放大fangda +放荡fangdang +防盗fangdao +方法fangfa +防范fangfan +防风fangfeng +防腐fangfu +仿佛fangfu +妨害fanghai +防护fanghu +防火fanghuo +放假fangjia +房间fangjian +方面fangmian +放牧fangmu +返工fangong +反攻fangong +放屁fangpi +放弃fangqi +防区fangqu +放任fangren +放哨fangshao +放射fangshe +方式fangshi +防守fangshou +放肆fangsi +放松fangsong +仿宋fangsong +翻滚fangun +方位fangwei +防卫fangwei +访问fangwen +房屋fangwu +放下fangxia +防线fangxian +方向fangxiang +芳香fangxiang +仿效fangxiao +放心fangxin +放行fangxing +方言fangyan +防疫fangyi +防御fangyu +仿造fangzao +仿照fangzhao +方针fangzhen +仿真fangzhen +防治fangzhi +仿制fangzhi +放置fangzhi +防止fangzhi +纺织fangzhi +房子fangzi +放纵fangzong +房租fangzu +番号fanhao +繁华fanhua +反悔fanhui +返回fanhui +反击fanji +反抗fankang +反馈fankui +泛滥fanlan +范例fanli +凡例fanli +翻脸fanlian +贩卖fanmai +繁忙fanmang +烦闷fanmen +反面fanmian +反目fanmu +烦恼fannao +反叛fanpan +犯人fanren +繁荣fanrong +反射fanshe +翻身fanshen +繁盛fansheng +凡是fanshi +凡事fanshi +繁琐fansuo +烦琐fansuo +翻腾fanteng +繁体fanti +饭桶fantong +发怒fanu +饭碗fanwan +范围fanwei +反问fanwen +反响fanxiang +返销fanxiao +反省fanxing +翻修fanxiu +繁衍fanyan +翻译fanyi +翻印fanyin +反应fanying +反映fanying +繁育fanyu +翻越fanyue +翻阅fanyue +贩运fanyun +繁杂fanza +烦燥fanzao +反正fanzheng +反之fanzhi +繁殖fanzhi +繁重fanzhong +贩子fanzi +犯罪fanzui +发起faqi +法权faquan +发射fashe +发生fasheng +发誓fashi +发售fashou +法庭fating +发现faxian +发泄faxie +发行faxing +发言fayan +发扬fayang +法医fayi +发育fayu +发源fayuan +法院fayuan +法则faze +发展fazhan +法制fazhi +法治fazhi +发作fazuo +奋不顾身fbgs +分崩离析fblx +副产品fcp +发电机fdj +发动机fdj +反动派fdp +分道扬镳fdyb +非fei +肥fei +飞fei +费fei +废fei +肺fei +沸fei +菲fei +匪fei +啡fei +诽fei +吠fei +芾fei +狒fei +悱fei +淝fei +妃fei +绯fei +榧fei +腓fei +斐fei +扉fei +镄fei +痱fei +蜚fei +篚fei +翡fei +霏fei +鲱fei +匪帮feibang +诽谤feibang +飞奔feiben +非常feichang +飞驰feichi +废除feichu +非但feidan +非得feide +沸点feidian +非法feifa +非凡feifan +肺腑feifu +绯红feihong +废话feihua +飞机feiji +飞溅feijian +费解feijie +费劲feijin +飞快feikuai +费力feili +肥料feiliao +废料feiliao +肥胖feipang +废品feipin +废弃feiqi +费神feishen +废水feishui +飞速feisu +沸腾feiteng +匪徒feitu +肥沃feiwo +废物feiwu +飞舞feiwu +飞翔feixiang +费心feixin +飞行feixing +废墟feixu +飞扬feiyang +扉页feiye +非议feiyi +费用feiyong +飞跃feiyue +肥皂feizao +飞涨feizhang +废止feizhi +非洲feizhou +妃子feizi +分fen +粉fen +奋fen +份fen +粪fen +纷fen +芬fen +愤fen +酚fen +吩fen +氛fen +坟fen +焚fen +汾fen +忿fen +偾fen +瀵fen +玢*fen +棼fen +鲼fen +鼢fen +分贝fenbei +分辩fenbian +分辨fenbian +粪便fenbian +分别fenbie +分部fenbu +分布fenbu +分册fence +分寸fencun +分担fendan +分得fende +分店fendian +奋斗fendou +分队fendui +分发fenfa +奋发fenfa +纷纷fenfen +吩咐fenfu +风feng +封feng +蜂feng +丰feng +缝feng +峰feng +锋feng +疯feng +奉feng +枫feng +烽feng +逢feng +冯feng +讽feng +凤feng +俸feng +酆feng +葑feng +唪feng +沣feng +砜feng +风暴fengbao +丰碑fengbei +封闭fengbi +风波fengbo +丰产fengchan +奉承fengcheng +讽刺fengci +封存fengcun +风度fengdu +分割fenge +分隔fenge +风发fengfa +风帆fengfan +丰富fengfu +奉告fenggao +风格fengge +奉公fenggong +风光fengguang +风寒fenghan +奉还fenghuan +凤凰fenghuang +烽火fenghuo +封建fengjian +风景fengjing +疯狂fengkuang +风浪fenglang +风力fengli +风流fengliu +丰满fengman +锋芒fengmang +风貌fengmao +奉命fengming +丰年fengnian +分工fengong +奉陪fengpei +风气fengqi +风情fengqing +风趣fengqu +奉劝fengquan +缝纫fengren +风骚fengsao +风沙fengsha +风尚fengshang +风声fengsheng +丰盛fengsheng +丰收fengshou +风霜fengshuang +风水fengshui +丰硕fengshuo +奉祀fengsi +风俗fengsu +封锁fengsuo +疯瘫fengtan +封条fengtiao +风头fengtou +分管fenguan +风味fengwei +缝隙fengxi +风险fengxian +奉献fengxian +风向fengxiang +风行fengxing +奉行fengxing +蜂拥fengyong +风云fengyun +风韵fengyun +风灾fengzai +疯子fengzi +风姿fengzi +分号fenhao +分毫fenhao +分红fenhong +粉红fenhong +分化fenhua +分会fenhui +焚毁fenhui +分级fenji +分解fenjie +分界fenjie +奋进fenjin +分居fenju +分开fenkai +愤慨fenkai +分类fenlei +分离fenli +奋力fenli +分量fenliang +分裂fenlie +纷乱fenluan +分娩fenmian +分秒fenmiao +分明fenming +粉末fenmo +坟墓fenmu +愤怒fennu +分派fenpai +分配fenpei +分批fenpi +分期fenqi +分歧fenqi +奋起fenqi +分清fenqing +分区fenqu +分散fensan +焚烧fenshao +分数fenshu +分说fenshuo +粉碎fensui +分摊fentan +粪土fentu +分外fenwai +氛围fenwei +分析fenxi +奋勇fenyong +分赃fenzang +奋战fenzhan +分支fenzhi +分子fenzi +分组fenzu +丰富多采ffdc +奋发图强fftq +反过来说fgls +反革命fgm +福建省fjs +封建主义fjzy +翻来覆去flfq +法律顾问flgw +分秒必争fmbz +发明创造fmcz +否fou +缶fou +否定fouding +否决foujue +否认fouren +否则fouze +费品率fpl +废寝忘食fqws +缝纫机frj +分水岭fsl +翻天复地ftfd +丰台区ftq +非同小可ftxk +繁体字ftz +复fu +服fu +副fu +府fu +夫fu +负fu +富fu +附fu +福fu +伏fu +符fu +幅fu +腐fu +浮fu +辅fu +付fu +腹fu +妇fu +孵fu +覆fu +扶fu +辐fu +傅fu +佛fu +缚fu +父fu +弗fu +甫fu +肤fu +氟fu +敷fu +拂fu +俘fu +涪fu +袱fu +抚fu +俯fu +釜fu +斧fu +脯fu +腑fu +赴fu +赋fu +阜fu +讣fu +咐fu +匐fu +凫fu +郛fu +芙fu +芾*fu +苻fu +茯fu +莩fu +菔fu +拊fu +呋fu +幞fu +怫fu +滏fu +艴fu +孚fu +驸fu +绂fu +绋fu +桴fu +赙fu +祓fu +砩fu +黻fu +黼fu +罘fu +稃fu +馥fu +蚨fu +蜉fu +蝠fu +蝮fu +麸fu +趺fu +跗fu +鲋fu +鳆fu +腐败fubai +复辟fubi +复查fucha +浮沉fuchen +扶持fuchi +付出fuchu +副词fuci +服从fucong +附带fudai +负担fudan +辅导fudao +浮雕fudiao +浮动fudong +幅度fudu +复发fufa +伏法fufa +夫妇fufu +覆盖fugai +讣告fugao +富贵fugui +符号fuhao +附和fuhe +符合fuhe +负荷fuhe +腐化fuhua +浮华fuhua +复活fuhuo +俘获fuhuo +伏击fuji +附加fujia +附件fujian +福建fujian +佛教fujiao +附近fujin +副刊fukan +俯瞰fukan +浮夸fukua +付款fukuan +腐烂fulan +福利fuli +浮力fuli +富丽fuli +妇联fulian +附录fulu +俘虏fulu +覆灭fumie +覆没fumo +父母fumu +富农funong +妇女funu +扶贫fupin +服气fuqi +福气fuqi +夫妻fuqi +付讫fuqi +肤浅fuqian +富强fuqiang +父亲fuqin +富饶furao +夫人furen +芙蓉furong +妇孺furu +负伤fushang +辐射fushe +复试fushi +腐蚀fushi +俯视fushi +副手fushou +复数fushu +负数fushu +附属fushu +富庶fushu +赋税fushui +伏特fute +覆亡fuwang +富翁fuweng +服务fuwu +复习fuxi +浮现fuxian +赋闲fuxian +浮想fuxiang +腐朽fuxiu +抚恤fuxu +敷衍fuyan +扶养fuyang +抚养fuyang +俯仰fuyang +副业fuye +服役fuyi +复印fuyin +富有fuyou +赋有fuyou +赋于fuyu +抚育fuyu +富裕fuyu +赋予fuyu +复员fuyuan +复原fuyuan +负约fuyue +复杂fuza +负载fuzai +附则fuze +负责fuze +负债fuzhai +付帐fuzhang +复制fuzhi +扶植fuzhi +附中fuzhong +福州fuzhou +抚州fuzhou +附注fuzhu +辅助fuzhu +扶助fuzhu +服装fuzhuang +附着fuzhuo +富足fuzu +辅佐fuzuo +服务部fwb +服务态度fwtd +服务员fwy +方兴未艾fxwa +奋勇当先fydx +翻一番fyf +风言风语fyfy +发扬光大fygd +复印机fyj +发言人fyr +风雨同舟fytz +房租费fzf +副总理fzl +纺织品fzp +福州市fzs +反作用fzy +副作用fzy +负责制fzz +发展中国家fzzj +个g +国g +工g +过g +高g +干g +关g +各g +革g +公g +根g +更g +改g +管g +光g +广g +果g +格g +共g +搞g +夹*ga +噶ga +嘎ga +胳*ga +尬ga +尕ga +尜ga +旮ga +钆ga +公安部gab +改gai +该gai +盖gai +概gai +钙gai +溉gai +芥*gai +丐gai +陔gai +垓gai +戤gai +赅gai +改变gaibian +改编gaibian +该当gaidang +改道gaidao +改动gaidong +改革gaige +改观gaiguan +改过gaiguo +改悔gaihui +改建gaijian +改进gaijin +概况gaikuang +概括gaikuo +改良gailiang +概率gailu +概论gailun +概貌gaimao +概念gainian +改期gaiqi +改善gaishan +概述gaishu +概叹gaitan +改天gaitian +改选gaixuan +概要gaiyao +改造gaizao +改正gaizheng +改装gaizhuang +改组gaizu +公安局gaj +干gan +杆gan +感gan +敢gan +赶gan +甘gan +肝gan +秆gan +柑gan +竿gan +赣gan +乾*gan +坩gan +苷gan +尴gan +擀gan +泔gan +淦gan +澉gan +绀gan +橄gan +旰gan +矸gan +疳gan +酐gan +干部ganbu +感触ganchu +干脆gancui +敢当gandang +甘当gandang +感到gandao +感动gandong +感恩ganen +刚gang +钢gang +缸gang +纲gang +岗gang +港gang +杠gang +冈gang +肛gang +扛*gang +戆gang +罡gang +筻gang +尴尬ganga +港澳gangao +刚才gangcai +钢材gangcai +刚刚ganggang +刚好ganghao +港口gangkou +纲领gangling +岗哨gangshao +钢铁gangtie +港湾gangwan +岗位gangwei +港务gangwu +刚要gangyao +纲要gangyao +刚毅gangyi +干旱ganhan +感化ganhua +干活ganhuo +肝火ganhuo +感激ganji +干劲ganjin +赶紧ganjin +干净ganjing +感觉ganjue +感慨gankai +甘苦ganku +赶快gankuai +赶忙ganmang +感冒ganmao +感情ganqing +感染ganran +干扰ganrao +干涉ganshe +干事ganshi +感受ganshou +甘肃gansu +感叹gantan +干线ganxian +感想ganxiang +敢想ganxiang +感谢ganxie +甘心ganxin +感性ganxing +感应ganying +敢于ganyu +干预ganyu +甘愿ganyuan +干燥ganzao +感召ganzhao +赣州ganzhou +敢做ganzuo +高gao +搞gao +告gao +稿gao +膏gao +篙gao +皋gao +羔gao +糕gao +镐gao +睾gao +诰gao +郜gao +藁gao +缟gao +槔gao +槁gao +杲gao +锆gao +高矮gaoai +高昂gaoang +告别gaobie +高产gaochan +高超gaochao +高潮gaochao +告成gaocheng +告辞gaoci +高大gaoda +高档gaodang +高等gaodeng +高地gaodi +高低gaodi +糕点gaodian +高度gaodu +告发gaofa +高峰gaofeng +高高gaogao +高歌gaoge +高贵gaogui +高喊gaohan +搞好gaohao +高呼gaohu +搞坏gaohuai +高级gaoji +告急gaoji +高价gaojia +高见gaojian +稿件gaojian +告捷gaojie +告诫gaojie +高龄gaoling +高楼gaolou +告密gaomi +高明gaoming +高能gaoneng +高攀gaopan +高频gaopin +高强gaoqiang +高山gaoshan +高尚gaoshang +高深gaoshen +告示gaoshi +高耸gaosong +高速gaosu +告诉gaosu +高温gaowen +高小gaoxiao +高校gaoxiao +高兴gaoxing +膏药gaoyao +高原gaoyuan +高涨gaozhang +高招gaozhao +高中gaozhong +告终gaozhong +告状gaozhuang +稿子gaozi +港澳同胞gatb +怪不得gbd +各部门gbm +各部委gbw +供不应求gbyq +故步自封gbzf +共产党gcd +共产党员gcdy +工程师gcs +顾此失彼gcsb +贯彻执行gczx +共产主义gczy +各地方gdf +各大军区gdjq +广东省gds +高档商品gdsp +各单位gdw +高等院校gdyx +固定资产gdzc +个ge +各ge +革ge +合*ge +格ge +割ge +歌ge +隔ge +盖*ge +哥ge +铬ge +阁ge +戈ge +葛ge +搁ge +鸽ge +胳ge +疙ge +蛤ge +咯*ge +屹*ge +鬲ge +仡ge +哿ge +圪ge +塥ge +嗝ge +纥*ge +搿ge +膈ge +硌ge +镉ge +袼ge +颌*ge +虼ge +舸ge +骼ge +隔壁gebi +戈壁gebi +个别gebie +歌唱gechang +各处gechu +革除gechu +疙瘩geda +各地gedi +格调gediao +隔断geduan +个个gege +各个gege +各国geguo +隔阂gehe +歌喉gehou +各级geji +各界gejie +格局geju +割据geju +隔绝gejue +各类gelei +隔离geli +割裂gelie +格律gelu +革命geming +隔膜gemo +根gen +跟gen +亘gen +茛gen +哏gen +艮gen +根本genben +根除genchu +根底gendi +更geng +耕geng +颈geng +庚geng +羹geng +埂geng +耿geng +梗geng +哽geng +赓geng +绠geng +鲠geng +耕地gengdi +更迭gengdie +更动gengdong +更多gengduo +更改genggai +梗概genggai +更高genggao +更换genghuan +更加gengjia +更为gengwei +颈项gengxiang +更新gengxin +哽咽gengyan +耕耘gengyun +更正gengzheng +耿直gengzhi +梗直gengzhi +耕种gengzhong +梗阻gengzu +耕作gengzuo +根基genji +根据genju +跟前genqian +跟随gensui +根源genyuan +根治genzhi +跟着genzhuo +根子genzi +跟踪genzong +搁浅geqian +歌曲gequ +个人geren +格式geshi +歌颂gesong +个体geti +格外gewai +各位gewei +歌舞gewu +阁下gexia +各项gexiang +革新gexin +个性gexing +格言geyan +各样geyang +歌咏geyong +搁置gezhi +各种gezhong +各族gezu +国防部gfb +各方面gfm +格格不入ggbr +归根到底ggdd +恭恭敬敬ggjj +滚瓜烂熟ggls +歌功颂德ggsd +共和国ghg +各行各业ghgy +干劲冲天gjct +各级党委gjdw +各级领导gjld +国家利益gjly +国计民生gjms +工具书gjs +各尽所能gjsn +国库券gkq +工矿企业gkqy +孤陋寡闻glgw +规律性glx +国民党gmd +革命化gmh +革命家gmj +国民经济gmjj +购买力gml +光明磊落gmll +光明日报gmrb +顾名思义gmsy +冠冕堂皇gmth +刮目相看gmxk +光明正大gmzd +工农兵gnb +国内外gnw +工农业gny +工gong +公gong +共gong +供gong +功gong +攻gong +红*gong +巩gong +贡gong +汞gong +宫gong +恭gong +龚gong +躬gong +弓gong +拱gong +珙gong +肱gong +蚣gong +觥gong +公安gongan +公报gongbao +工本gongben +公布gongbu +公差gongcha +公拆gongchai +工厂gongchang +功臣gongchen +工程gongcheng +共处gongchu +供词gongci +共存gongcun +公道gongdao +公德gongde +功德gongde +工地gongdi +公敌gongdi +宫殿gongdian +攻读gongdu +公费gongfei +公愤gongfen +工夫gongfu +功夫gongfu +公告gonggao +公共gonggong +巩固gonggu +公关gongguan +公害gonghai +公函gonghan +共和gonghe +工会gonghui +供给gongji +共计gongji +攻击gongji +功绩gongji +公家gongjia +公斤gongjin +恭敬gongjing +工具gongju +公开gongkai +功课gongke +公款gongkuan +功劳gonglao +公理gongli +公里gongli +公历gongli +公路gonglu +功率gonglu +公民gongmin +共鸣gongming +公墓gongmu +功能gongneng +工农gongnong +公判gongpan +公平gongping +公仆gongpu +供求gongqiu +工区gongqu +公然gongran +工人gongren +公认gongren +供认gongren +工伤gongshang +公社gongshe +公审gongshen +工时gongshi +公事gongshi +共事gongshi +公式gongshi +公署gongshu +公司gongsi +公私gongsi +公诉gongsu +宫廷gongting +共同gongtong +恭维gongwei +公文gongwen +公物gongwu +公务gongwu +恭喜gongxi +贡献gongxian +工效gongxiao +功效gongxiao +供销gongxiao +共性gongxing +工序gongxu +共需gongxu +功勋gongxun +供养gongyang +工业gongye +工艺gongyi +供应gongying +公用gongyong +共有gongyou +公元gongyuan +公园gongyuan +公约gongyue +公允gongyun +公债gongzhai +公章gongzhang +共振gongzhen +工整gongzheng +公正gongzheng +公证gongzheng +供职gongzhi +公众gongzhong +工资gongzi +工作gongzuo +够gou +构gou +沟gou +句*gou +狗gou +钩gou +勾gou +购gou +苟gou +垢gou +佝gou +诟gou +岣gou +遘gou +媾gou +缑gou +枸gou +觏gou +彀gou +笱gou +篝gou +鞲gou +构成goucheng +勾搭gouda +勾当goudang +媾和gouhe +沟壑gouhe +构件goujian +勾结goujie +购买goumai +苟且gouqie +构思gousi +沟通goutong +勾通goutong +构陷gouxian +勾销gouxiao +购销gouxiao +勾引gouyin +构造gouzao +购置gouzhi +钩子gouzi +国庆节gqj +共青团gqt +光荣榜grb +根深蒂固gsdg +瓜熟蒂落gsdl +公使馆gsg +各式各样gsgy +甘肃省gss +工商业gsy +个体户gth +改头换面gthm +高谈阔论gtkl +鼓gu +固gu +古gu +骨gu +故gu +顾gu +股gu +谷gu +估gu +雇gu +孤gu +姑gu +贾*gu +辜gu +菇gu +咕gu +箍gu +沽gu +蛊gu +嘏gu +诂gu +菰gu +呱gu +崮gu +汩gu +梏gu +轱gu +牯gu +牿gu +臌gu +毂gu +瞽gu +罟gu +钴gu +锢gu +鸪gu +鹄*gu +痼gu +蛄gu +酤gu +觚gu +鲴gu +鹘gu +挂gua +刮gua +瓜gua +括*gua +剐gua +寡gua +褂gua +卦gua +诖gua +呱gua +栝gua +胍gua +鸹gua +瓜分guafen +瓜葛guage +挂号guahao +怪guai +乖guai +拐guai +乖舛guaichuan +乖戾guaili +乖僻guaipi +乖巧guaiqiao +怪物guaiwu +怪异guaiyi +拐杖guaizhang +挂名guaming +关guan +管guan +观guan +官guan +灌guan +贯guan +惯guan +冠guan +馆guan +罐guan +棺guan +纶*guan +倌guan +莞guan +掼guan +涫guan +盥guan +鹳guan +矜guan +鳏guan +关闭guanbi +观测guance +观察guancha +贯彻guanche +贯穿guanchuan +管道guandao +官邸guandi +观点guandian +官方guanfang +光guang +广guang +逛guang +咣guang +犷guang +桄guang +胱guang +灌溉guangai +光标guangbiao +广播guangbo +广博guangbo +光彩guangcai +广场guangchang +光大guangda +广大guangda +广东guangdong +广度guangdu +广泛guangfan +广告guanggao +光顾guanggu +光滑guanghua +光辉guanghui +光景guangjing +广阔guangkuo +光芒guangmang +广袤guangmao +光明guangming +光盘guangpan +光谱guangpu +光荣guangrong +观光guanguang +广西guangxi +光线guangxian +广义guangyi +光阴guangyin +光涌guangyong +广州guangzhou +关怀guanhuai +挂念guanian +管家guanjia +关键guanjian +管教guanjiao +关节guanjie +冠军guanjun +关卡guanka +观看guankan +关口guankou +管理guanli +贯例guanli +惯例guanli +官吏guanli +关联guanlian +官僚guanliao +观摩guanmo +灌木guanmu +官能guanneng +观念guannian +关切guanqie +观赏guanshang +管事guanshi +管束guanshu +灌输guanshu +关税guanshui +官司guansi +贯通guantong +关头guantou +观望guanwang +关系guanxi +管辖guanxia +官衔guanxian +关心guanxin +惯性guanxing +关押guanya +惯用guanyong +关于guanyu +官员guanyuan +观战guanzhan +关照guanzhao +管制guanzhi +观止guanzhi +观众guanzhong +关注guanzhu +贯注guanzhu +馆子guanzi +挂失guashi +挂帅guashuai +鼓吹guchui +故此guci +古代gudai +孤单gudan +故地gudi +古典gudian +固定guding +鼓动gudong +股东gudong +古董gudong +孤独gudu +咕嘟gudu +孤儿guer +股份gufen +辜负gufu +骨干gugan +雇工gugong +故宫gugong +古怪guguai +蛊惑guhuo +规gui +贵gui +归gui +硅gui +鬼gui +轨gui +龟gui +桂gui +瑰gui +圭gui +闺gui +诡gui +癸gui +柜gui +跪gui +刽gui +傀*gui +炔*gui +匦gui +刿gui +庋gui +宄gui +妫gui +桧gui +炅gui +晷gui +皈gui +簋gui +鲑gui +鳜gui +诡辩guibian +贵宾guibin +归并guibing +规程guicheng +归档guidang +轨道guidao +规定guiding +归队guidui +规范guifan +规格guige +归公guigong +归功guigong +桂冠guiguan +归国guiguo +规划guihua +鬼话guihua +归还guihuan +诡计guiji +轨迹guiji +贵贱guijian +归咎guijiu +规矩guiju +瑰丽guili +鬼脸guilian +龟裂guilie +规律guilu +诡秘guimi +规模guimo +归纳guina +闺女guinu +规劝guiquan +贵人guiren +归属guishu +龟缩guisuo +柜台guitai +闺秀guixiu +归于guiyu +规则guize +规章guizhang +贵重guizhong +贵州guizhou +鬼子guizi +贵族guizu +归罪guizui +顾及guji +估计guji +古迹guji +顾忌guji +估价gujia +古今gujin +古旧gujiu +故旧gujiu +故居guju +顾客guke +孤苦guku +古老gulao +孤立guli +鼓励guli +估量guliang +顾虑gulu +估摸gumo +滚gun +辊gun +棍gun +衮gun +绲gun +磙gun +鲧gun +滚动gundong +姑娘guniang +雇农gunong +滚烫guntang +棍子gunzi +国guo +过guo +果guo +锅guo +郭guo +涡*guo +裹guo +馘guo +埚guo +掴guo +呙guo +帼guo +崞guo +猓guo +椁guo +虢guo +聒guo +蜾guo +蝈guo +过半guoban +国策guoce +国产guochan +过程guocheng +过错guocuo +过度guodu +过渡guodu +果断guoduan +国法guofa +国防guofang +过分guofen +果腹guofu +果敢guogan +国歌guoge +过关guoguan +过后guohou +国会guohui +国际guoji +国籍guoji +国家guojia +国界guojie +国境guojing +国库guoku +过来guolai +过量guoliang +过虑guolu +锅炉guolu +国民guomin +过目guomu +果木guomu +国难guonan +国内guonei +果皮guopi +果品guopin +国旗guoqi +过期guoqi +国情guoqing +国庆guoqing +过去guoqu +果然guoran +过少guoshao +过甚guoshen +过剩guosheng +过时guoshi +国事guoshi +过失guoshi +果实guoshi +过头guotou +国外guowai +国王guowang +过问guowen +国务guowu +过细guoxi +国药guoyao +国营guoying +过硬guoying +过于guoyu +果园guoyuan +果真guozhen +锅子guozi +顾盼gupan +孤僻gupi +股票gupiao +骨气guqi +姑且guqie +顾全guquan +固然guran +古人guren +骨肉gurou +故事gushi +股市gushi +固守gushou +估算gusuan +固体guti +骨头gutou +故土gutu +顾问guwen +古文guwen +谷物guwu +鼓舞guwu +姑息guxi +故乡guxiang +故意guyi +雇佣guyong +固有guyou +雇员guyuan +鼓掌guzhang +故障guzhang +固执guzhi +拐弯抹角gwmj +国务委员gwwy +国务院gwy +改邪归正gxgz +更新换代gxhd +各行其事gxqs +感性认识gxrs +广西壮族gxzz +工业化gyh +工艺流程gylc +工艺美术gyms +工业品gyp +工艺品gyp +贵阳市gys +公有制gyz +各种各样gzgy +工资级别gzjb +各族人民gzrm +工作上gzs +广州市gzs +贵州省gzs +各自为政gzwz +高瞻远瞩gzyz +高瞻远嘱gzyz +工作者gzz +和h +会h +后h +化h +好h +合h +还h +活h +很h +回h +号h +毫h +花h +或h +海h +话h +红h +火h +黄h +害h +哈ha +蛤*ha +虾*ha +铪ha +哈达hada +还hai +海hai +害hai +孩hai +骸hai +氦hai +亥hai +骇hai +嘿*hai +咳*hai +嗨hai +胲hai +醢hai +海岸haian +海拔haiba +海报haibao +害虫haichong +害处haichu +海岛haidao +海港haigang +海关haiguan +还好haihao +海疆haijiang +海军haijun +海浪hailang +海绵haimian +害怕haipa +海上haishang +还是haishi +海外haiwai +海湾haiwan +海峡haixia +海啸haixiao +害羞haixiu +海洋haiyang +还要haiyao +还有haiyou +海域haiyu +海员haiyuan +孩子haizi +含han +焊han +旱han +喊han +汉han +寒han +汗han +函han +韩han +酣han +憨han +邯han +涵han +罕han +翰han +撼han +捍han +憾han +悍han +邗han +菡han +撖han +阚han +瀚han +晗han +焓han +顸han +颔han +蚶han +鼾han +寒潮hanchao +寒带handai +行*hang +航hang +夯hang +杭hang +吭*hang +巷*hang +沆hang +绗hang +珩hang +颃hang +航标hangbiao +航程hangcheng +航船hangchuan +行当hangdang +航道hangdao +航海hanghai +行家hangjia +行距hangju +航空hangkong +行列hanglie +航路hanglu +航模hangmo +函购hangou +行情hangqing +航天hangtian +航线hangxian +航向hangxiang +航行hangxing +航运hangyun +杭州hangzhou +含糊hanhu +含混hanhun +旱季hanji +函件hanjian +罕见hanjian +汉奸hanjian +喊叫hanjiao +焊接hanjie +寒冷hanleng +翰林hanlin +寒流hanliu +函授hanshou +函数hanshu +酣睡hanshui +寒酸hansuan +捍卫hanwei +含蓄hanxu +寒暄hanxuan +涵养hanyang +含义hanyi +涵义hanyi +汉语hanyu +含冤hanyuan +旱灾hanzai +汉字hanzi +汉族hanzu +好hao +号hao +毫hao +耗hao +豪hao +郝hao +浩hao +镐*hao +壕hao +嚎hao +貉*hao +蒿hao +薅hao +嗥hao +嚆hao +濠hao +灏hao +昊hao +皓hao +颢hao +蚝hao +好比haobi +毫不haobu +号称haocheng +好处haochu +浩大haoda +好歹haodai +浩荡haodang +好的haode +浩繁haofan +耗费haofei +好感haogan +好汉haohan +豪华haohua +好坏haohuai +号角haojiao +耗竭haojie +豪杰haojie +浩劫haojie +好看haokan +毫厘haoli +号令haoling +号码haoma +豪迈haomai +毫毛haomao +毫米haomi +浩淼haomiao +好奇haoqi +豪强haoqiang +豪情haoqing +好人haoren +豪绅haoshen +毫升haosheng +好事haoshi +豪爽haoshuang +好似haosi +耗损haosun +号啕haotao +好听haoting +好玩haowan +毫无haowu +好象haoxiang +好些haoxie +好样haoyang +好意haoyi +号召haozhao +好转haozhuan +汇编程序hbcx +货币回笼hbhl +货币流通hblt +河北省hbs +湖北省hbs +汇编语言hbyy +或多或少hdhs +海淀区hdq +和he +合he +河he +何he +核he +赫he +荷he +褐he +喝he +贺he +呵he +禾he +吓*he +盒he +菏he +貉he +阂he +涸he +鹤he +诃he +劾he +壑he +嗬he +阖he +纥he +曷he +盍he +颌he +蚵he +翮he +和蔼heai +哈尔滨heb +合办heban +荷包hebao +河北hebei +何必hebi +合并hebing +哈尔滨市hebs +何不hebu +喝彩hecai +合唱hechang +何尝hechang +合成hecheng +呵斥hechi +何处hechu +河川hechuan +河床hechuang +贺词heci +何等hedeng +贺电hedian +核定heding +核对hedui +合法hefa +何妨hefang +合肥hefei +合格hege +和好hehao +赫赫hehe +合乎hehu +合伙hehuo +黑hei +嘿hei +黑暗heian +黑白heibai +黑帮heibang +嘿嘿heihei +黑人heiren +黑色heise +黑市heishi +黑夜heiye +合计heji +核计heji +和解hejie +合金hejin +何苦heku +何况hekuang +合理heli +合力heli +合流heliu +河流heliu +合谋hemou +和睦hemu +很hen +狠hen +痕hen +恨hen +河南henan +狠毒hendu +很多henduo +河内henei +行*heng +横heng +衡heng +恒heng +哼heng +亨heng +蘅heng +珩*heng +桁heng +横财hengcai +哼哧hengchi +横幅hengfu +横亘henggen +横贯hengguan +横祸henghuo +横加hengjia +衡量hengliang +横蛮hengman +横批hengpi +衡器hengqi +横扫hengsao +横竖hengshu +恒心hengxin +横行hengxing +恒星hengxing +很好henhao +贺年henian +痕迹henji +很快henkuai +狠心henxin +狠抓henzhua +和平heping +和气heqi +河渠hequ +赫然heran +河山heshan +和尚heshang +合适heshi +核实heshi +合算hesuan +核算hesuan +河滩hetan +合同hetong +贺喜hexi +和谐hexie +核心hexin +贺信hexin +和煦hexu +何以heyi +合影heying +合营heying +核准hezhun +合资hezi +赫兹hezi +合作hezuo +合法权益hfqy +合肥市hfs +宏观世界hgsj +化公为私hgws +好高务远hgwy +核工业部hgyb +海关总署hgzs +后顾之忧hgzy +呼和浩特hhht +轰轰烈烈hhll +换句话说hjhs +黄金时代hjsd +环境卫生hjws +后继有人hjyr +海枯石烂hksl +合理化hlh +糊里糊涂hlht +黑龙江hlj +汗流浃背hljb +汗马功劳hmgl +海南岛hnd +河南省hns +湖南省hns +红hong +洪hong +轰hong +烘hong +哄hong +虹hong +鸿hong +宏hong +弘hong +黉hong +訇hong +讧hong +荭hong +蕻hong +薨hong +闳hong +泓hong +红尘hongchen +轰动hongdong +洪都hongdu +洪峰hongfeng +鸿沟honggou +宏观hongguan +红光hongguang +红花honghua +红军hongjun +红利hongli +洪亮hongliang +轰隆honglong +弘论honglun +鸿毛hongmao +轰鸣hongming +哄骗hongpian +红旗hongqi +红人hongren +红色hongse +洪水hongshui +哄抬hongtai +宏图hongtu +宏伟hongwei +红星hongxing +弘扬hongyang +鸿运hongyun +红晕hongyun +轰炸hongzha +后hou +候hou +厚hou +侯hou +喉hou +猴hou +吼hou +堠hou +後hou +逅hou +瘊hou +篌hou +糇hou +鲎hou +骺hou +后备houbei +后辈houbei +后边houbian +厚薄houbo +候补houbu +后尘houchen +后代houdai +厚道houdao +厚度houdu +后盾houdun +后方houfang +后果houguo +后患houhuan +后悔houhui +后记houji +后进houjin +后劲houjin +后来houlai +喉咙houlong +后门houmen +后面houmian +后期houqi +后勤houqin +后人houren +喉舌houshe +厚实houshi +后嗣housi +后台houtai +后天houtian +后退houtui +后续houxu +候选houxuan +后裔houyi +后缀houzhui +和平共处hpgc +黄埔江hpj +后勤部hqb +何去何从hqhc +合情合理hqhl +好容易hry +好事多磨hsdm +胡思乱想hslx +航天工业部htgb +昏头昏脑hthn +欢天喜地htxd +和*hu +护hu +互hu +湖hu +呼hu +户hu +弧hu +乎hu +胡hu +糊hu +虎hu +忽hu +核*hu +瑚hu +戏*hu +壶hu +葫hu +蝴hu +狐hu +唬hu +沪hu +冱hu +唿hu +囫hu +岵hu +猢hu +怙hu +惚hu +浒hu +滹hu +琥hu +槲hu +轷hu +觳hu +烀hu +煳hu +戽hu +扈hu +祜hu +瓠hu +鹄hu +鹕hu +鹱hu +笏hu +醐hu +斛hu +化hua +花hua +话hua +划hua +滑hua +华hua +画hua +哗hua +猾hua +豁*hua +骅hua +桦hua +砉hua +铧hua +画报huabao +华北huabei +哗变huabian +话柄huabing +划拨huabo +划策huace +画册huace +华东huadong +花朵huaduo +花儿huaer +化肥huafei +花费huafei +划分huafen +化工huagong +华贵huagui +化合huahe +花卉huahui +坏huai +怀huai +划*huai +淮huai +槐huai +徊huai +踝huai +怀抱huaibao +淮北huaibei +坏处huaichu +怀古huaigu +淮海huaihai +怀恨huaihen +怀旧huaijiu +淮南huainan +怀念huainian +坏人huairen +坏事huaishi +怀疑huaiyi +怀着huaizhe +滑稽huaji +画家huajia +话剧huaju +哗啦huala +画廊hualang +华丽huali +画面huamian +化名huaming +还*huan +环huan +换huan +欢huan +缓huan +患huan +幻huan +焕huan +桓huan +唤huan +痪huan +豢huan +涣huan +宦huan +郇huan +奂huan +萑huan +擐huan +圜huan +獾huan +洹huan +浣huan +漶huan +寰huan +逭huan +缳huan +锾huan +鲩huan +鬟huan +华南huanan +欢畅huanchang +缓冲huanchong +幻灯huandeng +欢度huandu +焕发huanfa +黄huang +簧huang +荒huang +皇huang +慌huang +蝗huang +磺huang +凰huang +惶huang +煌huang +晃huang +幌huang +恍huang +谎huang +隍huang +徨huang +湟huang +潢huang +遑huang +璜huang +肓huang +癀huang +蟥huang +篁huang +鳇huang +磺胺huangan +皇朝huangchao +荒诞huangdan +晃荡huangdang +皇帝huangdi +荒废huangfei +黄海huanghai +黄河huanghe +恍惚huanghu +谎话huanghua +黄昏huanghun +黄金huangjin +皇历huangli +荒凉huangliang +荒乱huangluan +慌乱huangluan +慌忙huangmang +荒谬huangmiu +恍然huangran +黄色huangse +黄山huangshan +皇上huangshang +荒唐huangtang +环顾huangu +宦官huanguan +谎言huangyan +慌张huangzhang +幌子huangzi +缓和huanhe +欢呼huanhu +环环huanhuan +滑腻huani +花鸟huaniao +还给huanji +缓急huanji +还价huanjia +环节huanjie +环境huanjing +幻境huanjing +幻景huanjing +欢聚huanju +幻觉huanjue +欢乐huanle +缓慢huanman +患难huannan +唤起huanqi +缓期huanqi +欢庆huanqing +环球huanqiu +寰球huanqiu +换取huanqu +环绕huanrao +涣散huansan +欢声huansheng +环视huanshi +欢送huansong +换算huansuan +欢腾huanteng +欢喜huanxi +幻想huanxiang +欢笑huanxiao +欢心huanxin +欢欣huanxin +环行huanxing +缓刑huanxing +唤醒huanxing +幻影huanying +欢迎huanying +寰宇huanyu +还原huanyuan +患者huanzhe +滑坡huapo +花腔huaqiang +华侨huaqiao +划清huaqing +花圈huaquan +划拳huaquan +哗然huaran +华人huaren +花色huase +化身huashen +化石huashi +划算huasuan +话题huati +滑头huatou +花纹huawen +华夏huaxia +化纤huaxian +画像huaxiang +花絮huaxu +化学huaxue +画押huaya +化验huayan +花样huayang +华裔huayi +话音huayin +话语huayu +花园huayuan +画展huazhan +花招huazhao +华中huazhong +化装huazhuang +化妆huazhuang +湖北hubei +胡扯huche +弧度hudu +忽而huer +呼喊huhan +呼号huhao +呼唤huhuan +互惠huhui +会hui +回hui +灰hui +挥hui +辉hui +汇hui +毁hui +慧hui +恢hui +绘hui +惠hui +徽hui +溃*hui +堕*hui +徊*hui +蛔hui +悔hui +卉hui +晦hui +贿hui +秽hui +烩hui +讳hui +诲hui +诙hui +茴hui +荟hui +蕙hui +咴hui +哕hui +喙hui +隳hui +洄hui +浍hui +彗hui +缋hui +珲hui +桧*hui +晖hui +恚hui +虺hui +蟪hui +麾hui +灰暗huian +回报huibao +汇报huibao +回避huibi +汇编huibian +会场huichang +回潮huichao +灰尘huichen +回春huichun +荟萃huicui +回答huida +回荡huidang +回电huidian +汇兑huidui +挥发huifa +汇费huifei +会风huifeng +回复huifu +恢复huifu +悔改huigai +回顾huigu +惠顾huigu +悔过huiguo +会合huihe +回合huihe +汇合huihe +悔恨huihen +恢弘huihong +会话huihua +回话huihua +绘画huihua +毁坏huihuai +辉煌huihuang +挥霍huihuo +会集huiji +回击huiji +汇集huiji +回家huijia +会见huijian +会聚huiju +汇聚huiju +回扣huikou +汇款huikuan +回来huilai +回笼huilong +汇率huilu +贿赂huilu +会面huimian +毁灭huimie +回民huimin +汇票huipiao +回去huiqu +挥洒huisa +灰色huise +晦涩huise +回收huishou +回首huishou +会谈huitan +会堂huitang +会同huitong +回头huitou +回味huiwei +会晤huiwu +挥舞huiwu +悔悟huiwu +麾下huixia +回想huixiang +回响huixiang +诙谐huixie +灰心huixin +彗星huixing +会演huiyan +汇演huiyan +会议huiyi +回忆huiyi +回音huiyin +辉映huiying +会员huiyuan +会战huizhan +徽章huizhang +会诊huizhen +绘制huizhi +回转huizhuan +汇总huizong +回族huizu +户籍huji +呼叫hujiao +户口hukou +虎口hukou +护理huli +互利huli +护林hulin +呼噜hulu +胡乱huluan +忽略hulue +互勉humian +混hun +浑hun +荤hun +昏hun +婚hun +魂hun +诨hun +馄hun +阍hun +溷hun +湖南hunan +胡闹hunao +昏沉hunchen +混合hunhe +浑厚hunhou +昏黄hunhuang +混迹hunji +婚礼hunli +混乱hunluan +糊弄hunong +婚配hunpei +混入hunru +浑身hunshen +混同huntong +混淆hunxiao +婚姻hunyin +昏庸hunyong +混杂hunza +混帐hunzhang +混浊hunzhuo +浑浊hunzhuo +和*huo +活huo +或huo +火huo +货huo +获huo +伙huo +霍huo +豁huo +惑huo +祸huo +劐huo +藿huo +攉huo +嚯huo +夥huo +钬huo +锪huo +镬huo +耠huo +蠖huo +火把huoba +伙伴huoban +火暴huobao +货币huobi +火柴huochai +火车huoche +豁达huoda +获得huode +霍地huodi +活动huodong +伙房huofang +祸根huogen +祸害huohai +火候huohou +火化huohua +火花huohua +祸患huohuan +活活huohuo +伙计huoji +火箭huojian +火警huojing +火炬huoju +火坑huokeng +活力huoli +霍乱huoluan +活泼huopo +获取huoqu +豁然huoran +货色huose +火山huoshan +获胜huosheng +或是huoshi +伙食huoshi +祸首huoshou +伙同huotong +货物huowu +获悉huoxi +火线huoxian +活现huoxian +或许huoxu +火药huoyao +活页huoye +活跃huoyue +货运huoyun +火灾huozai +火葬huozang +或则huoze +或者huozhe +获准huozhun +湖泊hupo +忽然huran +呼声husheng +护士hushi +忽视hushi +湖水hushui +胡说hushuo +护送husong +胡同hutong +互通hutong +户头hutou +糊涂hutu +护卫huwei +呼吸huxi +互相huxiang +呼啸huxiao +虎穴huxue +护养huyang +呼应huying +呼吁huyu +护照huzhao +互助huzhu +毫无疑问hwyw +互相爱护hxah +横行霸道hxbd +互相帮助hxbz +欢欣鼓舞hxgw +候选人hxr +合作化hzh +杭州市hzs +化整为零hzwl +级j +就j +进j +加j +经j +家j +结j +阶j +间j +件j +及j +解j +较j +机j +军j +接j +教j +极j +九j +见j +基本国策jbgc +基本上jbs +据不完全统计jbwj +饥不择食jbzs +坚持不懈jcbx +集成电路jcdl +基础上jcs +绝大部分jdbf +坚定不移jdby +绝大多数jdds +鉴定会jdh +绝对化jdh +经得起jdq +见多识广jdsg +精打细算jdxs +接二连三jels +解放后jfh +解放军jfj +解放军报jfjb +解放前jfq +仅供参考jgck +机构改革jggg +坚固耐用jgny +襟怀坦白jhtb +计划性jhx +级ji +及ji +机ji +极ji +几ji +积ji +给ji +基ji +其*ji +记ji +己ji +期*ji +系*ji +革*ji +计ji +集ji +即ji +际ji +季ji +激ji +济ji +技ji +击ji +继ji +急ji +剂ji +既ji +纪ji +寄ji +挤ji +鸡ji +迹ji +绩ji +齐*ji +奇*ji +吉ji +脊ji +辑ji +籍ji +疾ji +肌ji +棘ji +畸ji +圾ji +稽ji +箕ji +饥ji +讥ji +姬ji +缉ji +汲ji +嫉ji +蓟ji +冀ji +伎ji +祭ji +悸ji +寂ji +忌ji +妓ji +藉ji +丌ji +亟ji +乩ji +剞ji +佶ji +偈ji +诘ji +墼ji +芨ji +芰ji +荠ji +蒺ji +蕺ji +掎ji +叽ji +咭ji +哜ji +唧ji +岌ji +嵴ji +洎ji +屐ji +骥ji +畿ji +玑ji +楫ji +殛ji +戟ji +戢ji +赍ji +觊ji +犄ji +齑ji +矶ji +羁ji +嵇ji +稷ji +瘠ji +虮ji +笈ji +笄ji +暨ji +跻ji +跽ji +霁ji +鲚ji +鲫ji +髻ji +麂ji +加jia +家jia +架jia +价jia +甲jia +夹jia +假jia +钾jia +贾jia +稼jia +驾jia +嘉jia +枷jia +佳jia +荚jia +颊jia +嫁jia +茄*jia +挟*jia +嘏*jia +伽jia +郏jia +葭jia +岬jia +浃jia +迦jia +珈jia +戛jia +胛jia +恝jia +铗jia +镓jia +痂jia +瘕jia +袷jia +蛱jia +笳jia +袈jia +跏jia +加班jiaban +甲板jiaban +加倍jiabei +甲虫jiachong +家畜jiachu +家当jiadang +家底jiadi +假定jiading +加法jiafa +家访jiafang +价格jiage +加工jiagong +佳话jiahua +家伙jiahuo +加急jiaji +嘉奖jiajiang +家教jiajiao +嫁接jiajie +佳节jiajie +假借jiajie +加紧jiajin +家境jiajing +家具jiaju +加剧jiaju +加快jiakuai +加仑jialun +加码jiama +假冒jiamao +家门jiamen +加密jiami +加冕jiamian +价目jiamu +间jian +件jian +见jian +建jian +坚jian +减jian +检jian +践jian +尖jian +简jian +碱jian +剪jian +艰jian +渐jian +肩jian +键jian +健jian +柬jian +鉴jian +剑jian +歼jian +监jian +兼jian +浅*jian +奸jian +箭jian +茧jian +舰jian +俭jian +笺jian +煎jian +缄jian +硷jian +拣jian +捡jian +荐jian +槛jian +贱jian +饯jian +溅jian +涧jian +僭jian +谏jian +谫jian +菅jian +蒹jian +搛jian +囝*jian +湔jian +蹇jian +謇jian +缣jian +枧jian +楗jian +戋jian +戬jian +牮jian +犍jian +毽jian +腱jian +睑jian +锏jian +鹣jian +裥jian +笕jian +翦jian +趼jian +踺jian +鲣jian +鞯jian +吉安jian +煎熬jianao +简报jianbao +渐变jianbian +简便jianbian +简编jianbian +鉴别jianbie +兼并jianbing +尖兵jianbing +剪裁jiancai +剪彩jiancai +检测jiance +检查jiancha +检察jiancha +监察jiancha +减产jianchan +建成jiancheng +简称jiancheng +坚持jianchi +简单jiandan +建党jiandang +减低jiandi +检点jiandian +间谍jiandie +坚定jianding +鉴定jianding +监督jiandu +间断jianduan +尖端jianduan +简短jianduan +舰队jiandui +健儿jianer +减法jianfa +肩负jianfu +将jiang +降jiang +讲jiang +强*jiang +江jiang +浆jiang +蒋jiang +奖jiang +疆jiang +僵jiang +姜jiang +桨jiang +匠jiang +酱jiang +茳jiang +洚jiang +绛jiang +缰jiang +犟jiang +礓jiang +耩jiang +糨jiang +豇jiang +奖杯jiangbei +疆场jiangchang +奖惩jiangcheng +僵持jiangchi +降低jiangdi +间隔jiange +讲稿jianggao +江湖jianghu +僵化jianghua +讲话jianghua +降级jiangji +降价jiangjia +讲解jiangjie +疆界jiangjie +将近jiangjin +奖金jiangjin +讲究jiangjiu +僵局jiangju +将军jiangjun +讲课jiangke +将来jianglai +讲理jiangli +奖励jiangli +降临jianglin +将领jiangling +降落jiangluo +江南jiangnan +奖品jiangpin +讲评jiangping +奖券jiangquan +江山jiangshan +讲师jiangshi +僵尸jiangshi +讲授jiangshou +讲述jiangshu +降水jiangshui +江苏jiangsu +讲台jiangtai +讲坛jiangtan +疆土jiangtu +坚固jiangu +兼顾jiangu +监管jianguan +建国jianguo +降温jiangwen +江西jiangxi +讲习jiangxi +匠心jiangxin +讲学jiangxue +讲演jiangyan +将要jiangyao +讲义jiangyi +僵硬jiangying +奖章jiangzhang +讲座jiangzuo +监护jianhu +简化jianhua +间或jianhuo +奸计jianji +歼击jianji +剪辑jianji +减价jianjia +渐渐jianjian +健将jianjiang +建交jianjiao +间接jianjie +见解jianjie +简介jianjie +简洁jianjie +简捷jianjie +渐进jianjin +监禁jianjin +检举jianju +艰巨jianju +坚决jianjue +健康jiankang +尖刻jianke +坚苦jianku +艰苦jianku +监牢jianlao +建立jianli +尖利jianli +简历jianli +简练jianlian +简陋jianlou +简略jianlue +健美jianmei +减免jianmian +歼灭jianmie +简明jianming +缄默jianmo +艰难jiannan +键盘jianpan +简拼jianpin +简朴jianpu +俭朴jianpu +坚强jianqiang +减轻jianqing +健全jianquan +兼任jianren +坚韧jianren +兼容jianrong +尖锐jianrui +减弱jianruo +艰涩jianse +鉴赏jianshang +减少jianshao +建设jianshe +艰深jianshen +见识jianshi +坚实jianshi +监视jianshi +建树jianshu +减速jiansu +检索jiansuo +践踏jianta +健谈jiantan +检讨jiantao +简体jianti +舰艇jianting +减退jiantui +健忘jianwang +间文jianwen +见闻jianwen +间隙jianxi +奸细jianxi +艰险jianxian +见效jianxiao +间歇jianxie +简写jianxie +坚信jianxin +艰辛jianxin +减刑jianxing +检修jianxiu +简讯jianxun +检验jianyan +简要jianyao +建议jianyi +坚毅jianyi +简易jianyi +奸淫jianyin +坚硬jianying +剪影jianying +鉴于jianyu +监狱jianyu +减员jianyuan +检阅jianyue +建造jianzao +简则jianze +坚贞jianzhen +监制jianzhi +简直jianzhi +兼职jianzhi +建筑jianzhu +简装jianzhuang +健壮jianzhuang +较jiao +教jiao +交jiao +角jiao +叫jiao +脚jiao +胶jiao +浇jiao +焦jiao +觉*jiao +校*jiao +搅jiao +酵jiao +郊jiao +铰jiao +窖jiao +椒jiao +礁jiao +骄jiao +娇jiao +嚼jiao +矫jiao +侥jiao +狡jiao +饺jiao +缴jiao +绞jiao +剿jiao +轿jiao +佼jiao +僬jiao +艽jiao +茭jiao +挢jiao +噍jiao +峤jiao +徼jiao +湫*jiao +姣jiao +敫jiao +皎jiao +鹪jiao +蛟jiao +醮jiao +跤jiao +鲛jiao +骄傲jiaoao +搅拌jiaoban +狡辩jiaobian +教材jiaocai +交叉jiaocha +教程jiaocheng +交错jiaocuo +较大jiaoda +交代jiaodai +交淡jiaodan +教导jiaodao +交点jiaodian +焦点jiaodian +校订jiaoding +角度jiaodu +校对jiaodui +较多jiaoduo +焦耳jiaoer +交锋jiaofeng +交付jiaofu +浇灌jiaoguan +娇贵jiaogui +叫喊jiaohan +较好jiaohao +叫好jiaohao +狡猾jiaohua +交换jiaohuan +叫唤jiaohuan +教诲jiaohui +缴获jiaohuo +交际jiaoji +矫健jiaojian +交接jiaojie +交界jiaojie +叫苦jiaoku +较快jiaokuai +教练jiaolian +较量jiaoliang +交流jiaoliu +搅乱jiaoluan +角落jiaoluo +叫骂jiaoma +剿灭jiaomie +酵母jiaomu +交纳jiaona +缴纳jiaona +娇嫩jiaonen +交配jiaopei +骄气jiaoqi +交情jiaoqing +郊区jiaoqu +叫嚷jiaorang +角色jiaose +交涉jiaoshe +教师jiaoshi +教授jiaoshou +教唆jiaosuo +脚踏jiaota +交谈jiaotan +教堂jiaotang +交替jiaoti +教条jiaotiao +交通jiaotong +郊外jiaowai +交往jiaowang +较为jiaowei +狡黠jiaoxia +叫嚣jiaoxiao +侥幸jiaoxing +绞刑jiaoxing +教学jiaoxue +教训jiaoxun +教养jiaoyang +骄阳jiaoyang +教益jiaoyi +交易jiaoyi +交谊jiaoyi +教育jiaoyu +教员jiaoyuan +狡诈jiaozha +校正jiaozheng +脚注jiaozhu +角逐jiaozhu +浇铸jiaozhu +校准jiaozhun +焦灼jiaozhuo +娇纵jiaozong +叫做jiaozuo +家谱jiapu +假期jiaqi +价钱jiaqian +加强jiaqiang +假日jiari +加入jiaru +假如jiaru +假若jiaruo +加上jiashang +假设jiashe +加深jiashen +假使jiashi +架势jiashi +驾驶jiashi +家属jiashu +假说jiashuo +加速jiasu +枷锁jiasuo +家庭jiating +家乡jiaxiang +假想jiaxiang +家业jiaye +加以jiayi +佳音jiayin +家用jiayong +加油jiayou +家园jiayuan +夹杂jiaza +加载jiazai +家长jiazhang +价值jiazhi +加重jiazhong +假装jiazhuang +嫁妆jiazhuang +架子jiazi +家族jiazu +击败jibai +羁绊jiban +几倍jibei +基本jiben +击毙jibi +级别jibie +疾病jibing +计策jice +基层jiceng +稽查jicha +机场jichang +集成jicheng +继承jicheng +计酬jichou +基础jichu +机床jichuang +几次jici +急促jicu +积存jicun +寄存jicun +极大jida +亟待jidai +激荡jidang +记得jide +基地jidi +机电jidian +极点jidian +基调jidiao +机动jidong +激动jidong +极度jidu +几度jidu +即度jidu +季度jidu +基督jidu +嫉妒jidu +忌妒jidu +极端jiduan +结jie +阶jie +解jie +接jie +节jie +家*jie +界jie +截jie +介jie +借jie +价*jie +届jie +街jie +揭jie +洁jie +杰jie +竭jie +皆jie +秸jie +劫jie +桔jie +捷jie +睫jie +姐jie +戒jie +藉jie +芥jie +疥jie +诫jie +楷*jie +偈*jie +讦jie +诘*jie +拮jie +喈jie +嗟jie +婕jie +孑jie +桀jie +碣jie +疖jie +颉jie +蚧jie +羯jie +鲒jie +骱jie +饥饿jie +结案jiean +洁白jiebai +接班jieban +捷报jiebao +戒备jiebei +结彩jiecai +节操jiecao +阶层jieceng +劫持jiechi +杰出jiechu +解除jiechu +接触jiechu +戒除jiechu +揭穿jiechuan +结存jiecun +解答jieda +接待jiedai +借贷jiedai +街道jiedao +解冻jiedong +阶段jieduan +截断jieduan +揭发jiefa +借方jiefang +解放jiefang +街坊jiefang +结构jiegou +解雇jiegu +借故jiegu +结果jieguo +结合jiehe +结核jiehe +结婚jiehun +阶级jieji +接见jiejian +节俭jiejian +借鉴jiejian +结交jiejiao +姐姐jiejie +接近jiejin +竭尽jiejin +结晶jiejing +捷径jiejing +洁净jiejing +解救jiejiu +结局jieju +解决jiejue +孑孓jiejue +解开jiekai +揭开jiekai +解渴jieke +接口jiekou +借口jiekou +借款jiekuan +竭力jieli +接连jielian +揭露jielu +戒律jielu +结论jielun +解闷jiemen +结盟jiemeng +界面jiemian +节目jiemu +揭幕jiemu +接纳jiena +解聘jiepin +解剖jiepou +节气jieqi +接洽jieqia +截取jiequ +既而jier +节日jieri +介入jieru +解散jiesan +介绍jieshao +节省jiesheng +届时jieshi +结实jieshi +解释jieshi +揭示jieshi +解手jieshou +接受jieshou +接收jieshou +结束jieshu +解说jieshuo +结算jiesuan +解体jieti +阶梯jieti +接替jieti +接头jietou +街头jietou +解脱jietuo +结尾jiewei +解围jiewei +接吻jiewen +解析jiexi +界线jiexian +界限jiexian +揭晓jiexiao +戒严jieyan +结业jieye +介意jieyi +接应jieying +结余jieyu +节约jieyue +结帐jiezhang +接着jiezhao +节制jiezhi +介质jiezhi +戒指jiezhi +借支jiezhi +截止jiezhi +借助jiezhu +节奏jiezou +杰作jiezuo +激发jifa +技法jifa +讥讽jifeng +几个jige +及格jige +技工jigong +记功jigong +机构jigou +叽咕jigu +机关jiguan +籍贯jiguan +极光jiguang +激光jiguang +记过jiguo +极好jihao +记号jihao +集合jihe +几何jihe +稽核jihe +几乎jihu +激化jihua +计划jihua +饥荒jihuang +机会jihui +集会jihui +击毁jihui +忌讳jihui +积极jiji +机件jijian +计件jijian +急件jijian +击剑jijian +即将jijiang +计较jijiao +季节jijie +急进jijin +基金jijin +机警jijing +即景jijing +寂静jijing +急救jijiu +积聚jiju +急剧jiju +急遽jiju +寄居jiju +季刊jikan +即刻jike +疾苦jiku +击溃jikui +积累jilei +极力jili +吉利jili +激励jili +伎俩jilia +计量jiliang +寂寥jiliao +激烈jilie +吉林jilin +机灵jiling +激流jiliu +记录jilu +纪律jilu +纪录jilu +辑录jilu +击落jiluo +急忙jimang +机密jimi +寂寞jimo +计谋jimou +进jin +金jin +近jin +紧jin +斤jin +今jin +尽jin +仅jin +劲jin +浸jin +禁jin +津jin +筋jin +锦jin +晋jin +巾jin +襟jin +谨jin +靳jin +烬jin +卺jin +荩jin +堇jin +噤jin +馑jin +廑jin +妗jin +缙jin +瑾jin +槿jin +赆jin +觐jin +衿jin +缉拿jina +济南jinan +禁闭jinbi +锦标jinbiao +进步jinbu +浸沉jinchen +进程jincheng +进出jinchu +紧凑jincou +近代jindai +劲敌jindi +进度jindu +金额jine +机能jineng +技能jineng +进而jiner +进犯jinfan +经jing +精jing +京jing +径jing +井jing +静jing +竟jing +晶jing +净jing +境jing +镜jing +景jing +警jing +劲*jing +茎jing +敬jing +惊jing +睛jing +竞jing +荆jing +兢jing +鲸jing +粳jing +痉jing +靖jing +刭jing +儆jing +阱jing +菁jing +獍jing +憬jing +泾jing +迳jing +弪jing +婧jing +肼jing +胫jing +腈jing +旌jing +靓*jing +敬爱jingai +警报jingbao +警备jingbei +精兵jingbing +精采jingcai +精彩jingcai +警察jingcha +经常jingchang +精粹jingcui +静电jingdian +经典jingdian +惊动jingdong +精度jingdu +经费jingfei +精干jinggan +竟敢jinggan +警告jinggao +经过jingguo +净化jinghua +精华jinghua +经济jingji +竞技jingji +荆棘jingji +精简jingjian +境界jingjie +警戒jingjie +经久jingjiu +惊恐jingkong +经理jingli +经历jingli +精力jingli +敬礼jingli +精练jinglian +精良jingliang +经络jingluo +精美jingmei +精密jingmi +精明jingming +进攻jingong +敬佩jingpei +精辟jingpi +景气jingqi +惊奇jingqi +精巧jingqiao +精确jingque +竟然jingran +竞赛jingsai +景色jingse +经商jingshang +精神jingshen +经手jingshou +经受jingshou +精髓jingsui +静态jingtai +惊叹jingtan +晶体jingti +警惕jingti +精通jingtong +镜头jingtou +筋骨jingu +禁锢jingu +尽管jinguan +巾帼jinguo +经委jingwei +警卫jingwei +敬畏jingwei +景物jingwu +精细jingxi +京戏jingxi +惊险jingxian +景象jingxiang +经销jingxiao +经心jingxin +精心jingxin +惊心jingxin +惊醒jingxing +竞选jingxuan +惊讶jingya +经验jingyan +敬仰jingyang +经营jingying +晶莹jingying +经由jingyou +境遇jingyu +精湛jingzhan +竞争jingzheng +精制jingzhi +径直jingzhi +精致jingzhi +静止jingzhi +净值jingzhi +竟址jingzhi +净重jingzhong +镜子jingzi +静坐jingzuo +近海jinhai +今后jinhou +近乎jinhu +进化jinhua +几年jinian +记念jinian +纪念jinian +晋级jinji +紧急jinji +近郊jinjiao +紧紧jinjin +仅仅jinjin +进军jinjun +进口jinkou +尽快jinkuai +近况jinkuang +进来jinlai +近来jinlai +尽力jinli +尽量jinliang +斤两jinliang +禁令jinling +劲旅jinlu +紧密jinmi +近年jinnian +今年jinnian +金牌jinpai +紧迫jinpo +近期jinqi +近前jinqian +金钱jinqian +尽情jinqing +进去jinqu +进取jinqu +禁区jinqu +近日jinri +今日jinri +金融jinrong +进入jinru +浸入jinru +谨慎jinshen +晋升jinsheng +今是jinshi +尽是jinshi +近视jinshi +金属jinshu +近似jinsi +紧缩jinsuo +今天jintian +津贴jintie +尽头jintou +劲头jintou +浸透jintou +进退jintui +今晚jinwan +今昔jinxi +尽心jinxin +进行jinxing +进修jinxiu +锦秀jinxiu +谨严jinyan +紧要jinyao +进展jinzhan +紧张jinzhang +今朝jinzhao +紧着jinzhe +禁止jinzhi +尽职jinzhi +进驻jinzhu +金子jinzi +炯jiong +窘jiong +迥jiong +炅*jiong +扃jiong +窘迫jiongpo +迥然jiongran +击破jipo +急迫jipo +及其jiqi +极其jiqi +激起jiqi +机器jiqi +机枪jiqiang +技巧jiqiao +急切jiqie +激情jiqing +汲取jiqu +集权jiquan +既然jiran +己任jiren +继任jiren +即日jiri +吉日jiri +肌肉jirou +极少jishao +寄生jisheng +即是jishi +及时jishi +几时jishi +计时jishi +即时jishi +即使jishi +记事jishi +基石jishi +集市jishi +级数jishu +基数jishu +计数jishu +记述jishu +技术jishu +祭祀jisi +激素jisu +急速jisu +计算jisuan +机体jiti +集体jiti +肌体jiti +几天jitian +集团jituan +寄托jituo +就jiu +九jiu +旧jiu +究jiu +久jiu +救jiu +酒jiu +纠jiu +揪jiu +玖jiu +韭jiu +灸jiu +厩jiu +臼jiu +舅jiu +咎jiu +疚jiu +僦jiu +啾jiu +阄jiu +柩jiu +桕jiu +鸠jiu +鹫jiu +赳jiu +鬏jiu +就餐jiucan +纠察jiucha +纠缠jiuchan +就此jiuci +就地jiudi +就范jiufan +纠纷jiufen +纠葛jiuge +救国jiuguo +救护jiuhu +救火jiuhuo +纠集jiuji +鸠集jiuji +救济jiuji +救急jiuji +九江jiujiang +九届jiujie +就近jiujin +酒精jiujing +究竟jiujing +救命jiuming +救生jiusheng +就是jiushi +就事jiushi +救亡jiuwang +久违jiuwei +酒窝jiuwo +酒席jiuxi +救险jiuxian +揪心jiuxin +救星jiuxing +就绪jiuxu +就学jiuxue +久仰jiuyang +就要jiuyao +就业jiuye +久远jiuyuan +九月jiuyue +救灾jiuzai +纠正jiuzheng +就职jiuzhi +救治jiuzhi +九洲jiuzhou +救助jiuzhu +极为jiwei +纪委jiwei +极限jixian +迹象jixiang +吉祥jixiang +讥笑jixiao +机械jixie +记性jixing +急性jixing +畸形jixing +即兴jixing +吉凶jixiong +几许jixu +积蓄jixu +继续jixu +记叙jixu +急需jixu +集训jixun +积压jiya +羁押jiya +给养jiyang +机要jiyao +纪要jiyao +给以jiyi +记忆jiyi +技艺jiyi +基因jiyin +急用jiyong +基于jiyu +急于jiyu +机遇jiyu +给予jiyu +寄予jiyu +觊觎jiyu +纪元jiyuan +集约jiyue +记载jizai +及早jizao +急躁jizao +激增jizeng +记帐jizhang +记者jizhe +集镇jizhen +机制jizhi +及至jizhi +机智jizhi +集中jizhong +击中jizhong +记住jizhu +基准jizhun +集资jizi +经济核算jjhs +聚精会神jjhs +将计就计jjjj +戒骄戒躁jjjz +近几年来jjnl +竭尽全力jjql +节假日jjr +积极性jjx +经济效益jjxy +兢兢业业jjyy +精简整编jjzb +叽叽喳喳jjzz +艰苦奋斗jkfd +尽可能jkn +教科书jks +俱乐部jlb +交流电jld +吉林省jls +价廉物美jlwm +纪律性jlx +纪念碑jnb +几年来jnl +近年来jnl +纪念品jnp +济南市jns +吉普车jpc +坚强不屈jqbq +奖勤罚懒jqfl +机器人jqr +急起直追jqzz +截然不同jrbt +兼容性jrx +积少成多jscd +金山公司jsgs +集思广益jsgy +精神焕发jshf +计算机jsj +尽善尽美jsjm +集市贸易jsmy +介绍人jsr +就是说jss +计算所jss +江苏省jss +举世闻名jswm +介绍信jsx +技术员jsy +计算中心jszx +交通部jtb +家庭出身jtcs +惊天动地jtdd +具体地说jtds +晶体管jtg +交通工具jtgj +脚踏实地jtsd +具体说来jtsl +具ju +据ju +局ju +举ju +车*ju +句ju +聚ju +距ju +巨ju +居ju +锯ju +剧ju +矩ju +拒ju +柜*ju +桔*ju +鞠ju +拘ju +狙ju +疽ju +驹ju +菊ju +咀ju +沮ju +踞ju +俱ju +惧ju +炬ju +倨ju +讵ju +苣ju +苴ju +莒ju +掬ju +遽ju +屦ju +琚ju +枸*ju +椐ju +榘ju +榉ju +橘ju +犋ju +飓ju +钜ju +锔ju +窭ju +裾ju +趄ju +醵ju +踽ju +龃ju +雎ju +瞿*ju +鞫ju +卷juan +捐juan +鹃juan +娟juan +倦juan +眷juan +绢juan +俊*juan +鄄juan +狷juan +涓juan +桊juan +蠲juan +锩juan +镌juan +隽juan +卷进juanjin +捐款juankuan +眷恋juanlian +眷念juannian +捐躯juanqu +卷入juanru +眷属juanshu +捐献juanxian +卷烟juanyan +卷帙juanzhi +捐助juanzhu +卷宗juanzong +举办juban +具备jubei +剧本juben +巨变jubian +局部jubu +拘捕jubu +剧场juchang +据此juci +巨大juda +举动judong +居多juduo +决jue +觉jue +绝jue +角*jue +脚*jue +掘jue +嚼*jue +撅jue +攫jue +抉jue +倔jue +爵jue +诀jue +厥jue +劂jue +谲jue +矍jue +蕨jue +嗟*jue +噘jue +噱jue +崛jue +獗jue +孓jue +珏jue +桷jue +橛jue +爝jue +镢jue +蹶jue +觖jue +巨额jue +诀别juebie +决不juebu +绝不juebu +决策juece +觉察juecha +觉得juede +决定jueding +决断jueduan +绝对juedui +绝迹jueji +倔强juejiang +绝交juejiao +绝径juejing +绝境juejing +绝句jueju +决裂juelie +绝路juelu +绝密juemi +绝妙juemiao +崛起jueqi +诀窍jueqiao +决赛juesai +绝食jueshi +决死juesi +决算juesuan +绝望juewang +爵位juewei +觉悟juewu +决心juexin +觉醒juexing +决议jueyi +绝缘jueyuan +抉择jueze +决战juezhan +绝招juezhao +绝症juezheng +巨幅jufu +居功jugong +鞠躬jugong +句号juhao +聚合juhe +聚会juhui +聚集juji +巨匠jujiang +拘谨jujin +拒绝jujue +咀嚼jujue +距离juli +举例juli +剧烈julie +拘留juliu +局面jumian +居民jumin +剧目jumu +军jun +均jun +菌jun +君jun +龟*jun +钧jun +峻jun +俊jun +竣jun +浚jun +郡jun +骏jun +捃jun +皲jun +筠jun +麇jun +军操juncao +君臣junchen +均等jundeng +军队jundui +军法junfa +军阀junfa +军服junfu +军港jungang +军工jungong +竣工jungong +均衡junheng +军火junhuo +拘泥juni +军机junji +军纪junji +军舰junjian +俊杰junjie +军垦junken +军粮junliang +军令junling +骏马junma +军民junmin +军旗junqi +峻峭junqiao +俊俏junqiao +军区junqu +军权junquan +军人junren +军事junshi +军师junshi +军属junshu +军团juntuan +军委junwei +军衔junxian +军校junxiao +军械junxie +军心junxin +俊秀junxiu +军需junxu +军训junxun +军医junyi +军营junying +军用junyong +军邮junyou +均匀junyun +军长junzhang +军政junzheng +君主junzhu +军装junzhuang +君子junzi +俱全juquan +居然juran +遽然juran +沮丧jusang +局势jushi +举手jushou +拘束jushu +据说jushuo +具体juti +剧团jutuan +据悉juxi +局限juxian +居心juxin +举行juxing +矩形juxing +巨型juxing +具有juyou +据有juyou +剧院juyuan +局长juzhang +剧照juzhao +举止juzhi +居中juzhong +剧终juzhong +巨著juzhu +居住juzhu +句子juzi +节外生枝jwsz +惊心动魄jxdp +继续革命jxgm +机械化jxh +江西省jxs +谨小慎微jxsw +局限性jxx +教育部jyb +进一步jyb +家用电器jydq +教育方针jyfz +家喻户晓jyhx +加以解决jyjj +记忆力jyl +精益求精jyqj +教研室jys +见义勇为jyyw +旧中国jzg +建筑物jzw +可k +开k +看k +克k +孔k +科k +口k +空k +苦k +快k +考k +刻k +靠k +况k +块k +困k +宽k +矿k +抗k +卡k +卡ka +喀ka +咖ka +咯ka +佧ka +咔ka +胩ka +喀嚓kacha +卡车kache +咖啡kafei +开kai +凯kai +揩kai +楷kai +慨kai +剀kai +垲kai +蒈kai +忾kai +恺kai +铠kai +锎kai +锴kai +开办kaiban +开遍kaibian +开采kaicai +开场kaichang +开车kaiche +开除kaichu +开创kaichuang +开导kaidao +开刀kaidao +开动kaidong +开端kaiduan +开发kaifa +开放kaifang +开封kaifeng +开赴kaifu +凯歌kaige +开关kaiguan +开航kaihang +开户kaihu +开花kaihua +开怀kaihuai +开荒kaihuang +开会kaihui +开掘kaijue +开垦kaiken +开口kaikou +开矿kaikuang +开阔kaikuo +开朗kailang +开郎kailang +开路kailu +开明kaiming +楷模kaimo +开幕kaimu +开炮kaipao +开辟kaipi +开启kaiqi +开枪kaiqiang +开窍kaiqiao +开设kaishe +开始kaishi +开庭kaiting +开头kaitou +开脱kaituo +开拓kaituo +开外kaiwai +开销kaixiao +开心kaixin +凯旋kaixuan +开学kaixue +开颜kaiyan +开业kaiye +开战kaizhan +开展kaizhan +开张kaizhang +开支kaizhi +看kan +刊kan +坎kan +槛*kan +堪kan +勘kan +砍kan +嵌*kan +侃kan +莰kan +阚*kan +戡kan +龛kan +瞰kan +勘测kance +勘察kancha +看出kanchu +看待kandai +看到kandao +刊登kandeng +看法kanfa +砍伐kanfa +抗kang +康kang +炕kang +慷kang +糠kang +扛kang +亢kang +伉kang +闶kang +钪kang +亢奋kangfen +康复kangfu +抗衡kangheng +抗击kangji +亢进kangjin +抗拒kangju +伉俪kangli +抗日kangri +看管kanguan +抗议kangyi +看见kanjian +坎坷kanke +看来kanlai +看齐kanqi +刊头kantou +看望kanwang +刊物kanwu +勘误kanwu +看样kanyang +刊载kanzai +考kao +靠kao +拷kao +烤kao +尻kao +栲kao +犒kao +铐kao +拷贝kaobei +靠边kaobian +考查kaocha +考察kaocha +考核kaohe +靠近kaojin +考究kaojiu +靠拢kaolong +考虑kaolu +考勤kaoqin +靠山kaoshan +考试kaoshi +考题kaoti +考验kaoyan +考证kaozheng +卡片kapian +看不惯kbg +看不起kbq +刻不容缓kbrh +开诚布公kcbg +矿产资源kczy +扩大化kdh +可ke +克ke +科ke +刻ke +客ke +壳ke +颗ke +棵ke +柯ke +呵*ke +坷ke +苛ke +磕ke +咳ke +渴ke +课ke +嗑ke +岢ke +恪ke +溘ke +骒ke +缂ke +珂ke +轲ke +氪ke +瞌ke +钶ke +锞ke +稞ke +疴ke +窠ke +颏ke +蝌ke +髁ke +可爱keai +科班keban +课本keben +可比kebi +刻薄kebo +可不kebu +客车keche +课程kecheng +可耻kechi +可恶kee +可风kefeng +可否kefou +克服kefu +可观keguan +客观keguan +可贵kegui +可好kehao +可恨kehen +刻划kehua +刻画kehua +克己keji +客机keji +科技keji +可见kejian +科教kejiao +可敬kejing +窠臼kejiu +科举keju +可靠kekao +苛刻keke +可口kekou +克扣kekou +刻苦keku +克拉kela +克朗kelang +颗粒keli +可怜kelian +科目kemu +肯ken +啃ken +垦ken +恳ken +裉ken +肯定kending +可能keneng +坑keng +吭keng +铿keng +坑道kengdao +坑害kenghai +铿锵kengqiang +恳切kenqie +恳求kenqiu +垦殖kenzhi +可怕kepa +磕碰kepeng +科普kepu +客气keqi +可亲keqin +可取kequ +客人keren +客商keshang +可是keshi +科室keshi +课堂ketang +客套ketao +课题keti +客体keti +客厅keting +磕头ketou +可望kewang +渴望kewang +可喜kexi +可惜kexi +可行kexing +科学kexue +科研keyan +可以keyi +可疑keyi +刻意keyi +科员keyuan +科长kezhang +可知kezhi +克制kezhi +狂风暴雨kfby +克己奉公kjfg +科技司kjs +苦口婆心kkpx +昆明市kms +可能性knx +孔kong +空kong +控kong +恐kong +倥kong +崆kong +箜kong +空白kongbai +恐怖kongbu +控拆kongchai +空洞kongdong +空额konge +空乏kongfa +控告konggao +空喊konghan +恐吓konghe +空话konghua +恐慌konghuang +空间kongjian +空降kongjiang +恐惧kongju +空军kongjun +空旷kongkuang +恐龙konglong +空虑konglu +恐怕kongpa +空气kongqi +空前kongqian +孔雀kongque +控诉kongsu +空谈kongtan +空头kongtou +空文kongwen +空隙kongxi +空闲kongxian +空想kongxiang +空虚kongxu +空运kongyun +控制kongzhi +空中kongzhong +口kou +扣kou +抠kou +寇kou +芤kou +蔻kou +叩kou +眍kou +筘kou +口岸kouan +叩拜koubai +口才koucai +扣除kouchu +口传kouchuan +口服koufu +口供kougong +口号kouhao +口红kouhong +口角koujiao +口径koujing +口诀koujue +口令kouling +扣留kouliu +口气kouqi +口腔kouqiang +口哨koushao +口试koushi +口述koushu +口头koutou +叩头koutou +口信kouxin +扣押kouya +口语kouyu +看起来kql +口若悬河krxh +口是心非ksxf +苦ku +库ku +枯ku +酷ku +哭ku +窟ku +裤ku +刳ku +堀ku +喾ku +绔ku +骷ku +跨kua +夸kua +垮kua +挎kua +胯kua +侉kua +跨步kuabu +夸大kuada +跨度kuadu +会*kuai +快kuai +块kuai +筷kuai +侩kuai +蒯kuai +郐kuai +哙kuai +狯kuai +浍*kuai +脍kuai +会计kuaiji +快乐kuaile +快速kuaisu +宽kuan +款kuan +髋kuan +宽敞kuanchang +宽绰kuanchuo +宽大kuanda +宽待kuandai +款待kuandai +宽度kuandu +况kuang +矿kuang +狂kuang +框kuang +匡kuang +筐kuang +眶kuang +旷kuang +诓kuang +诳kuang +邝kuang +圹kuang +夼kuang +哐kuang +纩kuang +贶kuang +矿藏kuangcang +矿产kuangchan +狂风kuangfeng +矿工kuanggong +旷工kuanggong +矿井kuangjing +框框kuangkuang +哐啷kuanglang +况且kuangqie +矿区kuangqu +矿泉kuangquan +狂热kuangre +矿山kuangshan +矿石kuangshi +框图kuangtu +宽广kuanguang +狂妄kuangwang +矿物kuangwu +旷野kuangye +宽宏kuanhong +宽厚kuanhou +宽阔kuankuo +宽容kuanrong +款式kuanshi +宽恕kuanshu +款项kuanxiang +宽心kuanxin +宽裕kuanyu +垮台kuatai +跨越kuayue +夸张kuazhang +裤衩kucha +库存kucun +哭喊kuhan +奎kui +溃kui +馈kui +亏kui +盔kui +岿kui +窥kui +葵kui +魁kui +傀kui +愧kui +馗kui +匮kui +夔kui +隗kui +蒉kui +揆kui +喹kui +喟kui +悝kui +愦kui +逵kui +暌kui +睽kui +聩kui +蝰kui +篑kui +跬kui +亏本kuiben +窥测kuice +亏待kuidai +愧疚kuijiu +亏空kuikong +亏损kuisun +魁梧kuiwu +溃疡kuiyang +枯竭kujie +库仑kulun +苦闷kumen +枯木kumu +困kun +昆kun +坤kun +捆kun +悃kun +阃kun +琨kun +锟kun +醌kun +鲲kun +髡kun +苦难kunan +苦恼kunao +困厄kune +困乏kunfa +困惑kunhuo +困境kunjing +困苦kunku +昆明kunming +困难kunnan +扩kuo +括kuo +适*kuo +阔kuo +廓kuo +栝*kuo +蛞kuo +阔别kuobie +扩充kuochong +阔绰kuochuo +扩大kuoda +括号kuohao +扩建kuojian +阔气kuoqi +扩展kuozhan +扩张kuozhang +哭泣kuqi +酷暑kushu +苦头kutou +苦维kuwei +枯萎kuwei +酷刑kuxing +苦于kuyu +枯燥kuzao +可想而知kxez +科学家kxj +科学技术kxjs +可行性kxx +科学院kxy +科研部kyb +开源节流kyjl +看样子kyz +了l +来l +量l +理l +路l +里l +论l +两l +利l +领l +流l +力l +立l +料l +连l +老l +六l +轮l +类l +列l +拉la +落*la +啦la +蜡la +腊la +蓝la +垃la +喇la +辣la +剌la +邋la +旯la +砬la +瘌la +喇叭laba +来lai +赖lai +莱lai +崃lai +徕lai +涞lai +濑lai +赉lai +睐lai +铼lai +癞lai +籁lai +来宾laibin +来到laidao +来犯laifan +来访laifang +来函laihan +来回laihui +来历laili +来临lailin +赖皮laipi +来日lairi +来势laishi +来头laitou +来往laiwang +来信laixin +来源laiyuan +来者laizhe +来自laizi +癞子laizi +辣椒lajiao +拉拢lalong +喇嘛lama +腊梅lamei +兰lan +烂lan +蓝lan +览lan +栏lan +婪lan +拦lan +篮lan +阑lan +澜lan +谰lan +揽lan +懒lan +缆lan +滥lan +岚lan +漤lan +榄lan +斓lan +罱lan +镧lan +褴lan +蓝本lanben +懒怠landai +滥调landiao +懒惰landuo +浪lang +朗lang +郎lang +狼lang +琅lang +榔lang +廊lang +莨lang +蒗lang +啷lang +阆lang +锒lang +稂lang +螂lang +栏杆langan +狼狈langbei +浪潮langchao +浪荡langdang +朗读langdu +浪费langfei +狼藉langji +浪漫langman +朗诵langsong +郎中langzhong +兰花lanhua +拦截lanjie +烂漫lanman +懒散lansan +蓝色lanse +缆绳lansheng +烂熟lanshu +蓝天lantian +蓝图lantu +阑尾lanwei +拦腰lanyao +滥用lanyong +兰州lanzhou +老lao +劳lao +落*lao +牢lao +涝lao +捞lao +络*lao +佬lao +姥lao +酪lao +烙lao +潦*lao +唠lao +崂lao +栳lao +铑lao +铹lao +痨lao +耢lao +醪lao +老板laoban +老伴laoban +老本laoben +劳动laodong +牢固laogu +老汉laohan +老化laohua +牢记laoji +劳驾laojia +牢靠laokao +劳苦laoku +牢牢laolao +劳累laolei +劳力laoli +老练laolian +牢笼laolong +劳模laomo +老年laonian +老人laoren +牢骚laosao +老少laoshao +老是laoshi +老实laoshi +老师laoshi +老乡laoxiang +老爷laoye +烙印laoyin +劳支laozhi +劳资laozi +劳作laozuo +腊月layue +狼狈不堪lbbk +力不从心lbcx +来不及lbj +来不了lbl +了不起lbq +劳动保险ldbx +来得及ldj +劳动量ldl +劳动力ldl +灵丹妙药ldmy +拉丁美洲ldmz +劳动者ldz +劳动致富ldzf +了le +乐le +勒le +肋le +仂le +叻le +泐le +鳓le +乐观leguan +类lei +雷lei +累lei +勒*lei +垒lei +泪lei +镭lei +蕾lei +磊lei +儡lei +擂lei +肋lei +羸lei +诔lei +嘞lei +嫘lei +缧lei +檑lei +耒lei +酹lei +类别leibie +类次leici +雷达leida +雷管leiguan +泪痕leihen +泪花leihua +累积leiji +累计leiji +累进leijin +磊落leiluo +累年leinian +类似leisi +擂台leitai +雷同leitong +类推leitui +类型leixing +雷雨leiyu +累月leiyue +累赘leizhui +勒令leling +冷leng +棱leng +楞leng +塄leng +愣leng +冷藏lengcang +冷淡lengdan +冷宫lenggong +棱角lengjiao +冷静lengjing +冷落lengluo +冷门lengmen +冷漠lengmo +冷暖lengnuan +冷僻lengpi +冷气lengqi +冷却lengque +冷水lengshui +冷遇lengyu +乐趣lequ +勒索lesuo +乐意leyi +乐园leyuan +两个文明lgwm +拉关系lgx +联合国lhg +联合会lhh +两回事lhs +联合体lht +理li +里li +利li +力li +立li +离li +例li +历li +粒li +厘li +礼li +李li +隶li +黎li +璃li +励li +犁li +梨li +丽li +厉li +篱li +狸li +漓li +鲤li +莉li +荔li +吏li +栗li +砾li +傈li +俐li +痢li +沥li +哩li +鬲*li +俪li +俚li +郦li +坜li +苈li +莅li +蓠li +藜li +呖li +唳li +喱li +猁li +悝*li +溧li +澧li +逦li +娌li +嫠li +骊li +缡li +枥li +栎li +轹li +戾li +砺li +詈li +罹li +锂li +鹂li +疠li +疬li +蛎li +蜊li +蠡li +笠li +篥li +粝li +醴li +跞li +雳li +鲡li +鳢li +黧li +俩lia +连lian +联lian +练lian +炼lian +脸lian +链lian +莲lian +镰lian +廉lian +怜lian +涟lian +帘lian +敛lian +恋lian +蔹lian +奁lian +潋lian +濂lian +琏lian +楝lian +殓lian +臁lian +裢lian +裣lian +蠊lian +鲢lian +立案lian +恋爱lianai +联邦lianbang +练兵lianbing +联播lianbo +练达lianda +连队liandui +量liang +两liang +粮liang +良liang +亮liang +梁liang +凉liang +辆liang +粱liang +晾liang +谅liang +墚liang +莨*liang +椋liang +踉liang +靓liang +魉liang +炼钢liangang +两半liangban +量变liangbian +两边liangbian +两便liangbian +两侧liangce +两次liangci +两地liangdi +两点liangdian +量度liangdu +良方liangfang +两广liangguang +良好lianghao +两极liangji +良机liangji +谅解liangjie +量具liangju +凉快liangkuai +两立liangli +两面liangmian +练功liangong +两栖liangqi +两讫liangqi +两全liangquan +粮食liangshi +两手liangshou +凉爽liangshuang +亮堂liangtang +两条liangtiao +两头liangtou +连贯lianguan +联贯lianguan +亮相liangxiang +良心liangxin +两性liangxing +量刑liangxing +两样liangyang +粮油liangyou +良缘liangyuan +粮站liangzhan +两者liangzhe +两重liangzhong +良种liangzhong +量子liangzi +联合lianhe +联欢lianhuan +廉价lianjia +联结lianjie +连接lianjie +联接lianjie +廉洁lianjie +联军lianjun +连累lianlei +联络lianluo +连忙lianmang +联盟lianmeng +怜悯lianmin +连年liannian +脸谱lianpu +连日lianri +炼乳lianru +联赛liansai +脸色lianse +连锁liansuo +练武lianwu +联系lianxi +练习lianxi +怜惜lianxi +联想lianxiang +连续lianxu +涟漪lianyi +联姻lianyin +联营lianying +炼油lianyou +联运lianyun +连载lianzai +了*liao +料liao +疗liao +辽liao +僚liao +撩liao +聊liao +燎liao +寥liao +潦liao +撂liao +镣liao +廖liao +蓼liao +尥liao +嘹liao +獠liao +寮liao +缭liao +钌liao +鹩liao +撩拨liaobo +潦草liaocao +疗程liaocheng +料到liaodao +潦倒liaodao +料定liaoding +了结liaojie +了解liaojie +辽阔liaokuo +料理liaoli +寥寥liaoliao +寥落liaoluo +辽宁liaoning +了却liaoque +了事liaoshi +聊天liaotian +料想liaoxiang +疗养liaoyang +礼拜libai +利弊libi +里边libian +理财licai +理睬licai +立场lichang +里程licheng +历程licheng +立春lichun +历次lici +历代lidai +理当lidang +立冬lidong +列lie +裂lie +烈lie +劣lie +猎lie +冽lie +埒lie +捩lie +咧lie +洌lie +趔lie +躐lie +鬣lie +裂变liebian +列车lieche +列出liechu +列岛liedao +裂缝liefeng +列国lieguo +烈火liehuo +劣迹lieji +列举lieju +裂开liekai +裂口liekou +列宁liening +猎奇lieqi +列强lieqiang +猎取liequ +烈日lieri +列入lieru +劣绅lieshen +烈士lieshi +劣势lieshi +烈属lieshu +裂纹liewen +列席liexi +烈性liexing +立法lifa +立方lifang +礼服lifu +立功ligong +利害lihai +厉害lihai +理化lihua +礼花lihua +理会lihui +离婚lihun +立即liji +理解lijie +礼节lijie +历届lijie +力矩liju +离开likai +理科like +立刻like +理亏likui +历来lilai +历历lili +力量liliang +利率lilu +理论lilun +立论lilun +礼貌limao +里面limian +利民limin +黎民limin +黎明liming +林lin +磷lin +临lin +邻lin +淋lin +麟lin +琳lin +霖lin +鳞lin +凛lin +赁lin +吝lin +蔺lin +啉lin +嶙lin +廪lin +懔lin +遴lin +檩lin +辚lin +膦lin +瞵lin +粼lin +躏lin +淋巴linba +临别linbie +淋病linbing +林场linchang +临床linchuang +临到lindao +领ling +另ling +零ling +令ling +灵ling +岭ling +铃ling +龄ling +凌ling +棱*ling +陵ling +拎ling +玲ling +菱ling +伶ling +羚ling +酃ling +苓ling +呤ling +囹ling +泠ling +绫ling +柃ling +棂ling +瓴ling +聆ling +蛉ling +翎ling +鲮ling +令爱lingai +凌晨lingchen +灵丹lingdan +领导lingdao +领地lingdi +零点lingdian +领队lingdui +灵感linggan +领海linghai +领航linghang +领会linghui +灵魂linghun +灵活linghuo +灵机lingji +零件lingjian +领教lingjiao +灵杰lingjie +领空lingkong +凌空lingkong +玲珑linglong +零乱lingluan +凌乱lingluan +领略linglue +灵敏lingmin +陵墓lingmu +灵巧lingqiao +领取lingqu +令人lingren +凌辱lingru +零散lingsan +领事lingshi +领受lingshou +领司lingsi +零碎lingsui +灵堂lingtang +零头lingtou +领土lingtu +磷光linguang +另外lingwai +领悟lingwu +领先lingxian +领衔lingxian +零星lingxing +领袖lingxiu +另选lingxuan +灵验lingyan +领域lingyu +令尊lingzun +磷火linhuo +历年linian +临界linjie +临近linjin +邻近linjin +邻里linli +淋漓linli +凛冽linlie +临摹linmo +里弄linong +鳞伤linshang +临时linshi +临死linsi +吝惜linxi +临行linxing +林业linye +临战linzhan +临终linzhong +礼炮lipao +李鹏lipeng +礼品lipin +力气liqi +离奇liqi +力求liqiu +立秋liqiu +历任liren +例如liru +利润lirun +离散lisan +理事lishi +历史lishi +隶属lishu +礼堂litang +立体liti +例题liti +力图litu +流liu +六liu +留liu +刘liu +硫liu +柳liu +陆*liu +馏liu +瘤liu +溜liu +琉liu +榴liu +碌*liu +浏liu +遛liu +骝liu +绺liu +旒liu +熘liu +锍liu +镏liu +鹨liu +鎏liu +留步liubu +流产liuchan +流畅liuchang +流程liucheng +流传liuchuan +流窜liucuan +流动liudong +流毒liudu +流放liufang +六届liujie +浏览liulan +流利liuli +留恋liulian +流露liulu +流落liuluo +流氓liumang +留念liunian +流失liushi +流逝liushi +流体liuti +流通liutong +流亡liuwang +流泻liuxie +留心liuxin +流行liuxing +流星liuxing +留学liuxue +流血liuxue +流言liuyan +留言liuyan +留洋liuyang +留影liuying +留用liuyong +流域liuyu +六月liuyue +流转liuzhuan +例外liwai +礼物liwu +利息lixi +立夏lixia +理想lixiang +立新lixin +离心lixin +理性lixing +力行lixing +厉行lixing +离休lixiu +立意liyi +利益liyi +离异liyi +利用liyong +理由liyou +力争lizheng +立正lizheng +理智lizhi +立志lizhi +离职lizhi +例子lizi +粒子lizi +立足lizu +屡见不鲜ljbx +两极分化ljfh +逻辑设计ljsj +逻辑思维ljsw +逻辑性ljx +灵机一动ljyd +落落大方lldf +拦路虎llh +来龙去脉llqm +零零碎碎llss +来来往往llww +联绵不断lmbd +灵敏度lmd +辽宁省lns +列宁主义lnzy +龙long +垄long +弄*long +笼long +隆long +聋long +咙long +窿long +拢long +陇long +垅long +茏long +泷long +珑long +栊long +胧long +砻long +癃long +隆冬longdong +垄断longduan +隆隆longlong +笼络longluo +笼统longtong +笼罩longzhao +隆重longzhong +漏lou +露*lou +楼lou +娄lou +搂lou +篓lou +陋lou +偻lou +蒌lou +喽lou +嵝lou +镂lou +瘘lou +耧lou +蝼lou +髅lou +漏洞loudong +漏斗loudou +镂空loukong +漏网louwang +来日方长lrfc +来人来函lrlh +了如指掌lrzz +理所当然lsdr +连锁反应lsfy +领事馆lsg +理事会lsh +力所能及lsnj +拉萨市lss +流水线lsx +良师益友lsyy +路lu +六*lu +率lu +露lu +绿lu +炉lu +律lu +虑lu +滤lu +陆lu +氯lu +鲁lu +铝lu +录lu +旅lu +卢lu +吕lu +芦lu +颅lu +庐lu +掳lu +卤lu +虏lu +麓lu +碌lu +赂lu +鹿lu +潞lu +禄lu +戮lu +驴lu +侣lu +履lu +屡lu +缕lu +垆lu +蓼*lu +撸lu +噜lu +闾lu +泸lu +渌lu +漉lu +逯lu +璐lu +栌lu +榈lu +橹lu +轳lu +辂lu +辘lu +氇lu +胪lu +膂lu +镥lu +稆lu +鸬lu +鹭lu +褛lu +簏lu +舻lu +鲈lu +卵luan +乱luan +峦luan +挛luan +孪luan +滦luan +脔luan +娈luan +栾luan +鸾luan +銮luan +卵巢luanchao +乱伦luanlun +乱子luanzi +旅伴luban +路标lubiao +路程lucheng +旅程lucheng +露出luchu +屡次luci +陆地ludi +露底ludi +旅店ludian +略lue +掠lue +锊lue +掠夺lueduo +旅费lufei +露骨lugu +旅馆luguan +路过luguo +绿化luhua +炉火luhuo +路径lujing +路局luju +陆军lujun +旅客luke +履历luli +率领luling +鲁莽lumang +露面lumian +论lun +轮lun +伦lun +抡lun +仑lun +沦lun +纶lun +囵lun +论处lunchu +轮船lunchuan +论点lundian +论调lundiao +伦敦lundun +轮换lunhuan +论据lunju +轮廓lunkuo +论理lunli +伦理lunli +轮流lunliu +论述lunshu +轮胎luntai +论坛luntan +沦为lunwei +论文lunwen +沦陷lunxian +轮训lunxun +论战lunzhan +论正lunzheng +论证lunzheng +轮轴lunzhou +论著lunzhu +落luo +罗luo +螺luo +洛luo +络luo +逻luo +咯*luo +烙*luo +萝luo +锣luo +箩luo +骡luo +裸luo +骆luo +倮luo +蠃luo +荦luo +捋luo +摞luo +猡luo +泺luo +漯luo +珞luo +椤luo +脶luo +硌*luo +镙luo +瘰luo +雒luo +萝卜luobu +落成luocheng +螺钉luoding +罗汉luohan +落后luohou +落户luohu +逻辑luoji +落空luokong +落款luokuan +箩筐luokuang +罗列luolie +罗马luoma +螺母luomu +罗盘luopan +落泊luopo +落实luoshi +螺栓luoshuan +裸体luoti +骆驼luotuo +罗网luowang +螺纹luowen +落伍luowu +落选luoxuan +螺旋luoxuan +络绎luoyi +录取luqu +路人luren +绿色luse +庐山lushan +旅社lushe +律师lushi +露天lutian +路途lutu +旅途lutu +路线luxian +率先luxian +录像luxiang +旅行luxing +履行luxing +陆续luxu +录音luyin +绿荫luyin +录用luyong +旅游luyou +绿洲luzhou +露珠luzhu +路子luzi +炉子luzi +另行安排lxap +例行公事lxgs +联系人lxr +留学生lxs +另行通知lxtz +林业部lyb +老一辈lyb +另一方面lyfm +劳逸结合lyjh +利用率lyl +老一套lyt +留有余地lyyd +来者不拒lzbj +立足点lzd +老中青lzq +理直气壮lzqz +兰州市lzs +两重性lzx +面m +命m +们m +民m +毛m +没m +米m +明m +马m +么m +每m +门m +名m +磨m +美m +密m +苗m +满m +亩m +目m +呒m +马ma +么*ma +麻ma +吗ma +妈ma +骂ma +嘛ma +码ma +摩*ma +抹*ma +玛ma +蚂ma +唛ma +犸ma +嬷ma +杩ma +蟆ma +马鞍maan +麻痹mabi +马达mada +麻烦mafan +麻纺mafang +马虎mahu +麦mai +脉mai +卖mai +买mai +埋mai +迈mai +劢mai +荬mai +霾mai +买办maiban +脉搏maibo +迈步maibu +埋藏maicang +脉冲maichong +脉动maidong +埋伏maifu +卖国maiguo +脉络mailuo +买卖maimai +卖命maiming +埋没maimo +卖弄mainong +埋头maitou +卖淫maiyin +埋怨maiyuan +埋葬maizang +买帐maizhang +卖座maizuo +马力mali +麻利mali +马路malu +妈妈mama +麻木mamu +满man +慢man +曼man +漫man +蔓man +瞒man +馒man +蛮man +谩man +墁man +幔man +缦man +熳man +镘man +颟man +螨man +鳗man +鞔man +漫长manchang +忙mang +芒mang +盲mang +茫mang +氓mang +莽mang +邙mang +漭mang +硭mang +蟒mang +忙碌manglu +莽莽mangmang +盲目mangmu +茫然mangran +盲人mangren +忙于mangyu +莽原mangyuan +蛮横manheng +漫画manhua +满怀manhuai +谩骂manma +满目manmu +满腔manqiang +蔓延manyan +满意manyi +满载manzai +满足manzu +毛mao +矛mao +冒mao +貌mao +贸mao +帽mao +猫mao +茅mao +锚mao +铆mao +卯mao +茂mao +袤mao +茆mao +峁mao +泖mao +瑁mao +昴mao +牦mao +耄mao +旄mao +懋mao +瞀mao +蟊mao +髦mao +毛病maobing +毛糙maocao +冒充maochong +铆钉maoding +矛盾maodun +冒犯maofan +毛纺maofang +冒号maohao +冒尖maojian +冒进maojin +茅坑maokeng +毛利maoli +冒昧maomei +茂密maomi +冒牌maopai +毛坯maopi +贸然maoran +茂盛maosheng +冒失maoshi +矛头maotou +冒险maoxian +贸易maoyi +冒雨maoyu +毛重maozhong +帽子maozi +马上mashang +马桶matong +码头matou +马戏maxi +麻醉mazui +免不了mbl +明辨是非mbsf +满不在乎mbzh +默不作声mbzs +满城风雨mcfy +目的地mdd +目瞪口呆mdkd +描淡写mdx +么me +麽me +秘而不宣mebx +没mei +每mei +美mei +煤mei +霉mei +酶mei +梅mei +妹mei +眉mei +玫mei +枚mei +媒mei +镁mei +昧mei +寐mei +媚mei +糜*mei +谜*mei +莓mei +嵋mei +猸mei +浼mei +湄mei +楣mei +镅mei +鹛mei +袂mei +魅mei +每次meici +每当meidang +美德meide +没法meifa +每逢meifeng +每个meige +美观meiguan +玫瑰meigui +美国meiguo +美好meihao +美化meihua +媒介meijie +眉睫meijie +枚举meiju +煤矿meikuang +霉烂meilan +魅力meili +美丽meili +美满meiman +眉毛meimao +美貌meimao +妹妹meimei +美妙meimiao +眉目meimu +每年meinian +煤气meiqi +每人meiren +每日meiri +美容meirong +眉梢meishao +每时meishi +美术meishu +媒妁meishuo +煤炭meitan +每天meitian +煤田meitian +美学meixue +没有meiyou +煤油meiyou +美元meiyuan +每月meiyue +没治meizhi +每周meizhou +们men +门men +闷men +扪men +焖men +懑men +钔men +门房menfang +孟meng +猛meng +蒙meng +盟meng +梦meng +萌meng +锰meng +氓*meng +檬meng +勐meng +甍meng +瞢meng +懵meng +朦meng +礞meng +虻meng +蜢meng +蠓meng +艋meng +艨meng +蒙蔽mengbi +萌发mengfa +蒙古menggu +盟国mengguo +梦幻menghuan +蒙混menghun +梦见mengjian +猛进mengjin +梦境mengjing +猛烈menglie +蒙胧menglong +蒙昧mengmei +猛然mengran +萌生mengsheng +猛士mengshi +蒙受mengshou +梦想mengxiang +梦乡mengxiang +猛醒mengxing +萌芽mengya +盟友mengyou +盟约mengyue +猛增mengzeng +门户menhu +门路menlu +门牌menpai +门票menpiao +闷气menqi +门诊menzhen +名副其实mfqs +眉飞色舞mfsw +没关系mgx +蒙古族mgz +蒙混过关mhgg +米mi +密mi +迷mi +蜜mi +秘mi +眯mi +醚mi +靡mi +糜mi +谜mi +弥mi +觅mi +泌mi +幂mi +芈mi +谧mi +蘼mi +咪mi +嘧mi +猕mi +汨mi +宓mi +弭mi +脒mi +祢mi +敉mi +糸mi +縻mi +麋mi +面mian +棉mian +免mian +绵mian +眠mian +冕mian +勉mian +娩mian +缅mian +沔mian +渑mian +湎mian +腼mian +眄mian +面部mianbu +免除mianchu +免得miande +面对miandui +面额miane +棉花mianhua +缅怀mianhuai +面积mianji +面具mianju +面孔miankong +勉励mianli +面临mianlin +面貌mianmao +面面mianmian +绵绵mianmian +面目mianmu +面庞mianpang +面前mianqian +勉强mianqiang +面容mianrong +面色mianse +棉纱miansha +面授mianshou +免税mianshui +面谈miantan +面向mianxiang +免刑mianxing +棉絮mianxu +绵延mianyan +面议mianyi +免疫mianyi +面罩mianzhao +免职mianzhi +面子mianzi +苗miao +秒miao +描miao +庙miao +妙miao +瞄miao +藐miao +渺miao +喵miao +邈miao +缈miao +缪miao +杪miao +淼miao +眇miao +鹋miao +秒表miaobiao +描绘miaohui +妙龄miaoling +渺茫miaomang +描摹miaomo +藐视miaoshi +描述miaoshu +苗条miaotiao +苗头miaotou +描写miaoxie +瞄准miaozhun +弥补mibu +谜底midi +密度midu +灭mie +蔑mie +乜*mie +咩mie +蠛mie +篾mie +灭火miehuo +灭迹mieji +灭绝miejue +灭口miekou +蔑视mieshi +灭亡miewang +密封mifeng +蜜蜂mifeng +眯缝mifeng +迷航mihang +迷糊mihu +迷惑mihuo +密集miji +密件mijian +迷津mijin +秘诀mijue +糜烂milan +迷恋milian +密令miling +迷路milu +密码mima +迷漫miman +弥漫miman +秘密mimi +汨汨mimi +谜面mimian +密谋mimou +民min +敏min +抿min +皿min +悯min +闽min +苠min +岷min +闵min +泯min +缗min +玟min +珉min +愍min +黾min +鳘min +民办minban +民兵minbing +民法minfa +民愤minfen +民风minfeng +命ming +明ming +名ming +鸣ming +螟ming +盟*ming +铭ming +冥ming +茗ming +溟ming +暝ming +瞑ming +酩ming +敏感mingan +明白mingbai +名册mingce +名称mingcheng +明处mingchu +名次mingci +名词mingci +名单mingdan +明灯mingdeng +民歌minge +名额minge +名贵minggui +铭记mingji +名家mingjia +铭刻mingke +明快mingkuai +明朗minglang +名利mingli +明亮mingliang +明了mingliao +命令mingling +名流mingliu +明码mingma +明媚mingmei +明明mingming +名目mingmu +明年mingnian +名牌mingpai +名片mingpian +名气mingqi +明确mingque +明人mingren +名人mingren +名胜mingsheng +名声mingsheng +名堂mingtang +明天mingtian +名望mingwang +明文mingwen +明细mingxi +明显mingxian +鸣谢mingxie +明星mingxing +名言mingyan +名义mingyi +名誉mingyu +命运mingyun +明知mingzhi +明智mingzhi +明珠mingzhu +名著mingzhu +名字mingzi +民航minhang +民间minjian +敏捷minjie +民警minjing +民情minqing +敏锐minrui +民事minshi +民心minxin +民意minyi +民用minyong +民运minyun +民政minzheng +民众minzhong +民主minzhu +民族minzu +密切miqie +迷人miren +迷失mishi +秘书mishu +密探mitan +迷途mitu +谬miu +谬论miulun +谬误miuwu +迷惘miwang +迷雾miwu +迷信mixin +密友miyou +谜语miyu +蜜月miyue +马克思mks +眉开眼笑mkyx +马列主义mlzy +满面春风mmcf +马马虎虎mmhh +面面俱到mmjd +莫名其妙mmqm +默默无闻mmww +明目张胆mmzd +无*mo +磨mo +没*mo +万*mo +末mo +模mo +膜mo +摸mo +墨mo +摩mo +脉*mo +莫mo +抹mo +冒*mo +默mo +貉*mo +嘿*mo +摹mo +蘑mo +魔mo +沫mo +漠mo +寞mo +陌mo +谟mo +茉mo +蓦mo +馍mo +嫫mo +殁mo +镆mo +秣mo +瘼mo +耱mo +貊mo +貘mo +默哀moai +莫不mobu +磨擦moca +摩擦moca +磨蹭moceng +莫大moda +磨刀modao +摩登modeng +摸底modi +模范mofan +模仿mofang +摹仿mofang +莫非mofei +魔鬼mogui +模糊mohu +墨迹moji +模块mokuai +磨砺moli +磨练molian +末了moliao +末路molu +没落moluo +磨灭momie +默默momo +磨难monan +模拟moni +摹拟moni +末期moqi +默契moqi +默然moran +漠然moran +默认moren +末日mori +莫如moru +抹杀mosha +抹煞mosha +末梢moshao +陌生mosheng +模式moshi +没收moshou +魔术moshu +磨损mosun +摸索mosuo +模特mote +摩托motuo +某mou +谋mou +牟mou +侔mou +哞mou +缪*mou +眸mou +蛑mou +蝥mou +鍪mou +某地moudi +某个mouge +谋害mouhai +谋划mouhua +某军moujun +牟利mouli +谋略moulue +谋求mouqiu +牟取mouqu +谋杀mousha +谋生mousheng +某些mouxie +末尾mowei +默写moxie +模型moxing +默许moxu +模样moyang +魔掌mozhang +模子mozi +妙趣横生mqhs +门市部msb +名胜古迹msgj +妙手回春mshc +莫斯科msk +没什么msm +每时每刻msmk +秘书长msz +没事找事mszs +摩托车mtc +埋头工作mtgz +埋头苦干mtkg +亩mu +目mu +木mu +母mu +墓mu +模*mu +幕mu +牧mu +姆mu +穆mu +姥*mu +牟*mu +拇mu +牡mu +暮mu +募mu +慕mu +睦mu +仫mu +坶mu +苜mu +沐mu +毪mu +钼mu +母爱muai +墓碑mubei +目标mubiao +木材mucai +牧草mucao +目测muce +牧场muchang +目次muci +牡丹mudan +目的mudi +牧歌muge +目光muguang +幕后muhou +目击muji +募集muji +木刻muke +木料muliao +幕僚muliao +目录mulu +牧民mumin +木讷mune +木偶muou +目前muqian +母亲muqin +牧区muqu +木然muran +暮色muse +牧师mushi +目送musong +牧童mutong +牧业muye +沐浴muyu +民意测验mycy +贸易市场mysc +贸易协定myxd +民政部mzb +美中不足mzbz +毛泽东mzd +满载而归mzeg +明知故犯mzgf +毛织品mzp +目中无人mzwr +毛主席mzx +年n +能n +内n +那n +农n +你n +南n +难n +呢n +女n +泥n +哪n +拿n +念n +牛n +宁n +脑n +粘n +尼n +纳n +嗯n +那na +南na +哪na +拿na +纳na +呢*na +钠na +呐na +娜na +捺na +肭na +镎na +衲na +那边nabian +纳粹nacui +哪儿naer +那个nage +哪个nage +呐喊nahan +哪会nahui +耐nai +哪*nai +奶nai +乃nai +氖nai +奈nai +鼐nai +艿nai +萘nai +柰nai +耐烦naifan +奈何naihe +耐久naijiu +耐劳nailao +奶奶nainai +耐心naixin +耐性naixing +耐用naiyong +奶油naiyou +乃至naizhi +那里nali +哪里nali +那么name +南nan +难nan +男nan +喃nan +囝nan +囡nan +楠nan +腩nan +蝻nan +赧nan +难办nanban +南北nanbei +南边nanbian +难产nanchan +南昌nanchang +难处nanchu +难道nandao +难得nande +难点nandian +难度nandu +哪能naneng +南方nanfang +南非nanfei +难分nanfen +南风nanfeng +囊nang +攮nang +囔nang +馕nang +曩nang +囊括nangkuo +难怪nanguai +难关nanguan +南国nanguo +难过nanguo +南海nanhai +南货nanhuo +南极nanji +难解nanjie +南京nanjing +难看nankan +难堪nankan +南面nanmian +难免nanmian +难民nanmin +南宁nanning +男女nannu +赧然nanran +男人nanren +难色nanse +难事nanshi +难受nanshou +难说nanshuo +难题nanti +难听nanting +难为nanwei +男性nanxing +南亚nanya +南洋nanyang +难以nanyi +难友nanyou +难于nanyu +脑nao +闹nao +努*nao +挠nao +恼nao +淖nao +孬nao +垴nao +呶nao +猱nao +瑙nao +硇nao +铙nao +蛲nao +脑袋naodai +脑海naohai +恼火naohuo +脑筋naojin +闹剧naoju +闹事naoshi +哪怕napa +纳入naru +那时nashi +拿手nashou +纳税nashui +那些naxie +哪些naxie +纳新naxin +那样nayang +哪样nayang +那种nazhong +年产量ncl +农产品ncp +南昌市ncs +难道说nds +呢ne +哪*ne +呐*ne +讷ne +内nei +那*nei +哪*nei +馁nei +内部neibu +内存neicun +内地neidi +内阁neige +内涵neihan +内行neihang +内奸neijian +内疚neijiu +内科neike +内乱neiluan +内幕neimu +内勤neiqin +内容neirong +内外neiwai +内销neixiao +内心neixin +内因neiyin +内应neiying +内在neizai +嫩nen +恁nen +能neng +能动nengdong +能否nengfou +能干nenggan +能够nenggou +能力nengli +能量nengliang +能耐nengnai +能人nengren +能手nengshou +能源nengyuan +能者nengzhe +农副产品nfcp +年富力强nflq +能工巧匠ngqj +你ni +泥ni +尼ni +呢*ni +逆ni +拟ni +尿ni +妮ni +霓ni +倪ni +匿ni +腻ni +溺ni +伲ni +坭ni +猊ni +怩ni +昵ni +旎ni +祢*ni +慝ni +睨ni +铌ni +鲵ni +年nian +念nian +粘nian +蔫nian +拈nian +碾nian +撵nian +捻nian +酿nian +廿nian +埝nian +辇nian +黏nian +鲇nian +鲶nian +年初nianchu +年代niandai +念叨niandao +年底niandi +年度niandu +年份nianfen +娘niang +年华nianhua +年画nianhua +年级nianji +年纪nianji +年鉴nianjian +年来nianlai +年利nianli +年历nianli +拈量nianliang +年龄nianling +年迈nianmai +年年niannian +年青nianqing +年轻nianqing +年岁niansui +年头niantou +念头niantou +年限nianxian +年月nianyue +酿造nianzao +年终nianzhong +尿niao +鸟niao +溺*niao +茑niao +嬲niao +脲niao +袅niao +鸟瞰niaokan +逆差nicha +你处nichu +你的nide +拟定niding +拟订niding +镍nie +啮nie +涅nie +捏nie +聂nie +孽nie +镊nie +乜nie +陧nie +蘖nie +嗫nie +颞nie +臬nie +蹑nie +捏造niezao +腻烦nifan +泥浆nijiang +逆境nijing +泥坑nikeng +逆流niliu +你们nimen +您nin +宁ning +凝ning +拧ning +柠ning +狞ning +泞ning +佞ning +苎ning +咛ning +甯ning +聍ning +凝固ninggu +凝结ningjie +宁静ningjing +凝聚ningju +宁可ningke +宁肯ningken +宁日ningri +凝视ningshi +凝望ningwang +宁夏ningxia +宁愿ningyuan +泥泞nining +泥塑nisu +牛niu +扭niu +钮niu +纽niu +拗*niu +狃niu +忸niu +妞niu +纽带niudai +牛犊niudu +纽扣niukou +纽约niuyue +扭转niuzhuan +腻味niwei +你我niwo +拟议niyi +泥沼nizhao +逆转nizhuan +难解难分njnf +南京市njs +南极洲njz +扭亏为盈nkwy +脑力劳动nlld +年老体弱nltr +内蒙古nmg +农贸市场nmsc +那么些nmx +那么样nmy +念念不忘nnbw +难能可贵nnkg +南宁市nns +农nong +弄nong +浓nong +脓nong +侬nong +哝nong +脓包nongbao +农村nongcun +浓度nongdu +农妇nongfu +浓厚nonghou +农会nonghui +农活nonghuo +农具nongju +农历nongli +农林nonglin +农忙nongmang +农民nongmin +弄清nongqing +农时nongshi +农药nongyao +农业nongye +农艺nongyi +浓郁nongyu +耨nou +年轻化nqh +年轻人nqr +那时候nsh +能说会道nshd +南斯拉夫nslf +能上能下nsnx +逆水行舟nsxz +农田水利ntsl +女nu +奴nu +努nu +怒nu +弩nu +胬nu +孥nu +驽nu +恧nu +钕nu +衄nu +暖nuan +暖和nuanhe +暖流nuanliu +暖气nuanqi +奴婢nubi +奴才nucai +虐nue +虐待nuedai +虐疾nueji +女儿nuer +女工nugong +怒吼nuhou +奴化nuhua +怒火nuhuo +努力nuli +奴隶nuli +诺nuo +娜*nuo +挪nuo +懦nuo +糯nuo +傩nuo +搦nuo +喏nuo +锘nuo +挪用nuoyong +奴仆nupu +女人nuren +女色nuse +女士nushi +女性nuxing +女婿nuxu +女子nuzi +能文能武nwnw +弄虚作假nxzj +农作物nzw +你争我夺nzwd +欧o +偶o +哦o +鸥o +殴o +藕o +呕o +沤o +讴o +噢o +怄o +瓯o +耦o +偶然性orx +区*ou +欧ou +偶ou +鸥ou +殴ou +藕ou +呕ou +沤ou +讴ou +怄ou +瓯ou +耦ou +殴打ouda +偶尔ouer +讴歌ouge +偶合ouhe +耦合ouhe +欧姆oumu +怄气ouqi +偶然ouran +藕色ouse +偶数oushu +呕吐outu +欧阳ouyang +欧洲ouzhou +批p +平p +判p +配p +片p +派p +破p +排p +品p +皮p +喷p +盘p +偏p +评p +怕p +培p +普p +贫p +跑p +炮p +怕pa +派pa +爬pa +帕pa +扒*pa +耙*pa +啪pa +趴pa +琶pa +葩pa +杷pa +钯*pa +筢pa +派pai +排pai +拍pai +牌pai +迫*pai +哌pai +徘pai +湃pai +俳pai +蒎pai +排版paiban +拍板paiban +排比paibi +派别paibie +排场paichang +排斥paichi +排除paichu +排队paidui +牌号paihao +徘徊paihuai +排挤paiji +牌价paijia +排列pailie +拍卖paimai +派遣paiqian +排球paiqiu +派生paisheng +派头paitou +排外paiwai +排泄paixie +排演paiyan +牌照paizhao +判pan +盘pan +叛pan +番*pan +潘pan +攀pan +磐pan +盼pan +畔pan +胖pan +拚*pan +爿pan +泮pan +袢pan +襻pan +蟠pan +蹒pan +叛变panbian +判别panbie +盘缠panchan +盘存pancun +叛党pandang +攀登pandeng +盘点pandian +判定panding +判断panduan +攀附panfu +旁pang +膀*pang +磅*pang +乓pang +庞pang +耪pang +胖pang +彷pang +滂pang +逄pang +螃pang +旁边pangbian +庞大pangda +盘亘pangen +旁观pangguan +旁听pangting +旁通pangtong +滂沱pangtuo +庞杂pangza +盘踞panju +判决panjue +叛乱panluan +判明panming +叛逆panni +盘算pansuan +蟠桃pantao +叛徒pantu +盼望panwang +判刑panxing +盘旋panxuan +跑pao +炮pao +刨pao +抛pao +泡pao +咆pao +袍pao +匏pao +狍pao +庖pao +脬pao +疱pao +炮兵paobing +跑步paobu +炮弹paodan +跑道paodao +抛光paoguang +炮火paohuo +炮击paoji +抛锚paomao +泡沫paomo +抛弃paoqi +炮手paoshou +炮台paotai +炮艇paoting +咆哮paoxiao +泡影paoying +炮仗paozhang +炮制paozhi +怕死pasi +疲惫不堪pbbk +迫不急待pbjd +破除迷信pcmx +平等互利pdhl +配pei +培pei +陪pei +胚pei +呸pei +裴pei +赔pei +佩pei +沛pei +辔pei +帔pei +旆pei +锫pei +醅pei +霈pei +陪伴peiban +配备peibei +赔本peiben +赔偿peichang +陪衬peichen +配方peifang +佩服peifu +配合peihe +配给peiji +配件peijian +配角peijiao +赔款peikuan +赔礼peili +配偶peiou +陪审peishen +陪送peisong +胚胎peitai +配套peitao +陪同peitong +培训peixun +培养peiyang +配音peiyin +培育peiyu +配乐peiyue +陪葬peizang +配制peizhi +配置peizhi +培植peizhi +喷pen +盆pen +湓pen +盆地pendi +碰peng +棚peng +蓬peng +朋peng +捧peng +膨peng +砰peng +抨peng +烹peng +澎peng +彭peng +硼peng +篷peng +鹏peng +堋peng +嘭peng +怦peng +蟛peng +碰杯pengbei +碰壁pengbi +蓬勃pengbo +捧场pengchang +抨击pengji +蓬莱penglai +蓬乱pengluan +澎湃pengpai +烹饪pengren +硼砂pengsha +蓬松pengsong +烹调pengtiao +朋友pengyou +膨胀pengzhang +喷溅penjian +盆景penjing +喷射penshe +喷嚏penti +平方公里pfgl +平分秋色pfqs +批pi +皮pi +坏*pi +否*pi +辟*pi +坯pi +脾pi +疲pi +砒pi +霹pi +披pi +劈pi +琵pi +毗pi +啤pi +匹pi +痞pi +僻pi +屁pi +譬pi +丕pi +仳pi +陂*pi +陴pi +邳pi +郫pi +圮pi +埤*pi +鼙pi +芘pi +擗pi +吡*pi +噼pi +庀pi +淠pi +媲pi +纰pi +枇pi +甓pi +睥pi +罴pi +铍pi +癖pi +裨*pi +疋pi +蚍pi +蜱pi +貔pi +片pian +偏pian +便*pian +篇pian +骗pian +扁*pian +谝pian +骈pian +缏*pian +犏pian +胼pian +翩pian +蹁pian +偏差piancha +片断pianduan +片段pianduan +偏废pianfei +篇幅pianfu +偏激pianji +偏见pianjian +骗局pianju +片刻pianke +偏离pianli +片面pianmian +偏旁pianpang +偏僻pianpi +偏颇pianpo +骗取pianqu +骗人pianren +骗术pianshu +偏袒piantan +翩跹pianxian +偏向pianxiang +偏移pianyi +便宜pianyi +篇章pianzhang +骗子pianzi +票piao +漂piao +朴*piao +飘piao +瓢piao +剽piao +莩*piao +嘌piao +嫖piao +骠*piao +缥piao +殍piao +瞟piao +螵piao +漂泊piaobo +票房piaofang +漂浮piaofu +票价piaojia +票据piaoju +漂亮piaoliang +漂流piaoliu +飘流piaoliu +飘落piaoluo +票面piaomian +飘渺piaomiao +飘泊piaopo +剽窃piaoqie +飘然piaoran +飘散piaosan +飘扬piaoyang +飘游piaoyou +疲惫pibei +批驳pibo +撇pie +瞥pie +丿pie +苤pie +氕pie +批发pifa +批复pifu +皮肤pifu +皮革pige +屁股pigu +疲倦pijuan +疲劳pilao +纰漏pilou +披露pilu +品pin +贫pin +频pin +拼pin +苹pin +聘pin +拚pin +姘pin +嫔pin +榀pin +牝pin +颦pin +品尝pinchang +频传pinchuan +拼凑pincou +频带pindai +频道pindao +品德pinde +贫乏pinfa +频繁pinfan +平ping +评ping +瓶ping +凭ping +苹ping +冯*ping +乒ping +坪ping +萍ping +屏ping +俜ping +娉ping +枰ping +鲆ping +平安pingan +评比pingbi +屏蔽pingbi +平常pingchang +平川pingchuan +平淡pingdan +平等pingdeng +平地pingdi +平定pingding +评定pingding +品格pinge +平反pingfan +平凡pingfan +平方pingfang +平分pingfen +评分pingfen +评功pinggong +平衡pingheng +评级pingji +平价pingjia +评价pingjia +评奖pingjiang +凭借pingjie +平静pingjing +平均pingjun +平空pingkong +凭空pingkong +评理pingli +评论pinglun +平面pingmian +平民pingmin +屏幕pingmu +评判pingpan +乒乓pingpang +平平pingping +平壤pingrang +平日pingri +平时pingshi +平手pingshou +评说pingshuo +平素pingsu +平坦pingtan +乒坛pingtan +平稳pingwen +平息pingxi +萍乡pingxiang +平行pingxing +平易pingyi +评议pingyi +平庸pingyong +平原pingyuan +平仄pingze +屏障pingzhang +凭着pingzhe +平整pingzheng +凭证pingzheng +评注pingzhu +贫寒pinhan +品级pinji +贫困pinkun +频率pinlu +品貌pinmao +拼命pinming +品名pinming +品评pinping +聘请pinqing +贫穷pinqiong +聘任pinren +聘书pinshu +拼写pinxie +品行pinxing +品性pinxing +拼音pinyin +品质pinzhi +品种pinzhong +批判pipan +匹配pipei +批评piping +脾气piqi +譬如piru +疲软piruan +批示pishi +脾胃piwei +脾性pixing +辟谣piyao +批语piyu +批阅piyue +批注pizhu +批准pizhun +平均数pjs +披荆斩棘pjzj +评论员ply +跑马观花pmgh +破po +迫po +坡po +泼po +繁*po +朴*po +泊*po +颇po +婆po +魄po +粕po +叵po +陂*po +鄱po +泺*po +珀po +攴po +钋po +钷po +钹*po +皤po +笸po +破案poan +破产pochan +破除pochu +坡度podu +泼妇pofu +破格poge +迫害pohai +破坏pohuai +破获pohuo +迫近pojin +破旧pojiu +泼辣pola +破烂polan +魄力poli +破例poli +破裂polie +破灭pomie +迫切poqie +迫使poshi +破碎posui +破损posun +破土potu +剖pou +裒pou +掊pou +剖解poujie +剖析pouxi +破绽pozhan +蓬蓬勃勃ppbb +普普通通pptt +旁若无人prwr +普通话pth +抛头露面ptlm +普pu +谱pu +扑pu +埔pu +铺pu +暴*pu +葡pu +朴pu +蒲pu +堡*pu +脯*pu +仆pu +莆pu +菩pu +圃pu +浦pu +曝pu +瀑pu +匍pu +噗pu +溥pu +濮pu +璞pu +氆pu +镤pu +镨pu +蹼pu +普遍pubian +普查pucha +扑哧puchi +扑打puda +铺盖pugai +普及puji +铺平puping +仆人puren +菩萨pusa +铺设pushe +朴实pushi +朴素pusu +葡萄putao +普通putong +扑通putong +铺位puwei +谱写puxie +普选puxuan +铺张puzhang +普照puzhao +朴直puzhi +平易近人pyjr +拼音字母pyzm +铺张浪费pzlf +起q +前q +其q +去q +气q +全q +期q +群q +情q +区q +强q +切q +取q +七q +求q +清q +确q +权q +且q +青q +亲爱的qad +情报所qbs +千百万qbw +千变万化qbwh +取长补短qcbd +千锤百炼qcbl +恰到好处qdhc +全党全军和全国qdqg +取而代之qedz +轻而易举qeyj +千方百计qfbj +清规戒律qgjl +勤工俭学qgjx +旗鼓相当qgxd +轻工业qgy +轻工业部qgyb +勤工助学qgzx +权衡利弊qhlb +骑虎难下qhnx +青海省qhs +青红皂白qhzb +起qi +其qi +气qi +期qi +七qi +器qi +齐qi +奇qi +汽qi +企qi +漆qi +欺qi +旗qi +畦qi +启qi +弃qi +歧qi +稽*qi +缉*qi +栖qi +戚qi +妻qi +凄qi +柒qi +沏qi +棋qi +崎qi +脐qi +祈qi +祁qi +骑qi +岂qi +乞qi +契qi +砌qi +迄qi +泣qi +讫qi +亟*qi +亓qi +俟qi +圻qi +芑qi +芪qi +荠*qi +萁qi +萋qi +葺qi +蕲qi +嘁qi +屺qi +岐qi +岖*qi +汔qi +淇qi +骐qi +绮qi +琪qi +琦qi +杞qi +桤qi +槭qi +耆qi +欹qi +祺qi +憩qi +碛qi +颀qi +蛴qi +蜞qi +綦qi +綮qi +蹊qi +鳍qi +麒qi +卡*qia +恰qia +掐qia +洽qia +伽*qia +葜qia +袷*qia +髂qia +恰当qiadang +恰好qiahao +前qian +千qian +钱qian +浅qian +签qian +迁qian +铅qian +潜qian +牵qian +钳qian +纤*qian +谴qian +扦qian +钎qian +仟qian +谦qian +乾qian +黔qian +遣qian +堑qian +嵌qian +欠qian +歉qian +倩qian +佥qian +阡qian +芊qian +芡qian +茜qian +荨qian +掮qian +岍qian +悭qian +慊qian +骞qian +搴qian +褰qian +缱qian +椠qian +犍*qian +肷qian +愆qian +钤qian +虔qian +箬qian +箝qian +前辈qianbei +前边qianbian +浅薄qianbo +钱财qiancai +欠产qianchan +前程qiancheng +签到qiandao +前敌qiandi +签订qianding +签发qianfa +遣返qianfan +前方qianfang +强qiang +将*qiang +枪qiang +抢qiang +墙qiang +腔qiang +呛qiang +羌qiang +蔷qiang +戕qiang +嫱qiang +樯qiang +戗qiang +炝qiang +锖qiang +锵qiang +镪qiang +襁qiang +蜣qiang +羟qiang +跄qiang +墙壁qiangbi +枪毙qiangbi +强辩qiangbian +强大qiangda +枪弹qiangdan +强盗qiangdao +强调qiangdiao +腔调qiangdiao +强度qiangdu +抢夺qiangduo +强攻qianggong +强国qiangguo +强化qianghua +强加qiangjia +强奸qiangjian +抢劫qiangjie +强劲qiangjin +抢救qiangjiu +枪决qiangjue +强烈qianglie +强迫qiangpo +强权qiangquan +强弱qiangruo +枪杀qiangsha +强盛qiangsheng +千古qiangu +牵挂qiangua +蔷薇qiangwei +抢险qiangxian +强行qiangxing +强硬qiangying +强占qiangzhan +强者qiangzhe +强制qiangzhi +枪支qiangzhi +强壮qiangzhuang +前后qianhou +前进qianjin +前景qianjing +迁就qianjiu +歉疚qianjiu +迁居qianju +乾坤qiankun +千里qianli +前例qianli +潜力qianli +牵连qianlian +前列qianlie +浅陋qianlou +前面qianmian +签名qianming +前年qiannian +前期qianqi +千秋qianqiu +前驱qianqu +欠缺qianque +前人qianren +前任qianren +纤弱qianruo +前哨qianshao +牵涉qianshe +歉收qianshou +签署qianshu +遣送qiansong +前提qianti +前天qiantian +欠条qiantiao +前途qiantu +千瓦qianwa +千万qianwan +前往qianwang +前夕qianxi +纤细qianxi +前线qianxian +浅显qianxian +谦虚qianxu +谦逊qianxun +前言qianyan +前沿qianyan +前夜qianye +歉意qianyi +迁移qianyi +牵引qianyin +潜在qianzai +谴责qianze +前者qianzhe +签证qianzheng +牵制qianzhi +钳制qianzhi +签字qianzi +前奏qianzou +桥qiao +瞧qiao +壳*qiao +巧qiao +敲qiao +乔qiao +蕉qiao +橇qiao +锹qiao +悄qiao +侨qiao +鞘qiao +撬qiao +翘qiao +峭qiao +俏qiao +窍qiao +雀*qiao +劁qiao +诮qiao +谯qiao +荞qiao +峤*qiao +愀qiao +憔qiao +缲*qiao +樵qiao +硗qiao +跷qiao +鞒qiao +侨胞qiaobao +桥墩qiaodun +巧计qiaoji +瞧见qiaojian +侨居qiaoju +桥梁qiaoliang +窍门qiaomen +巧妙qiaomiao +桥牌qiaopai +乔迁qiaoqian +悄然qiaoran +侨务qiaowu +敲诈qiaozha +恰似qiasi +洽谈qiatan +岂不qibu +起步qibu +器材qicai +奇才qicai +凄惨qican +起草qicao +汽车qiche +骑车qiche +启程qicheng +起初qichu +凄楚qichu +其次qici +期待qidai +脐带qidai +岂但qidan +启迪qidi +起点qidian +启动qidong +气度qidu +切qie +且qie +砌*qie +茄qie +怯qie +窃qie +伽*qie +郄qie +惬qie +慊*qie +妾qie +挈qie +锲qie +箧qie +窃案qiean +切断qieduan +切合qiehe +窃据qieju +窃取qiequ +怯弱qieruo +切身qieshen +切实qieshi +切题qieti +窃听qieting +切削qiexiao +惬意qieyi +启发qifa +起飞qifei +岂非qifei +气愤qifen +气氛qifen +欺负qifu +气概qigai +乞丐qigai +岂敢qigan +气功qigong +奇怪qiguai +器官qiguan +旗号qihao +漆黑qihei +气候qihou +期货qihuo +契机qiji +奇迹qiji +期间qijian +起见qijian +器件qijian +七届qijie +迄今qijin +起来qilai +凄凉qiliang +欺凌qiling +气流qiliu +歧路qilu +起码qima +骑马qima +启蒙qimeng +奇妙qimiao +器皿qimin +亲qin +侵qin +勤qin +秦qin +钦qin +琴qin +芹qin +擒qin +禽qin +寝qin +沁qin +芩qin +揿qin +吣qin +嗪qin +噙qin +廑*qin +溱qin +檎qin +锓qin +矜*qin +覃qin +螓qin +衾qin +亲爱qinai +亲笔qinbi +岂能qineng +侵犯qinfan +勤奋qinfen +情qing +清qing +青qing +轻qing +倾qing +请qing +亲*qing +庆qing +氢qing +晴qing +卿qing +擎qing +氰qing +顷qing +苘qing +圊qing +檠qing +磬qing +蜻qing +罄qing +箐qing +綮*qing +謦qing +鲭qing +黥qing +清白qingbai +青白qingbai +情报qingbao +情操qingcao +青草qingcao +清查qingcha +清除qingchu +清楚qingchu +青春qingchun +青翠qingcui +清单qingdan +倾倒qingdao +清点qingdian +情调qingdiao +轻浮qingfu +青工qinggong +青海qinghai +庆贺qinghe +清华qinghua +情怀qinghuai +清还qinghuan +请假qingjia +请柬qingjian +请教qingjiao +情节qingjie +清洁qingjie +情景qingjing +顷刻qingke +晴空qingkong +轻快qingkuai +情况qingkuang +青睐qinglai +晴朗qinglang +情理qingli +清理qingli +轻率qinglu +轻蔑qingmie +青年qingnian +氢气qingqi +轻巧qingqiao +请求qingqiu +情趣qingqu +青山qingshan +请示qingshi +清爽qingshuang +青松qingsong +轻松qingsong +倾诉qingsu +青天qingtian +晴天qingtian +倾听qingting +倾吐qingtu +请问qingwen +倾向qingxiang +倾销qingxiao +情形qingxing +清醒qingxing +情绪qingxu +情谊qingyi +轻易qingyi +轻盈qingying +情愿qingyuan +请愿qingyuan +请战qingzhan +轻重qingzhong +倾注qingzhu +庆祝qingzhu +请罪qingzui +侵害qinhai +勤俭qinjian +亲近qinjin +亲眷qinjuan +勤快qinkuai +勤劳qinlao +亲历qinli +亲临qinlin +侵略qinlue +亲密qinmi +勤勉qinmian +钦佩qinpei +亲戚qinqi +亲切qinqie +亲热qinre +亲人qinren +侵入qinru +亲身qinshen +侵蚀qinshi +寝室qinshi +亲手qinshou +亲属qinshu +侵吞qintun +勤务qinwu +亲信qinxin +亲眼qinyan +亲友qinyou +侵占qinzhan +亲自qinzi +穷qiong +琼qiong +邛qiong +茕qiong +穹qiong +蛩qiong +筇qiong +跫qiong +銎qiong +穷国qiongguo +穷苦qiongku +穷困qiongkun +穹隆qionglong +穷期qiongqi +穷人qiongren +穷途qiongtu +气派qipai +欺骗qipian +气魄qipo +乞求qiqiu +崎岖qiqu +齐全qiquan +凄然qiran +起色qise +气色qise +其实qishi +起始qishi +启事qishi +气势qishi +启示qishi +歧视qishi +奇数qishu +汽水qishui +起诉qisu +其他qita +其它qita +奇特qite +气体qiti +汽艇qiting +企图qitu +歧途qitu +求qiu +球qiu +秋qiu +丘qiu +仇*qiu +龟*qiu +邱qiu +囚qiu +酋qiu +泅qiu +俅qiu +巯qiu +犰qiu +湫qiu +逑qiu +遒qiu +楸qiu +赇qiu +虬qiu +蚯qiu +蝤qiu +裘qiu +糗qiu +鳅qiu +鼽qiu +秋播qiubo +球场qiuchang +囚犯qiufan +秋风qiufeng +秋季qiuji +求教qiujiao +囚禁qiujin +求救qiujiu +丘陵qiuling +秋千qiuqian +求情qiuqing +求全qiuquan +秋色qiuse +求实qiushi +秋收qiushou +秋天qiutian +求学qiuxue +求战qiuzhan +求证qiuzheng +求知qiuzhi +求助qiuzhu +期望qiwang +气味qiwei +气温qiwen +奇闻qiwen +欺侮qiwu +气息qixi +栖息qixi +起先qixian +期限qixian +气象qixiang +器械qixie +齐心qixin +气压qiya +欺压qiya +气焰qiyan +企业qiye +起义qiyi +歧义qiyi +起因qiyin +启用qiyong +汽油qiyou +其余qiyu +起源qiyuan +七月qiyue +契约qiyue +欺诈qizha +气质qizhi +旗帜qizhi +其中qizhong +器重qizhong +旗子qizi +妻子qizi +勤俭建国qjjg +勤俭节约qjjy +迄今为止qjwz +取决于qjy +千钧一发qjyf +旗开得胜qkds +全力以赴qlyf +勤劳致富qlzf +千里之行qlzx +亲密无间qmwj +青年人qnr +千篇一律qpyl +清清楚楚qqcc +勤勤恳恳qqkk +切切实实qqss +确确实实qqss +恰恰相反qqxf +求全责备qqzb +恰如其分qrqf +欺人之谈qrzt +七手八脚qsbj +全神贯注qsgz +全世界qsj +切实可行qskx +切身利益qsly +青少年qsn +前所未闻qsww +前所未有qswy +气势汹汹qsxx +齐头并进qtbj +奇谈怪论qtgl +千头万绪qtwx +前提下qtx +去qu +区qu +取qu +曲qu +且*qu +渠qu +屈qu +趋qu +驱qu +趣qu +蛆qu +躯qu +娶qu +龋qu +戌*qu +诎qu +劬qu +苣*qu +蕖qu +蘧qu +岖qu +衢qu +阒qu +璩qu +觑qu +氍qu +朐qu +祛qu +磲qu +鸲qu +癯qu +蛐qu +蠼qu +麴qu +瞿qu +黢qu +全quan +权quan +圈quan +劝quan +泉quan +醛quan +颧quan +痊quan +拳quan +犬quan +券quan +诠quan +荃quan +悛quan +绻quan +辁quan +畎quan +铨quan +蜷quan +筌quan +鬈quan +全部quanbu +全党quandang +劝导quandao +蜷伏quanfu +劝告quangao +全国quanguo +权衡quanheng +全会quanhui +拳击quanji +劝解quanjie +全局quanju +全军quanjun +全力quanli +权利quanli +权力quanli +全貌quanmao +全面quanmian +劝勉quanmian +全民quanmin +全能quanneng +全年quannian +全盘quanpan +全拼quanpin +全球quanqiu +蜷曲quanqu +全权quanquan +全然quanran +全胜quansheng +权术quanshu +泉水quanshui +劝说quanshuo +圈套quantao +全体quanti +拳头quantou +权威quanwei +劝慰quanwei +全文quanwen +全县quanxian +权限quanxian +全校quanxiao +权益quanyi +权宜quanyi +劝诱quanyou +痊愈quanyu +劝止quanzhi +劝阻quanzu +区别qubie +屈才qucai +驱除quchu +取代qudai +渠道qudao +取得qude +取缔qudi +曲调qudiao +驱动qudong +确que +却que +缺que +炔que +瘸que +鹊que +榷que +雀que +阕que +阙que +悫que +确保quebao +缺点quedian +确定queding +缺乏quefa +缺口quekou +确立queli +确切queqie +确认queren +缺少queshao +缺省quesheng +确实queshi +缺席quexi +缺陷quexian +确信quexin +确凿quezao +瘸子quezi +区分qufen +屈服qufu +躯干qugan +区划quhua +曲解qujie +取经qujing +取决qujue +躯壳quke +取乐qule +群qun +裙qun +逡qun +裙带qundai +群岛qundao +去年qunian +群众qunzhong +区区ququ +屈辱quru +驱散qusan +取舍qushe +取胜qusheng +去世qushi +驱使qushi +趋势qushi +躯体quti +区位quwei +区委quwei +趣味quwei +区县quxian +去向quxiang +趋向quxiang +取消quxiao +取信quxin +曲艺quyi +区域quyu +区长quzhang +曲折quzhe +屈指quzhi +驱逐quzhu +曲子quzi +奇形怪状qxgz +全心全意qxqy +气象台qxt +气象万千qxwq +齐心协力qxxl +岂有此理qycl +前因后果qyhg +情有可原qyky +强有力qyl +求之不得qzbd +取之不尽qzbj +轻重缓急qzhj +气壮山河qzsh +千真万确qzwq +人r +如r +日r +认r +入r +任r +热r +然r +容r +让r +润r +弱r +燃r +染r +壤r +绕r +仁r +溶r +刃r +仍r +然ran +燃ran +染ran +冉ran +苒ran +蚺ran +髯ran +燃点randian +然而raner +让rang +壤rang +嚷rang +瓤rang +攘rang +禳rang +穰rang +让步rangbu +让位rangwei +让贤rangxian +然后ranhou +燃料ranliao +染料ranliao +冉冉ranran +燃烧ranshao +绕rao +扰rao +饶rao +荛rao +娆rao +桡rao +扰乱raoluan +如此而已rcey +人才济济rcjj +热re +若*re +惹re +热爱reai +热潮rechao +热忱rechen +热诚recheng +热带redai +热火rehuo +热量reliang +热烈relie +人ren +认ren +任ren +仁ren +刃ren +忍ren +壬ren +韧ren +妊ren +纫ren +仞ren +荏ren +葚ren +饪ren +轫ren +稔ren +衽ren +热闹renao +人才rencai +人次renci +仁慈renci +认错rencuo +人大renda +韧带rendai +人道rendao +认得rende +认定rending +人防renfang +仍reng +扔reng +扔掉rengdiao +人格renge +仍旧rengjiu +人工rengong +认购rengou +仍然rengran +任何renhe +人家renjia +人间renjian +人杰renjie +认可renke +人口renkou +人类renlei +人力renli +人们renmen +任免renmian +人民renmin +任命renming +忍耐rennai +任凭renping +任期renqi +认清renqing +人权renquan +荏苒renran +忍让renrang +人人renren +人参renshen +人生rensheng +人事renshi +人士renshi +认识renshi +人手renshou +忍受renshou +认输renshu +忍痛rentong +人为renwei +认为renwei +人物renwu +任务renwu +人心renxin +忍心renxin +人选renxuan +任意renyi +仁义renyi +任用renyong +人员renyuan +认帐renzhang +认真renzhen +人质renzhi +任职renzhi +认罪renzui +认作renzuo +热切reqie +热情reqing +惹事reshi +热线rexian +热心rexin +热血rexue +人工合成rghc +热火朝天rhct +如虎添翼rhty +日ri +日报ribao +日本riben +日产richan +日常richang +日程richeng +日光riguang +日后rihou +日记riji +日久rijiu +日历rili +日落riluo +日内rinei +日期riqi +日夜riye +日益riyi +日用riyong +日照rizhao +日中rizhong +日子rizi +软件包rjb +人杰地灵rjdl +人尽其才rjqc +如饥似渴rjsk +日久天长rjtc +任劳任怨rlry +热泪盈眶rlyk +人民币rmb +人民代表大会rmdh +人民日报rmrb +燃眉之急rmzj +容rong +溶rong +荣rong +熔rong +融rong +绒rong +戎rong +茸rong +蓉rong +冗rong +嵘rong +狨rong +榕rong +肜rong +蝾rong +熔点rongdian +容光rongguang +融合ronghe +溶化ronghua +熔化ronghua +融化ronghua +融会ronghui +荣获ronghuo +容积rongji +溶解rongjie +容量rongliang +戎马rongma +容貌rongmao +容纳rongna +融洽rongqia +容忍rongren +荣辱rongru +容身rongshen +绒线rongxian +荣幸rongxing +容许rongxu +荣耀rongyao +溶液rongye +容易rongyi +荣誉rongyu +溶质rongzhi +肉rou +揉rou +柔rou +糅rou +蹂rou +鞣rou +柔和rouhe +肉麻rouma +柔软rouruan +肉体routi +任人为贤rrwx +日日夜夜rryy +人生观rsg +认识论rsl +惹事生非rssf +如上所述rsss +如ru +入ru +儒ru +乳ru +茹ru +蠕ru +孺ru +辱ru +汝ru +褥ru +蓐ru +薷ru +嚅ru +洳ru +溽ru +濡ru +缛ru +铷ru +襦ru +颥ru +软ruan +阮ruan +朊ruan +软骨ruangu +软件ruanjian +软禁ruanjin +软盘ruanpan +如常ruchang +如此ruci +入党rudang +蠕动rudong +乳房rufang +如果ruguo +如何ruhe +瑞rui +锐rui +蕊rui +芮rui +蕤rui +枘rui +睿rui +蚋rui +锐利ruili +瑞雪ruixue +锐意ruiyi +儒家rujia +如今rujin +辱骂ruma +入门rumen +入迷rumi +润run +闰run +润滑runhua +弱ruo +若ruo +偌ruo +弱点ruodian +若干ruogan +若是ruoshi +弱小ruoxiao +如期ruqi +入侵ruqin +如若ruruo +儒生rusheng +入手rushou +如同rutong +如下ruxia +入选ruxuan +如意ruyi +如愿ruyuan +入帐ruzhang +人武部rwb +若无其事rwqs +人言可畏rykw +日用品ryp +若有所思ryss +人之长情rzcq +是s +上s +时s +生s +说s +社s +深s +水s +所s +三s +十s +使s +事s +数s +四s +实s +少s +式s +山s +手s +撒sa +萨sa +洒sa +卅sa +仨sa +挲sa +脎sa +飒sa +撒谎sahuang +塞sai +思*sai +赛sai +腮sai +鳃sai +噻sai +赛车saiche +塞子saizi +撒娇sajiao +三san +散san +叁san +伞san +馓san +毵san +糁san +散步sanbu +散布sanbu +散发sanfa +三废sanfei +桑sang +丧sang +嗓sang +搡sang +磉sang +颡sang +丧命sangming +丧失sangshi +三国sanguo +三好sanhao +散会sanhui +三角sanjiao +三届sanjie +散失sanshi +散文sanwen +三月sanyue +扫sao +梢*sao +搔sao +骚sao +嫂sao +埽sao +缫sao +缲sao +臊sao +瘙sao +鳋sao +扫除saochu +扫荡saodang +扫地saodi +骚动saodong +骚乱saoluan +扫描saomiao +扫墓saomu +骚扰saorao +瘙痒saoyang +扫帚saozhou +洒脱satuo +说不定sbd +舍不得sbd +说不过去sbgq +说不来sbl +数不胜数sbss +素不相识sbxs +身不由己sbyj +上层建筑scjz +生产力scl +生产率scl +水产品scp +四川省scs +市场调节sctj +市场信息scxx +生动活泼sdhp +山东省sds +水电站sdz +色se +塞*se +瑟se +涩se +啬se +铯se +穑se +视而不见sebj +色彩secai +色调sediao +色盲semang +森sen +僧seng +僧侣senglu +森林senlin +森严senyan +色情seqing +瑟瑟sese +十二月sey +色泽seze +司法部sfb +赏罚分明sffm +说服力sfl +手风琴sfq +三番五次sfwc +四个现代化sgxh +手工业sgy +沙sha +杀sha +砂sha +啥sha +纱sha +莎sha +刹sha +傻sha +煞sha +杉sha +厦*sha +唼sha +嗄*sha +挲*sha +歃sha +铩sha +痧sha +裟sha +霎sha +鲨sha +煞白shabai +刹车shache +煞车shache +沙发shafa +傻瓜shagua +沙皇shahuang +色*shai +筛shai +晒shai +晒台shaitai +砂烬shajin +沙龙shalong +沙漠shamo +山shan +单*shan +闪shan +善shan +珊shan +扇shan +陕shan +掸*shan +苫shan +杉shan +删shan +煽shan +衫shan +擅shan +赡shan +膳shan +汕shan +缮shan +栅*shan +剡shan +讪shan +鄯shan +埏shan +芟shan +潸shan +姗shan +嬗shan +骟shan +膻shan +禅*shan +钐shan +疝shan +蟮shan +舢shan +跚shan +鳝shan +刹那shana +山坳shanao +陕北shanbei +擅长shanchang +删除shanchu +山川shanchuan +山地shandi +闪电shandian +扇动shandong +煽动shandong +山东shandong +山峰shanfeng +上shang +商shang +伤shang +尚shang +汤*shang +墒shang +赏shang +晌shang +裳shang +垧shang +绱shang +殇shang +熵shang +觞shang +删改shangai +山岗shangang +山冈shangang +上班shangban +上报shangbao +上边shangbian +商标shangbiao +上部shangbu +上策shangce +上层shangceng +商场shangchang +上次shangci +赏赐shangci +上当shangdang +上等shangdeng +上帝shangdi +商店shangdian +上调shangdiao +商定shangding +上访shangfang +伤感shanggan +上告shanggao +赏光shangguang +上海shanghai +伤害shanghai +商行shanghang +上级shangji +上集shangji +上进shangjin +上空shangkong +上来shanglai +商量shangliang +上流shangliu +上门shangmen +上面shangmian +上年shangnian +山沟shangou +商品shangpin +商洽shangqia +上前shangqian +尚且shangqie +上去shangqu +商榷shangque +商人shangren +上任shangren +上山shangshan +上升shangsheng +赏识shangshi +上述shangshu +上司shangsi +上诉shangsu +商谈shangtan +商讨shangtao +闪光shanguang +上文shangwen +上午shangwu +商务shangwu +上下shangxia +上限shangxian +伤心shangxin +上旬shangxun +上演shangyan +商业shangye +商议shangyi +上映shangying +上游shangyou +上涨shangzhang +上阵shangzhen +山河shanhe +善后shanhou +删节shanjie +善良shanliang +山林shanlin +山岭shanling +山脉shanmai +杉木shanmu +山区shanqu +扇区shanqu +山水shanshui +闪烁shanshuo +山头shantou +山西shanxi +陕西shanxi +赡养shanyang +闪耀shanyao +善意shanyi +善于shanyu +善战shanzhan +擅自shanzi +少shao +烧shao +稍shao +绍shao +召*shao +哨shao +梢shao +鞘*shao +捎shao +芍shao +勺shao +韶shao +邵shao +劭shao +苕shao +潲shao +杓*shao +蛸shao +筲shao +艄shao +哨兵shaobing +艄公shaogong +烧毁shaohui +少见shaojian +哨卡shaoka +少量shaoliang +少年shaonian +少女shaonu +烧伤shaoshang +少数shaoshu +哨所shaosuo +稍微shaowei +少许shaoxu +稍许shaoxu +少爷shaoye +少有shaoyou +少于shaoyu +少壮shaozhuang +沙哑shaya +砂眼shayan +傻子shazi +社she +设she +射she +摄she +舌she +折*she +涉she +舍she +蛇she +奢she +赊she +赦she +慑she +厍she +佘she +摺*she +猞she +滠she +歙she +畲she +麝she +设备shebei +射程shecheng +奢侈shechi +舍得shede +设法shefa +慑服shefu +赊购shegou +奢华shehua +社会shehui +社稷sheji +涉及sheji +设计sheji +射击sheji +舍己sheji +社交shejiao +设立sheli +涉猎shelie +社论shelun +深shen +身shen +神shen +什*shen +伸shen +参*shen +甚shen +渗shen +沈shen +肾shen +审shen +申shen +慎shen +砷shen +呻shen +娠shen +绅shen +婶shen +诜shen +谂shen +莘shen +葚*shen +哂shen +渖shen +椹shen +胂shen +矧shen +蜃shen +深奥shenao +申报shenbao +身边shenbian +申辩shenbian +身材shencai +审查shencha +深沉shenchen +深处shenchu +审处shenchu +审定shending +深度shendu +甚而shener +身分shenfen +身份shenfen +生sheng +胜sheng +声sheng +省sheng +升sheng +盛sheng +绳sheng +剩sheng +圣sheng +牲sheng +乘*sheng +甥sheng +嵊sheng +渑*sheng +晟sheng +眚sheng +笙sheng +生财shengcai +生产shengchan +生成shengcheng +牲畜shengchu +生存shengcun +盛大shengda +省得shengde +胜地shengdi +盛典shengdian +声调shengdiao +生动shengdong +省份shengfen +胜负shengfu +省府shengfu +生根shenggen +升华shenghua +省会shenghui +盛会shenghui +生活shenghuo +生机shengji +生计shengji +升级shengji +圣洁shengjie +圣经shengjing +盛开shengkai +牲口shengkou +盛况shengkuang +生理shengli +胜利shengli +省力shengli +省略shenglue +生命shengming +声明shengming +盛名shengming +生怕shengpa +生僻shengpi +生平shengping +升旗shengqi +生前shengqian +升迁shengqian +盛情shengqing +生趣shengqu +省去shengqu +胜任shengren +生日shengri +省事shengshi +盛事shengshi +声势shengshi +生疏shengshu +生死shengsi +胜似shengsi +胜诉shengsu +绳索shengsuo +生态shengtai +声讨shengtao +声望shengwang +省委shengwei +生物shengwu +生息shengxi +剩下shengxia +盛夏shengxia +圣贤shengxian +生效shengxiao +生肖shengxiao +盛行shengxing +生涯shengya +生意shengyi +声音shengyin +生于shengyu +生育shengyu +胜于shengyu +声誉shengyu +剩余shengyu +声援shengyuan +生长shengzhang +省长shengzhang +声张shengzhang +胜仗shengzhang +生殖shengzhi +圣旨shengzhi +盛装shengzhuang +审核shenhe +深厚shenhou +深化shenhua +神话shenhua +甚或shenhuo +审计shenji +神经shenjing +深刻shenke +审理shenli +什么shenme +审美shenmei +神秘shenmi +申明shenming +审判shenpan +身旁shenpang +审批shenpi +神气shenqi +神奇shenqi +深浅shenqian +深切shenqie +深情shenqing +申请shenqing +身躯shenqu +深入shenru +渗入shenru +神圣shensheng +身世shenshi +绅士shenshi +伸手shenshou +申述shenshu +神速shensu +申诉shensu +伸缩shensuo +神态shentai +身体shenti +神通shentong +渗透shentou +审问shenwen +神仙shenxian +审讯shenxun +沈阳shenyang +审议shenyi +呻吟shenyin +身影shenying +深远shenyuan +申冤shenyuan +审阅shenyue +深造shenzao +伸张shenzhang +深圳shenzhen +甚至shenzhi +深重shenzhong +慎重shenzhong +神州shenzhou +舍弃sheqi +赊欠sheqian +设施sheshi +社团shetuan +奢望shewang +射线shexian +涉嫌shexian +设想shexiang +赊销shexiao +设宴sheyan +摄影sheying +社员sheyuan +社长shezhang +设置shezhi +涉足shezu +社会公德shgd +是shi +时shi +十shi +使shi +事shi +实shi +式shi +识shi +世shi +试shi +石shi +什shi +示shi +市shi +史shi +师shi +始shi +施shi +士shi +势shi +湿shi +适shi +食shi +失shi +视shi +室shi +氏shi +似*shi +蚀shi +诗shi +释shi +殖*shi +拾shi +饰shi +驶shi +匙*shi +狮shi +尸shi +虱shi +矢shi +屎shi +柿shi +拭shi +誓shi +逝shi +嗜shi +噬shi +仕shi +侍shi +恃shi +嘘*shi +峙*shi +谥shi +埘shi +莳shi +蓍shi +弑shi +轼shi +贳shi +炻shi +铈shi +螫shi +舐shi +筮shi +酾shi +豕shi +鲥shi +鲺shi +失败shibai +势必shibi +事变shibian +师表shibiao +识别shibie +失策shice +史册shice +视察shicha +时常shichang +失常shichang +市场shichang +时辰shichen +失传shichuan +侍从shicong +时代shidai +世代shidai +适当shidang +是的shide +实地shidi +试点shidian +失调shidiao +失掉shidiao +事端shiduan +拾掇shiduo +时而shier +示范shifan +师范shifan +施放shifang +释放shifang +是非shifei +时分shifen +十分shifen +侍奉shifeng +是否shifou +师傅shifu +实干shigan +是个shige +诗歌shige +施工shigong +事故shigu +世故shigu +尸骨shigu +使馆shiguan +时光shiguang +嗜好shihao +适合shihe +时候shihou +事后shihou +侍候shihou +使唤shihuan +实惠shihui +失火shihuo +时机shiji +事迹shiji +实际shiji +世纪shiji +试剂shiji +史籍shiji +施加shijia +市价shijia +时间shijian +事件shijian +世间shijian +实践shijian +视角shijiao +市郊shijiao +使节shijie +十届shijie +世界shijie +使劲shijin +市井shijing +时局shiju +视觉shijue +时刻shike +石刻shike +市侩shikuai +实况shikuang +事理shili +实力shili +事例shili +势利shili +失利shili +势力shili +视力shili +示例shili +失恋shilian +适量shiliang +矢量shiliang +拾零shiling +失灵shiling +适龄shiling +时髦shimao +失密shimi +市民shimin +使命shiming +市内shinei +室内shinei +诗篇shipian +食品shipin +视频shipin +识破shipo +时期shiqi +事前shiqian +失窃shiqie +事情shiqing +实情shiqing +时区shiqu +时取shiqu +失去shiqu +市区shiqu +诗人shiren +市容shirong +湿润shirun +示弱shiruo +失散shisan +失色shise +施舍shishe +师生shisheng +失声shisheng +时时shishi +时事shishi +适时shishi +事实shishi +失事shishi +实施shishi +失实shishi +逝世shishi +史诗shishi +失势shishi +誓师shishi +尸首shishou +失守shishou +实数shishu +施属shishu +世俗shisu +失算shisuan +事态shitai +试探shitan +食堂shitang +实体shiti +尸体shiti +石头shitou +势头shitou +师团shituan +十万shiwan +失望shiwang +市委shiwei +示威shiwei +时务shiwu +事物shiwu +事务shiwu +实物shiwu +食物shiwu +饰物shiwu +失误shiwu +实习shixi +事先shixian +视线shixian +实现shixian +试想shixiang +事项shixiang +实效shixiao +试销shixiao +失信shixin +实行shixing +试行shixing +施行shixing +失修shixiu +实学shixue +史学shixue +实验shiyan +试验shiyan +食言shiyan +誓言shiyan +式样shiyang +事业shiye +实业shiye +失业shiye +视野shiye +时宜shiyi +事宜shiyi +示意shiyi +诗意shiyi +适宜shiyi +释疑shiyi +适应shiying +使用shiyong +实用shiyong +试用shiyong +适用shiyong +事由shiyou +石油shiyou +誓由shiyou +适于shiyu +誓愿shiyuan +十月shiyue +失约shiyue +实在shizai +实战shizhan +施展shizhan +市长shizhang +师长shizhang +使者shizhe +侍者shizhe +失真shizhen +市镇shizhen +市政shizheng +试制shizhi +实质shizhi +市制shizhi +食指shizhi +失职shizhi +适中shizhong +示众shizhong +始终shizhong +时装shizhuang +师资shizi +十足shizu +实足shizu +失足shizu +始祖shizu +手shou +受shou +收shou +首shou +守shou +熟*shou +授shou +寿shou +兽shou +售shou +瘦shou +狩shou +绶shou +艏shou +守备shoubei +手表shoubiao +收兵shoubing +收藏shoucang +手册shouce +首倡shouchang +寿辰shouchen +收成shoucheng +首创shouchuang +首次shouci +收存shoucun +寿诞shoudan +受到shoudao +守敌shoudi +首度shoudu +首都shoudu +手段shouduan +守法shoufa +首犯shoufan +收复shoufu +首府shoufu +手感shougan +手稿shougao +收割shouge +收购shougou +受害shouhai +守候shouhou +守护shouhu +收回shouhui +受贿shouhui +收获shouhuo +收集shouji +售价shoujia +受奖shoujiang +授奖shoujiang +手脚shoujiao +收缴shoujiao +首届shoujie +守旧shoujiu +收据shouju +授课shouke +受理shouli +收敛shoulian +首领shouling +收留shouliu +收录shoulu +收买shoumai +授命shouming +寿命shouming +首脑shounao +首批shoupi +授权shouquan +收容shourong +收入shouru +手软shouruan +瘦弱shouruo +首饰shoushi +手术shoushu +收缩shousuo +收条shoutiao +收听shouting +收尾shouwei +首尾shouwei +首先shouxian +首相shouxiang +瘦小shouxiao +收效shouxiao +手续shouxu +瘦削shouxue +收养shouyang +首要shouyao +受益shouyi +收益shouyi +兽医shouyi +受用shouyong +授予shouyu +守则shouze +首长shouzhang +收支shouzhi +生活上shs +上海市shs +数shu +书shu +树shu +属shu +术shu +输shu +述shu +熟shu +束shu +鼠shu +疏shu +殊shu +舒shu +蔬shu +薯shu +叔shu +署shu +枢shu +梳shu +抒shu +淑shu +赎shu +孰shu +暑shu +曙shu +蜀shu +黍shu +戍shu +竖shu +墅shu +庶shu +漱shu +恕shu +俞*shu +丨shu +倏shu +塾shu +菽shu +摅shu +沭shu +澍shu +姝shu +纾shu +毹shu +腧shu +殳shu +秫shu +刷shua +耍shua +唰shua +衰shuai +帅shuai +摔shuai +甩shuai +蟀shuai +衰败shuaibai +摔打shuaida +摔交shuaijiao +衰竭shuaijie +衰老shuailao +衰弱shuairuo +衰退shuaitui +衰亡shuaiwang +耍赖shualai +栓shuan +拴shuan +闩shuan +涮shuan +双shuang +霜shuang +爽shuang +泷*shuang +孀shuang +双边shuangbian +双方shuangfang +爽口shuangkou +爽快shuangkuai +爽朗shuanglang +双拼shuangpin +双重shuangzhong +耍弄shuanong +刷洗shuaxi +刷新shuaxin +书报shubao +书本shuben +蔬菜shucai +舒畅shuchang +输出shuchu +树丛shucong +疏导shudao +书店shudian +数额shue +抒发shufa +书法shufa +舒服shufu +束缚shufu +曙光shuguang +蜀汉shuhan +疏忽shuhu +倏忽shuhu +书画shuhua +水shui +说*shui +谁shui +睡shui +税shui +水稻shuidao +水电shuidian +水分shuifen +水果shuiguo +水火shuihuo +水晶shuijing +水库shuiku +水利shuili +水流shuiliu +睡眠shuimian +水平shuiping +税收shuishou +税务shuiwu +水下shuixia +水性shuixing +水源shuiyuan +水灾shuizai +谁知shuizhi +书记shuji +书籍shuji +暑假shujia +数据shuju +书刊shukan +数理shuli +树立shuli +竖立shuli +熟练shulian +数量shuliang +数列shulie +疏漏shulou +数落shuluo +数码shuma +书面shumian +庶民shumin +数目shumu +书目shumu +树木shumu +顺shun +吮shun +瞬shun +舜shun +顺便shunbian +顺差shuncha +顺次shunci +顺从shuncong +顺当shundang +顺道shundao +顺风shunfeng +枢纽shuniu +顺利shunli +顺路shunlu +瞬时shunshi +顺势shunshi +顺心shunxin +顺序shunxu +顺应shunying +顺着shunzhuo +说shuo +数*shuo +硕shuo +朔shuo +烁shuo +蒴shuo +搠shuo +妁shuo +槊shuo +铄shuo +说到shuodao +说道shuodao +说动shuodong +说法shuofa +说服shuofu +硕果shuoguo +说话shuohua +说教shuojiao +说明shuoming +说情shuoqing +硕士shuoshi +述评shuping +署期shuqi +暑期shuqi +抒情shuqing +熟人shuren +输入shuru +疏散shusan +属实shushi +熟识shushi +舒适shushi +束手shushou +叔叔shushu +数说shushuo +述说shushuo +输送shusong +疏松shusong +舒坦shutan +疏通shutong +熟悉shuxi +属相shuxiang +舒心shuxin +书信shuxin +属性shuxing +数学shuxue +属于shuyu +术语shuyu +疏远shuyuan +舒展shuzhan +数值shuzhi +树脂shuzhi +梳妆shuzhuang +数字shuzi +赎罪shuzui +售货员shy +社会主义shzy +四si +思si +死si +斯si +丝si +似si +司si +饲si +食*si +私si +厕*si +撕si +嘶si +肆si +寺si +嗣si +伺si +巳si +厮si +俟*si +兕si +厶si +咝si +汜si +泗si +澌si +姒si +驷si +缌si +祀si +锶si +鸶si +耜si +蛳si +笥si +死板siban +四边sibian +死别sibie +思潮sichao +丝绸sichou +四处sichu +四川sichuan +死党sidang +死敌sidi +司法sifa +四方sifang +四海sihai +丝毫sihao +嗣后sihou +似乎sihu +四化sihua +死缓sihuan +撕毁sihui +死活sihuo +四季siji +司机siji +私交sijiao +四届sijie +思考sikao +私利sili +私了siliao +司令siling +思路silu +四面simian +思念sinian +私念sinian +死去siqu +私人siren +死伤sishang +私事sishi +死尸sishi +死水sishui +思索sisuo +四体siti +私吞situn +死亡siwang +思维siwei +斯文siwen +私下sixia +思想sixiang +四项sixiang +死心sixin +私心sixin +肆行sixing +死刑sixing +私有siyou +私欲siyu +寺院siyuan +四月siyue +死者sizhe +四周sizhou +私自sizi +死罪sizui +拾金不昧sjbm +身经百战sjbz +书记处sjc +世界观sjg +舍己救人sjjr +数据库sjk +省军区sjq +杀鸡取蛋sjqd +实际上sjs +设计所sjs +试金石sjs +舍己为人sjwr +设计院sjy +随机应变sjyb +十进制sjz +石家庄sjz +适可而止skez +数理化slh +收录机slj +十六进制sljz +三令五申slws +司令员sly +四面八方smbf +手忙脚乱smjl +生命力sml +说明书sms +什么样smy +深谋远虑smyl +数目字smz +松song +送song +宋song +颂song +耸song +怂song +讼song +诵song +凇song +菘song +崧song +嵩song +忪song +悚song +淞song +竦song +松绑songbang +送别songbie +松弛songchi +松动songdong +颂歌songge +松劲songjin +松快songkuai +耸立songli +送礼songli +松散songsan +松涛songtao +松懈songxie +颂扬songyang +怂恿songyong +送葬songzang +送终songzhong +搜sou +艘sou +擞sou +嗽sou +叟sou +薮sou +嗖sou +嗾sou +馊sou +溲sou +飕sou +瞍sou +锼sou +螋sou +搜查soucha +搜集souji +搜索sousuo +搜寻souxun +售票处spc +食品工业spgy +水平线spx +生气勃勃sqbb +诗情画意sqhy +盛气凌人sqlr +山穷水尽sqsj +十全十美sqsm +首屈一指sqyz +四人帮srb +损人利己srlj +深入浅出srqc +似是而非ssef +时时刻刻sskk +姗姗来迟sslc +实事求是ssqs +事实上sss +随时随地sssd +善始善终sssz +顺水推舟sstz +四通公司stgs +四通集团stjt +身体力行stlx +生态平衡stph +素su +速su +苏su +塑su +缩su +俗su +诉su +宿su +肃su +酥su +粟su +僳su +溯su +夙su +谡su +蔌su +嗉su +愫su +涑su +簌su +觫su +稣su +算suan +酸suan +蒜suan +狻suan +酸楚suanchu +算法suanfa +算计suanji +算了suanle +算盘suanpan +算术suanshu +酸疼suanteng +酸痛suantong +素材sucai +速成sucheng +苏丹sudan +速度sudu +俗话suhua +随sui +穗sui +碎sui +虽sui +岁sui +尿*sui +隋sui +绥sui +髓sui +遂sui +隧sui +祟sui +谇sui +荽sui +濉sui +邃sui +燧sui +眭sui +睢sui +随笔suibi +随便suibian +随处suichu +随从suicong +随地suidi +随和suihe +随后suihou +随机suiji +随即suiji +虽然suiran +随身suishen +随时suishi +随手suishou +岁数suishu +虽说suishuo +随同suitong +随心suixin +随行suixing +随意suiyi +遂意suiyi +岁月suiyue +虽则suize +随着suizhe +诉苦suku +苏联sulian +塑料suliao +速率sulu +素描sumiao +肃穆sumu +损sun +孙sun +笋sun +荪sun +狲sun +飧sun +榫sun +隼sun +损害sunhai +损耗sunhao +损坏sunhuai +损伤sunshang +损失sunshi +孙子sunzi +所suo +缩suo +锁suo +索suo +莎*suo +蓑suo +梭suo +唆suo +琐suo +唢suo +嗦suo +嗍suo +娑suo +桫suo +挲*suo +睃suo +羧suo +所得suode +缩短suoduan +缩减suojian +锁链suolian +所能suoneng +索取suoqu +唆使suoshi +所属suoshu +琐碎suosui +所为suowei +所谓suowei +缩小suoxiao +缩写suoxie +琐屑suoxie +索性suoxing +所以suoyi +索引suoyin +缩影suoying +所有suoyou +所在suozai +所长suozhang +所至suozhi +梭子suozi +肃清suqing +苏区suqu +宿舍sushe +素数sushu +诉说sushuo +诉讼susong +速效suxiao +速写suxie +苏醒suxing +素养suyang +宿营suying +溯源suyuan +宿愿suyuan +夙愿suyuan +塑造suzao +速战suzhan +素质suzhi +苏州suzhou +苏维埃swa +税务局swj +手舞足蹈swzd +少先队sxd +身心健康sxjk +思想上sxs +山西省sxs +陕西省sxs +顺息万变sxwb +所向无敌sxwd +思想性sxx +商业部syb +说一不二sybe +收音机syj +使用价值syjz +所有权syq +沈阳市sys +实用性syx +十一月syy +所有制syz +私有制syz +时至今日szjr +三中全会szqh +始终如一szry +深圳四通szst +所作所为szsw +甚至于szy +他t +同t +它t +提t +题t +体t +图t +天t +头t +通t +条t +特t +土t +团t +统t +台t +她t +太t +套t +铁t +他ta +它ta +她ta +塔ta +踏ta +塌ta +獭ta +挞ta +蹋ta +拓*ta +嗒*ta +闼ta +溻ta +漯*ta +遢ta +榻ta +沓ta +铊ta +趿ta +鳎ta +踏步tabu +他的tade +它的tade +她的tade +塌方tafang +台tai +太tai +态tai +胎tai +抬tai +泰tai +苔tai +酞tai +汰tai +邰tai +薹tai +呔*tai +骀*tai +肽tai +炱tai +钛tai +跆tai +鲐tai +台北taibei +台词taici +态度taidu +台风taifeng +台阶taijie +太平taiping +泰然tairan +泰山taishan +态势taishi +太太taitai +抬头taitou +台湾taiwan +太阳taiyang +太原taiyuan +天安门tam +他们tamen +它们tamen +她们tamen +谈tan +碳tan +探tan +炭tan +弹*tan +坦tan +贪tan +滩tan +坍tan +摊tan +瘫tan +坛tan +檀tan +痰tan +潭tan +谭tan +毯tan +袒tan +叹tan +郯tan +澹tan +昙tan +忐tan +钽tan +锬tan +镡*tan +坦白tanbai +探测tance +探访tanfang +谈锋tanfeng +叹服tanfu +堂tang +糖tang +唐tang +塘tang +汤tang +搪tang +棠tang +膛tang +倘tang +躺tang +淌tang +趟tang +烫tang +傥tang +帑tang +溏tang +瑭tang +樘tang +铴tang +镗tang +耥tang +螗tang +螳tang +羰tang +醣tang +倘不tangbu +搪瓷tangci +弹弓tangong +倘若tangruo +搪塞tangsai +烫伤tangshang +堂堂tangtang +唐突tangtu +弹劾tanhe +袒护tanhu +谈话tanhua +瘫痪tanhuan +探究tanjiu +坦克tanke +贪婪tanlan +坦率tanlu +谈论tanlun +摊派tanpai +谈判tanpan +叹气tanqi +探亲tanqin +弹琴tanqin +坦然tanran +探索tansuo +探讨tantao +谈天tantian +探听tanting +贪图tantu +谈吐tantu +滩涂tantu +探望tanwang +探问tanwen +贪污tanwu +叹息tanxi +探险tanxian +谈心tanxin +弹性tanxing +探询tanxun +贪赃tanzang +套tao +讨tao +逃tao +陶tao +萄tao +桃tao +掏tao +涛tao +滔tao +绦tao +淘tao +鼗tao +叨*tao +啕tao +洮tao +韬tao +焘tao +饕tao +逃奔taoben +逃避taobi +逃兵taobing +逃窜taocuan +逃遁taodun +讨伐taofa +讨饭taofan +套购taogou +讨好taohao +讨还taohuan +讨价taojia +桃李taoli +韬略taolue +讨论taolun +逃命taoming +逃难taonan +逃跑taopao +淘气taoqi +逃生taosheng +淘汰taotai +滔滔taotao +逃脱taotuo +逃亡taowang +讨厌taoyan +陶冶taoye +桃子taozi +逃走taozou +陶醉taozui +踏青taqing +他人taren +踏实tashi +他说tashuo +他乡taxiang +挑拨离间tblj +台北市tbs +贪便宜tby +统筹兼顾tcjg +铁道部tdb +土地改革tdgg +同等学历tdxl +特te +忒te +忑te +慝*te +铽te +特别tebie +特产techan +特长techang +特出techu +特此teci +特大teda +特等tedeng +特地tedi +特点tedian +特定teding +特级teji +特技teji +特急teji +特将tejiang +特刊tekan +特快tekuai +特例teli +腾teng +疼teng +藤teng +誊teng +滕teng +疼爱tengai +腾达tengda +誊写tengxie +特派tepai +特区tequ +特权tequan +托儿所tes +特色tese +特使teshi +特殊teshu +特为tewei +特务tewu +特效texiao +特写texie +特性texing +特邀teyao +特意teyi +特有teyou +特约teyue +特征tezheng +特制tezhi +特种tezhong +突飞猛进tfmj +铁饭碗tfw +同甘共苦tggk +提货单thd +谈何容易thry +提ti +题ti +体ti +替ti +梯ti +惕ti +剔ti +踢ti +锑ti +蹄ti +啼ti +嚏ti +涕ti +剃ti +屉ti +倜ti +荑*ti +悌ti +逖ti +绨*ti +缇ti +鹈ti +裼ti +醍ti +天tian +田tian +添tian +填tian +甜tian +佃*tian +恬tian +舔tian +腆tian +掭tian +忝tian +阗tian +殄tian +畋tian +填报tianbao +天边tianbian +填表tianbiao +填补tianbu +天才tiancai +天长tianchang +填充tianchong +天地tiandi +田地tiandi +天鹅tiane +天府tianfu +天赋tianfu +天机tianji +天际tianji +添加tianjia +天津tianjin +恬静tianjing +天空tiankong +填空tiankong +天理tianli +天良tianliang +天亮tianliang +甜美tianmei +甜蜜tianmi +天明tianming +天平tianping +天气tianqi +天桥tianqiao +天然tianran +天壤tianrang +天色tianse +天上tianshang +天生tiansheng +天使tianshi +天堂tiantang +天体tianti +天天tiantian +甜头tiantou +天文tianwen +天下tianxia +天险tianxian +天仙tianxian +天性tianxing +天涯tianya +田野tianye +天真tianzhen +天职tianzhi +添置tianzhi +天资tianzi +条tiao +调*tiao +跳tiao +挑tiao +迢tiao +眺tiao +佻tiao +苕*tiao +祧tiao +窕tiao +蜩tiao +笤tiao +粜tiao +龆tiao +鲦tiao +髫tiao +挑拔tiaoba +跳动tiaodong +挑动tiaodong +挑逗tiaodou +跳高tiaogao +调和tiaohe +调剂tiaoji +条件tiaojian +调解tiaojie +调节tiaojie +条款tiaokuan +调理tiaoli +条理tiaoli +条例tiaoli +条令tiaoling +调配tiaopei +挑剔tiaoti +调停tiaoting +条文tiaowen +跳舞tiaowu +调戏tiaoxi +挑衅tiaoxin +挑选tiaoxuan +条约tiaoyue +挑战tiaozhan +调整tiaozheng +条子tiaozi +提拨tibo +题材ticai +体裁ticai +体操ticao +体察ticha +提倡tichang +提成ticheng +提出tichu +剔除tichu +题词tici +替代tidai +梯队tidui +铁tie +贴tie +帖tie +萜tie +餮tie +贴补tiebu +铁道tiedao +贴近tiejin +铁路tielu +贴切tieqie +贴身tieshen +铁证tiezheng +提法tifa +提防tifang +提纲tigang +提高tigao +体格tige +提供tigong +替换tihuan +体会tihui +提货tihuo +体积tiji +提价tijia +体力tili +体例tili +提炼tilian +体谅tiliang +体面timian +提名timing +题名timing +题目timu +听ting +停ting +庭ting +挺ting +廷ting +厅ting +烃ting +汀ting +亭ting +艇ting +莛ting +葶ting +婷ting +梃ting +町*ting +铤ting +蜓ting +霆ting +挺拔tingba +停办tingban +停泊tingbo +停产tingchan +听从tingcong +停顿tingdun +停工tinggong +挺括tinggua +听候tinghou +听话tinghua +停火tinghuo +听见tingjian +厅局tingju +听觉tingjue +停留tingliu +听凭tingping +听取tingqu +听任tingren +听说tingshuo +听信tingxin +厅长tingzhang +停止tingzhi +停职tingzhi +停滞tingzhi +听众tingzhong +提起tiqi +提前tiqian +提取tiqu +提升tisheng +提示tishi +体坛titan +体贴titie +提问tiwen +体温tiwen +体系tixi +体现tixian +体型tixing +提醒tixing +体验tiyan +提要tiyao +提议tiyi +体育tiyu +体制tizhi +体质tizhi +题字tizi +统计表tjb +条件反射tjfs +讨价还价tjhj +天津市tjs +条件下tjx +讨论会tlh +拖拉机tlj +他们的tmd +同盟会tmh +天南地北tndb +同tong +通tong +统tong +铜tong +痛tong +筒tong +童tong +桶tong +侗*tong +恫*tong +桐tong +酮tong +瞳tong +彤tong +捅tong +佟tong +仝tong +垌*tong +茼tong +嗵tong +峒*tong +恸tong +潼tong +砼tong +同伴tongban +同胞tongbao +通报tongbao +同辈tongbei +通病tongbing +同步tongbu +通常tongchang +通称tongcheng +统称tongcheng +痛斥tongchi +统筹tongchou +痛楚tongchu +同窗tongchuang +同道tongdao +通道tongdao +同等tongdeng +通电tongdian +通牒tongdie +通读tongdu +通告tonggao +统购tonggou +通过tongguo +通航tonghang +痛恨tonghen +同化tonghua +通话tonghua +童话tonghua +痛悔tonghui +通婚tonghun +统计tongji +通辑tongji +痛击tongji +同居tongju +痛苦tongku +痛哭tongku +痛快tongkuai +同僚tongliao +通令tongling +同盟tongmeng +同年tongnian +童年tongnian +同期tongqi +通气tongqi +同情tongqing +通融tongrong +同上tongshang +通商tongshang +同时tongshi +同事tongshi +统属tongshu +统帅tongshuai +通顺tongshun +通俗tongsu +通往tongwang +痛恶tongwu +痛惜tongxi +统辖tongxia +通向tongxiang +同乡tongxiang +统销tongxiao +通宵tongxiao +通晓tongxiao +同心tongxin +痛心tongxin +通信tongxin +同行tongxing +通行tongxing +同性tongxing +同学tongxue +通讯tongxun +同样tongyang +统一tongyi +同意tongyi +通用tongyong +通邮tongyou +统战tongzhan +同志tongzhi +统治tongzhi +通知tongzhi +头tou +投tou +透tou +偷tou +钭tou +骰tou +投案touan +头版touban +投奔touben +投标toubiao +投产touchan +透彻touche +头等toudeng +投放toufang +投机touji +投靠toukao +投篮toulan +偷懒toulan +头颅toulu +透露toulu +头面toumian +透明touming +头目toumu +头脑tounao +投票toupiao +透气touqi +投入touru +投身toushen +透视toushi +头痛toutong +偷闲touxian +投降touxiang +头绪touxu +投影touying +投掷touzhi +头子touzi +投资touzi +突破口tpk +太平洋tpy +通情达理tqdl +天气预报tqyb +突然袭击trxj +妥善处理tscl +通俗读物tsdw +挺身而出tsec +图书馆tsg +滔滔不绝ttbj +痛痛快快ttkk +团体赛tts +踏踏实实ttss +图tu +土tu +突tu +途tu +徒tu +凸tu +涂tu +吐tu +兔tu +屠tu +秃tu +堍tu +荼tu +菟tu +钍tu +酴tu +团tuan +湍tuan +抟tuan +彖tuan +疃tuan +图案tuan +湍急tuanji +团结tuanjie +团聚tuanju +湍流tuanliu +团体tuanti +团员tuanyuan +团圆tuanyuan +团长tuanzhang +突变tubian +图表tubiao +土产tuchan +突出tuchu +土地tudi +徒弟tudi +土匪tufei +土改tugai +涂改tugai +图画tuhua +土话tuhua +推tui +退tui +腿tui +颓tui +蜕tui +褪tui +忒*tui +煺tui +蜕变tuibian +退步tuibu +推测tuice +推迟tuichi +推崇tuichong +退出tuichu +推导tuidao +推动tuidong +推断tuiduan +推翻tuifan +颓废tuifei +推广tuiguang +退化tuihua +蜕化tuihua +退回tuihui +推荐tuijian +推进tuijin +推举tuiju +推开tuikai +推理tuili +推论tuilun +推敲tuiqiao +推却tuique +退却tuique +推让tuirang +退让tuirang +颓丧tuisang +退色tuise +推算tuisuan +退缩tuisuo +颓唐tuitang +推托tuituo +退伍tuiwu +推向tuixiang +推销tuixiao +推卸tuixie +推行tuixing +退休tuixiu +退学tuixue +推移tuiyi +退职tuizhi +突击tuji +图解tujie +途径tujing +徒劳tulao +图例tuli +吐露tulu +囤*tun +褪*tun +吞tun +屯tun +臀tun +氽tun +饨tun +暾tun +豚tun +吞并tunbing +吞没tunmo +吞吐tuntu +脱tuo +拖tuo +托tuo +妥tuo +椭tuo +舵*tuo +魄*tuo +鸵tuo +陀tuo +驮tuo +驼tuo +拓tuo +唾tuo +乇tuo +佗tuo +坨tuo +庹tuo +沱tuo +柝tuo +柁*tuo +橐tuo +砣tuo +铊*tuo +箨tuo +酡tuo +跎tuo +鼍tuo +驼背tuobei +拓补tuobu +脱出tuochu +妥当tuodang +脱轨tuogui +拓荒tuohuang +脱节tuojie +拖拉tuola +脱离tuoli +唾骂tuoma +唾弃tuoqi +妥善tuoshan +脱身tuoshen +妥协tuoxie +拖延tuoyan +唾液tuoye +图片tupian +突破tupo +突起tuqi +突然turan +徒然turan +土壤turang +屠杀tusha +徒手tushou +图书tushu +吐痰tutan +突围tuwei +突兀tuwu +图象tuxiang +图像tuxiang +图形tuxing +徒刑tuxing +图章tuzhang +图纸tuzhi +途中tuzhong +土著tuzhu +秃子tuzi +贪污盗窃twdq +台湾省tws +贪污受贿twsh +提心吊胆txdd +通讯社txs +同心同德txtd +同心协力txxl +推心置腹txzf +体育场tyc +体育锻炼tydl +体育馆tyg +腾云驾雾tyjw +太阳能tyn +太原市tys +天衣无缝tywf +通用性tyx +体育运动tyyd +团支部tzb +停滞不前tzbq +同志们tzm +天灾人祸tzrh +听之任之tzrz +通知书tzs +为w +我w +无w +问w +外w +五w +位w +物w +委w +完w +温w +万w +文w +往w +武w +务w +王w +围w +误w +晚w +瓦wa +挖wa +凹*wa +哇wa +蛙wa +洼wa +娃wa +袜wa +佤wa +娲wa +腽wa +外wai +歪wai +外币waibi +外边waibian +外表waibiao +外宾waibin +外部waibu +外传waichuan +外存waicun +外地waidi +外调waidiao +歪风waifeng +外观waiguan +外国waiguo +外行waihang +外汇waihui +外加waijia +外交waijiao +外界waijie +外景waijing +外科waike +外快waikuai +外流wailiu +外貌waimao +外贸waimao +外面waimian +外勤waiqin +歪曲waiqu +外商waishang +外伤waishang +外设waishe +外省waisheng +外甥waisheng +外事waishi +外围waiwei +外文waiwen +外线waixian +外销waixiao +歪斜waixie +外延waiyan +外因waiyin +外语waiyu +外援waiyuan +外在waizai +外债waizhai +外资waizi +瓦解wajie +挖掘wajue +挖苦waku +瓦砾wali +完wan +万wan +晚wan +弯wan +碗wan +顽wan +湾wan +挽wan +玩wan +蔓*wan +娩*wan +豌wan +丸wan +烷wan +皖wan +惋wan +宛wan +婉wan +腕wan +剜wan +芄wan +莞*wan +菀wan +纨wan +绾wan +琬wan +脘wan +畹wan +蜿wan +万般wanban +晚报wanbao +完备wanbei +完毕wanbi +完成wancheng +万代wandai +顽敌wandi +万吨wandun +万恶wane +万分wanfen +往wang +王wang +望wang +网wang +忘wang +妄wang +亡wang +旺wang +芒*wang +汪wang +枉wang +罔wang +尢wang +惘wang +辋wang +魍wang +往常wangchang +王朝wangchao +忘掉wangdiao +妄动wangdong +枉法wangfa +往返wangfan +枉费wangfei +往复wangfu +王国wangguo +亡国wangguo +往后wanghou +忘怀wanghuai +忘记wangji +旺季wangji +往来wanglai +网络wangluo +亡命wangming +往年wangnian +完工wangong +忘却wangque +枉然wangran +惘然wangran +往日wangri +旺盛wangsheng +往事wangshi +妄图wangtu +万古wangu +顽固wangu +往往wangwang +汪汪wangwang +忘我wangwo +往昔wangxi +妄想wangxiang +汪洋wangyang +望远wangyuan +王子wangzi +完好wanhao +晚会wanhui +挽回wanhui +晚婚wanhun +晚间wanjian +完结wanjie +挽救wanjiu +玩具wanju +顽抗wankang +完了wanle +挽力wanli +弯路wanlu +完美wanmei +万能wanneng +万年wannian +晚年wannian +玩弄wannong +晚期wanqi +顽强wanqiang +弯曲wanqu +完全wanquan +完善wanshan +晚上wanshang +玩赏wanshang +万事wanshi +万世wanshi +玩耍wanshua +万岁wansui +万万wanwan +万物wanwu +晚霞wanxia +万象wanxiang +玩笑wanxiao +万幸wanxing +婉言wanyan +万一wanyi +万元wanyuan +完整wanzheng +顽症wanzheng +万众wanzhong +宛转wanzhuan +瓦斯wasi +瓦特wate +娃娃wawa +外部设备wbsb +微不足道wbzd +无产阶级wcjj +微处理机wclj +无产者wcz +为wei +位wei +委wei +围wei +维wei +唯wei +卫wei +微wei +伟wei +未wei +威wei +危wei +尾wei +谓wei +喂wei +味wei +胃wei +魏wei +伪wei +遗*wei +违wei +韦wei +畏wei +纬wei +巍wei +桅wei +惟wei +潍wei +苇wei +萎wei +蔚wei +渭wei +尉wei +慰wei +偎wei +诿wei +隈wei +隗*wei +圩*wei +葳wei +薇wei +囗wei +帏wei +帷wei +崴wei +嵬wei +猥wei +猬wei +闱wei +沩wei +洧wei +涠wei +逶wei +娓wei +玮wei +韪wei +軎wei +炜wei +煨wei +痿wei +艉wei +鲔wei +尾巴weiba +违背weibei +未必weibi +威逼weibi +微波weibo +微薄weibo +未曾weiceng +未尝weichang +维持weichi +为此weici +伟大weida +味道weidao +纬度weidu +唯独weidu +巍峨weie +违法weifa +违反weifan +违犯weifan +威风weifeng +桅杆weigan +微观weiguan +危害weihai +为何weihe +维护weihu +危及weiji +微机weiji +危机weiji +危急weiji +围歼weijian +围剿weijiao +慰藉weijie +违禁weijin +未经weijing +畏惧weiju +违抗weikang +未可weike +唯恐weikong +惟恐weikong +胃口weikou +未来weilai +慰劳weilao +为了weile +威力weili +委靡weimi +未免weimian +微妙weimiao +帷幕weimu +危难weinan +畏难weinan +未能weineng +委派weipai +为期weiqi +畏怯weiqie +委曲weiqu +委屈weiqu +未然weiran +巍然weiran +围绕weirao +伟人weiren +委任weiren +微弱weiruo +威慑weishe +为生weisheng +卫生weisheng +尾声weisheng +卫士weishi +威势weishi +为首weishou +为数weishu +尾随weisui +未遂weisui +畏缩weisuo +萎缩weisuo +猥琐weisuo +委托weituo +委婉weiwan +危亡weiwang +巍巍weiwei +慰问weiwen +唯物weiwu +威武weiwu +微细weixi +威吓weixia +危险weixian +微小weixiao +微笑weixiao +威协weixie +威胁weixie +猥亵weixie +维新weixin +唯心weixin +违心weixin +威信weixin +微型weixing +卫星weixing +维修weixiu +威严weiyan +伟业weiye +唯一weiyi +位移weiyi +位于weiyu +谓语weiyu +委员weiyuan +为止weizhi +位置weizhi +未知weizhi +为重weizhong +为主weizhu +伪装weizhuang +问wen +温wen +文wen +稳wen +纹wen +闻wen +蚊wen +瘟wen +吻wen +紊wen +刎wen +阌wen +汶wen +璺wen +雯wen +文本wenben +瘟病wenbing +稳步wenbu +问答wenda +稳定wending +温度wendu +嗡weng +翁weng +瓮weng +蓊weng +蕹weng +稳固wengu +问好wenhao +温和wenhe +吻合wenhe +文化wenhua +文件wenjian +稳健wenjian +问津wenjin +文静wenjing +文具wenju +文科wenke +文盲wenmang +文明wenming +闻名wenming +温暖wennuan +文凭wenping +文人wenren +温柔wenrou +问世wenshi +文坛wentan +问题wenti +文体wenti +稳妥wentuo +文物wenwu +文献wenxian +文选wenxuan +文学wenxue +问讯wenxun +闻讯wenxun +文艺wenyi +瘟疫wenyi +文娱wenyu +文摘wenzhai +文章wenzhang +稳重wenzhong +文字wenzi +问罪wenzui +望而生畏wesw +闻风而动wfed +违法乱纪wflj +歪风邪气wfxq +温故知新wgzx +文化部whb +文汇报whb +文化馆whg +文化宫whg +武汉市whs +五湖四海whsh +忘乎所以whsy +问寒问暖whwn +文化娱乐whyl +玩忽职守whzs +外交部wjb +无纪律wjl +五讲四美wjsm +无拘无束wjws +无可奉告wkfg +无可非议wkfy +无可奈何wknh +乌鲁木齐wlmq +无理取闹wlqn +无论如何wlrh +物美价廉wmjl +误码率wml +文明礼貌wmlm +无名英雄wmyx +无能为力wnwl +我wo +握wo +窝wo +蜗wo +涡wo +沃wo +挝wo +卧wo +斡wo +倭wo +莴wo +喔wo +幄wo +渥wo +肟wo +硪wo +龌wo +窝藏wocang +卧床wochuang +我党wodang +卧倒wodao +我的wode +窝工wogong +我国woguo +我军wojun +我们women +窝囊wonang +我省wosheng +我校woxiao +为期不远wqby +无穷无尽wqwj +误入歧途wrqt +卫生部wsb +纹丝不动wsbd +万事大吉wsdj +万事俱备wsjb +为什么wsm +无所谓wsw +为所欲为wsyw +无所作为wszw +无wu +五wu +物wu +武wu +务wu +误wu +伍wu +舞wu +污wu +悟wu +雾wu +午wu +恶*wu +屋wu +乌wu +吴wu +亡*wu +诬wu +钨wu +巫wu +呜wu +芜wu +梧wu +吾wu +毋wu +捂wu +侮wu +坞wu +戊wu +晤wu +勿wu +兀wu +仵wu +阢wu +邬wu +圬wu +芴wu +唔wu +庑wu +怃wu +忤wu +浯wu +寤wu +迕wu +妩wu +婺wu +骛wu +杌wu +牾wu +於*wu +焐wu +鹉wu +鹜wu +痦wu +蜈wu +鋈wu +鼯wu +吾辈wubei +无比wubi +五笔wubi +务必wubi +舞弊wubi +无边wubian +无不wubu +五彩wucai +误差wucha +无常wuchang +无偿wuchang +舞场wuchang +武昌wuchang +无耻wuchi +无从wucong +武打wuda +舞蹈wudao +无敌wudi +舞动wudong +武斗wudou +武断wuduan +无法wufa +无妨wufang +无非wufei +武功wugong +污垢wugou +无故wugu +无关wuguan +五官wuguan +武官wuguan +无害wuhai +诬害wuhai +武汉wuhan +无何wuhe +乌黑wuhei +五湖wuhu +呜呼wuhu +误会wuhui +舞会wuhui +污秽wuhui +无及wuji +无机wuji +物价wujia +无间wujian +物件wujian +误解wujie +五届wujie +五金wujin +无愧wukui +无赖wulai +诬赖wulai +无理wuli +物理wuli +无礼wuli +物力wuli +武力wuli +无聊wuliao +无虑wulu +无论wulun +污蔑wumie +诬蔑wumie +无奈wunai +无能wuneng +毋宁wuning +务农wunong +物品wupin +无期wuqi +五七wuqi +武器wuqi +无情wuqing +无穷wuqiong +舞曲wuqu +无权wuquan +污染wuran +无任wuren +污辱wuru +侮辱wuru +物色wuse +无上wushang +误伤wushang +无声wusheng +午时wushi +务使wushi +无视wushi +误事wushi +务实wushi +无数wushu +武术wushu +无双wushuang +午睡wushui +五四wusi +无私wusi +舞台wutai +无题wuti +物体wuti +舞厅wuting +无为wuwei +无谓wuwei +无物wuwu +无暇wuxia +无限wuxian +诬陷wuxian +无效wuxiao +五星wuxing +午休wuxiu +无须wuxu +无需wuxu +务虚wuxu +午夜wuye +五一wuyi +无益wuyi +无疑wuyi +无垠wuyin +无用wuyong +毋庸wuyong +无余wuyu +无缘wuyuan +五月wuyue +物证wuzheng +无知wuzhi +物质wuzhi +武装wuzhuang +物资wuzi +兀自wuzi +误字wuzi +无罪wuzui +无微不至wwbz +唯物论wwl +卧薪尝胆wxcd +无线电wxd +微型机wxj +唯心论wxl +问心无愧wxwk +委员会wyh +无缘无故wywg +委员长wyz +误字率wzl +无足轻重wzqz +未知数wzs +完整无缺wzwq +学x +下x +行x +小x +线x +性x +新x +些x +想x +心x +向x +相x +系x +席x +现x +西x +修x +象x +先x +形x +心安理得xald +西安市xas +西半球xbq +相比之下xbzx +宣传部xcb +新陈代谢xcdx +新产品xcp +畜产品xcp +西城区xcq +喜出望外xcww +相对而言xdey +现代化xdh +想当然xdr +相对误差xdwc +先睹为快xdwk +形而上学xesx +显而易见xeyj +西方国家xfgj +消费品xfp +想方设法xfsf +先发制人xfzr +兴高采烈xgcl +新华社xhs +新华书店xhsd +系xi +席xi +西xi +习xi +细xi +吸xi +析xi +喜xi +洗xi +铣xi +稀xi +戏xi +隙xi +希xi +息xi +袭xi +锡xi +烯xi +牺xi +悉xi +惜xi +溪xi +腊*xi +栖*xi +昔xi +熙xi +硒xi +矽xi +晰xi +嘻xi +膝xi +夕xi +熄xi +汐xi +犀xi +檄xi +媳xi +僖xi +兮xi +隰xi +郗xi +茜*xi +菥xi +葸xi +蓰xi +奚xi +唏xi +徙xi +饩xi +阋xi +浠xi +淅xi +屣xi +嬉xi +玺xi +樨xi +曦xi +觋xi +欷xi +歙*xi +熹xi +禊xi +禧xi +皙xi +穸xi +裼*xi +蜥xi +螅xi +蟋xi +舄xi +舾xi +羲xi +粞xi +翕xi +醯xi +蹊*xi +鼷xi +下xia +夏xia +吓xia +狭xia +霞xia +唬*xia +瞎xia +虾xia +匣xia +辖xia +暇xia +峡xia +侠xia +厦xia +呷xia +狎xia +遐xia +瑕xia +柙xia +硖xia +瘕*xia +罅xia +黠xia +狭隘xiaai +下班xiaban +下辈xiabei +下边xiabian +下策xiace +下层xiaceng +下场xiachang +下沉xiachen +下次xiaci +瑕疵xiaci +下达xiada +吓倒xiadao +下等xiadeng +下毒xiadu +下发xiafa +下放xiafang +峡谷xiagu +霞光xiaguang +瞎话xiahua +喜爱xiai +下级xiaji +下集xiaji +夏季xiaji +下降xiajiang +侠客xiake +下来xialai +下联xialian +夏粮xialiang +下列xialie +下令xialing +下流xialiu +下落xialuo +下马xiama +厦门xiamen +下面xiamian +线xian +现xian +先xian +县xian +限xian +见*xian +显xian +鲜xian +献xian +险xian +陷xian +宪xian +纤xian +洗*xian +掀xian +弦xian +铣*xian +腺xian +锨xian +仙xian +咸xian +贤xian +衔xian +舷xian +闲xian +涎xian +嫌xian +馅xian +羡xian +冼xian +苋xian +莶xian +藓xian +岘xian +猃xian +暹xian +娴xian +氙xian +燹xian +祆xian +鹇xian +痫xian +蚬xian +筅xian +籼xian +酰xian +跣xian +跹xian +霰xian +西安xian +献宝xianbao +先辈xianbei +现场xianchang +现成xiancheng +县城xiancheng +献丑xianchou +献词xianci +现存xiancun +现代xiandai +先导xiandao +显得xiande +险地xiandi +限定xianding +限度xiandu +线段xianduan +限额xiane +险恶xiane +宪法xianfa +先锋xianfeng +险峰xianfeng +想xiang +向xiang +相xiang +象xiang +响xiang +项xiang +箱xiang +乡xiang +降*xiang +香xiang +像xiang +详xiang +橡xiang +享xiang +湘xiang +厢xiang +镶xiang +襄xiang +翔xiang +祥xiang +巷xiang +芗xiang +葙xiang +饷xiang +庠xiang +骧xiang +缃xiang +蟓xiang +鲞xiang +飨xiang +相爱xiangai +相比xiangbi +想必xiangbi +相差xiangcha +相称xiangcheng +相处xiangchu +相传xiangchuan +乡村xiangcun +相当xiangdang +向导xiangdao +相等xiangdeng +相对xiangdui +想法xiangfa +相反xiangfan +相仿xiangfang +相干xianggan +香港xianggang +相隔xiangge +相关xiangguan +相好xianghao +相互xianghu +相继xiangji +相加xiangjia +相见xiangjian +相减xiangjian +相交xiangjiao +橡胶xiangjiao +相近xiangjin +详尽xiangjin +巷口xiangkou +向来xianglai +相连xianglian +向量xiangliang +响亮xiangliang +相貌xiangmao +项目xiangmu +想念xiangnian +相片xiangpian +想起xiangqi +详情xiangqing +向上xiangshang +相声xiangsheng +响声xiangsheng +相识xiangshi +翔实xiangshi +享受xiangshou +相思xiangsi +相似xiangsi +香甜xiangtian +相同xiangtong +相投xiangtou +显贵xiangui +向往xiangwang +详细xiangxi +向下xiangxia +乡下xiangxia +象限xiangxian +想象xiangxiang +相信xiangxin +香烟xiangyan +相依xiangyi +相宜xiangyi +相应xiangying +相映xiangying +响应xiangying +享用xiangyong +相遇xiangyu +相约xiangyue +乡镇xiangzhen +象征xiangzheng +箱子xiangzi +陷害xianhai +显赫xianhe +鲜红xianhong +先后xianhou +鲜花xianhua +献花xianhua +闲话xianhua +贤惠xianhui +献计xianji +献技xianji +显见xianjian +衔接xianjie +先进xianjin +现金xianjin +险境xianjing +陷阱xianjing +现款xiankuan +现况xiankuang +先例xianli +献礼xianli +先烈xianlie +线路xianlu +显露xianlu +鲜美xianmei +鲜明xianming +贤明xianming +显目xianmu +羡慕xianmu +贤能xianneng +先期xianqi +掀起xianqi +限期xianqi +嫌弃xianqi +先前xianqian +先遣xianqian +险情xianqing +先驱xianqu +显然xianran +贤人xianren +闲人xianren +现任xianren +陷入xianru +闲散xiansan +献身xianshen +先生xiansheng +先是xianshi +现实xianshi +显示xianshi +娴熟xianshu +线索xiansuo +闲谈xiantan +险滩xiantan +先天xiantian +线条xiantiao +县委xianwei +纤维xianwei +显现xianxian +现象xianxiang +现行xianxing +鲜血xianxue +显眼xianyan +鲜艳xianyan +显要xianyao +险要xianyao +显耀xianyao +现役xianyi +嫌疑xianyi +现有xianyou +限于xianyu +闲杂xianza +现在xianzai +县长xianzhang +宪章xianzhang +限制xianzhi +先知xianzhi +闲置xianzhi +闲职xianzhi +显著xianzhu +现状xianzhuang +险阻xianzu +小xiao +消xiao +削xiao +效xiao +笑xiao +校xiao +销xiao +硝xiao +萧xiao +肖xiao +孝xiao +霄xiao +哮xiao +嚣xiao +宵xiao +淆xiao +晓xiao +啸xiao +哓xiao +崤xiao +潇xiao +逍xiao +骁xiao +绡xiao +枭xiao +枵xiao +蛸*xiao +筱xiao +箫xiao +魈xiao +小报xiaobao +小辈xiaobei +笑柄xiaobing +消沉xiaochen +消除xiaochu +消毒xiaodu +效法xiaofa +小贩xiaofan +消防xiaofang +消费xiaofei +校风xiaofeng +小鬼xiaogui +效果xiaoguo +小孩xiaohai +消耗xiaohao +消化xiaohua +笑话xiaohua +小惠xiaohui +销毁xiaohui +销魂xiaohun +消极xiaoji +削减xiaojian +小结xiaojie +小姐xiaojie +孝敬xiaojing +校刊xiaokan +小康xiaokang +效劳xiaolao +效力xiaoli +销路xiaolu +效率xiaolu +消灭xiaomie +消磨xiaomo +效能xiaoneng +消气xiaoqi +消遣xiaoqian +笑容xiaorong +削弱xiaoruo +潇洒xiaosa +校舍xiaoshe +小时xiaoshi +消失xiaoshi +消逝xiaoshi +消瘦xiaoshou +销售xiaoshou +小数xiaoshu +小说xiaoshuo +萧条xiaotiao +消息xiaoxi +肖像xiaoxiang +小心xiaoxin +枭雄xiaoxiong +小学xiaoxue +效验xiaoyan +逍遥xiaoyao +效益xiaoyi +效应xiaoying +校友xiaoyou +小于xiaoyu +校园xiaoyuan +销赃xiaozang +校长xiaozhang +嚣张xiaozhang +效忠xiaozhong +小组xiaozu +下情xiaqing +下去xiaqu +辖区xiaqu +下手xiashou +夏收xiashou +下属xiashu +下水xiashui +下台xiatai +夏天xiatian +下文xiawen +下午xiawu +下限xiaxian +下乡xiaxiang +遐想xiaxiang +狭义xiayi +下游xiayou +狭窄xiazhai +夏至xiazhi +夏种xiazhong +喜报xibao +细胞xibao +西北xibei +西边xibian +稀薄xibo +锡箔xibo +西餐xican +洗涤xidi +吸毒xidu +些xie +解*xie +写xie +斜xie +谢xie +协xie +械xie +叶*xie +血*xie +卸xie +屑xie +鞋xie +歇xie +邪xie +胁xie +蟹xie +泄xie +泻xie +契*xie +楔xie +蝎xie +挟xie +携xie +谐xie +懈xie +偕xie +亵xie +勰xie +燮xie +薤xie +撷xie +獬xie +廨xie +渫xie +瀣xie +邂xie +绁xie +缬xie +榭xie +榍xie +颉*xie +躞xie +写出xiechu +协从xiecong +携带xiedai +邪道xiedao +协调xiediao +协定xieding +亵渎xiedu +邪恶xiee +协和xiehe +谐和xiehe +协会xiehui +谢绝xiejue +协力xieli +泄漏xielou +邪路xielu +泄露xielu +泄密xiemi +邪念xienian +胁迫xiepo +邪气xieqi +协商xieshang +写生xiesheng +携手xieshou +邪说xieshuo +协同xietong +歇息xiexi +谢谢xiexie +协议xieyi +谐音xieyin +协约xieyue +写照xiezhao +协助xiezhu +鞋子xiezi +写作xiezuo +协作xiezuo +西方xifang +西风xifeng +西服xifu +吸附xifu +媳妇xifu +习惯xiguan +西汉xihan +稀罕xihan +希罕xihan +喜欢xihuan +袭击xiji +细节xijie +洗劫xijie +喜剧xiju +戏剧xiju +席卷xijuan +细菌xijun +犀利xili +系列xilie +奚落xiluo +熄灭ximie +新xin +心xin +信xin +锌xin +芯xin +辛xin +寻*xin +欣xin +薪xin +忻xin +衅xin +囟xin +馨xin +昕xin +歆xin +镡*xin +鑫xin +心爱xinai +西南xinan +新春xinchun +信贷xindai +心得xinde +心烦xinfan +心服xinfu +信服xinfu +行xing +性xing +形xing +型xing +星xing +兴xing +省*xing +醒xing +姓xing +幸xing +腥xing +猩xing +惺xing +刑xing +邢xing +杏xing +陉xing +荇xing +荥xing +擤xing +饧xing +悻xing +硎xing +心甘xingan +兴办xingban +性别xingbie +姓别xingbie +刑场xingchang +星辰xingchen +形成xingcheng +行程xingcheng +行动xingdong +幸而xinger +刑法xingfa +刑罚xingfa +兴奋xingfen +幸福xingfu +性格xingge +幸好xinghao +型号xinghao +行贿xinghui +星火xinghuo +性急xingji +形迹xingji +兴建xingjian +行径xingjing +行军xingjun +星空xingkong +幸亏xingkui +行李xingli +行旅xinglu +幸免xingmian +性命xingming +姓名xingming +醒目xingmu +性能xingneng +行期xingqi +兴起xingqi +星期xingqi +性情xingqing +星球xingqiu +兴趣xingqu +形容xingrong +行商xingshang +兴盛xingsheng +行使xingshi +行事xingshi +行驶xingshi +形式xingshi +幸事xingshi +刑事xingshi +形势xingshi +姓氏xingshi +行署xingshu +兴衰xingshuai +形态xingtai +形体xingti +兴亡xingwang +兴旺xingwang +行为xingwei +行文xingwen +醒悟xingwu +形象xingxiang +行销xingxiao +星星xingxing +行凶xingxiong +兴修xingxiu +行业xingye +星夜xingye +幸运xingyun +行政xingzheng +性质xingzhi +兴致xingzhi +形状xingzhuang +行走xingzou +信号xinhao +心狠xinhen +心慌xinhuang +信汇xinhui +细腻xini +西宁xining +心急xinji +信件xinjian +新疆xinjiang +新近xinjin +新居xinju +心坎xinkan +辛苦xinku +信赖xinlai +辛劳xinlao +心理xinli +心里xinli +心灵xinling +心目xinmu +信念xinnian +戏弄xinong +新奇xinqi +辛勤xinqin +心情xinqing +新区xinqu +新人xinren +信任xinren +欣赏xinshang +新生xinsheng +心声xinsheng +新事xinshi +新式xinshi +新书xinshu +薪水xinshui +心酸xinsuan +辛酸xinsuan +心疼xinteng +心田xintian +心跳xintiao +心头xintou +欣慰xinwei +新闻xinwen +心细xinxi +信息xinxi +欣喜xinxi +新鲜xinxian +心想xinxiang +信箱xinxiang +馨香xinxiang +信心xinxin +新型xinxing +新星xinxing +新兴xinxing +心虚xinxu +心血xinxue +信仰xinyang +心意xinyi +新异xinyi +新颖xinying +信用xinyong +新余xinyu +信誉xinyu +心愿xinyuan +心脏xinzang +新址xinzhi +心中xinzhong +雄xiong +胸xiong +兄xiong +凶xiong +熊xiong +匈xiong +汹xiong +芎xiong +雄辩xiongbian +雄兵xiongbing +凶残xiongcan +兄弟xiongdi +凶恶xionge +雄关xiongguan +凶狠xionghen +雄厚xionghou +胸怀xionghuai +雄健xiongjian +胸口xiongkou +熊猫xiongmao +凶猛xiongmeng +匈奴xiongnu +凶器xiongqi +凶杀xiongsha +雄师xiongshi +凶手xiongshou +胸膛xiongtang +雄伟xiongwei +雄心xiongxin +汹涌xiongyong +雄壮xiongzhuang +雄姿xiongzi +西欧xiou +习气xiqi +吸气xiqi +喜气xiqi +稀奇xiqi +希奇xiqi +喜庆xiqing +吸取xiqu +戏曲xiqu +昔日xiri +牺牲xisheng +西式xishi +喜事xishi +稀释xishi +吸收xishou +系数xishu +洗刷xishua +吸吮xishun +习俗xisu +习题xiti +西天xitian +系统xitong +修xiu +锈xiu +休xiu +袖xiu +秀xiu +朽xiu +宿*xiu +臭*xiu +羞xiu +嗅xiu +绣xiu +咻xiu +岫xiu +馐xiu +庥xiu +溴xiu +鸺xiu +貅xiu +髹xiu +修补xiubu +秀才xiucai +羞耻xiuchi +修辞xiuci +修订xiuding +修复xiufu +修改xiugai +修建xiujian +修剪xiujian +嗅觉xiujue +休克xiuke +羞愧xiukui +修理xiuli +秀丽xiuli +秀气xiuqi +羞辱xiuru +羞涩xiuse +修饰xiushi +休息xiuxi +休想xiuxiang +修养xiuyang +休养xiuyang +修造xiuzao +袖章xiuzhang +袖珍xiuzhen +修正xiuzheng +修筑xiuzhu +希望xiwang +席位xiwei +细微xiwei +西文xiwen +檄文xiwen +细小xixiao +细心xixin +悉心xixin +喜讯xixun +吸烟xiyan +西洋xiyang +西医xiyi +吸引xiyin +希有xiyou +戏院xiyuan +喜悦xiyue +西藏xizang +洗澡xizao +细则xize +细致xizhi +习作xizuo +下基层xjc +现阶段xjd +新技术xjs +献计献策xjxc +先见之明xjzm +兴利除弊xlcb +系列化xlh +稀里糊涂xlht +狭路相逢xlxf +畜牧业xmy +心满意足xmyz +西宁市xns +小朋友xpy +向前看xqk +喜气洋洋xqyy +先人后己xrhj +兴师动众xsdz +销售额xse +刑事犯罪xsfz +小时候xsh +新时期xsq +新生事物xssw +形式主义xszy +相提并论xtbl +续xu +许xu +须xu +需xu +序xu +虚xu +絮xu +畜xu +叙xu +蓄xu +绪xu +徐xu +墟xu +戌xu +嘘xu +酗xu +旭xu +恤xu +婿xu +吁*xu +诩xu +勖xu +圩xu +蓿xu +洫xu +浒*xu +溆xu +顼xu +栩xu +煦xu +砉*xu +盱xu +胥xu +糈xu +醑xu +选xuan +旋xuan +宣xuan +悬xuan +玄xuan +券*xuan +轩xuan +喧xuan +癣xuan +眩xuan +绚xuan +儇xuan +谖xuan +萱xuan +揎xuan +泫xuan +渲xuan +漩xuan +璇xuan +楦xuan +暄xuan +炫xuan +煊xuan +碹xuan +铉xuan +镟xuan +痃xuan +悬案xuanan +轩昂xuanang +选拔xuanba +宣布xuanbu +选材xuancai +选场xuanchang +宣称xuancheng +宣传xuanchuan +选定xuanding +宣读xuandu +宣告xuangao +选购xuangou +悬挂xuangua +玄乎xuanhu +喧哗xuanhua +选集xuanji +宣讲xuanjiang +选举xuanju +绚烂xuanlan +绚丽xuanli +选录xuanlu +旋律xuanlu +选民xuanmin +喧闹xuannao +悬念xuannian +选派xuanpai +宣判xuanpan +选配xuanpei +选票xuanpiao +选区xuanqu +选取xuanqu +喧嚷xuanrang +宣誓xuanshi +选手xuanshou +悬殊xuanshu +旋涡xuanwo +玄虚xuanxu +悬崖xuanya +宣言xuanyan +宣扬xuanyang +炫耀xuanyao +选用xuanyong +选择xuanze +宣战xuanzhan +选种xuanzhong +旋转xuanzhuan +许多xuduo +学xue +血xue +削*xue +雪xue +穴xue +靴xue +薛xue +谑xue +噱*xue +泶xue +踅xue +鳕xue +学报xuebao +学部xuebu +学潮xuechao +学费xuefei +学风xuefeng +学府xuefu +血汗xuehan +学好xuehao +学会xuehui +学籍xueji +血迹xueji +学科xueke +血泪xuelei +学历xueli +学龄xueling +学年xuenian +学派xuepai +学期xueqi +血肉xuerou +学生xuesheng +学时xueshi +学识xueshi +学士xueshi +学术xueshu +血书xueshu +学说xueshuo +血统xuetong +学徒xuetu +学位xuewei +学问xuewen +学习xuexi +血洗xuexi +学校xuexiao +血压xueya +学业xueye +血液xueye +学友xueyou +学员xueyuan +学院xueyuan +血晕xueyun +血战xuezhan +学者xuezhe +学制xuezhi +虚构xugou +序号xuhao +蓄积xuji +虚假xujia +叙旧xujiu +许可xuke +序列xulie +绪论xulun +虚名xuming +序幕xumu +畜牧xumu +训xun +旬xun +迅xun +讯xun +寻xun +循xun +巡xun +荤*xun +浚*xun +勋xun +熏xun +询xun +驯xun +殉xun +汛xun +逊xun +巽xun +郇*xun +埙xun +荀xun +蕈xun +薰xun +峋xun +徇xun +獯xun +恂xun +洵xun +浔xun +曛xun +窨*xun +醺xun +鲟xun +巡捕xunbu +巡查xuncha +寻常xunchang +驯服xunfu +殉国xunguo +巡航xunhang +循环xunhuan +巡回xunhui +虚拟xuni +寻机xunji +巡警xunjing +勋爵xunjue +训练xunlian +巡逻xunluo +迅猛xunmeng +寻求xunqiu +逊色xunse +巡视xunshi +徇私xunsi +迅速xunsu +熏陶xuntao +许诺xunuo +讯问xunwen +询问xunwen +寻衅xunxin +循序xunxu +勋章xunzhang +寻找xunzhao +殉职xunzhi +寻址xunzhi +需求xuqiu +序曲xuqu +虚荣xurong +虚弱xuruo +虚设xushe +叙事xushi +虚实xushi +序数xushu +虚数xushu +叙述xushu +叙说xushuo +虚伪xuwei +虚心xuxin +序言xuyan +需要xuyao +须臾xuyu +许愿xuyuan +须知xuzhi +宣武区xwq +信息处理xxcl +循序见进xxjj +辛辛苦苦xxkk +信息量xxl +熙熙攘攘xxrr +小学生xxs +欣欣向荣xxxr +小心翼翼xxyy +下一步xyb +胸有成竹xycz +洗衣机xyj +小意思xys +习以为常xywc +新颖性xyx +兴致勃勃xzbb +新中国xzg +行政区域xzqy +雪中送炭xzst +心中无数xzws +选择性xzx +心中有数xzys +行之有效xzyx +一y +有y +用y +要y +以y +于y +也y +样y +义y +与y +由y +压y +员y +月y +意y +又y +运y +原y +油y +验y +压ya +亚ya +呀ya +牙ya +芽ya +雅ya +蚜ya +鸭ya +匹*ya +押ya +鸦ya +丫ya +崖ya +衙ya +涯ya +哑ya +讶ya +伢ya +垭ya +揠ya +岈ya +迓ya +娅ya +琊ya +桠ya +氩ya +砑ya +睚ya +痖ya +哑巴yaba +牙齿yachi +压倒yadao +压服yafu +牙关yaguan +雅观yaguan +压价yajia +押金yajin +亚军yajun +压力yali +验yan +研yan +严yan +眼yan +言yan +盐yan +演yan +岩yan +沿yan +烟yan +延yan +掩yan +宴yan +炎yan +颜yan +燕yan +衍yan +铅*yan +焉yan +咽yan +阉yan +淹yan +蜒yan +阎yan +奄yan +艳yan +堰yan +厌yan +砚yan +雁yan +唁yan +彦yan +焰yan +谚yan +殷*yan +厣yan +赝yan +剡*yan +俨yan +偃yan +兖yan +谳yan +阽*yan +郾yan +鄢yan +芫*yan +菸yan +崦yan +恹yan +闫yan +阏yan +湮yan +滟yan +妍yan +嫣yan +琰yan +檐yan +晏yan +胭yan +腌*yan +焱yan +罨yan +筵yan +酽yan +魇yan +餍yan +鼹yan +沿岸yanan +严办yanban +掩蔽yanbi +演变yanbian +烟草yancao +延长yanchang +演唱yanchang +严惩yancheng +延迟yanchi +演出yanchu +唁电yandian +严冬yandong +厌恶yane +厌烦yanfan +样yang +养yang +氧yang +扬yang +洋yang +阳yang +羊yang +秧yang +央yang +杨yang +仰yang +殃yang +鸯yang +佯yang +疡yang +痒yang +漾yang +徉yang +怏yang +泱yang +炀yang +烊yang +恙yang +蛘yang +鞅yang +掩盖yangai +样板yangban +样本yangben +洋财yangcai +养成yangcheng +沿革yange +严格yange +阳光yangguang +洋行yanghang +养护yanghu +氧化yanghua +养料yangliao +杨柳yangliu +仰面yangmian +殃民yangmin +仰慕yangmu +样品yangpin +洋气yangqi +扬弃yangqi +央求yangqiu +养伤yangshang +样式yangshi +阳台yangtai +眼光yanguang +仰望yangwang +洋务yangwu +洋相yangxiang +扬言yangyan +样样yangyang +洋溢yangyi +养育yangyu +养殖yangzhi +样子yangzi +沿海yanhai +严寒yanhan +眼红yanhong +咽喉yanhou +掩护yanhu +眼花yanhua +延缓yanhuan +宴会yanhui +焰火yanhuo +演讲yanjiang +眼界yanjie +严禁yanjin +严谨yanjin +眼镜yanjing +眼睛yanjing +研究yanjiu +严峻yanjun +眼看yankan +严酷yanku +眼眶yankuang +眼泪yanlei +眼力yanli +严厉yanli +艳丽yanli +眼帘yanlian +眼亮yanliang +言路yanlu +沿路yanlu +言论yanlun +掩埋yanmai +严密yanmi +严明yanming +烟幕yanmu +延年yannian +延期yanqi +眼前yanqian +宴请yanqing +俨然yanran +炎热yanre +眼色yanse +颜色yanse +延伸yanshen +岩石yanshi +演示yanshi +掩饰yanshi +验收yanshou +严守yanshou +延寿yanshou +演说yanshuo +严肃yansu +演算yansuan +言谈yantan +研讨yantao +沿途yantu +阎王yanwang +延误yanwu +烟雾yanwu +宴席yanxi +筵席yanxi +演习yanxi +沿袭yanxi +眼下yanxia +沿线yanxian +言行yanxing +严刑yanxing +延续yanxu +艳阳yanyang +演义yanyi +演绎yanyi +掩映yanying +沿用yanyong +言语yanyu +演员yanyuan +厌战yanzhan +沿着yanzhe +验证yanzheng +研制yanzhi +严重yanzhong +演奏yanzou +要yao +药yao +约*yao +摇yao +腰yao +咬yao +邀yao +耀yao +陶*yao +侥*yao +疟yao +妖yao +瑶yao +尧yao +遥yao +窑yao +谣yao +姚yao +舀yao +钥*yao +夭yao +爻yao +吆yao +崾yao +徭yao +幺yao +珧yao +杳yao +轺yao +曜yao +肴yao +铫*yao +鹞yao +窈yao +繇yao +鳐yao +摇摆yaobai +腰包yaobao +要不yaobu +谣传yaochuan +要得yaode +要点yaodian +摇动yaodong +窑洞yaodong +遥感yaogan +妖怪yaoguai +要害yaohai +摇撼yaohan +摇晃yaohuang +要件yaojian +要紧yaojin +摇控yaokong +遥控yaokong +摇篮yaolan +要领yaoling +要么yaome +妖魔yaomo +要目yaomu +邀请yaoqing +要求yaoqiu +要塞yaosai +要是yaoshi +钥匙yaoshi +要素yaosu +窈窕yaotiao +摇头yaotou +要闻yaowen +药物yaowu +要挟yaoxie +耀眼yaoyan +谣言yaoyan +妖艳yaoyan +夭折yaozhe +要职yaozhi +鸦片yapian +压迫yapo +压强yaqiang +压缩yasuo +雅兴yaxing +压仰yayang +压抑yayi +压榨yazha +压制yazhi +雅致yazhi +亚洲yazhou +鸭子yazi +雅座yazuo +要不得ybd +一般的说ybds +一部分ybf +要不然ybr +要不是ybs +一般说来ybsl +要不要yby +一辈子ybz +一把抓ybz +用不着ybz +扬长避短ycbd +由此可见yckj +银川市ycs +与此同时ycts +有偿转让yczr +邮电部ydb +有道德ydd +邮电局ydj +一刀切ydq +运动员ydy +印度洋ydy +因地制宜ydzy +也ye +业ye +页ye +叶ye +液ye +夜ye +野ye +爷ye +冶ye +邪*ye +哗*ye +咽*ye +椰ye +噎ye +耶ye +掖ye +曳ye +腋ye +拽*ye +靥ye +谒ye +邺ye +揶ye +晔ye +烨ye +铘ye +夜餐yecan +野餐yecan +野火yehuo +业绩yeji +夜间yejian +冶金yejin +夜里yeli +冶练yelian +野蛮yeman +夜幕yemu +夜色yese +也是yeshi +夜市yeshi +野兽yeshou +液体yeti +野外yewai +夜晚yewan +业务yewu +夜校yexiao +野心yexin +野性yexing +也许yexu +幼儿园yey +爷爷yeye +野营yeying +业余yeyu +野战yezhan +叶子yezi +一方面yfm +一分为二yfwe +阳奉阴违yfyw +一概而论ygel +一国两制yglz +有根有据ygyj +严格要求ygyq +有何特长yhtc +银行帐号yhzh +炎黄子孙yhzs +一yi +以yi +义yi +意yi +已yi +移yi +医yi +议yi +依yi +易yi +乙yi +艺yi +益yi +异yi +宜yi +仪yi +亿yi +遗yi +伊yi +役yi +衣yi +疑yi +亦yi +谊yi +翼yi +译yi +抑yi +忆yi +疫yi +壹yi +揖yi +铱yi +颐yi +夷yi +胰yi +沂yi +姨yi +彝yi +椅yi +蚁yi +倚yi +矣yi +邑yi +屹yi +臆yi +逸yi +肄yi +裔yi +毅yi +溢yi +诣yi +翌yi +绎yi +刈yi +劓yi +仡*yi +佚yi +佾yi +诒yi +圯yi +埸yi +懿yi +苡yi +荑yi +薏yi +弈yi +奕yi +挹yi +弋yi +呓yi +咦yi +咿yi +嗌*yi +噫yi +峄yi +嶷yi +猗yi +饴yi +怿yi +怡yi +悒yi +漪yi +迤yi +驿yi +缢yi +殪yi +轶yi +贻yi +欹*yi +旖yi +熠yi +眙yi +钇yi +镒yi +镱yi +痍yi +瘗yi +癔yi +翊yi +蜴yi +舣yi +羿yi +翳yi +酏yi +黟yi +议案yian +疑案yian +一半yiban +一般yiban +一斑yiban +一边yibian +以便yibian +仪表yibiao +一并yibing +异步yibu +遗产yichan +异常yichang +议程yicheng +益处yichu +遗传yichuan +一次yici +依次yici +依从yicong +一代yidai +一带yidai +一旦yidan +一点yidian +一定yiding +议定yiding +移动yidong +一度yidu +遗毒yidu +一端yiduan +臆断yiduan +亿吨yidun +一发yifa +依法yifa +义愤yifen +衣服yifu +依附yifu +一概yigai +一个yige +一共yigong +议购yigou +已故yigu +一贯yiguan +异国yiguo +遗憾yihan +遗恨yihen +以后yihou +异化yihua +议会yihui +疑惑yihuo +以及yiji +异己yiji +遗迹yiji +议价yijia +意见yijian +移交yijiao +一届yijie +一经yijing +已经yijing +意境yijing +依旧yijiu +一举yiju +依据yiju +移居yiju +议决yijue +依靠yikao +倚靠yikao +一刻yike +医科yike +一块yikuai +以来yilai +依赖yilai +一览yilan +一例yili +毅力yili +屹立yili +一连yilian +意料yiliao +医疗yiliao +遗留yiliu +遗漏yilou +一律yilu +疑虑yilu +议论yilun +一面yimian +以免yimian +疫苗yimiao +移民yimin +因yin +引yin +阴yin +印yin +音yin +银yin +烟*yin +隐yin +饮yin +荫yin +茵yin +殷yin +姻yin +吟yin +淫yin +寅yin +尹yin +胤yin +鄞yin +圻*yin +垠yin +堙yin +茚yin +吲yin +喑yin +狺yin +夤yin +洇yin +湮*yin +氤yin +铟yin +瘾yin +窨yin +蚓yin +霪yin +龈yin +疑难yinan +阴暗yinan +隐蔽yinbi +音标yinbiao +隐藏yincang +阴沉yinchen +银川yinchuan +因此yinci +引导yindao +音调yindiao +印度yindu +引渡yindu +以内yinei +因而yiner +印发yinfa +音符yinfu +应ying +影ying +硬ying +营ying +英ying +映ying +迎ying +樱ying +婴ying +鹰ying +缨ying +莹ying +萤ying +荧ying +蝇ying +赢ying +盈ying +颖ying +嬴ying +郢ying +茔ying +荥*ying +莺ying +萦ying +蓥ying +撄ying +嘤ying +膺ying +滢ying +潆ying +瀛ying +瑛ying +璎ying +楹ying +媵ying +鹦ying +瘿ying +颍ying +罂ying +英镑yingbang +硬币yingbi +应变yingbian +映衬yingchen +应酬yingchou +迎春yingchun +应当yingdang +赢得yingde +婴儿yinger +营房yingfang +迎风yingfeng +应付yingfu +应该yinggai +英国yingguo +樱花yinghua +英魂yinghun +应急yingji +硬件yingjian +迎接yingjie +应届yingjie +英杰yingjie +营救yingjiu +英俊yingjun +盈亏yingkui +赢利yingli +盈利yingli +英烈yinglie +迎面yingmian +英明yingming +硬盘yingpan +影片yingpian +硬拼yingpin +影射yingshe +映射yingshe +樱桃yingtao +迎头yingtou +因果yinguo +影响yingxiang +硬性yingxing +英雄yingxiong +营养yingyang +应邀yingyao +营业yingye +应用yingyong +英勇yingyong +应有yingyou +英语yingyu +盈余yingyu +营造yingzao +应战yingzhan +迎战yingzhan +映照yingzhao +应征yingzheng +影子yingzi +英姿yingzi +银行yinhang +引号yinhao +殷红yinhong +隐患yinhuan +淫秽yinhui +阴魂yinhun +意念yinian +姨娘yiniang +阴极yinji +印鉴yinjian +引进yinjin +引力yinli +阴历yinli +阴凉yinliang +引路yinlu +隐瞒yinman +阴谋yinmou +银幕yinmu +隐慝yinni +银牌yinpai +引起yinqi +殷切yinqie +殷勤yinqin +引擎yinqing +引人yinren +饮食yinshi +印刷yinshua +饮水yinshui +因素yinsu +阴天yintian +引退yintui +因为yinwei +淫威yinwei +阴险yinxian +印象yinxiang +音响yinxiang +音信yinxin +因循yinxun +引言yinyan +阴影yinying +引用yinyong +引诱yinyou +阴雨yinyu +姻缘yinyuan +隐约yinyue +音乐yinyue +引证yinzheng +印证yinzheng +一片yipian +一瞥yipie +一起yiqi +一齐yiqi +义气yiqi +意气yiqi +仪器yiqi +遗弃yiqi +以前yiqian +一切yiqie +依然yiran +亦然yiran +毅然yiran +艺人yiren +宜人yiren +遗容yirong +以上yishang +一生yisheng +医生yisheng +一时yishi +一事yishi +意识yishi +议事yishi +逸事yishi +仪式yishi +医师yishi +医士yishi +遗失yishi +一手yishou +遗书yishu +艺术yishu +意思yisi +一体yiti +议题yiti +遗体yiti +一天yitian +一同yitong +异同yitong +一头yitou +意图yitu +疑团yituan +以外yiwai +意外yiwai +亿万yiwan +以往yiwang +遗忘yiwang +以为yiwei +意味yiwei +意文yiwen +疑问yiwen +译文yiwen +一无yiwu +义务yiwu +遗物yiwu +医务yiwu +贻误yiwu +一下yixia +以下yixia +一线yixian +一向yixiang +一项yixiang +意向yixiang +遗像yixiang +一些yixie +一心yixin +疑心yixin +异性yixing +医学yixue +一言yiyan +义演yiyan +遗言yiyan +一样yiyang +医药yiyao +意义yiyi +异议yiyi +义勇yiyong +易于yiyu +议员yiyuan +意愿yiyuan +医院yiyuan +亿元yiyuan +遗愿yiyuan +疑云yiyun +一再yizai +一早yizao +臆造yizao +依仗yizhang +仪仗yizhang +一朝yizhao +衣着yizhao +依照yizhao +一阵yizhen +一直yizhi +一致yizhi +以至yizhi +以致yizhi +意志yizhi +抑制yizhi +医治yizhi +抑止yizhi +移植yizhi +遗址yizhi +一种yizhong +遗嘱yizhu +研究会yjh +有纪律yjl +研究生yjs +研究所yjs +研究室yjs +养精畜锐yjxr +研究员yjy +拥军优属yjys +一技之长yjzc +一口气ykq +一览表ylb +以理服人ylfr +阅览室yls +有理想ylx +有利于yly +越来越yly +有目共睹ymgd +一目了然ymlr +有没有ymy +云南省yns +育*yo +哟yo +唷yo +用yong +勇yong +永yong +拥yong +涌yong +蛹yong +庸yong +佣yong +臃yong +痈yong +雍yong +踊yong +咏yong +泳yong +恿yong +俑yong +壅yong +墉yong +喁yong +慵yong +邕yong +镛yong +甬yong +鳙yong +饔yong +拥抱yongbao +永别yongbie +永不yongbu +用处yongchu +用度yongdu +用法yongfa +用费yongfei +勇敢yonggan +用功yonggong +永恒yongheng +用户yonghu +拥护yonghu +拥挤yongji +永久yongjiu +用具yongju +永诀yongjue +用力yongli +庸碌yonglu +勇猛yongmeng +用品yongpin +勇气yongqi +勇士yongshi +庸俗yongsu +咏叹yongtan +用途yongtu +涌现yongxian +用心yongxin +用意yongyi +拥有yongyou +用于yongyu +勇于yongyu +永远yongyuan +踊跃yongyue +有you +由you +又you +油you +右you +友you +优you +幼you +游you +尤you +诱you +犹you +幽you +悠you +忧you +邮you +铀you +酉you +佑you +釉you +卣you +攸you +侑you +莠you +莜you +莸you +尢*you +呦you +囿you +宥you +柚you +猷you +牖you +铕you +疣you +蚰you +蚴you +蝣you +蝤*you +繇*you +鱿you +黝you +鼬you +有碍youai +友爱youai +幽暗youan +友邦youbang +右边youbian +忧愁youchou +由此youci +有错youcuo +有待youdai +优待youdai +诱导youdao +有的youde +优等youdeng +有点youdian +邮电youdian +优点youdian +诱发youfa +有功yougong +有关youguan +有害youhai +友好youhao +优化youhua +油画youhua +幽会youhui +优惠youhui +诱惑youhuo +有机youji +游击youji +有劲youjin +幽静youjing +悠久youjiu +邮局youju +由来youlai +游览youlan +有劳youlao +有利youli +有力youli +游离youli +优良youliang +优劣youlie +幽灵youling +忧虑youlu +优美youmei +幼苗youmiao +有名youming +幽默youmo +右派youpai +诱骗youpian +邮票youpiao +尤其youqi +油漆youqi +友情youqing +右倾youqing +有趣youqu +油然youran +犹如youru +有色youse +优胜yousheng +有时youshi +有事youshi +有失youshi +优势youshi +有数youshu +油水youshui +有所yousuo +有望youwang +有为youwei +游戏youxi +有限youxian +优先youxian +悠闲youxian +有效youxiao +幼小youxiao +有些youxie +有心youxin +游行youxing +优秀youxiu +幽雅youya +悠扬youyang +又要youyao +有益youyi +优异youyi +友谊youyi +有用youyong +游泳youyong +有余youyu +由于youyu +犹豫youyu +忧郁youyu +悠远youyuan +优越youyue +有着youzhe +邮政youzheng +优质youzhi +幼稚youzhi +由衷youzhong +邮资youzi +有求必应yqby +以权谋私yqms +有气无力yqwl +迎刃而解yrej +因人而异yrey +与人为善yrws +引人注目yrzm +意识到ysd +艺术家ysj +因势利导ysld +印刷体yst +意识形态ysxt +衣食住行yszx +以身作则yszz +研讨会yth +一条龙ytl +一条心ytx +有条有理ytyl +于yu +与yu +育yu +鱼yu +雨yu +玉yu +余yu +遇yu +预yu +域yu +语yu +愈yu +渔yu +予yu +羽yu +愚yu +御yu +谷*yu +欲yu +宇yu +蔚*yu +尉*yu +迂yu +淤yu +盂yu +榆yu +虞yu +舆yu +俞yu +逾yu +愉yu +渝yu +隅yu +娱yu +屿yu +禹yu +芋yu +郁yu +吁yu +喻yu +峪yu +狱yu +誉yu +浴yu +寓yu +裕yu +豫yu +驭yu +粥*yu +禺yu +毓yu +伛yu +俣yu +谀yu +谕yu +萸yu +菀*yu +蓣yu +揄yu +圄yu +圉yu +嵛yu +狳yu +饫yu +馀yu +庾yu +阈yu +鬻yu +妪yu +妤yu +纡yu +瑜yu +昱yu +觎yu +腴yu +腧*yu +欤yu +於yu +煜yu +熨yu +燠yu +聿yu +钰yu +鹆yu +鹬yu +瘐yu +瘀yu +窬yu +窳yu +蜮yu +蝓yu +竽yu +臾yu +舁yu +雩yu +龉yu +员yuan +原yuan +圆yuan +源yuan +元yuan +远yuan +愿yuan +院yuan +缘yuan +援yuan +园yuan +怨yuan +鸳yuan +渊yuan +冤yuan +垣yuan +袁yuan +辕yuan +猿yuan +苑yuan +垸yuan +塬yuan +芫yuan +掾yuan +圜*yuan +沅yuan +媛yuan +瑗yuan +橼yuan +爰yuan +眢yuan +鸢yuan +螈yuan +箢yuan +鼋yuan +原本yuanben +渊博yuanbo +冤仇yuanchou +远大yuanda +元旦yuandan +园地yuandi +园丁yuanding +远东yuandong +远方yuanfang +缘分yuanfen +原告yuangao +原故yuangu +缘故yuangu +圆滑yuanhua +原籍yuanji +冤家yuanjia +元件yuanjian +远见yuanjian +远近yuanjin +远景yuanjing +援救yuanjiu +原来yuanlai +原理yuanli +原谅yuanliang +原料yuanliao +远虑yuanlu +圆满yuanman +远谋yuanmou +远期yuanqi +冤屈yuanqu +源泉yuanquan +原始yuanshi +远视yuanshi +元首yuanshou +元帅yuanshuai +元素yuansu +援外yuanwai +愿望yuanwang +冤枉yuanwang +原先yuanxian +远销yuanxiao +元宵yuanxiao +院校yuanxiao +原形yuanxing +怨言yuanyan +原野yuanye +愿意yuanyi +园艺yuanyi +原因yuanyin +援引yuanyin +原有yuanyou +缘由yuanyou +远游yuanyou +远远yuanyuan +渊源yuanyuan +元月yuanyue +原则yuanze +院长yuanzhang +远征yuanzheng +援助yuanzhu +原子yuanzi +院子yuanzi +预报yubao +预备yubei +愚笨yuben +余步yubu +预测yuce +愚蠢yuchun +遇到yudao +预定yuding +预订yuding +余毒yudu +月yue +说*yue +越yue +约yue +乐*yue +跃yue +曰yue +阅yue +钥yue +岳yue +粤yue +悦yue +龠yue +瀹yue +栎*yue +樾yue +刖yue +钺yue +月报yuebao +月初yuechu +月底yuedi +约定yueding +月度yuedu +阅读yuedu +乐队yuedui +约法yuefa +月份yuefen +月光yueguang +越轨yuegui +约会yuehui +越界yuejie +跃进yuejin +越境yuejing +阅览yuelan +阅历yueli +月亮yueliang +月末yuemo +约莫yuemo +越南yuenan +乐谱yuepu +乐器yueqi +月球yueqiu +乐曲yuequ +月色yuese +越是yueshi +约束yueshu +月台yuetai +乐团yuetuan +约有yueyou +乐章yuezhang +预防yufang +预风yufeng +预付yufu +预感yugan +预告yugao +预购yugou +遇害yuhai +宇航yuhang +与会yuhui +迂回yuhui +雨季yuji +预计yuji +遇见yujian +预见yujian +语句yuju +豫剧yuju +愉快yukuai +娱乐yule +鱼雷yulei +预料yuliao +雨露yulu +舆论yulun +愚昧yumei +育苗yumiao +预谋yumou +运yun +员*yun +云yun +匀yun +均*yun +允yun +孕yun +耘yun +郧yun +陨yun +蕴yun +酝yun +晕yun +韵yun +郓yun +芸yun +狁yun +恽yun +愠yun +纭yun +韫yun +殒yun +昀yun +氲yun +熨yun +遇难yunan +云彩yuncai +蕴藏yuncang +匀称yuncheng +运动yundong +熨斗yundou +云海yunhai +运河yunhe +韵律yunlu +陨落yunluo +云南yunnan +酝酿yunnian +允诺yunnuo +愚弄yunong +运气yunqi +运输yunshu +运算yunsuan +云梯yunti +运往yunwang +韵味yunwei +云雾yunwu +云霞yunxia +运行yunxing +允许yunxu +运用yunyong +孕育yunyu +运载yunzai +运转yunzhuan +与其yuqi +语气yuqi +预期yuqi +预审yushen +于是yushi +预示yushi +预售yushou +雨水yushui +预算yusuan +欲望yuwang +语文yuwen +预习yuxi +预先yuxian +遇险yuxian +预想yuxiang +预言yuyan +语言yuyan +寓言yuyan +预演yuyan +予以yuyi +寓于yuyu +愉悦yuyue +预兆yuzhao +预支yuzhi +宇宙yuzhou +有文化ywh +业务联系ywlx +意味着ywz +有限公司yxgs +一系列yxl +有效期yxq +医学院yxy +一心一意yxyy +游泳池yyc +营业额yye +夜以继日yyjr +应用科学yykx +一言堂yyt +引以为戒yywj +优越性yyx +营业员yyy +隐隐约约yyyy +运用自如yyzr +拥政爱民yzam +原子能yzn +已知数yzs +有助于yzy +言之有理yzyl +在z +这z +主z +中z +种z +着z +争z +战z +作z +正z +之z +制z +重z +组z +治z +只z +子z +自z +质z +指z +杂za +扎*za +咱za +匝za +砸za +咋za +咂za +在zai +再zai +载zai +栽zai +灾zai +仔*zai +哉zai +宰zai +崽zai +甾zai +再版zaiban +再不zaibu +在场zaichang +再度zaidu +宰割zaige +灾害zaihai +再好zaihao +在乎zaihu +灾荒zaihuang +再会zaihui +灾祸zaihuo +再见zaijian +在理zaili +灾民zaimin +灾难zainan +栽培zaipei +再起zaiqi +灾情zaiqing +灾区zaiqu +再三zaisan +在世zaishi +再说zaishuo +载体zaiti +在下zaixia +再现zaixian +宰相zaixiang +在意zaiyi +在于zaiyu +再造zaizao +再则zaize +在职zaizhi +再植zaizhi +杂技zaji +杂粮zaliang +杂乱zaluan +赞zan +咱zan +暂zan +攒zan +拶zan +瓒zan +昝zan +簪zan +糌zan +趱zan +錾zan +赞成zancheng +暂定zanding +藏*zang +脏zang +葬zang +赃zang +奘zang +驵zang +臧zang +赞歌zange +赃款zangkuan +葬送zangsong +赃物zangwu +藏族zangzu +杂念zanian +赞美zanmei +咱们zanmen +暂且zanqie +暂缺zanque +赞赏zanshang +暂时zanshi +赞颂zansong +赞叹zantan +暂停zanting +赞同zantong +暂行zanxing +赞扬zanyang +暂用zanyong +赞助zanzhu +造zao +早zao +遭zao +燥zao +凿zao +糟zao +枣zao +皂zao +藻zao +澡zao +蚤zao +躁zao +噪zao +灶zao +唣zao +早晨zaochen +造成zaocheng +凿穿zaochuan +造次zaoci +造词zaoci +遭到zaodao +早稻zaodao +造反zaofan +早饭zaofan +造福zaofu +糟糕zaogao +造化zaohua +造价zaojia +造就zaojiu +造林zaolin +早年zaonian +糟粕zaopo +早期zaoqi +早日zaori +早上zaoshang +遭受zaoshou +早衰zaoshuai +糟蹋zaota +早晚zaowan +造型zaoxing +遭殃zaoyang +造谣zaoyao +造诣zaoyi +早已zaoyi +噪音zaoyin +遭遇zaoyu +造字zaozi +杂谈zatan +杂文zawen +杂质zazhi +杂志zazhi +资本主义zbzy +资产阶级zcjj +增长率zcl +总参谋部zcmb +真才实学zcsx +自动化zdh +自动检测zdjc +自动检索zdjs +自动控制zdkz +主动权zdq +招待所zds +总的说来zdsl +主动性zdx +则ze +择ze +责ze +侧*ze +泽ze +咋*ze +仄ze +赜ze +啧ze +帻ze +迮ze +昃ze +笮ze +箦ze +舴ze +责备zebei +责成zecheng +责罚zefa +责怪zeguai +贼zei +责令zeling +责骂zema +怎zen +谮zen +增zeng +曾zeng +综*zeng +憎zeng +赠zeng +缯zeng +甑zeng +罾zeng +锃zeng +增补zengbu +增产zengchan +增长zengchang +增大zengda +增订zengding +增多zengduo +增高zenggao +憎恨zenghen +增加zengjia +增减zengjian +增进zengjin +增量zengliang +赠品zengpin +增强zengqiang +增删zengshan +增设zengshe +赠送zengsong +增添zengtian +赠言zengyan +增益zengyi +增援zengyuan +怎么zenme +怎奈zennai +怎样zenyang +责任zeren +责问zewen +总而言之zeyz +争分夺秒zfdm +针锋相对zfxd +自负盈亏zfyk +中关村zgc +自告奋勇zgfy +中国共产党zggd +总工会zgh +中国特色的zgtd +中国银行zgyh +自古以来zgyl +中国政府zgzf +中共中央zgzy +查*zha +扎zha +炸zha +闸zha +铡zha +轧zha +渣zha +蜡*zha +喳zha +札zha +眨zha +栅zha +榨zha +咋*zha +乍zha +诈zha +柞*zha +揸zha +吒zha +咤zha +哳zha +喋*zha +楂*zha +砟zha +痄zha +蚱zha +齄zha +炸弹zhadan +扎根zhagen +炸毁zhahui +寨zhai +侧*zhai +择*zhai +摘zhai +窄zhai +斋zhai +翟*zhai +祭*zhai +宅zhai +债zhai +砦zhai +瘵zhai +摘录zhailu +债权zhaiquan +债务zhaiwu +窄小zhaixiao +摘要zhaiyao +札记zhaji +战zhan +展zhan +站zhan +占zhan +粘*zhan +颤*zhan +瞻zhan +毡zhan +詹zhan +沾zhan +盏zhan +斩zhan +辗zhan +崭zhan +蘸zhan +栈zhan +湛zhan +绽zhan +谵zhan +搌zhan +旃zhan +战败zhanbai +战报zhanbao +战备zhanbei +战场zhanchang +展翅zhanchi +展出zhanchu +战地zhandi +战斗zhandou +战犯zhanfan +长*zhang +张zhang +章zhang +掌zhang +仗zhang +障zhang +胀zhang +涨zhang +账zhang +樟zhang +彰zhang +漳zhang +杖zhang +丈zhang +帐zhang +瘴zhang +仉zhang +鄣zhang +幛zhang +嶂zhang +獐zhang +嫜zhang +璋zhang +蟑zhang +障碍zhangai +站岗zhangang +长辈zhangbei +章程zhangcheng +长大zhangda +战歌zhange +章法zhangfa +帐房zhangfang +丈夫zhangfu +掌管zhangguan +帐号zhanghao +章节zhangjie +帐目zhangmu +战功zhangong +掌权zhangquan +张贴zhangtie +战鼓zhangu +沾光zhanguang +战国zhanguo +战果zhanguo +张望zhangwang +掌握zhangwo +张扬zhangyang +战壕zhanhao +战后zhanhou +战机zhanji +战绩zhanji +战局zhanju +占据zhanju +展开zhankai +战况zhankuang +展览zhanlan +占领zhanling +战略zhanlue +战马zhanma +展品zhanpin +战区zhanqu +沾染zhanran +战胜zhansheng +战时zhanshi +战事zhanshi +战士zhanshi +展示zhanshi +战术zhanshu +展望zhanwang +战线zhanxian +展现zhanxian +展销zhanxiao +崭新zhanxin +瞻仰zhanyang +战役zhanyi +占用zhanyong +占有zhanyou +战友zhanyou +站长zhanzhang +战争zhanzheng +着*zhao +照zhao +找zhao +招zhao +朝*zhao +召zhao +赵zhao +爪zhao +罩zhao +沼zhao +兆zhao +嘲*zhao +昭zhao +肇zhao +诏zhao +啁*zhao +棹zhao +钊zhao +笊zhao +照办zhaoban +照搬zhaoban +招标zhaobiao +照常zhaochang +照抄zhaochao +招待zhaodai +照发zhaofa +招工zhaogong +照顾zhaogu +招呼zhaohu +召唤zhaohuan +照会zhaohui +着急zhaoji +招集zhaoji +召集zhaoji +招架zhaojia +召开zhaokai +招考zhaokao +招揽zhaolan +着力zhaoli +照例zhaoli +照料zhaoliao +着落zhaoluo +着迷zhaomi +照明zhaoming +招聘zhaopin +朝气zhaoqi +招惹zhaore +照射zhaoshe +招生zhaosheng +着手zhaoshou +招手zhaoshou +招收zhaoshou +招贴zhaotie +朝夕zhaoxi +朝霞zhaoxia +着想zhaoxiang +照相zhaoxiang +昭雪zhaoxue +找寻zhaoxun +着眼zhaoyan +照样zhaoyang +照耀zhaoyao +照应zhaoying +招展zhaozhan +招致zhaozhi +着重zhaozhong +照着zhaozhuo +诈骗zhapian +榨取zhaqu +诈取zhaqu +扎实zhashi +炸药zhayao +渣滓zhazi +这zhe +着zhe +者zhe +折zhe +哲zhe +浙zhe +遮zhe +蛰zhe +辙zhe +锗zhe +蔗zhe +谪zhe +摺zhe +柘zhe +辄zhe +磔zhe +鹧zhe +褶zhe +蜇zhe +赭zhe +这般zheban +这边zhebian +这次zheci +遮挡zhedang +这点zhedian +折叠zhedie +折服zhefu +遮盖zhegai +这个zhege +折合zhehe +浙江zhejiang +折旧zhejiu +折扣zhekou +这里zheli +哲理zheli +这么zheme +折磨zhemo +真zhen +针zhen +阵zhen +镇zhen +振zhen +震zhen +珍zhen +诊zhen +斟zhen +甄zhen +砧zhen +臻zhen +贞zhen +侦zhen +枕zhen +疹zhen +圳zhen +蓁zhen +浈zhen +溱*zhen +缜zhen +桢zhen +椹*zhen +榛zhen +轸zhen +赈zhen +胗zhen +朕zhen +祯zhen +畛zhen +稹zhen +鸩zhen +箴zhen +珍爱zhenai +珍宝zhenbao +针砭zhenbian +珍藏zhencang +贞操zhencao +侦察zhencha +真诚zhencheng +震荡zhendang +阵地zhendi +真谛zhendi +震动zhendong +诊断zhenduan +针对zhendui +振奋zhenfen +争zheng +正zheng +政zheng +整zheng +证zheng +征zheng +蒸zheng +症zheng +丁*zheng +郑zheng +挣zheng +睁zheng +狰zheng +怔zheng +拯zheng +帧zheng +诤zheng +峥zheng +徵zheng +钲zheng +铮zheng +筝zheng +争霸zhengba +整备zhengbei +正比zhengbi +政变zhengbian +争辩zhengbian +整编zhengbian +征兵zhengbing +政策zhengce +正常zhengchang +争吵zhengchao +征程zhengcheng +争持zhengchi +正大zhengda +正当zhengdang +政党zhengdang +整党zhengdang +正道zhengdao +争端zhengduan +整顿zhengdun +争夺zhengduo +蒸发zhengfa +政法zhengfa +正反zhengfan +整风zhengfeng +政府zhengfu +征服zhengfu +整改zhenggai +整个zhengge +征购zhenggou +争光zhengguang +正规zhenggui +正轨zhenggui +正好zhenghao +政绩zhengji +征集zhengji +证件zhengjian +政见zhengjian +整洁zhengjie +政局zhengju +证据zhengju +正理zhengli +整理zhengli +正梁zhengliang +政令zhengling +争论zhenglun +政论zhenglun +正面zhengmian +争鸣zhengming +证明zhengming +正派zhengpai +征聘zhengpin +争气zhengqi +正气zhengqi +蒸气zhengqi +整齐zhengqi +正巧zhengqiao +征求zhengqiu +争取zhengqu +政权zhengquan +正确zhengque +证人zhengren +正是zhengshi +正式zhengshi +正视zhengshi +证实zhengshi +征收zhengshou +整数zhengshu +证书zhengshu +征税zhengshui +整套zhengtao +正题zhengti +政体zhengti +整体zhengti +整天zhengtian +征调zhengtiao +正统zhengtong +征途zhengtu +珍贵zhengui +政委zhengwei +正文zhengwen +征文zhengwen +政务zhengwu +争先zhengxian +政协zhengxie +整形zhengxing +整修zhengxiu +征询zhengxun +争艳zhengyan +正业zhengye +正义zhengyi +争议zhengyi +征用zhengyong +正月zhengyue +正在zhengzai +挣扎zhengzha +整整zhengzheng +正直zhengzhi +政治zhengzhi +争执zhengzhi +正中zhengzhong +郑重zhengzhong +郑州zhengzhou +症状zhengzhuang +正宗zhengzong +震撼zhenhan +侦缉zhenji +真假zhenjia +阵脚zhenjiao +贞节zhenjie +贞洁zhenjie +镇静zhenjing +震惊zhenjing +真空zhenkong +真理zhenli +诊疗zhenliao +珍品zhenpin +珍奇zhenqi +真切zhenqie +真情zhenqing +真确zhenque +真人zhenren +阵容zhenrong +真是zhenshi +真实zhenshi +阵势zhenshi +珍视zhenshi +侦探zhentan +阵亡zhenwang +珍惜zhenxi +阵线zhenxian +真相zhenxiang +振兴zhenxing +镇压zhenya +阵阵zhenzhen +真正zhenzheng +真知zhenzhi +真挚zhenzhi +珍重zhenzhong +珍珠zhenzhu +斟酌zhenzhuo +振作zhenzuo +这是zheshi +这时zheshi +折腾zheteng +这些zhexie +哲学zhexue +遮掩zheyan +这样zheyang +这种zhezhong +折中zhezhong +之zhi +制zhi +治zhi +只zhi +质zhi +指zhi +直zhi +支zhi +织zhi +止zhi +至zhi +置zhi +志zhi +值zhi +知zhi +识*zhi +执zhi +职zhi +植zhi +纸zhi +致zhi +枝zhi +殖zhi +脂zhi +智zhi +氏*zhi +肢zhi +秩zhi +址zhi +滞zhi +汁zhi +芝zhi +吱zhi +蜘zhi +侄zhi +趾zhi +旨zhi +挚zhi +掷zhi +帜zhi +峙zhi +稚zhi +炙zhi +痔zhi +窒zhi +卮zhi +陟zhi +郅zhi +埴zhi +芷zhi +摭zhi +帙zhi +徵*zhi +忮zhi +彘zhi +咫zhi +骘zhi +栉zhi +枳zhi +栀zhi +桎zhi +轵zhi +轾zhi +贽zhi +胝zhi +膣zhi +祉zhi +祗zhi +黹zhi +雉zhi +鸷zhi +痣zhi +蛭zhi +絷zhi +酯zhi +跖zhi +踬zhi +踯zhi +豸zhi +觯zhi +治安zhian +值班zhiban +植保zhibao +置备zhibei +质变zhibian +指标zhibiao +职别zhibie +支部zhibu +制裁zhicai +支撑zhicheng +职称zhicheng +支持zhichi +指出zhichu +支出zhichu +至此zhici +值此zhici +直达zhida +只当zhidang +直到zhidao +指导zhidao +知道zhidao +只得zhide +值得zhide +质地zhidi +指点zhidian +制定zhiding +指定zhiding +制订zhiding +制度zhidu +支队zhidui +至多zhiduo +知法zhifa +执法zhifa +制服zhifu +支付zhifu +职工zhigong +只顾zhigu +只管zhiguan +直观zhiguan +治国zhiguo +只好zhihao +之后zhihou +指挥zhihui +智慧zhihui +知己zhiji +指甲zhijia +之间zhijian +只见zhijian +指教zhijiao +直接zhijie +枝节zhijie +至今zhijin +直经zhijing +直径zhijing +止境zhijing +致敬zhijing +知觉zhijue +治理zhili +致力zhili +智力zhili +质量zhiliang +治疗zhiliao +指令zhiling +直流zhiliu +支流zhiliu +殖民zhimin +致命zhiming +指明zhiming +知名zhiming +智谋zhimou +指南zhinan +智囊zhinang +之内zhinei +只能zhineng +职能zhineng +智能zhineng +只怕zhipa +指派zhipai +支配zhipei +支票zhipiao +制品zhipin +志气zhiqi +之前zhiqian +支前zhiqian +值勤zhiqin +执勤zhiqin +知情zhiqing +知青zhiqing +智取zhiqu +志趣zhiqu +知趣zhiqu +职权zhiquan +值日zhiri +治丧zhisang +之上zhishang +直上zhishang +至上zhishang +至少zhishao +制胜zhisheng +之声zhisheng +只是zhishi +指使zhishi +支使zhishi +致使zhishi +知事zhishi +指示zhishi +知识zhishi +指数zhishu +支书zhishu +直属zhishu +植树zhishu +直爽zhishuang +治水zhishui +直说zhishuo +致死zhisi +之外zhiwai +指望zhiwang +职位zhiwei +质问zhiwen +植物zhiwu +职务zhiwu +窒息zhixi +之下zhixia +直线zhixian +指向zhixiang +志向zhixiang +知心zhixin +执行zhixing +只许zhixu +秩序zhixu +直言zhiyan +只要zhiyao +职业zhiye +致意zhiyi +旨意zhiyi +质疑zhiyi +指引zhiyin +知音zhiyin +只有zhiyou +至于zhiyu +置于zhiyu +智育zhiyu +职员zhiyuan +支援zhiyuan +志愿zhiyuan +制约zhiyue +制造zhizao +指责zhize +职责zhize +纸张zhizhang +职掌zhizhang +执照zhizhao +指正zhizheng +执政zhizheng +制止zhizhi +直至zhizhi +之中zhizhong +支助zhizhu +支柱zhizhu +知足zhizu +制作zhizuo +走后门zhm +中华民国zhmg +中华民族zhmz +中zhong +种zhong +重zhong +众zhong +钟zhong +终zhong +忠zhong +肿zhong +仲zhong +盅zhong +衷zhong +冢zhong +忪*zhong +锺zhong +螽zhong +舯zhong +踵zhong +钟爱zhongai +重办zhongban +重兵zhongbing +中部zhongbu +仲裁zhongcai +中层zhongceng +衷肠zhongchang +忠诚zhongcheng +重大zhongda +重担zhongdan +中等zhongdeng +种地zhongdi +重地zhongdi +重点zhongdian +终点zhongdian +中东zhongdong +中断zhongduan +终端zhongduan +中队zhongdui +众多zhongduo +重犯zhongfan +忠告zhonggao +中共zhonggong +中国zhongguo +忠厚zhonghou +中华zhonghua +中级zhongji +终极zhongji +重价zhongjia +中间zhongjian +中坚zhongjian +中奖zhongjiang +终结zhongjie +终究zhongjiu +终久zhongjiu +终局zhongju +中肯zhongken +种类zhonglei +中立zhongli +重量zhongliang +终了zhongliao +中流zhongliu +肿瘤zhongliu +中美zhongmei +众目zhongmu +中年zhongnian +终年zhongnian +中秋zhongqiu +重任zhongren +中日zhongri +终日zhongri +中伤zhongshang +重赏zhongshang +终身zhongshen +终生zhongsheng +重视zhongshi +忠实zhongshi +中枢zhongshu +众说zhongshuo +中苏zhongsu +终天zhongtian +中途zhongtu +重托zhongtuo +中外zhongwai +重围zhongwei +中文zhongwen +中午zhongwu +中西zhongxi +中心zhongxin +忠心zhongxin +衷心zhongxin +中性zhongxing +中学zhongxue +中旬zhongxun +忠言zhongyan +中央zhongyang +中药zhongyao +重要zhongyao +中医zhongyi +重用zhongyong +中庸zhongyong +中游zhongyou +终于zhongyu +忠于zhongyu +忠贞zhongzhen +中止zhongzhi +种植zhongzhi +终止zhongzhi +种种zhongzhong +中专zhongzhuan +种族zhongzu +轴zhou +周zhou +洲zhou +州zhou +皱zhou +骤zhou +舟zhou +诌zhou +粥zhou +肘zhou +帚zhou +咒zhou +宙zhou +昼zhou +荮zhou +啁zhou +妯zhou +纣zhou +绉zhou +胄zhou +碡zhou +籀zhou +繇*zhou +酎zhou +周到zhoudao +咒骂zhouma +周密zhoumi +周末zhoumo +周期zhouqi +周全zhouquan +周围zhouwei +周旋zhouxuan +昼夜zhouye +周折zhouzhe +周知zhouzhi +周转zhouzhuan +总后勤部zhqb +中华人民共和国zhrg +主zhu +注zhu +著zhu +住zhu +助zhu +猪zhu +铸zhu +属*zhu +株zhu +筑zhu +柱zhu +术*zhu +驻zhu +逐zhu +祝zhu +竹zhu +贮zhu +珠zhu +朱zhu +诸zhu +蛛zhu +诛zhu +烛zhu +煮zhu +拄zhu +瞩zhu +嘱zhu +蛀zhu +伫zhu +侏zhu +邾zhu +茱zhu +洙zhu +渚zhu +潴zhu +杼zhu +槠zhu +橥zhu +炷zhu +铢zhu +疰zhu +瘃zhu +褚*zhu +竺zhu +箸zhu +舳zhu +翥zhu +躅zhu +麈zhu +抓zhua +挝*zhua +抓好zhuahao +转*zhuai +曳*zhuai +拽zhuai +抓紧zhuajin +转zhuan +专zhuan +传*zhuan +砖zhuan +撰zhuan +赚zhuan +篆zhuan +啭zhuan +馔zhuan +沌*zhuan +颛zhuan +转变zhuanbian +转播zhuanbo +专长zhuanchang +专程zhuancheng +转达zhuanda +转发zhuanfa +装zhuang +状zhuang +壮zhuang +庄zhuang +撞zhuang +幢*zhuang +桩zhuang +妆zhuang +僮zhuang +奘*zhuang +转告zhuangao +装扮zhuangban +装备zhuangbei +壮大zhuangda +装订zhuangding +壮观zhuangguan +装甲zhuangjia +庄稼zhuangjia +庄嫁zhuangjia +壮举zhuangju +状况zhuangkuang +壮阔zhuangkuo +壮丽zhuangli +壮烈zhuanglie +装配zhuangpei +装饰zhuangshi +状态zhuangtai +装卸zhuangxie +庄严zhuangyan +庄园zhuangyuan +装运zhuangyun +装置zhuangzhi +壮志zhuangzhi +庄重zhuangzhong +转化zhuanhua +转换zhuanhuan +转给zhuanji +专家zhuanjia +专科zhuanke +专利zhuanli +专门zhuanmen +转让zhuanrang +专题zhuanti +转向zhuanxiang +专心zhuanxin +转眼zhuanyan +专业zhuanye +转移zhuanyi +专员zhuanyuan +转载zhuanzai +转折zhuanzhe +转正zhuanzheng +专政zhuanzheng +专制zhuanzhi +专职zhuanzhi +专注zhuanzhu +专著zhuanzhu +主办zhuban +逐步zhubu +贮藏zhucang +注册zhuce +助长zhuchang +主持zhuchi +主次zhuci +主导zhudao +注定zhuding +主动zhudong +主队zhudui +主犯zhufan +住房zhufang +祝福zhufu +嘱咐zhufu +逐个zhuge +主攻zhugong +助工zhugong +主管zhuguan +主观zhuguan +追zhui +锥zhui +椎zhui +赘zhui +坠zhui +缀zhui +惴zhui +骓zhui +缒zhui +追捕zhuibu +追查zhuicha +追悼zhuidao +追赶zhuigan +坠毁zhuihui +追加zhuijia +追究zhuijiu +追求zhuiqiu +追认zhuiren +追溯zhuisu +追随zhuisui +追问zhuiwen +追逐zhuizhu +追踪zhuizong +主机zhuji +主见zhujian +逐渐zhujian +主将zhujiang +主讲zhujiang +主教zhujiao +主角zhujiao +注解zhujie +祝酒zhujiu +主力zhuli +助理zhuli +株连zhulian +主粮zhuliang +主流zhuliu +驻留zhuliu +著名zhuming +主谋zhumou +注目zhumu +瞩目zhumu +准zhun +屯*zhun +谆zhun +肫zhun +窀zhun +准备zhunbei +逐年zhunian +准确zhunque +准绳zhunsheng +准时zhunshi +准许zhunxu +准则zhunze +着*zhuo +著*zhuo +捉zhuo +桌zhuo +缴*zhuo +拙zhuo +卓zhuo +琢zhuo +茁zhuo +酌zhuo +啄zhuo +灼zhuo +浊zhuo +倬zhuo +诼zhuo +擢zhuo +浞zhuo +涿zhuo +濯zhuo +棹*zhuo +焯zhuo +禚zhuo +斫zhuo +镯zhuo +拙劣zhuolie +琢磨zhuomo +捉弄zhuonong +酌情zhuoqing +卓越zhuoyue +茁壮zhuozhuang +主权zhuquan +主人zhuren +主任zhuren +诸如zhuru +注色zhuse +注视zhushi +柱石zhushi +注释zhushi +助手zhushou +主送zhusong +住宿zhusu +珠算zhusuan +主题zhuti +主体zhuti +逐条zhutiao +嘱托zhutuo +诸位zhuwei +主席zhuxi +注销zhuxiao +主要zhuyao +逐一zhuyi +主义zhuyi +主意zhuyi +注意zhuyi +祝愿zhuyuan +逐月zhuyue +主宰zhuzai +铸造zhuzao +驻扎zhuzha +住宅zhuzhai +主张zhuzhang +住址zhuzhi +注重zhuzhong +著作zhuzuo +子zi +自zi +资zi +字zi +紫zi +仔zi +籽zi +姿zi +吱*zi +兹zi +咨zi +滋zi +淄zi +孜zi +滓zi +渍zi +谘zi +茈*zi +呲*zi +嵫zi +姊zi +孳zi +缁zi +梓zi +辎zi +赀zi +恣zi +眦zi +锱zi +秭zi +耔zi +笫zi +粢zi +趑zi +觜zi +訾zi +龇zi +鲻zi +髭zi +自爱ziai +自白zibai +自卑zibei +资本ziben +资产zichan +滋长zichang +自称zicheng +自传zichuan +自从zicong +子弟zidi +字典zidian +自动zidong +自发zifa +自费zifei +自封zifeng +自负zifu +字符zifu +资格zige +字根zigen +自豪zihao +自给ziji +自己ziji +字迹ziji +字节zijie +资金zijin +自救zijiu +自居ziju +自觉zijue +字库ziku +自夸zikua +自理zili +资历zili +资料ziliao +自满ziman +自勉zimian +字母zimu +字幕zimu +子女zinu +自强ziqiang +自然ziran +滋润zirun +自杀zisha +自身zishen +姿势zishi +自述zishu +自私zisi +姿态zitai +字体ziti +字帖zitie +自卫ziwei +滋味ziwei +自问ziwen +自我ziwo +仔细zixi +自信zixin +自修zixiu +自叙zixu +自选zixuan +自学zixue +咨询zixun +滋养ziyang +自由ziyou +自愿ziyuan +资源ziyuan +自找zizhao +自治zizhi +自重zizhong +资助zizhu +自尊zizun +直截了当zjld +浙江省zjs +这就是说zjss +中纪委zjw +再接再厉zjzl +中联部zlb +专利法zlf +质量管理zlgl +自力更生zlgs +展览会zlh +智力开发zlkf +专利权zlq +知名人士zmrs +这么些zmx +这么样zmy +怎么样zmy +总zong +纵zong +宗zong +综zong +棕zong +鬃zong +踪zong +偬zong +枞zong +腙zong +粽zong +总部zongbu +总裁zongcai +总参zongcan +总队zongdui +总额zonge +总纲zonggang +总共zonggong +纵贯zongguan +总和zonghe +综合zonghe +纵横zongheng +总后zonghou +总计zongji +踪迹zongji +宗教zongjiao +总结zongjie +总局zongju +总括zongkuo +总理zongli +总论zonglun +宗派zongpai +纵情zongqing +纵深zongshen +总是zongshi +纵使zongshi +总数zongshu +总算zongsuan +总体zongti +总统zongtong +总务zongwu +踪影zongying +总帐zongzhang +总政zongzheng +总之zongzhi +宗旨zongzhi +走zou +邹zou +奏zou +揍zou +诹zou +陬zou +鄹zou +驺zou +鲰zou +走访zoufang +邹虹zouhong +走私zousi +奏效zouxiao +酌情处理zqcl +中青年zqn +朝气蓬勃zqpb +准确无误zqww +正确性zqx +诸如此类zrcl +责任感zrg +自然界zrj +主人翁zrw +责任心zrx +责任制zrz +再生产zsc +自上而下zsex +知识分子zsfz +这时候zsh +知识化zsh +株式会社zshs +总书记zsj +装饰品zsp +综上所述zsss +之所以zsy +自始至终zszz +众所周知zszz +座谈会zth +组zu +族zu +足zu +阻zu +祖zu +租zu +卒zu +诅zu +俎zu +菹zu +镞zu +阻碍zuai +钻zuan +赚*zuan +纂zuan +攥zuan +缵zuan +躜zuan +钻研zuanyan +组成zucheng +阻挡zudang +组阁zuge +足够zugou +祖国zuguo +组合zuhe +最zui +罪zui +嘴zui +堆*zui +咀*zui +醉zui +蕞zui +最初zuichu +最大zuida +最低zuidi +罪恶zuie +罪犯zuifan +最高zuigao +罪过zuiguo +最好zuihao +最后zuihou +最坏zuihuai +最佳zuijia +最近zuijin +嘴脸zuilian +罪名zuiming +罪孽zuinie +罪人zuiren +最先zuixian +最小zuixiao +最新zuixin +醉心zuixin +罪行zuixing +罪责zuize +罪证zuizheng +最终zuizhong +罪状zuizhuang +阻击zuji +租界zujie +租借zujie +阻拦zulan +阻力zuli +租赁zulin +尊zun +遵zun +撙zun +樽zun +鳟zun +阻挠zunao +遵从zuncong +尊贵zungui +尊敬zunjing +遵守zunshou +遵循zunxun +尊严zunyan +遵照zunzhao +尊重zunzhong +作zuo +做zuo +左zuo +座zuo +坐zuo +昨zuo +撮*zuo +凿*zuo +搓*zuo +琢*zuo +佐zuo +柞zuo +阼zuo +唑zuo +嘬zuo +怍zuo +胙zuo +祚zuo +笮*zuo +作案zuoan +作弊zuobi +左边zuobian +坐标zuobiao +做到zuodao +作法zuofa +做法zuofa +作废zuofei +作风zuofeng +做工zuogong +作怪zuoguai +做好zuohao +作家zuojia +作客zuoke +作乐zuole +作乱zuoluan +坐落zuoluo +左派zuopai +作品zuopin +左倾zuoqing +做人zuoren +昨日zuori +做事zuoshi +坐视zuoshi +座谈zuotan +昨天zuotian +昨晚zuowan +作为zuowei +座位zuowei +坐位zuowei +作文zuowen +作物zuowu +作业zuoye +昨夜zuoye +作用zuoyong +左右zuoyou +作战zuozhan +作者zuozhe +作证zuozheng +作主zuozhu +做主zuozhu +做作zuozuo +足球zuqiu +阻塞zuse +祖师zushi +祖先zuxian +组长zuzhang +组织zuzhi +阻止zuzhi +祖宗zuzong +中外合资zwhz +责无旁贷zwpd +中宣部zxb +自行车zxc +自下而上zxes +忠心耿耿zxgg +展销会zxh +照相机zxj +争先恐后zxkh +中学生zxs +主席团zxt +中小学zxx +自信心zxx +中央办公厅zybt +着眼点zyd +专业对口zydk +中央电视台zydt +中央各部委zygw +专业化zyh +专业户zyh +中央军委zyjw +座右铭zym +中央全会zyqh +中央人民广播电台zyrt +主要人员zyry +专业人员zyry +中央书记处zysc +中央委员会zywh +中央委员zywy +重要性zyx +主要原因zyyy +中央政治局zyzj +专业知识zyzs +中组部zzb +组织部zzb +政治部zzb +政治处zzc +转折点zzd +置之度外zzdw +政治局zzj +自治区zzq +蒸蒸日上zzrs +组织上zzs +郑州市zzs +组织性zzx +自尊心zzx +赵紫阳zzy +总政治部zzzb +喷码pm +优喷yp +科技kj +比洋by +公司gs +有限公司yxgz +股份公司gfgs +企业qy +标准bz +喷码机pmj +电线dx +电缆dl +电线电缆dxdl +电力电缆dldl +绝缘jy +绝缘层jyc +导体dt +导线dx +电力dl +通信tx +控制电缆kzdl +补偿电缆bcdl +屏蔽电缆pbdl +高温电缆gwdl +计算机电缆jsjdl +信号电缆xhdl +同轴电缆tzdl +耐火电缆nhdl +船用电缆cydl +铝合金电缆lhjdl +单股dg +多股dg +连接lj +电路dl +电器dq +型号xh +铜t +铝l +铅包qb +铝包qb +聚氯乙烯jlyx +电磁线dcx +北京市bj +东城区dcq +西城区xcq +崇文区cwq +宣武区xwq +朝阳区zyq +海淀区hdq +丰台区ftq +房山区fsq +通州区tzq +顺义区syq +昌平区cpq +大兴区txq +怀柔区hrq +平谷区pgq +门头沟区mtgq +石景山区sjsq +天津市tjs +和平区hpq +河东区hdq +河西区hxq +南开区nkq +河北区hbq +红桥区hqq +塘沽区tgq +汉沽区hgq +大港区tgq +东丽区dlq +西青区xqq +北辰区bcq +津南区jnq +武清区wqq +宝坻区bdq +河北省hbs +辛集市xjs +藁城市gcs +晋州市jzs +新乐市xls +鹿泉市lqs +唐山市tss +遵化市zhs +安市as +邯郸市hds +武安市was +邢台市xts +南宫市ngs +沙河市shs +保定市bds +涿州市zzs +定州市dzs +安国市ags +承德市cds +沧州市czs +泊头市bts +任丘市rqs +黄骅市hhs +河间市hjs +廊坊市lfs +霸州市bzs +三河市shs +衡水市hss +冀州市jzs +深州市szs +石家庄市sjzs +张家口市zjks +高碑店市gbds +秦皇岛市qhds +山西省sxs +太原市tys +古交市gjs +大同市dts +阳泉市yqs +长治市czs +潞城市lcs +晋城市jcs +高平市gps +朔州市szs +晋中市jzs +介休市jxs +运城市ycs +河津市hjs +永济市sjs +忻州市xzs +原平市yps +临汾市lfs +侯马市hms +霍州市hzs +吕梁市lls +孝义市xys +汾阳市fys +内蒙古自治区nmg +包头市bts +乌海市whs +赤峰市cfs +通辽市tls +根河市ghs +丰镇市fzs +辽宁省LNS +沈阳市sys +新民市xms +大连市dls +庄河市zhs +鞍山市ass +海城市hcs +抚顺市fss +本溪市bxs +丹东市dds +东港市dgs +凤城市fcs +锦州市jzs +凌海市lhs +北宁市bns +营口市yks +盖州市gzs +阜新市fxs +辽阳市lys +灯塔市dts +盘锦市pjs +铁岭市tls +开原市kys +朝阳市zys +凌源市lys +北票市bps +兴城市xcs +大石桥市dsqs +瓦房店市wfds +普兰店市plds +调兵山市dbss +葫芦岛市hlds +吉林省jls +长春市ccs +九台市jts +榆树市yss +德惠市dhs +吉林市jls +舒兰市sls +桦甸市hds +蛟河市jhs +磐石市pss +四平市sps +双辽市sls +辽源市lys +通化市ths +集安市jas +白山市bss +临江市ljs +松原市sys +白城市bcs +大安市das +洮南市tns +延吉市yjs +图们市tms +敦化市ghs +龙井市ljs +珲春市hcs +和龙市hls +公主岭市gzls +梅河口市mhks +黑龙江省hljs +阿城市acs +尚志市szs +双城市scs +五常市wcs +讷河市nhs +鹤岗市hgs +鸡西市jxs +密山市mss +虎林市hls +大庆市dqs +伊春市ycs +铁力市tls +宁安市nas +海林市hls +穆棱市mls +同江市tjs +富锦市fjs +黑河市hhs +北安市bas +绥化市shs +安达市ads +肇东市zds +海伦市hls +七台河市qths +双鸭山市syss +牡丹江市mdjs +佳木斯市jmss +绥芬河市sfhs +哈尔滨市hebs +齐齐哈尔市qqhes +五大连池市wdlcs +上海市shs +黄浦区hpq +卢湾区lwq +徐汇区xhq +长宁区cnq +静安区jaq +普陀区ptq +闸北区zbq +虹口区hkq +杨浦区ypq +宝山区bsq +闵行区mxq +嘉定区jdq +松江区sjq +金山区jsq +青浦区qpq +南汇区nhq +奉贤区fxq +崇明县浦东新区cmxpdxq +江苏省jss +南京市njs +无锡市wxs +江阴市jys +宜兴市yxs +徐州市xzs +邳州市pzs +新沂市xys +常州市czs +金坛市jts +溧阳市lys +苏州市szs +常熟市css +太仓市dcs +昆山市hss +吴江市wjs +南通市nns +如皋市rgs +通州市tzs +海门市hms +启东市qds +淮安市has +盐城市ycs +东台市dts +大丰市dfs +扬州市yzs +高邮市gys +江都市jds +仪征市yzs +镇江市zjs +丹阳市dys +扬中市yzs +句容市jrs +泰州市dzs +泰兴市dxs +姜堰市jys +靖江市jjs +兴化市xhs +宿迁市sqs +连云港市lygs +张家港市zjgs +浙江省zjs +杭州市hzs +建德市jds +富阳市fys +临安市las +宁波市nbx +余姚市yys +慈溪市cxs +奉化市fhs +温州市wzs +瑞安市ras +乐清市lqs +嘉兴市jxs +海宁市hns +平湖市phs +桐乡市txs +湖州市hzs +绍兴市sxs +诸暨市zjs +上虞市sys +嵊州市szs +金华市jhs +兰溪市lxs +义乌市yws +东阳市dys +永康市yks +衢州市qzs +江山市jss +舟山市zss +台州市tzs +临海市lhs +丽水市lss +龙泉市lqs +安徽省ahs +合肥市hfs +芜湖市whs +蚌埠市bbs +淮南市hns +淮北市hbs +铜陵市tls +安庆市aqs +桐城市tcs +黄山市hss +滁州市czs +天长市dcs +明光市mgs +阜阳市fys +界首市jss +宿州市szs +巢湖市chs +六安市las +亳州市hzs +池州市czs +宣城市ycs +宁国市ngs +马鞍山市mass +福建省fjs +福州市fjs +福清市fqs +长乐市cls +厦门市xms +莆田市pts +三明市sms +永安市yas +泉州市qzs +石狮市sss +晋江市jjs +南安市nas +漳州市zzs +龙海市lhs +南平市nps +建瓯市jos +邵武市sws +建阳市jys +龙岩市lys +漳平市zps +宁德市nds +福安市fas +福鼎市fds +武夷山市wyss +江西省jxs +南昌市ncs +乐平市lps +萍乡市pxs +九江市jjs +瑞昌市rcs +新余市xys +鹰潭市yts +贵溪市gxs +赣州市gzs +瑞金市rjs +南康市nks +吉安市jas +宜春市ycs +丰城市fcs +樟树市zss +高安市gas +抚州市fzs +上饶市srs +德兴市dxs +井冈山市jgss +景德镇市jdzs +山东省sds +济南市jns +章丘市zqs +青岛市qds +胶南市jns +胶州市jzs +平度市pds +莱西市lxs +即墨市jms +淄博市zbs +枣庄市zzs +滕州市tzs +烟台市yts +龙口市lks +莱阳市lys +莱州市lzs +招远市zys +蓬莱市pls +栖霞市qxs +海阳市hys +潍坊市wfs +青州市qzs +诸城市zcs +寿光市sgs +安丘市aqs +高密市gms +昌邑市cys +济宁市jns +曲阜市qfs +兖州市yzs +邹城市zcs +泰安市tas +新泰市xts +肥城市fcs +威海市whs +乳山市rss +文登市wds +荣成市rcs +日照市rzs +莱芜市lws +临沂市lys +德州市dzs +乐陵市lls +禹城市ycs +聊城市lcs +临清市lqs +滨州市bzs +菏泽市hzs +河南省hns +郑州市zzs +巩义市gys +新郑市xzs +新密市xms +登封市dfs +荥阳市xys +开封市kfs +洛阳市lys +偃师市yss +汝州市rzs +舞钢市wgs +安阳市ays +林州市lzs +新乡市xxs +卫辉市whs +辉县市hxs +焦作市jzs +沁阳市qys +孟州市mzs +濮阳市pys +许昌市xcs +禹州市yzs +长葛市cgs +漯河市lhs +义马市yms +灵宝市lbs +南阳市nys +邓州市dzs +商丘市sqs +永城市ycs +信阳市xys +周口市zks +项城市dcs +济源市jys +三门峡市smxs +平顶山市pdss +驻马店市zmds +湖北省hbs +武汉市whs +黄石市hss +大冶市dys +十堰市sys +荆州市jzs +洪湖市hhs +石首市sss +松滋市szs +宜昌市ycs +宜都市yds +当阳市dys +枝江市jjs +襄樊市xfs +枣阳市zys +宜城市ycs +鄂州市ezs +荆门市jms +钟祥市zxs +孝感市xgs +应城市ycs +安陆市als +汉川市hcs +黄冈市hgs +麻城市mcs +武穴市wxs +咸宁市xns +赤壁市cbs +随州市szs +广水市gss +仙桃市xts +天门市tms +潜江市qjs +恩施市ess +利川市lcs +丹江口市djks +老河口市lhks +神农架林区snjlq +湖南省hns +长沙市css +浏阳市lys +株洲市zzs +醴陵市lls +湘潭市xts +湘乡市xxs +韶山市sss +衡阳市hys +耒阳市lys +常宁市cns +邵阳市sys +武冈市wgs +岳阳市yys +临湘市lxs +汨罗市mls +常德市cds +津市市jss +益阳市yys +沅江市yjs +郴州市czs +资兴市zxs +永州市yzs +怀化市hhs +洪江市hjs +娄底市lds +涟源市lys +吉首市jss +冷水江市lsjs +张家界市zjjs +广东省gds +广州市gzs +从化市chs +增城市zcs +深圳市szs +珠海市zhs +汕头市sts +韶关市sgs +乐昌市lcs +南雄市nxs +佛山市fss +江门市jms +台山市tss +开平市kps +鹤山市hss +恩平市eps +湛江市zjs +廉江市ljs +雷州市lzs +吴川市wcs +茂名市mms +西昌市xcs +峨眉山市emss +都江堰市djys +攀枝花市pzhs +贵州省gzs +贵阳市gys +清镇市qzs +遵义市zys +赤水市css +仁怀市rhs +安顺市ass +毕节市bjs +兴义市xys +凯里市kls +都匀市dys +福泉市fqs +六盘水市lpss +六枝特区lztq +万山特区wstq +云南省yns +昆明市kms +安宁市ans +曲靖市qjs +宣威市xws +玉溪市yxs +保山市bss +昭通市zts +丽江市ljs +思茅市sms +临沧市lqs +个旧市gjs +开远市kys +景洪市jhs +楚雄市cxs +大理市dls +潞西市lxs +瑞丽市rls +西藏自治区xzzzq +拉萨市lss +陕西省sxs +西安市xas +铜川市tcs +宝鸡市bjs +咸阳市xys +渭南市wns +韩城市hcs +华阴市hys +延安市yas +汉中市azs +榆林市yls +安康市aks +商洛市sls +甘肃省gss +兰州市lzs +金昌市jcs +白银市bys +天水市tss +武威市wws +张掖市zys +平凉市pls +酒泉市jqs +玉门市yms +敦煌市dhs +庆阳市qys +定西市dxs +陇南市lns +临夏市lxs +合作市hzs +嘉峪关市jygs +青海省qhs +西宁市xns +德令哈市dlhs +格尔木市gems +宁夏回族自治区nxhzzzq +银川市ycs +灵武市lws +吴忠市wzs +固原市gys +中卫市zws +石嘴山市szss +青铜峡市qtxs +新疆维吾尔自治区xjwwezzq +喀什市kss +昌吉市cjs +阜康市fks +米泉市mqs +博乐市bls +伊宁市yns +奎屯市kts +塔城市tcs +乌苏市wss +石河子市shzs +阿拉尔市ales +五家渠市wjqs +吐鲁番市tlfs +阿克苏市akss +阿图什市atss +库尔勒市kels +阿勒泰市alts +乌鲁木齐市wlmqs +克拉玛依市klmys +图木舒克市tmsks +香港特别行政区 +中西区zxq +东区dq +观塘区gtq +南区nq +湾仔区wzq +离岛区ldq +葵青区kqq +北区bq +西贡区xgq +沙田区stq +屯门区tmq +大埔区dpq +荃湾区qwq +元朗区ylq +九龙城区jtcq +油尖旺区yjwq +深水埗区ssbq +黄大仙区hdxq +台湾省tws +台北市tbs +高雄市gxs +基隆市jls +台中市tzs +台南市tns +新竹市xzs +嘉义市jys +板桥市bqs +宜兰市yls +竹北市zbs +桃园市tys +苗栗市mls +丰原市fys +彰化市zhs +南投市nts +太保市tbs +斗六市dls +新营市xys +凤山市fss +屏东市pds +台东市tds +花莲市hls +马公市mgs \ No newline at end of file diff --git a/YN_utf8.txt b/YN_utf8.txt new file mode 100644 index 0000000..a847c21 --- /dev/null +++ b/YN_utf8.txt @@ -0,0 +1,21061 @@ +Šsw +šsw +Žzw +žzw +Œce +œce +aÀ +aÁ +aẢ +aà +aẠ +aÄ +aÅ +aeÆ +a +asá +afà +arả +axã +ajạ +awă +aaâ +aeă +äa +åa +aaâ +aa +Äa +Åa +Æae +AFÀ +ASÁ +ARẢ +AXà +AJẠ +AÄ +AÅ +AEÆ +AA +eÉ +eÈ +eẺ +eẼ +eẸ +eÊ +eË +esé +efè +erẻ +exẽ +ejẹ +eeê +ESÉ +EFÈ +ERẺ +EXẼ +EJẸ +EEÊ +eeÊ +EË +DDĐ +ddđ +ddĐ +íis +ìif +ỉir +ĩix +ịij +ÌIF +ÍIS +ỈIR +ĨIX +ỊIj +IIÎ +iÌ +iÍ +iỈ +iĨ +ij +iÎ +iÏ +nÑ +osó +ofò +orỏ +oxõ +ojọ +owơ +ooô +OSÓ +OFÒ +ORỎ +OXÕ +OJỌ +OWƠ +OEÒ +OOÔ +ooÔ +OÖ +ooÖ +oÓ +oÒ +oỎ +oÕ +oỌ +oƠ +oÒ +oÔ +usú +ufù +urủ +uxũ +ujụ +uwư +USÚ +UFÙ +URỦ +UXŨ +UJỤ +UWƯ +ÜU +ÛU +uÚ +uÙ +uỦ +uŨ +uỤ +uƯ +uÜ +uÛ +YFỲ +YSÝ +YRỶ +YXỸ +YJỴ +yỲ +yÝ +yỶ +yỸ +yỴ +yfỳ +ysý +yrỷ +yxỹ +ỵyj +安a +按a +爱a +阿a +暗a +啊a +埃a +碍a +凹a +奥a +岸a +矮a +案a +俺a +挨a +唉a +昂a +氨a +胺a +哎a +吖a +嗄a +腌a +锕a +安徽省ahs +爱ai +埃ai +碍ai +矮ai +挨ai +唉ai +哎ai +哀ai +皑ai +癌ai +蔼ai +艾ai +隘ai +呆*ai +捱ai +嗳ai +嗌ai +嫒ai +瑷ai +暧ai +砹ai +锿ai +霭ai +安an +按an +暗an +岸an +案an +俺an +氨an +胺an +鞍an +谙an +埯an +揞an +犴an +庵an +桉an +铵an +鹌an +黯an +昂ang +肮ang +盎ang +安徽anhui +凹ao +奥ao +敖ao +熬ao +翱ao +袄ao +傲ao +懊ao +澳ao +嚣*ao +坳ao +拗ao +嗷ao +岙ao +廒ao +遨ao +媪ao +骜ao +獒ao +聱ao +螯ao +鏊ao +鳌ao +鏖ao +不b +部b +本b +表b +把b +变b +比b +并b +别b +百b +报b +保b +病b +北b +被b +步b +边b +八b +办b +布b +把ba +八ba +吧ba +巴ba +拔ba +霸ba +罢ba +爸ba +坝ba +芭ba +捌ba +扒ba +叭ba +笆ba +疤ba +跋ba +靶ba +耙ba +茇ba +菝ba +岜ba +灞ba +钯ba +粑ba +鲅ba +魃ba +百bai +白bai +败bai +摆bai +伯*bai +柏bai +佰bai +拜bai +稗bai +捭bai +掰bai +办ban +半ban +板ban +班ban +般ban +版ban +拌ban +搬ban +斑ban +扳ban +伴ban +颁ban +扮ban +瓣ban +绊ban +阪ban +坂ban +钣ban +瘢ban +癍ban +舨ban +帮bang +棒bang +邦bang +榜bang +梆bang +膀bang +绑bang +磅bang +蚌bang +镑bang +傍bang +谤bang +蒡bang +浜bang +报bao +保bao +包bao +剥bao +薄bao +胞bao +暴bao +宝bao +饱bao +抱bao +爆bao +炮*bao +堡bao +刨*bao +苞bao +褒bao +雹bao +豹bao +鲍bao +曝*bao +瀑*bao +葆bao +孢bao +煲bao +鸨bao +褓bao +趵bao +龅bao +北bei +被bei +倍bei +备bei +背bei +辈bei +贝bei +杯bei +卑bei +臂*bei +悲bei +碑bei +钡bei +狈bei +惫bei +焙bei +孛bei +陂bei +邶bei +埤bei +萆bei +蓓bei +呗bei +悖bei +碚bei +鹎bei +褙bei +鐾bei +鞴bei +本ben +奔ben +苯ben +笨ben +夯*ben +畚ben +坌ben +贲ben +锛ben +本报benbao +奔波benbo +本部benbu +本厂benchang +奔驰benchi +本地bendi +奔放benfang +泵beng +崩beng +蚌*beng +绷beng +甭beng +蹦beng +迸beng +嘣beng +甏beng +比bi +必bi +避bi +闭bi +辟bi +笔bi +壁bi +臂bi +毕bi +彼bi +逼bi +币bi +鼻bi +蔽bi +秘*bi +鄙bi +碧bi +蓖bi +毙bi +毖bi +庇bi +痹bi +敝bi +弊bi +陛bi +拂*bi +泌*bi +匕bi +俾bi +埤*bi +芘*bi +荜bi +荸bi +萆*bi +薜bi +吡bi +哔bi +狴bi +庳bi +愎bi +滗bi +濞bi +弼bi +妣bi +婢bi +嬖bi +璧bi +贲*bi +睥*bi +畀bi +铋bi +秕bi +裨bi +筚bi +箅bi +篦bi +舭bi +襞bi +跸bi +髀bi +变bian +边bian +便bian +编bian +遍bian +辩bian +扁bian +辨bian +鞭bian +贬bian +卞bian +辫bian +匾bian +弁bian +苄bian +忭bian +汴bian +缏bian +飚bian +煸bian +砭bian +碥bian +窆bian +褊bian +蝙bian +笾bian +鳊bian +表biao +标biao +彪biao +膘biao +勺*biao +婊biao +骠biao +杓biao +飑biao +飙biao +镖biao +镳biao +瘭biao +裱biao +鳔biao +髟biao +别bie +鳖bie +憋bie +瘪bie +蹩bie +宾bin +彬bin +斌bin +濒bin +滨bin +摈bin +傧bin +豳bin +缤bin +玢bin +槟bin +殡bin +膑bin +镔bin +髌bin +鬓bin +并bing +病bing +兵bing +柄bing +冰bing +丙bing +饼bing +秉bing +炳bing +屏*bing +禀bing +邴bing +摒bing +槟*bing +波bo +播bo +剥*bo +伯bo +拨bo +薄*bo +博bo +勃bo +驳bo +玻bo +泊bo +柏*bo +卜*bo +菠bo +钵bo +搏bo +铂bo +箔bo +帛bo +舶bo +脖bo +膊bo +渤bo +魄*bo +孛*bo +亳bo +啵bo +饽bo +檗bo +掰*bo +擘bo +礴bo +钹bo +鹁bo +簸bo +趵*bo +跛bo +踣bo +不bu +部bu +步bu +布bu +补bu +捕bu +埔*bu +卜bu +堡*bu +哺bu +埠bu +簿bu +怖bu +卟bu +逋bu +瓿bu +晡bu +钚bu +钸bu +醭bu +不安buan +不比bubi +不必bubi +不变bubian +不便bubian +步兵bubing +步步bubu +不曾buceng +补偿buchang +不啻buchi +补充buchong +不错bucuo +不大buda +不待budai +不但budan +不当budang +不得bude +不等budeng +步调budiao +不动budong +不断buduan +不对budui +部队budui +不法bufa +补发bufa +步伐bufa +不凡bufan +不妨bufang +不分bufen +部分bufen +不服bufu +不符bufu +不该bugai +不敢bugan +不甘bugan +布告bugao +不够bugou +不顾bugu +不管buguan +不过buguo +不会buhui +补给buji +部件bujian +不借bujie +不尽bujin +不仅bujin +不禁bujin +布景bujing +不久bujiu +补救bujiu +布局buju +不堪bukan +不可buke +不快bukuai +不愧bukui +不理buli +不利buli +不良buliang +不料buliao +步履bulu +不论bulun +部落buluo +不满buman +部门bumen +不免bumian +不能buneng +不怕bupa +补品bupin +不平buping +步枪buqiang +不屈buqu +不然buran +不如buru +不少bushao +不是bushi +不识bushi +部首bushou +部属bushu +部署bushu +补贴butie +不同butong +不妥butuo +部位buwei +部委buwei +不问buwen +不惜buxi +补习buxi +部下buxia +不行buxing +不幸buxing +步行buxing +不朽buxiu +不许buxu +哺养buyang +不要buyao +不宜buyi +不用buyong +哺育buyu +不在buzai +部长buzhang +不振buzhen +不只buzhi +不止buzhi +不知buzhi +不致buzhi +布置buzhi +步骤buzhou +补助buzhu +捕捉buzhuo +步子buzi +不足buzu +博物馆bwg +产c +成c +出c +长c +从c +此c +常c +处c +车c +场c +传c +采c +层c +厂c +才c +次c +虫c +除c +查c +差c +擦ca +拆*ca +嚓ca +礤ca +采cai +才cai +材cai +菜cai +财cai +裁cai +彩cai +猜cai +睬cai +踩cai +蔡cai +参can +残can +蚕can +灿can +餐can +惭can +惨can +孱can +骖can +璨can +粲can +黪can +惨案canan +惨白canbai +残暴canbao +惨怛canda +残废canfei +藏cang +仓cang +苍cang +舱cang +沧cang +苍白cangbai +仓促cangcu +仓库cangku +苍老canglao +苍茫cangmang +藏匿cangni +苍穹cangqiong +沧桑cangsang +苍天cangtian +参观canguan +残骸canhai +残疾canji +参加canjia +参见canjian +残局canju +惨剧canju +参军canjun +参看cankan +参考cankao +残酷canku +惭愧cankui +灿烂canlan +参谋canmou +残缺canque +残忍canren +孱弱canruo +残杀cansha +残生cansheng +蚕食canshi +参数canshu +惨痛cantong +参与canyu +残余canyu +残月canyue +参阅canyue +参赞canzan +惨遭canzao +参战canzhan +参照canzhao +参政canzheng +惨重canzhong +草cao +槽cao +操cao +糙cao +曹cao +嘈cao +漕cao +螬cao +艚cao +草案caoan +草稿caogao +槽糕caogao +操劳caolao +操练caolian +草率caolu +草木caomu +草拟caoni +草签caoqian +操心caoxin +草原caoyuan +嘈杂caoza +操纵caozong +操作caozuo +差不多cbd +成本核算cbhs +出版社cbs +层出不穷ccbq +从长计议ccjy +存储器ccq +长春市ccs +成都市cds +测ce +策ce +侧ce +册ce +厕ce +恻ce +测定ceding +策动cedong +策反cefan +策划cehua +测量celiang +策略celue +侧面cemian +参*cen +岑cen +涔cen +涔涔cencen +层ceng +曾*ceng +蹭ceng +层层cengceng +层次cengci +曾经cengjing +测试ceshi +厕所cesuo +测验ceyan +侧重cezhong +出发点cfd +充分发挥cffh +唱高调cgd +从古到今cgdj +查cha +差cha +插cha +察cha +茶cha +叉cha +茬cha +碴cha +搽cha +岔cha +诧cha +刹*cha +喳*cha +嚓*cha +猹cha +馇cha +汊cha +姹cha +杈cha +楂cha +槎cha +檫cha +锸cha +镲cha +衩cha +查办chaban +差别chabie +差错chacuo +差点chadian +查对chadui +差额chae +查访chafang +察访chafang +查封chafeng +查获chahuo +差*chai +柴chai +拆chai +豺chai +侪chai +钗chai +瘥chai +虿chai +拆穿chaichuan +豺狼chailang +拆散chaisan +差使chaishi +拆卸chaixie +柴油chaiyou +差价chajia +差距chaju +察觉chajue +查看chakan +察看chakan +查考chakao +查明chaming +产chan +单*chan +铲chan +阐chan +搀chan +掺chan +蝉chan +馋chan +谗chan +缠chan +颤chan +冁chan +谄chan +蒇chan +廛chan +忏chan +潺chan +澶chan +孱*chan +羼chan +婵chan +骣chan +觇chan +禅chan +镡chan +蟾chan +躔chan +铲除chanchu +产地chandi +阐发chanfa +搀扶chanfu +长chang +常chang +场chang +厂chang +唱chang +肠chang +昌chang +倡chang +偿chang +畅chang +猖chang +尝chang +敞chang +裳*chang +倘*chang +伥chang +鬯chang +苌chang +菖chang +徜chang +怅chang +惝chang +阊chang +娼chang +嫦chang +昶chang +氅chang +鲳chang +长安changan +常常changchang +长城changcheng +长春changchun +畅达changda +倡导changdao +长度changdu +长短changduan +唱歌changge +常规changgui +长河changhe +场合changhe +偿还changhuan +厂家changjia +常见changjian +长江changjiang +长久changjiu +猖獗changjue +长空changkong +畅快changkuai +猖狂changkuang +场面changmian +长眠changmian +长年changnian +长篇changpian +长期changqi +长驱changqu +常任changren +长沙changsha +厂商changshang +常识changshi +尝试changshi +长寿changshou +常数changshu +场所changsuo +畅谈changtan +长途changtu +怅惘changwang +常委changwei +倘未changwei +常温changwen +常务changwu +畅想changxiang +畅销changxiao +倡议changyi +畅饮changyin +常用changyong +常有changyou +畅游changyou +长远changyuan +厂长changzhang +长征changzheng +厂址changzhi +常驻changzhu +婵娟chanjuan +蝉联chanlian +产量chanliang +缠绵chanmian +阐明chanming +产品chanpin +产权chanquan +缠绕chanrao +产生chansheng +禅师chanshi +阐述chanshu +产物chanwu +产销chanxiao +产业chanye +产值chanzhi +朝chao +超chao +潮chao +巢chao +抄chao +钞chao +嘲chao +吵chao +炒chao +绰*chao +剿*chao +怊chao +晁chao +焯*chao +耖chao +抄报chaobao +超产chaochan +超出chaochu +朝代chaodai +超额chaoe +嘲讽chaofeng +超过chaoguo +朝晖chaohui +超级chaoji +吵架chaojia +潮解chaojie +潮流chaoliu +抄录chaolu +吵闹chaonao +嘲弄chaonong +潮湿chaoshi +潮水chaoshui +抄送chaosong +超脱chaotuo +抄袭chaoxi +朝鲜chaoxian +嘲笑chaoxiao +巢穴chaoxue +朝阳chaoyang +朝野chaoye +超越chaoyue +超支chaozhi +查清chaqing +插曲chaqu +插入charu +查哨chashao +插手chashou +查收chashou +插图chatu +查问chawen +查询chaxun +茶叶chaye +差异chayi +查阅chayue +查证chazheng +岔子chazi +插足chazu +车che +彻che +尺*che +撤che +扯che +掣che +澈che +坼che +砗che +彻底chedi +车祸chehuo +车间chejian +车辆cheliang +陈chen +沉chen +称chen +衬chen +尘chen +臣chen +晨chen +沈*chen +郴chen +辰chen +忱chen +趁chen +伧chen +谌chen +谶chen +抻chen +嗔chen +宸chen +琛chen +榇chen +碜chen +龀chen +尘埃chenai +沉淀chendian +陈腐chenfu +沉浮chenfu +成cheng +程cheng +称cheng +城cheng +承cheng +乘cheng +呈cheng +盛*cheng +撑cheng +诚cheng +橙cheng +惩cheng +澄cheng +逞cheng +骋cheng +秤cheng +丞cheng +埕cheng +噌cheng +枨cheng +柽cheng +塍cheng +瞠cheng +铖cheng +铛cheng +裎cheng +蛏cheng +酲cheng +成败chengbai +承办chengban +惩办chengban +呈报chengbao +承包chengbao +成本chengben +成材chengcai +惩处chengchu +乘除chengchu +承担chengdan +承当chengdang +成都chengdu +程度chengdu +乘法chengfa +惩罚chengfa +成功chenggong +成规chenggui +成果chengguo +称号chenghao +称呼chenghu +成绩chengji +乘机chengji +成家chengjia +成见chengjian +成交chengjiao +承接chengjie +惩戒chengjie +成就chengjiu +乘客chengke +诚恳chengken +成立chengli +乘凉chengliang +成名chengming +成年chengnian +成批chengpi +成品chengpin +诚朴chengpu +逞强chengqiang +澄清chengqing +城区chengqu +成全chengquan +诚然chengran +成人chengren +承认chengren +成色chengse +成事chengshi +诚实chengshi +城市chengshi +承受chengshou +成熟chengshu +成为chengwei +称谓chengwei +成文chengwen +呈现chengxian +呈献chengxian +城乡chengxiang +成效chengxiao +称心chengxin +诚心chengxin +程序chengxu +乘虚chengxu +撑腰chengyao +诚意chengyi +成语chengyu +成员chengyuan +称赞chengzan +成长chengzhang +城镇chengzhen +称职chengzhi +诚挚chengzhi +趁机chenji +沉积chenji +陈迹chenji +沉浸chenjin +沉静chenjing +陈旧chenjiu +陈列chenlie +沉沦chenlun +沉闷chenmen +沉湎chenmian +沉默chenmo +沉溺chenni +陈设chenshe +陈述chenshu +陈说chenshuo +沉思chensi +沉痛chentong +衬托chentuo +沉吟chenyin +衬映chenying +趁早chenzao +沉重chenzhong +沉着chenzhuo +车皮chepi +扯皮chepi +撤退chetui +撤消chexiao +车站chezhan +撤职chezhi +持chi +尺chi +齿chi +吃chi +赤chi +池chi +迟chi +翅chi +斥chi +耻chi +痴chi +匙chi +弛chi +驰chi +侈chi +炽chi +傺chi +坻chi +墀chi +茌chi +叱chi +哧chi +啻chi +嗤chi +彳chi +饬chi +媸chi +敕chi +眵chi +鸱chi +瘛chi +褫chi +蚩chi +螭chi +笞chi +篪chi +豉chi +踟chi +魑chi +翅膀chibang +赤诚chicheng +驰骋chicheng +尺寸chicun +迟到chidao +赤道chidao +尺度chidu +迟钝chidun +吃喝chihe +迟缓chihuan +吃紧chijin +吃惊chijing +持久chijiu +吃苦chiku +吃亏chikui +吃力chili +炽烈chilie +齿轮chilun +持平chiping +痴情chiqing +炽热chire +耻辱chiru +池塘chitang +耻笑chixiao +赤心chixin +痴心chixin +迟疑chiyi +迟早chizao +斥责chize +叱咤chizha +持重chizhong +吃重chizhong +赤字chizi +催化剂chj +种*chong +虫chong +重*chong +充chong +冲chong +崇chong +涌*chong +宠chong +茺chong +忡chong +憧chong +铳chong +舂chong +艟chong +宠爱chongai +崇拜chongbai +充斥chongchi +冲刺chongci +冲淡chongdan +充当chongdang +重叠chongdie +冲动chongdong +宠儿chonger +充分chongfen +冲锋chongfeng +重复chongfu +崇高chonggao +重合chonghe +重婚chonghun +冲击chongji +重建chongjian +崇敬chongjing +憧憬chongjing +充满chongman +充沛chongpei +冲破chongpo +重庆chongqing +崇尚chongshang +重申chongshen +充实chongshi +冲刷chongshua +冲天chongtian +冲突chongtu +重温chongwen +冲洗chongxi +重新chongxin +重演chongyan +重印chongyin +充裕chongyu +充足chongzu +抽chou +仇chou +臭chou +酬chou +畴chou +踌chou +稠chou +愁chou +筹chou +绸chou +瞅chou +丑chou +俦chou +帱chou +惆chou +瘳chou +雠chou +筹办chouban +筹备choubei +惆怅chouchang +抽搐chouchu +踌躇chouchu +筹措choucuo +抽调choudiao +丑恶choue +仇恨chouhen +丑化chouhua +筹划chouhua +筹集chouji +筹建choujian +酬金choujin +抽空choukong +酬劳choulao +丑陋choulou +筹码chouma +稠密choumi +筹谋choumou +愁容chourong +抽象chouxiang +酬谢chouxie +抽噎chouye +出chu +处chu +除chu +初chu +础chu +触chu +楚chu +锄chu +储chu +畜*chu +橱chu +厨chu +躇chu +雏chu +滁chu +矗chu +搐chu +亍chu +刍chu +怵chu +憷chu +绌chu +杵chu +楮chu +樗chu +褚chu +蜍chu +蹰chu +黜chu +揣chuai +搋chuai +啜chuai +嘬*chuai +膪chuai +踹chuai +揣度chuaidu +揣摩chuaimo +传chuan +船chuan +穿chuan +串chuan +川chuan +椽chuan +喘chuan +舛chuan +遄chuan +巛chuan +氚chuan +钏chuan +舡chuan +传遍chuanbian +传标chuanbiao +传播chuanbo +船舶chuanbo +船埠chuanbu +穿插chuancha +传达chuanda +传单chuandan +传导chuandao +传递chuandi +床chuang +创chuang +窗chuang +闯chuang +疮chuang +幢chuang +怆chuang +创办chuangban +闯荡chuangdang +窗户chuanghu +创见chuangjian +创建chuangjian +闯劲chuangjin +创举chuangju +窗口chuangkou +创立chuangli +窗帘chuanglian +创始chuangshi +创新chuangxin +创业chuangye +创造chuangzao +创作chuangzuo +串联chuanlian +喘气chuanqi +传奇chuanqi +传染chuanran +传授chuanshou +传输chuanshu +传述chuanshu +传说chuanshuo +传送chuansong +传统chuantong +串通chuantong +喘息chuanxi +传讯chuanxun +传扬chuanyang +传阅chuanyue +传真chuanzhen +船只chuanzhi +穿着chuanzhuo +出版chuban +出榜chubang +储备chubei +出兵chubing +初步chubu +储藏chucang +出差chucha +出产chuchan +出场chuchang +出厂chuchang +处处chuchu +橱窗chuchuang +初次chuci +储存chucun +初等chudeng +出动chudong +触动chudong +出发chufa +触发chufa +除法chufa +处罚chufa +触犯chufan +出访chufang +除非chufei +处分chufen +出轨chugui +出海chuhai +吹chui +垂chui +锤chui +椎*chui +炊chui +捶chui +陲chui +棰chui +槌chui +吹棒chuibang +吹风chuifeng +吹拂chuifu +锤炼chuilian +吹牛chuiniu +垂青chuiqing +垂涎chuixian +吹嘘chuixu +垂直chuizhi +初级chuji +出击chuji +出界chujie +出境chujing +处境chujing +处决chujue +触觉chujue +除开chukai +出口chukou +出来chulai +除了chule +出力chuli +处理chuli +矗立chuli +初恋chulian +出笼chulong +出路chulu +出马chuma +出卖chumai +出面chumian +出名chuming +除名chuming +出没chumo +春chun +纯chun +醇chun +椿chun +唇chun +淳chun +蠢chun +莼chun +鹑chun +蝽chun +出纳chuna +春播chunbo +纯粹chuncui +纯度chundu +春分chunfen +春风chunfeng +春耕chungeng +春光chunguang +醇厚chunhou +春辉chunhui +春季chunji +春节chunjie +纯洁chunjie +纯净chunjing +纯利chunli +纯朴chunpu +春秋chunqiu +春色chunse +春笋chunsun +春天chuntian +处女chunu +触怒chunu +春意chunyi +纯真chunzhen +纯正chunzheng +戳chuo +绰chuo +啜*chuo +辍chuo +踔chuo +龊chuo +戳穿chuochuan +绰号chuohao +啜泣chuoqi +出品chupin +出奇chuqi +初期chuqi +出勤chuqin +出去chuqu +出让churang +出任churen +出入churu +出色chuse +出身chushen +出神chushen +出生chusheng +畜生chusheng +出事chushi +出世chushi +处世chushi +厨师chushi +出售chushou +处所chusuo +出庭chuting +锄头chutou +出土chutu +出外chuwai +除外chuwai +出席chuxi +出息chuxi +除夕chuxi +出现chuxian +初小chuxiao +雏形chuxing +储蓄chuxu +刍议chuyi +处于chuyu +初战chuzhan +处长chuzhang +出诊chuzhen +出征chuzheng +处置chuzhi +初中chuzhong +出租chuzu +此ci +次ci +刺ci +磁ci +雌ci +词ci +茨ci +疵ci +辞ci +慈ci +瓷ci +赐ci +伺*ci +兹*ci +茈ci +呲ci +祠ci +鹚ci +糍ci +慈爱ciai +辞别cibie +磁场cichang +磁带cidai +磁道cidao +此地cidi +词典cidian +辞典cidian +刺耳cier +词根cigen +刺骨cigu +此后cihou +词汇cihui +刺激ciji +赐教cijiao +此刻cike +刺客cike +词类cilei +辞令ciling +磁盘cipan +次品cipin +辞去ciqu +刺杀cisha +此时cishi +次数cishu +辞书cishu +词素cisu +祠堂citang +辞退citui +此外ciwai +慈祥cixiang +辞行cixing +词性cixing +雌雄cixiong +次序cixu +词序cixu +刺眼ciyan +次要ciyao +词语ciyu +赐予ciyu +此致cizhi +辞职cizhi +词缀cizhui +词组cizu +超级大国cjdg +参考书cks +参考消息ckxx +参考资料ckzl +触类旁通clpt +藏龙卧虎clwh +参谋长cmc +聪明才智cmcz +出谋划策cmhc +从难从严cncy +从cong +丛cong +聪cong +葱cong +囱cong +匆cong +苁cong +淙cong +骢cong +琮cong +璁cong +从此congci +匆匆congcong +匆促congcu +从而conger +从犯congfan +聪慧conghui +从来conglai +丛林conglin +匆忙congmang +聪明congming +从前congqian +从容congrong +从事congshi +丛书congshu +从速congsu +从新congxin +从严congyan +聪颖congying +葱郁congyu +从中congzhong +凑cou +楱cou +辏cou +腠cou +凑合couhe +凑巧couqiao +成品率cpl +成千上万cqsw +从容不迫crbp +承认错误crcw +趁热打铁crdt +措手不及csbj +出生率csl +长沙市css +炊事员csy +彻头彻尾ctcw +垂头丧气ctsq +粗cu +促cu +醋cu +簇cu +卒*cu +蔟cu +徂cu +猝cu +殂cu +酢cu +蹙cu +蹴cu +篡cuan +蹿cuan +窜cuan +攒*cuan +汆cuan +撺cuan +爨cuan +镩cuan +篡夺cuanduo +窜犯cuanfan +篡改cuangai +篡权cuanquan +粗暴cubao +粗糙cucao +粗犷cuguang +催cui +脆cui +淬cui +粹cui +摧cui +衰*cui +崔cui +瘁cui +翠cui +萃cui +啐cui +悴cui +璀cui +榱cui +毳cui +隹cui +摧残cuican +脆弱cuiruo +促进cujin +存cun +村cun +寸cun +蹲*cun +忖cun +皴cun +存储cunchu +存档cundang +存放cunfang +存款cunkuan +村落cunluo +存亡cunwang +存在cunzai +村镇cunzhen +村庄cunzhuang +村子cunzi +错cuo +措cuo +撮cuo +磋cuo +搓cuo +挫cuo +厝cuo +嵯cuo +脞cuo +锉cuo +矬cuo +痤cuo +瘥*cuo +鹾cuo +蹉cuo +错案cuoan +挫败cuobai +错处cuochu +措辞cuoci +错怪cuoguai +错过cuoguo +撮合cuohe +错觉cuojue +磋商cuoshang +挫伤cuoshang +措施cuoshi +错误cuowu +挫折cuozhe +错综cuozong +粗浅cuqian +促使cushi +粗俗cusu +粗心cuxin +粗壮cuzhuang +常委会cwh +崇文区cwq +常务委员会cwwh +乘务员cwy +诚心诚意cxcy +程序控制cxkz +程序设计cxsj +长远利益cyly +朝阳区cyq +财政部czb +错综复杂czfz +操之过急czgj +出租汽车czqc +此之外czw +财政危机czwj +创造性czx +操作系统czxt +操作员czy +持之以恒czyh +的d +大d +地d +动d +到d +对d +度d +多d +电d +党d +得d +定d +等d +斗d +当d +队d +都d +点d +代d +道d +大da +打da +达da +答da +搭da +塔*da +瘩da +耷da +哒da +嗒da +怛da +妲da +沓*da +疸da +褡da +笪da +靼da +鞑da +答案daan +打败dabai +大办daban +大半daban +打扮daban +答辩dabian +大伯dabo +大部dabu +达成dacheng +大胆dadan +搭档dadang +大道dadao +达到dadao +打倒dadao +大地dadi +大敌dadi +大抵dadi +打断daduan +大队dadui +大多daduo +大凡dafan +大夫dafu +大幅dafu +答复dafu +大概dagai +大纲dagang +大国daguo +大海dahai +大好dahao +大河dahe +大亨daheng +大会dahui +大*dai +代dai +带dai +待dai +袋dai +戴dai +呆dai +歹dai +傣dai +殆dai +贷dai +逮dai +怠dai +埭dai +甙dai +呔dai +岱dai +迨dai +骀dai +绐dai +玳dai +黛dai +呆板daiban +代表daibiao +逮捕daibu +逮逋daibu +代词daici +带动daidong +怠工daigong +代价daijia +贷款daikuan +带来dailai +代理daili +带领dailing +带路dailu +黛绿dailu +代码daima +怠慢daiman +待命daiming +代数daishu +代替daiti +带头daitou +歹徒daitu +待遇daiyu +呆滞daizhi +呆子daizi +打击daji +大家dajia +打搅dajiao +大街dajie +大捷dajie +打劫dajie +搭救dajiu +大局daju +答卷dajuan +打开dakai +耷拉dala +大力dali +大连dalian +大量daliang +打量daliang +大陆dalu +大略dalue +大妈dama +单dan +但dan +弹dan +担dan +石*dan +蛋dan +淡dan +胆dan +氮dan +丹dan +旦dan +耽dan +郸dan +掸dan +惮dan +诞dan +儋dan +萏dan +啖dan +澹*dan +殚dan +赕dan +眈dan +疸dan +瘅dan +聃dan +箪dan +大脑danao +担保danbao +单薄danbao +淡薄danbao +单产danchan +诞辰danchen +单纯danchun +单词danci +担当dandang +单调dandiao +单独dandu +单方danfang +担负danfu +党dang +当dang +档dang +挡dang +荡dang +谠dang +凼dang +菪dang +宕dang +砀dang +裆dang +单干dangan +胆敢dangan +档案dangan +当场dangchang +当初dangchu +当代dangdai +当地dangdi +单个dange +耽搁dange +党风dangfeng +党纲danggang +党纪dangji +党籍dangji +当即dangji +当家dangjia +当今dangjin +当局dangju +当量dangliang +当面dangmian +党内dangnei +当年dangnian +党派dangpai +当铺dangpu +当前dangqian +当然dangran +当日dangri +当时dangshi +当天dangtian +当头dangtou +党团dangtuan +当晚dangwan +党委dangwei +当先dangxian +党校dangxiao +当心dangxin +党性dangxing +荡漾dangyang +党员dangyuan +当月dangyue +党章dangzhang +当真dangzhen +党政dangzheng +当政dangzheng +当中dangzhong +当众dangzhong +当做dangzuo +单价danjia +担架danjia +胆量danliang +胆略danlue +淡漠danmo +胆怯danqie +丹青danqing +担任danren +单身danshen +诞生dansheng +但是danshi +胆识danshi +单体danti +丹田dantian +单位danwei +耽误danwu +单项danxiang +胆小danxiao +担心danxin +淡雅danya +弹药danyao +单一danyi +单元danyuan +但愿danyuan +单质danzhi +担子danzi +掸子danzi +单字danzi +到dao +道dao +导dao +刀dao +倒dao +稻dao +岛dao +捣dao +盗dao +蹈dao +祷dao +悼dao +叨dao +帱*dao +忉dao +氘dao +焘*dao +纛dao +倒闭daobi +到处daochu +悼词daoci +到达daoda +导弹daodan +道德daode +到底daodi +倒戈daoge +捣鬼daogui +捣毁daohui +到来daolai +到了daole +道理daoli +倒立daoli +道路daolu +捣乱daoluan +倒霉daomei +叨念daonian +道歉daoqian +刀枪daoqiang +盗窃daoqie +到时daoshi +导师daoshi +倒数daoshu +导体daoti +倒退daotui +导演daoyan +道义daoyi +盗用daoyong +岛屿daoyu +导致daozhi +大批dapi +大破dapo +打破dapo +大气daqi +大庆daqing +打扰darao +打扫dasao +大厦dasha +搭讪dashan +大赦dashe +大使dashi +大事dashi +大师dashi +大势dashi +大肆dasi +打算dasuan +大体dati +大厅dating +打听dating +大同datong +大小daxiao +大写daxie +答谢daxie +大选daxuan +大学daxue +大业daye +达因dayin +打印dayin +答应daying +大于dayu +大院dayuan +大约dayue +打仗dazhang +大致dazhi +大众dazhong +打字dazi +代办处dbc +得不偿失dbcs +大部分dbf +电报挂号dbgh +大不了dbl +大步流星dblx +对不起dbq +代表团dbt +电冰箱dbx +东城区dcq +到此为止dcwz +独创性dcx +调查研究dcyj +打成一片dcyp +打电话ddh +电动机ddj +对得起ddq +大多数dds +的de +得de +地*de +德de +底*de +锝de +得逞decheng +的当dedang +得当dedang +得到dedao +得分defen +德国deguo +得奖dejiang +得救dejiu +得了dele +得力deli +等deng +灯deng +登deng +邓deng +澄*deng +蹬deng +瞪deng +凳deng +噔deng +嶝deng +戥deng +磴deng +镫deng +簦deng +登场dengchang +等待dengdai +等到dengdao +灯光dengguang +等候denghou +等级dengji +登记dengji +等价dengjia +灯具dengju +登门dengmen +灯谜dengmi +登攀dengpan +登山dengshan +灯塔dengta +登台dengtai +等同dengtong +等闲dengxian +等于dengyu +登载dengzai +得胜desheng +得失deshi +得体deti +德行dexing +得以deyi +得意deyi +德育deyu +得志dezhi +得知dezhi +得罪dezui +大幅度dfd +多方面dfm +单方面dfm +电风扇dfs +大规模dgm +多功能dgn +大公无私dgws +帝国主义dgzy +电话号码dhhm +电化教育dhjy +大会堂dht +的*di +地di +第di +低di +敌di +底di +提*di +帝di +抵di +滴di +弟di +递di +堤di +迪di +笛di +狄di +涤di +翟di +嫡di +蒂di +缔di +氐di +籴di +诋di +谛di +邸di +坻*di +荻di +嘀di +娣di +绨di +柢di +棣di +觌di +砥di +碲di +睇di +镝di +羝di +骶di +嗲dia +电dian +点dian +垫dian +典dian +店dian +颠dian +淀dian +掂dian +滇dian +碘dian +靛dian +佃dian +甸dian +惦dian +奠dian +殿dian +阽dian +坫dian +巅dian +玷dian +钿dian +癜dian +癫dian +簟dian +踮dian +电报dianbao +点播dianbo +电场dianchang +电车dianche +电池dianchi +电传dianchuan +颠倒diandao +电灯diandeng +点滴diandi +奠定dianding +电动diandong +典范dianfan +淀粉dianfen +垫付dianfu +颠覆dianfu +电感diangan +典故diangu +电荷dianhe +电弧dianhu +电话dianhua +电汇dianhui +电机dianji +电极dianji +奠基dianji +惦记dianji +典籍dianji +点将dianjiang +电解dianjie +殿军dianjun +癫狂diankuang +电缆dianlan +电力dianli +电离dianli +典礼dianli +电流dianliu +电路dianlu +电脑diannao +电能dianneng +店铺dianpu +电气dianqi +电器dianqi +点燃dianran +电容dianrong +电扇dianshan +电视dianshi +电台diantai +电梯dianti +点头diantou +电网dianwang +电位dianwei +玷污dianwu +殿下dianxia +电线dianxian +癫痫dianxian +电信dianxin +典型dianxing +电讯dianxun +电压dianya +电影dianying +店员dianyuan +点阵dianzhen +点缀dianzhui +电子dianzi +点子dianzi +电阻dianzu +调diao +掉diao +吊diao +鸟*diao +碉diao +叼diao +雕diao +凋diao +刁diao +钓diao +铞diao +铫diao +貂diao +鲷diao +碉堡diaobao +凋敝diaobi +调查diaocha +吊车diaoche +调动diaodong +调度diaodu +钓饵diaoer +调换diaohuan +掉换diaohuan +雕刻diaoke +调令diaoling +刁难diaonan +调遣diaoqian +调任diaoren +雕塑diaosu +吊唁diaoyan +调用diaoyong +钓鱼diaoyu +调子diaozi +第八diba +地板diban +地步dibu +低沉dichen +抵触dichu +抵达dida +地带didai +低档didang +抵挡didang +地道didao +弟弟didi +地点didian +地段diduan +敌对didui +迭die +跌die +爹die +碟die +蝶die +谍die +叠die +垤die +堞die +揲die +喋die +牒die +瓞die +耋die +踮*die +蹀die +鲽die +迭起dieqi +第二dier +地方difang +低估digu +敌国diguo +帝国diguo +敌后dihou +诋毁dihui +低级diji +递加dijia +递减dijian +地窖dijiao +递交dijiao +缔交dijiao +缔结dijie +第九dijiu +敌军dijun +抵抗dikang +地牢dilao +地理dili +低劣dilie +第六diliu +低落diluo +地貌dimao +地面dimian +抵命diming +定ding +顶ding +钉ding +丁ding +订ding +盯ding +叮ding +鼎ding +锭ding +仃ding +啶ding +玎ding +腚ding +碇ding +町ding +铤*ding +疔ding +耵ding +酊ding +定案dingan +定产dingchan +丁当dingdang +顶点dingdian +定夺dingduo +定额dinge +顶峰dingfeng +顶锋dingfeng +定购dinggou +订购dinggou +订户dinghu +定货dinghuo +订货dinghuo +定价dingjia +定局dingju +定居dingju +定理dingli +订立dingli +鼎立dingli +定量dingliang +定律dinglu +定期dingqi +定然dingran +盯梢dingshao +定时dingshi +顶替dingti +定性dingxing +定型dingxing +定义dingyi +定语dingyu +定员dingyuan +订阅dingyue +订正dingzheng +叮嘱dingzhu +顶撞dingzhuang +钉子dingzi +嫡派dipai +地盘dipan +第七diqi +嫡亲diqin +敌情diqing +地球diqiu +地区diqu +的确dique +敌人diren +第三disan +地势dishi +第十dishi +滴水dishui +第四disi +地铁ditie +地图ditu +丢diu +铥diu +丢掉diudiao +丢脸diulian +丢失diushi +地位diwei +敌伪diwei +第五diwu +嫡系dixi +底细dixi +地下dixia +低下dixia +底下dixia +地形dixing +弟兄dixiong +第一diyi +敌意diyi +地域diyu +抵御diyu +缔造dizao +递增dizeng +地震dizhen +敌阵dizhen +地质dizhi +地址dizhi +抵制dizhi +底子dizi +弟子dizi +党纪国法djgf +当机立断djld +多劳多得dldd +大力发展dlfz +大力加强dljq +大力开展dlkz +独立自主dlzz +多面手dms +对内搞活dngh +多年来dnl +东南亚dny +动dong +东dong +冬dong +懂dong +洞dong +冻dong +董dong +栋dong +侗dong +恫dong +垌dong +咚dong +岽dong +峒dong +氡dong +胨dong +胴dong +硐dong +鸫dong +东北dongbei +东边dongbian +东部dongbu +洞察dongcha +动词dongci +动荡dongdang +懂得dongde +东方dongfang +东风dongfeng +动工donggong +东海donghai +恫吓donghe +动机dongji +冬季dongji +东家dongjia +冻结dongjie +动静dongjing +东京dongjing +动力dongli +动量dongliang +栋梁dongliang +动乱dongluan +动脉dongmai +东南dongnan +东欧dongou +动人dongren +动身dongshen +董事dongshi +动手dongshou +动态dongtai +冬天dongtian +动听dongting +动物dongwu +东西dongxi +洞悉dongxi +动向dongxiang +动心dongxin +东亚dongya +东洋dongyang +动摇dongyao +动用dongyong +动员dongyuan +动辄dongzhe +动作dongzuo +斗dou +都*dou +豆dou +读*dou +兜dou +抖dou +陡dou +逗dou +痘dou +蔸dou +窦dou +蚪dou +篼dou +兜风doufeng +逗号douhao +逗留douliu +斗室doushi +兜售doushou +斗争douzheng +斗志douzhi +斗智douzhi +抖嘴douzui +打破常规dpcg +地平线dpx +电器化dqh +待人接物drjw +第三产业dscy +第十二届dsej +大使馆dsg +到时候dsh +电视机dsj +多少年dsn +大失所望dssw +电视台dst +低三下四dsxs +第十一届dsyj +大踏步dtb +到头来dtl +大体上dts +大同小异dtxy +度du +都du +毒du +独du +读du +渡du +杜du +堵du +镀du +顿du +督du +犊du +睹du +赌du +肚du +妒du +芏du +嘟du +渎du +椟du +牍du +蠹du +笃du +髑du +黩du +断duan +端duan +段duan +短duan +锻duan +缎duan +椴duan +煅duan +簖duan +短波duanbo +短处duanchu +短促duancu +断定duanding +短短duanduan +断交duanjiao +断绝duanjue +锻练duanlian +锻炼duanlian +短路duanlu +段落duanluo +短评duanping +短期duanqi +短缺duanque +断然duanran +煅烧duanshao +断送duansong +短途duantu +端午duanwu +端详duanxiang +短小duanxiao +断言duanyan +端阳duanyang +短语duanyu +短暂duanzan +端正duanzheng +端庄duanzhuang +读报dubao +读本duben +赌博dubo +独裁ducai +毒草ducao +独唱duchang +独创duchuang +督促ducu +毒打duda +独到dudao +度过duguo +毒害duhai +毒化duhua +都会duhui +对dui +队dui +堆dui +敦*dui +兑dui +怼dui +憝dui +碓dui +对比duibi +队部duibu +对策duice +对称duichen +对此duici +对待duidai +对等duideng +对调duidiao +对方duifang +对付duifu +对话duihua +兑换duihuan +对讲duijiang +对抗duikang +对口duikou +对垒duilei +对立duili +对联duilian +队列duilie +对流duiliu +对面duimian +对内duinei +对偶duiou +对手duishou +对数duishu +对外duiwai +队伍duiwu +兑现duixian +对象duixiang +对应duiying +对于duiyu +队员duiyuan +堆栈duizhan +队长duizhang +对照duizhao +对证duizheng +对质duizhi +对峙duizhi +对准duizhun +镀金dujin +杜绝dujue +渡口dukou +都来dulai +独立duli +度量duliang +盾dun +吨dun +顿dun +蹲dun +敦dun +墩dun +囤dun +钝dun +遁dun +沌dun +炖dun +砘dun +礅dun +盹dun +镦dun +趸dun +蹲点dundian +顿号dunhao +囤积dunji +遁迹dunji +钝角dunjiao +顿时dunshi +敦实dunshi +多duo +度*duo +夺duo +朵duo +掇duo +哆duo +垛duo +躲duo +跺duo +舵duo +剁duo +惰duo +堕duo +驮*duo +咄duo +哚duo +沲duo +缍duo +柁duo +铎duo +裰duo +踱duo +多半duoban +躲避duobi +多变duobian +多边duobian +躲藏duocang +多次duoci +夺得duode +多端duoduan +多方duofang +躲开duokai +多亏duokui +夺魁duokui +堕落duoluo +多么duome +夺目duomu +多年duonian +多情duoqing +夺取duoqu +多少duoshao +多事duoshi +掇拾duoshi +舵手duoshou +多数duoshu +多谢duoxie +多心duoxin +惰性duoxing +多样duoyang +多余duoyu +多种duozhong +肚皮dupi +毒品dupin +毒气duqi +读取duqu +度日duri +读入duru +堵塞duse +毒蛇dushe +都是dushi +毒手dushou +读数dushu +读书dushu +毒素dusu +独特dute +读物duwu +毒药duyao +独占duzhan +读者duzhe +毒汁duzhi +渎职duzhi +赌注duzhu +杜撰duzhuan +独自duzi +党委会dwh +对外开放dwkf +敌我矛盾dwmd +对外贸易dwmy +大无畏dww +动物园dwy +当务之急dwzj +邓小平dxp +大学生dxs +大显身手dxss +大西洋dxy +大跃进dyj +打印机dyj +大有可为dykw +待业青年dyqn +掉以轻心dyqx +电影院dyy +大洋洲dyz +大有作为dyzw +党支部dzb +多种多样dzdy +党政机关dzjg +多种经营dzjy +断章取义dzqy +大自然dzr +德智体dzt +电子学dzx +党中央dzy +而e +二e +尔e +儿e +恶e +额e +恩e +俄e +耳e +饵e +蛾e +饿e +峨e +鹅e +讹e +娥e +厄e +扼e +遏e +鄂e +噩e +谔e +垩e +苊e +莪e +萼e +呃e +愕e +屙e +婀e +轭e +腭e +锇e +锷e +鹗e +颚e +鳄e +恶霸eba +恶毒edu +恶感egan +恶棍egun +噩耗ehao +恶化ehua +诶ei +二极管ejg +二进制ejz +恶劣elie +鹅毛emao +噩梦emeng +恶魔emo +耳目一新emyx +恩en +蒽en +摁en +恩爱enai +恩赐enci +恩典endian +恩惠enhui +恩情enqing +而er +二er +尔er +儿er +耳er +饵er +洱er +贰er +佴er +迩er +珥er +铒er +鸸er +鲕er +耳朵erduo +儿歌erge +耳光erguang +而后erhou +尔后erhou +二届erjie +而今erjin +而况erkuang +而且erqie +而是ershi +儿童ertong +儿戏erxi +而已eryi +耳语eryu +二月eryue +儿子erzi +扼杀esha +额外ewai +扼腕ewan +额外负担ewfd +恶习exi +恶心exin +恶性exing +恶性循环exxh +扼要eyao +厄运eyun +讹诈ezha +遏止ezhi +分f +发f +方f +法f +反f +放f +复f +风f +防f +非f +服f +肥f +副f +粉f +府f +夫f +负f +封f +富f +翻f +发fa +法fa +阀fa +乏fa +伐fa +罚fa +筏fa +珐fa +垡fa +砝fa +发报fabao +法宝fabao +发表fabiao +发布fabu +发财facai +发愁fachou +发出fachu +发达fada +发电fadian +法典fadian +法定fading +发动fadong +发放fafang +发奋fafen +发愤fafen +法官faguan +法规fagui +法国faguo +发慌fahuang +发挥fahui +发火fahuo +发给faji +发迹faji +法纪faji +发家fajia +发奖fajiang +发酵fajiao +罚金fajin +发觉fajue +发掘fajue +罚款fakuan +发狂fakuang +法郎falang +法令faling +法律falu +发落faluo +发明faming +反fan +翻fan +范fan +犯fan +饭fan +繁fan +泛fan +番fan +凡fan +烦fan +返fan +藩fan +帆fan +樊fan +矾fan +钒fan +贩fan +蕃fan +蘩fan +幡fan +梵fan +燔fan +畈fan +蹯fan +翻版fanban +反比fanbi +反驳fanbo +帆布fanbu +反常fanchang +范畴fanchou +犯愁fanchou +帆船fanchuan +饭店fandian +反动fandong +翻动fandong +反对fandui +繁多fanduo +反而faner +反复fanfu +方fang +放fang +防fang +访fang +房fang +纺fang +仿fang +妨fang +芳fang +肪fang +坊fang +邡fang +彷*fang +枋fang +钫fang +舫fang +鲂fang +妨碍fangai +方案fangan +反感fangan +防备fangbei +方便fangbian +防潮fangchao +方程fangcheng +放大fangda +放荡fangdang +防盗fangdao +方法fangfa +防范fangfan +防风fangfeng +防腐fangfu +仿佛fangfu +妨害fanghai +防护fanghu +防火fanghuo +放假fangjia +房间fangjian +方面fangmian +放牧fangmu +返工fangong +反攻fangong +放屁fangpi +放弃fangqi +防区fangqu +放任fangren +放哨fangshao +放射fangshe +方式fangshi +防守fangshou +放肆fangsi +放松fangsong +仿宋fangsong +翻滚fangun +方位fangwei +防卫fangwei +访问fangwen +房屋fangwu +放下fangxia +防线fangxian +方向fangxiang +芳香fangxiang +仿效fangxiao +放心fangxin +放行fangxing +方言fangyan +防疫fangyi +防御fangyu +仿造fangzao +仿照fangzhao +方针fangzhen +仿真fangzhen +防治fangzhi +仿制fangzhi +放置fangzhi +防止fangzhi +纺织fangzhi +房子fangzi +放纵fangzong +房租fangzu +番号fanhao +繁华fanhua +反悔fanhui +返回fanhui +反击fanji +反抗fankang +反馈fankui +泛滥fanlan +范例fanli +凡例fanli +翻脸fanlian +贩卖fanmai +繁忙fanmang +烦闷fanmen +反面fanmian +反目fanmu +烦恼fannao +反叛fanpan +犯人fanren +繁荣fanrong +反射fanshe +翻身fanshen +繁盛fansheng +凡是fanshi +凡事fanshi +繁琐fansuo +烦琐fansuo +翻腾fanteng +繁体fanti +饭桶fantong +发怒fanu +饭碗fanwan +范围fanwei +反问fanwen +反响fanxiang +返销fanxiao +反省fanxing +翻修fanxiu +繁衍fanyan +翻译fanyi +翻印fanyin +反应fanying +反映fanying +繁育fanyu +翻越fanyue +翻阅fanyue +贩运fanyun +繁杂fanza +烦燥fanzao +反正fanzheng +反之fanzhi +繁殖fanzhi +繁重fanzhong +贩子fanzi +犯罪fanzui +发起faqi +法权faquan +发射fashe +发生fasheng +发誓fashi +发售fashou +法庭fating +发现faxian +发泄faxie +发行faxing +发言fayan +发扬fayang +法医fayi +发育fayu +发源fayuan +法院fayuan +法则faze +发展fazhan +法制fazhi +法治fazhi +发作fazuo +奋不顾身fbgs +分崩离析fblx +副产品fcp +发电机fdj +发动机fdj +反动派fdp +分道扬镳fdyb +非fei +肥fei +飞fei +费fei +废fei +肺fei +沸fei +菲fei +匪fei +啡fei +诽fei +吠fei +芾fei +狒fei +悱fei +淝fei +妃fei +绯fei +榧fei +腓fei +斐fei +扉fei +镄fei +痱fei +蜚fei +篚fei +翡fei +霏fei +鲱fei +匪帮feibang +诽谤feibang +飞奔feiben +非常feichang +飞驰feichi +废除feichu +非但feidan +非得feide +沸点feidian +非法feifa +非凡feifan +肺腑feifu +绯红feihong +废话feihua +飞机feiji +飞溅feijian +费解feijie +费劲feijin +飞快feikuai +费力feili +肥料feiliao +废料feiliao +肥胖feipang +废品feipin +废弃feiqi +费神feishen +废水feishui +飞速feisu +沸腾feiteng +匪徒feitu +肥沃feiwo +废物feiwu +飞舞feiwu +飞翔feixiang +费心feixin +飞行feixing +废墟feixu +飞扬feiyang +扉页feiye +非议feiyi +费用feiyong +飞跃feiyue +肥皂feizao +飞涨feizhang +废止feizhi +非洲feizhou +妃子feizi +分fen +粉fen +奋fen +份fen +粪fen +纷fen +芬fen +愤fen +酚fen +吩fen +氛fen +坟fen +焚fen +汾fen +忿fen +偾fen +瀵fen +玢*fen +棼fen +鲼fen +鼢fen +分贝fenbei +分辩fenbian +分辨fenbian +粪便fenbian +分别fenbie +分部fenbu +分布fenbu +分册fence +分寸fencun +分担fendan +分得fende +分店fendian +奋斗fendou +分队fendui +分发fenfa +奋发fenfa +纷纷fenfen +吩咐fenfu +风feng +封feng +蜂feng +丰feng +缝feng +峰feng +锋feng +疯feng +奉feng +枫feng +烽feng +逢feng +冯feng +讽feng +凤feng +俸feng +酆feng +葑feng +唪feng +沣feng +砜feng +风暴fengbao +丰碑fengbei +封闭fengbi +风波fengbo +丰产fengchan +奉承fengcheng +讽刺fengci +封存fengcun +风度fengdu +分割fenge +分隔fenge +风发fengfa +风帆fengfan +丰富fengfu +奉告fenggao +风格fengge +奉公fenggong +风光fengguang +风寒fenghan +奉还fenghuan +凤凰fenghuang +烽火fenghuo +封建fengjian +风景fengjing +疯狂fengkuang +风浪fenglang +风力fengli +风流fengliu +丰满fengman +锋芒fengmang +风貌fengmao +奉命fengming +丰年fengnian +分工fengong +奉陪fengpei +风气fengqi +风情fengqing +风趣fengqu +奉劝fengquan +缝纫fengren +风骚fengsao +风沙fengsha +风尚fengshang +风声fengsheng +丰盛fengsheng +丰收fengshou +风霜fengshuang +风水fengshui +丰硕fengshuo +奉祀fengsi +风俗fengsu +封锁fengsuo +疯瘫fengtan +封条fengtiao +风头fengtou +分管fenguan +风味fengwei +缝隙fengxi +风险fengxian +奉献fengxian +风向fengxiang +风行fengxing +奉行fengxing +蜂拥fengyong +风云fengyun +风韵fengyun +风灾fengzai +疯子fengzi +风姿fengzi +分号fenhao +分毫fenhao +分红fenhong +粉红fenhong +分化fenhua +分会fenhui +焚毁fenhui +分级fenji +分解fenjie +分界fenjie +奋进fenjin +分居fenju +分开fenkai +愤慨fenkai +分类fenlei +分离fenli +奋力fenli +分量fenliang +分裂fenlie +纷乱fenluan +分娩fenmian +分秒fenmiao +分明fenming +粉末fenmo +坟墓fenmu +愤怒fennu +分派fenpai +分配fenpei +分批fenpi +分期fenqi +分歧fenqi +奋起fenqi +分清fenqing +分区fenqu +分散fensan +焚烧fenshao +分数fenshu +分说fenshuo +粉碎fensui +分摊fentan +粪土fentu +分外fenwai +氛围fenwei +分析fenxi +奋勇fenyong +分赃fenzang +奋战fenzhan +分支fenzhi +分子fenzi +分组fenzu +丰富多采ffdc +奋发图强fftq +反过来说fgls +反革命fgm +福建省fjs +封建主义fjzy +翻来覆去flfq +法律顾问flgw +分秒必争fmbz +发明创造fmcz +否fou +缶fou +否定fouding +否决foujue +否认fouren +否则fouze +费品率fpl +废寝忘食fqws +缝纫机frj +分水岭fsl +翻天复地ftfd +丰台区ftq +非同小可ftxk +繁体字ftz +复fu +服fu +副fu +府fu +夫fu +负fu +富fu +附fu +福fu +伏fu +符fu +幅fu +腐fu +浮fu +辅fu +付fu +腹fu +妇fu +孵fu +覆fu +扶fu +辐fu +傅fu +佛fu +缚fu +父fu +弗fu +甫fu +肤fu +氟fu +敷fu +拂fu +俘fu +涪fu +袱fu +抚fu +俯fu +釜fu +斧fu +脯fu +腑fu +赴fu +赋fu +阜fu +讣fu +咐fu +匐fu +凫fu +郛fu +芙fu +芾*fu +苻fu +茯fu +莩fu +菔fu +拊fu +呋fu +幞fu +怫fu +滏fu +艴fu +孚fu +驸fu +绂fu +绋fu +桴fu +赙fu +祓fu +砩fu +黻fu +黼fu +罘fu +稃fu +馥fu +蚨fu +蜉fu +蝠fu +蝮fu +麸fu +趺fu +跗fu +鲋fu +鳆fu +腐败fubai +复辟fubi +复查fucha +浮沉fuchen +扶持fuchi +付出fuchu +副词fuci +服从fucong +附带fudai +负担fudan +辅导fudao +浮雕fudiao +浮动fudong +幅度fudu +复发fufa +伏法fufa +夫妇fufu +覆盖fugai +讣告fugao +富贵fugui +符号fuhao +附和fuhe +符合fuhe +负荷fuhe +腐化fuhua +浮华fuhua +复活fuhuo +俘获fuhuo +伏击fuji +附加fujia +附件fujian +福建fujian +佛教fujiao +附近fujin +副刊fukan +俯瞰fukan +浮夸fukua +付款fukuan +腐烂fulan +福利fuli +浮力fuli +富丽fuli +妇联fulian +附录fulu +俘虏fulu +覆灭fumie +覆没fumo +父母fumu +富农funong +妇女funu +扶贫fupin +服气fuqi +福气fuqi +夫妻fuqi +付讫fuqi +肤浅fuqian +富强fuqiang +父亲fuqin +富饶furao +夫人furen +芙蓉furong +妇孺furu +负伤fushang +辐射fushe +复试fushi +腐蚀fushi +俯视fushi +副手fushou +复数fushu +负数fushu +附属fushu +富庶fushu +赋税fushui +伏特fute +覆亡fuwang +富翁fuweng +服务fuwu +复习fuxi +浮现fuxian +赋闲fuxian +浮想fuxiang +腐朽fuxiu +抚恤fuxu +敷衍fuyan +扶养fuyang +抚养fuyang +俯仰fuyang +副业fuye +服役fuyi +复印fuyin +富有fuyou +赋有fuyou +赋于fuyu +抚育fuyu +富裕fuyu +赋予fuyu +复员fuyuan +复原fuyuan +负约fuyue +复杂fuza +负载fuzai +附则fuze +负责fuze +负债fuzhai +付帐fuzhang +复制fuzhi +扶植fuzhi +附中fuzhong +福州fuzhou +抚州fuzhou +附注fuzhu +辅助fuzhu +扶助fuzhu +服装fuzhuang +附着fuzhuo +富足fuzu +辅佐fuzuo +服务部fwb +服务态度fwtd +服务员fwy +方兴未艾fxwa +奋勇当先fydx +翻一番fyf +风言风语fyfy +发扬光大fygd +复印机fyj +发言人fyr +风雨同舟fytz +房租费fzf +副总理fzl +纺织品fzp +福州市fzs +反作用fzy +副作用fzy +负责制fzz +发展中国家fzzj +个g +国g +工g +过g +高g +干g +关g +各g +革g +公g +根g +更g +改g +管g +光g +广g +果g +格g +共g +搞g +夹*ga +噶ga +嘎ga +胳*ga +尬ga +尕ga +尜ga +旮ga +钆ga +公安部gab +改gai +该gai +盖gai +概gai +钙gai +溉gai +芥*gai +丐gai +陔gai +垓gai +戤gai +赅gai +改变gaibian +改编gaibian +该当gaidang +改道gaidao +改动gaidong +改革gaige +改观gaiguan +改过gaiguo +改悔gaihui +改建gaijian +改进gaijin +概况gaikuang +概括gaikuo +改良gailiang +概率gailu +概论gailun +概貌gaimao +概念gainian +改期gaiqi +改善gaishan +概述gaishu +概叹gaitan +改天gaitian +改选gaixuan +概要gaiyao +改造gaizao +改正gaizheng +改装gaizhuang +改组gaizu +公安局gaj +干gan +杆gan +感gan +敢gan +赶gan +甘gan +肝gan +秆gan +柑gan +竿gan +赣gan +乾*gan +坩gan +苷gan +尴gan +擀gan +泔gan +淦gan +澉gan +绀gan +橄gan +旰gan +矸gan +疳gan +酐gan +干部ganbu +感触ganchu +干脆gancui +敢当gandang +甘当gandang +感到gandao +感动gandong +感恩ganen +刚gang +钢gang +缸gang +纲gang +岗gang +港gang +杠gang +冈gang +肛gang +扛*gang +戆gang +罡gang +筻gang +尴尬ganga +港澳gangao +刚才gangcai +钢材gangcai +刚刚ganggang +刚好ganghao +港口gangkou +纲领gangling +岗哨gangshao +钢铁gangtie +港湾gangwan +岗位gangwei +港务gangwu +刚要gangyao +纲要gangyao +刚毅gangyi +干旱ganhan +感化ganhua +干活ganhuo +肝火ganhuo +感激ganji +干劲ganjin +赶紧ganjin +干净ganjing +感觉ganjue +感慨gankai +甘苦ganku +赶快gankuai +赶忙ganmang +感冒ganmao +感情ganqing +感染ganran +干扰ganrao +干涉ganshe +干事ganshi +感受ganshou +甘肃gansu +感叹gantan +干线ganxian +感想ganxiang +敢想ganxiang +感谢ganxie +甘心ganxin +感性ganxing +感应ganying +敢于ganyu +干预ganyu +甘愿ganyuan +干燥ganzao +感召ganzhao +赣州ganzhou +敢做ganzuo +高gao +搞gao +告gao +稿gao +膏gao +篙gao +皋gao +羔gao +糕gao +镐gao +睾gao +诰gao +郜gao +藁gao +缟gao +槔gao +槁gao +杲gao +锆gao +高矮gaoai +高昂gaoang +告别gaobie +高产gaochan +高超gaochao +高潮gaochao +告成gaocheng +告辞gaoci +高大gaoda +高档gaodang +高等gaodeng +高地gaodi +高低gaodi +糕点gaodian +高度gaodu +告发gaofa +高峰gaofeng +高高gaogao +高歌gaoge +高贵gaogui +高喊gaohan +搞好gaohao +高呼gaohu +搞坏gaohuai +高级gaoji +告急gaoji +高价gaojia +高见gaojian +稿件gaojian +告捷gaojie +告诫gaojie +高龄gaoling +高楼gaolou +告密gaomi +高明gaoming +高能gaoneng +高攀gaopan +高频gaopin +高强gaoqiang +高山gaoshan +高尚gaoshang +高深gaoshen +告示gaoshi +高耸gaosong +高速gaosu +告诉gaosu +高温gaowen +高小gaoxiao +高校gaoxiao +高兴gaoxing +膏药gaoyao +高原gaoyuan +高涨gaozhang +高招gaozhao +高中gaozhong +告终gaozhong +告状gaozhuang +稿子gaozi +港澳同胞gatb +怪不得gbd +各部门gbm +各部委gbw +供不应求gbyq +故步自封gbzf +共产党gcd +共产党员gcdy +工程师gcs +顾此失彼gcsb +贯彻执行gczx +共产主义gczy +各地方gdf +各大军区gdjq +广东省gds +高档商品gdsp +各单位gdw +高等院校gdyx +固定资产gdzc +个ge +各ge +革ge +合*ge +格ge +割ge +歌ge +隔ge +盖*ge +哥ge +铬ge +阁ge +戈ge +葛ge +搁ge +鸽ge +胳ge +疙ge +蛤ge +咯*ge +屹*ge +鬲ge +仡ge +哿ge +圪ge +塥ge +嗝ge +纥*ge +搿ge +膈ge +硌ge +镉ge +袼ge +颌*ge +虼ge +舸ge +骼ge +隔壁gebi +戈壁gebi +个别gebie +歌唱gechang +各处gechu +革除gechu +疙瘩geda +各地gedi +格调gediao +隔断geduan +个个gege +各个gege +各国geguo +隔阂gehe +歌喉gehou +各级geji +各界gejie +格局geju +割据geju +隔绝gejue +各类gelei +隔离geli +割裂gelie +格律gelu +革命geming +隔膜gemo +给gei +根gen +跟gen +亘gen +茛gen +哏gen +艮gen +根本genben +根除genchu +根底gendi +更geng +耕geng +颈geng +庚geng +羹geng +埂geng +耿geng +梗geng +哽geng +赓geng +绠geng +鲠geng +耕地gengdi +更迭gengdie +更动gengdong +更多gengduo +更改genggai +梗概genggai +更高genggao +更换genghuan +更加gengjia +更为gengwei +颈项gengxiang +更新gengxin +哽咽gengyan +耕耘gengyun +更正gengzheng +耿直gengzhi +梗直gengzhi +耕种gengzhong +梗阻gengzu +耕作gengzuo +根基genji +根据genju +跟前genqian +跟随gensui +根源genyuan +根治genzhi +跟着genzhuo +根子genzi +跟踪genzong +搁浅geqian +歌曲gequ +个人geren +格式geshi +歌颂gesong +个体geti +格外gewai +各位gewei +歌舞gewu +阁下gexia +各项gexiang +革新gexin +个性gexing +格言geyan +各样geyang +歌咏geyong +搁置gezhi +各种gezhong +各族gezu +国防部gfb +各方面gfm +格格不入ggbr +归根到底ggdd +恭恭敬敬ggjj +滚瓜烂熟ggls +歌功颂德ggsd +共和国ghg +各行各业ghgy +干劲冲天gjct +各级党委gjdw +各级领导gjld +国家利益gjly +国计民生gjms +工具书gjs +各尽所能gjsn +国库券gkq +工矿企业gkqy +孤陋寡闻glgw +规律性glx +国民党gmd +革命化gmh +革命家gmj +国民经济gmjj +购买力gml +光明磊落gmll +光明日报gmrb +顾名思义gmsy +冠冕堂皇gmth +刮目相看gmxk +光明正大gmzd +工农兵gnb +国内外gnw +工农业gny +工gong +公gong +共gong +供gong +功gong +攻gong +红*gong +巩gong +贡gong +汞gong +宫gong +恭gong +龚gong +躬gong +弓gong +拱gong +珙gong +肱gong +蚣gong +觥gong +公安gongan +公报gongbao +工本gongben +公布gongbu +公差gongcha +公拆gongchai +工厂gongchang +功臣gongchen +工程gongcheng +共处gongchu +供词gongci +共存gongcun +公道gongdao +公德gongde +功德gongde +工地gongdi +公敌gongdi +宫殿gongdian +攻读gongdu +公费gongfei +公愤gongfen +工夫gongfu +功夫gongfu +公告gonggao +公共gonggong +巩固gonggu +公关gongguan +公害gonghai +公函gonghan +共和gonghe +工会gonghui +供给gongji +共计gongji +攻击gongji +功绩gongji +公家gongjia +公斤gongjin +恭敬gongjing +工具gongju +公开gongkai +功课gongke +公款gongkuan +功劳gonglao +公理gongli +公里gongli +公历gongli +公路gonglu +功率gonglu +公民gongmin +共鸣gongming +公墓gongmu +功能gongneng +工农gongnong +公判gongpan +公平gongping +公仆gongpu +供求gongqiu +工区gongqu +公然gongran +工人gongren +公认gongren +供认gongren +工伤gongshang +公社gongshe +公审gongshen +工时gongshi +公事gongshi +共事gongshi +公式gongshi +公署gongshu +公司gongsi +公私gongsi +公诉gongsu +宫廷gongting +共同gongtong +恭维gongwei +公文gongwen +公物gongwu +公务gongwu +恭喜gongxi +贡献gongxian +工效gongxiao +功效gongxiao +供销gongxiao +共性gongxing +工序gongxu +共需gongxu +功勋gongxun +供养gongyang +工业gongye +工艺gongyi +供应gongying +公用gongyong +共有gongyou +公元gongyuan +公园gongyuan +公约gongyue +公允gongyun +公债gongzhai +公章gongzhang +共振gongzhen +工整gongzheng +公正gongzheng +公证gongzheng +供职gongzhi +公众gongzhong +工资gongzi +工作gongzuo +够gou +构gou +沟gou +句*gou +狗gou +钩gou +勾gou +购gou +苟gou +垢gou +佝gou +诟gou +岣gou +遘gou +媾gou +缑gou +枸gou +觏gou +彀gou +笱gou +篝gou +鞲gou +构成goucheng +勾搭gouda +勾当goudang +媾和gouhe +沟壑gouhe +构件goujian +勾结goujie +购买goumai +苟且gouqie +构思gousi +沟通goutong +勾通goutong +构陷gouxian +勾销gouxiao +购销gouxiao +勾引gouyin +构造gouzao +购置gouzhi +钩子gouzi +国庆节gqj +共青团gqt +光荣榜grb +根深蒂固gsdg +瓜熟蒂落gsdl +公使馆gsg +各式各样gsgy +甘肃省gss +工商业gsy +个体户gth +改头换面gthm +高谈阔论gtkl +鼓gu +固gu +古gu +骨gu +故gu +顾gu +股gu +谷gu +估gu +雇gu +孤gu +姑gu +贾*gu +辜gu +菇gu +咕gu +箍gu +沽gu +蛊gu +嘏gu +诂gu +菰gu +呱gu +崮gu +汩gu +梏gu +轱gu +牯gu +牿gu +臌gu +毂gu +瞽gu +罟gu +钴gu +锢gu +鸪gu +鹄*gu +痼gu +蛄gu +酤gu +觚gu +鲴gu +鹘gu +挂gua +刮gua +瓜gua +括*gua +剐gua +寡gua +褂gua +卦gua +诖gua +呱gua +栝gua +胍gua +鸹gua +瓜分guafen +瓜葛guage +挂号guahao +怪guai +乖guai +拐guai +乖舛guaichuan +乖戾guaili +乖僻guaipi +乖巧guaiqiao +怪物guaiwu +怪异guaiyi +拐杖guaizhang +挂名guaming +关guan +管guan +观guan +官guan +灌guan +贯guan +惯guan +冠guan +馆guan +罐guan +棺guan +纶*guan +倌guan +莞guan +掼guan +涫guan +盥guan +鹳guan +矜guan +鳏guan +关闭guanbi +观测guance +观察guancha +贯彻guanche +贯穿guanchuan +管道guandao +官邸guandi +观点guandian +官方guanfang +光guang +广guang +逛guang +咣guang +犷guang +桄guang +胱guang +灌溉guangai +光标guangbiao +广播guangbo +广博guangbo +光彩guangcai +广场guangchang +光大guangda +广大guangda +广东guangdong +广度guangdu +广泛guangfan +广告guanggao +光顾guanggu +光滑guanghua +光辉guanghui +光景guangjing +广阔guangkuo +光芒guangmang +广袤guangmao +光明guangming +光盘guangpan +光谱guangpu +光荣guangrong +观光guanguang +广西guangxi +光线guangxian +广义guangyi +光阴guangyin +光涌guangyong +广州guangzhou +关怀guanhuai +挂念guanian +管家guanjia +关键guanjian +管教guanjiao +关节guanjie +冠军guanjun +关卡guanka +观看guankan +关口guankou +管理guanli +贯例guanli +惯例guanli +官吏guanli +关联guanlian +官僚guanliao +观摩guanmo +灌木guanmu +官能guanneng +观念guannian +关切guanqie +观赏guanshang +管事guanshi +管束guanshu +灌输guanshu +关税guanshui +官司guansi +贯通guantong +关头guantou +观望guanwang +关系guanxi +管辖guanxia +官衔guanxian +关心guanxin +惯性guanxing +关押guanya +惯用guanyong +关于guanyu +官员guanyuan +观战guanzhan +关照guanzhao +管制guanzhi +观止guanzhi +观众guanzhong +关注guanzhu +贯注guanzhu +馆子guanzi +挂失guashi +挂帅guashuai +鼓吹guchui +故此guci +古代gudai +孤单gudan +故地gudi +古典gudian +固定guding +鼓动gudong +股东gudong +古董gudong +孤独gudu +咕嘟gudu +孤儿guer +股份gufen +辜负gufu +骨干gugan +雇工gugong +故宫gugong +古怪guguai +蛊惑guhuo +规gui +贵gui +归gui +硅gui +鬼gui +轨gui +龟gui +桂gui +瑰gui +圭gui +闺gui +诡gui +癸gui +柜gui +跪gui +刽gui +傀*gui +炔*gui +匦gui +刿gui +庋gui +宄gui +妫gui +桧gui +炅gui +晷gui +皈gui +簋gui +鲑gui +鳜gui +诡辩guibian +贵宾guibin +归并guibing +规程guicheng +归档guidang +轨道guidao +规定guiding +归队guidui +规范guifan +规格guige +归公guigong +归功guigong +桂冠guiguan +归国guiguo +规划guihua +鬼话guihua +归还guihuan +诡计guiji +轨迹guiji +贵贱guijian +归咎guijiu +规矩guiju +瑰丽guili +鬼脸guilian +龟裂guilie +规律guilu +诡秘guimi +规模guimo +归纳guina +闺女guinu +规劝guiquan +贵人guiren +归属guishu +龟缩guisuo +柜台guitai +闺秀guixiu +归于guiyu +规则guize +规章guizhang +贵重guizhong +贵州guizhou +鬼子guizi +贵族guizu +归罪guizui +顾及guji +估计guji +古迹guji +顾忌guji +估价gujia +古今gujin +古旧gujiu +故旧gujiu +故居guju +顾客guke +孤苦guku +古老gulao +孤立guli +鼓励guli +估量guliang +顾虑gulu +估摸gumo +滚gun +辊gun +棍gun +衮gun +绲gun +磙gun +鲧gun +滚动gundong +姑娘guniang +雇农gunong +滚烫guntang +棍子gunzi +国guo +过guo +果guo +锅guo +郭guo +涡*guo +裹guo +馘guo +埚guo +掴guo +呙guo +帼guo +崞guo +猓guo +椁guo +虢guo +聒guo +蜾guo +蝈guo +过半guoban +国策guoce +国产guochan +过程guocheng +过错guocuo +过度guodu +过渡guodu +果断guoduan +国法guofa +国防guofang +过分guofen +果腹guofu +果敢guogan +国歌guoge +过关guoguan +过后guohou +国会guohui +国际guoji +国籍guoji +国家guojia +国界guojie +国境guojing +国库guoku +过来guolai +过量guoliang +过虑guolu +锅炉guolu +国民guomin +过目guomu +果木guomu +国难guonan +国内guonei +果皮guopi +果品guopin +国旗guoqi +过期guoqi +国情guoqing +国庆guoqing +过去guoqu +果然guoran +过少guoshao +过甚guoshen +过剩guosheng +过时guoshi +国事guoshi +过失guoshi +果实guoshi +过头guotou +国外guowai +国王guowang +过问guowen +国务guowu +过细guoxi +国药guoyao +国营guoying +过硬guoying +过于guoyu +果园guoyuan +果真guozhen +锅子guozi +顾盼gupan +孤僻gupi +股票gupiao +骨气guqi +姑且guqie +顾全guquan +固然guran +古人guren +骨肉gurou +故事gushi +股市gushi +固守gushou +估算gusuan +固体guti +骨头gutou +故土gutu +顾问guwen +古文guwen +谷物guwu +鼓舞guwu +姑息guxi +故乡guxiang +故意guyi +雇佣guyong +固有guyou +雇员guyuan +鼓掌guzhang +故障guzhang +固执guzhi +拐弯抹角gwmj +国务委员gwwy +国务院gwy +改邪归正gxgz +更新换代gxhd +各行其事gxqs +感性认识gxrs +广西壮族gxzz +工业化gyh +工艺流程gylc +工艺美术gyms +工业品gyp +工艺品gyp +贵阳市gys +公有制gyz +各种各样gzgy +工资级别gzjb +各族人民gzrm +工作上gzs +广州市gzs +贵州省gzs +各自为政gzwz +高瞻远瞩gzyz +高瞻远嘱gzyz +工作者gzz +和h +会h +后h +化h +好h +合h +还h +活h +很h +回h +号h +毫h +花h +或h +海h +话h +红h +火h +黄h +害h +哈ha +蛤*ha +虾*ha +铪ha +哈达hada +还hai +海hai +害hai +孩hai +骸hai +氦hai +亥hai +骇hai +嘿*hai +咳*hai +嗨hai +胲hai +醢hai +海岸haian +海拔haiba +海报haibao +害虫haichong +害处haichu +海岛haidao +海港haigang +海关haiguan +还好haihao +海疆haijiang +海军haijun +海浪hailang +海绵haimian +害怕haipa +海上haishang +还是haishi +海外haiwai +海湾haiwan +海峡haixia +海啸haixiao +害羞haixiu +海洋haiyang +还要haiyao +还有haiyou +海域haiyu +海员haiyuan +孩子haizi +含han +焊han +旱han +喊han +汉han +寒han +汗han +函han +韩han +酣han +憨han +邯han +涵han +罕han +翰han +撼han +捍han +憾han +悍han +邗han +菡han +撖han +阚han +瀚han +晗han +焓han +顸han +颔han +蚶han +鼾han +寒潮hanchao +寒带handai +行*hang +航hang +夯hang +杭hang +吭*hang +巷*hang +沆hang +绗hang +珩hang +颃hang +航标hangbiao +航程hangcheng +航船hangchuan +行当hangdang +航道hangdao +航海hanghai +行家hangjia +行距hangju +航空hangkong +行列hanglie +航路hanglu +航模hangmo +函购hangou +行情hangqing +航天hangtian +航线hangxian +航向hangxiang +航行hangxing +航运hangyun +杭州hangzhou +含糊hanhu +含混hanhun +旱季hanji +函件hanjian +罕见hanjian +汉奸hanjian +喊叫hanjiao +焊接hanjie +寒冷hanleng +翰林hanlin +寒流hanliu +函授hanshou +函数hanshu +酣睡hanshui +寒酸hansuan +捍卫hanwei +含蓄hanxu +寒暄hanxuan +涵养hanyang +含义hanyi +涵义hanyi +汉语hanyu +含冤hanyuan +旱灾hanzai +汉字hanzi +汉族hanzu +好hao +号hao +毫hao +耗hao +豪hao +郝hao +浩hao +镐*hao +壕hao +嚎hao +貉*hao +蒿hao +薅hao +嗥hao +嚆hao +濠hao +灏hao +昊hao +皓hao +颢hao +蚝hao +好比haobi +毫不haobu +号称haocheng +好处haochu +浩大haoda +好歹haodai +浩荡haodang +好的haode +浩繁haofan +耗费haofei +好感haogan +好汉haohan +豪华haohua +好坏haohuai +号角haojiao +耗竭haojie +豪杰haojie +浩劫haojie +好看haokan +毫厘haoli +号令haoling +号码haoma +豪迈haomai +毫毛haomao +毫米haomi +浩淼haomiao +好奇haoqi +豪强haoqiang +豪情haoqing +好人haoren +豪绅haoshen +毫升haosheng +好事haoshi +豪爽haoshuang +好似haosi +耗损haosun +号啕haotao +好听haoting +好玩haowan +毫无haowu +好象haoxiang +好些haoxie +好样haoyang +好意haoyi +号召haozhao +好转haozhuan +汇编程序hbcx +货币回笼hbhl +货币流通hblt +河北省hbs +湖北省hbs +汇编语言hbyy +或多或少hdhs +海淀区hdq +和he +合he +河he +何he +核he +赫he +荷he +褐he +喝he +贺he +呵he +禾he +吓*he +盒he +菏he +貉he +阂he +涸he +鹤he +诃he +劾he +壑he +嗬he +阖he +纥he +曷he +盍he +颌he +蚵he +翮he +和蔼heai +哈尔滨heb +合办heban +荷包hebao +河北hebei +何必hebi +合并hebing +哈尔滨市hebs +何不hebu +喝彩hecai +合唱hechang +何尝hechang +合成hecheng +呵斥hechi +何处hechu +河川hechuan +河床hechuang +贺词heci +何等hedeng +贺电hedian +核定heding +核对hedui +合法hefa +何妨hefang +合肥hefei +合格hege +和好hehao +赫赫hehe +合乎hehu +合伙hehuo +黑hei +嘿hei +黑暗heian +黑白heibai +黑帮heibang +嘿嘿heihei +黑人heiren +黑色heise +黑市heishi +黑夜heiye +合计heji +核计heji +和解hejie +合金hejin +何苦heku +何况hekuang +合理heli +合力heli +合流heliu +河流heliu +合谋hemou +和睦hemu +很hen +狠hen +痕hen +恨hen +河南henan +狠毒hendu +很多henduo +河内henei +行*heng +横heng +衡heng +恒heng +哼heng +亨heng +蘅heng +珩*heng +桁heng +横财hengcai +哼哧hengchi +横幅hengfu +横亘henggen +横贯hengguan +横祸henghuo +横加hengjia +衡量hengliang +横蛮hengman +横批hengpi +衡器hengqi +横扫hengsao +横竖hengshu +恒心hengxin +横行hengxing +恒星hengxing +很好henhao +贺年henian +痕迹henji +很快henkuai +狠心henxin +狠抓henzhua +和平heping +和气heqi +河渠hequ +赫然heran +河山heshan +和尚heshang +合适heshi +核实heshi +合算hesuan +核算hesuan +河滩hetan +合同hetong +贺喜hexi +和谐hexie +核心hexin +贺信hexin +和煦hexu +何以heyi +合影heying +合营heying +核准hezhun +合资hezi +赫兹hezi +合作hezuo +合法权益hfqy +合肥市hfs +宏观世界hgsj +化公为私hgws +好高务远hgwy +核工业部hgyb +海关总署hgzs +后顾之忧hgzy +呼和浩特hhht +轰轰烈烈hhll +换句话说hjhs +黄金时代hjsd +环境卫生hjws +后继有人hjyr +海枯石烂hksl +合理化hlh +糊里糊涂hlht +黑龙江hlj +汗流浃背hljb +汗马功劳hmgl +海南岛hnd +河南省hns +湖南省hns +红hong +洪hong +轰hong +烘hong +哄hong +虹hong +鸿hong +宏hong +弘hong +黉hong +訇hong +讧hong +荭hong +蕻hong +薨hong +闳hong +泓hong +红尘hongchen +轰动hongdong +洪都hongdu +洪峰hongfeng +鸿沟honggou +宏观hongguan +红光hongguang +红花honghua +红军hongjun +红利hongli +洪亮hongliang +轰隆honglong +弘论honglun +鸿毛hongmao +轰鸣hongming +哄骗hongpian +红旗hongqi +红人hongren +红色hongse +洪水hongshui +哄抬hongtai +宏图hongtu +宏伟hongwei +红星hongxing +弘扬hongyang +鸿运hongyun +红晕hongyun +轰炸hongzha +后hou +候hou +厚hou +侯hou +喉hou +猴hou +吼hou +堠hou +後hou +逅hou +瘊hou +篌hou +糇hou +鲎hou +骺hou +后备houbei +后辈houbei +后边houbian +厚薄houbo +候补houbu +后尘houchen +后代houdai +厚道houdao +厚度houdu +后盾houdun +后方houfang +后果houguo +后患houhuan +后悔houhui +后记houji +后进houjin +后劲houjin +后来houlai +喉咙houlong +后门houmen +后面houmian +后期houqi +后勤houqin +后人houren +喉舌houshe +厚实houshi +后嗣housi +后台houtai +后天houtian +后退houtui +后续houxu +候选houxuan +后裔houyi +后缀houzhui +和平共处hpgc +黄埔江hpj +后勤部hqb +何去何从hqhc +合情合理hqhl +好容易hry +好事多磨hsdm +胡思乱想hslx +航天工业部htgb +昏头昏脑hthn +欢天喜地htxd +和*hu +护hu +互hu +湖hu +呼hu +户hu +弧hu +乎hu +胡hu +糊hu +虎hu +忽hu +核*hu +瑚hu +戏*hu +壶hu +葫hu +蝴hu +狐hu +唬hu +沪hu +冱hu +唿hu +囫hu +岵hu +猢hu +怙hu +惚hu +浒hu +滹hu +琥hu +槲hu +轷hu +觳hu +烀hu +煳hu +戽hu +扈hu +祜hu +瓠hu +鹄hu +鹕hu +鹱hu +笏hu +醐hu +斛hu +化hua +花hua +话hua +划hua +滑hua +华hua +画hua +哗hua +猾hua +豁*hua +骅hua +桦hua +砉hua +铧hua +画报huabao +华北huabei +哗变huabian +话柄huabing +划拨huabo +划策huace +画册huace +华东huadong +花朵huaduo +花儿huaer +化肥huafei +花费huafei +划分huafen +化工huagong +华贵huagui +化合huahe +花卉huahui +坏huai +怀huai +划*huai +淮huai +槐huai +徊huai +踝huai +怀抱huaibao +淮北huaibei +坏处huaichu +怀古huaigu +淮海huaihai +怀恨huaihen +怀旧huaijiu +淮南huainan +怀念huainian +坏人huairen +坏事huaishi +怀疑huaiyi +怀着huaizhe +滑稽huaji +画家huajia +话剧huaju +哗啦huala +画廊hualang +华丽huali +画面huamian +化名huaming +还*huan +环huan +换huan +欢huan +缓huan +患huan +幻huan +焕huan +桓huan +唤huan +痪huan +豢huan +涣huan +宦huan +郇huan +奂huan +萑huan +擐huan +圜huan +獾huan +洹huan +浣huan +漶huan +寰huan +逭huan +缳huan +锾huan +鲩huan +鬟huan +华南huanan +欢畅huanchang +缓冲huanchong +幻灯huandeng +欢度huandu +焕发huanfa +黄huang +簧huang +荒huang +皇huang +慌huang +蝗huang +磺huang +凰huang +惶huang +煌huang +晃huang +幌huang +恍huang +谎huang +隍huang +徨huang +湟huang +潢huang +遑huang +璜huang +肓huang +癀huang +蟥huang +篁huang +鳇huang +磺胺huangan +皇朝huangchao +荒诞huangdan +晃荡huangdang +皇帝huangdi +荒废huangfei +黄海huanghai +黄河huanghe +恍惚huanghu +谎话huanghua +黄昏huanghun +黄金huangjin +皇历huangli +荒凉huangliang +荒乱huangluan +慌乱huangluan +慌忙huangmang +荒谬huangmiu +恍然huangran +黄色huangse +黄山huangshan +皇上huangshang +荒唐huangtang +环顾huangu +宦官huanguan +谎言huangyan +慌张huangzhang +幌子huangzi +缓和huanhe +欢呼huanhu +环环huanhuan +滑腻huani +花鸟huaniao +还给huanji +缓急huanji +还价huanjia +环节huanjie +环境huanjing +幻境huanjing +幻景huanjing +欢聚huanju +幻觉huanjue +欢乐huanle +缓慢huanman +患难huannan +唤起huanqi +缓期huanqi +欢庆huanqing +环球huanqiu +寰球huanqiu +换取huanqu +环绕huanrao +涣散huansan +欢声huansheng +环视huanshi +欢送huansong +换算huansuan +欢腾huanteng +欢喜huanxi +幻想huanxiang +欢笑huanxiao +欢心huanxin +欢欣huanxin +环行huanxing +缓刑huanxing +唤醒huanxing +幻影huanying +欢迎huanying +寰宇huanyu +还原huanyuan +患者huanzhe +滑坡huapo +花腔huaqiang +华侨huaqiao +划清huaqing +花圈huaquan +划拳huaquan +哗然huaran +华人huaren +花色huase +化身huashen +化石huashi +划算huasuan +话题huati +滑头huatou +花纹huawen +华夏huaxia +化纤huaxian +画像huaxiang +花絮huaxu +化学huaxue +画押huaya +化验huayan +花样huayang +华裔huayi +话音huayin +话语huayu +花园huayuan +画展huazhan +花招huazhao +华中huazhong +化装huazhuang +化妆huazhuang +湖北hubei +胡扯huche +弧度hudu +忽而huer +呼喊huhan +呼号huhao +呼唤huhuan +互惠huhui +会hui +回hui +灰hui +挥hui +辉hui +汇hui +毁hui +慧hui +恢hui +绘hui +惠hui +徽hui +溃*hui +堕*hui +徊*hui +蛔hui +悔hui +卉hui +晦hui +贿hui +秽hui +烩hui +讳hui +诲hui +诙hui +茴hui +荟hui +蕙hui +咴hui +哕hui +喙hui +隳hui +洄hui +浍hui +彗hui +缋hui +珲hui +桧*hui +晖hui +恚hui +虺hui +蟪hui +麾hui +灰暗huian +回报huibao +汇报huibao +回避huibi +汇编huibian +会场huichang +回潮huichao +灰尘huichen +回春huichun +荟萃huicui +回答huida +回荡huidang +回电huidian +汇兑huidui +挥发huifa +汇费huifei +会风huifeng +回复huifu +恢复huifu +悔改huigai +回顾huigu +惠顾huigu +悔过huiguo +会合huihe +回合huihe +汇合huihe +悔恨huihen +恢弘huihong +会话huihua +回话huihua +绘画huihua +毁坏huihuai +辉煌huihuang +挥霍huihuo +会集huiji +回击huiji +汇集huiji +回家huijia +会见huijian +会聚huiju +汇聚huiju +回扣huikou +汇款huikuan +回来huilai +回笼huilong +汇率huilu +贿赂huilu +会面huimian +毁灭huimie +回民huimin +汇票huipiao +回去huiqu +挥洒huisa +灰色huise +晦涩huise +回收huishou +回首huishou +会谈huitan +会堂huitang +会同huitong +回头huitou +回味huiwei +会晤huiwu +挥舞huiwu +悔悟huiwu +麾下huixia +回想huixiang +回响huixiang +诙谐huixie +灰心huixin +彗星huixing +会演huiyan +汇演huiyan +会议huiyi +回忆huiyi +回音huiyin +辉映huiying +会员huiyuan +会战huizhan +徽章huizhang +会诊huizhen +绘制huizhi +回转huizhuan +汇总huizong +回族huizu +户籍huji +呼叫hujiao +户口hukou +虎口hukou +护理huli +互利huli +护林hulin +呼噜hulu +胡乱huluan +忽略hulue +互勉humian +混hun +浑hun +荤hun +昏hun +婚hun +魂hun +诨hun +馄hun +阍hun +溷hun +湖南hunan +胡闹hunao +昏沉hunchen +混合hunhe +浑厚hunhou +昏黄hunhuang +混迹hunji +婚礼hunli +混乱hunluan +糊弄hunong +婚配hunpei +混入hunru +浑身hunshen +混同huntong +混淆hunxiao +婚姻hunyin +昏庸hunyong +混杂hunza +混帐hunzhang +混浊hunzhuo +浑浊hunzhuo +和*huo +活huo +或huo +火huo +货huo +获huo +伙huo +霍huo +豁huo +惑huo +祸huo +劐huo +藿huo +攉huo +嚯huo +夥huo +钬huo +锪huo +镬huo +耠huo +蠖huo +火把huoba +伙伴huoban +火暴huobao +货币huobi +火柴huochai +火车huoche +豁达huoda +获得huode +霍地huodi +活动huodong +伙房huofang +祸根huogen +祸害huohai +火候huohou +火化huohua +火花huohua +祸患huohuan +活活huohuo +伙计huoji +火箭huojian +火警huojing +火炬huoju +火坑huokeng +活力huoli +霍乱huoluan +活泼huopo +获取huoqu +豁然huoran +货色huose +火山huoshan +获胜huosheng +或是huoshi +伙食huoshi +祸首huoshou +伙同huotong +货物huowu +获悉huoxi +火线huoxian +活现huoxian +或许huoxu +火药huoyao +活页huoye +活跃huoyue +货运huoyun +火灾huozai +火葬huozang +或则huoze +或者huozhe +获准huozhun +湖泊hupo +忽然huran +呼声husheng +护士hushi +忽视hushi +湖水hushui +胡说hushuo +护送husong +胡同hutong +互通hutong +户头hutou +糊涂hutu +护卫huwei +呼吸huxi +互相huxiang +呼啸huxiao +虎穴huxue +护养huyang +呼应huying +呼吁huyu +护照huzhao +互助huzhu +毫无疑问hwyw +互相爱护hxah +横行霸道hxbd +互相帮助hxbz +欢欣鼓舞hxgw +候选人hxr +合作化hzh +杭州市hzs +化整为零hzwl +级j +就j +进j +加j +经j +家j +结j +阶j +间j +件j +及j +解j +较j +机j +军j +接j +教j +极j +九j +见j +基本国策jbgc +基本上jbs +据不完全统计jbwj +饥不择食jbzs +坚持不懈jcbx +集成电路jcdl +基础上jcs +绝大部分jdbf +坚定不移jdby +绝大多数jdds +鉴定会jdh +绝对化jdh +经得起jdq +见多识广jdsg +精打细算jdxs +接二连三jels +解放后jfh +解放军jfj +解放军报jfjb +解放前jfq +仅供参考jgck +机构改革jggg +坚固耐用jgny +襟怀坦白jhtb +计划性jhx +级ji +及ji +机ji +极ji +几ji +积ji +给ji +基ji +其*ji +记ji +己ji +期*ji +系*ji +革*ji +计ji +集ji +即ji +际ji +季ji +激ji +济ji +技ji +击ji +继ji +急ji +剂ji +既ji +纪ji +寄ji +挤ji +鸡ji +迹ji +绩ji +齐*ji +奇*ji +吉ji +脊ji +辑ji +籍ji +疾ji +肌ji +棘ji +畸ji +圾ji +稽ji +箕ji +饥ji +讥ji +姬ji +缉ji +汲ji +嫉ji +蓟ji +冀ji +伎ji +祭ji +悸ji +寂ji +忌ji +妓ji +藉ji +丌ji +亟ji +乩ji +剞ji +佶ji +偈ji +诘ji +墼ji +芨ji +芰ji +荠ji +蒺ji +蕺ji +掎ji +叽ji +咭ji +哜ji +唧ji +岌ji +嵴ji +洎ji +屐ji +骥ji +畿ji +玑ji +楫ji +殛ji +戟ji +戢ji +赍ji +觊ji +犄ji +齑ji +矶ji +羁ji +嵇ji +稷ji +瘠ji +虮ji +笈ji +笄ji +暨ji +跻ji +跽ji +霁ji +鲚ji +鲫ji +髻ji +麂ji +加jia +家jia +架jia +价jia +甲jia +夹jia +假jia +钾jia +贾jia +稼jia +驾jia +嘉jia +枷jia +佳jia +荚jia +颊jia +嫁jia +茄*jia +挟*jia +嘏*jia +伽jia +郏jia +葭jia +岬jia +浃jia +迦jia +珈jia +戛jia +胛jia +恝jia +铗jia +镓jia +痂jia +瘕jia +袷jia +蛱jia +笳jia +袈jia +跏jia +加班jiaban +甲板jiaban +加倍jiabei +甲虫jiachong +家畜jiachu +家当jiadang +家底jiadi +假定jiading +加法jiafa +家访jiafang +价格jiage +加工jiagong +佳话jiahua +家伙jiahuo +加急jiaji +嘉奖jiajiang +家教jiajiao +嫁接jiajie +佳节jiajie +假借jiajie +加紧jiajin +家境jiajing +家具jiaju +加剧jiaju +加快jiakuai +加仑jialun +加码jiama +假冒jiamao +家门jiamen +加密jiami +加冕jiamian +价目jiamu +间jian +件jian +见jian +建jian +坚jian +减jian +检jian +践jian +尖jian +简jian +碱jian +剪jian +艰jian +渐jian +肩jian +键jian +健jian +柬jian +鉴jian +剑jian +歼jian +监jian +兼jian +浅*jian +奸jian +箭jian +茧jian +舰jian +俭jian +笺jian +煎jian +缄jian +硷jian +拣jian +捡jian +荐jian +槛jian +贱jian +饯jian +溅jian +涧jian +僭jian +谏jian +谫jian +菅jian +蒹jian +搛jian +囝*jian +湔jian +蹇jian +謇jian +缣jian +枧jian +楗jian +戋jian +戬jian +牮jian +犍jian +毽jian +腱jian +睑jian +锏jian +鹣jian +裥jian +笕jian +翦jian +趼jian +踺jian +鲣jian +鞯jian +吉安jian +煎熬jianao +简报jianbao +渐变jianbian +简便jianbian +简编jianbian +鉴别jianbie +兼并jianbing +尖兵jianbing +剪裁jiancai +剪彩jiancai +检测jiance +检查jiancha +检察jiancha +监察jiancha +减产jianchan +建成jiancheng +简称jiancheng +坚持jianchi +简单jiandan +建党jiandang +减低jiandi +检点jiandian +间谍jiandie +坚定jianding +鉴定jianding +监督jiandu +间断jianduan +尖端jianduan +简短jianduan +舰队jiandui +健儿jianer +减法jianfa +肩负jianfu +将jiang +降jiang +讲jiang +强*jiang +江jiang +浆jiang +蒋jiang +奖jiang +疆jiang +僵jiang +姜jiang +桨jiang +匠jiang +酱jiang +茳jiang +洚jiang +绛jiang +缰jiang +犟jiang +礓jiang +耩jiang +糨jiang +豇jiang +奖杯jiangbei +疆场jiangchang +奖惩jiangcheng +僵持jiangchi +降低jiangdi +间隔jiange +讲稿jianggao +江湖jianghu +僵化jianghua +讲话jianghua +降级jiangji +降价jiangjia +讲解jiangjie +疆界jiangjie +将近jiangjin +奖金jiangjin +讲究jiangjiu +僵局jiangju +将军jiangjun +讲课jiangke +将来jianglai +讲理jiangli +奖励jiangli +降临jianglin +将领jiangling +降落jiangluo +江南jiangnan +奖品jiangpin +讲评jiangping +奖券jiangquan +江山jiangshan +讲师jiangshi +僵尸jiangshi +讲授jiangshou +讲述jiangshu +降水jiangshui +江苏jiangsu +讲台jiangtai +讲坛jiangtan +疆土jiangtu +坚固jiangu +兼顾jiangu +监管jianguan +建国jianguo +降温jiangwen +江西jiangxi +讲习jiangxi +匠心jiangxin +讲学jiangxue +讲演jiangyan +将要jiangyao +讲义jiangyi +僵硬jiangying +奖章jiangzhang +讲座jiangzuo +监护jianhu +简化jianhua +间或jianhuo +奸计jianji +歼击jianji +剪辑jianji +减价jianjia +渐渐jianjian +健将jianjiang +建交jianjiao +间接jianjie +见解jianjie +简介jianjie +简洁jianjie +简捷jianjie +渐进jianjin +监禁jianjin +检举jianju +艰巨jianju +坚决jianjue +健康jiankang +尖刻jianke +坚苦jianku +艰苦jianku +监牢jianlao +建立jianli +尖利jianli +简历jianli +简练jianlian +简陋jianlou +简略jianlue +健美jianmei +减免jianmian +歼灭jianmie +简明jianming +缄默jianmo +艰难jiannan +键盘jianpan +简拼jianpin +简朴jianpu +俭朴jianpu +坚强jianqiang +减轻jianqing +健全jianquan +兼任jianren +坚韧jianren +兼容jianrong +尖锐jianrui +减弱jianruo +艰涩jianse +鉴赏jianshang +减少jianshao +建设jianshe +艰深jianshen +见识jianshi +坚实jianshi +监视jianshi +建树jianshu +减速jiansu +检索jiansuo +践踏jianta +健谈jiantan +检讨jiantao +简体jianti +舰艇jianting +减退jiantui +健忘jianwang +间文jianwen +见闻jianwen +间隙jianxi +奸细jianxi +艰险jianxian +见效jianxiao +间歇jianxie +简写jianxie +坚信jianxin +艰辛jianxin +减刑jianxing +检修jianxiu +简讯jianxun +检验jianyan +简要jianyao +建议jianyi +坚毅jianyi +简易jianyi +奸淫jianyin +坚硬jianying +剪影jianying +鉴于jianyu +监狱jianyu +减员jianyuan +检阅jianyue +建造jianzao +简则jianze +坚贞jianzhen +监制jianzhi +简直jianzhi +兼职jianzhi +建筑jianzhu +简装jianzhuang +健壮jianzhuang +较jiao +教jiao +交jiao +角jiao +叫jiao +脚jiao +胶jiao +浇jiao +焦jiao +觉*jiao +校*jiao +搅jiao +酵jiao +郊jiao +铰jiao +窖jiao +椒jiao +礁jiao +骄jiao +娇jiao +嚼jiao +矫jiao +侥jiao +狡jiao +饺jiao +缴jiao +绞jiao +剿jiao +轿jiao +佼jiao +僬jiao +艽jiao +茭jiao +挢jiao +噍jiao +峤jiao +徼jiao +湫*jiao +姣jiao +敫jiao +皎jiao +鹪jiao +蛟jiao +醮jiao +跤jiao +鲛jiao +骄傲jiaoao +搅拌jiaoban +狡辩jiaobian +教材jiaocai +交叉jiaocha +教程jiaocheng +交错jiaocuo +较大jiaoda +交代jiaodai +交淡jiaodan +教导jiaodao +交点jiaodian +焦点jiaodian +校订jiaoding +角度jiaodu +校对jiaodui +较多jiaoduo +焦耳jiaoer +交锋jiaofeng +交付jiaofu +浇灌jiaoguan +娇贵jiaogui +叫喊jiaohan +较好jiaohao +叫好jiaohao +狡猾jiaohua +交换jiaohuan +叫唤jiaohuan +教诲jiaohui +缴获jiaohuo +交际jiaoji +矫健jiaojian +交接jiaojie +交界jiaojie +叫苦jiaoku +较快jiaokuai +教练jiaolian +较量jiaoliang +交流jiaoliu +搅乱jiaoluan +角落jiaoluo +叫骂jiaoma +剿灭jiaomie +酵母jiaomu +交纳jiaona +缴纳jiaona +娇嫩jiaonen +交配jiaopei +骄气jiaoqi +交情jiaoqing +郊区jiaoqu +叫嚷jiaorang +角色jiaose +交涉jiaoshe +教师jiaoshi +教授jiaoshou +教唆jiaosuo +脚踏jiaota +交谈jiaotan +教堂jiaotang +交替jiaoti +教条jiaotiao +交通jiaotong +郊外jiaowai +交往jiaowang +较为jiaowei +狡黠jiaoxia +叫嚣jiaoxiao +侥幸jiaoxing +绞刑jiaoxing +教学jiaoxue +教训jiaoxun +教养jiaoyang +骄阳jiaoyang +教益jiaoyi +交易jiaoyi +交谊jiaoyi +教育jiaoyu +教员jiaoyuan +狡诈jiaozha +校正jiaozheng +脚注jiaozhu +角逐jiaozhu +浇铸jiaozhu +校准jiaozhun +焦灼jiaozhuo +娇纵jiaozong +叫做jiaozuo +家谱jiapu +假期jiaqi +价钱jiaqian +加强jiaqiang +假日jiari +加入jiaru +假如jiaru +假若jiaruo +加上jiashang +假设jiashe +加深jiashen +假使jiashi +架势jiashi +驾驶jiashi +家属jiashu +假说jiashuo +加速jiasu +枷锁jiasuo +家庭jiating +家乡jiaxiang +假想jiaxiang +家业jiaye +加以jiayi +佳音jiayin +家用jiayong +加油jiayou +家园jiayuan +夹杂jiaza +加载jiazai +家长jiazhang +价值jiazhi +加重jiazhong +假装jiazhuang +嫁妆jiazhuang +架子jiazi +家族jiazu +击败jibai +羁绊jiban +几倍jibei +基本jiben +击毙jibi +级别jibie +疾病jibing +计策jice +基层jiceng +稽查jicha +机场jichang +集成jicheng +继承jicheng +计酬jichou +基础jichu +机床jichuang +几次jici +急促jicu +积存jicun +寄存jicun +极大jida +亟待jidai +激荡jidang +记得jide +基地jidi +机电jidian +极点jidian +基调jidiao +机动jidong +激动jidong +极度jidu +几度jidu +即度jidu +季度jidu +基督jidu +嫉妒jidu +忌妒jidu +极端jiduan +结jie +阶jie +解jie +接jie +节jie +家*jie +界jie +截jie +介jie +借jie +价*jie +届jie +街jie +揭jie +洁jie +杰jie +竭jie +皆jie +秸jie +劫jie +桔jie +捷jie +睫jie +姐jie +戒jie +藉jie +芥jie +疥jie +诫jie +楷*jie +偈*jie +讦jie +诘*jie +拮jie +喈jie +嗟jie +婕jie +孑jie +桀jie +碣jie +疖jie +颉jie +蚧jie +羯jie +鲒jie +骱jie +饥饿jie +结案jiean +洁白jiebai +接班jieban +捷报jiebao +戒备jiebei +结彩jiecai +节操jiecao +阶层jieceng +劫持jiechi +杰出jiechu +解除jiechu +接触jiechu +戒除jiechu +揭穿jiechuan +结存jiecun +解答jieda +接待jiedai +借贷jiedai +街道jiedao +解冻jiedong +阶段jieduan +截断jieduan +揭发jiefa +借方jiefang +解放jiefang +街坊jiefang +结构jiegou +解雇jiegu +借故jiegu +结果jieguo +结合jiehe +结核jiehe +结婚jiehun +阶级jieji +接见jiejian +节俭jiejian +借鉴jiejian +结交jiejiao +姐姐jiejie +接近jiejin +竭尽jiejin +结晶jiejing +捷径jiejing +洁净jiejing +解救jiejiu +结局jieju +解决jiejue +孑孓jiejue +解开jiekai +揭开jiekai +解渴jieke +接口jiekou +借口jiekou +借款jiekuan +竭力jieli +接连jielian +揭露jielu +戒律jielu +结论jielun +解闷jiemen +结盟jiemeng +界面jiemian +节目jiemu +揭幕jiemu +接纳jiena +解聘jiepin +解剖jiepou +节气jieqi +接洽jieqia +截取jiequ +既而jier +节日jieri +介入jieru +解散jiesan +介绍jieshao +节省jiesheng +届时jieshi +结实jieshi +解释jieshi +揭示jieshi +解手jieshou +接受jieshou +接收jieshou +结束jieshu +解说jieshuo +结算jiesuan +解体jieti +阶梯jieti +接替jieti +接头jietou +街头jietou +解脱jietuo +结尾jiewei +解围jiewei +接吻jiewen +解析jiexi +界线jiexian +界限jiexian +揭晓jiexiao +戒严jieyan +结业jieye +介意jieyi +接应jieying +结余jieyu +节约jieyue +结帐jiezhang +接着jiezhao +节制jiezhi +介质jiezhi +戒指jiezhi +借支jiezhi +截止jiezhi +借助jiezhu +节奏jiezou +杰作jiezuo +激发jifa +技法jifa +讥讽jifeng +几个jige +及格jige +技工jigong +记功jigong +机构jigou +叽咕jigu +机关jiguan +籍贯jiguan +极光jiguang +激光jiguang +记过jiguo +极好jihao +记号jihao +集合jihe +几何jihe +稽核jihe +几乎jihu +激化jihua +计划jihua +饥荒jihuang +机会jihui +集会jihui +击毁jihui +忌讳jihui +积极jiji +机件jijian +计件jijian +急件jijian +击剑jijian +即将jijiang +计较jijiao +季节jijie +急进jijin +基金jijin +机警jijing +即景jijing +寂静jijing +急救jijiu +积聚jiju +急剧jiju +急遽jiju +寄居jiju +季刊jikan +即刻jike +疾苦jiku +击溃jikui +积累jilei +极力jili +吉利jili +激励jili +伎俩jilia +计量jiliang +寂寥jiliao +激烈jilie +吉林jilin +机灵jiling +激流jiliu +记录jilu +纪律jilu +纪录jilu +辑录jilu +击落jiluo +急忙jimang +机密jimi +寂寞jimo +计谋jimou +进jin +金jin +近jin +紧jin +斤jin +今jin +尽jin +仅jin +劲jin +浸jin +禁jin +津jin +筋jin +锦jin +晋jin +巾jin +襟jin +谨jin +靳jin +烬jin +卺jin +荩jin +堇jin +噤jin +馑jin +廑jin +妗jin +缙jin +瑾jin +槿jin +赆jin +觐jin +衿jin +缉拿jina +济南jinan +禁闭jinbi +锦标jinbiao +进步jinbu +浸沉jinchen +进程jincheng +进出jinchu +紧凑jincou +近代jindai +劲敌jindi +进度jindu +金额jine +机能jineng +技能jineng +进而jiner +进犯jinfan +经jing +精jing +京jing +径jing +井jing +静jing +竟jing +晶jing +净jing +境jing +镜jing +景jing +警jing +劲*jing +茎jing +敬jing +惊jing +睛jing +竞jing +荆jing +兢jing +鲸jing +粳jing +痉jing +靖jing +刭jing +儆jing +阱jing +菁jing +獍jing +憬jing +泾jing +迳jing +弪jing +婧jing +肼jing +胫jing +腈jing +旌jing +靓*jing +敬爱jingai +警报jingbao +警备jingbei +精兵jingbing +精采jingcai +精彩jingcai +警察jingcha +经常jingchang +精粹jingcui +静电jingdian +经典jingdian +惊动jingdong +精度jingdu +经费jingfei +精干jinggan +竟敢jinggan +警告jinggao +经过jingguo +净化jinghua +精华jinghua +经济jingji +竞技jingji +荆棘jingji +精简jingjian +境界jingjie +警戒jingjie +经久jingjiu +惊恐jingkong +经理jingli +经历jingli +精力jingli +敬礼jingli +精练jinglian +精良jingliang +经络jingluo +精美jingmei +精密jingmi +精明jingming +进攻jingong +敬佩jingpei +精辟jingpi +景气jingqi +惊奇jingqi +精巧jingqiao +精确jingque +竟然jingran +竞赛jingsai +景色jingse +经商jingshang +精神jingshen +经手jingshou +经受jingshou +精髓jingsui +静态jingtai +惊叹jingtan +晶体jingti +警惕jingti +精通jingtong +镜头jingtou +筋骨jingu +禁锢jingu +尽管jinguan +巾帼jinguo +经委jingwei +警卫jingwei +敬畏jingwei +景物jingwu +精细jingxi +京戏jingxi +惊险jingxian +景象jingxiang +经销jingxiao +经心jingxin +精心jingxin +惊心jingxin +惊醒jingxing +竞选jingxuan +惊讶jingya +经验jingyan +敬仰jingyang +经营jingying +晶莹jingying +经由jingyou +境遇jingyu +精湛jingzhan +竞争jingzheng +精制jingzhi +径直jingzhi +精致jingzhi +静止jingzhi +净值jingzhi +竟址jingzhi +净重jingzhong +镜子jingzi +静坐jingzuo +近海jinhai +今后jinhou +近乎jinhu +进化jinhua +几年jinian +记念jinian +纪念jinian +晋级jinji +紧急jinji +近郊jinjiao +紧紧jinjin +仅仅jinjin +进军jinjun +进口jinkou +尽快jinkuai +近况jinkuang +进来jinlai +近来jinlai +尽力jinli +尽量jinliang +斤两jinliang +禁令jinling +劲旅jinlu +紧密jinmi +近年jinnian +今年jinnian +金牌jinpai +紧迫jinpo +近期jinqi +近前jinqian +金钱jinqian +尽情jinqing +进去jinqu +进取jinqu +禁区jinqu +近日jinri +今日jinri +金融jinrong +进入jinru +浸入jinru +谨慎jinshen +晋升jinsheng +今是jinshi +尽是jinshi +近视jinshi +金属jinshu +近似jinsi +紧缩jinsuo +今天jintian +津贴jintie +尽头jintou +劲头jintou +浸透jintou +进退jintui +今晚jinwan +今昔jinxi +尽心jinxin +进行jinxing +进修jinxiu +锦秀jinxiu +谨严jinyan +紧要jinyao +进展jinzhan +紧张jinzhang +今朝jinzhao +紧着jinzhe +禁止jinzhi +尽职jinzhi +进驻jinzhu +金子jinzi +炯jiong +窘jiong +迥jiong +炅*jiong +扃jiong +窘迫jiongpo +迥然jiongran +击破jipo +急迫jipo +及其jiqi +极其jiqi +激起jiqi +机器jiqi +机枪jiqiang +技巧jiqiao +急切jiqie +激情jiqing +汲取jiqu +集权jiquan +既然jiran +己任jiren +继任jiren +即日jiri +吉日jiri +肌肉jirou +极少jishao +寄生jisheng +即是jishi +及时jishi +几时jishi +计时jishi +即时jishi +即使jishi +记事jishi +基石jishi +集市jishi +级数jishu +基数jishu +计数jishu +记述jishu +技术jishu +祭祀jisi +激素jisu +急速jisu +计算jisuan +机体jiti +集体jiti +肌体jiti +几天jitian +集团jituan +寄托jituo +就jiu +九jiu +旧jiu +究jiu +久jiu +救jiu +酒jiu +纠jiu +揪jiu +玖jiu +韭jiu +灸jiu +厩jiu +臼jiu +舅jiu +咎jiu +疚jiu +僦jiu +啾jiu +阄jiu +柩jiu +桕jiu +鸠jiu +鹫jiu +赳jiu +鬏jiu +就餐jiucan +纠察jiucha +纠缠jiuchan +就此jiuci +就地jiudi +就范jiufan +纠纷jiufen +纠葛jiuge +救国jiuguo +救护jiuhu +救火jiuhuo +纠集jiuji +鸠集jiuji +救济jiuji +救急jiuji +九江jiujiang +九届jiujie +就近jiujin +酒精jiujing +究竟jiujing +救命jiuming +救生jiusheng +就是jiushi +就事jiushi +救亡jiuwang +久违jiuwei +酒窝jiuwo +酒席jiuxi +救险jiuxian +揪心jiuxin +救星jiuxing +就绪jiuxu +就学jiuxue +久仰jiuyang +就要jiuyao +就业jiuye +久远jiuyuan +九月jiuyue +救灾jiuzai +纠正jiuzheng +就职jiuzhi +救治jiuzhi +九洲jiuzhou +救助jiuzhu +极为jiwei +纪委jiwei +极限jixian +迹象jixiang +吉祥jixiang +讥笑jixiao +机械jixie +记性jixing +急性jixing +畸形jixing +即兴jixing +吉凶jixiong +几许jixu +积蓄jixu +继续jixu +记叙jixu +急需jixu +集训jixun +积压jiya +羁押jiya +给养jiyang +机要jiyao +纪要jiyao +给以jiyi +记忆jiyi +技艺jiyi +基因jiyin +急用jiyong +基于jiyu +急于jiyu +机遇jiyu +给予jiyu +寄予jiyu +觊觎jiyu +纪元jiyuan +集约jiyue +记载jizai +及早jizao +急躁jizao +激增jizeng +记帐jizhang +记者jizhe +集镇jizhen +机制jizhi +及至jizhi +机智jizhi +集中jizhong +击中jizhong +记住jizhu +基准jizhun +集资jizi +经济核算jjhs +聚精会神jjhs +将计就计jjjj +戒骄戒躁jjjz +近几年来jjnl +竭尽全力jjql +节假日jjr +积极性jjx +经济效益jjxy +兢兢业业jjyy +精简整编jjzb +叽叽喳喳jjzz +艰苦奋斗jkfd +尽可能jkn +教科书jks +俱乐部jlb +交流电jld +吉林省jls +价廉物美jlwm +纪律性jlx +纪念碑jnb +几年来jnl +近年来jnl +纪念品jnp +济南市jns +吉普车jpc +坚强不屈jqbq +奖勤罚懒jqfl +机器人jqr +急起直追jqzz +截然不同jrbt +兼容性jrx +积少成多jscd +金山公司jsgs +集思广益jsgy +精神焕发jshf +计算机jsj +尽善尽美jsjm +集市贸易jsmy +介绍人jsr +就是说jss +计算所jss +江苏省jss +举世闻名jswm +介绍信jsx +技术员jsy +计算中心jszx +交通部jtb +家庭出身jtcs +惊天动地jtdd +具体地说jtds +晶体管jtg +交通工具jtgj +脚踏实地jtsd +具体说来jtsl +具ju +据ju +局ju +举ju +车*ju +句ju +聚ju +距ju +巨ju +居ju +锯ju +剧ju +矩ju +拒ju +柜*ju +桔*ju +鞠ju +拘ju +狙ju +疽ju +驹ju +菊ju +咀ju +沮ju +踞ju +俱ju +惧ju +炬ju +倨ju +讵ju +苣ju +苴ju +莒ju +掬ju +遽ju +屦ju +琚ju +枸*ju +椐ju +榘ju +榉ju +橘ju +犋ju +飓ju +钜ju +锔ju +窭ju +裾ju +趄ju +醵ju +踽ju +龃ju +雎ju +瞿*ju +鞫ju +卷juan +捐juan +鹃juan +娟juan +倦juan +眷juan +绢juan +俊*juan +鄄juan +狷juan +涓juan +桊juan +蠲juan +锩juan +镌juan +隽juan +卷进juanjin +捐款juankuan +眷恋juanlian +眷念juannian +捐躯juanqu +卷入juanru +眷属juanshu +捐献juanxian +卷烟juanyan +卷帙juanzhi +捐助juanzhu +卷宗juanzong +举办juban +具备jubei +剧本juben +巨变jubian +局部jubu +拘捕jubu +剧场juchang +据此juci +巨大juda +举动judong +居多juduo +决jue +觉jue +绝jue +角*jue +脚*jue +掘jue +嚼*jue +撅jue +攫jue +抉jue +倔jue +爵jue +诀jue +厥jue +劂jue +谲jue +矍jue +蕨jue +嗟*jue +噘jue +噱jue +崛jue +獗jue +孓jue +珏jue +桷jue +橛jue +爝jue +镢jue +蹶jue +觖jue +巨额jue +诀别juebie +决不juebu +绝不juebu +决策juece +觉察juecha +觉得juede +决定jueding +决断jueduan +绝对juedui +绝迹jueji +倔强juejiang +绝交juejiao +绝径juejing +绝境juejing +绝句jueju +决裂juelie +绝路juelu +绝密juemi +绝妙juemiao +崛起jueqi +诀窍jueqiao +决赛juesai +绝食jueshi +决死juesi +决算juesuan +绝望juewang +爵位juewei +觉悟juewu +决心juexin +觉醒juexing +决议jueyi +绝缘jueyuan +抉择jueze +决战juezhan +绝招juezhao +绝症juezheng +巨幅jufu +居功jugong +鞠躬jugong +句号juhao +聚合juhe +聚会juhui +聚集juji +巨匠jujiang +拘谨jujin +拒绝jujue +咀嚼jujue +距离juli +举例juli +剧烈julie +拘留juliu +局面jumian +居民jumin +剧目jumu +军jun +均jun +菌jun +君jun +龟*jun +钧jun +峻jun +俊jun +竣jun +浚jun +郡jun +骏jun +捃jun +皲jun +筠jun +麇jun +军操juncao +君臣junchen +均等jundeng +军队jundui +军法junfa +军阀junfa +军服junfu +军港jungang +军工jungong +竣工jungong +均衡junheng +军火junhuo +拘泥juni +军机junji +军纪junji +军舰junjian +俊杰junjie +军垦junken +军粮junliang +军令junling +骏马junma +军民junmin +军旗junqi +峻峭junqiao +俊俏junqiao +军区junqu +军权junquan +军人junren +军事junshi +军师junshi +军属junshu +军团juntuan +军委junwei +军衔junxian +军校junxiao +军械junxie +军心junxin +俊秀junxiu +军需junxu +军训junxun +军医junyi +军营junying +军用junyong +军邮junyou +均匀junyun +军长junzhang +军政junzheng +君主junzhu +军装junzhuang +君子junzi +俱全juquan +居然juran +遽然juran +沮丧jusang +局势jushi +举手jushou +拘束jushu +据说jushuo +具体juti +剧团jutuan +据悉juxi +局限juxian +居心juxin +举行juxing +矩形juxing +巨型juxing +具有juyou +据有juyou +剧院juyuan +局长juzhang +剧照juzhao +举止juzhi +居中juzhong +剧终juzhong +巨著juzhu +居住juzhu +句子juzi +节外生枝jwsz +惊心动魄jxdp +继续革命jxgm +机械化jxh +江西省jxs +谨小慎微jxsw +局限性jxx +教育部jyb +进一步jyb +家用电器jydq +教育方针jyfz +家喻户晓jyhx +加以解决jyjj +记忆力jyl +精益求精jyqj +教研室jys +见义勇为jyyw +旧中国jzg +建筑物jzw +可k +开k +看k +克k +孔k +科k +口k +空k +苦k +快k +考k +刻k +靠k +况k +块k +困k +宽k +矿k +抗k +卡k +卡ka +喀ka +咖ka +咯ka +佧ka +咔ka +胩ka +喀嚓kacha +卡车kache +咖啡kafei +开kai +凯kai +揩kai +楷kai +慨kai +剀kai +垲kai +蒈kai +忾kai +恺kai +铠kai +锎kai +锴kai +开办kaiban +开遍kaibian +开采kaicai +开场kaichang +开车kaiche +开除kaichu +开创kaichuang +开导kaidao +开刀kaidao +开动kaidong +开端kaiduan +开发kaifa +开放kaifang +开封kaifeng +开赴kaifu +凯歌kaige +开关kaiguan +开航kaihang +开户kaihu +开花kaihua +开怀kaihuai +开荒kaihuang +开会kaihui +开掘kaijue +开垦kaiken +开口kaikou +开矿kaikuang +开阔kaikuo +开朗kailang +开郎kailang +开路kailu +开明kaiming +楷模kaimo +开幕kaimu +开炮kaipao +开辟kaipi +开启kaiqi +开枪kaiqiang +开窍kaiqiao +开设kaishe +开始kaishi +开庭kaiting +开头kaitou +开脱kaituo +开拓kaituo +开外kaiwai +开销kaixiao +开心kaixin +凯旋kaixuan +开学kaixue +开颜kaiyan +开业kaiye +开战kaizhan +开展kaizhan +开张kaizhang +开支kaizhi +看kan +刊kan +坎kan +槛*kan +堪kan +勘kan +砍kan +嵌*kan +侃kan +莰kan +阚*kan +戡kan +龛kan +瞰kan +勘测kance +勘察kancha +看出kanchu +看待kandai +看到kandao +刊登kandeng +看法kanfa +砍伐kanfa +抗kang +康kang +炕kang +慷kang +糠kang +扛kang +亢kang +伉kang +闶kang +钪kang +亢奋kangfen +康复kangfu +抗衡kangheng +抗击kangji +亢进kangjin +抗拒kangju +伉俪kangli +抗日kangri +看管kanguan +抗议kangyi +看见kanjian +坎坷kanke +看来kanlai +看齐kanqi +刊头kantou +看望kanwang +刊物kanwu +勘误kanwu +看样kanyang +刊载kanzai +考kao +靠kao +拷kao +烤kao +尻kao +栲kao +犒kao +铐kao +拷贝kaobei +靠边kaobian +考查kaocha +考察kaocha +考核kaohe +靠近kaojin +考究kaojiu +靠拢kaolong +考虑kaolu +考勤kaoqin +靠山kaoshan +考试kaoshi +考题kaoti +考验kaoyan +考证kaozheng +卡片kapian +看不惯kbg +看不起kbq +刻不容缓kbrh +开诚布公kcbg +矿产资源kczy +扩大化kdh +可ke +克ke +科ke +刻ke +客ke +壳ke +颗ke +棵ke +柯ke +呵*ke +坷ke +苛ke +磕ke +咳ke +渴ke +课ke +嗑ke +岢ke +恪ke +溘ke +骒ke +缂ke +珂ke +轲ke +氪ke +瞌ke +钶ke +锞ke +稞ke +疴ke +窠ke +颏ke +蝌ke +髁ke +可爱keai +科班keban +课本keben +可比kebi +刻薄kebo +可不kebu +客车keche +课程kecheng +可耻kechi +可恶kee +可风kefeng +可否kefou +克服kefu +可观keguan +客观keguan +可贵kegui +可好kehao +可恨kehen +刻划kehua +刻画kehua +克己keji +客机keji +科技keji +可见kejian +科教kejiao +可敬kejing +窠臼kejiu +科举keju +可靠kekao +苛刻keke +可口kekou +克扣kekou +刻苦keku +克拉kela +克朗kelang +颗粒keli +可怜kelian +科目kemu +肯ken +啃ken +垦ken +恳ken +裉ken +肯定kending +可能keneng +坑keng +吭keng +铿keng +坑道kengdao +坑害kenghai +铿锵kengqiang +恳切kenqie +恳求kenqiu +垦殖kenzhi +可怕kepa +磕碰kepeng +科普kepu +客气keqi +可亲keqin +可取kequ +客人keren +客商keshang +可是keshi +科室keshi +课堂ketang +客套ketao +课题keti +客体keti +客厅keting +磕头ketou +可望kewang +渴望kewang +可喜kexi +可惜kexi +可行kexing +科学kexue +科研keyan +可以keyi +可疑keyi +刻意keyi +科员keyuan +科长kezhang +可知kezhi +克制kezhi +狂风暴雨kfby +克己奉公kjfg +科技司kjs +苦口婆心kkpx +昆明市kms +可能性knx +孔kong +空kong +控kong +恐kong +倥kong +崆kong +箜kong +空白kongbai +恐怖kongbu +控拆kongchai +空洞kongdong +空额konge +空乏kongfa +控告konggao +空喊konghan +恐吓konghe +空话konghua +恐慌konghuang +空间kongjian +空降kongjiang +恐惧kongju +空军kongjun +空旷kongkuang +恐龙konglong +空虑konglu +恐怕kongpa +空气kongqi +空前kongqian +孔雀kongque +控诉kongsu +空谈kongtan +空头kongtou +空文kongwen +空隙kongxi +空闲kongxian +空想kongxiang +空虚kongxu +空运kongyun +控制kongzhi +空中kongzhong +口kou +扣kou +抠kou +寇kou +芤kou +蔻kou +叩kou +眍kou +筘kou +口岸kouan +叩拜koubai +口才koucai +扣除kouchu +口传kouchuan +口服koufu +口供kougong +口号kouhao +口红kouhong +口角koujiao +口径koujing +口诀koujue +口令kouling +扣留kouliu +口气kouqi +口腔kouqiang +口哨koushao +口试koushi +口述koushu +口头koutou +叩头koutou +口信kouxin +扣押kouya +口语kouyu +看起来kql +口若悬河krxh +口是心非ksxf +苦ku +库ku +枯ku +酷ku +哭ku +窟ku +裤ku +刳ku +堀ku +喾ku +绔ku +骷ku +跨kua +夸kua +垮kua +挎kua +胯kua +侉kua +跨步kuabu +夸大kuada +跨度kuadu +会*kuai +快kuai +块kuai +筷kuai +侩kuai +蒯kuai +郐kuai +哙kuai +狯kuai +浍*kuai +脍kuai +会计kuaiji +快乐kuaile +快速kuaisu +宽kuan +款kuan +髋kuan +宽敞kuanchang +宽绰kuanchuo +宽大kuanda +宽待kuandai +款待kuandai +宽度kuandu +况kuang +矿kuang +狂kuang +框kuang +匡kuang +筐kuang +眶kuang +旷kuang +诓kuang +诳kuang +邝kuang +圹kuang +夼kuang +哐kuang +纩kuang +贶kuang +矿藏kuangcang +矿产kuangchan +狂风kuangfeng +矿工kuanggong +旷工kuanggong +矿井kuangjing +框框kuangkuang +哐啷kuanglang +况且kuangqie +矿区kuangqu +矿泉kuangquan +狂热kuangre +矿山kuangshan +矿石kuangshi +框图kuangtu +宽广kuanguang +狂妄kuangwang +矿物kuangwu +旷野kuangye +宽宏kuanhong +宽厚kuanhou +宽阔kuankuo +宽容kuanrong +款式kuanshi +宽恕kuanshu +款项kuanxiang +宽心kuanxin +宽裕kuanyu +垮台kuatai +跨越kuayue +夸张kuazhang +裤衩kucha +库存kucun +哭喊kuhan +奎kui +溃kui +馈kui +亏kui +盔kui +岿kui +窥kui +葵kui +魁kui +傀kui +愧kui +馗kui +匮kui +夔kui +隗kui +蒉kui +揆kui +喹kui +喟kui +悝kui +愦kui +逵kui +暌kui +睽kui +聩kui +蝰kui +篑kui +跬kui +亏本kuiben +窥测kuice +亏待kuidai +愧疚kuijiu +亏空kuikong +亏损kuisun +魁梧kuiwu +溃疡kuiyang +枯竭kujie +库仑kulun +苦闷kumen +枯木kumu +困kun +昆kun +坤kun +捆kun +悃kun +阃kun +琨kun +锟kun +醌kun +鲲kun +髡kun +苦难kunan +苦恼kunao +困厄kune +困乏kunfa +困惑kunhuo +困境kunjing +困苦kunku +昆明kunming +困难kunnan +扩kuo +括kuo +适*kuo +阔kuo +廓kuo +栝*kuo +蛞kuo +阔别kuobie +扩充kuochong +阔绰kuochuo +扩大kuoda +括号kuohao +扩建kuojian +阔气kuoqi +扩展kuozhan +扩张kuozhang +哭泣kuqi +酷暑kushu +苦头kutou +苦维kuwei +枯萎kuwei +酷刑kuxing +苦于kuyu +枯燥kuzao +可想而知kxez +科学家kxj +科学技术kxjs +可行性kxx +科学院kxy +科研部kyb +开源节流kyjl +看样子kyz +了l +来l +量l +理l +路l +里l +论l +两l +利l +领l +流l +力l +立l +料l +连l +老l +六l +轮l +类l +列l +拉la +落*la +啦la +蜡la +腊la +蓝la +垃la +喇la +辣la +剌la +邋la +旯la +砬la +瘌la +喇叭laba +来lai +赖lai +莱lai +崃lai +徕lai +涞lai +濑lai +赉lai +睐lai +铼lai +癞lai +籁lai +来宾laibin +来到laidao +来犯laifan +来访laifang +来函laihan +来回laihui +来历laili +来临lailin +赖皮laipi +来日lairi +来势laishi +来头laitou +来往laiwang +来信laixin +来源laiyuan +来者laizhe +来自laizi +癞子laizi +辣椒lajiao +拉拢lalong +喇嘛lama +腊梅lamei +兰lan +烂lan +蓝lan +览lan +栏lan +婪lan +拦lan +篮lan +阑lan +澜lan +谰lan +揽lan +懒lan +缆lan +滥lan +岚lan +漤lan +榄lan +斓lan +罱lan +镧lan +褴lan +蓝本lanben +懒怠landai +滥调landiao +懒惰landuo +浪lang +朗lang +郎lang +狼lang +琅lang +榔lang +廊lang +莨lang +蒗lang +啷lang +阆lang +锒lang +稂lang +螂lang +栏杆langan +狼狈langbei +浪潮langchao +浪荡langdang +朗读langdu +浪费langfei +狼藉langji +浪漫langman +朗诵langsong +郎中langzhong +兰花lanhua +拦截lanjie +烂漫lanman +懒散lansan +蓝色lanse +缆绳lansheng +烂熟lanshu +蓝天lantian +蓝图lantu +阑尾lanwei +拦腰lanyao +滥用lanyong +兰州lanzhou +老lao +劳lao +落*lao +牢lao +涝lao +捞lao +络*lao +佬lao +姥lao +酪lao +烙lao +潦*lao +唠lao +崂lao +栳lao +铑lao +铹lao +痨lao +耢lao +醪lao +老板laoban +老伴laoban +老本laoben +劳动laodong +牢固laogu +老汉laohan +老化laohua +牢记laoji +劳驾laojia +牢靠laokao +劳苦laoku +牢牢laolao +劳累laolei +劳力laoli +老练laolian +牢笼laolong +劳模laomo +老年laonian +老人laoren +牢骚laosao +老少laoshao +老是laoshi +老实laoshi +老师laoshi +老乡laoxiang +老爷laoye +烙印laoyin +劳支laozhi +劳资laozi +劳作laozuo +腊月layue +狼狈不堪lbbk +力不从心lbcx +来不及lbj +来不了lbl +了不起lbq +劳动保险ldbx +来得及ldj +劳动量ldl +劳动力ldl +灵丹妙药ldmy +拉丁美洲ldmz +劳动者ldz +劳动致富ldzf +了le +乐le +勒le +肋le +仂le +叻le +泐le +鳓le +乐观leguan +类lei +雷lei +累lei +勒*lei +垒lei +泪lei +镭lei +蕾lei +磊lei +儡lei +擂lei +肋lei +羸lei +诔lei +嘞lei +嫘lei +缧lei +檑lei +耒lei +酹lei +类别leibie +类次leici +雷达leida +雷管leiguan +泪痕leihen +泪花leihua +累积leiji +累计leiji +累进leijin +磊落leiluo +累年leinian +类似leisi +擂台leitai +雷同leitong +类推leitui +类型leixing +雷雨leiyu +累月leiyue +累赘leizhui +勒令leling +冷leng +棱leng +楞leng +塄leng +愣leng +冷藏lengcang +冷淡lengdan +冷宫lenggong +棱角lengjiao +冷静lengjing +冷落lengluo +冷门lengmen +冷漠lengmo +冷暖lengnuan +冷僻lengpi +冷气lengqi +冷却lengque +冷水lengshui +冷遇lengyu +乐趣lequ +勒索lesuo +乐意leyi +乐园leyuan +两个文明lgwm +拉关系lgx +联合国lhg +联合会lhh +两回事lhs +联合体lht +理li +里li +利li +力li +立li +离li +例li +历li +粒li +厘li +礼li +李li +隶li +黎li +璃li +励li +犁li +梨li +丽li +厉li +篱li +狸li +漓li +鲤li +莉li +荔li +吏li +栗li +砾li +傈li +俐li +痢li +沥li +哩li +鬲*li +俪li +俚li +郦li +坜li +苈li +莅li +蓠li +藜li +呖li +唳li +喱li +猁li +悝*li +溧li +澧li +逦li +娌li +嫠li +骊li +缡li +枥li +栎li +轹li +戾li +砺li +詈li +罹li +锂li +鹂li +疠li +疬li +蛎li +蜊li +蠡li +笠li +篥li +粝li +醴li +跞li +雳li +鲡li +鳢li +黧li +俩lia +连lian +联lian +练lian +炼lian +脸lian +链lian +莲lian +镰lian +廉lian +怜lian +涟lian +帘lian +敛lian +恋lian +蔹lian +奁lian +潋lian +濂lian +琏lian +楝lian +殓lian +臁lian +裢lian +裣lian +蠊lian +鲢lian +立案lian +恋爱lianai +联邦lianbang +练兵lianbing +联播lianbo +练达lianda +连队liandui +量liang +两liang +粮liang +良liang +亮liang +梁liang +凉liang +辆liang +粱liang +晾liang +谅liang +墚liang +莨*liang +椋liang +踉liang +靓liang +魉liang +炼钢liangang +两半liangban +量变liangbian +两边liangbian +两便liangbian +两侧liangce +两次liangci +两地liangdi +两点liangdian +量度liangdu +良方liangfang +两广liangguang +良好lianghao +两极liangji +良机liangji +谅解liangjie +量具liangju +凉快liangkuai +两立liangli +两面liangmian +练功liangong +两栖liangqi +两讫liangqi +两全liangquan +粮食liangshi +两手liangshou +凉爽liangshuang +亮堂liangtang +两条liangtiao +两头liangtou +连贯lianguan +联贯lianguan +亮相liangxiang +良心liangxin +两性liangxing +量刑liangxing +两样liangyang +粮油liangyou +良缘liangyuan +粮站liangzhan +两者liangzhe +两重liangzhong +良种liangzhong +量子liangzi +联合lianhe +联欢lianhuan +廉价lianjia +联结lianjie +连接lianjie +联接lianjie +廉洁lianjie +联军lianjun +连累lianlei +联络lianluo +连忙lianmang +联盟lianmeng +怜悯lianmin +连年liannian +脸谱lianpu +连日lianri +炼乳lianru +联赛liansai +脸色lianse +连锁liansuo +练武lianwu +联系lianxi +练习lianxi +怜惜lianxi +联想lianxiang +连续lianxu +涟漪lianyi +联姻lianyin +联营lianying +炼油lianyou +联运lianyun +连载lianzai +了*liao +料liao +疗liao +辽liao +僚liao +撩liao +聊liao +燎liao +寥liao +潦liao +撂liao +镣liao +廖liao +蓼liao +尥liao +嘹liao +獠liao +寮liao +缭liao +钌liao +鹩liao +撩拨liaobo +潦草liaocao +疗程liaocheng +料到liaodao +潦倒liaodao +料定liaoding +了结liaojie +了解liaojie +辽阔liaokuo +料理liaoli +寥寥liaoliao +寥落liaoluo +辽宁liaoning +了却liaoque +了事liaoshi +聊天liaotian +料想liaoxiang +疗养liaoyang +礼拜libai +利弊libi +里边libian +理财licai +理睬licai +立场lichang +里程licheng +历程licheng +立春lichun +历次lici +历代lidai +理当lidang +立冬lidong +列lie +裂lie +烈lie +劣lie +猎lie +冽lie +埒lie +捩lie +咧lie +洌lie +趔lie +躐lie +鬣lie +裂变liebian +列车lieche +列出liechu +列岛liedao +裂缝liefeng +列国lieguo +烈火liehuo +劣迹lieji +列举lieju +裂开liekai +裂口liekou +列宁liening +猎奇lieqi +列强lieqiang +猎取liequ +烈日lieri +列入lieru +劣绅lieshen +烈士lieshi +劣势lieshi +烈属lieshu +裂纹liewen +列席liexi +烈性liexing +立法lifa +立方lifang +礼服lifu +立功ligong +利害lihai +厉害lihai +理化lihua +礼花lihua +理会lihui +离婚lihun +立即liji +理解lijie +礼节lijie +历届lijie +力矩liju +离开likai +理科like +立刻like +理亏likui +历来lilai +历历lili +力量liliang +利率lilu +理论lilun +立论lilun +礼貌limao +里面limian +利民limin +黎民limin +黎明liming +林lin +磷lin +临lin +邻lin +淋lin +麟lin +琳lin +霖lin +鳞lin +凛lin +赁lin +吝lin +蔺lin +啉lin +嶙lin +廪lin +懔lin +遴lin +檩lin +辚lin +膦lin +瞵lin +粼lin +躏lin +淋巴linba +临别linbie +淋病linbing +林场linchang +临床linchuang +临到lindao +领ling +另ling +零ling +令ling +灵ling +岭ling +铃ling +龄ling +凌ling +棱*ling +陵ling +拎ling +玲ling +菱ling +伶ling +羚ling +酃ling +苓ling +呤ling +囹ling +泠ling +绫ling +柃ling +棂ling +瓴ling +聆ling +蛉ling +翎ling +鲮ling +令爱lingai +凌晨lingchen +灵丹lingdan +领导lingdao +领地lingdi +零点lingdian +领队lingdui +灵感linggan +领海linghai +领航linghang +领会linghui +灵魂linghun +灵活linghuo +灵机lingji +零件lingjian +领教lingjiao +灵杰lingjie +领空lingkong +凌空lingkong +玲珑linglong +零乱lingluan +凌乱lingluan +领略linglue +灵敏lingmin +陵墓lingmu +灵巧lingqiao +领取lingqu +令人lingren +凌辱lingru +零散lingsan +领事lingshi +领受lingshou +领司lingsi +零碎lingsui +灵堂lingtang +零头lingtou +领土lingtu +磷光linguang +另外lingwai +领悟lingwu +领先lingxian +领衔lingxian +零星lingxing +领袖lingxiu +另选lingxuan +灵验lingyan +领域lingyu +令尊lingzun +磷火linhuo +历年linian +临界linjie +临近linjin +邻近linjin +邻里linli +淋漓linli +凛冽linlie +临摹linmo +里弄linong +鳞伤linshang +临时linshi +临死linsi +吝惜linxi +临行linxing +林业linye +临战linzhan +临终linzhong +礼炮lipao +李鹏lipeng +礼品lipin +力气liqi +离奇liqi +力求liqiu +立秋liqiu +历任liren +例如liru +利润lirun +离散lisan +理事lishi +历史lishi +隶属lishu +礼堂litang +立体liti +例题liti +力图litu +流liu +六liu +留liu +刘liu +硫liu +柳liu +陆*liu +馏liu +瘤liu +溜liu +琉liu +榴liu +碌*liu +浏liu +遛liu +骝liu +绺liu +旒liu +熘liu +锍liu +镏liu +鹨liu +鎏liu +留步liubu +流产liuchan +流畅liuchang +流程liucheng +流传liuchuan +流窜liucuan +流动liudong +流毒liudu +流放liufang +六届liujie +浏览liulan +流利liuli +留恋liulian +流露liulu +流落liuluo +流氓liumang +留念liunian +流失liushi +流逝liushi +流体liuti +流通liutong +流亡liuwang +流泻liuxie +留心liuxin +流行liuxing +流星liuxing +留学liuxue +流血liuxue +流言liuyan +留言liuyan +留洋liuyang +留影liuying +留用liuyong +流域liuyu +六月liuyue +流转liuzhuan +例外liwai +礼物liwu +利息lixi +立夏lixia +理想lixiang +立新lixin +离心lixin +理性lixing +力行lixing +厉行lixing +离休lixiu +立意liyi +利益liyi +离异liyi +利用liyong +理由liyou +力争lizheng +立正lizheng +理智lizhi +立志lizhi +离职lizhi +例子lizi +粒子lizi +立足lizu +屡见不鲜ljbx +两极分化ljfh +逻辑设计ljsj +逻辑思维ljsw +逻辑性ljx +灵机一动ljyd +落落大方lldf +拦路虎llh +来龙去脉llqm +零零碎碎llss +来来往往llww +联绵不断lmbd +灵敏度lmd +辽宁省lns +列宁主义lnzy +龙long +垄long +弄*long +笼long +隆long +聋long +咙long +窿long +拢long +陇long +垅long +茏long +泷long +珑long +栊long +胧long +砻long +癃long +隆冬longdong +垄断longduan +隆隆longlong +笼络longluo +笼统longtong +笼罩longzhao +隆重longzhong +漏lou +露*lou +楼lou +娄lou +搂lou +篓lou +陋lou +偻lou +蒌lou +喽lou +嵝lou +镂lou +瘘lou +耧lou +蝼lou +髅lou +漏洞loudong +漏斗loudou +镂空loukong +漏网louwang +来日方长lrfc +来人来函lrlh +了如指掌lrzz +理所当然lsdr +连锁反应lsfy +领事馆lsg +理事会lsh +力所能及lsnj +拉萨市lss +流水线lsx +良师益友lsyy +路lu +六*lu +率lu +露lu +绿lu +炉lu +律lu +虑lu +滤lu +陆lu +氯lu +鲁lu +铝lu +录lu +旅lu +卢lu +吕lu +芦lu +颅lu +庐lu +掳lu +卤lu +虏lu +麓lu +碌lu +赂lu +鹿lu +潞lu +禄lu +戮lu +驴lu +侣lu +履lu +屡lu +缕lu +垆lu +蓼*lu +撸lu +噜lu +闾lu +泸lu +渌lu +漉lu +逯lu +璐lu +栌lu +榈lu +橹lu +轳lu +辂lu +辘lu +氇lu +胪lu +膂lu +镥lu +稆lu +鸬lu +鹭lu +褛lu +簏lu +舻lu +鲈lu +卵luan +乱luan +峦luan +挛luan +孪luan +滦luan +脔luan +娈luan +栾luan +鸾luan +銮luan +卵巢luanchao +乱伦luanlun +乱子luanzi +旅伴luban +路标lubiao +路程lucheng +旅程lucheng +露出luchu +屡次luci +陆地ludi +露底ludi +旅店ludian +略lue +掠lue +锊lue +掠夺lueduo +旅费lufei +露骨lugu +旅馆luguan +路过luguo +绿化luhua +炉火luhuo +路径lujing +路局luju +陆军lujun +旅客luke +履历luli +率领luling +鲁莽lumang +露面lumian +论lun +轮lun +伦lun +抡lun +仑lun +沦lun +纶lun +囵lun +论处lunchu +轮船lunchuan +论点lundian +论调lundiao +伦敦lundun +轮换lunhuan +论据lunju +轮廓lunkuo +论理lunli +伦理lunli +轮流lunliu +论述lunshu +轮胎luntai +论坛luntan +沦为lunwei +论文lunwen +沦陷lunxian +轮训lunxun +论战lunzhan +论正lunzheng +论证lunzheng +轮轴lunzhou +论著lunzhu +落luo +罗luo +螺luo +洛luo +络luo +逻luo +咯*luo +烙*luo +萝luo +锣luo +箩luo +骡luo +裸luo +骆luo +倮luo +蠃luo +荦luo +捋luo +摞luo +猡luo +泺luo +漯luo +珞luo +椤luo +脶luo +硌*luo +镙luo +瘰luo +雒luo +萝卜luobu +落成luocheng +螺钉luoding +罗汉luohan +落后luohou +落户luohu +逻辑luoji +落空luokong +落款luokuan +箩筐luokuang +罗列luolie +罗马luoma +螺母luomu +罗盘luopan +落泊luopo +落实luoshi +螺栓luoshuan +裸体luoti +骆驼luotuo +罗网luowang +螺纹luowen +落伍luowu +落选luoxuan +螺旋luoxuan +络绎luoyi +录取luqu +路人luren +绿色luse +庐山lushan +旅社lushe +律师lushi +露天lutian +路途lutu +旅途lutu +路线luxian +率先luxian +录像luxiang +旅行luxing +履行luxing +陆续luxu +录音luyin +绿荫luyin +录用luyong +旅游luyou +绿洲luzhou +露珠luzhu +路子luzi +炉子luzi +另行安排lxap +例行公事lxgs +联系人lxr +留学生lxs +另行通知lxtz +林业部lyb +老一辈lyb +另一方面lyfm +劳逸结合lyjh +利用率lyl +老一套lyt +留有余地lyyd +来者不拒lzbj +立足点lzd +老中青lzq +理直气壮lzqz +兰州市lzs +两重性lzx +面m +命m +们m +民m +毛m +没m +米m +明m +马m +么m +每m +门m +名m +磨m +美m +密m +苗m +满m +亩m +目m +呒m +马ma +么*ma +麻ma +吗ma +妈ma +骂ma +嘛ma +码ma +摩*ma +抹*ma +玛ma +蚂ma +唛ma +犸ma +嬷ma +杩ma +蟆ma +马鞍maan +麻痹mabi +马达mada +麻烦mafan +麻纺mafang +马虎mahu +麦mai +脉mai +卖mai +买mai +埋mai +迈mai +劢mai +荬mai +霾mai +买办maiban +脉搏maibo +迈步maibu +埋藏maicang +脉冲maichong +脉动maidong +埋伏maifu +卖国maiguo +脉络mailuo +买卖maimai +卖命maiming +埋没maimo +卖弄mainong +埋头maitou +卖淫maiyin +埋怨maiyuan +埋葬maizang +买帐maizhang +卖座maizuo +马力mali +麻利mali +马路malu +妈妈mama +麻木mamu +满man +慢man +曼man +漫man +蔓man +瞒man +馒man +蛮man +谩man +墁man +幔man +缦man +熳man +镘man +颟man +螨man +鳗man +鞔man +漫长manchang +忙mang +芒mang +盲mang +茫mang +氓mang +莽mang +邙mang +漭mang +硭mang +蟒mang +忙碌manglu +莽莽mangmang +盲目mangmu +茫然mangran +盲人mangren +忙于mangyu +莽原mangyuan +蛮横manheng +漫画manhua +满怀manhuai +谩骂manma +满目manmu +满腔manqiang +蔓延manyan +满意manyi +满载manzai +满足manzu +毛mao +矛mao +冒mao +貌mao +贸mao +帽mao +猫mao +茅mao +锚mao +铆mao +卯mao +茂mao +袤mao +茆mao +峁mao +泖mao +瑁mao +昴mao +牦mao +耄mao +旄mao +懋mao +瞀mao +蟊mao +髦mao +毛病maobing +毛糙maocao +冒充maochong +铆钉maoding +矛盾maodun +冒犯maofan +毛纺maofang +冒号maohao +冒尖maojian +冒进maojin +茅坑maokeng +毛利maoli +冒昧maomei +茂密maomi +冒牌maopai +毛坯maopi +贸然maoran +茂盛maosheng +冒失maoshi +矛头maotou +冒险maoxian +贸易maoyi +冒雨maoyu +毛重maozhong +帽子maozi +马上mashang +马桶matong +码头matou +马戏maxi +麻醉mazui +免不了mbl +明辨是非mbsf +满不在乎mbzh +默不作声mbzs +满城风雨mcfy +目的地mdd +目瞪口呆mdkd +描淡写mdx +么me +麽me +秘而不宣mebx +没mei +每mei +美mei +煤mei +霉mei +酶mei +梅mei +妹mei +眉mei +玫mei +枚mei +媒mei +镁mei +昧mei +寐mei +媚mei +糜*mei +谜*mei +莓mei +嵋mei +猸mei +浼mei +湄mei +楣mei +镅mei +鹛mei +袂mei +魅mei +每次meici +每当meidang +美德meide +没法meifa +每逢meifeng +每个meige +美观meiguan +玫瑰meigui +美国meiguo +美好meihao +美化meihua +媒介meijie +眉睫meijie +枚举meiju +煤矿meikuang +霉烂meilan +魅力meili +美丽meili +美满meiman +眉毛meimao +美貌meimao +妹妹meimei +美妙meimiao +眉目meimu +每年meinian +煤气meiqi +每人meiren +每日meiri +美容meirong +眉梢meishao +每时meishi +美术meishu +媒妁meishuo +煤炭meitan +每天meitian +煤田meitian +美学meixue +没有meiyou +煤油meiyou +美元meiyuan +每月meiyue +没治meizhi +每周meizhou +们men +门men +闷men +扪men +焖men +懑men +钔men +门房menfang +孟meng +猛meng +蒙meng +盟meng +梦meng +萌meng +锰meng +氓*meng +檬meng +勐meng +甍meng +瞢meng +懵meng +朦meng +礞meng +虻meng +蜢meng +蠓meng +艋meng +艨meng +蒙蔽mengbi +萌发mengfa +蒙古menggu +盟国mengguo +梦幻menghuan +蒙混menghun +梦见mengjian +猛进mengjin +梦境mengjing +猛烈menglie +蒙胧menglong +蒙昧mengmei +猛然mengran +萌生mengsheng +猛士mengshi +蒙受mengshou +梦想mengxiang +梦乡mengxiang +猛醒mengxing +萌芽mengya +盟友mengyou +盟约mengyue +猛增mengzeng +门户menhu +门路menlu +门牌menpai +门票menpiao +闷气menqi +门诊menzhen +名副其实mfqs +眉飞色舞mfsw +没关系mgx +蒙古族mgz +蒙混过关mhgg +米mi +密mi +迷mi +蜜mi +秘mi +眯mi +醚mi +靡mi +糜mi +谜mi +弥mi +觅mi +泌mi +幂mi +芈mi +谧mi +蘼mi +咪mi +嘧mi +猕mi +汨mi +宓mi +弭mi +脒mi +祢mi +敉mi +糸mi +縻mi +麋mi +面mian +棉mian +免mian +绵mian +眠mian +冕mian +勉mian +娩mian +缅mian +沔mian +渑mian +湎mian +腼mian +眄mian +面部mianbu +免除mianchu +免得miande +面对miandui +面额miane +棉花mianhua +缅怀mianhuai +面积mianji +面具mianju +面孔miankong +勉励mianli +面临mianlin +面貌mianmao +面面mianmian +绵绵mianmian +面目mianmu +面庞mianpang +面前mianqian +勉强mianqiang +面容mianrong +面色mianse +棉纱miansha +面授mianshou +免税mianshui +面谈miantan +面向mianxiang +免刑mianxing +棉絮mianxu +绵延mianyan +面议mianyi +免疫mianyi +面罩mianzhao +免职mianzhi +面子mianzi +苗miao +秒miao +描miao +庙miao +妙miao +瞄miao +藐miao +渺miao +喵miao +邈miao +缈miao +缪miao +杪miao +淼miao +眇miao +鹋miao +秒表miaobiao +描绘miaohui +妙龄miaoling +渺茫miaomang +描摹miaomo +藐视miaoshi +描述miaoshu +苗条miaotiao +苗头miaotou +描写miaoxie +瞄准miaozhun +弥补mibu +谜底midi +密度midu +灭mie +蔑mie +乜*mie +咩mie +蠛mie +篾mie +灭火miehuo +灭迹mieji +灭绝miejue +灭口miekou +蔑视mieshi +灭亡miewang +密封mifeng +蜜蜂mifeng +眯缝mifeng +迷航mihang +迷糊mihu +迷惑mihuo +密集miji +密件mijian +迷津mijin +秘诀mijue +糜烂milan +迷恋milian +密令miling +迷路milu +密码mima +迷漫miman +弥漫miman +秘密mimi +汨汨mimi +谜面mimian +密谋mimou +民min +敏min +抿min +皿min +悯min +闽min +苠min +岷min +闵min +泯min +缗min +玟min +珉min +愍min +黾min +鳘min +民办minban +民兵minbing +民法minfa +民愤minfen +民风minfeng +命ming +明ming +名ming +鸣ming +螟ming +盟*ming +铭ming +冥ming +茗ming +溟ming +暝ming +瞑ming +酩ming +敏感mingan +明白mingbai +名册mingce +名称mingcheng +明处mingchu +名次mingci +名词mingci +名单mingdan +明灯mingdeng +民歌minge +名额minge +名贵minggui +铭记mingji +名家mingjia +铭刻mingke +明快mingkuai +明朗minglang +名利mingli +明亮mingliang +明了mingliao +命令mingling +名流mingliu +明码mingma +明媚mingmei +明明mingming +名目mingmu +明年mingnian +名牌mingpai +名片mingpian +名气mingqi +明确mingque +明人mingren +名人mingren +名胜mingsheng +名声mingsheng +名堂mingtang +明天mingtian +名望mingwang +明文mingwen +明细mingxi +明显mingxian +鸣谢mingxie +明星mingxing +名言mingyan +名义mingyi +名誉mingyu +命运mingyun +明知mingzhi +明智mingzhi +明珠mingzhu +名著mingzhu +名字mingzi +民航minhang +民间minjian +敏捷minjie +民警minjing +民情minqing +敏锐minrui +民事minshi +民心minxin +民意minyi +民用minyong +民运minyun +民政minzheng +民众minzhong +民主minzhu +民族minzu +密切miqie +迷人miren +迷失mishi +秘书mishu +密探mitan +迷途mitu +谬miu +谬论miulun +谬误miuwu +迷惘miwang +迷雾miwu +迷信mixin +密友miyou +谜语miyu +蜜月miyue +马克思mks +眉开眼笑mkyx +马列主义mlzy +满面春风mmcf +马马虎虎mmhh +面面俱到mmjd +莫名其妙mmqm +默默无闻mmww +明目张胆mmzd +无*mo +磨mo +没*mo +万*mo +末mo +模mo +膜mo +摸mo +墨mo +摩mo +脉*mo +莫mo +抹mo +冒*mo +默mo +貉*mo +嘿*mo +摹mo +蘑mo +魔mo +沫mo +漠mo +寞mo +陌mo +谟mo +茉mo +蓦mo +馍mo +嫫mo +殁mo +镆mo +秣mo +瘼mo +耱mo +貊mo +貘mo +默哀moai +莫不mobu +磨擦moca +摩擦moca +磨蹭moceng +莫大moda +磨刀modao +摩登modeng +摸底modi +模范mofan +模仿mofang +摹仿mofang +莫非mofei +魔鬼mogui +模糊mohu +墨迹moji +模块mokuai +磨砺moli +磨练molian +末了moliao +末路molu +没落moluo +磨灭momie +默默momo +磨难monan +模拟moni +摹拟moni +末期moqi +默契moqi +默然moran +漠然moran +默认moren +末日mori +莫如moru +抹杀mosha +抹煞mosha +末梢moshao +陌生mosheng +模式moshi +没收moshou +魔术moshu +磨损mosun +摸索mosuo +模特mote +摩托motuo +某mou +谋mou +牟mou +侔mou +哞mou +缪*mou +眸mou +蛑mou +蝥mou +鍪mou +某地moudi +某个mouge +谋害mouhai +谋划mouhua +某军moujun +牟利mouli +谋略moulue +谋求mouqiu +牟取mouqu +谋杀mousha +谋生mousheng +某些mouxie +末尾mowei +默写moxie +模型moxing +默许moxu +模样moyang +魔掌mozhang +模子mozi +妙趣横生mqhs +门市部msb +名胜古迹msgj +妙手回春mshc +莫斯科msk +没什么msm +每时每刻msmk +秘书长msz +没事找事mszs +摩托车mtc +埋头工作mtgz +埋头苦干mtkg +亩mu +目mu +木mu +母mu +墓mu +模*mu +幕mu +牧mu +姆mu +穆mu +姥*mu +牟*mu +拇mu +牡mu +暮mu +募mu +慕mu +睦mu +仫mu +坶mu +苜mu +沐mu +毪mu +钼mu +母爱muai +墓碑mubei +目标mubiao +木材mucai +牧草mucao +目测muce +牧场muchang +目次muci +牡丹mudan +目的mudi +牧歌muge +目光muguang +幕后muhou +目击muji +募集muji +木刻muke +木料muliao +幕僚muliao +目录mulu +牧民mumin +木讷mune +木偶muou +目前muqian +母亲muqin +牧区muqu +木然muran +暮色muse +牧师mushi +目送musong +牧童mutong +牧业muye +沐浴muyu +民意测验mycy +贸易市场mysc +贸易协定myxd +民政部mzb +美中不足mzbz +毛泽东mzd +满载而归mzeg +明知故犯mzgf +毛织品mzp +目中无人mzwr +毛主席mzx +年n +能n +内n +那n +农n +你n +南n +难n +呢n +女n +泥n +哪n +拿n +念n +牛n +宁n +脑n +粘n +尼n +纳n +嗯n +那na +南na +哪na +拿na +纳na +呢*na +钠na +呐na +娜na +捺na +肭na +镎na +衲na +那边nabian +纳粹nacui +哪儿naer +那个nage +哪个nage +呐喊nahan +哪会nahui +耐nai +哪*nai +奶nai +乃nai +氖nai +奈nai +鼐nai +艿nai +萘nai +柰nai +耐烦naifan +奈何naihe +耐久naijiu +耐劳nailao +奶奶nainai +耐心naixin +耐性naixing +耐用naiyong +奶油naiyou +乃至naizhi +那里nali +哪里nali +那么name +南nan +难nan +男nan +喃nan +囝nan +囡nan +楠nan +腩nan +蝻nan +赧nan +难办nanban +南北nanbei +南边nanbian +难产nanchan +南昌nanchang +难处nanchu +难道nandao +难得nande +难点nandian +难度nandu +哪能naneng +南方nanfang +南非nanfei +难分nanfen +南风nanfeng +囊nang +攮nang +囔nang +馕nang +曩nang +囊括nangkuo +难怪nanguai +难关nanguan +南国nanguo +难过nanguo +南海nanhai +南货nanhuo +南极nanji +难解nanjie +南京nanjing +难看nankan +难堪nankan +南面nanmian +难免nanmian +难民nanmin +南宁nanning +男女nannu +赧然nanran +男人nanren +难色nanse +难事nanshi +难受nanshou +难说nanshuo +难题nanti +难听nanting +难为nanwei +男性nanxing +南亚nanya +南洋nanyang +难以nanyi +难友nanyou +难于nanyu +脑nao +闹nao +努*nao +挠nao +恼nao +淖nao +孬nao +垴nao +呶nao +猱nao +瑙nao +硇nao +铙nao +蛲nao +脑袋naodai +脑海naohai +恼火naohuo +脑筋naojin +闹剧naoju +闹事naoshi +哪怕napa +纳入naru +那时nashi +拿手nashou +纳税nashui +那些naxie +哪些naxie +纳新naxin +那样nayang +哪样nayang +那种nazhong +年产量ncl +农产品ncp +南昌市ncs +难道说nds +呢ne +哪*ne +呐*ne +讷ne +内nei +那*nei +哪*nei +馁nei +内部neibu +内存neicun +内地neidi +内阁neige +内涵neihan +内行neihang +内奸neijian +内疚neijiu +内科neike +内乱neiluan +内幕neimu +内勤neiqin +内容neirong +内外neiwai +内销neixiao +内心neixin +内因neiyin +内应neiying +内在neizai +嫩nen +恁nen +能neng +能动nengdong +能否nengfou +能干nenggan +能够nenggou +能力nengli +能量nengliang +能耐nengnai +能人nengren +能手nengshou +能源nengyuan +能者nengzhe +农副产品nfcp +年富力强nflq +能工巧匠ngqj +你ni +泥ni +尼ni +呢*ni +逆ni +拟ni +尿ni +妮ni +霓ni +倪ni +匿ni +腻ni +溺ni +伲ni +坭ni +猊ni +怩ni +昵ni +旎ni +祢*ni +慝ni +睨ni +铌ni +鲵ni +年nian +念nian +粘nian +蔫nian +拈nian +碾nian +撵nian +捻nian +酿nian +廿nian +埝nian +辇nian +黏nian +鲇nian +鲶nian +年初nianchu +年代niandai +念叨niandao +年底niandi +年度niandu +年份nianfen +娘niang +年华nianhua +年画nianhua +年级nianji +年纪nianji +年鉴nianjian +年来nianlai +年利nianli +年历nianli +拈量nianliang +年龄nianling +年迈nianmai +年年niannian +年青nianqing +年轻nianqing +年岁niansui +年头niantou +念头niantou +年限nianxian +年月nianyue +酿造nianzao +年终nianzhong +尿niao +鸟niao +溺*niao +茑niao +嬲niao +脲niao +袅niao +鸟瞰niaokan +逆差nicha +你处nichu +你的nide +拟定niding +拟订niding +镍nie +啮nie +涅nie +捏nie +聂nie +孽nie +镊nie +乜nie +陧nie +蘖nie +嗫nie +颞nie +臬nie +蹑nie +捏造niezao +腻烦nifan +泥浆nijiang +逆境nijing +泥坑nikeng +逆流niliu +你们nimen +您nin +宁ning +凝ning +拧ning +柠ning +狞ning +泞ning +佞ning +苎ning +咛ning +甯ning +聍ning +凝固ninggu +凝结ningjie +宁静ningjing +凝聚ningju +宁可ningke +宁肯ningken +宁日ningri +凝视ningshi +凝望ningwang +宁夏ningxia +宁愿ningyuan +泥泞nining +泥塑nisu +牛niu +扭niu +钮niu +纽niu +拗*niu +狃niu +忸niu +妞niu +纽带niudai +牛犊niudu +纽扣niukou +纽约niuyue +扭转niuzhuan +腻味niwei +你我niwo +拟议niyi +泥沼nizhao +逆转nizhuan +难解难分njnf +南京市njs +南极洲njz +扭亏为盈nkwy +脑力劳动nlld +年老体弱nltr +内蒙古nmg +农贸市场nmsc +那么些nmx +那么样nmy +念念不忘nnbw +难能可贵nnkg +南宁市nns +农nong +弄nong +浓nong +脓nong +侬nong +哝nong +脓包nongbao +农村nongcun +浓度nongdu +农妇nongfu +浓厚nonghou +农会nonghui +农活nonghuo +农具nongju +农历nongli +农林nonglin +农忙nongmang +农民nongmin +弄清nongqing +农时nongshi +农药nongyao +农业nongye +农艺nongyi +浓郁nongyu +耨nou +年轻化nqh +年轻人nqr +那时候nsh +能说会道nshd +南斯拉夫nslf +能上能下nsnx +逆水行舟nsxz +农田水利ntsl +女nu +奴nu +努nu +怒nu +弩nu +胬nu +孥nu +驽nu +恧nu +钕nu +衄nu +暖nuan +暖和nuanhe +暖流nuanliu +暖气nuanqi +奴婢nubi +奴才nucai +虐nue +虐待nuedai +虐疾nueji +女儿nuer +女工nugong +怒吼nuhou +奴化nuhua +怒火nuhuo +努力nuli +奴隶nuli +诺nuo +娜*nuo +挪nuo +懦nuo +糯nuo +傩nuo +搦nuo +喏nuo +锘nuo +挪用nuoyong +奴仆nupu +女人nuren +女色nuse +女士nushi +女性nuxing +女婿nuxu +女子nuzi +能文能武nwnw +弄虚作假nxzj +农作物nzw +你争我夺nzwd +欧o +偶o +哦o +鸥o +殴o +藕o +呕o +沤o +讴o +噢o +怄o +瓯o +耦o +偶然性orx +区*ou +欧ou +偶ou +鸥ou +殴ou +藕ou +呕ou +沤ou +讴ou +怄ou +瓯ou +耦ou +殴打ouda +偶尔ouer +讴歌ouge +偶合ouhe +耦合ouhe +欧姆oumu +怄气ouqi +偶然ouran +藕色ouse +偶数oushu +呕吐outu +欧阳ouyang +欧洲ouzhou +批p +平p +判p +配p +片p +派p +破p +排p +品p +皮p +喷p +盘p +偏p +评p +怕p +培p +普p +贫p +跑p +炮p +怕pa +派pa +爬pa +帕pa +扒*pa +耙*pa +啪pa +趴pa +琶pa +葩pa +杷pa +钯*pa +筢pa +派pai +排pai +拍pai +牌pai +迫*pai +哌pai +徘pai +湃pai +俳pai +蒎pai +排版paiban +拍板paiban +排比paibi +派别paibie +排场paichang +排斥paichi +排除paichu +排队paidui +牌号paihao +徘徊paihuai +排挤paiji +牌价paijia +排列pailie +拍卖paimai +派遣paiqian +排球paiqiu +派生paisheng +派头paitou +排外paiwai +排泄paixie +排演paiyan +牌照paizhao +判pan +盘pan +叛pan +番*pan +潘pan +攀pan +磐pan +盼pan +畔pan +胖pan +拚*pan +爿pan +泮pan +袢pan +襻pan +蟠pan +蹒pan +叛变panbian +判别panbie +盘缠panchan +盘存pancun +叛党pandang +攀登pandeng +盘点pandian +判定panding +判断panduan +攀附panfu +旁pang +膀*pang +磅*pang +乓pang +庞pang +耪pang +胖pang +彷pang +滂pang +逄pang +螃pang +旁边pangbian +庞大pangda +盘亘pangen +旁观pangguan +旁听pangting +旁通pangtong +滂沱pangtuo +庞杂pangza +盘踞panju +判决panjue +叛乱panluan +判明panming +叛逆panni +盘算pansuan +蟠桃pantao +叛徒pantu +盼望panwang +判刑panxing +盘旋panxuan +跑pao +炮pao +刨pao +抛pao +泡pao +咆pao +袍pao +匏pao +狍pao +庖pao +脬pao +疱pao +炮兵paobing +跑步paobu +炮弹paodan +跑道paodao +抛光paoguang +炮火paohuo +炮击paoji +抛锚paomao +泡沫paomo +抛弃paoqi +炮手paoshou +炮台paotai +炮艇paoting +咆哮paoxiao +泡影paoying +炮仗paozhang +炮制paozhi +怕死pasi +疲惫不堪pbbk +迫不急待pbjd +破除迷信pcmx +平等互利pdhl +配pei +培pei +陪pei +胚pei +呸pei +裴pei +赔pei +佩pei +沛pei +辔pei +帔pei +旆pei +锫pei +醅pei +霈pei +陪伴peiban +配备peibei +赔本peiben +赔偿peichang +陪衬peichen +配方peifang +佩服peifu +配合peihe +配给peiji +配件peijian +配角peijiao +赔款peikuan +赔礼peili +配偶peiou +陪审peishen +陪送peisong +胚胎peitai +配套peitao +陪同peitong +培训peixun +培养peiyang +配音peiyin +培育peiyu +配乐peiyue +陪葬peizang +配制peizhi +配置peizhi +培植peizhi +喷pen +盆pen +湓pen +盆地pendi +碰peng +棚peng +蓬peng +朋peng +捧peng +膨peng +砰peng +抨peng +烹peng +澎peng +彭peng +硼peng +篷peng +鹏peng +堋peng +嘭peng +怦peng +蟛peng +碰杯pengbei +碰壁pengbi +蓬勃pengbo +捧场pengchang +抨击pengji +蓬莱penglai +蓬乱pengluan +澎湃pengpai +烹饪pengren +硼砂pengsha +蓬松pengsong +烹调pengtiao +朋友pengyou +膨胀pengzhang +喷溅penjian +盆景penjing +喷射penshe +喷嚏penti +平方公里pfgl +平分秋色pfqs +批pi +皮pi +坏*pi +否*pi +辟*pi +坯pi +脾pi +疲pi +砒pi +霹pi +披pi +劈pi +琵pi +毗pi +啤pi +匹pi +痞pi +僻pi +屁pi +譬pi +丕pi +仳pi +陂*pi +陴pi +邳pi +郫pi +圮pi +埤*pi +鼙pi +芘pi +擗pi +吡*pi +噼pi +庀pi +淠pi +媲pi +纰pi +枇pi +甓pi +睥pi +罴pi +铍pi +癖pi +裨*pi +疋pi +蚍pi +蜱pi +貔pi +片pian +偏pian +便*pian +篇pian +骗pian +扁*pian +谝pian +骈pian +缏*pian +犏pian +胼pian +翩pian +蹁pian +偏差piancha +片断pianduan +片段pianduan +偏废pianfei +篇幅pianfu +偏激pianji +偏见pianjian +骗局pianju +片刻pianke +偏离pianli +片面pianmian +偏旁pianpang +偏僻pianpi +偏颇pianpo +骗取pianqu +骗人pianren +骗术pianshu +偏袒piantan +翩跹pianxian +偏向pianxiang +偏移pianyi +便宜pianyi +篇章pianzhang +骗子pianzi +票piao +漂piao +朴*piao +飘piao +瓢piao +剽piao +莩*piao +嘌piao +嫖piao +骠*piao +缥piao +殍piao +瞟piao +螵piao +漂泊piaobo +票房piaofang +漂浮piaofu +票价piaojia +票据piaoju +漂亮piaoliang +漂流piaoliu +飘流piaoliu +飘落piaoluo +票面piaomian +飘渺piaomiao +飘泊piaopo +剽窃piaoqie +飘然piaoran +飘散piaosan +飘扬piaoyang +飘游piaoyou +疲惫pibei +批驳pibo +撇pie +瞥pie +丿pie +苤pie +氕pie +批发pifa +批复pifu +皮肤pifu +皮革pige +屁股pigu +疲倦pijuan +疲劳pilao +纰漏pilou +披露pilu +品pin +贫pin +频pin +拼pin +苹pin +聘pin +拚pin +姘pin +嫔pin +榀pin +牝pin +颦pin +品尝pinchang +频传pinchuan +拼凑pincou +频带pindai +频道pindao +品德pinde +贫乏pinfa +频繁pinfan +平ping +评ping +瓶ping +凭ping +苹ping +冯*ping +乒ping +坪ping +萍ping +屏ping +俜ping +娉ping +枰ping +鲆ping +平安pingan +评比pingbi +屏蔽pingbi +平常pingchang +平川pingchuan +平淡pingdan +平等pingdeng +平地pingdi +平定pingding +评定pingding +品格pinge +平反pingfan +平凡pingfan +平方pingfang +平分pingfen +评分pingfen +评功pinggong +平衡pingheng +评级pingji +平价pingjia +评价pingjia +评奖pingjiang +凭借pingjie +平静pingjing +平均pingjun +平空pingkong +凭空pingkong +评理pingli +评论pinglun +平面pingmian +平民pingmin +屏幕pingmu +评判pingpan +乒乓pingpang +平平pingping +平壤pingrang +平日pingri +平时pingshi +平手pingshou +评说pingshuo +平素pingsu +平坦pingtan +乒坛pingtan +平稳pingwen +平息pingxi +萍乡pingxiang +平行pingxing +平易pingyi +评议pingyi +平庸pingyong +平原pingyuan +平仄pingze +屏障pingzhang +凭着pingzhe +平整pingzheng +凭证pingzheng +评注pingzhu +贫寒pinhan +品级pinji +贫困pinkun +频率pinlu +品貌pinmao +拼命pinming +品名pinming +品评pinping +聘请pinqing +贫穷pinqiong +聘任pinren +聘书pinshu +拼写pinxie +品行pinxing +品性pinxing +拼音pinyin +品质pinzhi +品种pinzhong +批判pipan +匹配pipei +批评piping +脾气piqi +譬如piru +疲软piruan +批示pishi +脾胃piwei +脾性pixing +辟谣piyao +批语piyu +批阅piyue +批注pizhu +批准pizhun +平均数pjs +披荆斩棘pjzj +评论员ply +跑马观花pmgh +破po +迫po +坡po +泼po +繁*po +朴*po +泊*po +颇po +婆po +魄po +粕po +叵po +陂*po +鄱po +泺*po +珀po +攴po +钋po +钷po +钹*po +皤po +笸po +破案poan +破产pochan +破除pochu +坡度podu +泼妇pofu +破格poge +迫害pohai +破坏pohuai +破获pohuo +迫近pojin +破旧pojiu +泼辣pola +破烂polan +魄力poli +破例poli +破裂polie +破灭pomie +迫切poqie +迫使poshi +破碎posui +破损posun +破土potu +剖pou +裒pou +掊pou +剖解poujie +剖析pouxi +破绽pozhan +蓬蓬勃勃ppbb +普普通通pptt +旁若无人prwr +普通话pth +抛头露面ptlm +普pu +谱pu +扑pu +埔pu +铺pu +暴*pu +葡pu +朴pu +蒲pu +堡*pu +脯*pu +仆pu +莆pu +菩pu +圃pu +浦pu +曝pu +瀑pu +匍pu +噗pu +溥pu +濮pu +璞pu +氆pu +镤pu +镨pu +蹼pu +普遍pubian +普查pucha +扑哧puchi +扑打puda +铺盖pugai +普及puji +铺平puping +仆人puren +菩萨pusa +铺设pushe +朴实pushi +朴素pusu +葡萄putao +普通putong +扑通putong +铺位puwei +谱写puxie +普选puxuan +铺张puzhang +普照puzhao +朴直puzhi +平易近人pyjr +拼音字母pyzm +铺张浪费pzlf +起q +前q +其q +去q +气q +全q +期q +群q +情q +区q +强q +切q +取q +七q +求q +清q +确q +权q +且q +青q +亲爱的qad +情报所qbs +千百万qbw +千变万化qbwh +取长补短qcbd +千锤百炼qcbl +恰到好处qdhc +全党全军和全国qdqg +取而代之qedz +轻而易举qeyj +千方百计qfbj +清规戒律qgjl +勤工俭学qgjx +旗鼓相当qgxd +轻工业qgy +轻工业部qgyb +勤工助学qgzx +权衡利弊qhlb +骑虎难下qhnx +青海省qhs +青红皂白qhzb +起qi +其qi +气qi +期qi +七qi +器qi +齐qi +奇qi +汽qi +企qi +漆qi +欺qi +旗qi +畦qi +启qi +弃qi +歧qi +稽*qi +缉*qi +栖qi +戚qi +妻qi +凄qi +柒qi +沏qi +棋qi +崎qi +脐qi +祈qi +祁qi +骑qi +岂qi +乞qi +契qi +砌qi +迄qi +泣qi +讫qi +亟*qi +亓qi +俟qi +圻qi +芑qi +芪qi +荠*qi +萁qi +萋qi +葺qi +蕲qi +嘁qi +屺qi +岐qi +岖*qi +汔qi +淇qi +骐qi +绮qi +琪qi +琦qi +杞qi +桤qi +槭qi +耆qi +欹qi +祺qi +憩qi +碛qi +颀qi +蛴qi +蜞qi +綦qi +綮qi +蹊qi +鳍qi +麒qi +卡*qia +恰qia +掐qia +洽qia +伽*qia +葜qia +袷*qia +髂qia +恰当qiadang +恰好qiahao +前qian +千qian +钱qian +浅qian +签qian +迁qian +铅qian +潜qian +牵qian +钳qian +纤*qian +谴qian +扦qian +钎qian +仟qian +谦qian +乾qian +黔qian +遣qian +堑qian +嵌qian +欠qian +歉qian +倩qian +佥qian +阡qian +芊qian +芡qian +茜qian +荨qian +掮qian +岍qian +悭qian +慊qian +骞qian +搴qian +褰qian +缱qian +椠qian +犍*qian +肷qian +愆qian +钤qian +虔qian +箬qian +箝qian +前辈qianbei +前边qianbian +浅薄qianbo +钱财qiancai +欠产qianchan +前程qiancheng +签到qiandao +前敌qiandi +签订qianding +签发qianfa +遣返qianfan +前方qianfang +强qiang +将*qiang +枪qiang +抢qiang +墙qiang +腔qiang +呛qiang +羌qiang +蔷qiang +戕qiang +嫱qiang +樯qiang +戗qiang +炝qiang +锖qiang +锵qiang +镪qiang +襁qiang +蜣qiang +羟qiang +跄qiang +墙壁qiangbi +枪毙qiangbi +强辩qiangbian +强大qiangda +枪弹qiangdan +强盗qiangdao +强调qiangdiao +腔调qiangdiao +强度qiangdu +抢夺qiangduo +强攻qianggong +强国qiangguo +强化qianghua +强加qiangjia +强奸qiangjian +抢劫qiangjie +强劲qiangjin +抢救qiangjiu +枪决qiangjue +强烈qianglie +强迫qiangpo +强权qiangquan +强弱qiangruo +枪杀qiangsha +强盛qiangsheng +千古qiangu +牵挂qiangua +蔷薇qiangwei +抢险qiangxian +强行qiangxing +强硬qiangying +强占qiangzhan +强者qiangzhe +强制qiangzhi +枪支qiangzhi +强壮qiangzhuang +前后qianhou +前进qianjin +前景qianjing +迁就qianjiu +歉疚qianjiu +迁居qianju +乾坤qiankun +千里qianli +前例qianli +潜力qianli +牵连qianlian +前列qianlie +浅陋qianlou +前面qianmian +签名qianming +前年qiannian +前期qianqi +千秋qianqiu +前驱qianqu +欠缺qianque +前人qianren +前任qianren +纤弱qianruo +前哨qianshao +牵涉qianshe +歉收qianshou +签署qianshu +遣送qiansong +前提qianti +前天qiantian +欠条qiantiao +前途qiantu +千瓦qianwa +千万qianwan +前往qianwang +前夕qianxi +纤细qianxi +前线qianxian +浅显qianxian +谦虚qianxu +谦逊qianxun +前言qianyan +前沿qianyan +前夜qianye +歉意qianyi +迁移qianyi +牵引qianyin +潜在qianzai +谴责qianze +前者qianzhe +签证qianzheng +牵制qianzhi +钳制qianzhi +签字qianzi +前奏qianzou +桥qiao +瞧qiao +壳*qiao +巧qiao +敲qiao +乔qiao +蕉qiao +橇qiao +锹qiao +悄qiao +侨qiao +鞘qiao +撬qiao +翘qiao +峭qiao +俏qiao +窍qiao +雀*qiao +劁qiao +诮qiao +谯qiao +荞qiao +峤*qiao +愀qiao +憔qiao +缲*qiao +樵qiao +硗qiao +跷qiao +鞒qiao +侨胞qiaobao +桥墩qiaodun +巧计qiaoji +瞧见qiaojian +侨居qiaoju +桥梁qiaoliang +窍门qiaomen +巧妙qiaomiao +桥牌qiaopai +乔迁qiaoqian +悄然qiaoran +侨务qiaowu +敲诈qiaozha +恰似qiasi +洽谈qiatan +岂不qibu +起步qibu +器材qicai +奇才qicai +凄惨qican +起草qicao +汽车qiche +骑车qiche +启程qicheng +起初qichu +凄楚qichu +其次qici +期待qidai +脐带qidai +岂但qidan +启迪qidi +起点qidian +启动qidong +气度qidu +切qie +且qie +砌*qie +茄qie +怯qie +窃qie +伽*qie +郄qie +惬qie +慊*qie +妾qie +挈qie +锲qie +箧qie +窃案qiean +切断qieduan +切合qiehe +窃据qieju +窃取qiequ +怯弱qieruo +切身qieshen +切实qieshi +切题qieti +窃听qieting +切削qiexiao +惬意qieyi +启发qifa +起飞qifei +岂非qifei +气愤qifen +气氛qifen +欺负qifu +气概qigai +乞丐qigai +岂敢qigan +气功qigong +奇怪qiguai +器官qiguan +旗号qihao +漆黑qihei +气候qihou +期货qihuo +契机qiji +奇迹qiji +期间qijian +起见qijian +器件qijian +七届qijie +迄今qijin +起来qilai +凄凉qiliang +欺凌qiling +气流qiliu +歧路qilu +起码qima +骑马qima +启蒙qimeng +奇妙qimiao +器皿qimin +亲qin +侵qin +勤qin +秦qin +钦qin +琴qin +芹qin +擒qin +禽qin +寝qin +沁qin +芩qin +揿qin +吣qin +嗪qin +噙qin +廑*qin +溱qin +檎qin +锓qin +矜*qin +覃qin +螓qin +衾qin +亲爱qinai +亲笔qinbi +岂能qineng +侵犯qinfan +勤奋qinfen +情qing +清qing +青qing +轻qing +倾qing +请qing +亲*qing +庆qing +氢qing +晴qing +卿qing +擎qing +氰qing +顷qing +苘qing +圊qing +檠qing +磬qing +蜻qing +罄qing +箐qing +綮*qing +謦qing +鲭qing +黥qing +清白qingbai +青白qingbai +情报qingbao +情操qingcao +青草qingcao +清查qingcha +清除qingchu +清楚qingchu +青春qingchun +青翠qingcui +清单qingdan +倾倒qingdao +清点qingdian +情调qingdiao +轻浮qingfu +青工qinggong +青海qinghai +庆贺qinghe +清华qinghua +情怀qinghuai +清还qinghuan +请假qingjia +请柬qingjian +请教qingjiao +情节qingjie +清洁qingjie +情景qingjing +顷刻qingke +晴空qingkong +轻快qingkuai +情况qingkuang +青睐qinglai +晴朗qinglang +情理qingli +清理qingli +轻率qinglu +轻蔑qingmie +青年qingnian +氢气qingqi +轻巧qingqiao +请求qingqiu +情趣qingqu +青山qingshan +请示qingshi +清爽qingshuang +青松qingsong +轻松qingsong +倾诉qingsu +青天qingtian +晴天qingtian +倾听qingting +倾吐qingtu +请问qingwen +倾向qingxiang +倾销qingxiao +情形qingxing +清醒qingxing +情绪qingxu +情谊qingyi +轻易qingyi +轻盈qingying +情愿qingyuan +请愿qingyuan +请战qingzhan +轻重qingzhong +倾注qingzhu +庆祝qingzhu +请罪qingzui +侵害qinhai +勤俭qinjian +亲近qinjin +亲眷qinjuan +勤快qinkuai +勤劳qinlao +亲历qinli +亲临qinlin +侵略qinlue +亲密qinmi +勤勉qinmian +钦佩qinpei +亲戚qinqi +亲切qinqie +亲热qinre +亲人qinren +侵入qinru +亲身qinshen +侵蚀qinshi +寝室qinshi +亲手qinshou +亲属qinshu +侵吞qintun +勤务qinwu +亲信qinxin +亲眼qinyan +亲友qinyou +侵占qinzhan +亲自qinzi +穷qiong +琼qiong +邛qiong +茕qiong +穹qiong +蛩qiong +筇qiong +跫qiong +銎qiong +穷国qiongguo +穷苦qiongku +穷困qiongkun +穹隆qionglong +穷期qiongqi +穷人qiongren +穷途qiongtu +气派qipai +欺骗qipian +气魄qipo +乞求qiqiu +崎岖qiqu +齐全qiquan +凄然qiran +起色qise +气色qise +其实qishi +起始qishi +启事qishi +气势qishi +启示qishi +歧视qishi +奇数qishu +汽水qishui +起诉qisu +其他qita +其它qita +奇特qite +气体qiti +汽艇qiting +企图qitu +歧途qitu +求qiu +球qiu +秋qiu +丘qiu +仇*qiu +龟*qiu +邱qiu +囚qiu +酋qiu +泅qiu +俅qiu +巯qiu +犰qiu +湫qiu +逑qiu +遒qiu +楸qiu +赇qiu +虬qiu +蚯qiu +蝤qiu +裘qiu +糗qiu +鳅qiu +鼽qiu +秋播qiubo +球场qiuchang +囚犯qiufan +秋风qiufeng +秋季qiuji +求教qiujiao +囚禁qiujin +求救qiujiu +丘陵qiuling +秋千qiuqian +求情qiuqing +求全qiuquan +秋色qiuse +求实qiushi +秋收qiushou +秋天qiutian +求学qiuxue +求战qiuzhan +求证qiuzheng +求知qiuzhi +求助qiuzhu +期望qiwang +气味qiwei +气温qiwen +奇闻qiwen +欺侮qiwu +气息qixi +栖息qixi +起先qixian +期限qixian +气象qixiang +器械qixie +齐心qixin +气压qiya +欺压qiya +气焰qiyan +企业qiye +起义qiyi +歧义qiyi +起因qiyin +启用qiyong +汽油qiyou +其余qiyu +起源qiyuan +七月qiyue +契约qiyue +欺诈qizha +气质qizhi +旗帜qizhi +其中qizhong +器重qizhong +旗子qizi +妻子qizi +勤俭建国qjjg +勤俭节约qjjy +迄今为止qjwz +取决于qjy +千钧一发qjyf +旗开得胜qkds +全力以赴qlyf +勤劳致富qlzf +千里之行qlzx +亲密无间qmwj +青年人qnr +千篇一律qpyl +清清楚楚qqcc +勤勤恳恳qqkk +切切实实qqss +确确实实qqss +恰恰相反qqxf +求全责备qqzb +恰如其分qrqf +欺人之谈qrzt +七手八脚qsbj +全神贯注qsgz +全世界qsj +切实可行qskx +切身利益qsly +青少年qsn +前所未闻qsww +前所未有qswy +气势汹汹qsxx +齐头并进qtbj +奇谈怪论qtgl +千头万绪qtwx +前提下qtx +去qu +区qu +取qu +曲qu +且*qu +渠qu +屈qu +趋qu +驱qu +趣qu +蛆qu +躯qu +娶qu +龋qu +戌*qu +诎qu +劬qu +苣*qu +蕖qu +蘧qu +岖qu +衢qu +阒qu +璩qu +觑qu +氍qu +朐qu +祛qu +磲qu +鸲qu +癯qu +蛐qu +蠼qu +麴qu +瞿qu +黢qu +全quan +权quan +圈quan +劝quan +泉quan +醛quan +颧quan +痊quan +拳quan +犬quan +券quan +诠quan +荃quan +悛quan +绻quan +辁quan +畎quan +铨quan +蜷quan +筌quan +鬈quan +全部quanbu +全党quandang +劝导quandao +蜷伏quanfu +劝告quangao +全国quanguo +权衡quanheng +全会quanhui +拳击quanji +劝解quanjie +全局quanju +全军quanjun +全力quanli +权利quanli +权力quanli +全貌quanmao +全面quanmian +劝勉quanmian +全民quanmin +全能quanneng +全年quannian +全盘quanpan +全拼quanpin +全球quanqiu +蜷曲quanqu +全权quanquan +全然quanran +全胜quansheng +权术quanshu +泉水quanshui +劝说quanshuo +圈套quantao +全体quanti +拳头quantou +权威quanwei +劝慰quanwei +全文quanwen +全县quanxian +权限quanxian +全校quanxiao +权益quanyi +权宜quanyi +劝诱quanyou +痊愈quanyu +劝止quanzhi +劝阻quanzu +区别qubie +屈才qucai +驱除quchu +取代qudai +渠道qudao +取得qude +取缔qudi +曲调qudiao +驱动qudong +确que +却que +缺que +炔que +瘸que +鹊que +榷que +雀que +阕que +阙que +悫que +确保quebao +缺点quedian +确定queding +缺乏quefa +缺口quekou +确立queli +确切queqie +确认queren +缺少queshao +缺省quesheng +确实queshi +缺席quexi +缺陷quexian +确信quexin +确凿quezao +瘸子quezi +区分qufen +屈服qufu +躯干qugan +区划quhua +曲解qujie +取经qujing +取决qujue +躯壳quke +取乐qule +群qun +裙qun +逡qun +裙带qundai +群岛qundao +去年qunian +群众qunzhong +区区ququ +屈辱quru +驱散qusan +取舍qushe +取胜qusheng +去世qushi +驱使qushi +趋势qushi +躯体quti +区位quwei +区委quwei +趣味quwei +区县quxian +去向quxiang +趋向quxiang +取消quxiao +取信quxin +曲艺quyi +区域quyu +区长quzhang +曲折quzhe +屈指quzhi +驱逐quzhu +曲子quzi +奇形怪状qxgz +全心全意qxqy +气象台qxt +气象万千qxwq +齐心协力qxxl +岂有此理qycl +前因后果qyhg +情有可原qyky +强有力qyl +求之不得qzbd +取之不尽qzbj +轻重缓急qzhj +气壮山河qzsh +千真万确qzwq +人r +如r +日r +认r +入r +任r +热r +然r +容r +让r +润r +弱r +燃r +染r +壤r +绕r +仁r +溶r +刃r +仍r +然ran +燃ran +染ran +冉ran +苒ran +蚺ran +髯ran +燃点randian +然而raner +让rang +壤rang +嚷rang +瓤rang +攘rang +禳rang +穰rang +让步rangbu +让位rangwei +让贤rangxian +然后ranhou +燃料ranliao +染料ranliao +冉冉ranran +燃烧ranshao +绕rao +扰rao +饶rao +荛rao +娆rao +桡rao +扰乱raoluan +如此而已rcey +人才济济rcjj +热re +若*re +惹re +热爱reai +热潮rechao +热忱rechen +热诚recheng +热带redai +热火rehuo +热量reliang +热烈relie +人ren +认ren +任ren +仁ren +刃ren +忍ren +壬ren +韧ren +妊ren +纫ren +仞ren +荏ren +葚ren +饪ren +轫ren +稔ren +衽ren +热闹renao +人才rencai +人次renci +仁慈renci +认错rencuo +人大renda +韧带rendai +人道rendao +认得rende +认定rending +人防renfang +仍reng +扔reng +扔掉rengdiao +人格renge +仍旧rengjiu +人工rengong +认购rengou +仍然rengran +任何renhe +人家renjia +人间renjian +人杰renjie +认可renke +人口renkou +人类renlei +人力renli +人们renmen +任免renmian +人民renmin +任命renming +忍耐rennai +任凭renping +任期renqi +认清renqing +人权renquan +荏苒renran +忍让renrang +人人renren +人参renshen +人生rensheng +人事renshi +人士renshi +认识renshi +人手renshou +忍受renshou +认输renshu +忍痛rentong +人为renwei +认为renwei +人物renwu +任务renwu +人心renxin +忍心renxin +人选renxuan +任意renyi +仁义renyi +任用renyong +人员renyuan +认帐renzhang +认真renzhen +人质renzhi +任职renzhi +认罪renzui +认作renzuo +热切reqie +热情reqing +惹事reshi +热线rexian +热心rexin +热血rexue +人工合成rghc +热火朝天rhct +如虎添翼rhty +日ri +日报ribao +日本riben +日产richan +日常richang +日程richeng +日光riguang +日后rihou +日记riji +日久rijiu +日历rili +日落riluo +日内rinei +日期riqi +日夜riye +日益riyi +日用riyong +日照rizhao +日中rizhong +日子rizi +软件包rjb +人杰地灵rjdl +人尽其才rjqc +如饥似渴rjsk +日久天长rjtc +任劳任怨rlry +热泪盈眶rlyk +人民币rmb +人民代表大会rmdh +人民日报rmrb +燃眉之急rmzj +容rong +溶rong +荣rong +熔rong +融rong +绒rong +戎rong +茸rong +蓉rong +冗rong +嵘rong +狨rong +榕rong +肜rong +蝾rong +熔点rongdian +容光rongguang +融合ronghe +溶化ronghua +熔化ronghua +融化ronghua +融会ronghui +荣获ronghuo +容积rongji +溶解rongjie +容量rongliang +戎马rongma +容貌rongmao +容纳rongna +融洽rongqia +容忍rongren +荣辱rongru +容身rongshen +绒线rongxian +荣幸rongxing +容许rongxu +荣耀rongyao +溶液rongye +容易rongyi +荣誉rongyu +溶质rongzhi +肉rou +揉rou +柔rou +糅rou +蹂rou +鞣rou +柔和rouhe +肉麻rouma +柔软rouruan +肉体routi +任人为贤rrwx +日日夜夜rryy +人生观rsg +认识论rsl +惹事生非rssf +如上所述rsss +如ru +入ru +儒ru +乳ru +茹ru +蠕ru +孺ru +辱ru +汝ru +褥ru +蓐ru +薷ru +嚅ru +洳ru +溽ru +濡ru +缛ru +铷ru +襦ru +颥ru +软ruan +阮ruan +朊ruan +软骨ruangu +软件ruanjian +软禁ruanjin +软盘ruanpan +如常ruchang +如此ruci +入党rudang +蠕动rudong +乳房rufang +如果ruguo +如何ruhe +瑞rui +锐rui +蕊rui +芮rui +蕤rui +枘rui +睿rui +蚋rui +锐利ruili +瑞雪ruixue +锐意ruiyi +儒家rujia +如今rujin +辱骂ruma +入门rumen +入迷rumi +润run +闰run +润滑runhua +弱ruo +若ruo +偌ruo +弱点ruodian +若干ruogan +若是ruoshi +弱小ruoxiao +如期ruqi +入侵ruqin +如若ruruo +儒生rusheng +入手rushou +如同rutong +如下ruxia +入选ruxuan +如意ruyi +如愿ruyuan +入帐ruzhang +人武部rwb +若无其事rwqs +人言可畏rykw +日用品ryp +若有所思ryss +人之长情rzcq +是s +上s +时s +生s +说s +社s +深s +水s +所s +三s +十s +使s +事s +数s +四s +实s +少s +式s +山s +手s +撒sa +萨sa +洒sa +卅sa +仨sa +挲sa +脎sa +飒sa +撒谎sahuang +塞sai +思*sai +赛sai +腮sai +鳃sai +噻sai +赛车saiche +塞子saizi +撒娇sajiao +三san +散san +叁san +伞san +馓san +毵san +糁san +散步sanbu +散布sanbu +散发sanfa +三废sanfei +桑sang +丧sang +嗓sang +搡sang +磉sang +颡sang +丧命sangming +丧失sangshi +三国sanguo +三好sanhao +散会sanhui +三角sanjiao +三届sanjie +散失sanshi +散文sanwen +三月sanyue +扫sao +梢*sao +搔sao +骚sao +嫂sao +埽sao +缫sao +缲sao +臊sao +瘙sao +鳋sao +扫除saochu +扫荡saodang +扫地saodi +骚动saodong +骚乱saoluan +扫描saomiao +扫墓saomu +骚扰saorao +瘙痒saoyang +扫帚saozhou +洒脱satuo +说不定sbd +舍不得sbd +说不过去sbgq +说不来sbl +数不胜数sbss +素不相识sbxs +身不由己sbyj +上层建筑scjz +生产力scl +生产率scl +水产品scp +四川省scs +市场调节sctj +市场信息scxx +生动活泼sdhp +山东省sds +水电站sdz +色se +塞*se +瑟se +涩se +啬se +铯se +穑se +视而不见sebj +色彩secai +色调sediao +色盲semang +森sen +僧seng +僧侣senglu +森林senlin +森严senyan +色情seqing +瑟瑟sese +十二月sey +色泽seze +司法部sfb +赏罚分明sffm +说服力sfl +手风琴sfq +三番五次sfwc +四个现代化sgxh +手工业sgy +沙sha +杀sha +砂sha +啥sha +纱sha +莎sha +刹sha +傻sha +煞sha +杉sha +厦*sha +唼sha +嗄*sha +挲*sha +歃sha +铩sha +痧sha +裟sha +霎sha +鲨sha +煞白shabai +刹车shache +煞车shache +沙发shafa +傻瓜shagua +沙皇shahuang +色*shai +筛shai +晒shai +晒台shaitai +砂烬shajin +沙龙shalong +沙漠shamo +山shan +单*shan +闪shan +善shan +珊shan +扇shan +陕shan +掸*shan +苫shan +杉shan +删shan +煽shan +衫shan +擅shan +赡shan +膳shan +汕shan +缮shan +栅*shan +剡shan +讪shan +鄯shan +埏shan +芟shan +潸shan +姗shan +嬗shan +骟shan +膻shan +禅*shan +钐shan +疝shan +蟮shan +舢shan +跚shan +鳝shan +刹那shana +山坳shanao +陕北shanbei +擅长shanchang +删除shanchu +山川shanchuan +山地shandi +闪电shandian +扇动shandong +煽动shandong +山东shandong +山峰shanfeng +上shang +商shang +伤shang +尚shang +汤*shang +墒shang +赏shang +晌shang +裳shang +垧shang +绱shang +殇shang +熵shang +觞shang +删改shangai +山岗shangang +山冈shangang +上班shangban +上报shangbao +上边shangbian +商标shangbiao +上部shangbu +上策shangce +上层shangceng +商场shangchang +上次shangci +赏赐shangci +上当shangdang +上等shangdeng +上帝shangdi +商店shangdian +上调shangdiao +商定shangding +上访shangfang +伤感shanggan +上告shanggao +赏光shangguang +上海shanghai +伤害shanghai +商行shanghang +上级shangji +上集shangji +上进shangjin +上空shangkong +上来shanglai +商量shangliang +上流shangliu +上门shangmen +上面shangmian +上年shangnian +山沟shangou +商品shangpin +商洽shangqia +上前shangqian +尚且shangqie +上去shangqu +商榷shangque +商人shangren +上任shangren +上山shangshan +上升shangsheng +赏识shangshi +上述shangshu +上司shangsi +上诉shangsu +商谈shangtan +商讨shangtao +闪光shanguang +上文shangwen +上午shangwu +商务shangwu +上下shangxia +上限shangxian +伤心shangxin +上旬shangxun +上演shangyan +商业shangye +商议shangyi +上映shangying +上游shangyou +上涨shangzhang +上阵shangzhen +山河shanhe +善后shanhou +删节shanjie +善良shanliang +山林shanlin +山岭shanling +山脉shanmai +杉木shanmu +山区shanqu +扇区shanqu +山水shanshui +闪烁shanshuo +山头shantou +山西shanxi +陕西shanxi +赡养shanyang +闪耀shanyao +善意shanyi +善于shanyu +善战shanzhan +擅自shanzi +少shao +烧shao +稍shao +绍shao +召*shao +哨shao +梢shao +鞘*shao +捎shao +芍shao +勺shao +韶shao +邵shao +劭shao +苕shao +潲shao +杓*shao +蛸shao +筲shao +艄shao +哨兵shaobing +艄公shaogong +烧毁shaohui +少见shaojian +哨卡shaoka +少量shaoliang +少年shaonian +少女shaonu +烧伤shaoshang +少数shaoshu +哨所shaosuo +稍微shaowei +少许shaoxu +稍许shaoxu +少爷shaoye +少有shaoyou +少于shaoyu +少壮shaozhuang +沙哑shaya +砂眼shayan +傻子shazi +社she +设she +射she +摄she +舌she +折*she +涉she +舍she +蛇she +奢she +赊she +赦she +慑she +厍she +佘she +摺*she +猞she +滠she +歙she +畲she +麝she +设备shebei +射程shecheng +奢侈shechi +舍得shede +设法shefa +慑服shefu +赊购shegou +奢华shehua +社会shehui +社稷sheji +涉及sheji +设计sheji +射击sheji +舍己sheji +社交shejiao +设立sheli +涉猎shelie +社论shelun +深shen +身shen +神shen +什*shen +伸shen +参*shen +甚shen +渗shen +沈shen +肾shen +审shen +申shen +慎shen +砷shen +呻shen +娠shen +绅shen +婶shen +诜shen +谂shen +莘shen +葚*shen +哂shen +渖shen +椹shen +胂shen +矧shen +蜃shen +深奥shenao +申报shenbao +身边shenbian +申辩shenbian +身材shencai +审查shencha +深沉shenchen +深处shenchu +审处shenchu +审定shending +深度shendu +甚而shener +身分shenfen +身份shenfen +生sheng +胜sheng +声sheng +省sheng +升sheng +盛sheng +绳sheng +剩sheng +圣sheng +牲sheng +乘*sheng +甥sheng +嵊sheng +渑*sheng +晟sheng +眚sheng +笙sheng +生财shengcai +生产shengchan +生成shengcheng +牲畜shengchu +生存shengcun +盛大shengda +省得shengde +胜地shengdi +盛典shengdian +声调shengdiao +生动shengdong +省份shengfen +胜负shengfu +省府shengfu +生根shenggen +升华shenghua +省会shenghui +盛会shenghui +生活shenghuo +生机shengji +生计shengji +升级shengji +圣洁shengjie +圣经shengjing +盛开shengkai +牲口shengkou +盛况shengkuang +生理shengli +胜利shengli +省力shengli +省略shenglue +生命shengming +声明shengming +盛名shengming +生怕shengpa +生僻shengpi +生平shengping +升旗shengqi +生前shengqian +升迁shengqian +盛情shengqing +生趣shengqu +省去shengqu +胜任shengren +生日shengri +省事shengshi +盛事shengshi +声势shengshi +生疏shengshu +生死shengsi +胜似shengsi +胜诉shengsu +绳索shengsuo +生态shengtai +声讨shengtao +声望shengwang +省委shengwei +生物shengwu +生息shengxi +剩下shengxia +盛夏shengxia +圣贤shengxian +生效shengxiao +生肖shengxiao +盛行shengxing +生涯shengya +生意shengyi +声音shengyin +生于shengyu +生育shengyu +胜于shengyu +声誉shengyu +剩余shengyu +声援shengyuan +生长shengzhang +省长shengzhang +声张shengzhang +胜仗shengzhang +生殖shengzhi +圣旨shengzhi +盛装shengzhuang +审核shenhe +深厚shenhou +深化shenhua +神话shenhua +甚或shenhuo +审计shenji +神经shenjing +深刻shenke +审理shenli +什么shenme +审美shenmei +神秘shenmi +申明shenming +审判shenpan +身旁shenpang +审批shenpi +神气shenqi +神奇shenqi +深浅shenqian +深切shenqie +深情shenqing +申请shenqing +身躯shenqu +深入shenru +渗入shenru +神圣shensheng +身世shenshi +绅士shenshi +伸手shenshou +申述shenshu +神速shensu +申诉shensu +伸缩shensuo +神态shentai +身体shenti +神通shentong +渗透shentou +审问shenwen +神仙shenxian +审讯shenxun +沈阳shenyang +审议shenyi +呻吟shenyin +身影shenying +深远shenyuan +申冤shenyuan +审阅shenyue +深造shenzao +伸张shenzhang +深圳shenzhen +甚至shenzhi +深重shenzhong +慎重shenzhong +神州shenzhou +舍弃sheqi +赊欠sheqian +设施sheshi +社团shetuan +奢望shewang +射线shexian +涉嫌shexian +设想shexiang +赊销shexiao +设宴sheyan +摄影sheying +社员sheyuan +社长shezhang +设置shezhi +涉足shezu +社会公德shgd +是shi +时shi +十shi +使shi +事shi +实shi +式shi +识shi +世shi +试shi +石shi +什shi +示shi +市shi +史shi +师shi +始shi +施shi +士shi +势shi +湿shi +适shi +食shi +失shi +视shi +室shi +氏shi +似*shi +蚀shi +诗shi +释shi +殖*shi +拾shi +饰shi +驶shi +匙*shi +狮shi +尸shi +虱shi +矢shi +屎shi +柿shi +拭shi +誓shi +逝shi +嗜shi +噬shi +仕shi +侍shi +恃shi +嘘*shi +峙*shi +谥shi +埘shi +莳shi +蓍shi +弑shi +轼shi +贳shi +炻shi +铈shi +螫shi +舐shi +筮shi +酾shi +豕shi +鲥shi +鲺shi +失败shibai +势必shibi +事变shibian +师表shibiao +识别shibie +失策shice +史册shice +视察shicha +时常shichang +失常shichang +市场shichang +时辰shichen +失传shichuan +侍从shicong +时代shidai +世代shidai +适当shidang +是的shide +实地shidi +试点shidian +失调shidiao +失掉shidiao +事端shiduan +拾掇shiduo +时而shier +示范shifan +师范shifan +施放shifang +释放shifang +是非shifei +时分shifen +十分shifen +侍奉shifeng +是否shifou +师傅shifu +实干shigan +是个shige +诗歌shige +施工shigong +事故shigu +世故shigu +尸骨shigu +使馆shiguan +时光shiguang +嗜好shihao +适合shihe +时候shihou +事后shihou +侍候shihou +使唤shihuan +实惠shihui +失火shihuo +时机shiji +事迹shiji +实际shiji +世纪shiji +试剂shiji +史籍shiji +施加shijia +市价shijia +时间shijian +事件shijian +世间shijian +实践shijian +视角shijiao +市郊shijiao +使节shijie +十届shijie +世界shijie +使劲shijin +市井shijing +时局shiju +视觉shijue +时刻shike +石刻shike +市侩shikuai +实况shikuang +事理shili +实力shili +事例shili +势利shili +失利shili +势力shili +视力shili +示例shili +失恋shilian +适量shiliang +矢量shiliang +拾零shiling +失灵shiling +适龄shiling +时髦shimao +失密shimi +市民shimin +使命shiming +市内shinei +室内shinei +诗篇shipian +食品shipin +视频shipin +识破shipo +时期shiqi +事前shiqian +失窃shiqie +事情shiqing +实情shiqing +时区shiqu +时取shiqu +失去shiqu +市区shiqu +诗人shiren +市容shirong +湿润shirun +示弱shiruo +失散shisan +失色shise +施舍shishe +师生shisheng +失声shisheng +时时shishi +时事shishi +适时shishi +事实shishi +失事shishi +实施shishi +失实shishi +逝世shishi +史诗shishi +失势shishi +誓师shishi +尸首shishou +失守shishou +实数shishu +施属shishu +世俗shisu +失算shisuan +事态shitai +试探shitan +食堂shitang +实体shiti +尸体shiti +石头shitou +势头shitou +师团shituan +十万shiwan +失望shiwang +市委shiwei +示威shiwei +时务shiwu +事物shiwu +事务shiwu +实物shiwu +食物shiwu +饰物shiwu +失误shiwu +实习shixi +事先shixian +视线shixian +实现shixian +试想shixiang +事项shixiang +实效shixiao +试销shixiao +失信shixin +实行shixing +试行shixing +施行shixing +失修shixiu +实学shixue +史学shixue +实验shiyan +试验shiyan +食言shiyan +誓言shiyan +式样shiyang +事业shiye +实业shiye +失业shiye +视野shiye +时宜shiyi +事宜shiyi +示意shiyi +诗意shiyi +适宜shiyi +释疑shiyi +适应shiying +使用shiyong +实用shiyong +试用shiyong +适用shiyong +事由shiyou +石油shiyou +誓由shiyou +适于shiyu +誓愿shiyuan +十月shiyue +失约shiyue +实在shizai +实战shizhan +施展shizhan +市长shizhang +师长shizhang +使者shizhe +侍者shizhe +失真shizhen +市镇shizhen +市政shizheng +试制shizhi +实质shizhi +市制shizhi +食指shizhi +失职shizhi +适中shizhong +示众shizhong +始终shizhong +时装shizhuang +师资shizi +十足shizu +实足shizu +失足shizu +始祖shizu +手shou +受shou +收shou +首shou +守shou +熟*shou +授shou +寿shou +兽shou +售shou +瘦shou +狩shou +绶shou +艏shou +守备shoubei +手表shoubiao +收兵shoubing +收藏shoucang +手册shouce +首倡shouchang +寿辰shouchen +收成shoucheng +首创shouchuang +首次shouci +收存shoucun +寿诞shoudan +受到shoudao +守敌shoudi +首度shoudu +首都shoudu +手段shouduan +守法shoufa +首犯shoufan +收复shoufu +首府shoufu +手感shougan +手稿shougao +收割shouge +收购shougou +受害shouhai +守候shouhou +守护shouhu +收回shouhui +受贿shouhui +收获shouhuo +收集shouji +售价shoujia +受奖shoujiang +授奖shoujiang +手脚shoujiao +收缴shoujiao +首届shoujie +守旧shoujiu +收据shouju +授课shouke +受理shouli +收敛shoulian +首领shouling +收留shouliu +收录shoulu +收买shoumai +授命shouming +寿命shouming +首脑shounao +首批shoupi +授权shouquan +收容shourong +收入shouru +手软shouruan +瘦弱shouruo +首饰shoushi +手术shoushu +收缩shousuo +收条shoutiao +收听shouting +收尾shouwei +首尾shouwei +首先shouxian +首相shouxiang +瘦小shouxiao +收效shouxiao +手续shouxu +瘦削shouxue +收养shouyang +首要shouyao +受益shouyi +收益shouyi +兽医shouyi +受用shouyong +授予shouyu +守则shouze +首长shouzhang +收支shouzhi +生活上shs +上海市shs +数shu +书shu +树shu +属shu +术shu +输shu +述shu +熟shu +束shu +鼠shu +疏shu +殊shu +舒shu +蔬shu +薯shu +叔shu +署shu +枢shu +梳shu +抒shu +淑shu +赎shu +孰shu +暑shu +曙shu +蜀shu +黍shu +戍shu +竖shu +墅shu +庶shu +漱shu +恕shu +俞*shu +丨shu +倏shu +塾shu +菽shu +摅shu +沭shu +澍shu +姝shu +纾shu +毹shu +腧shu +殳shu +秫shu +刷shua +耍shua +唰shua +衰shuai +帅shuai +摔shuai +甩shuai +蟀shuai +衰败shuaibai +摔打shuaida +摔交shuaijiao +衰竭shuaijie +衰老shuailao +衰弱shuairuo +衰退shuaitui +衰亡shuaiwang +耍赖shualai +栓shuan +拴shuan +闩shuan +涮shuan +双shuang +霜shuang +爽shuang +泷*shuang +孀shuang +双边shuangbian +双方shuangfang +爽口shuangkou +爽快shuangkuai +爽朗shuanglang +双拼shuangpin +双重shuangzhong +耍弄shuanong +刷洗shuaxi +刷新shuaxin +书报shubao +书本shuben +蔬菜shucai +舒畅shuchang +输出shuchu +树丛shucong +疏导shudao +书店shudian +数额shue +抒发shufa +书法shufa +舒服shufu +束缚shufu +曙光shuguang +蜀汉shuhan +疏忽shuhu +倏忽shuhu +书画shuhua +水shui +说*shui +谁shui +睡shui +税shui +水稻shuidao +水电shuidian +水分shuifen +水果shuiguo +水火shuihuo +水晶shuijing +水库shuiku +水利shuili +水流shuiliu +睡眠shuimian +水平shuiping +税收shuishou +税务shuiwu +水下shuixia +水性shuixing +水源shuiyuan +水灾shuizai +谁知shuizhi +书记shuji +书籍shuji +暑假shujia +数据shuju +书刊shukan +数理shuli +树立shuli +竖立shuli +熟练shulian +数量shuliang +数列shulie +疏漏shulou +数落shuluo +数码shuma +书面shumian +庶民shumin +数目shumu +书目shumu +树木shumu +顺shun +吮shun +瞬shun +舜shun +顺便shunbian +顺差shuncha +顺次shunci +顺从shuncong +顺当shundang +顺道shundao +顺风shunfeng +枢纽shuniu +顺利shunli +顺路shunlu +瞬时shunshi +顺势shunshi +顺心shunxin +顺序shunxu +顺应shunying +顺着shunzhuo +说shuo +数*shuo +硕shuo +朔shuo +烁shuo +蒴shuo +搠shuo +妁shuo +槊shuo +铄shuo +说到shuodao +说道shuodao +说动shuodong +说法shuofa +说服shuofu +硕果shuoguo +说话shuohua +说教shuojiao +说明shuoming +说情shuoqing +硕士shuoshi +述评shuping +署期shuqi +暑期shuqi +抒情shuqing +熟人shuren +输入shuru +疏散shusan +属实shushi +熟识shushi +舒适shushi +束手shushou +叔叔shushu +数说shushuo +述说shushuo +输送shusong +疏松shusong +舒坦shutan +疏通shutong +熟悉shuxi +属相shuxiang +舒心shuxin +书信shuxin +属性shuxing +数学shuxue +属于shuyu +术语shuyu +疏远shuyuan +舒展shuzhan +数值shuzhi +树脂shuzhi +梳妆shuzhuang +数字shuzi +赎罪shuzui +售货员shy +社会主义shzy +四si +思si +死si +斯si +丝si +似si +司si +饲si +食*si +私si +厕*si +撕si +嘶si +肆si +寺si +嗣si +伺si +巳si +厮si +俟*si +兕si +厶si +咝si +汜si +泗si +澌si +姒si +驷si +缌si +祀si +锶si +鸶si +耜si +蛳si +笥si +死板siban +四边sibian +死别sibie +思潮sichao +丝绸sichou +四处sichu +四川sichuan +死党sidang +死敌sidi +司法sifa +四方sifang +四海sihai +丝毫sihao +嗣后sihou +似乎sihu +四化sihua +死缓sihuan +撕毁sihui +死活sihuo +四季siji +司机siji +私交sijiao +四届sijie +思考sikao +私利sili +私了siliao +司令siling +思路silu +四面simian +思念sinian +私念sinian +死去siqu +私人siren +死伤sishang +私事sishi +死尸sishi +死水sishui +思索sisuo +四体siti +私吞situn +死亡siwang +思维siwei +斯文siwen +私下sixia +思想sixiang +四项sixiang +死心sixin +私心sixin +肆行sixing +死刑sixing +私有siyou +私欲siyu +寺院siyuan +四月siyue +死者sizhe +四周sizhou +私自sizi +死罪sizui +拾金不昧sjbm +身经百战sjbz +书记处sjc +世界观sjg +舍己救人sjjr +数据库sjk +省军区sjq +杀鸡取蛋sjqd +实际上sjs +设计所sjs +试金石sjs +舍己为人sjwr +设计院sjy +随机应变sjyb +十进制sjz +石家庄sjz +适可而止skez +数理化slh +收录机slj +十六进制sljz +三令五申slws +司令员sly +四面八方smbf +手忙脚乱smjl +生命力sml +说明书sms +什么样smy +深谋远虑smyl +数目字smz +松song +送song +宋song +颂song +耸song +怂song +讼song +诵song +凇song +菘song +崧song +嵩song +忪song +悚song +淞song +竦song +松绑songbang +送别songbie +松弛songchi +松动songdong +颂歌songge +松劲songjin +松快songkuai +耸立songli +送礼songli +松散songsan +松涛songtao +松懈songxie +颂扬songyang +怂恿songyong +送葬songzang +送终songzhong +搜sou +艘sou +擞sou +嗽sou +叟sou +薮sou +嗖sou +嗾sou +馊sou +溲sou +飕sou +瞍sou +锼sou +螋sou +搜查soucha +搜集souji +搜索sousuo +搜寻souxun +售票处spc +食品工业spgy +水平线spx +生气勃勃sqbb +诗情画意sqhy +盛气凌人sqlr +山穷水尽sqsj +十全十美sqsm +首屈一指sqyz +四人帮srb +损人利己srlj +深入浅出srqc +似是而非ssef +时时刻刻sskk +姗姗来迟sslc +实事求是ssqs +事实上sss +随时随地sssd +善始善终sssz +顺水推舟sstz +四通公司stgs +四通集团stjt +身体力行stlx +生态平衡stph +素su +速su +苏su +塑su +缩su +俗su +诉su +宿su +肃su +酥su +粟su +僳su +溯su +夙su +谡su +蔌su +嗉su +愫su +涑su +簌su +觫su +稣su +算suan +酸suan +蒜suan +狻suan +酸楚suanchu +算法suanfa +算计suanji +算了suanle +算盘suanpan +算术suanshu +酸疼suanteng +酸痛suantong +素材sucai +速成sucheng +苏丹sudan +速度sudu +俗话suhua +随sui +穗sui +碎sui +虽sui +岁sui +尿*sui +隋sui +绥sui +髓sui +遂sui +隧sui +祟sui +谇sui +荽sui +濉sui +邃sui +燧sui +眭sui +睢sui +随笔suibi +随便suibian +随处suichu +随从suicong +随地suidi +随和suihe +随后suihou +随机suiji +随即suiji +虽然suiran +随身suishen +随时suishi +随手suishou +岁数suishu +虽说suishuo +随同suitong +随心suixin +随行suixing +随意suiyi +遂意suiyi +岁月suiyue +虽则suize +随着suizhe +诉苦suku +苏联sulian +塑料suliao +速率sulu +素描sumiao +肃穆sumu +损sun +孙sun +笋sun +荪sun +狲sun +飧sun +榫sun +隼sun +损害sunhai +损耗sunhao +损坏sunhuai +损伤sunshang +损失sunshi +孙子sunzi +所suo +缩suo +锁suo +索suo +莎*suo +蓑suo +梭suo +唆suo +琐suo +唢suo +嗦suo +嗍suo +娑suo +桫suo +挲*suo +睃suo +羧suo +所得suode +缩短suoduan +缩减suojian +锁链suolian +所能suoneng +索取suoqu +唆使suoshi +所属suoshu +琐碎suosui +所为suowei +所谓suowei +缩小suoxiao +缩写suoxie +琐屑suoxie +索性suoxing +所以suoyi +索引suoyin +缩影suoying +所有suoyou +所在suozai +所长suozhang +所至suozhi +梭子suozi +肃清suqing +苏区suqu +宿舍sushe +素数sushu +诉说sushuo +诉讼susong +速效suxiao +速写suxie +苏醒suxing +素养suyang +宿营suying +溯源suyuan +宿愿suyuan +夙愿suyuan +塑造suzao +速战suzhan +素质suzhi +苏州suzhou +苏维埃swa +税务局swj +手舞足蹈swzd +少先队sxd +身心健康sxjk +思想上sxs +山西省sxs +陕西省sxs +顺息万变sxwb +所向无敌sxwd +思想性sxx +商业部syb +说一不二sybe +收音机syj +使用价值syjz +所有权syq +沈阳市sys +实用性syx +十一月syy +所有制syz +私有制syz +时至今日szjr +三中全会szqh +始终如一szry +深圳四通szst +所作所为szsw +甚至于szy +他t +同t +它t +提t +题t +体t +图t +天t +头t +通t +条t +特t +土t +团t +统t +台t +她t +太t +套t +铁t +他ta +它ta +她ta +塔ta +踏ta +塌ta +獭ta +挞ta +蹋ta +拓*ta +嗒*ta +闼ta +溻ta +漯*ta +遢ta +榻ta +沓ta +铊ta +趿ta +鳎ta +踏步tabu +他的tade +它的tade +她的tade +塌方tafang +台tai +太tai +态tai +胎tai +抬tai +泰tai +苔tai +酞tai +汰tai +邰tai +薹tai +呔*tai +骀*tai +肽tai +炱tai +钛tai +跆tai +鲐tai +台北taibei +台词taici +态度taidu +台风taifeng +台阶taijie +太平taiping +泰然tairan +泰山taishan +态势taishi +太太taitai +抬头taitou +台湾taiwan +太阳taiyang +太原taiyuan +天安门tam +他们tamen +它们tamen +她们tamen +谈tan +碳tan +探tan +炭tan +弹*tan +坦tan +贪tan +滩tan +坍tan +摊tan +瘫tan +坛tan +檀tan +痰tan +潭tan +谭tan +毯tan +袒tan +叹tan +郯tan +澹tan +昙tan +忐tan +钽tan +锬tan +镡*tan +坦白tanbai +探测tance +探访tanfang +谈锋tanfeng +叹服tanfu +堂tang +糖tang +唐tang +塘tang +汤tang +搪tang +棠tang +膛tang +倘tang +躺tang +淌tang +趟tang +烫tang +傥tang +帑tang +溏tang +瑭tang +樘tang +铴tang +镗tang +耥tang +螗tang +螳tang +羰tang +醣tang +倘不tangbu +搪瓷tangci +弹弓tangong +倘若tangruo +搪塞tangsai +烫伤tangshang +堂堂tangtang +唐突tangtu +弹劾tanhe +袒护tanhu +谈话tanhua +瘫痪tanhuan +探究tanjiu +坦克tanke +贪婪tanlan +坦率tanlu +谈论tanlun +摊派tanpai +谈判tanpan +叹气tanqi +探亲tanqin +弹琴tanqin +坦然tanran +探索tansuo +探讨tantao +谈天tantian +探听tanting +贪图tantu +谈吐tantu +滩涂tantu +探望tanwang +探问tanwen +贪污tanwu +叹息tanxi +探险tanxian +谈心tanxin +弹性tanxing +探询tanxun +贪赃tanzang +套tao +讨tao +逃tao +陶tao +萄tao +桃tao +掏tao +涛tao +滔tao +绦tao +淘tao +鼗tao +叨*tao +啕tao +洮tao +韬tao +焘tao +饕tao +逃奔taoben +逃避taobi +逃兵taobing +逃窜taocuan +逃遁taodun +讨伐taofa +讨饭taofan +套购taogou +讨好taohao +讨还taohuan +讨价taojia +桃李taoli +韬略taolue +讨论taolun +逃命taoming +逃难taonan +逃跑taopao +淘气taoqi +逃生taosheng +淘汰taotai +滔滔taotao +逃脱taotuo +逃亡taowang +讨厌taoyan +陶冶taoye +桃子taozi +逃走taozou +陶醉taozui +踏青taqing +他人taren +踏实tashi +他说tashuo +他乡taxiang +挑拨离间tblj +台北市tbs +贪便宜tby +统筹兼顾tcjg +铁道部tdb +土地改革tdgg +同等学历tdxl +特te +忒te +忑te +慝*te +铽te +特别tebie +特产techan +特长techang +特出techu +特此teci +特大teda +特等tedeng +特地tedi +特点tedian +特定teding +特级teji +特技teji +特急teji +特将tejiang +特刊tekan +特快tekuai +特例teli +腾teng +疼teng +藤teng +誊teng +滕teng +疼爱tengai +腾达tengda +誊写tengxie +特派tepai +特区tequ +特权tequan +托儿所tes +特色tese +特使teshi +特殊teshu +特为tewei +特务tewu +特效texiao +特写texie +特性texing +特邀teyao +特意teyi +特有teyou +特约teyue +特征tezheng +特制tezhi +特种tezhong +突飞猛进tfmj +铁饭碗tfw +同甘共苦tggk +提货单thd +谈何容易thry +提ti +题ti +体ti +替ti +梯ti +惕ti +剔ti +踢ti +锑ti +蹄ti +啼ti +嚏ti +涕ti +剃ti +屉ti +倜ti +荑*ti +悌ti +逖ti +绨*ti +缇ti +鹈ti +裼ti +醍ti +天tian +田tian +添tian +填tian +甜tian +佃*tian +恬tian +舔tian +腆tian +掭tian +忝tian +阗tian +殄tian +畋tian +填报tianbao +天边tianbian +填表tianbiao +填补tianbu +天才tiancai +天长tianchang +填充tianchong +天地tiandi +田地tiandi +天鹅tiane +天府tianfu +天赋tianfu +天机tianji +天际tianji +添加tianjia +天津tianjin +恬静tianjing +天空tiankong +填空tiankong +天理tianli +天良tianliang +天亮tianliang +甜美tianmei +甜蜜tianmi +天明tianming +天平tianping +天气tianqi +天桥tianqiao +天然tianran +天壤tianrang +天色tianse +天上tianshang +天生tiansheng +天使tianshi +天堂tiantang +天体tianti +天天tiantian +甜头tiantou +天文tianwen +天下tianxia +天险tianxian +天仙tianxian +天性tianxing +天涯tianya +田野tianye +天真tianzhen +天职tianzhi +添置tianzhi +天资tianzi +条tiao +调*tiao +跳tiao +挑tiao +迢tiao +眺tiao +佻tiao +苕*tiao +祧tiao +窕tiao +蜩tiao +笤tiao +粜tiao +龆tiao +鲦tiao +髫tiao +挑拔tiaoba +跳动tiaodong +挑动tiaodong +挑逗tiaodou +跳高tiaogao +调和tiaohe +调剂tiaoji +条件tiaojian +调解tiaojie +调节tiaojie +条款tiaokuan +调理tiaoli +条理tiaoli +条例tiaoli +条令tiaoling +调配tiaopei +挑剔tiaoti +调停tiaoting +条文tiaowen +跳舞tiaowu +调戏tiaoxi +挑衅tiaoxin +挑选tiaoxuan +条约tiaoyue +挑战tiaozhan +调整tiaozheng +条子tiaozi +提拨tibo +题材ticai +体裁ticai +体操ticao +体察ticha +提倡tichang +提成ticheng +提出tichu +剔除tichu +题词tici +替代tidai +梯队tidui +铁tie +贴tie +帖tie +萜tie +餮tie +贴补tiebu +铁道tiedao +贴近tiejin +铁路tielu +贴切tieqie +贴身tieshen +铁证tiezheng +提法tifa +提防tifang +提纲tigang +提高tigao +体格tige +提供tigong +替换tihuan +体会tihui +提货tihuo +体积tiji +提价tijia +体力tili +体例tili +提炼tilian +体谅tiliang +体面timian +提名timing +题名timing +题目timu +听ting +停ting +庭ting +挺ting +廷ting +厅ting +烃ting +汀ting +亭ting +艇ting +莛ting +葶ting +婷ting +梃ting +町*ting +铤ting +蜓ting +霆ting +挺拔tingba +停办tingban +停泊tingbo +停产tingchan +听从tingcong +停顿tingdun +停工tinggong +挺括tinggua +听候tinghou +听话tinghua +停火tinghuo +听见tingjian +厅局tingju +听觉tingjue +停留tingliu +听凭tingping +听取tingqu +听任tingren +听说tingshuo +听信tingxin +厅长tingzhang +停止tingzhi +停职tingzhi +停滞tingzhi +听众tingzhong +提起tiqi +提前tiqian +提取tiqu +提升tisheng +提示tishi +体坛titan +体贴titie +提问tiwen +体温tiwen +体系tixi +体现tixian +体型tixing +提醒tixing +体验tiyan +提要tiyao +提议tiyi +体育tiyu +体制tizhi +体质tizhi +题字tizi +统计表tjb +条件反射tjfs +讨价还价tjhj +天津市tjs +条件下tjx +讨论会tlh +拖拉机tlj +他们的tmd +同盟会tmh +天南地北tndb +同tong +通tong +统tong +铜tong +痛tong +筒tong +童tong +桶tong +侗*tong +恫*tong +桐tong +酮tong +瞳tong +彤tong +捅tong +佟tong +仝tong +垌*tong +茼tong +嗵tong +峒*tong +恸tong +潼tong +砼tong +同伴tongban +同胞tongbao +通报tongbao +同辈tongbei +通病tongbing +同步tongbu +通常tongchang +通称tongcheng +统称tongcheng +痛斥tongchi +统筹tongchou +痛楚tongchu +同窗tongchuang +同道tongdao +通道tongdao +同等tongdeng +通电tongdian +通牒tongdie +通读tongdu +通告tonggao +统购tonggou +通过tongguo +通航tonghang +痛恨tonghen +同化tonghua +通话tonghua +童话tonghua +痛悔tonghui +通婚tonghun +统计tongji +通辑tongji +痛击tongji +同居tongju +痛苦tongku +痛哭tongku +痛快tongkuai +同僚tongliao +通令tongling +同盟tongmeng +同年tongnian +童年tongnian +同期tongqi +通气tongqi +同情tongqing +通融tongrong +同上tongshang +通商tongshang +同时tongshi +同事tongshi +统属tongshu +统帅tongshuai +通顺tongshun +通俗tongsu +通往tongwang +痛恶tongwu +痛惜tongxi +统辖tongxia +通向tongxiang +同乡tongxiang +统销tongxiao +通宵tongxiao +通晓tongxiao +同心tongxin +痛心tongxin +通信tongxin +同行tongxing +通行tongxing +同性tongxing +同学tongxue +通讯tongxun +同样tongyang +统一tongyi +同意tongyi +通用tongyong +通邮tongyou +统战tongzhan +同志tongzhi +统治tongzhi +通知tongzhi +头tou +投tou +透tou +偷tou +钭tou +骰tou +投案touan +头版touban +投奔touben +投标toubiao +投产touchan +透彻touche +头等toudeng +投放toufang +投机touji +投靠toukao +投篮toulan +偷懒toulan +头颅toulu +透露toulu +头面toumian +透明touming +头目toumu +头脑tounao +投票toupiao +透气touqi +投入touru +投身toushen +透视toushi +头痛toutong +偷闲touxian +投降touxiang +头绪touxu +投影touying +投掷touzhi +头子touzi +投资touzi +突破口tpk +太平洋tpy +通情达理tqdl +天气预报tqyb +突然袭击trxj +妥善处理tscl +通俗读物tsdw +挺身而出tsec +图书馆tsg +滔滔不绝ttbj +痛痛快快ttkk +团体赛tts +踏踏实实ttss +图tu +土tu +突tu +途tu +徒tu +凸tu +涂tu +吐tu +兔tu +屠tu +秃tu +堍tu +荼tu +菟tu +钍tu +酴tu +团tuan +湍tuan +抟tuan +彖tuan +疃tuan +图案tuan +湍急tuanji +团结tuanjie +团聚tuanju +湍流tuanliu +团体tuanti +团员tuanyuan +团圆tuanyuan +团长tuanzhang +突变tubian +图表tubiao +土产tuchan +突出tuchu +土地tudi +徒弟tudi +土匪tufei +土改tugai +涂改tugai +图画tuhua +土话tuhua +推tui +退tui +腿tui +颓tui +蜕tui +褪tui +忒*tui +煺tui +蜕变tuibian +退步tuibu +推测tuice +推迟tuichi +推崇tuichong +退出tuichu +推导tuidao +推动tuidong +推断tuiduan +推翻tuifan +颓废tuifei +推广tuiguang +退化tuihua +蜕化tuihua +退回tuihui +推荐tuijian +推进tuijin +推举tuiju +推开tuikai +推理tuili +推论tuilun +推敲tuiqiao +推却tuique +退却tuique +推让tuirang +退让tuirang +颓丧tuisang +退色tuise +推算tuisuan +退缩tuisuo +颓唐tuitang +推托tuituo +退伍tuiwu +推向tuixiang +推销tuixiao +推卸tuixie +推行tuixing +退休tuixiu +退学tuixue +推移tuiyi +退职tuizhi +突击tuji +图解tujie +途径tujing +徒劳tulao +图例tuli +吐露tulu +囤*tun +褪*tun +吞tun +屯tun +臀tun +氽tun +饨tun +暾tun +豚tun +吞并tunbing +吞没tunmo +吞吐tuntu +脱tuo +拖tuo +托tuo +妥tuo +椭tuo +舵*tuo +魄*tuo +鸵tuo +陀tuo +驮tuo +驼tuo +拓tuo +唾tuo +乇tuo +佗tuo +坨tuo +庹tuo +沱tuo +柝tuo +柁*tuo +橐tuo +砣tuo +铊*tuo +箨tuo +酡tuo +跎tuo +鼍tuo +驼背tuobei +拓补tuobu +脱出tuochu +妥当tuodang +脱轨tuogui +拓荒tuohuang +脱节tuojie +拖拉tuola +脱离tuoli +唾骂tuoma +唾弃tuoqi +妥善tuoshan +脱身tuoshen +妥协tuoxie +拖延tuoyan +唾液tuoye +图片tupian +突破tupo +突起tuqi +突然turan +徒然turan +土壤turang +屠杀tusha +徒手tushou +图书tushu +吐痰tutan +突围tuwei +突兀tuwu +图象tuxiang +图像tuxiang +图形tuxing +徒刑tuxing +图章tuzhang +图纸tuzhi +途中tuzhong +土著tuzhu +秃子tuzi +贪污盗窃twdq +台湾省tws +贪污受贿twsh +提心吊胆txdd +通讯社txs +同心同德txtd +同心协力txxl +推心置腹txzf +体育场tyc +体育锻炼tydl +体育馆tyg +腾云驾雾tyjw +太阳能tyn +太原市tys +天衣无缝tywf +通用性tyx +体育运动tyyd +团支部tzb +停滞不前tzbq +同志们tzm +天灾人祸tzrh +听之任之tzrz +通知书tzs +为w +我w +无w +问w +外w +五w +位w +物w +委w +完w +温w +万w +文w +往w +武w +务w +王w +围w +误w +晚w +瓦wa +挖wa +凹*wa +哇wa +蛙wa +洼wa +娃wa +袜wa +佤wa +娲wa +腽wa +外wai +歪wai +外币waibi +外边waibian +外表waibiao +外宾waibin +外部waibu +外传waichuan +外存waicun +外地waidi +外调waidiao +歪风waifeng +外观waiguan +外国waiguo +外行waihang +外汇waihui +外加waijia +外交waijiao +外界waijie +外景waijing +外科waike +外快waikuai +外流wailiu +外貌waimao +外贸waimao +外面waimian +外勤waiqin +歪曲waiqu +外商waishang +外伤waishang +外设waishe +外省waisheng +外甥waisheng +外事waishi +外围waiwei +外文waiwen +外线waixian +外销waixiao +歪斜waixie +外延waiyan +外因waiyin +外语waiyu +外援waiyuan +外在waizai +外债waizhai +外资waizi +瓦解wajie +挖掘wajue +挖苦waku +瓦砾wali +完wan +万wan +晚wan +弯wan +碗wan +顽wan +湾wan +挽wan +玩wan +蔓*wan +娩*wan +豌wan +丸wan +烷wan +皖wan +惋wan +宛wan +婉wan +腕wan +剜wan +芄wan +莞*wan +菀wan +纨wan +绾wan +琬wan +脘wan +畹wan +蜿wan +万般wanban +晚报wanbao +完备wanbei +完毕wanbi +完成wancheng +万代wandai +顽敌wandi +万吨wandun +万恶wane +万分wanfen +往wang +王wang +望wang +网wang +忘wang +妄wang +亡wang +旺wang +芒*wang +汪wang +枉wang +罔wang +尢wang +惘wang +辋wang +魍wang +往常wangchang +王朝wangchao +忘掉wangdiao +妄动wangdong +枉法wangfa +往返wangfan +枉费wangfei +往复wangfu +王国wangguo +亡国wangguo +往后wanghou +忘怀wanghuai +忘记wangji +旺季wangji +往来wanglai +网络wangluo +亡命wangming +往年wangnian +完工wangong +忘却wangque +枉然wangran +惘然wangran +往日wangri +旺盛wangsheng +往事wangshi +妄图wangtu +万古wangu +顽固wangu +往往wangwang +汪汪wangwang +忘我wangwo +往昔wangxi +妄想wangxiang +汪洋wangyang +望远wangyuan +王子wangzi +完好wanhao +晚会wanhui +挽回wanhui +晚婚wanhun +晚间wanjian +完结wanjie +挽救wanjiu +玩具wanju +顽抗wankang +完了wanle +挽力wanli +弯路wanlu +完美wanmei +万能wanneng +万年wannian +晚年wannian +玩弄wannong +晚期wanqi +顽强wanqiang +弯曲wanqu +完全wanquan +完善wanshan +晚上wanshang +玩赏wanshang +万事wanshi +万世wanshi +玩耍wanshua +万岁wansui +万万wanwan +万物wanwu +晚霞wanxia +万象wanxiang +玩笑wanxiao +万幸wanxing +婉言wanyan +万一wanyi +万元wanyuan +完整wanzheng +顽症wanzheng +万众wanzhong +宛转wanzhuan +瓦斯wasi +瓦特wate +娃娃wawa +外部设备wbsb +微不足道wbzd +无产阶级wcjj +微处理机wclj +无产者wcz +为wei +位wei +委wei +围wei +维wei +唯wei +卫wei +微wei +伟wei +未wei +威wei +危wei +尾wei +谓wei +喂wei +味wei +胃wei +魏wei +伪wei +遗*wei +违wei +韦wei +畏wei +纬wei +巍wei +桅wei +惟wei +潍wei +苇wei +萎wei +蔚wei +渭wei +尉wei +慰wei +偎wei +诿wei +隈wei +隗*wei +圩*wei +葳wei +薇wei +囗wei +帏wei +帷wei +崴wei +嵬wei +猥wei +猬wei +闱wei +沩wei +洧wei +涠wei +逶wei +娓wei +玮wei +韪wei +軎wei +炜wei +煨wei +痿wei +艉wei +鲔wei +尾巴weiba +违背weibei +未必weibi +威逼weibi +微波weibo +微薄weibo +未曾weiceng +未尝weichang +维持weichi +为此weici +伟大weida +味道weidao +纬度weidu +唯独weidu +巍峨weie +违法weifa +违反weifan +违犯weifan +威风weifeng +桅杆weigan +微观weiguan +危害weihai +为何weihe +维护weihu +危及weiji +微机weiji +危机weiji +危急weiji +围歼weijian +围剿weijiao +慰藉weijie +违禁weijin +未经weijing +畏惧weiju +违抗weikang +未可weike +唯恐weikong +惟恐weikong +胃口weikou +未来weilai +慰劳weilao +为了weile +威力weili +委靡weimi +未免weimian +微妙weimiao +帷幕weimu +危难weinan +畏难weinan +未能weineng +委派weipai +为期weiqi +畏怯weiqie +委曲weiqu +委屈weiqu +未然weiran +巍然weiran +围绕weirao +伟人weiren +委任weiren +微弱weiruo +威慑weishe +为生weisheng +卫生weisheng +尾声weisheng +卫士weishi +威势weishi +为首weishou +为数weishu +尾随weisui +未遂weisui +畏缩weisuo +萎缩weisuo +猥琐weisuo +委托weituo +委婉weiwan +危亡weiwang +巍巍weiwei +慰问weiwen +唯物weiwu +威武weiwu +微细weixi +威吓weixia +危险weixian +微小weixiao +微笑weixiao +威协weixie +威胁weixie +猥亵weixie +维新weixin +唯心weixin +违心weixin +威信weixin +微型weixing +卫星weixing +维修weixiu +威严weiyan +伟业weiye +唯一weiyi +位移weiyi +位于weiyu +谓语weiyu +委员weiyuan +为止weizhi +位置weizhi +未知weizhi +为重weizhong +为主weizhu +伪装weizhuang +问wen +温wen +文wen +稳wen +纹wen +闻wen +蚊wen +瘟wen +吻wen +紊wen +刎wen +阌wen +汶wen +璺wen +雯wen +文本wenben +瘟病wenbing +稳步wenbu +问答wenda +稳定wending +温度wendu +嗡weng +翁weng +瓮weng +蓊weng +蕹weng +稳固wengu +问好wenhao +温和wenhe +吻合wenhe +文化wenhua +文件wenjian +稳健wenjian +问津wenjin +文静wenjing +文具wenju +文科wenke +文盲wenmang +文明wenming +闻名wenming +温暖wennuan +文凭wenping +文人wenren +温柔wenrou +问世wenshi +文坛wentan +问题wenti +文体wenti +稳妥wentuo +文物wenwu +文献wenxian +文选wenxuan +文学wenxue +问讯wenxun +闻讯wenxun +文艺wenyi +瘟疫wenyi +文娱wenyu +文摘wenzhai +文章wenzhang +稳重wenzhong +文字wenzi +问罪wenzui +望而生畏wesw +闻风而动wfed +违法乱纪wflj +歪风邪气wfxq +温故知新wgzx +文化部whb +文汇报whb +文化馆whg +文化宫whg +武汉市whs +五湖四海whsh +忘乎所以whsy +问寒问暖whwn +文化娱乐whyl +玩忽职守whzs +外交部wjb +无纪律wjl +五讲四美wjsm +无拘无束wjws +无可奉告wkfg +无可非议wkfy +无可奈何wknh +乌鲁木齐wlmq +无理取闹wlqn +无论如何wlrh +物美价廉wmjl +误码率wml +文明礼貌wmlm +无名英雄wmyx +无能为力wnwl +我wo +握wo +窝wo +蜗wo +涡wo +沃wo +挝wo +卧wo +斡wo +倭wo +莴wo +喔wo +幄wo +渥wo +肟wo +硪wo +龌wo +窝藏wocang +卧床wochuang +我党wodang +卧倒wodao +我的wode +窝工wogong +我国woguo +我军wojun +我们women +窝囊wonang +我省wosheng +我校woxiao +为期不远wqby +无穷无尽wqwj +误入歧途wrqt +卫生部wsb +纹丝不动wsbd +万事大吉wsdj +万事俱备wsjb +为什么wsm +无所谓wsw +为所欲为wsyw +无所作为wszw +无wu +五wu +物wu +武wu +务wu +误wu +伍wu +舞wu +污wu +悟wu +雾wu +午wu +恶*wu +屋wu +乌wu +吴wu +亡*wu +诬wu +钨wu +巫wu +呜wu +芜wu +梧wu +吾wu +毋wu +捂wu +侮wu +坞wu +戊wu +晤wu +勿wu +兀wu +仵wu +阢wu +邬wu +圬wu +芴wu +唔wu +庑wu +怃wu +忤wu +浯wu +寤wu +迕wu +妩wu +婺wu +骛wu +杌wu +牾wu +於*wu +焐wu +鹉wu +鹜wu +痦wu +蜈wu +鋈wu +鼯wu +吾辈wubei +无比wubi +五笔wubi +务必wubi +舞弊wubi +无边wubian +无不wubu +五彩wucai +误差wucha +无常wuchang +无偿wuchang +舞场wuchang +武昌wuchang +无耻wuchi +无从wucong +武打wuda +舞蹈wudao +无敌wudi +舞动wudong +武斗wudou +武断wuduan +无法wufa +无妨wufang +无非wufei +武功wugong +污垢wugou +无故wugu +无关wuguan +五官wuguan +武官wuguan +无害wuhai +诬害wuhai +武汉wuhan +无何wuhe +乌黑wuhei +五湖wuhu +呜呼wuhu +误会wuhui +舞会wuhui +污秽wuhui +无及wuji +无机wuji +物价wujia +无间wujian +物件wujian +误解wujie +五届wujie +五金wujin +无愧wukui +无赖wulai +诬赖wulai +无理wuli +物理wuli +无礼wuli +物力wuli +武力wuli +无聊wuliao +无虑wulu +无论wulun +污蔑wumie +诬蔑wumie +无奈wunai +无能wuneng +毋宁wuning +务农wunong +物品wupin +无期wuqi +五七wuqi +武器wuqi +无情wuqing +无穷wuqiong +舞曲wuqu +无权wuquan +污染wuran +无任wuren +污辱wuru +侮辱wuru +物色wuse +无上wushang +误伤wushang +无声wusheng +午时wushi +务使wushi +无视wushi +误事wushi +务实wushi +无数wushu +武术wushu +无双wushuang +午睡wushui +五四wusi +无私wusi +舞台wutai +无题wuti +物体wuti +舞厅wuting +无为wuwei +无谓wuwei +无物wuwu +无暇wuxia +无限wuxian +诬陷wuxian +无效wuxiao +五星wuxing +午休wuxiu +无须wuxu +无需wuxu +务虚wuxu +午夜wuye +五一wuyi +无益wuyi +无疑wuyi +无垠wuyin +无用wuyong +毋庸wuyong +无余wuyu +无缘wuyuan +五月wuyue +物证wuzheng +无知wuzhi +物质wuzhi +武装wuzhuang +物资wuzi +兀自wuzi +误字wuzi +无罪wuzui +无微不至wwbz +唯物论wwl +卧薪尝胆wxcd +无线电wxd +微型机wxj +唯心论wxl +问心无愧wxwk +委员会wyh +无缘无故wywg +委员长wyz +误字率wzl +无足轻重wzqz +未知数wzs +完整无缺wzwq +学x +下x +行x +小x +线x +性x +新x +些x +想x +心x +向x +相x +系x +席x +现x +西x +修x +象x +先x +形x +心安理得xald +西安市xas +西半球xbq +相比之下xbzx +宣传部xcb +新陈代谢xcdx +新产品xcp +畜产品xcp +西城区xcq +喜出望外xcww +相对而言xdey +现代化xdh +想当然xdr +相对误差xdwc +先睹为快xdwk +形而上学xesx +显而易见xeyj +西方国家xfgj +消费品xfp +想方设法xfsf +先发制人xfzr +兴高采烈xgcl +新华社xhs +新华书店xhsd +系xi +席xi +西xi +习xi +细xi +吸xi +析xi +喜xi +洗xi +铣xi +稀xi +戏xi +隙xi +希xi +息xi +袭xi +锡xi +烯xi +牺xi +悉xi +惜xi +溪xi +腊*xi +栖*xi +昔xi +熙xi +硒xi +矽xi +晰xi +嘻xi +膝xi +夕xi +熄xi +汐xi +犀xi +檄xi +媳xi +僖xi +兮xi +隰xi +郗xi +茜*xi +菥xi +葸xi +蓰xi +奚xi +唏xi +徙xi +饩xi +阋xi +浠xi +淅xi +屣xi +嬉xi +玺xi +樨xi +曦xi +觋xi +欷xi +歙*xi +熹xi +禊xi +禧xi +皙xi +穸xi +裼*xi +蜥xi +螅xi +蟋xi +舄xi +舾xi +羲xi +粞xi +翕xi +醯xi +蹊*xi +鼷xi +下xia +夏xia +吓xia +狭xia +霞xia +唬*xia +瞎xia +虾xia +匣xia +辖xia +暇xia +峡xia +侠xia +厦xia +呷xia +狎xia +遐xia +瑕xia +柙xia +硖xia +瘕*xia +罅xia +黠xia +狭隘xiaai +下班xiaban +下辈xiabei +下边xiabian +下策xiace +下层xiaceng +下场xiachang +下沉xiachen +下次xiaci +瑕疵xiaci +下达xiada +吓倒xiadao +下等xiadeng +下毒xiadu +下发xiafa +下放xiafang +峡谷xiagu +霞光xiaguang +瞎话xiahua +喜爱xiai +下级xiaji +下集xiaji +夏季xiaji +下降xiajiang +侠客xiake +下来xialai +下联xialian +夏粮xialiang +下列xialie +下令xialing +下流xialiu +下落xialuo +下马xiama +厦门xiamen +下面xiamian +线xian +现xian +先xian +县xian +限xian +见*xian +显xian +鲜xian +献xian +险xian +陷xian +宪xian +纤xian +洗*xian +掀xian +弦xian +铣*xian +腺xian +锨xian +仙xian +咸xian +贤xian +衔xian +舷xian +闲xian +涎xian +嫌xian +馅xian +羡xian +冼xian +苋xian +莶xian +藓xian +岘xian +猃xian +暹xian +娴xian +氙xian +燹xian +祆xian +鹇xian +痫xian +蚬xian +筅xian +籼xian +酰xian +跣xian +跹xian +霰xian +西安xian +献宝xianbao +先辈xianbei +现场xianchang +现成xiancheng +县城xiancheng +献丑xianchou +献词xianci +现存xiancun +现代xiandai +先导xiandao +显得xiande +险地xiandi +限定xianding +限度xiandu +线段xianduan +限额xiane +险恶xiane +宪法xianfa +先锋xianfeng +险峰xianfeng +想xiang +向xiang +相xiang +象xiang +响xiang +项xiang +箱xiang +乡xiang +降*xiang +香xiang +像xiang +详xiang +橡xiang +享xiang +湘xiang +厢xiang +镶xiang +襄xiang +翔xiang +祥xiang +巷xiang +芗xiang +葙xiang +饷xiang +庠xiang +骧xiang +缃xiang +蟓xiang +鲞xiang +飨xiang +相爱xiangai +相比xiangbi +想必xiangbi +相差xiangcha +相称xiangcheng +相处xiangchu +相传xiangchuan +乡村xiangcun +相当xiangdang +向导xiangdao +相等xiangdeng +相对xiangdui +想法xiangfa +相反xiangfan +相仿xiangfang +相干xianggan +香港xianggang +相隔xiangge +相关xiangguan +相好xianghao +相互xianghu +相继xiangji +相加xiangjia +相见xiangjian +相减xiangjian +相交xiangjiao +橡胶xiangjiao +相近xiangjin +详尽xiangjin +巷口xiangkou +向来xianglai +相连xianglian +向量xiangliang +响亮xiangliang +相貌xiangmao +项目xiangmu +想念xiangnian +相片xiangpian +想起xiangqi +详情xiangqing +向上xiangshang +相声xiangsheng +响声xiangsheng +相识xiangshi +翔实xiangshi +享受xiangshou +相思xiangsi +相似xiangsi +香甜xiangtian +相同xiangtong +相投xiangtou +显贵xiangui +向往xiangwang +详细xiangxi +向下xiangxia +乡下xiangxia +象限xiangxian +想象xiangxiang +相信xiangxin +香烟xiangyan +相依xiangyi +相宜xiangyi +相应xiangying +相映xiangying +响应xiangying +享用xiangyong +相遇xiangyu +相约xiangyue +乡镇xiangzhen +象征xiangzheng +箱子xiangzi +陷害xianhai +显赫xianhe +鲜红xianhong +先后xianhou +鲜花xianhua +献花xianhua +闲话xianhua +贤惠xianhui +献计xianji +献技xianji +显见xianjian +衔接xianjie +先进xianjin +现金xianjin +险境xianjing +陷阱xianjing +现款xiankuan +现况xiankuang +先例xianli +献礼xianli +先烈xianlie +线路xianlu +显露xianlu +鲜美xianmei +鲜明xianming +贤明xianming +显目xianmu +羡慕xianmu +贤能xianneng +先期xianqi +掀起xianqi +限期xianqi +嫌弃xianqi +先前xianqian +先遣xianqian +险情xianqing +先驱xianqu +显然xianran +贤人xianren +闲人xianren +现任xianren +陷入xianru +闲散xiansan +献身xianshen +先生xiansheng +先是xianshi +现实xianshi +显示xianshi +娴熟xianshu +线索xiansuo +闲谈xiantan +险滩xiantan +先天xiantian +线条xiantiao +县委xianwei +纤维xianwei +显现xianxian +现象xianxiang +现行xianxing +鲜血xianxue +显眼xianyan +鲜艳xianyan +显要xianyao +险要xianyao +显耀xianyao +现役xianyi +嫌疑xianyi +现有xianyou +限于xianyu +闲杂xianza +现在xianzai +县长xianzhang +宪章xianzhang +限制xianzhi +先知xianzhi +闲置xianzhi +闲职xianzhi +显著xianzhu +现状xianzhuang +险阻xianzu +小xiao +消xiao +削xiao +效xiao +笑xiao +校xiao +销xiao +硝xiao +萧xiao +肖xiao +孝xiao +霄xiao +哮xiao +嚣xiao +宵xiao +淆xiao +晓xiao +啸xiao +哓xiao +崤xiao +潇xiao +逍xiao +骁xiao +绡xiao +枭xiao +枵xiao +蛸*xiao +筱xiao +箫xiao +魈xiao +小报xiaobao +小辈xiaobei +笑柄xiaobing +消沉xiaochen +消除xiaochu +消毒xiaodu +效法xiaofa +小贩xiaofan +消防xiaofang +消费xiaofei +校风xiaofeng +小鬼xiaogui +效果xiaoguo +小孩xiaohai +消耗xiaohao +消化xiaohua +笑话xiaohua +小惠xiaohui +销毁xiaohui +销魂xiaohun +消极xiaoji +削减xiaojian +小结xiaojie +小姐xiaojie +孝敬xiaojing +校刊xiaokan +小康xiaokang +效劳xiaolao +效力xiaoli +销路xiaolu +效率xiaolu +消灭xiaomie +消磨xiaomo +效能xiaoneng +消气xiaoqi +消遣xiaoqian +笑容xiaorong +削弱xiaoruo +潇洒xiaosa +校舍xiaoshe +小时xiaoshi +消失xiaoshi +消逝xiaoshi +消瘦xiaoshou +销售xiaoshou +小数xiaoshu +小说xiaoshuo +萧条xiaotiao +消息xiaoxi +肖像xiaoxiang +小心xiaoxin +枭雄xiaoxiong +小学xiaoxue +效验xiaoyan +逍遥xiaoyao +效益xiaoyi +效应xiaoying +校友xiaoyou +小于xiaoyu +校园xiaoyuan +销赃xiaozang +校长xiaozhang +嚣张xiaozhang +效忠xiaozhong +小组xiaozu +下情xiaqing +下去xiaqu +辖区xiaqu +下手xiashou +夏收xiashou +下属xiashu +下水xiashui +下台xiatai +夏天xiatian +下文xiawen +下午xiawu +下限xiaxian +下乡xiaxiang +遐想xiaxiang +狭义xiayi +下游xiayou +狭窄xiazhai +夏至xiazhi +夏种xiazhong +喜报xibao +细胞xibao +西北xibei +西边xibian +稀薄xibo +锡箔xibo +西餐xican +洗涤xidi +吸毒xidu +些xie +解*xie +写xie +斜xie +谢xie +协xie +械xie +叶*xie +血*xie +卸xie +屑xie +鞋xie +歇xie +邪xie +胁xie +蟹xie +泄xie +泻xie +契*xie +楔xie +蝎xie +挟xie +携xie +谐xie +懈xie +偕xie +亵xie +勰xie +燮xie +薤xie +撷xie +獬xie +廨xie +渫xie +瀣xie +邂xie +绁xie +缬xie +榭xie +榍xie +颉*xie +躞xie +写出xiechu +协从xiecong +携带xiedai +邪道xiedao +协调xiediao +协定xieding +亵渎xiedu +邪恶xiee +协和xiehe +谐和xiehe +协会xiehui +谢绝xiejue +协力xieli +泄漏xielou +邪路xielu +泄露xielu +泄密xiemi +邪念xienian +胁迫xiepo +邪气xieqi +协商xieshang +写生xiesheng +携手xieshou +邪说xieshuo +协同xietong +歇息xiexi +谢谢xiexie +协议xieyi +谐音xieyin +协约xieyue +写照xiezhao +协助xiezhu +鞋子xiezi +写作xiezuo +协作xiezuo +西方xifang +西风xifeng +西服xifu +吸附xifu +媳妇xifu +习惯xiguan +西汉xihan +稀罕xihan +希罕xihan +喜欢xihuan +袭击xiji +细节xijie +洗劫xijie +喜剧xiju +戏剧xiju +席卷xijuan +细菌xijun +犀利xili +系列xilie +奚落xiluo +熄灭ximie +新xin +心xin +信xin +锌xin +芯xin +辛xin +寻*xin +欣xin +薪xin +忻xin +衅xin +囟xin +馨xin +昕xin +歆xin +镡*xin +鑫xin +心爱xinai +西南xinan +新春xinchun +信贷xindai +心得xinde +心烦xinfan +心服xinfu +信服xinfu +行xing +性xing +形xing +型xing +星xing +兴xing +省*xing +醒xing +姓xing +幸xing +腥xing +猩xing +惺xing +刑xing +邢xing +杏xing +陉xing +荇xing +荥xing +擤xing +饧xing +悻xing +硎xing +心甘xingan +兴办xingban +性别xingbie +姓别xingbie +刑场xingchang +星辰xingchen +形成xingcheng +行程xingcheng +行动xingdong +幸而xinger +刑法xingfa +刑罚xingfa +兴奋xingfen +幸福xingfu +性格xingge +幸好xinghao +型号xinghao +行贿xinghui +星火xinghuo +性急xingji +形迹xingji +兴建xingjian +行径xingjing +行军xingjun +星空xingkong +幸亏xingkui +行李xingli +行旅xinglu +幸免xingmian +性命xingming +姓名xingming +醒目xingmu +性能xingneng +行期xingqi +兴起xingqi +星期xingqi +性情xingqing +星球xingqiu +兴趣xingqu +形容xingrong +行商xingshang +兴盛xingsheng +行使xingshi +行事xingshi +行驶xingshi +形式xingshi +幸事xingshi +刑事xingshi +形势xingshi +姓氏xingshi +行署xingshu +兴衰xingshuai +形态xingtai +形体xingti +兴亡xingwang +兴旺xingwang +行为xingwei +行文xingwen +醒悟xingwu +形象xingxiang +行销xingxiao +星星xingxing +行凶xingxiong +兴修xingxiu +行业xingye +星夜xingye +幸运xingyun +行政xingzheng +性质xingzhi +兴致xingzhi +形状xingzhuang +行走xingzou +信号xinhao +心狠xinhen +心慌xinhuang +信汇xinhui +细腻xini +西宁xining +心急xinji +信件xinjian +新疆xinjiang +新近xinjin +新居xinju +心坎xinkan +辛苦xinku +信赖xinlai +辛劳xinlao +心理xinli +心里xinli +心灵xinling +心目xinmu +信念xinnian +戏弄xinong +新奇xinqi +辛勤xinqin +心情xinqing +新区xinqu +新人xinren +信任xinren +欣赏xinshang +新生xinsheng +心声xinsheng +新事xinshi +新式xinshi +新书xinshu +薪水xinshui +心酸xinsuan +辛酸xinsuan +心疼xinteng +心田xintian +心跳xintiao +心头xintou +欣慰xinwei +新闻xinwen +心细xinxi +信息xinxi +欣喜xinxi +新鲜xinxian +心想xinxiang +信箱xinxiang +馨香xinxiang +信心xinxin +新型xinxing +新星xinxing +新兴xinxing +心虚xinxu +心血xinxue +信仰xinyang +心意xinyi +新异xinyi +新颖xinying +信用xinyong +新余xinyu +信誉xinyu +心愿xinyuan +心脏xinzang +新址xinzhi +心中xinzhong +雄xiong +胸xiong +兄xiong +凶xiong +熊xiong +匈xiong +汹xiong +芎xiong +雄辩xiongbian +雄兵xiongbing +凶残xiongcan +兄弟xiongdi +凶恶xionge +雄关xiongguan +凶狠xionghen +雄厚xionghou +胸怀xionghuai +雄健xiongjian +胸口xiongkou +熊猫xiongmao +凶猛xiongmeng +匈奴xiongnu +凶器xiongqi +凶杀xiongsha +雄师xiongshi +凶手xiongshou +胸膛xiongtang +雄伟xiongwei +雄心xiongxin +汹涌xiongyong +雄壮xiongzhuang +雄姿xiongzi +西欧xiou +习气xiqi +吸气xiqi +喜气xiqi +稀奇xiqi +希奇xiqi +喜庆xiqing +吸取xiqu +戏曲xiqu +昔日xiri +牺牲xisheng +西式xishi +喜事xishi +稀释xishi +吸收xishou +系数xishu +洗刷xishua +吸吮xishun +习俗xisu +习题xiti +西天xitian +系统xitong +修xiu +锈xiu +休xiu +袖xiu +秀xiu +朽xiu +宿*xiu +臭*xiu +羞xiu +嗅xiu +绣xiu +咻xiu +岫xiu +馐xiu +庥xiu +溴xiu +鸺xiu +貅xiu +髹xiu +修补xiubu +秀才xiucai +羞耻xiuchi +修辞xiuci +修订xiuding +修复xiufu +修改xiugai +修建xiujian +修剪xiujian +嗅觉xiujue +休克xiuke +羞愧xiukui +修理xiuli +秀丽xiuli +秀气xiuqi +羞辱xiuru +羞涩xiuse +修饰xiushi +休息xiuxi +休想xiuxiang +修养xiuyang +休养xiuyang +修造xiuzao +袖章xiuzhang +袖珍xiuzhen +修正xiuzheng +修筑xiuzhu +希望xiwang +席位xiwei +细微xiwei +西文xiwen +檄文xiwen +细小xixiao +细心xixin +悉心xixin +喜讯xixun +吸烟xiyan +西洋xiyang +西医xiyi +吸引xiyin +希有xiyou +戏院xiyuan +喜悦xiyue +西藏xizang +洗澡xizao +细则xize +细致xizhi +习作xizuo +下基层xjc +现阶段xjd +新技术xjs +献计献策xjxc +先见之明xjzm +兴利除弊xlcb +系列化xlh +稀里糊涂xlht +狭路相逢xlxf +畜牧业xmy +心满意足xmyz +西宁市xns +小朋友xpy +向前看xqk +喜气洋洋xqyy +先人后己xrhj +兴师动众xsdz +销售额xse +刑事犯罪xsfz +小时候xsh +新时期xsq +新生事物xssw +形式主义xszy +相提并论xtbl +续xu +许xu +须xu +需xu +序xu +虚xu +絮xu +畜xu +叙xu +蓄xu +绪xu +徐xu +墟xu +戌xu +嘘xu +酗xu +旭xu +恤xu +婿xu +吁*xu +诩xu +勖xu +圩xu +蓿xu +洫xu +浒*xu +溆xu +顼xu +栩xu +煦xu +砉*xu +盱xu +胥xu +糈xu +醑xu +选xuan +旋xuan +宣xuan +悬xuan +玄xuan +券*xuan +轩xuan +喧xuan +癣xuan +眩xuan +绚xuan +儇xuan +谖xuan +萱xuan +揎xuan +泫xuan +渲xuan +漩xuan +璇xuan +楦xuan +暄xuan +炫xuan +煊xuan +碹xuan +铉xuan +镟xuan +痃xuan +悬案xuanan +轩昂xuanang +选拔xuanba +宣布xuanbu +选材xuancai +选场xuanchang +宣称xuancheng +宣传xuanchuan +选定xuanding +宣读xuandu +宣告xuangao +选购xuangou +悬挂xuangua +玄乎xuanhu +喧哗xuanhua +选集xuanji +宣讲xuanjiang +选举xuanju +绚烂xuanlan +绚丽xuanli +选录xuanlu +旋律xuanlu +选民xuanmin +喧闹xuannao +悬念xuannian +选派xuanpai +宣判xuanpan +选配xuanpei +选票xuanpiao +选区xuanqu +选取xuanqu +喧嚷xuanrang +宣誓xuanshi +选手xuanshou +悬殊xuanshu +旋涡xuanwo +玄虚xuanxu +悬崖xuanya +宣言xuanyan +宣扬xuanyang +炫耀xuanyao +选用xuanyong +选择xuanze +宣战xuanzhan +选种xuanzhong +旋转xuanzhuan +许多xuduo +学xue +血xue +削*xue +雪xue +穴xue +靴xue +薛xue +谑xue +噱*xue +泶xue +踅xue +鳕xue +学报xuebao +学部xuebu +学潮xuechao +学费xuefei +学风xuefeng +学府xuefu +血汗xuehan +学好xuehao +学会xuehui +学籍xueji +血迹xueji +学科xueke +血泪xuelei +学历xueli +学龄xueling +学年xuenian +学派xuepai +学期xueqi +血肉xuerou +学生xuesheng +学时xueshi +学识xueshi +学士xueshi +学术xueshu +血书xueshu +学说xueshuo +血统xuetong +学徒xuetu +学位xuewei +学问xuewen +学习xuexi +血洗xuexi +学校xuexiao +血压xueya +学业xueye +血液xueye +学友xueyou +学员xueyuan +学院xueyuan +血晕xueyun +血战xuezhan +学者xuezhe +学制xuezhi +虚构xugou +序号xuhao +蓄积xuji +虚假xujia +叙旧xujiu +许可xuke +序列xulie +绪论xulun +虚名xuming +序幕xumu +畜牧xumu +训xun +旬xun +迅xun +讯xun +寻xun +循xun +巡xun +荤*xun +浚*xun +勋xun +熏xun +询xun +驯xun +殉xun +汛xun +逊xun +巽xun +郇*xun +埙xun +荀xun +蕈xun +薰xun +峋xun +徇xun +獯xun +恂xun +洵xun +浔xun +曛xun +窨*xun +醺xun +鲟xun +巡捕xunbu +巡查xuncha +寻常xunchang +驯服xunfu +殉国xunguo +巡航xunhang +循环xunhuan +巡回xunhui +虚拟xuni +寻机xunji +巡警xunjing +勋爵xunjue +训练xunlian +巡逻xunluo +迅猛xunmeng +寻求xunqiu +逊色xunse +巡视xunshi +徇私xunsi +迅速xunsu +熏陶xuntao +许诺xunuo +讯问xunwen +询问xunwen +寻衅xunxin +循序xunxu +勋章xunzhang +寻找xunzhao +殉职xunzhi +寻址xunzhi +需求xuqiu +序曲xuqu +虚荣xurong +虚弱xuruo +虚设xushe +叙事xushi +虚实xushi +序数xushu +虚数xushu +叙述xushu +叙说xushuo +虚伪xuwei +虚心xuxin +序言xuyan +需要xuyao +须臾xuyu +许愿xuyuan +须知xuzhi +宣武区xwq +信息处理xxcl +循序见进xxjj +辛辛苦苦xxkk +信息量xxl +熙熙攘攘xxrr +小学生xxs +欣欣向荣xxxr +小心翼翼xxyy +下一步xyb +胸有成竹xycz +洗衣机xyj +小意思xys +习以为常xywc +新颖性xyx +兴致勃勃xzbb +新中国xzg +行政区域xzqy +雪中送炭xzst +心中无数xzws +选择性xzx +心中有数xzys +行之有效xzyx +一y +有y +用y +要y +以y +于y +也y +样y +义y +与y +由y +压y +员y +月y +意y +又y +运y +原y +油y +验y +压ya +亚ya +呀ya +牙ya +芽ya +雅ya +蚜ya +鸭ya +匹*ya +押ya +鸦ya +丫ya +崖ya +衙ya +涯ya +哑ya +讶ya +伢ya +垭ya +揠ya +岈ya +迓ya +娅ya +琊ya +桠ya +氩ya +砑ya +睚ya +痖ya +哑巴yaba +牙齿yachi +压倒yadao +压服yafu +牙关yaguan +雅观yaguan +压价yajia +押金yajin +亚军yajun +压力yali +验yan +研yan +严yan +眼yan +言yan +盐yan +演yan +岩yan +沿yan +烟yan +延yan +掩yan +宴yan +炎yan +颜yan +燕yan +衍yan +铅*yan +焉yan +咽yan +阉yan +淹yan +蜒yan +阎yan +奄yan +艳yan +堰yan +厌yan +砚yan +雁yan +唁yan +彦yan +焰yan +谚yan +殷*yan +厣yan +赝yan +剡*yan +俨yan +偃yan +兖yan +谳yan +阽*yan +郾yan +鄢yan +芫*yan +菸yan +崦yan +恹yan +闫yan +阏yan +湮yan +滟yan +妍yan +嫣yan +琰yan +檐yan +晏yan +胭yan +腌*yan +焱yan +罨yan +筵yan +酽yan +魇yan +餍yan +鼹yan +沿岸yanan +严办yanban +掩蔽yanbi +演变yanbian +烟草yancao +延长yanchang +演唱yanchang +严惩yancheng +延迟yanchi +演出yanchu +唁电yandian +严冬yandong +厌恶yane +厌烦yanfan +样yang +养yang +氧yang +扬yang +洋yang +阳yang +羊yang +秧yang +央yang +杨yang +仰yang +殃yang +鸯yang +佯yang +疡yang +痒yang +漾yang +徉yang +怏yang +泱yang +炀yang +烊yang +恙yang +蛘yang +鞅yang +掩盖yangai +样板yangban +样本yangben +洋财yangcai +养成yangcheng +沿革yange +严格yange +阳光yangguang +洋行yanghang +养护yanghu +氧化yanghua +养料yangliao +杨柳yangliu +仰面yangmian +殃民yangmin +仰慕yangmu +样品yangpin +洋气yangqi +扬弃yangqi +央求yangqiu +养伤yangshang +样式yangshi +阳台yangtai +眼光yanguang +仰望yangwang +洋务yangwu +洋相yangxiang +扬言yangyan +样样yangyang +洋溢yangyi +养育yangyu +养殖yangzhi +样子yangzi +沿海yanhai +严寒yanhan +眼红yanhong +咽喉yanhou +掩护yanhu +眼花yanhua +延缓yanhuan +宴会yanhui +焰火yanhuo +演讲yanjiang +眼界yanjie +严禁yanjin +严谨yanjin +眼镜yanjing +眼睛yanjing +研究yanjiu +严峻yanjun +眼看yankan +严酷yanku +眼眶yankuang +眼泪yanlei +眼力yanli +严厉yanli +艳丽yanli +眼帘yanlian +眼亮yanliang +言路yanlu +沿路yanlu +言论yanlun +掩埋yanmai +严密yanmi +严明yanming +烟幕yanmu +延年yannian +延期yanqi +眼前yanqian +宴请yanqing +俨然yanran +炎热yanre +眼色yanse +颜色yanse +延伸yanshen +岩石yanshi +演示yanshi +掩饰yanshi +验收yanshou +严守yanshou +延寿yanshou +演说yanshuo +严肃yansu +演算yansuan +言谈yantan +研讨yantao +沿途yantu +阎王yanwang +延误yanwu +烟雾yanwu +宴席yanxi +筵席yanxi +演习yanxi +沿袭yanxi +眼下yanxia +沿线yanxian +言行yanxing +严刑yanxing +延续yanxu +艳阳yanyang +演义yanyi +演绎yanyi +掩映yanying +沿用yanyong +言语yanyu +演员yanyuan +厌战yanzhan +沿着yanzhe +验证yanzheng +研制yanzhi +严重yanzhong +演奏yanzou +要yao +药yao +约*yao +摇yao +腰yao +咬yao +邀yao +耀yao +陶*yao +侥*yao +疟yao +妖yao +瑶yao +尧yao +遥yao +窑yao +谣yao +姚yao +舀yao +钥*yao +夭yao +爻yao +吆yao +崾yao +徭yao +幺yao +珧yao +杳yao +轺yao +曜yao +肴yao +铫*yao +鹞yao +窈yao +繇yao +鳐yao +摇摆yaobai +腰包yaobao +要不yaobu +谣传yaochuan +要得yaode +要点yaodian +摇动yaodong +窑洞yaodong +遥感yaogan +妖怪yaoguai +要害yaohai +摇撼yaohan +摇晃yaohuang +要件yaojian +要紧yaojin +摇控yaokong +遥控yaokong +摇篮yaolan +要领yaoling +要么yaome +妖魔yaomo +要目yaomu +邀请yaoqing +要求yaoqiu +要塞yaosai +要是yaoshi +钥匙yaoshi +要素yaosu +窈窕yaotiao +摇头yaotou +要闻yaowen +药物yaowu +要挟yaoxie +耀眼yaoyan +谣言yaoyan +妖艳yaoyan +夭折yaozhe +要职yaozhi +鸦片yapian +压迫yapo +压强yaqiang +压缩yasuo +雅兴yaxing +压仰yayang +压抑yayi +压榨yazha +压制yazhi +雅致yazhi +亚洲yazhou +鸭子yazi +雅座yazuo +要不得ybd +一般的说ybds +一部分ybf +要不然ybr +要不是ybs +一般说来ybsl +要不要yby +一辈子ybz +一把抓ybz +用不着ybz +扬长避短ycbd +由此可见yckj +银川市ycs +与此同时ycts +有偿转让yczr +邮电部ydb +有道德ydd +邮电局ydj +一刀切ydq +运动员ydy +印度洋ydy +因地制宜ydzy +也ye +业ye +页ye +叶ye +液ye +夜ye +野ye +爷ye +冶ye +邪*ye +哗*ye +咽*ye +椰ye +噎ye +耶ye +掖ye +曳ye +腋ye +拽*ye +靥ye +谒ye +邺ye +揶ye +晔ye +烨ye +铘ye +夜餐yecan +野餐yecan +野火yehuo +业绩yeji +夜间yejian +冶金yejin +夜里yeli +冶练yelian +野蛮yeman +夜幕yemu +夜色yese +也是yeshi +夜市yeshi +野兽yeshou +液体yeti +野外yewai +夜晚yewan +业务yewu +夜校yexiao +野心yexin +野性yexing +也许yexu +幼儿园yey +爷爷yeye +野营yeying +业余yeyu +野战yezhan +叶子yezi +一方面yfm +一分为二yfwe +阳奉阴违yfyw +一概而论ygel +一国两制yglz +有根有据ygyj +严格要求ygyq +有何特长yhtc +银行帐号yhzh +炎黄子孙yhzs +一yi +以yi +义yi +意yi +已yi +移yi +医yi +议yi +依yi +易yi +乙yi +艺yi +益yi +异yi +宜yi +仪yi +亿yi +遗yi +伊yi +役yi +衣yi +疑yi +亦yi +谊yi +翼yi +译yi +抑yi +忆yi +疫yi +壹yi +揖yi +铱yi +颐yi +夷yi +胰yi +沂yi +姨yi +彝yi +椅yi +蚁yi +倚yi +矣yi +邑yi +屹yi +臆yi +逸yi +肄yi +裔yi +毅yi +溢yi +诣yi +翌yi +绎yi +刈yi +劓yi +仡*yi +佚yi +佾yi +诒yi +圯yi +埸yi +懿yi +苡yi +荑yi +薏yi +弈yi +奕yi +挹yi +弋yi +呓yi +咦yi +咿yi +嗌*yi +噫yi +峄yi +嶷yi +猗yi +饴yi +怿yi +怡yi +悒yi +漪yi +迤yi +驿yi +缢yi +殪yi +轶yi +贻yi +欹*yi +旖yi +熠yi +眙yi +钇yi +镒yi +镱yi +痍yi +瘗yi +癔yi +翊yi +蜴yi +舣yi +羿yi +翳yi +酏yi +黟yi +议案yian +疑案yian +一半yiban +一般yiban +一斑yiban +一边yibian +以便yibian +仪表yibiao +一并yibing +异步yibu +遗产yichan +异常yichang +议程yicheng +益处yichu +遗传yichuan +一次yici +依次yici +依从yicong +一代yidai +一带yidai +一旦yidan +一点yidian +一定yiding +议定yiding +移动yidong +一度yidu +遗毒yidu +一端yiduan +臆断yiduan +亿吨yidun +一发yifa +依法yifa +义愤yifen +衣服yifu +依附yifu +一概yigai +一个yige +一共yigong +议购yigou +已故yigu +一贯yiguan +异国yiguo +遗憾yihan +遗恨yihen +以后yihou +异化yihua +议会yihui +疑惑yihuo +以及yiji +异己yiji +遗迹yiji +议价yijia +意见yijian +移交yijiao +一届yijie +一经yijing +已经yijing +意境yijing +依旧yijiu +一举yiju +依据yiju +移居yiju +议决yijue +依靠yikao +倚靠yikao +一刻yike +医科yike +一块yikuai +以来yilai +依赖yilai +一览yilan +一例yili +毅力yili +屹立yili +一连yilian +意料yiliao +医疗yiliao +遗留yiliu +遗漏yilou +一律yilu +疑虑yilu +议论yilun +一面yimian +以免yimian +疫苗yimiao +移民yimin +因yin +引yin +阴yin +印yin +音yin +银yin +烟*yin +隐yin +饮yin +荫yin +茵yin +殷yin +姻yin +吟yin +淫yin +寅yin +尹yin +胤yin +鄞yin +圻*yin +垠yin +堙yin +茚yin +吲yin +喑yin +狺yin +夤yin +洇yin +湮*yin +氤yin +铟yin +瘾yin +窨yin +蚓yin +霪yin +龈yin +疑难yinan +阴暗yinan +隐蔽yinbi +音标yinbiao +隐藏yincang +阴沉yinchen +银川yinchuan +因此yinci +引导yindao +音调yindiao +印度yindu +引渡yindu +以内yinei +因而yiner +印发yinfa +音符yinfu +应ying +影ying +硬ying +营ying +英ying +映ying +迎ying +樱ying +婴ying +鹰ying +缨ying +莹ying +萤ying +荧ying +蝇ying +赢ying +盈ying +颖ying +嬴ying +郢ying +茔ying +荥*ying +莺ying +萦ying +蓥ying +撄ying +嘤ying +膺ying +滢ying +潆ying +瀛ying +瑛ying +璎ying +楹ying +媵ying +鹦ying +瘿ying +颍ying +罂ying +英镑yingbang +硬币yingbi +应变yingbian +映衬yingchen +应酬yingchou +迎春yingchun +应当yingdang +赢得yingde +婴儿yinger +营房yingfang +迎风yingfeng +应付yingfu +应该yinggai +英国yingguo +樱花yinghua +英魂yinghun +应急yingji +硬件yingjian +迎接yingjie +应届yingjie +英杰yingjie +营救yingjiu +英俊yingjun +盈亏yingkui +赢利yingli +盈利yingli +英烈yinglie +迎面yingmian +英明yingming +硬盘yingpan +影片yingpian +硬拼yingpin +影射yingshe +映射yingshe +樱桃yingtao +迎头yingtou +因果yinguo +影响yingxiang +硬性yingxing +英雄yingxiong +营养yingyang +应邀yingyao +营业yingye +应用yingyong +英勇yingyong +应有yingyou +英语yingyu +盈余yingyu +营造yingzao +应战yingzhan +迎战yingzhan +映照yingzhao +应征yingzheng +影子yingzi +英姿yingzi +银行yinhang +引号yinhao +殷红yinhong +隐患yinhuan +淫秽yinhui +阴魂yinhun +意念yinian +姨娘yiniang +阴极yinji +印鉴yinjian +引进yinjin +引力yinli +阴历yinli +阴凉yinliang +引路yinlu +隐瞒yinman +阴谋yinmou +银幕yinmu +隐慝yinni +银牌yinpai +引起yinqi +殷切yinqie +殷勤yinqin +引擎yinqing +引人yinren +饮食yinshi +印刷yinshua +饮水yinshui +因素yinsu +阴天yintian +引退yintui +因为yinwei +淫威yinwei +阴险yinxian +印象yinxiang +音响yinxiang +音信yinxin +因循yinxun +引言yinyan +阴影yinying +引用yinyong +引诱yinyou +阴雨yinyu +姻缘yinyuan +隐约yinyue +音乐yinyue +引证yinzheng +印证yinzheng +一片yipian +一瞥yipie +一起yiqi +一齐yiqi +义气yiqi +意气yiqi +仪器yiqi +遗弃yiqi +以前yiqian +一切yiqie +依然yiran +亦然yiran +毅然yiran +艺人yiren +宜人yiren +遗容yirong +以上yishang +一生yisheng +医生yisheng +一时yishi +一事yishi +意识yishi +议事yishi +逸事yishi +仪式yishi +医师yishi +医士yishi +遗失yishi +一手yishou +遗书yishu +艺术yishu +意思yisi +一体yiti +议题yiti +遗体yiti +一天yitian +一同yitong +异同yitong +一头yitou +意图yitu +疑团yituan +以外yiwai +意外yiwai +亿万yiwan +以往yiwang +遗忘yiwang +以为yiwei +意味yiwei +意文yiwen +疑问yiwen +译文yiwen +一无yiwu +义务yiwu +遗物yiwu +医务yiwu +贻误yiwu +一下yixia +以下yixia +一线yixian +一向yixiang +一项yixiang +意向yixiang +遗像yixiang +一些yixie +一心yixin +疑心yixin +异性yixing +医学yixue +一言yiyan +义演yiyan +遗言yiyan +一样yiyang +医药yiyao +意义yiyi +异议yiyi +义勇yiyong +易于yiyu +议员yiyuan +意愿yiyuan +医院yiyuan +亿元yiyuan +遗愿yiyuan +疑云yiyun +一再yizai +一早yizao +臆造yizao +依仗yizhang +仪仗yizhang +一朝yizhao +衣着yizhao +依照yizhao +一阵yizhen +一直yizhi +一致yizhi +以至yizhi +以致yizhi +意志yizhi +抑制yizhi +医治yizhi +抑止yizhi +移植yizhi +遗址yizhi +一种yizhong +遗嘱yizhu +研究会yjh +有纪律yjl +研究生yjs +研究所yjs +研究室yjs +养精畜锐yjxr +研究员yjy +拥军优属yjys +一技之长yjzc +一口气ykq +一览表ylb +以理服人ylfr +阅览室yls +有理想ylx +有利于yly +越来越yly +有目共睹ymgd +一目了然ymlr +有没有ymy +云南省yns +育*yo +哟yo +唷yo +用yong +勇yong +永yong +拥yong +涌yong +蛹yong +庸yong +佣yong +臃yong +痈yong +雍yong +踊yong +咏yong +泳yong +恿yong +俑yong +壅yong +墉yong +喁yong +慵yong +邕yong +镛yong +甬yong +鳙yong +饔yong +拥抱yongbao +永别yongbie +永不yongbu +用处yongchu +用度yongdu +用法yongfa +用费yongfei +勇敢yonggan +用功yonggong +永恒yongheng +用户yonghu +拥护yonghu +拥挤yongji +永久yongjiu +用具yongju +永诀yongjue +用力yongli +庸碌yonglu +勇猛yongmeng +用品yongpin +勇气yongqi +勇士yongshi +庸俗yongsu +咏叹yongtan +用途yongtu +涌现yongxian +用心yongxin +用意yongyi +拥有yongyou +用于yongyu +勇于yongyu +永远yongyuan +踊跃yongyue +有you +由you +又you +油you +右you +友you +优you +幼you +游you +尤you +诱you +犹you +幽you +悠you +忧you +邮you +铀you +酉you +佑you +釉you +卣you +攸you +侑you +莠you +莜you +莸you +尢*you +呦you +囿you +宥you +柚you +猷you +牖you +铕you +疣you +蚰you +蚴you +蝣you +蝤*you +繇*you +鱿you +黝you +鼬you +有碍youai +友爱youai +幽暗youan +友邦youbang +右边youbian +忧愁youchou +由此youci +有错youcuo +有待youdai +优待youdai +诱导youdao +有的youde +优等youdeng +有点youdian +邮电youdian +优点youdian +诱发youfa +有功yougong +有关youguan +有害youhai +友好youhao +优化youhua +油画youhua +幽会youhui +优惠youhui +诱惑youhuo +有机youji +游击youji +有劲youjin +幽静youjing +悠久youjiu +邮局youju +由来youlai +游览youlan +有劳youlao +有利youli +有力youli +游离youli +优良youliang +优劣youlie +幽灵youling +忧虑youlu +优美youmei +幼苗youmiao +有名youming +幽默youmo +右派youpai +诱骗youpian +邮票youpiao +尤其youqi +油漆youqi +友情youqing +右倾youqing +有趣youqu +油然youran +犹如youru +有色youse +优胜yousheng +有时youshi +有事youshi +有失youshi +优势youshi +有数youshu +油水youshui +有所yousuo +有望youwang +有为youwei +游戏youxi +有限youxian +优先youxian +悠闲youxian +有效youxiao +幼小youxiao +有些youxie +有心youxin +游行youxing +优秀youxiu +幽雅youya +悠扬youyang +又要youyao +有益youyi +优异youyi +友谊youyi +有用youyong +游泳youyong +有余youyu +由于youyu +犹豫youyu +忧郁youyu +悠远youyuan +优越youyue +有着youzhe +邮政youzheng +优质youzhi +幼稚youzhi +由衷youzhong +邮资youzi +有求必应yqby +以权谋私yqms +有气无力yqwl +迎刃而解yrej +因人而异yrey +与人为善yrws +引人注目yrzm +意识到ysd +艺术家ysj +因势利导ysld +印刷体yst +意识形态ysxt +衣食住行yszx +以身作则yszz +研讨会yth +一条龙ytl +一条心ytx +有条有理ytyl +于yu +与yu +育yu +鱼yu +雨yu +玉yu +余yu +遇yu +预yu +域yu +语yu +愈yu +渔yu +予yu +羽yu +愚yu +御yu +谷*yu +欲yu +宇yu +蔚*yu +尉*yu +迂yu +淤yu +盂yu +榆yu +虞yu +舆yu +俞yu +逾yu +愉yu +渝yu +隅yu +娱yu +屿yu +禹yu +芋yu +郁yu +吁yu +喻yu +峪yu +狱yu +誉yu +浴yu +寓yu +裕yu +豫yu +驭yu +粥*yu +禺yu +毓yu +伛yu +俣yu +谀yu +谕yu +萸yu +菀*yu +蓣yu +揄yu +圄yu +圉yu +嵛yu +狳yu +饫yu +馀yu +庾yu +阈yu +鬻yu +妪yu +妤yu +纡yu +瑜yu +昱yu +觎yu +腴yu +腧*yu +欤yu +於yu +煜yu +熨yu +燠yu +聿yu +钰yu +鹆yu +鹬yu +瘐yu +瘀yu +窬yu +窳yu +蜮yu +蝓yu +竽yu +臾yu +舁yu +雩yu +龉yu +员yuan +原yuan +圆yuan +源yuan +元yuan +远yuan +愿yuan +院yuan +缘yuan +援yuan +园yuan +怨yuan +鸳yuan +渊yuan +冤yuan +垣yuan +袁yuan +辕yuan +猿yuan +苑yuan +垸yuan +塬yuan +芫yuan +掾yuan +圜*yuan +沅yuan +媛yuan +瑗yuan +橼yuan +爰yuan +眢yuan +鸢yuan +螈yuan +箢yuan +鼋yuan +原本yuanben +渊博yuanbo +冤仇yuanchou +远大yuanda +元旦yuandan +园地yuandi +园丁yuanding +远东yuandong +远方yuanfang +缘分yuanfen +原告yuangao +原故yuangu +缘故yuangu +圆滑yuanhua +原籍yuanji +冤家yuanjia +元件yuanjian +远见yuanjian +远近yuanjin +远景yuanjing +援救yuanjiu +原来yuanlai +原理yuanli +原谅yuanliang +原料yuanliao +远虑yuanlu +圆满yuanman +远谋yuanmou +远期yuanqi +冤屈yuanqu +源泉yuanquan +原始yuanshi +远视yuanshi +元首yuanshou +元帅yuanshuai +元素yuansu +援外yuanwai +愿望yuanwang +冤枉yuanwang +原先yuanxian +远销yuanxiao +元宵yuanxiao +院校yuanxiao +原形yuanxing +怨言yuanyan +原野yuanye +愿意yuanyi +园艺yuanyi +原因yuanyin +援引yuanyin +原有yuanyou +缘由yuanyou +远游yuanyou +远远yuanyuan +渊源yuanyuan +元月yuanyue +原则yuanze +院长yuanzhang +远征yuanzheng +援助yuanzhu +原子yuanzi +院子yuanzi +预报yubao +预备yubei +愚笨yuben +余步yubu +预测yuce +愚蠢yuchun +遇到yudao +预定yuding +预订yuding +余毒yudu +月yue +说*yue +越yue +约yue +乐*yue +跃yue +曰yue +阅yue +钥yue +岳yue +粤yue +悦yue +龠yue +瀹yue +栎*yue +樾yue +刖yue +钺yue +月报yuebao +月初yuechu +月底yuedi +约定yueding +月度yuedu +阅读yuedu +乐队yuedui +约法yuefa +月份yuefen +月光yueguang +越轨yuegui +约会yuehui +越界yuejie +跃进yuejin +越境yuejing +阅览yuelan +阅历yueli +月亮yueliang +月末yuemo +约莫yuemo +越南yuenan +乐谱yuepu +乐器yueqi +月球yueqiu +乐曲yuequ +月色yuese +越是yueshi +约束yueshu +月台yuetai +乐团yuetuan +约有yueyou +乐章yuezhang +预防yufang +预风yufeng +预付yufu +预感yugan +预告yugao +预购yugou +遇害yuhai +宇航yuhang +与会yuhui +迂回yuhui +雨季yuji +预计yuji +遇见yujian +预见yujian +语句yuju +豫剧yuju +愉快yukuai +娱乐yule +鱼雷yulei +预料yuliao +雨露yulu +舆论yulun +愚昧yumei +育苗yumiao +预谋yumou +运yun +员*yun +云yun +匀yun +均*yun +允yun +孕yun +耘yun +郧yun +陨yun +蕴yun +酝yun +晕yun +韵yun +郓yun +芸yun +狁yun +恽yun +愠yun +纭yun +韫yun +殒yun +昀yun +氲yun +熨yun +遇难yunan +云彩yuncai +蕴藏yuncang +匀称yuncheng +运动yundong +熨斗yundou +云海yunhai +运河yunhe +韵律yunlu +陨落yunluo +云南yunnan +酝酿yunnian +允诺yunnuo +愚弄yunong +运气yunqi +运输yunshu +运算yunsuan +云梯yunti +运往yunwang +韵味yunwei +云雾yunwu +云霞yunxia +运行yunxing +允许yunxu +运用yunyong +孕育yunyu +运载yunzai +运转yunzhuan +与其yuqi +语气yuqi +预期yuqi +预审yushen +于是yushi +预示yushi +预售yushou +雨水yushui +预算yusuan +欲望yuwang +语文yuwen +预习yuxi +预先yuxian +遇险yuxian +预想yuxiang +预言yuyan +语言yuyan +寓言yuyan +预演yuyan +予以yuyi +寓于yuyu +愉悦yuyue +预兆yuzhao +预支yuzhi +宇宙yuzhou +有文化ywh +业务联系ywlx +意味着ywz +有限公司yxgs +一系列yxl +有效期yxq +医学院yxy +一心一意yxyy +游泳池yyc +营业额yye +夜以继日yyjr +应用科学yykx +一言堂yyt +引以为戒yywj +优越性yyx +营业员yyy +隐隐约约yyyy +运用自如yyzr +拥政爱民yzam +原子能yzn +已知数yzs +有助于yzy +言之有理yzyl +在z +这z +主z +中z +种z +着z +争z +战z +作z +正z +之z +制z +重z +组z +治z +只z +子z +自z +质z +指z +杂za +扎*za +咱za +匝za +砸za +咋za +咂za +在zai +再zai +载zai +栽zai +灾zai +仔*zai +哉zai +宰zai +崽zai +甾zai +再版zaiban +再不zaibu +在场zaichang +再度zaidu +宰割zaige +灾害zaihai +再好zaihao +在乎zaihu +灾荒zaihuang +再会zaihui +灾祸zaihuo +再见zaijian +在理zaili +灾民zaimin +灾难zainan +栽培zaipei +再起zaiqi +灾情zaiqing +灾区zaiqu +再三zaisan +在世zaishi +再说zaishuo +载体zaiti +在下zaixia +再现zaixian +宰相zaixiang +在意zaiyi +在于zaiyu +再造zaizao +再则zaize +在职zaizhi +再植zaizhi +杂技zaji +杂粮zaliang +杂乱zaluan +赞zan +咱zan +暂zan +攒zan +拶zan +瓒zan +昝zan +簪zan +糌zan +趱zan +錾zan +赞成zancheng +暂定zanding +藏*zang +脏zang +葬zang +赃zang +奘zang +驵zang +臧zang +赞歌zange +赃款zangkuan +葬送zangsong +赃物zangwu +藏族zangzu +杂念zanian +赞美zanmei +咱们zanmen +暂且zanqie +暂缺zanque +赞赏zanshang +暂时zanshi +赞颂zansong +赞叹zantan +暂停zanting +赞同zantong +暂行zanxing +赞扬zanyang +暂用zanyong +赞助zanzhu +造zao +早zao +遭zao +燥zao +凿zao +糟zao +枣zao +皂zao +藻zao +澡zao +蚤zao +躁zao +噪zao +灶zao +唣zao +早晨zaochen +造成zaocheng +凿穿zaochuan +造次zaoci +造词zaoci +遭到zaodao +早稻zaodao +造反zaofan +早饭zaofan +造福zaofu +糟糕zaogao +造化zaohua +造价zaojia +造就zaojiu +造林zaolin +早年zaonian +糟粕zaopo +早期zaoqi +早日zaori +早上zaoshang +遭受zaoshou +早衰zaoshuai +糟蹋zaota +早晚zaowan +造型zaoxing +遭殃zaoyang +造谣zaoyao +造诣zaoyi +早已zaoyi +噪音zaoyin +遭遇zaoyu +造字zaozi +杂谈zatan +杂文zawen +杂质zazhi +杂志zazhi +资本主义zbzy +资产阶级zcjj +增长率zcl +总参谋部zcmb +真才实学zcsx +自动化zdh +自动检测zdjc +自动检索zdjs +自动控制zdkz +主动权zdq +招待所zds +总的说来zdsl +主动性zdx +则ze +择ze +责ze +侧*ze +泽ze +咋*ze +仄ze +赜ze +啧ze +帻ze +迮ze +昃ze +笮ze +箦ze +舴ze +责备zebei +责成zecheng +责罚zefa +责怪zeguai +贼zei +责令zeling +责骂zema +怎zen +谮zen +增zeng +曾zeng +综*zeng +憎zeng +赠zeng +缯zeng +甑zeng +罾zeng +锃zeng +增补zengbu +增产zengchan +增长zengchang +增大zengda +增订zengding +增多zengduo +增高zenggao +憎恨zenghen +增加zengjia +增减zengjian +增进zengjin +增量zengliang +赠品zengpin +增强zengqiang +增删zengshan +增设zengshe +赠送zengsong +增添zengtian +赠言zengyan +增益zengyi +增援zengyuan +怎么zenme +怎奈zennai +怎样zenyang +责任zeren +责问zewen +总而言之zeyz +争分夺秒zfdm +针锋相对zfxd +自负盈亏zfyk +中关村zgc +自告奋勇zgfy +中国共产党zggd +总工会zgh +中国特色的zgtd +中国银行zgyh +自古以来zgyl +中国政府zgzf +中共中央zgzy +查*zha +扎zha +炸zha +闸zha +铡zha +轧zha +渣zha +蜡*zha +喳zha +札zha +眨zha +栅zha +榨zha +咋*zha +乍zha +诈zha +柞*zha +揸zha +吒zha +咤zha +哳zha +喋*zha +楂*zha +砟zha +痄zha +蚱zha +齄zha +炸弹zhadan +扎根zhagen +炸毁zhahui +寨zhai +侧*zhai +择*zhai +摘zhai +窄zhai +斋zhai +翟*zhai +祭*zhai +宅zhai +债zhai +砦zhai +瘵zhai +摘录zhailu +债权zhaiquan +债务zhaiwu +窄小zhaixiao +摘要zhaiyao +札记zhaji +战zhan +展zhan +站zhan +占zhan +粘*zhan +颤*zhan +瞻zhan +毡zhan +詹zhan +沾zhan +盏zhan +斩zhan +辗zhan +崭zhan +蘸zhan +栈zhan +湛zhan +绽zhan +谵zhan +搌zhan +旃zhan +战败zhanbai +战报zhanbao +战备zhanbei +战场zhanchang +展翅zhanchi +展出zhanchu +战地zhandi +战斗zhandou +战犯zhanfan +长*zhang +张zhang +章zhang +掌zhang +仗zhang +障zhang +胀zhang +涨zhang +账zhang +樟zhang +彰zhang +漳zhang +杖zhang +丈zhang +帐zhang +瘴zhang +仉zhang +鄣zhang +幛zhang +嶂zhang +獐zhang +嫜zhang +璋zhang +蟑zhang +障碍zhangai +站岗zhangang +长辈zhangbei +章程zhangcheng +长大zhangda +战歌zhange +章法zhangfa +帐房zhangfang +丈夫zhangfu +掌管zhangguan +帐号zhanghao +章节zhangjie +帐目zhangmu +战功zhangong +掌权zhangquan +张贴zhangtie +战鼓zhangu +沾光zhanguang +战国zhanguo +战果zhanguo +张望zhangwang +掌握zhangwo +张扬zhangyang +战壕zhanhao +战后zhanhou +战机zhanji +战绩zhanji +战局zhanju +占据zhanju +展开zhankai +战况zhankuang +展览zhanlan +占领zhanling +战略zhanlue +战马zhanma +展品zhanpin +战区zhanqu +沾染zhanran +战胜zhansheng +战时zhanshi +战事zhanshi +战士zhanshi +展示zhanshi +战术zhanshu +展望zhanwang +战线zhanxian +展现zhanxian +展销zhanxiao +崭新zhanxin +瞻仰zhanyang +战役zhanyi +占用zhanyong +占有zhanyou +战友zhanyou +站长zhanzhang +战争zhanzheng +着*zhao +照zhao +找zhao +招zhao +朝*zhao +召zhao +赵zhao +爪zhao +罩zhao +沼zhao +兆zhao +嘲*zhao +昭zhao +肇zhao +诏zhao +啁*zhao +棹zhao +钊zhao +笊zhao +照办zhaoban +照搬zhaoban +招标zhaobiao +照常zhaochang +照抄zhaochao +招待zhaodai +照发zhaofa +招工zhaogong +照顾zhaogu +招呼zhaohu +召唤zhaohuan +照会zhaohui +着急zhaoji +招集zhaoji +召集zhaoji +招架zhaojia +召开zhaokai +招考zhaokao +招揽zhaolan +着力zhaoli +照例zhaoli +照料zhaoliao +着落zhaoluo +着迷zhaomi +照明zhaoming +招聘zhaopin +朝气zhaoqi +招惹zhaore +照射zhaoshe +招生zhaosheng +着手zhaoshou +招手zhaoshou +招收zhaoshou +招贴zhaotie +朝夕zhaoxi +朝霞zhaoxia +着想zhaoxiang +照相zhaoxiang +昭雪zhaoxue +找寻zhaoxun +着眼zhaoyan +照样zhaoyang +照耀zhaoyao +照应zhaoying +招展zhaozhan +招致zhaozhi +着重zhaozhong +照着zhaozhuo +诈骗zhapian +榨取zhaqu +诈取zhaqu +扎实zhashi +炸药zhayao +渣滓zhazi +这zhe +着zhe +者zhe +折zhe +哲zhe +浙zhe +遮zhe +蛰zhe +辙zhe +锗zhe +蔗zhe +谪zhe +摺zhe +柘zhe +辄zhe +磔zhe +鹧zhe +褶zhe +蜇zhe +赭zhe +这般zheban +这边zhebian +这次zheci +遮挡zhedang +这点zhedian +折叠zhedie +折服zhefu +遮盖zhegai +这个zhege +折合zhehe +浙江zhejiang +折旧zhejiu +折扣zhekou +这里zheli +哲理zheli +这么zheme +折磨zhemo +真zhen +针zhen +阵zhen +镇zhen +振zhen +震zhen +珍zhen +诊zhen +斟zhen +甄zhen +砧zhen +臻zhen +贞zhen +侦zhen +枕zhen +疹zhen +圳zhen +蓁zhen +浈zhen +溱*zhen +缜zhen +桢zhen +椹*zhen +榛zhen +轸zhen +赈zhen +胗zhen +朕zhen +祯zhen +畛zhen +稹zhen +鸩zhen +箴zhen +珍爱zhenai +珍宝zhenbao +针砭zhenbian +珍藏zhencang +贞操zhencao +侦察zhencha +真诚zhencheng +震荡zhendang +阵地zhendi +真谛zhendi +震动zhendong +诊断zhenduan +针对zhendui +振奋zhenfen +争zheng +正zheng +政zheng +整zheng +证zheng +征zheng +蒸zheng +症zheng +丁*zheng +郑zheng +挣zheng +睁zheng +狰zheng +怔zheng +拯zheng +帧zheng +诤zheng +峥zheng +徵zheng +钲zheng +铮zheng +筝zheng +争霸zhengba +整备zhengbei +正比zhengbi +政变zhengbian +争辩zhengbian +整编zhengbian +征兵zhengbing +政策zhengce +正常zhengchang +争吵zhengchao +征程zhengcheng +争持zhengchi +正大zhengda +正当zhengdang +政党zhengdang +整党zhengdang +正道zhengdao +争端zhengduan +整顿zhengdun +争夺zhengduo +蒸发zhengfa +政法zhengfa +正反zhengfan +整风zhengfeng +政府zhengfu +征服zhengfu +整改zhenggai +整个zhengge +征购zhenggou +争光zhengguang +正规zhenggui +正轨zhenggui +正好zhenghao +政绩zhengji +征集zhengji +证件zhengjian +政见zhengjian +整洁zhengjie +政局zhengju +证据zhengju +正理zhengli +整理zhengli +正梁zhengliang +政令zhengling +争论zhenglun +政论zhenglun +正面zhengmian +争鸣zhengming +证明zhengming +正派zhengpai +征聘zhengpin +争气zhengqi +正气zhengqi +蒸气zhengqi +整齐zhengqi +正巧zhengqiao +征求zhengqiu +争取zhengqu +政权zhengquan +正确zhengque +证人zhengren +正是zhengshi +正式zhengshi +正视zhengshi +证实zhengshi +征收zhengshou +整数zhengshu +证书zhengshu +征税zhengshui +整套zhengtao +正题zhengti +政体zhengti +整体zhengti +整天zhengtian +征调zhengtiao +正统zhengtong +征途zhengtu +珍贵zhengui +政委zhengwei +正文zhengwen +征文zhengwen +政务zhengwu +争先zhengxian +政协zhengxie +整形zhengxing +整修zhengxiu +征询zhengxun +争艳zhengyan +正业zhengye +正义zhengyi +争议zhengyi +征用zhengyong +正月zhengyue +正在zhengzai +挣扎zhengzha +整整zhengzheng +正直zhengzhi +政治zhengzhi +争执zhengzhi +正中zhengzhong +郑重zhengzhong +郑州zhengzhou +症状zhengzhuang +正宗zhengzong +震撼zhenhan +侦缉zhenji +真假zhenjia +阵脚zhenjiao +贞节zhenjie +贞洁zhenjie +镇静zhenjing +震惊zhenjing +真空zhenkong +真理zhenli +诊疗zhenliao +珍品zhenpin +珍奇zhenqi +真切zhenqie +真情zhenqing +真确zhenque +真人zhenren +阵容zhenrong +真是zhenshi +真实zhenshi +阵势zhenshi +珍视zhenshi +侦探zhentan +阵亡zhenwang +珍惜zhenxi +阵线zhenxian +真相zhenxiang +振兴zhenxing +镇压zhenya +阵阵zhenzhen +真正zhenzheng +真知zhenzhi +真挚zhenzhi +珍重zhenzhong +珍珠zhenzhu +斟酌zhenzhuo +振作zhenzuo +这是zheshi +这时zheshi +折腾zheteng +这些zhexie +哲学zhexue +遮掩zheyan +这样zheyang +这种zhezhong +折中zhezhong +之zhi +制zhi +治zhi +只zhi +质zhi +指zhi +直zhi +支zhi +织zhi +止zhi +至zhi +置zhi +志zhi +值zhi +知zhi +识*zhi +执zhi +职zhi +植zhi +纸zhi +致zhi +枝zhi +殖zhi +脂zhi +智zhi +氏*zhi +肢zhi +秩zhi +址zhi +滞zhi +汁zhi +芝zhi +吱zhi +蜘zhi +侄zhi +趾zhi +旨zhi +挚zhi +掷zhi +帜zhi +峙zhi +稚zhi +炙zhi +痔zhi +窒zhi +卮zhi +陟zhi +郅zhi +埴zhi +芷zhi +摭zhi +帙zhi +徵*zhi +忮zhi +彘zhi +咫zhi +骘zhi +栉zhi +枳zhi +栀zhi +桎zhi +轵zhi +轾zhi +贽zhi +胝zhi +膣zhi +祉zhi +祗zhi +黹zhi +雉zhi +鸷zhi +痣zhi +蛭zhi +絷zhi +酯zhi +跖zhi +踬zhi +踯zhi +豸zhi +觯zhi +治安zhian +值班zhiban +植保zhibao +置备zhibei +质变zhibian +指标zhibiao +职别zhibie +支部zhibu +制裁zhicai +支撑zhicheng +职称zhicheng +支持zhichi +指出zhichu +支出zhichu +至此zhici +值此zhici +直达zhida +只当zhidang +直到zhidao +指导zhidao +知道zhidao +只得zhide +值得zhide +质地zhidi +指点zhidian +制定zhiding +指定zhiding +制订zhiding +制度zhidu +支队zhidui +至多zhiduo +知法zhifa +执法zhifa +制服zhifu +支付zhifu +职工zhigong +只顾zhigu +只管zhiguan +直观zhiguan +治国zhiguo +只好zhihao +之后zhihou +指挥zhihui +智慧zhihui +知己zhiji +指甲zhijia +之间zhijian +只见zhijian +指教zhijiao +直接zhijie +枝节zhijie +至今zhijin +直经zhijing +直径zhijing +止境zhijing +致敬zhijing +知觉zhijue +治理zhili +致力zhili +智力zhili +质量zhiliang +治疗zhiliao +指令zhiling +直流zhiliu +支流zhiliu +殖民zhimin +致命zhiming +指明zhiming +知名zhiming +智谋zhimou +指南zhinan +智囊zhinang +之内zhinei +只能zhineng +职能zhineng +智能zhineng +只怕zhipa +指派zhipai +支配zhipei +支票zhipiao +制品zhipin +志气zhiqi +之前zhiqian +支前zhiqian +值勤zhiqin +执勤zhiqin +知情zhiqing +知青zhiqing +智取zhiqu +志趣zhiqu +知趣zhiqu +职权zhiquan +值日zhiri +治丧zhisang +之上zhishang +直上zhishang +至上zhishang +至少zhishao +制胜zhisheng +之声zhisheng +只是zhishi +指使zhishi +支使zhishi +致使zhishi +知事zhishi +指示zhishi +知识zhishi +指数zhishu +支书zhishu +直属zhishu +植树zhishu +直爽zhishuang +治水zhishui +直说zhishuo +致死zhisi +之外zhiwai +指望zhiwang +职位zhiwei +质问zhiwen +植物zhiwu +职务zhiwu +窒息zhixi +之下zhixia +直线zhixian +指向zhixiang +志向zhixiang +知心zhixin +执行zhixing +只许zhixu +秩序zhixu +直言zhiyan +只要zhiyao +职业zhiye +致意zhiyi +旨意zhiyi +质疑zhiyi +指引zhiyin +知音zhiyin +只有zhiyou +至于zhiyu +置于zhiyu +智育zhiyu +职员zhiyuan +支援zhiyuan +志愿zhiyuan +制约zhiyue +制造zhizao +指责zhize +职责zhize +纸张zhizhang +职掌zhizhang +执照zhizhao +指正zhizheng +执政zhizheng +制止zhizhi +直至zhizhi +之中zhizhong +支助zhizhu +支柱zhizhu +知足zhizu +制作zhizuo +走后门zhm +中华民国zhmg +中华民族zhmz +中zhong +种zhong +重zhong +众zhong +钟zhong +终zhong +忠zhong +肿zhong +仲zhong +盅zhong +衷zhong +冢zhong +忪*zhong +锺zhong +螽zhong +舯zhong +踵zhong +钟爱zhongai +重办zhongban +重兵zhongbing +中部zhongbu +仲裁zhongcai +中层zhongceng +衷肠zhongchang +忠诚zhongcheng +重大zhongda +重担zhongdan +中等zhongdeng +种地zhongdi +重地zhongdi +重点zhongdian +终点zhongdian +中东zhongdong +中断zhongduan +终端zhongduan +中队zhongdui +众多zhongduo +重犯zhongfan +忠告zhonggao +中共zhonggong +中国zhongguo +忠厚zhonghou +中华zhonghua +中级zhongji +终极zhongji +重价zhongjia +中间zhongjian +中坚zhongjian +中奖zhongjiang +终结zhongjie +终究zhongjiu +终久zhongjiu +终局zhongju +中肯zhongken +种类zhonglei +中立zhongli +重量zhongliang +终了zhongliao +中流zhongliu +肿瘤zhongliu +中美zhongmei +众目zhongmu +中年zhongnian +终年zhongnian +中秋zhongqiu +重任zhongren +中日zhongri +终日zhongri +中伤zhongshang +重赏zhongshang +终身zhongshen +终生zhongsheng +重视zhongshi +忠实zhongshi +中枢zhongshu +众说zhongshuo +中苏zhongsu +终天zhongtian +中途zhongtu +重托zhongtuo +中外zhongwai +重围zhongwei +中文zhongwen +中午zhongwu +中西zhongxi +中心zhongxin +忠心zhongxin +衷心zhongxin +中性zhongxing +中学zhongxue +中旬zhongxun +忠言zhongyan +中央zhongyang +中药zhongyao +重要zhongyao +中医zhongyi +重用zhongyong +中庸zhongyong +中游zhongyou +终于zhongyu +忠于zhongyu +忠贞zhongzhen +中止zhongzhi +种植zhongzhi +终止zhongzhi +种种zhongzhong +中专zhongzhuan +种族zhongzu +轴zhou +周zhou +洲zhou +州zhou +皱zhou +骤zhou +舟zhou +诌zhou +粥zhou +肘zhou +帚zhou +咒zhou +宙zhou +昼zhou +荮zhou +啁zhou +妯zhou +纣zhou +绉zhou +胄zhou +碡zhou +籀zhou +繇*zhou +酎zhou +周到zhoudao +咒骂zhouma +周密zhoumi +周末zhoumo +周期zhouqi +周全zhouquan +周围zhouwei +周旋zhouxuan +昼夜zhouye +周折zhouzhe +周知zhouzhi +周转zhouzhuan +总后勤部zhqb +中华人民共和国zhrg +主zhu +注zhu +著zhu +住zhu +助zhu +猪zhu +铸zhu +属*zhu +株zhu +筑zhu +柱zhu +术*zhu +驻zhu +逐zhu +祝zhu +竹zhu +贮zhu +珠zhu +朱zhu +诸zhu +蛛zhu +诛zhu +烛zhu +煮zhu +拄zhu +瞩zhu +嘱zhu +蛀zhu +伫zhu +侏zhu +邾zhu +茱zhu +洙zhu +渚zhu +潴zhu +杼zhu +槠zhu +橥zhu +炷zhu +铢zhu +疰zhu +瘃zhu +褚*zhu +竺zhu +箸zhu +舳zhu +翥zhu +躅zhu +麈zhu +抓zhua +挝*zhua +抓好zhuahao +转*zhuai +曳*zhuai +拽zhuai +抓紧zhuajin +转zhuan +专zhuan +传*zhuan +砖zhuan +撰zhuan +赚zhuan +篆zhuan +啭zhuan +馔zhuan +沌*zhuan +颛zhuan +转变zhuanbian +转播zhuanbo +专长zhuanchang +专程zhuancheng +转达zhuanda +转发zhuanfa +装zhuang +状zhuang +壮zhuang +庄zhuang +撞zhuang +幢*zhuang +桩zhuang +妆zhuang +僮zhuang +奘*zhuang +转告zhuangao +装扮zhuangban +装备zhuangbei +壮大zhuangda +装订zhuangding +壮观zhuangguan +装甲zhuangjia +庄稼zhuangjia +庄嫁zhuangjia +壮举zhuangju +状况zhuangkuang +壮阔zhuangkuo +壮丽zhuangli +壮烈zhuanglie +装配zhuangpei +装饰zhuangshi +状态zhuangtai +装卸zhuangxie +庄严zhuangyan +庄园zhuangyuan +装运zhuangyun +装置zhuangzhi +壮志zhuangzhi +庄重zhuangzhong +转化zhuanhua +转换zhuanhuan +转给zhuanji +专家zhuanjia +专科zhuanke +专利zhuanli +专门zhuanmen +转让zhuanrang +专题zhuanti +转向zhuanxiang +专心zhuanxin +转眼zhuanyan +专业zhuanye +转移zhuanyi +专员zhuanyuan +转载zhuanzai +转折zhuanzhe +转正zhuanzheng +专政zhuanzheng +专制zhuanzhi +专职zhuanzhi +专注zhuanzhu +专著zhuanzhu +主办zhuban +逐步zhubu +贮藏zhucang +注册zhuce +助长zhuchang +主持zhuchi +主次zhuci +主导zhudao +注定zhuding +主动zhudong +主队zhudui +主犯zhufan +住房zhufang +祝福zhufu +嘱咐zhufu +逐个zhuge +主攻zhugong +助工zhugong +主管zhuguan +主观zhuguan +追zhui +锥zhui +椎zhui +赘zhui +坠zhui +缀zhui +惴zhui +骓zhui +缒zhui +追捕zhuibu +追查zhuicha +追悼zhuidao +追赶zhuigan +坠毁zhuihui +追加zhuijia +追究zhuijiu +追求zhuiqiu +追认zhuiren +追溯zhuisu +追随zhuisui +追问zhuiwen +追逐zhuizhu +追踪zhuizong +主机zhuji +主见zhujian +逐渐zhujian +主将zhujiang +主讲zhujiang +主教zhujiao +主角zhujiao +注解zhujie +祝酒zhujiu +主力zhuli +助理zhuli +株连zhulian +主粮zhuliang +主流zhuliu +驻留zhuliu +著名zhuming +主谋zhumou +注目zhumu +瞩目zhumu +准zhun +屯*zhun +谆zhun +肫zhun +窀zhun +准备zhunbei +逐年zhunian +准确zhunque +准绳zhunsheng +准时zhunshi +准许zhunxu +准则zhunze +着*zhuo +著*zhuo +捉zhuo +桌zhuo +缴*zhuo +拙zhuo +卓zhuo +琢zhuo +茁zhuo +酌zhuo +啄zhuo +灼zhuo +浊zhuo +倬zhuo +诼zhuo +擢zhuo +浞zhuo +涿zhuo +濯zhuo +棹*zhuo +焯zhuo +禚zhuo +斫zhuo +镯zhuo +拙劣zhuolie +琢磨zhuomo +捉弄zhuonong +酌情zhuoqing +卓越zhuoyue +茁壮zhuozhuang +主权zhuquan +主人zhuren +主任zhuren +诸如zhuru +注色zhuse +注视zhushi +柱石zhushi +注释zhushi +助手zhushou +主送zhusong +住宿zhusu +珠算zhusuan +主题zhuti +主体zhuti +逐条zhutiao +嘱托zhutuo +诸位zhuwei +主席zhuxi +注销zhuxiao +主要zhuyao +逐一zhuyi +主义zhuyi +主意zhuyi +注意zhuyi +祝愿zhuyuan +逐月zhuyue +主宰zhuzai +铸造zhuzao +驻扎zhuzha +住宅zhuzhai +主张zhuzhang +住址zhuzhi +注重zhuzhong +著作zhuzuo +子zi +自zi +资zi +字zi +紫zi +仔zi +籽zi +姿zi +吱*zi +兹zi +咨zi +滋zi +淄zi +孜zi +滓zi +渍zi +谘zi +茈*zi +呲*zi +嵫zi +姊zi +孳zi +缁zi +梓zi +辎zi +赀zi +恣zi +眦zi +锱zi +秭zi +耔zi +笫zi +粢zi +趑zi +觜zi +訾zi +龇zi +鲻zi +髭zi +自爱ziai +自白zibai +自卑zibei +资本ziben +资产zichan +滋长zichang +自称zicheng +自传zichuan +自从zicong +子弟zidi +字典zidian +自动zidong +自发zifa +自费zifei +自封zifeng +自负zifu +字符zifu +资格zige +字根zigen +自豪zihao +自给ziji +自己ziji +字迹ziji +字节zijie +资金zijin +自救zijiu +自居ziju +自觉zijue +字库ziku +自夸zikua +自理zili +资历zili +资料ziliao +自满ziman +自勉zimian +字母zimu +字幕zimu +子女zinu +自强ziqiang +自然ziran +滋润zirun +自杀zisha +自身zishen +姿势zishi +自述zishu +自私zisi +姿态zitai +字体ziti +字帖zitie +自卫ziwei +滋味ziwei +自问ziwen +自我ziwo +仔细zixi +自信zixin +自修zixiu +自叙zixu +自选zixuan +自学zixue +咨询zixun +滋养ziyang +自由ziyou +自愿ziyuan +资源ziyuan +自找zizhao +自治zizhi +自重zizhong +资助zizhu +自尊zizun +直截了当zjld +浙江省zjs +这就是说zjss +中纪委zjw +再接再厉zjzl +中联部zlb +专利法zlf +质量管理zlgl +自力更生zlgs +展览会zlh +智力开发zlkf +专利权zlq +知名人士zmrs +这么些zmx +这么样zmy +怎么样zmy +总zong +纵zong +宗zong +综zong +棕zong +鬃zong +踪zong +偬zong +枞zong +腙zong +粽zong +总部zongbu +总裁zongcai +总参zongcan +总队zongdui +总额zonge +总纲zonggang +总共zonggong +纵贯zongguan +总和zonghe +综合zonghe +纵横zongheng +总后zonghou +总计zongji +踪迹zongji +宗教zongjiao +总结zongjie +总局zongju +总括zongkuo +总理zongli +总论zonglun +宗派zongpai +纵情zongqing +纵深zongshen +总是zongshi +纵使zongshi +总数zongshu +总算zongsuan +总体zongti +总统zongtong +总务zongwu +踪影zongying +总帐zongzhang +总政zongzheng +总之zongzhi +宗旨zongzhi +走zou +邹zou +奏zou +揍zou +诹zou +陬zou +鄹zou +驺zou +鲰zou +走访zoufang +邹虹zouhong +走私zousi +奏效zouxiao +酌情处理zqcl +中青年zqn +朝气蓬勃zqpb +准确无误zqww +正确性zqx +诸如此类zrcl +责任感zrg +自然界zrj +主人翁zrw +责任心zrx +责任制zrz +再生产zsc +自上而下zsex +知识分子zsfz +这时候zsh +知识化zsh +株式会社zshs +总书记zsj +装饰品zsp +综上所述zsss +之所以zsy +自始至终zszz +众所周知zszz +座谈会zth +组zu +族zu +足zu +阻zu +祖zu +租zu +卒zu +诅zu +俎zu +菹zu +镞zu +阻碍zuai +钻zuan +赚*zuan +纂zuan +攥zuan +缵zuan +躜zuan +钻研zuanyan +组成zucheng +阻挡zudang +组阁zuge +足够zugou +祖国zuguo +组合zuhe +最zui +罪zui +嘴zui +堆*zui +咀*zui +醉zui +蕞zui +最初zuichu +最大zuida +最低zuidi +罪恶zuie +罪犯zuifan +最高zuigao +罪过zuiguo +最好zuihao +最后zuihou +最坏zuihuai +最佳zuijia +最近zuijin +嘴脸zuilian +罪名zuiming +罪孽zuinie +罪人zuiren +最先zuixian +最小zuixiao +最新zuixin +醉心zuixin +罪行zuixing +罪责zuize +罪证zuizheng +最终zuizhong +罪状zuizhuang +阻击zuji +租界zujie +租借zujie +阻拦zulan +阻力zuli +租赁zulin +尊zun +遵zun +撙zun +樽zun +鳟zun +阻挠zunao +遵从zuncong +尊贵zungui +尊敬zunjing +遵守zunshou +遵循zunxun +尊严zunyan +遵照zunzhao +尊重zunzhong +作zuo +做zuo +左zuo +座zuo +坐zuo +昨zuo +撮*zuo +凿*zuo +搓*zuo +琢*zuo +佐zuo +柞zuo +阼zuo +唑zuo +嘬zuo +怍zuo +胙zuo +祚zuo +笮*zuo +作案zuoan +作弊zuobi +左边zuobian +坐标zuobiao +做到zuodao +作法zuofa +做法zuofa +作废zuofei +作风zuofeng +做工zuogong +作怪zuoguai +做好zuohao +作家zuojia +作客zuoke +作乐zuole +作乱zuoluan +坐落zuoluo +左派zuopai +作品zuopin +左倾zuoqing +做人zuoren +昨日zuori +做事zuoshi +坐视zuoshi +座谈zuotan +昨天zuotian +昨晚zuowan +作为zuowei +座位zuowei +坐位zuowei +作文zuowen +作物zuowu +作业zuoye +昨夜zuoye +作用zuoyong +左右zuoyou +作战zuozhan +作者zuozhe +作证zuozheng +作主zuozhu +做主zuozhu +做作zuozuo +足球zuqiu +阻塞zuse +祖师zushi +祖先zuxian +组长zuzhang +组织zuzhi +阻止zuzhi +祖宗zuzong +中外合资zwhz +责无旁贷zwpd +中宣部zxb +自行车zxc +自下而上zxes +忠心耿耿zxgg +展销会zxh +照相机zxj +争先恐后zxkh +中学生zxs +主席团zxt +中小学zxx +自信心zxx +中央办公厅zybt +着眼点zyd +专业对口zydk +中央电视台zydt +中央各部委zygw +专业化zyh +专业户zyh +中央军委zyjw +座右铭zym +中央全会zyqh +中央人民广播电台zyrt +主要人员zyry +专业人员zyry +中央书记处zysc +中央委员会zywh +中央委员zywy +重要性zyx +主要原因zyyy +中央政治局zyzj +专业知识zyzs +中组部zzb +组织部zzb +政治部zzb +政治处zzc +转折点zzd +置之度外zzdw +政治局zzj +自治区zzq +蒸蒸日上zzrs +组织上zzs +郑州市zzs +组织性zzx +自尊心zzx +赵紫阳zzy +总政治部zzzb +喷码pm +优喷yp +科技kj +比洋by +公司gs +威诺巴赫wnbh +有限公司yxgz +股份公司gfgs +企业qy +标准bz +喷码机pmj +电线dx +电缆dl +电线电缆dxdl +电力电缆dldl +绝缘jy +绝缘层jyc +导体dt +导线dx +电力dl +通信tx +控制电缆kzdl +补偿电缆bcdl +屏蔽电缆pbdl +高温电缆gwdl +计算机电缆jsjdl +信号电缆xhdl +同轴电缆tzdl +耐火电缆nhdl +船用电缆cydl +铝合金电缆lhjdl +单股dg +多股dg +连接lj +电路dl +电器dq +型号xh +铜t +铝l +铅包qb +铝包qb +聚氯乙烯jlyx +电磁线dcx +北京市bj +东城区dcq +西城区xcq +崇文区cwq +宣武区xwq +朝阳区zyq +海淀区hdq +丰台区ftq +房山区fsq +通州区tzq +顺义区syq +昌平区cpq +大兴区txq +怀柔区hrq +平谷区pgq +门头沟区mtgq +石景山区sjsq +天津市tjs +和平区hpq +河东区hdq +河西区hxq +南开区nkq +河北区hbq +红桥区hqq +塘沽区tgq +汉沽区hgq +大港区tgq +东丽区dlq +西青区xqq +北辰区bcq +津南区jnq +武清区wqq +宝坻区bdq +河北省hbs +辛集市xjs +藁城市gcs +晋州市jzs +新乐市xls +鹿泉市lqs +唐山市tss +遵化市zhs +安市as +邯郸市hds +武安市was +邢台市xts +南宫市ngs +沙河市shs +保定市bds +涿州市zzs +定州市dzs +安国市ags +承德市cds +沧州市czs +泊头市bts +任丘市rqs +黄骅市hhs +河间市hjs +廊坊市lfs +霸州市bzs +三河市shs +衡水市hss +冀州市jzs +深州市szs +石家庄市sjzs +张家口市zjks +高碑店市gbds +秦皇岛市qhds +山西省sxs +太原市tys +古交市gjs +大同市dts +阳泉市yqs +长治市czs +潞城市lcs +晋城市jcs +高平市gps +朔州市szs +晋中市jzs +介休市jxs +运城市ycs +河津市hjs +永济市sjs +忻州市xzs +原平市yps +临汾市lfs +侯马市hms +霍州市hzs +吕梁市lls +孝义市xys +汾阳市fys +内蒙古自治区nmg +包头市bts +乌海市whs +赤峰市cfs +通辽市tls +根河市ghs +丰镇市fzs +辽宁省LNS +沈阳市sys +新民市xms +大连市dls +庄河市zhs +鞍山市ass +海城市hcs +抚顺市fss +本溪市bxs +丹东市dds +东港市dgs +凤城市fcs +锦州市jzs +凌海市lhs +北宁市bns +营口市yks +盖州市gzs +阜新市fxs +辽阳市lys +灯塔市dts +盘锦市pjs +铁岭市tls +开原市kys +朝阳市zys +凌源市lys +北票市bps +兴城市xcs +大石桥市dsqs +瓦房店市wfds +普兰店市plds +调兵山市dbss +葫芦岛市hlds +吉林省jls +长春市ccs +九台市jts +榆树市yss +德惠市dhs +吉林市jls +舒兰市sls +桦甸市hds +蛟河市jhs +磐石市pss +四平市sps +双辽市sls +辽源市lys +通化市ths +集安市jas +白山市bss +临江市ljs +松原市sys +白城市bcs +大安市das +洮南市tns +延吉市yjs +图们市tms +敦化市ghs +龙井市ljs +珲春市hcs +和龙市hls +公主岭市gzls +梅河口市mhks +黑龙江省hljs +阿城市acs +尚志市szs +双城市scs +五常市wcs +讷河市nhs +鹤岗市hgs +鸡西市jxs +密山市mss +虎林市hls +大庆市dqs +伊春市ycs +铁力市tls +宁安市nas +海林市hls +穆棱市mls +同江市tjs +富锦市fjs +黑河市hhs +北安市bas +绥化市shs +安达市ads +肇东市zds +海伦市hls +七台河市qths +双鸭山市syss +牡丹江市mdjs +佳木斯市jmss +绥芬河市sfhs +哈尔滨市hebs +齐齐哈尔市qqhes +五大连池市wdlcs +上海市shs +黄浦区hpq +卢湾区lwq +徐汇区xhq +长宁区cnq +静安区jaq +普陀区ptq +闸北区zbq +虹口区hkq +杨浦区ypq +宝山区bsq +闵行区mxq +嘉定区jdq +松江区sjq +金山区jsq +青浦区qpq +南汇区nhq +奉贤区fxq +崇明县浦东新区cmxpdxq +江苏省jss +南京市njs +无锡市wxs +江阴市jys +宜兴市yxs +徐州市xzs +邳州市pzs +新沂市xys +常州市czs +金坛市jts +溧阳市lys +苏州市szs +常熟市css +太仓市dcs +昆山市hss +吴江市wjs +南通市nns +如皋市rgs +通州市tzs +海门市hms +启东市qds +淮安市has +盐城市ycs +东台市dts +大丰市dfs +扬州市yzs +高邮市gys +江都市jds +仪征市yzs +镇江市zjs +丹阳市dys +扬中市yzs +句容市jrs +泰州市dzs +泰兴市dxs +姜堰市jys +靖江市jjs +兴化市xhs +宿迁市sqs +连云港市lygs +张家港市zjgs +浙江省zjs +杭州市hzs +建德市jds +富阳市fys +临安市las +宁波市nbx +余姚市yys +慈溪市cxs +奉化市fhs +温州市wzs +瑞安市ras +乐清市lqs +嘉兴市jxs +海宁市hns +平湖市phs +桐乡市txs +湖州市hzs +绍兴市sxs +诸暨市zjs +上虞市sys +嵊州市szs +金华市jhs +兰溪市lxs +义乌市yws +东阳市dys +永康市yks +衢州市qzs +江山市jss +舟山市zss +台州市tzs +临海市lhs +丽水市lss +龙泉市lqs +安徽省ahs +合肥市hfs +芜湖市whs +蚌埠市bbs +淮南市hns +淮北市hbs +铜陵市tls +安庆市aqs +桐城市tcs +黄山市hss +滁州市czs +天长市dcs +明光市mgs +阜阳市fys +界首市jss +宿州市szs +巢湖市chs +六安市las +亳州市hzs +池州市czs +宣城市ycs +宁国市ngs +马鞍山市mass +福建省fjs +福州市fjs +福清市fqs +长乐市cls +厦门市xms +莆田市pts +三明市sms +永安市yas +泉州市qzs +石狮市sss +晋江市jjs +南安市nas +漳州市zzs +龙海市lhs +南平市nps +建瓯市jos +邵武市sws +建阳市jys +龙岩市lys +漳平市zps +宁德市nds +福安市fas +福鼎市fds +武夷山市wyss +江西省jxs +南昌市ncs +乐平市lps +萍乡市pxs +九江市jjs +瑞昌市rcs +新余市xys +鹰潭市yts +贵溪市gxs +赣州市gzs +瑞金市rjs +南康市nks +吉安市jas +宜春市ycs +丰城市fcs +樟树市zss +高安市gas +抚州市fzs +上饶市srs +德兴市dxs +井冈山市jgss +景德镇市jdzs +山东省sds +济南市jns +章丘市zqs +青岛市qds +胶南市jns +胶州市jzs +平度市pds +莱西市lxs +即墨市jms +淄博市zbs +枣庄市zzs +滕州市tzs +烟台市yts +龙口市lks +莱阳市lys +莱州市lzs +招远市zys +蓬莱市pls +栖霞市qxs +海阳市hys +潍坊市wfs +青州市qzs +诸城市zcs +寿光市sgs +安丘市aqs +高密市gms +昌邑市cys +济宁市jns +曲阜市qfs +兖州市yzs +邹城市zcs +泰安市tas +新泰市xts +肥城市fcs +威海市whs +乳山市rss +文登市wds +荣成市rcs +日照市rzs +莱芜市lws +临沂市lys +德州市dzs +乐陵市lls +禹城市ycs +聊城市lcs +临清市lqs +滨州市bzs +菏泽市hzs +河南省hns +郑州市zzs +巩义市gys +新郑市xzs +新密市xms +登封市dfs +荥阳市xys +开封市kfs +洛阳市lys +偃师市yss +汝州市rzs +舞钢市wgs +安阳市ays +林州市lzs +新乡市xxs +卫辉市whs +辉县市hxs +焦作市jzs +沁阳市qys +孟州市mzs +濮阳市pys +许昌市xcs +禹州市yzs +长葛市cgs +漯河市lhs +义马市yms +灵宝市lbs +南阳市nys +邓州市dzs +商丘市sqs +永城市ycs +信阳市xys +周口市zks +项城市dcs +济源市jys +三门峡市smxs +平顶山市pdss +驻马店市zmds +湖北省hbs +武汉市whs +黄石市hss +大冶市dys +十堰市sys +荆州市jzs +洪湖市hhs +石首市sss +松滋市szs +宜昌市ycs +宜都市yds +当阳市dys +枝江市jjs +襄樊市xfs +枣阳市zys +宜城市ycs +鄂州市ezs +荆门市jms +钟祥市zxs +孝感市xgs +应城市ycs +安陆市als +汉川市hcs +黄冈市hgs +麻城市mcs +武穴市wxs +咸宁市xns +赤壁市cbs +随州市szs +广水市gss +仙桃市xts +天门市tms +潜江市qjs +恩施市ess +利川市lcs +丹江口市djks +老河口市lhks +神农架林区snjlq +湖南省hns +长沙市css +浏阳市lys +株洲市zzs +醴陵市lls +湘潭市xts +湘乡市xxs +韶山市sss +衡阳市hys +耒阳市lys +常宁市cns +邵阳市sys +武冈市wgs +岳阳市yys +临湘市lxs +汨罗市mls +常德市cds +津市市jss +益阳市yys +沅江市yjs +郴州市czs +资兴市zxs +永州市yzs +怀化市hhs +洪江市hjs +娄底市lds +涟源市lys +吉首市jss +冷水江市lsjs +张家界市zjjs +广东省gds +广州市gzs +从化市chs +增城市zcs +深圳市szs +珠海市zhs +汕头市sts +韶关市sgs +乐昌市lcs +南雄市nxs +佛山市fss +江门市jms +台山市tss +开平市kps +鹤山市hss +恩平市eps +湛江市zjs +廉江市ljs +雷州市lzs +吴川市wcs +茂名市mms +西昌市xcs +峨眉山市emss +都江堰市djys +攀枝花市pzhs +贵州省gzs +贵阳市gys +清镇市qzs +遵义市zys +赤水市css +仁怀市rhs +安顺市ass +毕节市bjs +兴义市xys +凯里市kls +都匀市dys +福泉市fqs +六盘水市lpss +六枝特区lztq +万山特区wstq +云南省yns +昆明市kms +安宁市ans +曲靖市qjs +宣威市xws +玉溪市yxs +保山市bss +昭通市zts +丽江市ljs +思茅市sms +临沧市lqs +个旧市gjs +开远市kys +景洪市jhs +楚雄市cxs +大理市dls +潞西市lxs +瑞丽市rls +西藏自治区xzzzq +拉萨市lss +陕西省sxs +西安市xas +铜川市tcs +宝鸡市bjs +咸阳市xys +渭南市wns +韩城市hcs +华阴市hys +延安市yas +汉中市azs +榆林市yls +安康市aks +商洛市sls +甘肃省gss +兰州市lzs +金昌市jcs +白银市bys +天水市tss +武威市wws +张掖市zys +平凉市pls +酒泉市jqs +玉门市yms +敦煌市dhs +庆阳市qys +定西市dxs +陇南市lns +临夏市lxs +合作市hzs +嘉峪关市jygs +青海省qhs +西宁市xns +德令哈市dlhs +格尔木市gems +宁夏回族自治区nxhzzzq +银川市ycs +灵武市lws +吴忠市wzs +固原市gys +中卫市zws +石嘴山市szss +青铜峡市qtxs +新疆维吾尔自治区xjwwezzq +喀什市kss +昌吉市cjs +阜康市fks +米泉市mqs +博乐市bls +伊宁市yns +奎屯市kts +塔城市tcs +乌苏市wss +石河子市shzs +阿拉尔市ales +五家渠市wjqs +吐鲁番市tlfs +阿克苏市akss +阿图什市atss +库尔勒市kels +阿勒泰市alts +乌鲁木齐市wlmqs +克拉玛依市klmys +图木舒克市tmsks +香港特别行政区 +中西区zxq +东区dq +观塘区gtq +南区nq +湾仔区wzq +离岛区ldq +葵青区kqq +北区bq +西贡区xgq +沙田区stq +屯门区tmq +大埔区dpq +荃湾区qwq +元朗区ylq +九龙城区jtcq +油尖旺区yjwq +深水埗区ssbq +黄大仙区hdxq +台湾省tws +台北市tbs +高雄市gxs +基隆市jls +台中市tzs +台南市tns +新竹市xzs +嘉义市jys +板桥市bqs +宜兰市yls +竹北市zbs +桃园市tys +苗栗市mls +丰原市fys +彰化市zhs +南投市nts +太保市tbs +斗六市dls +新营市xys +凤山市fss +屏东市pds +台东市tds +花莲市hls +马公市mgs diff --git a/ZkEdit.cpp b/ZkEdit.cpp new file mode 100644 index 0000000..2d1ff38 --- /dev/null +++ b/ZkEdit.cpp @@ -0,0 +1,265 @@ +#include "ZkEdit.h" +#include "ui_zkedit.h" +#include "SysPara.h" +#include +#include + +ZkEdit::ZkEdit(QWidget *parent) : + QWidget(parent), + ui(new Ui::ZkEdit) +{ + ui->setupUi(this); + fileDialog = 0; + openedFileName = ""; + newFileAppending = false; + connect(ui->widgetPic,SIGNAL(picWidgetModify(int ,int )),this,SLOT(enableSaveButton(int ,int ))); + connect(ui->checkBoxPicExpand,SIGNAL(clicked(bool)),this,SLOT(oncheckboxExpandClicked(bool))); + connect(ui->checkBoxTrimPic,SIGNAL(clicked(bool)),this,SLOT(oncheckboxTrimPicClicked(bool))); + ui->pushButtonSave->setEnabled(false); + forcePicWidgetSize = false; +#ifdef MYSAVEFILEDLG + dialogSaveFile =new DialogSaveFile(0); +#endif + +} + +ZkEdit::~ZkEdit() +{ + delete ui; +#ifdef MYSAVEFILEDLG + if(dialogSaveFile) delete dialogSaveFile; +#endif + if(fileDialog) + delete fileDialog; + +} + +void ZkEdit::oncheckboxExpandClicked(bool) +{ + ui->checkBoxTrimPic->setCheckState(Qt::Unchecked); +} + +void ZkEdit::oncheckboxTrimPicClicked(bool) +{ + ui->checkBoxPicExpand->setCheckState(Qt::Unchecked); +} + +void ZkEdit::checkNewFileAppending(){ + if(newFileAppending){ + ui->widgetPic->initWidget(ui->spinBoxWidthPoint->value(),ui->spinBoxHeightPoint->value()); + openedFileName = ""; + } + newFileAppending = false; +} + +void ZkEdit::onSave_File_reject(){ + checkNewFileAppending(); +} + +bool ZkEdit::maybeSave(){ + if(!ui->widgetPic->isModified()) + return true; + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("图片已经改变,是否保存?")); + QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == saveButton) { + newFileAppending = true; + on_pushButtonSave_clicked(); + return false; + } else if (msgBox.clickedButton() == cancleSaveButton) { + return true; + } + else + return false; + + return true; +} + +void ZkEdit::on_pushButtonNew_pressed(){ + if(maybeSave()){ + ui->widgetPic->initWidget(ui->spinBoxWidthPoint->value(),ui->spinBoxHeightPoint->value()); + openedFileName = ""; + } +} + +void ZkEdit::enableSaveButton(int w,int h){ + ui->pushButtonSave->setEnabled(true); + ui->spinBoxHeightPoint->setValue(h); + ui->spinBoxWidthPoint->setValue(w); +} + +void ZkEdit::on_pushButtonEnlarge_pressed() +{ + ui->widgetPic->enlargeDisplay(); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); +} + +void ZkEdit::on_pushButtonReduce_pressed() +{ + ui->widgetPic->reduceDisplay(); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); +} + +void ZkEdit::on_pushButtonUp_pressed() +{ + //ui->widgetPic->currPositionMove(0,-1); + ui->widgetPic->currPositionMove(0,-1,0,ui->checkBoxTrimPic->isChecked(),ui->checkBoxPicExpand->isChecked()); +} + +void ZkEdit::on_pushButtonLeft_pressed() +{ + //ui->widgetPic->currPositionMove(-1,0); + ui->widgetPic->currPositionMove(-1,0,0,ui->checkBoxTrimPic->isChecked(),ui->checkBoxPicExpand->isChecked()); +} + +void ZkEdit::on_pushButtonEnsure_pressed() +{ + ui->widgetPic->ensureCurrPos(); +} + +void ZkEdit::on_pushButtonRight_pressed() +{ + //ui->widgetPic->currPositionMove(1,0); + ui->widgetPic->currPositionMove(1,0,0,ui->checkBoxTrimPic->isChecked(),ui->checkBoxPicExpand->isChecked()); +} + +void ZkEdit::on_pushButtonDown_pressed() +{ + //ui->widgetPic->currPositionMove(0,1); + ui->widgetPic->currPositionMove(0,1,0,ui->checkBoxTrimPic->isChecked(),ui->checkBoxPicExpand->isChecked()); +} + +void ZkEdit::on_pushButtonSaveAs_clicked() +{ +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->setTitleTxt(tr("图片另存为...")); + dialogSaveFile->refreshListView(2); + dialogSaveFile->setEnterFileName(""); + dialogSaveFile->show(); +#else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + fileDialog->showFileDialog(tr("另存为"),QString(DOC_ROOT_DIR),QString("Picture files (*.jpg )")); +#endif + +} +void ZkEdit::onSaveASFile(QString fileName,bool Flag){// use for dialogSaveFile class + // filename= fileName ; + if( !fileName.endsWith(".jpg",Qt::CaseInsensitive) ) + fileName = QFileInfo(fileName).baseName()+ ".jpg"; + + ui->widgetPic->saveImage(fileName); + ui->pushButtonSave->setEnabled(false); + openedFileName = fileName; + ui->labelFileName->setText(fileName); + + checkNewFileAppending(); + +} + +void ZkEdit::onSaveAS_FIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + QString fileName = files[i]; + if( // !fileName.endsWith(".gif",Qt::CaseInsensitive) + //&& !fileName.endsWith(".jpeg",Qt::CaseInsensitive) + // && + !fileName.endsWith(".jpg",Qt::CaseInsensitive) + //&& !fileName.endsWith(".png",Qt::CaseInsensitive) + //&& !fileName.endsWith(".bmp",Qt::CaseInsensitive) + ) + fileName += ".jpg"; + + ui->widgetPic->saveImage(fileName); + ui->pushButtonSave->setEnabled(false); + openedFileName = fileName; + ui->labelFileName->setText(fileName); + } + checkNewFileAppending(); +} + +void ZkEdit::on_pushButtonOpen_clicked() +{ + forcePicWidgetSize = false; + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onOpenFIle_select())); + fileDialog->showFileDialog(tr("打开文件"),QString(DOC_ROOT_DIR), + QString("Picture files ( *.jpeg *.bmp *.gif *.png *jpg)")); +} + + +void ZkEdit::onOpenFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + QString fileName = files.value(i); + ui->widgetPic->loadImage(fileName,forcePicWidgetSize); + openedFileName = fileName; + ui->labelFileName->setText(fileName); + ui->labelScaleLeval->setText(tr("放大倍数:%1").arg(ui->widgetPic->getScaleValue())); + ui->spinBoxHeightPoint->setValue(ui->widgetPic->getHeight()); + ui->spinBoxWidthPoint->setValue(ui->widgetPic->getWidth()); + } +} + +void ZkEdit::on_pushButtonSave_clicked() +{ + if(!openedFileName.isEmpty()){ + ui->widgetPic->saveImage(openedFileName); + ui->pushButtonSave->setEnabled(false); + } + else { + #ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->setTitleTxt(tr("图片保存为...")); + dialogSaveFile->refreshListView(2); + dialogSaveFile->setEnterFileName(""); + dialogSaveFile->show(); + #else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(rejected()),this,SLOT(onSave_File_reject())); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + fileDialog->showFileDialog(tr("保存"),QString(DOC_ROOT_DIR),QString("Picture files ( *.jpg )")); + #endif + } +} + +void ZkEdit::on_pushButtonImport_clicked() +{ + forcePicWidgetSize = true; + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onOpenFIle_select())); + fileDialog->showFileDialog(tr("导入文件"),QString(DOC_ROOT_DIR),QString("Picture files (*.png *.jpeg *.jpg *.gif *.bmp)")); +} + +void ZkEdit::keyPressEvent(QKeyEvent *e) +{ + switch(e->key()) + { + case Qt::Key_Return:on_pushButtonEnsure_pressed();break; + case Qt::Key_Up: on_pushButtonUp_pressed();break; + case Qt::Key_Left: on_pushButtonLeft_pressed();break; + case Qt::Key_Right:on_pushButtonRight_pressed();break; + case Qt::Key_Down:on_pushButtonDown_pressed();break; + } +} + diff --git a/ZkEdit.h b/ZkEdit.h new file mode 100644 index 0000000..3f683f9 --- /dev/null +++ b/ZkEdit.h @@ -0,0 +1,73 @@ +#ifndef ZKEDIT_H +#define ZKEDIT_H + +#include +#include +#include +#include +#include "MyFileDialog.h" +#include "DialogSaveFile.h" +#include "myinclude.h" +namespace Ui { +class ZkEdit; +} + +#define MAX_PIC_HEIGHT 40 +#define MAX_PIC_WIDTH 100 +class ZkEdit : public QWidget +{ + Q_OBJECT + +public: + explicit ZkEdit(QWidget *parent = 0); + ~ZkEdit(); + +protected slots: + void onSaveASFile(QString fileName, bool Flag); +private slots: + void on_pushButtonNew_pressed(); + + void on_pushButtonEnlarge_pressed(); + + void on_pushButtonReduce_pressed(); + + void on_pushButtonUp_pressed(); + + void on_pushButtonLeft_pressed(); + + void on_pushButtonEnsure_pressed(); + + void on_pushButtonRight_pressed(); + + void on_pushButtonDown_pressed(); + + void on_pushButtonSaveAs_clicked(); + void onSaveAS_FIle_select(); + void onSave_File_reject(); + void on_pushButtonOpen_clicked(); + void onOpenFIle_select(); + void on_pushButtonSave_clicked(); + + void enableSaveButton(int w,int h); + + void on_pushButtonImport_clicked(); + void oncheckboxExpandClicked(bool); + void oncheckboxTrimPicClicked(bool); + +private: + Ui::ZkEdit *ui; + MyFileDialog *fileDialog; + QString openedFileName; + bool newFileAppending; + void checkNewFileAppending(); + bool maybeSave(); + bool forcePicWidgetSize; + void keyPressEvent(QKeyEvent *e); +#ifdef MYSAVEFILEDLG + DialogSaveFile *dialogSaveFile; +#endif +}; + +#endif +// ZKEDIT_H + diff --git a/arm_build b/arm_build new file mode 100644 index 0000000..9d508be --- /dev/null +++ b/arm_build @@ -0,0 +1,3 @@ +/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin/qmake -project +#echo "TRANSLATIONS = chinese.ts english.ts" >> QtUI.pro +/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin/qmake diff --git a/calibrate b/calibrate new file mode 100644 index 0000000000000000000000000000000000000000..d01c0e525fc021fb645781225dca3fd3369e44da GIT binary patch literal 960 zcmbtS!A^rf5cSMgOsQAgaz!~{X_bT)1gdFFLntnG6AH*KjsCp@)Rt1ygL2rAowqaZ zy?Mg{S+k7rjTHEyHJ>`+)Uqc!;a{A*(H)B^Cp%V(DoP2h)b?GR zMx6hSW(mB4LgBhQ4U`DvhQ@nI3s62F$g6nc$0em1+?|4DSlxoyU_qjvMP3RBeA~JY z1K*rHTVte-wD-dsilZKI?98XF#)_9D&0|zXMN9<0iSsP!p zdhtWk@?G0l>Y93TJ#!ZRBy>F|aCAA~C_y`SYL-`=&LW(AG;xa=kU<)jTTl{ctm&2b;8 Z+QV literal 0 HcmV?d00001 diff --git a/chinese.qm b/chinese.qm new file mode 100644 index 0000000000000000000000000000000000000000..15130737e254ad0e95b82208244bf723fdd558f2 GIT binary patch literal 797 zcmcE7ks@*G{hX<16=n7(EZlq7iGhJ3gXuf(ECvR~1weWg0|OHWkUjKzRlr z{R*Ov&k9IiU|HWB4iqim_)&irsE(QAcRz^E=J-7yNHZ97{9X^DXLJ0%4-&u3@%ufH zX0px%60@2A0|5t6nt=_7`3#@#TlKte{j)U-pH1Ch#SRn_aLG)}$xnB#OwLIyD9X$$ zVMNs;0M+uMr}^pZEmj7)#AxC(BHbRS7Sil7Cfy#W7Sil7A>AIR7Sil7CEXsV7Sil7 SBi$aT7Lx2?gCs8ONd^FJ&n9L7 literal 0 HcmV?d00001 diff --git a/chinese.ts b/chinese.ts new file mode 100644 index 0000000..9c59f12 --- /dev/null +++ b/chinese.ts @@ -0,0 +1,7936 @@ + + + +UTF-8 + + DevOp + + + + + + + 警告 + + + + + 字高超出范围 + + + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + + + + + + 错误 + + + + + 在同步计米的情况下无打印串或显示区域为零 + + + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + + + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + + + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + + + + + readB6Req + + + + + readB6com + + + + + readB6suc + + + + + 设置读写器密码成功! + + + + + 设置读写器工作模式成功! + + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + + + + + 输入密码 + 提升授权 + + + + + DialogCycleprint + + + Dialog + + + + + 1循环范围:0- + + + + + 1循环次数: + + + + + 2循环范围:0- + + + + + 2循环次数: + + + + + 3循环范围:0- + + + + + 3循环次数: + + + + + 6循环次数: + + + + + 6循环范围:0- + + + + + 5循环范围:0- + + + + + 5循环次数: + + + + + 4循环范围:0- + + + + + 4循环次数: + + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + + + + + U盘文件 + + + + + 删除文件 + + + + + 删除全部 + + + + + 从U盘导入 + + + + + 导出到U盘 + + + + + 插入 + + + + + 打开文件 + + + + + 上一个 + + + + + 下一个 + + + + + 退出 + + + + + 文件操作 + + + + + + + 警告 + + + + + 是否确认删除当前文件? + + + + + 是否确认删除所有文件? + + + + + + + + 提示 + + + + + 是否确认从U盘导入所有文件? + + + + + mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/ + + + + + cp %1/* %2/ + + + + + 成功从U盘导入? + + + + + 是否确认将所有文件导出到U盘? + + + + + 成功导出到U盘? + + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + + + + + DialogFontSize + + + Dialog + + + + + 9点(中/英) + 9点(英) + + + + + 24点(中/英) + + + + + 7点(左横) + + + + + 7点(右横) + + + + + 9点(左横) + + + + + 9点(右横) + + + + + 7点(孟加拉) + + + + + 32点 + + + + + 7点(rf7) + 7点(数字) + + + + + 21点(rf21) + + + + + 12点(新罗马) + + + + + 123456890ABCDEFGWXYZ + + + + + - + + + + + 查字库标识 + + + + + 16点(中/英) + + + + + 5点(英) + + + + + 12点(中/英) + + + + + 7点(英) + + + + + 选择字体大小 + + + + + DialogInputTxt + + + Dialog + + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + + + + + 日 + + + + + 秒 + + + + + 分 + + + + + 月 + + + + + 周 + + + + + 时 + + + + + 年 + + + + + DataMatrix + + + + + QRCode + + + + + BarCode128 + + + + + 计数器1 + + + + + 计数器2 + + + + + 随机码1 + + + + + 有效日期 + + + + + 生产日期 + + + + + Class + + + + + 计数器3 + + + + + 第XXX天 + + + + + 隐藏变量 + + + + + 数字个数 + + + + + 9个 + + + + + 11个 + + + + + 10个 + + + + + 3个 + + + + + 6个 + + + + + 12个 + + + + + 13个 + + + + + 14个 + + + + + 15个 + + + + + 5个 + + + + + 8个 + + + + + 2个 + + + + + 7个 + + + + + 4个 + + + + + 1个 + + + + + 变量插入 + + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + + + + + + 1个像素 + + + + + + 2个像素 + + + + + + 3个像素 + + + + + + 4个像素 + + + + + + 5个像素 + + + + + 6个像素 + + + + + 7个像素 + + + + + 行间距: + + + + + 字符间距: + + + + + 选择行间距和字符间距 + + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + + + + + 列中: + + + + + 列尾: + + + + + 重置 + + + + + 测试 + + + + + DialogSaveFile + + + Dialog + + + + + 本地文件 + + + + + U盘文件 + + + + + 预览文件内容: + + + + + 上一个 + + + + + 下一个 + + + + + 请输入文件名: + + + + + 取消 + + + + + + 保存 + + + + + 警告 + + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + + + + + DialogShowCounter + + + Dialog + + + + + 米标显示: + + + + + 目前循环范围: + + + + + + + 米 + + + + + 剩余米数: + + + + + 循环次数: + + + + + 立即重新计米 + + + + + 起始: + + + + + 结束: + + + + + Dialoginputpasswd + + + Dialog + + + + + 修改密码: + + + + + Dialogmodifypasswd + + + Dialog + + + + + 修改密码: + + + + + 密码授权 + + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + + + + + DlgInputAddr + + + Dialog + + + + + 请输入6位机编号(前3位为经销商编号) + + + + + PowerOnCnt + + + + + PrintDotCnt + + + + + PowerMax + + + + + PrintMax + + + + + 开始时间 + + + + + 结束时间 + + + + + SuperNodeIP: + + + + + edgeIP: + + + + + + + + + + . + + + + + 喷码机恢复工作! + + + + + Mac:%1维护时间剩余 + 维护时间剩余 + + + + + 小时,喷码机将停止工作.请与供应商联系! + + + + + Mac:%1维护时间已到,喷码机停止工作!请与供应商联系 + 维护时间已到,喷码机停止工作!请与供应商联系 + + + + + + 当前日期: + + + + + + 正确? + + + + + DlgMutiLanguage + + + 界面语言设置 + + + + + 中文 + + + + + 英语 + + + + + 土耳其语 + + + + + 西班牙语 + + + + + 泰语 + + + + + 越南语 + + + + + 波斯语 + + + + + (注意: 选择切换显示语言, 重启后才能生效) + + + + + DlgMyWarring + + + 警告 + + + + + 确定 + + + + + TextLabel + + + + + DlgSelectInputLanguage + + + Dialog + + + + + 汉语(Chinese) + + + + + 英语(English) + + + + + 越南语(Vietnam) + + + + + DlgShowMsg + + + 警告 + + + + + 确定 + + + + + DlgVarLength + + + 变长喷印参数 + + + + + 头部长度(m) + + + + + 尾部长度(m) + + + + + + 调整长度(mm) + + + + + 总长(m) + + + + + 确定 + + + + + 可变长度允许 + + + + + FileLogger + + + The directory and all its contents have been removed + + + + + Failed to remove the directory + + + + + FormScenedlg + + + Form + + + + + Last + + + + + First + + + + + 重置位置 + + + + + 另存为 + + + + + 保存 + + + + + 预览 + + + + + 新增图元 + + + + + 新建 + + + + + 打开 + + + + + 删除图元 + + + + + 编辑图元 + + + + + 插入图像 + + + + + 场景缩小 + + + + + 场景放大 + + + + + Next-item + + + + + Prev-item + + + + + Test2 + + + + + 插入图片 + + + + + + [ %1行 x %2列 ] + + + + + <html><head/><body><p>[<span style="color:red;font-size:12px;"> %1行 </span>x %2列 ]</p></body></html> + + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + 主窗口 + + + + + + + 信息编辑 + + + + + 图案编辑 + + + + + 打印设置 + + + + + 触发设置 + + + + + + 系统设置 + + + + + + 系统管理 + + + + + + 其他信息 + + + + + + 日志信息 + + + + + + 网络管理 + + + + + 电压调整 + + + + + Save + + + + + 不连续电压 + + + + + + vol0 + + + + + + vol1 + + + + + + vol2 + + + + + + vol3 + + + + + + vol4 + + + + + + vol5 + + + + + + vol6 + + + + + + vol7 + + + + + + vol8 + + + + + + vol9 + + + + + + vol10 + + + + + + vol11 + + + + + + vol12 + + + + + + vol13 + + + + + + vol14 + + + + + + vol15 + + + + + + vol16 + + + + + + vol17 + + + + + + vol18 + + + + + + vol19 + + + + + + vol20 + + + + + + vol21 + + + + + + vol22 + + + + + + vol23 + + + + + + vol24 + + + + + + vol25 + + + + + + vol26 + + + + + + vol27 + + + + + + vol28 + + + + + + vol29 + + + + + + vol30 + + + + + + vol31 + + + + + + vol32 + + + + + + vol33 + + + + + + vol34 + + + + + + vol35 + + + + + + vol36 + + + + + + vol37 + + + + + + vol38 + + + + + + vol39 + + + + + 连续电压 + + + + + 满列电压 + + + + + fvol0 + + + + + fvol1 + + + + + fvol2 + + + + + fvol3 + + + + + fvol4 + + + + + fvol5 + + + + + fvol6 + + + + + fvol7 + + + + + fvol8 + + + + + fvol9 + + + + + fvol10 + + + + + fvol11 + + + + + fvol12 + + + + + fvol13 + + + + + fvol14 + + + + + fvol15 + + + + + fvol16 + + + + + fvol17 + + + + + fvol18 + + + + + fvol19 + + + + + fvol20 + + + + + fvol21 + + + + + fvol22 + + + + + fvol23 + + + + + fvol24 + + + + + fvol25 + + + + + fvol26 + + + + + fvol27 + + + + + fvol28 + + + + + fvol29 + + + + + fvol30 + + + + + fvol31 + + + + + fvol32 + + + + + fvol33 + + + + + fvol34 + + + + + fvol35 + + + + + fvol36 + + + + + fvol37 + + + + + fvol38 + + + + + fvol39 + + + + + 其他调整 + + + + + 整体缩放(%) : + + + + + WriteByte + + + + + ReadByte + + + + + + + Address: + + + + + + Value: + + + + + WriteWord + + + + + ReadWord + + + + + ReadDword + + + + + WriteDword + + + + + ValueH: + + + + + ValueL: + + + + + 定时开机 + + + + + 读卡器故障! + + + + + 13.读卡器故障! + + + + + + 压力泄漏或压力传感器故障! + + + + + 运行中压力泄漏,停齿轮泵! + + + + + + 测试时间结束,准备关机 + + + + + 定时开机循环完成,准备关机 + + + + + 准备关机 + + + + + 与FPGA失去通信!!! + + + + + 与FPGA通信恢复正常 + + + + + 开始自检,请等待60秒............... + + + + + 开始自检,请等待%1秒............... + + + + + + 自检完成!!! + + + + + 缺少墨水,喷码机不能正常工作! + + + + + + + 刷墨水卡成功! + + + + + + + 刷溶剂卡成功! + + + + + + MAC无效卡! + + + + + + 无效卡! + + + + + + 9.墨水空,机器自动关机 + + + + + + 10.溶剂空,机器自动关机 + + + + + + 11.墨水空,机器再次自动关机 + + + + + + 12.溶剂空,机器再次自动关机 + + + + + + 21.没有使用原厂墨水耗材,机器自动关机 + + + + + + 22.没有使用原厂溶剂耗材,机器自动关机 + + + + + + 23.没有使用原厂墨水耗材,机器再次自动关机 + + + + + + 24.没有使用原厂溶剂耗材,机器再次自动关机 + + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + + + + + 喷印速度过快!无法喷印完全!!! + + + + + 压力波动超过设定的5个值. + + + + + + 1.请添加墨水,否则机器将在24小时后自动关机! + + + + + + 2.请添加墨水,否则机器将在%1小时后自动关机! + + + + + + 3.请添加墨水,否则机器将在%1分钟后自动关机! + + + + + + 4.请添加墨水,否则机器将在2分钟后自动关机! + + + + + + 5.请添加溶剂,否则机器将在6小时后自动关机! + + + + + + 6.请添加溶剂,否则机器将在%1小时后自动关机! + + + + + + 7.请添加溶剂,否则机器将在%1分钟后自动关机! + + + + + + 8.请添加溶剂,否则机器将在2分钟后自动关机! + + + + + + + 13.请刷墨水卡,请使用原厂墨水耗材,否则机器将在24小时后自动关机! + + + + + + 14.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后自动关机! + + + + + + 15.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1分钟后自动关机! + + + + + + + 16.请刷墨水卡水,请使用原厂墨水耗材,否则机器将在2分钟后自动关机! + + + + + + + 17.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2小时后自动关机! + + + + + + 18.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后自动关机! + + + + + + 19.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1分钟后自动关机! + + + + + + + 20.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2分钟后自动关机! + + + + + 停止打印,自动关闭高压. + + + + + 压力异常:上次压力值%1,当前压力值%2 + + + + + + 齿轮泵转速过高,请立即停机并联系供应商! + + + + + + 齿轮泵转速过高,请清理过滤器或者检查是否泄露! + + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + + + + + + 错误!!!!!!!!!!!主墨泵故障 + + + + + + 主墨泵故障!!! + + + + + 错误!!!!!!!!!!!压缩机故障 + + + + + 压缩机故障!!! + + + + + 错误!粘度计下位灯故障. + + + + + 错误!粘度计故障:检测不到上位灯. + + + + + 添加溶剂: + + + + + + 警告!!!!!!!!!!!粘度值偏低 + + + + + + 错误!!!!!!!!!!!粘度偏大故障 + + + + + 粘度检测异常,粘度值太大!!! + + + + + 混合阀打开2: + + + + + + + 电机故障 + + + + + 电机故障!!! + + + + + + 回收槽到头 + + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + + + + + 提示 + + + + + 是否接收新的信息! + + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + + + + + 下一页 + + + + + ` + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 0 + + + + + - + + + + + = + + + + + 退格 + + + + + + 英文 + + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + [ + + + + + ] + + + + + \ + + + + + + 大写 + + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + Shift + + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + , + + + + + . + + + + + / + + + + + 上 + + + + + 特殊字 + + + + + 隐藏 + + + + + Ctrl + + + + + 删除 + + + + + 行首 + + + + + 行尾 + + + + + 左 + + + + + 下 + + + + + 右 + + + + + + 错误 + + + + + hanziDisplayLabels缺少初始化 + + + + + warning + + + + + myInputMethod is null + + + + + + 找不到输入法初始化文件 + + + + + 小写 + + + + + Tiếng Việt + + + + + Russian + + + + + Japanese + + + + + 全选 + + + + + 复制 + + + + + 粘贴 + + + + + 剪切 + + + + + 后退 + + + + + InsertSpaceNumDialog + + + 插入空格数 + + + + + 空格个数: + + + + + LogInfo + + + Form + + + + + 当前状态 + + + + + 清空当前状态 + + + + + 历史状态 + + + + + 删除历史文件 + + + + + 打开历史文件 + + + + + TextLabel + + + + + 导出日志到U盘 + + + + + 版本信息 + + + + + 请先打开历史状态文件! + + + + + + + + 警告 + + + + + + + 无法打开文件 + + + + + + + + 提示 + + + + + 是否确认将所有日志文件导出到U盘? + + + + + U盘未插入或无法识别,请重新插拔设备! + + + + + 成功导出到U盘 + + + + + 选择历史记录文件 + + + + + 是否确认将历史日志文件全部清除? + + + + + 是否确认将当前日志全部清除? + + + + + MainWindow + + + InkJet + + + + + 编辑 + + + + + 打开文件 + + + + + 二维码 + + + + + 条形码 + + + + + 缩小 + + + + + 放大 + + + + + 获取数据 + + + + + 交替打印文件名 + + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + + + + + 当前时间 + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt; vertical-align:bottom;"><br /></p></body></html> + + + + + 墨线开关 + + + + + 喷头盖开 + + + + + 墨水缸满 + + + + + 墨水液位 + + + + + 溶剂液位 + + + + + 回收故障 + + + + + 粘度故障 + + + + + 相位故障 + + + + + 高压故障 + + + + + 故障恢复 + + + + + 立即重新计米 + + + + + 产品计数 + + + + + 产品总计数 + + + + + 关机 + + + + + 2014-08-23 + + + + + 高压包 + + + + + 粘度 + + + + + 压力 + + + + + + 隔膜位置 + + + + + + + + 开 + + + + + + + + 关 + + + + + + 暂停打印 +停止高压 + + + + + 紧急停机 + + + + + 喷嘴逆清洗 + + + + + + + + + 回收故障,关闭回收槽,关墨线 + + + + + + + + + + + + + + + + 警告 + + + + + + + + + 提示 + + + + + 文件未保存,是否先保存文件! + + + + + + + + 变量数大于8个,某些变量将不起作用!!! + + + + + warning,界面上有变量未显示完全 + + + + + + + + + 错误 + + + + + 喷印间隔过短,应高于%1! + + + + + 喷头盖未关,请先关喷头盖! + + + + + 墨线未开,请先开墨线开关! + + + + + 正在加高压... + + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + + + + + 开始打印1 + + + + + + 开始打印 + + + + + 回收槽未到底!!!!!! + + + + + 停止打印 + + + + + + 随机码文本将展出到U盘,请插入U盘 + + + + + 暂停打印 + + + + + 继续打印 + + + + + 继续打印 +保持高压 + + + + + 正在排气 ............... + + + + + + 停止 + + + + + 正在打开回收槽... + + + + + 停止打开 + + + + + + 警告!回收槽开关时间未设置! + + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + + + + + 正在关闭回收槽... + + + + + 停止关闭 + + + + + + 正在准备关机,请等待%1秒............... + + + + + 准备关机...... + + + + + 是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动! + + + + + 是否启动齿轮泵? + + + + + 泵启动 + + + + + 泵停止 + + + + + 回收槽未关,是否关闭回收槽后关机! + + + + + 是否确认关机? + + + + + 保存html文件失败! + + + + + 是否初始化产品计数? + + + + + 是否清除总产品计数? + + + + + 是否立即重新计米? + + + + + 警告:‘-’和空格的宽度不一样 + + + + + 条形码信息编辑 + + + + + + 二维码信息编辑 + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;"><br /></p></body></html> + + + + + 获取DM码内容为空! + + + + + + 获取DM码内容: + + + + + + 获取DM码内容跟上次相同 + + + + + 高压故障:两高压偏转板间的电压检测异常 + + + + + 1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座; + + + + + 2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间; + + + + + 3.高压线路漏电,请更换高压线路; + + + + + 4.高压底座漏电,请更换高压底座。 + + + + + 墨水过多:墨水溢出 + + + + + 1. 请停止添加墨水; + + + + + 2. 请排出多余墨水。 + + + + + 墨水液位:墨水即将耗尽 + + + + + 1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。 + + + + + 回收故障:未检测到有墨水回收 + + + + + 1. 墨水未射入回收管,请修正墨线方向; + + + + + 2. 墨水粘度太低,请更换新墨水; + + + + + 3. 回收管堵塞,请清通或者更换回收管; + + + + + 4. 回收泵故障,请清洗或者更换回收泵; + + + + + 5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮. + + + + + 溶剂液位:溶剂即将耗尽 + + + + + 1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。 + + + + + + 粘度故障报警 + + + + + 粘度故障:墨水粘度无法自动调整 + + + + + 1. 混合阀失灵,请冲洗或者更换混合阀; + + + + + 2. 墨水罐内的墨水异常,请更换新墨水; + + + + + 粘度计异常: + + + + + 1. 泵前过滤网堵塞,请更换泵前滤网; + + + + + 2. 粘度泵异常,请清洗或更换粘度泵; + + + + + 3. 粘度传感器异常,请检查传感器线路或者更换传感器. + + + + + 相位故障报警 + + + + + 相位故障:相位信号检测异常 + + + + + 1. 墨水分裂不正常,请调整墨水分裂; + + + + + 2. 充电槽或者相检头脏污,请清洗充电槽和相检头; + + + + + 3. 放大板功能性异常,请更换放大板; + + + + + 4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离; + + + + + 5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰; + + + + + 6. 墨水质量异常,请更换新墨水。 + + + + + 回收槽开关检测完成! + + + + + + + + [ %1行 x %2列 ] + + + + + + 机箱: + + + + + + + 正在喷印............... + + + + + 喷头盖开, 喷印无法正常进行!!! + + + + + + 墨水缸满报警 + + + + + + 墨水液位报警 + + + + + + 溶剂液位报警 + + + + + + 高压故障,暂停打印 + + + + + + 高压故障,暂停打印. + + + + + 高压故障,关回收槽 + + + + + 高压故障,关回收槽和墨线 + + + + + 回收故障. + + + + + 回收异常,墨线可能偏离.(%1) + + + + + 维护时间已到,喷码机停止工作! + + + + + + 暂停喷印............... + + + + + 相位故障:飞行时间错误! + + + + + 相位故障:相位检测错误! + + + + + + + 相位故障,准备关机 + + + + + + + 相位故障,暂停打印 + + + + + 相位故障,屏蔽DAC输出 + + + + + + 相位故障,屏蔽充电 + + + + + 齿轮泵转速 + + + + + 交替打印 + + + + + 电眼交替 + + + + + %1.%2[%3.%4]米/分 + + + + + 列延时:%1点 + + + + + 无法打开文件 + + + + + 打开文件: + + + + + + 最多支持的列数目为:%1请减小信息长度. + + + + + + 请减少信息中的变量(或计数器)数量. + + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + + + + + 0x0000 + + + + + 0xb100 + + + + + 0xb200 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + + + + + 写空间 + + + + + 进制转换 + + + + + + 编辑 + + + + + 上一页 + + + + + 下一页 + + + + + 完成 + + + + + MyFileDialog + + + 确定 + + + + + NetworkManager + + + Form + + + + + 手动设定 + + + + + + IP: + + + + + Mask: + + + + + GW: + + + + + 取消 + + + + + 有线LAN + + + + + WiFi: + + + + + SSID: + + + + + Status: + + + + + auth: + + + + + Encryption: + + + + + Plaintext (open / no authentication) + + + + + 主获取数据按钮 + + + + + Static WEP (no authentication) + + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + 设备码: + + + + + 服务IP: + + + + + None + + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + 8754 + + + + + 服务端口: + + + + + PSK: + + + + + AddNetwork + + + + + Password: + + + + + 获取数据 + + + + + Network: + + + + + 测试 + + + + + 应用配置 + + + + + 去掉数字码 + + + + + 去掉QR码 + + + + + ScanSSID + + + + + Disconnect + + + + + Connect + + + + + Scan + + + + + Remove + + + + + 1 + + + + + 47.111.170.144 + + + + + wpa_supplicant service is not running. +Do you want to start it? + + + + + Disconnected + + + + + Inactive + + + + + Scanning + + + + + Authenticating + + + + + Associating + + + + + Associated + + + + + 4-Way Handshake + + + + + Group Handshake + + + + + Completed + + + + + Unknown + + + + + Could not get status from wpa_supplicant + + + + + Select any network + + + + + WPS AP in active PBC mode found + + + + + Press the PBC button on the screen to start registration + + + + + WPS AP with recently selected registrar + + + + + WPS AP detected + + + + + PBC mode overlap detected + + + + + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + + + + + Network configuration received + + + + + Registration started + + + + + Registrar does not yet know PIN + + + + + Registration failed + + + + + Registration succeeded + + + + + WPA Pre-Shared Key Error + + + + + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + + + + + Network ID Error + + + + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + + + + + Failed to add network to wpa_supplicant +configuration. + + + + + Failed to enable network in wpa_supplicant +configuration. + + + + + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + + + + + Yes + + + + + No + + + + + Failed to remove network from wpa_supplicant +configuration. + + + + + 是否去获取数据! + + + + + 获取数据中... + + + + + + 上报数据中... + + + + + + + + 提示 + + + + + + IP设置错误! + + + + + 应用成功 + + + + + OtherInfo + + + Form + + + + + 相位位置: + + + + + 相位偏移: + + + + + 相检: + + + + + + 锁定相位 + + + + + DetectDelay + + + + + detect_num + + + + + FullTimeEn + + + + + DetectVol + + + + + HighLowRatio + + + + + 充电占空比100% + + + + + 相位检测电压: + 相位检测电压 + + + + + 检测墨点数量: + 检测延迟 : + + + + + 飞行时间: + + + + + 频闪灯周期: + + + + + 检测延时: + + + + + 应用当前配置 + + + + + 提示 + + + + + 应用成功 + + + + + 点 + + + + + 解锁相位 + + + + + PicEdit + + + Form + + + + + 开启软键盘 + + + + + 插入变量 + + + + + + 保存/打印 + + + + + 缩小 + + + + + 放大 + + + + + 5点阵 + + + + + 7点阵 + + + + + 9点阵 + + + + + 12点阵宋体 + + + + + 16点阵宋体 + + + + + 16点阵黑体 + + + + + 24点阵宋体 + + + + + 24点阵黑体 + + + + + 列高 + + + + + 无加粗 + + + + + 加粗1倍 + + + + + 加粗2倍 + + + + + 光栅[X:Y] + + + + + 放大比例 + + + + + 插入模式 + + + + + 文件名 + + + + + CURR[X,Y] + + + + + 新建信息 + + + + + 打开文件 + + + + + 字符间距 + + + + + 插入/修改 + + + + + 删除字符 + + + + + 插入图片 + + + + + 保存为 + + + + + + + 字库编辑 + + + + + 网格 + + + + + 粗体 + + + + + 显示控制符 + + + + + 行首 + + + + + 行尾 + + + + + 字符光标 + + + + + 像素光标 + + + + + 编辑现有的多字体 + + + + + 点击光栅可打开键盘,点击空白处关闭 + + + + + + + + + + + + 放大倍数:%1 + + + + + + 插入模式 + + + + + + 修改模式 + + + + + 编辑现有的多字体文件 +请使用修改模式!!! + 编辑现有的多字体文件 +请使用修改模式!!! + + + + + + + 保存 + + + + + 点击光栅可打开键盘,点击空白处关闭 + + + + + 信息编辑 + + + + + 字库保存 + + + + + + 返回信息编辑 + + + + + 请选择字体,打开键盘并输入要编辑的字符 + + + + + + + 提示 + + + + + 图片已经改变,是否保存? + + + + + 放弃保存 + + + + + 文件另存为... + + + + + 另存为 + + + + + + + + + + 文件名: + + + + + 文件名:) + + + + + 文件保存为... + + + + + 本条信息的变量超过规定数量! + + + + + 是否立即喷印当前的文件? + + + + + 是 + + + + + 否 + + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + + + + + 选择[字体]可改变光标大小. + + + + + 选择[绘图]方式,可以绘制任意图形 + + + + + 光标不匹配时,不能输入或删除. + + + + + 点击空白处可关闭键盘. + + + + + 通过[字库编辑]功能,用户可以自定义新字符 + + + + + 选择[文本模式]可切换到主界面编辑方式. + + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + + + + + 使用[字库编辑]功能,用户可自己修改字形 + + + + + PicWidget + + + Please input a char. + + + + + 请输入要编辑的字符 + + + + + 编辑字符:%1 + + + + + [%1行,%2列] + + + + + 光标[%1,%2] + + + + + + + + + + + + + + 警告 + + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + + + + + + + 请新创建建图片 + + + + + + + 文件:%1 无法打开 + + + + + 信息中的变量数超过了最大值(8)!请减小变量数. + + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 常用设置 + + + + + 字体加粗: + + + + + + + + + 快速 + + + + + + + + + + 标准 + + + + + + + + 慢速 + + + + + + 慢速1 + + + + + + 慢速2 + + + + + 慢速3 + + + + + 慢速4 + + + + + 慢速5 + + + + + 慢速6 + + + + + 慢速7 + + + + + 慢速8 + + + + + 慢速9 + + + + + 首行电压(%): + + + + + 打印模式: + + + + + 字高设置(%): + + + + + 字体宽度: + + + + + 行末电压(%): + + + + + 信息左右颠倒 + + + + + 相位故障关机 + + + + + 信息上下颠倒 + + + + + 故障停止走米 + + + + + 相位故障不打印 + + + + + 回收故障处理 + + + + + 自然数计米 + + + + + 超速暂停打印 + + + + + TextLabel + + + + + 不打印走米 + + + + + 电眼误触禁止 + + + + + 字形优化 + + + + + 新放大板 + + + + + 高速模式 + + + + + 小数点位数 + + + + + yyyy-MM-dd + + + + + yyyy/MM/dd + + + + + yyyyMMdd + + + + + yyyy年MM月dd日 + + + + + yyyy-MM-dd hh:mm + + + + + yyyy/MM/dd hh:mm + + + + + yyyyMMddhhmm + + + + + yyyy年MM月dd日hh:mm + + + + + hh:mm + + + + + ddhhmm + + + + + 有效期(天): + + + + + + 高级设置 + + + + + + 交替扫描隔点(默认为1): + + + + + 行末调整点模式: + + + + + 点距调整值(默认为0): + + + + + + 扫描颠倒 + + + + + 点距调整电压位置: + + + + + 行末调整点数(默认为0): + + + + + 去除冗点模式(默认懒惰): + + + + + 懒惰模式 + + + + + 贪婪模式 + + + + + 均衡模式 + + + + + + 冗点比例(默认为0%): + + + + + 行末点微调(‰): + + + + + 修改授权 + + + + + 省点 + + + + + dd MM yy + + + + + + 调整电压 + + + + + 使用推荐设置 + + + + + 快 + + + + + 电线电缆 + + + + + 制药/食品/电子 + + + + + 建筑管材 + + + + + 其他 + + + + + 检测回收槽 + + + + + + 锁定脉冲计数 + + + + + 每条信息只打印一次 + + + + + 非字宽 + + + + + 使用齿轮泵 + + + + + 高压阈值: + + + + + 不检测喷头盖 + + + + + 维护时间: + + + + + 打印时绿灯常亮 + + + + + 复位发送打印数据 + + + + + 计数器设置 + + + + + 注意:“其它设置”页下的"分段计米“勾选时,计数器1不可用。 + + + + + 计数器3 + + + + + 生产日期: + + + + + dd/MM/yy + + + + + dd/MM/yyyy + + + + + dd-MM-yy + + + + + dd-MM-yyyy + + + + + 计数器保存关机值 + + + + + 交替打印设置 + + + + + 起始位置: + + + + + 距离尾部(mm): + + + + + 首尾交替 + + + + + + + + 打印电压缩放 + + + + + 整体缩放(%) : + + + + + 交替间隔: + + + + + 重复次数: + + + + + 隐藏值米标: + + + + + 隐藏打印值 + + + + + 打印条件倍数值: + + + + + 使用隐藏功能时必须使用计数器1 + + + + + 米标显示 + + + + + 上移 + + + + + 下移 + + + + + 其它设置 + + + + + 循环产品计数 + + + + + 更换信息文件时执行的动作: + + + + + 产品计数器自动清0 + + + + + 总产品计数器自动清0 + + + + + 显示屏显示: + + + + + 分段计米 + + + + + 插 入 + + + + + 添 加 + + + + + 全部删除 + + + + + 删 除 + + + + + 高压故障关回收槽 + + + + + 计数器1设置 + + + + + + + + 起始值: + + + + + + + + 结束值: + + + + + + + + 增量值: + + + + + + + 重设值 + + + + + + + 重复数: + + + + + + + 当前值: + + + + + + + 清零 + + + + + 无交替 + + + + + 普通交替 + + + + + 电眼触发交替 + + + + + 导出随机码文本 + + + + + 无 + + + + + 外接显示屏: + + + + + 复位到起始值 + + + + + 小屏 + + + + + 大屏 + + + + + 总产品计数值 + + + + + + 计数器1 + + + + + + 计数器2 + + + + + 可变长度 + + + + + 计数器2设置 + + + + + + 计数器3设置 + + + + + + + + 跳米设置 + + + + + 跳米数: + + + + + 跳米打印 + + + + + + + 输入密码 + 提升权限 + + + + + 墨线时间 + + + + + 墨线时间: + + + + + + + + 0 + + + + + 开机次数: + + + + + 应用当前配置 + + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + + + + + 要求:(重复次数+起始位置)<交替间隔 + + + + + + + + + + + + + 提示 + + + + + 应用成功 + + + + + 系统维护设置成功! + + + + + 喷码机维护设置成功! + + + + + 提示:可变长度参数不正确 + + + + + 要求:调整长度小于喷印间隔 + + + + + 小时 + + + + + + + 错误 + + + + + 授权码: + + + + + 错误 + + + + + 不存在 + + + + + 密码: + + + + + 取消授权 + + + + + + + 其他设置 + + + + + + 超高速 + + + + + + 高速 + + + + + 软件初始化完成. + + + + + RFID卡清零! + + + + + + + + + + + 警告 + + + + + 是否确认使用推荐设置? + + + + + 随机码文件为空,不需要导出 + + + + + 随机码文本将展出到U盘,请插入U盘 + + + + + 计数器1(结束值-开始值)不能被增量整除,结束值将被设为%1 + + + + + 计数器1(结束-开始)不能被增量整除,结束值将被设为%1 + + + + + 1 + + + + + 正在打印第%1组设置,不可删除 + + + + + 是否确认删除第%1组设置? + + + + + 是否确认删除全部设置? + + + + + 字体宽度不能为0 + + + + + 是否立即重新计米? + + + + + 解锁脉冲计数 + + + + + builTime:%1 + + + + + fpgaVersionNum: %1 + + + + + Type: %1 + + + + + FPGAVersion: %1 + + + + + FPGAType: %1 + + + + + 喷印间隔太小,无法正常打印!!! + + + + + 原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)! + + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + + + + + 根据喷印 + + + + + 根据脉冲数 + + + + + 根据同步器参数 + + + + + 实际皮带速度(毫米/秒): + + + + + 实际喷印间隔长度(毫米): + + + + + 长度(毫米): + + + + + 同步脉冲数 + + + + + 同步器直径(毫米): + + + + + 脉冲数/转: + + + + + 脉冲数修正 + + + + + + + + 错误 + + + + + 速度不应该为0 + + + + + 实际同步长度不应该为0 + + + + + 长度不应该为0 + + + + + 直径不应该为0 + + + + + QBarCode + + + Dialog + + + + + 条形码类型 + + + + + 条形码高度 + + + + + 条码宽度 + + + + + 显示缩放 + + + + + 墨水类型 + + + + + 1点 + + + + + 2点 + + + + + 3点 + + + + + 4点 + + + + + + 5点 + + + + + 6点 + + + + + 文本1 + + + + + 文本3 + + + + + 计数器2 + + + + + 文本2 + + + + + 计数器1 + + + + + 增加数字行 + + + + + 日期 + + + + + 时间 + + + + + 黑墨 + + + + + 白墨 + + + + + 预览 + + + + + 返回 + + + + + 插入文档 + + + + + 条码保存 + + + + + FileName + + + + + 文件未保存 + + + + + BARCODE_128 + CODE_128 + + + + + BARCODE_93 + + + + + 7点 + + + + + 9点 + + + + + 12点 + + + + + 16点 + + + + + 24点 + + + + + + 标签宽度:%1,标签高度:%2,文本宽度:%3 + + + + + QObject + + + + 手动设定 + + + + + 应用 + + + + + 起始值 + + + + + 结束值 + + + + + 循环值 + + + + + SceneEditOption + + + Form + + + + + 预览 + + + + + 新建 + + + + + 打开 + + + + + + 保存 + + + + + 另存为 + + + + + 新增图元 + + + + + 编辑图元 + + + + + 删除图元 + + + + + 放大 + + + + + 缩小 + + + + + 提示 + + + + + 文档已经改变,是否保存? + + + + + 放弃保存 + + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + + + + + 齿轮泵开 + + + + + 齿轮泵关 + + + + + 回收槽开 + + + + + + + + + + + + + + 停止 + + + + + 回收槽关 + + + + + 回收泵 + + + + + + 压缩机 + + + + + 主墨泵 + + + + + 泄压阀 + + + + + 循环阀 + + + + + 墨水阀 + + + + + 粘度泵 + + + + + 混合阀 + + + + + 时间设置 + + + + + 系统升级 + + + + + 排气 + + + + + 导出配置到U盘 + + + + + 自动清洗 + + + + + 电机测试 + + + + + 更新字库 + + + + + 导出字库 + + + + + 从U盘导入配置 + + + + + 屏幕校正 + + + + + 更新软件 + + + + + 出厂设置 + + + + + + + Cancel + + + + + (1/2) Cleaning, please wait... + + + + + + + + + + + + + + + + + + + + + 开 + + + + + + + + + + + + + + + + + + + + + + 关 + + + + + + + + + + + + + + + + + + + 警告 + + + + + + + + 请先移开喷头盖! + + + + + 是否确认进入手动模式? + + + + + 请先确认已经关闭回收槽,确认进入自动模式? + + + + + + 手动 + + + + + + + 自动 + + + + + + + + + + + + 启动 + + + + + Application + + + + + 是否确认更新字库? + + + + + + + + + + + + + + + + + + 提示 + + + + + 更新字库成功,重启后生效! + + + + + 恢复出厂设置成功,请重新关机上电 + + + + + 校准触摸屏 + + + + + 是否确认开始校准程序?请小心进行校准! + + + + + 无法生成脚本 + + + + + + + + 密码不正确! + + + + + 是否确认更新软件? + + + + + 更新失败! + + + + + 软件更新成功,重启后生效! + + + + + + + + + 错误 + + + + + 没找到对应字库,更新失败! + + + + + 找不到更新软件! + + + + + 是否确认更新系统? + + + + + 系统更新成功,重启后生效! + + + + + 文件不存在! + + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + + + + + 开始清洗 + + + + + 停止清洗 + + + + + 压力 + + + + + autoclean cancel or status: + + + + + (2/3) Cleaning + + + + + (3/3) Cleaning + + + + + 是否确认导出配置到U盘? + + + + + 检测不到U盘 + + + + + 成功导出配置到U盘 + + + + + 是否确认从U盘导入配置? + + + + + 配置文件/udisk/sysPara.bin不存在! + + + + + 从U盘成功导入配置,重启后生效! + + + + + autoclean start + + + + + 是否确认启动自动清洗? + + + + + 是否确认墨水排除,加入清洗剂? + + + + + (1/3) Cleaning + + + + + 是否确认导出字库到U盘? + + + + + U盘不可识别! + + + + + 字库导出完成! + + + + + 是否开始电机测试? + + + + + 正在排气,是否停止? + + + + + SystemSetting + + + Form + + + + + 晶振电压(%): + + + + + 压力: + + + + + 高压包容差: + + + + + 粘度: + + + + + 回收泵力度(%): + + + + + 喷头温度: + + + + + 晶振频率: + + + + + 64K + + + + + 76K + + + + + 96K + + + + + 128K + + + + + 新晶振 + + + + + 场景模式 + + + + + 粘度泵动作间隔(秒): + + + + + 墨水温度: + + + + + + °C + + + + + 喷嘴直径: + + + + + 50 (UM) + + + + + 60 (UM) + + + + + 70 (UM) + + + + + 0 + + + + + 0.6 + + + + + 1.0 + + + + + 1.6 + + + + + 2.0 + + + + + 频率修正: + + + + + 粘度校正(%): + + + + + Hz + + + + + 回收槽开关时间: + + + + + 电机电流: + + + + + 隔膜位置: + + + + + 信息编辑模式: + + + + + 文本模式 + + + + + 点阵模式 + + + + + 脉冲计数器: + + + + + 隔膜位置偏移: + + + + + 5 + + + + + 10 + + + + + 15 + + + + + 20 + + + + + 25 + + + + + 30 + + + + + 40 + + + + + 45 + + + + + 50 + + + + + 55 + + + + + 60 + + + + + 风扇开启温度: + + + + + 重置高压 + + + + + 界面语言设置 + + + + + 喷嘴逆清洗 + + + + + 搜索最佳晶振频率 + + + + + 搜索最佳晶振电压 + + + + + 应用当前配置 + + + + + + + + + + + + + 错误 + + + + + 实际频率不能为%1 + + + + + + 提示 + + + + + 应用成功 + + + + + 自动清洗时间约为一分钟,然后自动停止 + + + + + 开始清洗 + + + + + 停止清洗 + + + + + 正在喷嘴逆清洗...... + + + + + 清洗完成 + + + + + + + Application + + + + + 是否更新高压包电流数据? + + + + + + + 喷头盖未关,请先关喷头盖! + + + + + + 墨线开关未开,请先打开墨线开关! + + + + + + 回收槽未全部打开! + + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + + + + + 自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率? + + + + + 搜索的起始频率%1 HZ超出范围? + + + + + 高压设置完成 + + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + + + + + 最佳晶振频率完成 + + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + + + + + + 最佳晶振电压完成 + + + + + Tiếng Việt(Vietnamese interface) + + + + + Chinese interface(中文界面) + + + + + English interface(英文界面) + + + + + TextEditOption + + + Form + + + + + 预览 + + + + + 新建 + + + + + + + 保存 + + + + + + 另存为 + + + + + 文件 + + + + + 插变量 + + + + + 间距 + + + + + 字体 + + + + + wenquanyi + + + + + 12 + + + + + 点 + + + + + 粗体 + + + + + + + + + + 警告 + + + + + + + + 无法打开文件 + + + + + + Application + + + + + + 是否确认将文件内容追加到打开的文件? + + + + + 插入图片 + + + + + 插入文本 + + + + + 错误 + + + + + TextEditOption 构造函数参数textEdit 不应当为空 + + + + + 打开文件 + + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + + + + + 提醒 + + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + + + + + 无法保存文件 + + + + + 保存... + + + + + 提示 + + + + + 文档已经改变,是否保存? + + + + + 放弃保存 + + + + + 二维码变量设置 + + + + + 完成 + + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + + + + + 分: + + + + + 月: + + + + + 日: + + + + + 时: + + + + + 年: + + + + + 设置时间 + + + + + TriggerCtrl + + + Form + + + + + 触发模式 + + + + + 光电电平触发 + + + + + 光电边沿触发 + + + + + 同步器触发 + + + + + 延时触发 + + + + + 脉冲数/毫米 + + + + + 喷印间隔(毫米) + + + + + 脉冲信号值: + + + + + 同步喷印模式 + + + + + 按字符宽度 + + + + + 按喷印比例 + + + + + 字符宽度: + + + + + 重复次数 + + + + + + + + + 重复间隔(毫秒) + + + + + + + + 触发延时(毫秒) + + + + + 间隔模式: + + + + + 行末<->行首 + + + + + 行首<->行首 + + + + + 产生脉冲所需计数: + + + + + + + + 延时(毫秒): + + + + + 同步打印 + + + + + 同步器清零 + + + + + 脉冲数修正 + + + + + 脉冲输出使能 + + + + + 允许电眼复位 + + + + + 允许电眼立即复位 + + + + + 电眼清零 + + + + + 镜像交替间隔 + + + + + 镜象交替类型 + + + + + 自动垂直翻转 + + + + + 禁止电眼清零 + + + + + + 封锁时间(毫秒) + + + + + 无镜像打印 + + + + + 自动水平翻转 + + + + + 中心对称旋转 + + + + + 同步器正反转打印 + + + + + 同步器只正转打印 + + + + + 同步器只反转打印 + + + + + 20131228-1 + + + + + 应用当前配置 + + + + + 独立参数 + + + + + + + + 触发延时(毫米) + + + + + + + 重复间隔(毫米) + + + + + + 封锁间隔(毫米) + + + + + + + + 延时(毫米): + + + + + 字符宽度 + + + + + 喷印比例(%) + + + + + 提示:参数不正确 + + + + + 要求:触发长度小于喷印间隔 + + + + + 提示 + + + + + 应用成功 + + + + + 封锁间隔(毫秒) + + + + + ZkEdit + + + Form + + + + + 编辑图案 + + + + + 缩小 + + + + + 放大 + + + + + 宽度 + + + + + 新建 + + + + + 高度 + + + + + + + 保存 + + + + + 保存为 + + + + + 打开 + + + + + 导入 + + + + + A + + + + + 图像扩张 + + + + + 图像裁剪 + + + + + 提示 + + + + + 图片已经改变,是否保存? + + + + + 放弃保存 + + + + + + + 放大倍数:%1 + + + + + 图片另存为... + + + + + 另存为 + + + + + 打开文件 + + + + + 图片保存为... + + + + + 导入文件 + + + + + dlgDrawInit + + + 图案参数设置 + + + + + 图案宽度(像素) + + + + + 图案高度(像素) + + + + + 确定 + + + + + dlgQrCode + + + Dialog + + + + + + TextLabel + + + + + 正相打印 + + + + + 反相打印 + + + + + 条形码 + + + + + 默认 + + + + + 8 x 18 + + + + + 8 x 32 + + + + + 12 x 26 + + + + + 12 x 36 + + + + + 16 x 36 + + + + + 16 x 48 + + + + + DM码尺寸: + + + + + 自动插入时间 + + + + + DataMatrix + + + + + QRCode + + + + + 自动刷新 + + + + + 信息前缀 + + + + + 变量(初值) + + + + + 信息后缀 + + + + + 变量增量 + + + + + 插入文档 + + + + + 计数器(变量) + + + + + 预览 + + + + + 保存 + + + + + 返回 + + + + + 警告 + + + + + 输入内容超出选择DM码尺寸大小,请选择更大的尺寸! + + + + + [%1 X %2] + + + + + logo_Form + + + Form + + + + + zkWidget + + + + 警告 + + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + + + + + 请新创建建图片 + + + + diff --git a/conf/VoltDataStd21.bin b/conf/VoltDataStd21.bin new file mode 100644 index 0000000000000000000000000000000000000000..dbdda6f42817638ec69d18fcee716b5ff284036c GIT binary patch literal 6536 zcmeHMeQZ-z6z|@B_v_p@ip{H!j`~r*xT#Tz=%(_Iumt^s_?3`=OGcQ$fPv_F52~=W#jz&StS5Q* z_1yDu&pp3i?`_ge8YRu-H8M|Mq4(>z(2evEy@_pMXIUffp4kJ&_`H3`<}hZuIC=Up11NN zyqDiB#`sI3Rg8!oVu_qB-n#~|HJ9JwJ`SoH!`9*V~gHGjvxm8`Yv*hzE593EA=n+61tqO z)d7(hq=)q7E)Eya=wKZ*$~xFFHbgtvaki8DgRs?BN{ z%vW30DYX-x#Br%1)mLh`wl{-<+5wx{)EDaznJcyr3c_K606n61~WS zPk2h~7Pfp=dPJA-%ctd_Y!h=)KOke!CDtHMs^CR9CI)0RvSS$PWgIrZ@6f2emFrMX zs&`Zf4nwVaOZ|ylS)|@n=Tx)N18dY7l`{GaUF}y(jL(gd;{5ipkZmd*Nb@btC+8&D z$!8%yF7V+1;=U1aPO2VNWZZ}NO=Y#qW4(TVaDK=xtB6#BUDm#`HknLb?vzWj zEGuY4%*YMp<%z|y#zcKnZKAFrSHw6QCNP62c1bLfxUoKwERQ7;<9u?en7|5JK4%O? zB35lA606D?Fy3eh;q&<{U)Zvu@lYZZDvykJ$*mWoI2o{lpi@mKnA?AXRR{|=;HGfW zghCTMt}u~~_xZ38t7P64+$WkX(^=o|_d6RgCtJUhZ?@0vf)j6B6Bo!bqYzu{fqIl_^&b#3leyeI)Pt8YfbSrjz5@iD*QwG zT`m8pmgXN!g@0y&e~9`2kADE(QZpP4lueC)A`kovhNtcP!{0Q8^KV+tKjdG~;op?c zztXF`fB!lE@a8MrzccFob#CdRv}kF;@4=;#^(s#X78Ru<-S?%j?&qut3Wh=l3LTj7 L9oRI@|AYJmw4h^b literal 0 HcmV?d00001 diff --git a/conf/VoltDataStd25.bin b/conf/VoltDataStd25.bin new file mode 100644 index 0000000000000000000000000000000000000000..039ec45c9a06df0c5da4c1dd79dd4cc98432fb88 GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/conf/VoltParaHi.bin b/conf/VoltParaHi.bin new file mode 100644 index 0000000000000000000000000000000000000000..01deb6e11695578d34b16a95b58cefd74d362c14 GIT binary patch literal 2240 zcmeH{F-Sr|7{~vImih!Gd{H{QA(uB8*cDmfPz{bEK@Ki0(%9@`LraSgxYcCqTUsJ$ zaSRtB9GaxjMF(dI?0*-8yvgusi+AsRclWsOyYKsb-@D>z;b6CzkuuF^Z|4xM_Tqc= zcUB%&^MUukS@1IW6|9GBqhTC}KfL?_R zkf)!f_E;{&Kd%q5$T~yXD&iJ1pknUgnK7!U9p=Virg9jfMrm_Ygd{c8XzTc`f6A5D zEaqX)f`ugOMGt)l!`RU@Tbi;&OmohX~5qv00*GO#%QtPJo-nF8=wv_0` zR-2%fP*M6IC5mo;@F9rG7D0kf!6HNv$&&`3f*>v^G@xj-Abw|NZ|*jq!r4R#eUzP*5n9R(PD1)Qy)tKSwH4o!!w@c!`m@K52M z$XMiRBpiJ@dMSD>`atZB*pIQS@uKmS(G(wwm*fA&A2#1Ie=s*Ch7unpzEAWuV1;HJ zaO#WBalWWh!Gh>L}zE-pUiVtgNY!!C@Xi^_c9uJ6n*z?a(Of`DQHhDO* z(L=G>L#37L4iD3hco^L4VezDk?3jze*IZ1DyEsQ(Q-2=B{HTk$cU`0|xY&J(=UwLc z7o1z*QY(qe(E80g=bcV zkUBMl?12GP9(OSHgoA*f9RGG5)uWsp~ct;h-f%8zK(+$(uGEOeY;+18pbo zV#LNC!^Xu1&g*RqHrhDXMBGLjyW4F{d~q0)n{2dXY;~yIAd56V3mGKUebStTO7n*8 zoLl*Ik?KMl$9A=DQ%Efno<*78Z}f^F(^a%cL|f2BvKGx!Hg8axO=Y=0qc%p#Dqnco zBDuN7LCt~)Y`c-_R+fu=C6q{IUlNOlTV6{4YpM;ey!7b~! zu4DH(>8dw;y!K7Ul3Z{N{3N3KUV3M$x;C+H*&Ffqia(@FhUvZQm)7m%W)xq}H_=g} zLtCKZ*v7LZxBN`Bc$(-8*7^)T)@zeztM#$qI+J-!rShmW<}rCSkLh2y{xy&JraUHE z@&Z{^+oJBJZ)4VY!@r+DXNc=y_t!E9`5aJzhq{-rfi&O+dODYIJxdz3w*}M9TwngG zn~_4Kx~moSwA#cL+|3w?t`4+tY@#mNE0rgMZRFmitQV}wj1ox)*q5x_;M$hF?$>flICx`y?Ibb4(WAEiqem{q)`*P@%?_T0|k-w9euStKK!~AzS z#&YHS=%UYbeq@N1nD#KXx*qQ$C6(AhFaP_30(O$8>xAToZq4++PerPf{1J3UTFk*T zvmwcxXjM|39}=S*^Fy=<&q6cj21QBMtRr9NqOLdoX%=gRZoVag^PAkkm+HI}9m^>} z__!+kj+*M3+qFH!H{|y)bl24~!Z%vmW2~#X%E}nO#jR^~3+?Ov|MSfcXk=#G&Q^ZD cgz4iY6i<{eUM!*i + + DacDisplayAndEdit + + + + 0 + 0 + 600 + 143 + + + + Qt::StrongFocus + + + Form + + + + + 10 + 0 + 471 + 111 + + + + + 6 + + + + + 0 + + + 1 + + + + + + 40 + 0 + + + + 10 + + + Qt::AlignCenter + + + + + + + 07 + + + Qt::AlignCenter + + + + + + + 02 + + + Qt::AlignCenter + + + + + + + + 40 + 0 + + + + 20 + + + Qt::AlignCenter + + + + + + + 06 + + + Qt::AlignCenter + + + + + + + 09 + + + Qt::AlignCenter + + + + + + + 03 + + + Qt::AlignCenter + + + + + + + 01 + + + Qt::AlignCenter + + + + + + + 04 + + + Qt::AlignCenter + + + + + + + 05 + + + Qt::AlignCenter + + + + + + + 00 + + + Qt::AlignCenter + + + + + + + 08 + + + Qt::AlignCenter + + + + + + + + 40 + 0 + + + + 30 + + + Qt::AlignCenter + + + + + + + + 40 + 0 + + + + 00 + + + Qt::AlignCenter + + + + + + + 墨点 + + + Qt::AlignCenter + + + + + + + + + + + 10 + 110 + 571 + 20 + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + + + + + + 490 + 20 + 91 + 91 + + + + + + + + 0 + 40 + + + + 默认值 + + + + + + + + 0 + 40 + + + + 编辑 + + + + + + + + + diff --git a/dialogAuthorizationPrint.ui b/dialogAuthorizationPrint.ui new file mode 100644 index 0000000..79e9c1b --- /dev/null +++ b/dialogAuthorizationPrint.ui @@ -0,0 +1,93 @@ + + + DialogAuthorizationPrint + + + + 0 + 0 + 445 + 123 + + + + Qt::StrongFocus + + + Dialog + + + + + 210 + 80 + 221 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 20 + 421 + 51 + + + + + + + 打印密码: + + + + + + + + + + + + + buttonBox + accepted() + DialogAuthorizationPrint + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogAuthorizationPrint + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialogauthorization.ui b/dialogauthorization.ui new file mode 100644 index 0000000..78e6bf1 --- /dev/null +++ b/dialogauthorization.ui @@ -0,0 +1,93 @@ + + + DialogAuthorization + + + + 0 + 0 + 445 + 123 + + + + Qt::StrongFocus + + + Dialog + + + + + 210 + 80 + 221 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 20 + 421 + 51 + + + + + + + 授权密码: + + + + + + + + + + + + + buttonBox + accepted() + DialogAuthorization + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogAuthorization + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialogcycleprint.cpp b/dialogcycleprint.cpp new file mode 100644 index 0000000..8628feb --- /dev/null +++ b/dialogcycleprint.cpp @@ -0,0 +1,163 @@ +#include "dialogcycleprint.h" +#include "ui_dialogcycleprint.h" +#include + +DialogCycleprint::DialogCycleprint(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogCycleprint) +{ + ui->setupUi(this); +} + +DialogCycleprint::~DialogCycleprint() +{ + delete ui; +} + + +void DialogCycleprint::getSpinboxValue(CycleprintArg &t_arg) +{ + t_arg.area_end1 = ui->spinBoxarea1->value(); + t_arg.area_end2 = ui->spinBoxarea2->value(); + t_arg.area_end3 = ui->spinBoxarea3->value(); + t_arg.area_end4 = ui->spinBoxarea4->value(); + t_arg.area_end5 = ui->spinBoxarea5->value(); + t_arg.area_end6 = ui->spinBoxarea6->value(); + + t_arg.cycle_time1 = ui->spinBoxcycletime1->value(); + t_arg.cycle_time2 = ui->spinBoxcycletime2->value(); + t_arg.cycle_time3 = ui->spinBoxcycletime3->value(); + t_arg.cycle_time4 = ui->spinBoxcycletime4->value(); + t_arg.cycle_time5 = ui->spinBoxcycletime5->value(); + t_arg.cycle_time6 = ui->spinBoxcycletime6->value(); +} + +void DialogCycleprint::SetSpinboxValue(CycleprintArg &t_arg) +{ + ui->spinBoxarea1->setValue(t_arg.area_end1); + ui->spinBoxarea2->setValue(t_arg.area_end2); + ui->spinBoxarea3->setValue(t_arg.area_end3); + ui->spinBoxarea4->setValue(t_arg.area_end4); + ui->spinBoxarea5->setValue(t_arg.area_end5); + ui->spinBoxarea6->setValue(t_arg.area_end6); + + ui->spinBoxcycletime1->setValue(t_arg.cycle_time1); + ui->spinBoxcycletime2->setValue(t_arg.cycle_time2); + ui->spinBoxcycletime3->setValue(t_arg.cycle_time3); + ui->spinBoxcycletime4->setValue(t_arg.cycle_time4); + ui->spinBoxcycletime5->setValue(t_arg.cycle_time5); + ui->spinBoxcycletime6->setValue(t_arg.cycle_time6); + +} + +void DialogCycleprint::update_save() +{ + save_arg.area_end3 = ui->spinBoxarea3->value(); + save_arg.cycle_time3 = ui->spinBoxcycletime3->value(); + save_arg.area_end4 = ui->spinBoxarea4->value(); + save_arg.cycle_time4 = ui->spinBoxcycletime4->value(); + save_arg.area_end5 = ui->spinBoxarea5->value(); + save_arg.cycle_time5 = ui->spinBoxcycletime5->value(); + save_arg.area_end6 = ui->spinBoxarea6->value(); + save_arg.cycle_time6 = ui->spinBoxcycletime6->value(); + +} + +void DialogCycleprint::set_spinBox_value(int area, int cycletime, int which_box) +{ + switch (which_box) { + + case 6: + ui->spinBoxarea6->setValue(ui->spinBoxarea5->value()); + ui->spinBoxcycletime6->setValue(ui->spinBoxcycletime5->value()); + case 5: + ui->spinBoxarea5->setValue(ui->spinBoxarea4->value()); + ui->spinBoxcycletime5->setValue(ui->spinBoxcycletime4->value()); + case 4: + ui->spinBoxarea4->setValue(ui->spinBoxarea3->value()); + ui->spinBoxcycletime4->setValue(ui->spinBoxcycletime3->value()); + case 3: + ui->spinBoxarea3->setValue(ui->spinBoxarea2->value()); + ui->spinBoxcycletime3->setValue(ui->spinBoxcycletime2->value()); + break; + default: + break; + } + ui->spinBoxarea2->setValue(area); + ui->spinBoxcycletime2->setValue(cycletime); +} + +void DialogCycleprint::on_spinBoxarea3_editingFinished() +{ + if(ui->spinBoxarea3->value() != save_arg.area_end3) + { + set_spinBox_value(ui->spinBoxarea3->value(), ui->spinBoxcycletime3->value(), 3); + update_save(); + } +} +void DialogCycleprint::on_spinBoxcycletime3_editingFinished() +{ + if(ui->spinBoxcycletime3->value() != save_arg.cycle_time3) + { + set_spinBox_value(ui->spinBoxarea3->value(), ui->spinBoxcycletime3->value(), 3); + update_save(); + } +} + +void DialogCycleprint::on_spinBoxarea4_editingFinished() +{ + if(ui->spinBoxarea4->value() != save_arg.area_end4) + { + set_spinBox_value(ui->spinBoxarea4->value(), ui->spinBoxcycletime4->value(), 4); + update_save(); + } +} +void DialogCycleprint::on_spinBoxcycletime4_editingFinished() +{ + if(ui->spinBoxcycletime4->value() != save_arg.cycle_time4) + { + set_spinBox_value(ui->spinBoxarea4->value(), ui->spinBoxcycletime4->value(), 4); + update_save(); + } +} + + +void DialogCycleprint::on_spinBoxarea5_editingFinished() +{ + if(ui->spinBoxarea5->value() != save_arg.area_end5) + { + set_spinBox_value(ui->spinBoxarea5->value(), ui->spinBoxcycletime5->value(), 5); + update_save(); + } +} +void DialogCycleprint::on_spinBoxcycletime5_editingFinished() +{ + if(ui->spinBoxcycletime5->value() != save_arg.cycle_time5) + { + set_spinBox_value(ui->spinBoxarea5->value(), ui->spinBoxcycletime5->value(), 5); + update_save(); + } +} + + +void DialogCycleprint::on_spinBoxarea6_editingFinished() +{ + if(ui->spinBoxarea6->value() != save_arg.area_end6) + { + set_spinBox_value(ui->spinBoxarea6->value(), ui->spinBoxcycletime6->value(), 6); + update_save(); + } +} +void DialogCycleprint::on_spinBoxcycletime6_editingFinished() +{ + if(ui->spinBoxcycletime6->value() != save_arg.cycle_time6) + { + set_spinBox_value(ui->spinBoxarea6->value(), ui->spinBoxcycletime6->value(), 6); + update_save(); + } +} + + + + + diff --git a/dialogcycleprint.h b/dialogcycleprint.h new file mode 100644 index 0000000..ba94cfc --- /dev/null +++ b/dialogcycleprint.h @@ -0,0 +1,64 @@ +#ifndef DIALOGCYCLEPRINT_H +#define DIALOGCYCLEPRINT_H + +#include + +typedef struct { + int area_end1; + int area_end2; + int area_end3; + int area_end4; + int area_end5; + int area_end6; + + int cycle_time1; + int cycle_time2; + int cycle_time3; + int cycle_time4; + int cycle_time5; + int cycle_time6; + +}CycleprintArg; + + +namespace Ui { +class DialogCycleprint; +} + +class DialogCycleprint : public QDialog +{ + Q_OBJECT + +public: + explicit DialogCycleprint(QWidget *parent = 0); + + void getSpinboxValue(CycleprintArg &t_arg); + void SetSpinboxValue(CycleprintArg &t_arg); + void update_save(); + + ~DialogCycleprint(); + +private slots: + + void on_spinBoxarea3_editingFinished(); + void on_spinBoxcycletime3_editingFinished(); + + void on_spinBoxarea4_editingFinished(); + void on_spinBoxcycletime4_editingFinished(); + + void on_spinBoxarea5_editingFinished(); + void on_spinBoxcycletime5_editingFinished(); + + void on_spinBoxarea6_editingFinished(); + void on_spinBoxcycletime6_editingFinished(); + +private: + + void set_spinBox_value(int area, int cycletime, int which_box); + + CycleprintArg save_arg; + + Ui::DialogCycleprint *ui; +}; + +#endif // DIALOGCYCLEPRINT_H diff --git a/dialogcycleprint.ui b/dialogcycleprint.ui new file mode 100644 index 0000000..27700b4 --- /dev/null +++ b/dialogcycleprint.ui @@ -0,0 +1,416 @@ + + + DialogCycleprint + + + + 0 + 0 + 459 + 237 + + + + Dialog + + + + + 100 + 190 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 90 + 10 + 48 + 31 + + + + 999 + + + 80 + + + + + + 10 + 20 + 71 + 16 + + + + 1循环范围:0- + + + + + + 10 + 50 + 71 + 16 + + + + 1循环次数: + + + + + + 90 + 50 + 48 + 31 + + + + 999 + + + 3 + + + + + + 240 + 50 + 48 + 31 + + + + 999 + + + 3 + + + + + + 240 + 10 + 48 + 31 + + + + 999 + + + 80 + + + + + + 160 + 20 + 71 + 16 + + + + 2循环范围:0- + + + + + + 160 + 50 + 71 + 16 + + + + 2循环次数: + + + + + + 390 + 10 + 48 + 31 + + + + 999 + + + 80 + + + + + + 390 + 50 + 48 + 31 + + + + 999 + + + 3 + + + + + + 310 + 20 + 71 + 16 + + + + 3循环范围:0- + + + + + + 310 + 50 + 71 + 16 + + + + 3循环次数: + + + + + + 240 + 100 + 48 + 31 + + + + 999 + + + 80 + + + + + + 310 + 140 + 71 + 16 + + + + 6循环次数: + + + + + + 240 + 140 + 48 + 31 + + + + 999 + + + 3 + + + + + + 390 + 140 + 48 + 31 + + + + 999 + + + 3 + + + + + + 390 + 100 + 48 + 31 + + + + 999 + + + 80 + + + + + + 310 + 110 + 71 + 16 + + + + 6循环范围:0- + + + + + + 90 + 140 + 48 + 31 + + + + 999 + + + 3 + + + + + + 160 + 110 + 71 + 16 + + + + 5循环范围:0- + + + + + + 160 + 140 + 71 + 16 + + + + 5循环次数: + + + + + + 90 + 100 + 48 + 31 + + + + 999 + + + 80 + + + + + + 10 + 110 + 71 + 16 + + + + 4循环范围:0- + + + + + + 10 + 140 + 71 + 16 + + + + 4循环次数: + + + + + + + buttonBox + accepted() + DialogCycleprint + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogCycleprint + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialogfileoperation.ui b/dialogfileoperation.ui new file mode 100644 index 0000000..92d5168 --- /dev/null +++ b/dialogfileoperation.ui @@ -0,0 +1,350 @@ + + + DialogFileOperation + + + + 0 + 0 + 757 + 314 + + + + Qt::StrongFocus + + + Dialog + + + + + 10 + 10 + 748 + 291 + + + + + 2 + + + + + + + + 0 + 0 + + + + + 200 + 0 + + + + + 100 + 16777215 + + + + + + + + 2 + + + + + 1 + + + 1 + + + + + Qt::LeftToRight + + + 本地文件 + + + + :/icon/localdisk.png:/icon/localdisk.png + + + true + + + + + + + Qt::LeftToRight + + + U盘文件 + + + + :/icon/udisk.png:/icon/udisk.png + + + + + + + + + 2 + + + + + + 0 + 37 + + + + + 0 + 37 + + + + 删除文件 + + + + :/icon/keydelete.png:/icon/keydelete.png + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 删除全部 + + + + :/icon/filedelete.png:/icon/filedelete.png + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 从U盘导入 + + + + :/icon/import.png:/icon/import.png + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 导出到U盘 + + + + :/icon/export.png:/icon/export.png + + + + + + + + + true + + + false + + + + + + + 0 + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 90 + 16777215 + + + + 插入 + + + + :/icon/insert.png:/icon/insert.png + + + + + + + + 0 + 0 + + + + + 90 + 16777215 + + + + 打开文件 + + + + :/icon/fileoperation.png:/icon/fileoperation.png + + + + + + + + 0 + 0 + + + + + 90 + 16777215 + + + + 上一个 + + + + :/icon/lastpage.png:/icon/lastpage.png + + + + + + + + 0 + 0 + + + + + 90 + 16777215 + + + + 下一个 + + + + :/icon/nextpage.png:/icon/nextpage.png + + + + + + + + 0 + 0 + + + + + 90 + 16777215 + + + + 退出 + + + + :/icon/exit.png:/icon/exit.png + + + + + + + + + + + + + + + + + diff --git a/dialogfontsize.ui b/dialogfontsize.ui new file mode 100644 index 0000000..adc23be --- /dev/null +++ b/dialogfontsize.ui @@ -0,0 +1,251 @@ + + + DialogFontSize + + + + 0 + 0 + 428 + 309 + + + + Qt::StrongFocus + + + Dialog + + + + + 110 + 260 + 291 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 17 + 10 + 401 + 185 + + + + + 12 + + + + + 9点(左横) + + + + + + + 16点(中/英) + + + + + + + 7点(左横) + + + + + + + 7点(英) + + + + + + + 5点(英) + + + + + + + 9点(右横) + + + + + + + 12点(中/英) + + + + + + + 9点(中/英) + + + true + + + + + + + 7点(右横) + + + + + + + 24点(中/英) + + + + + + + true + + + + 0 + 0 + + + + 7点(孟加拉) + + + + + + + 32点 + + + + + + + 7点(rf7) + + + + + + + 21点(rf21) + + + + + + + 12点(新罗马) + + + + + + + + true + + + + 40 + 210 + 321 + 31 + + + + 123456890ABCDEFGWXYZ + + + Qt::AlignCenter + + + true + + + + + + 70 + 250 + 311 + 20 + + + + - + + + + + + 30 + 270 + 89 + 25 + + + + 查字库标识 + + + + + + + buttonBox + accepted() + DialogFontSize + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogFontSize + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialoginputpasswd.ui b/dialoginputpasswd.ui new file mode 100644 index 0000000..8fc2e98 --- /dev/null +++ b/dialoginputpasswd.ui @@ -0,0 +1,91 @@ + + + Dialoginputpasswd + + + + 0 + 0 + 384 + 112 + + + + Dialog + + + + + 30 + 70 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 20 + 20 + 62 + 49 + + + + 修改密码: + + + + + + 90 + 30 + 241 + 27 + + + + + + + + buttonBox + accepted() + Dialoginputpasswd + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialoginputpasswd + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialoginsertvari.ui b/dialoginsertvari.ui new file mode 100644 index 0000000..65edd76 --- /dev/null +++ b/dialoginsertvari.ui @@ -0,0 +1,612 @@ + + + DialogInsertVari + + + + 0 + 0 + 516 + 395 + + + + Qt::StrongFocus + + + Dialog + + + + 6 + + + + + + 0 + 0 + + + + 变量类型 + + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + 0 + 30 + + + + 生产日期 + + + + + + + + 0 + 30 + + + + 年 + + + + + + + + 0 + 30 + + + + 计数器1 + + + true + + + + + + + + 0 + 28 + + + + 计数器2 + + + + + + + + 0 + 30 + + + + 时 + + + + + + + + 0 + 28 + + + + 周 + + + + + + + + 0 + 28 + + + + 随机码1 + + + + + + + + 0 + 28 + + + + 月 + + + + + + + + 0 + 28 + + + + DataMatrix + + + + + + + + 0 + 28 + + + + QRCode + + + + + + + + 0 + 28 + + + + 有效日期 + + + + + + + + 0 + 28 + + + + Class + + + + + + + + 0 + 28 + + + + 秒 + + + + + + + + 0 + 28 + + + + 日 + + + + + + + + 0 + 28 + + + + 分 + + + + + + + + 0 + 28 + + + + BarCode128 + + + + + + + + 0 + 30 + + + + 计数器3 + + + + + + + 第XXX天 + + + + + + + 隐藏变量 + + + + + + + + + + + + + 0 + 0 + + + + 数字个数 + + + + 0 + + + 9 + + + 0 + + + + + 0 + + + 0 + + + + + + 0 + 30 + + + + 9个 + + + + + + + + 0 + 30 + + + + 11个 + + + + + + + + 0 + 30 + + + + 10个 + + + + + + + + 0 + 30 + + + + 2个 + + + + + + + + 0 + 30 + + + + 1个 + + + + + + + + 0 + 30 + + + + 3个 + + + + + + + + 0 + 30 + + + + 4个 + + + true + + + + + + + + 0 + 30 + + + + 5个 + + + + + + + + 0 + 30 + + + + 6个 + + + + + + + + 0 + 30 + + + + 7个 + + + + + + + + 0 + 30 + + + + 8个 + + + + + + + + 0 + 30 + + + + 12个 + + + + + + + + 0 + 30 + + + + 13个 + + + + + + + + 0 + 30 + + + + 14个 + + + + + + + + 0 + 30 + + + + 15个 + + + + + + + + + + :/80/image/expiryDate8.bmp + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 200 + 0 + + + + + 200 + 16777215 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + + + buttonBox + accepted() + DialogInsertVari + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogInsertVari + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialoglinespace.ui b/dialoglinespace.ui new file mode 100644 index 0000000..4f7fec0 --- /dev/null +++ b/dialoglinespace.ui @@ -0,0 +1,222 @@ + + + DialogLineSpace + + + + 0 + 0 + 385 + 303 + + + + Dialog + + + + + 150 + 260 + 221 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 30 + 361 + 121 + + + + + + + 0个像素 + + + + + + + 1个像素 + + + + + + + 2个像素 + + + + + + + 3个像素 + + + + + + + 4个像素 + + + true + + + + + + + 5个像素 + + + + + + + 6个像素 + + + + + + + 7个像素 + + + + + + + + + 10 + 10 + 81 + 17 + + + + 行间距: + + + + + + 10 + 160 + 91 + 17 + + + + 字符间距: + + + + + + 10 + 180 + 361 + 89 + + + + + + + 0个像素 + + + true + + + + + + + 3个像素 + + + + + + + 2个像素 + + + + + + + 1个像素 + + + + + + + 4个像素 + + + + + + + 5个像素 + + + + + + + + + + buttonBox + accepted() + DialogLineSpace + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogLineSpace + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialogmodifypasswd.cpp b/dialogmodifypasswd.cpp new file mode 100644 index 0000000..4a1c18b --- /dev/null +++ b/dialogmodifypasswd.cpp @@ -0,0 +1,26 @@ +#include "dialogmodifypasswd.h" +#include "ui_dialogmodifypasswd.h" + +Dialogmodifypasswd::Dialogmodifypasswd(QWidget *parent) : + QDialog(parent), + ui(new Ui::Dialogmodifypasswd) +{ + ui->setupUi(this); + this->setWindowTitle(tr("密码授权")); + this->setFixedSize(this->geometry().width(),this->geometry().height()); + ui->lineEdit->setEchoMode(QLineEdit::Password); // 密码不回显 +} + +Dialogmodifypasswd::~Dialogmodifypasswd() +{ + delete ui; +} + +QString Dialogmodifypasswd::getModPasswd(){ + return ui->lineEdit->text(); +} + +void Dialogmodifypasswd::clearAuth(){ + ui->lineEdit->setText(tr("")); + +} diff --git a/dialogmodifypasswd.h b/dialogmodifypasswd.h new file mode 100644 index 0000000..8621471 --- /dev/null +++ b/dialogmodifypasswd.h @@ -0,0 +1,25 @@ +#ifndef DIALOGMODIFYPASSWD_H +#define DIALOGMODIFYPASSWD_H + +#include + +namespace Ui { +class Dialogmodifypasswd; +} + +class Dialogmodifypasswd : public QDialog +{ + Q_OBJECT + +public: + + explicit Dialogmodifypasswd(QWidget *parent = 0); + ~Dialogmodifypasswd(); + + QString getModPasswd(); + void clearAuth(); +private: + Ui::Dialogmodifypasswd *ui; +}; + +#endif // DIALOGMODIFYPASSWD_H diff --git a/dialogmodifypasswd.ui b/dialogmodifypasswd.ui new file mode 100644 index 0000000..a794616 --- /dev/null +++ b/dialogmodifypasswd.ui @@ -0,0 +1,91 @@ + + + Dialogmodifypasswd + + + + 0 + 0 + 426 + 102 + + + + Dialog + + + + + 50 + 60 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 20 + 10 + 62 + 49 + + + + 修改密码: + + + + + + 90 + 20 + 281 + 27 + + + + + + + + buttonBox + accepted() + Dialogmodifypasswd + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialogmodifypasswd + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialogpointdistanceadjust.ui b/dialogpointdistanceadjust.ui new file mode 100644 index 0000000..0999316 --- /dev/null +++ b/dialogpointdistanceadjust.ui @@ -0,0 +1,304 @@ + + + DialogPointDistanceAdjust + + + + 0 + 0 + 555 + 194 + + + + Qt::StrongFocus + + + Dialog + + + + + 320 + 150 + 221 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 541 + 141 + + + + + 3 + + + 3 + + + + + + + 列首: + + + + + + + -99 + + + 3 + + + Qt::Horizontal + + + + + + + -99 + + + + + + + + + + + 列中: + + + + + + + -99 + + + 3 + + + Qt::Horizontal + + + + + + + -99 + + + + + + + + + + + 列尾: + + + + + + + -99 + + + 3 + + + Qt::Horizontal + + + + + + + -99 + + + + + + + + + + + 160 + 160 + 98 + 27 + + + + 重置 + + + + + + 30 + 160 + 98 + 27 + + + + 测试 + + + + + + + buttonBox + accepted() + DialogPointDistanceAdjust + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogPointDistanceAdjust + reject() + + + 316 + 260 + + + 286 + 274 + + + + + horizontalSliderLineHeadValue + valueChanged(int) + spinBoxLineHeadValue + setValue(int) + + + 266 + 33 + + + 518 + 33 + + + + + horizontalSliderLineCenterValue + valueChanged(int) + spinBoxLineCenterValue + setValue(int) + + + 266 + 80 + + + 518 + 80 + + + + + horizontalSliderLineEndValue + valueChanged(int) + spinBoxLineEndValue + setValue(int) + + + 266 + 127 + + + 518 + 127 + + + + + spinBoxLineHeadValue + valueChanged(int) + horizontalSliderLineHeadValue + setValue(int) + + + 518 + 33 + + + 266 + 33 + + + + + spinBoxLineCenterValue + valueChanged(int) + horizontalSliderLineCenterValue + setValue(int) + + + 518 + 80 + + + 266 + 80 + + + + + spinBoxLineEndValue + valueChanged(int) + horizontalSliderLineEndValue + setValue(int) + + + 518 + 127 + + + 266 + 127 + + + + + diff --git a/dialogsavefile.ui b/dialogsavefile.ui new file mode 100644 index 0000000..9d3214e --- /dev/null +++ b/dialogsavefile.ui @@ -0,0 +1,247 @@ + + + DialogSaveFile + + + Qt::WindowModal + + + + 0 + 0 + 640 + 460 + + + + Qt::NoFocus + + + Dialog + + + Qt::ImhHiddenText|Qt::ImhNoAutoUppercase|Qt::ImhPreferNumbers + + + + + + 0 + + + + + 0 + + + + + + 100 + 16777215 + + + + Qt::LeftToRight + + + 本地文件 + + + + :/icon/localdisk.png:/icon/localdisk.png + + + true + + + + + + + + 120 + 16777215 + + + + Qt::LeftToRight + + + U盘文件 + + + + :/icon/udisk.png:/icon/udisk.png + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + + + + + 6 + + + 0 + + + + + 预览文件内容: + + + + + + + + 90 + 16777215 + + + + 上一个 + + + + :/icon/lastpage.png:/icon/lastpage.png + + + + + + + + 90 + 16777215 + + + + 下一个 + + + + :/icon/nextpage.png:/icon/nextpage.png + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + true + + + + 16777215 + 60 + + + + false + + + + + + + + + 请输入文件名: + + + + + + + + 0 + 30 + + + + + + + + + 90 + 16777215 + + + + 取消 + + + + :/icon/exit.png:/icon/exit.png + + + + + + + + 90 + 16777215 + + + + 保存 + + + + :/icon/filesave.png:/icon/filesave.png + + + + + + + + + + + + + + diff --git a/dialogshowcounter.cpp b/dialogshowcounter.cpp new file mode 100644 index 0000000..f849f31 --- /dev/null +++ b/dialogshowcounter.cpp @@ -0,0 +1,165 @@ +#include "dialogshowcounter.h" +#include "ui_dialogshowcounter.h" +#include + +DialogShowCounter::DialogShowCounter(QWidget *parent) : + QDialog(parent), + ui(new Ui::DialogShowCounter) +{ + ui->setupUi(this); + + cycle_flag = true; + cycleTimecount = 0; + savecnt1CurrValue = 0; + + dialogcycleprint = new DialogCycleprint(parent); + connect(dialogcycleprint,SIGNAL(accepted()),this,SLOT(ondialogcycleprintAccepted())); +// ui->CycleprintpushButton->hide(); + setWindowFlags(Qt::FramelessWindowHint); +} + +DialogShowCounter::~DialogShowCounter() +{ + delete ui; +} + +void DialogShowCounter::init_arg() +{ + dialogcycleprint->getSpinboxValue(cycleprintarg); + + dialogcycleprint->SetSpinboxValue(cycleprintarg); + +// qDebug()<<"[init_arg]cycleprintarg.area_end1="<SetSpinboxValue(cycleprintarg); + + +// emit set_count_endvalue(cycleprintarg.cycle_time1, cycleprintarg.area_end1); + } +#endif + + // 当前米标 +// QString temp_str = QString::number(metre); + ui->lcdNumber->display(currCnt1Value); + + // 结束值 +// temp_str = QString::number(cn1EndValue); + ui->lcdCycleEndNumber->display(cn1EndValue); + + // 起始值 +// temp_str = QString::number(cn1StartValue); + ui->lcdCycleStartNumber->display(cn1StartValue); + + // 循环 +//// cycleTimecount = cycle_count; +// temp_str = QString::number(cycleTimecount); + ui->lcdCycleTimeNumber->display(currGroupLoop + 1); + + // 剩余米数 +// lcd_number = cn1EndValue - metre; +// temp_str = QString::number(lcd_number); + int remainValue = cn1EndValue - currCnt1Value; + ui->lcdLessNumber->display(remainValue); + +} + +void DialogShowCounter::setLCDframe() +{ + ui->lcdNumber->setDigitCount(4); + ui->lcdNumber->setMode(QLCDNumber::Dec); + ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat); + QPalette lcdpat = ui->lcdNumber->palette(); + lcdpat.setColor(QPalette::Normal, QPalette::WindowText, Qt::red); + ui->lcdNumber->setPalette(lcdpat); + + ui->lcdCycleEndNumber->setDigitCount(4); + ui->lcdCycleEndNumber->setMode(QLCDNumber::Dec); + ui->lcdCycleEndNumber->setSegmentStyle(QLCDNumber::Flat); + lcdpat = ui->lcdCycleEndNumber->palette(); + lcdpat.setColor(QPalette::Normal, QPalette::WindowText, Qt::red); + ui->lcdCycleEndNumber->setPalette(lcdpat); + + ui->lcdCycleStartNumber->setDigitCount(4); + ui->lcdCycleStartNumber->setMode(QLCDNumber::Dec); + ui->lcdCycleStartNumber->setSegmentStyle(QLCDNumber::Flat); + lcdpat = ui->lcdCycleStartNumber->palette(); + lcdpat.setColor(QPalette::Normal, QPalette::WindowText, Qt::red); + ui->lcdCycleStartNumber->setPalette(lcdpat); + + ui->lcdCycleTimeNumber->setDigitCount(4); + ui->lcdCycleTimeNumber->setMode(QLCDNumber::Dec); + ui->lcdCycleTimeNumber->setSegmentStyle(QLCDNumber::Flat); + lcdpat = ui->lcdCycleTimeNumber->palette(); + lcdpat.setColor(QPalette::Normal, QPalette::WindowText, Qt::red); + ui->lcdCycleTimeNumber->setPalette(lcdpat); + + ui->lcdLessNumber->setDigitCount(4); + ui->lcdLessNumber->setMode(QLCDNumber::Dec); + ui->lcdLessNumber->setSegmentStyle(QLCDNumber::Flat); + lcdpat = ui->lcdLessNumber->palette(); + lcdpat.setColor(QPalette::Normal, QPalette::WindowText, Qt::red); + ui->lcdLessNumber->setPalette(lcdpat); + +} + +int DialogShowCounter::getResetMetreState(int &area_end) +{ + int t_reset; + t_reset = reset_meter; + reset_meter = false; + + //qDebug()<<"cycleprintarg.area_end1="<getSpinboxValue(cycleprintarg); +} + +void DialogShowCounter::on_CycleprintpushButton_clicked() +{ + dialogcycleprint->show(); +} diff --git a/dialogshowcounter.h b/dialogshowcounter.h new file mode 100644 index 0000000..35a706c --- /dev/null +++ b/dialogshowcounter.h @@ -0,0 +1,53 @@ +#ifndef DIALOGSHOWCOUNTER_H +#define DIALOGSHOWCOUNTER_H + +#include +#include +#include +#include "ParaSettingUI.h" + +#include "dialogcycleprint.h" + +namespace Ui { +class DialogShowCounter; +} + +class DialogShowCounter : public QDialog +{ + Q_OBJECT + +public: + void setLCDframe(void); + void refreshdate(int currCnt1Value, int cn1StartValue, int cn1EndValue,int currGroupIndex, int currGroupLoop/*当前循环次数*/); + int getResetMetreState(int &area_end); + void init_arg(); + + explicit DialogShowCounter(QWidget *parent = 0); + + DialogCycleprint *dialogcycleprint; + + CycleprintArg cycleprintarg; + + ~DialogShowCounter(); + +Q_SIGNALS: + void set_count_endvalue(int cycle_time,int area_end); + +private slots: + void on_pushButton_clicked(); + + void on_CycleprintpushButton_clicked(); + void ondialogcycleprintAccepted(); + +private: + Ui::DialogShowCounter *ui; + int lcd_number; + int reset_meter; + int cycleTimecount; + int savecnt1CurrValue; + int cycle_flag; +// QTimer *refresh_timer; + +}; + +#endif // DIALOGSHOWCOUNTER_H diff --git a/dialogshowcounter.ui b/dialogshowcounter.ui new file mode 100644 index 0000000..dfdff2c --- /dev/null +++ b/dialogshowcounter.ui @@ -0,0 +1,279 @@ + + + DialogShowCounter + + + + 0 + 0 + 640 + 480 + + + + Dialog + + + + + 290 + 440 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 160 + 20 + 471 + 411 + + + + 4 + + + + + + 170 + 0 + 61 + 21 + + + + 米标显示: + + + + + + 10 + 10 + 91 + 16 + + + + 目前循环范围: + + + + + + 40 + 30 + 101 + 61 + + + + 4 + + + + + + 140 + 70 + 16 + 16 + + + + 米 + + + + + + 10 + 190 + 91 + 16 + + + + 剩余米数: + + + + + + 140 + 300 + 16 + 16 + + + + 米 + + + + + + 0 + 210 + 141 + 111 + + + + 4 + + + + + + 0 + 340 + 141 + 91 + + + + 4 + + + + + + 0 + 320 + 91 + 16 + + + + 循环次数: + + + + + + 20 + 440 + 91 + 23 + + + + 立即重新计米 + + + + + + 140 + 150 + 16 + 16 + + + + 米 + + + + + + 40 + 110 + 101 + 61 + + + + 4 + + + + + + 10 + 70 + 31 + 16 + + + + 起始: + + + + + + 10 + 150 + 31 + 16 + + + + 结束: + + + lcdNumber + buttonBox + label + label_2 + lcdCycleStartNumber + label_3 + label_4 + label_5 + lcdLessNumber + lcdCycleTimeNumber + label_6 + pushButton + label_7 + lcdCycleEndNumber + label_8 + label_9 + + + + + buttonBox + accepted() + DialogShowCounter + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogShowCounter + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/digitalinput.ui b/digitalinput.ui new file mode 100644 index 0000000..79a8fc9 --- /dev/null +++ b/digitalinput.ui @@ -0,0 +1,420 @@ + + + DigitalInput + + + + 0 + 0 + 203 + 213 + + + + + + + + + 255 + 255 + 255 + + + + + + + 202 + 201 + 201 + + + + + + + + + 255 + 255 + 255 + + + + + + + 202 + 201 + 201 + + + + + + + + + 202 + 201 + 201 + + + + + + + 202 + 201 + 201 + + + + + + + + Form + + + + + 0 + 0 + 201 + 211 + + + + + 3 + + + 3 + + + + + 0 + + + 1 + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 9 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 3 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 8 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + - + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 退格 + + + + :/icon/keyleft.png:/icon/keyleft.png + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 1 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 4 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 0 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 5 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 7 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 2 + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + 6 + + + + + + + + + 0 + + + 0 + + + + + + 50 + 75 + + + + + 50 + 75 + + + + + + + + :/icon/keyup.png:/icon/keyup.png + + + + + + + + 50 + 75 + + + + + 50 + 75 + + + + + + + + :/icon/keydown.png:/icon/keydown.png + + + + + + + + 50 + 60 + + + + + 50 + 60 + + + + 全选 + + + + + + + + + + + + + diff --git a/dlgQrCode.cpp b/dlgQrCode.cpp new file mode 100644 index 0000000..cdd55f0 --- /dev/null +++ b/dlgQrCode.cpp @@ -0,0 +1,614 @@ +#include "dlgQrCode.h" +#include "ui_dlgQrCode.h" + + +#include +#include +#include +#include + +#include +#include +#include "SysPara.h" +#include "InkJetPrinter.h" + +#define AUTOREF true + + +#include "Matrix/dm200.h" + +#define MDTFLAG 0xff00FF10 +#define QRFLAG 0xff00FF20 +#define BARFLAG 0xff00FF30 + +char DataMatrixdDraw(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize); + char DataMatrixdDrawImg(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize); + void Draw_MatrixToImg(unsigned char *buffer,QImage *pImg); + + extern InkJetPrinter *pInkJectPrinter; + //void MatrixEnCode(unsigned char *intext,int Size); + + static int casesensitive = 1; + static int eightbit = 0; + static int kanji = 0; + static int version = 0; + +static int margin = 1; + +static QRecLevel level = QR_ECLEVEL_L; + + +static int AutoCount=0; +static QImage img1; +static int InkColor=0; + + +dlgQrCode::dlgQrCode(QWidget *parent) : + QDialog(parent), + ui(new Ui::dlgQrCode) +{ + ui->setupUi(this); + qrOption = new qrOption_t; + //ui->labQRImage->setText(""); + ui->labName->setText(""); + ui->labRECT->setText(""); + bcWidth=bcHeight=0; + counter =0; + scene = new QGraphicsScene; + connect(ui->lineEditIn,SIGNAL(editingFinished()),this,SLOT(onTextChanged())); + connect(ui->checkBoxAuto,SIGNAL(clicked(bool)),this,SLOT(onQRCodeAuto(bool))); + // img1 =0; + + connect(ui->comboBoxType, SIGNAL(currentIndexChanged(int)),this, SLOT(onComboBoxType(int))); +} + +dlgQrCode::~dlgQrCode() +{ + delete ui; + if(scene) + { + delete scene; + } +} + +enum { + O_HELP, + O_OUTPUT, + O_SIZE, + O_VERSION, + O_LEVEL, + O_MARGIN, + O_KANJI, + O_CASE, + O_8BIT, +}; + +static const struct option options[] = { + {"h", no_argument , NULL, O_HELP}, + {"o", required_argument, NULL, O_OUTPUT}, + {"l", required_argument, NULL, O_LEVEL}, + {"s", required_argument, NULL, O_SIZE}, + {"v", required_argument, NULL, O_VERSION}, + {"m", required_argument, NULL, O_MARGIN}, + {"k", no_argument , NULL, O_KANJI}, + {"c", no_argument , NULL, O_CASE}, + {"8", no_argument , NULL, O_8BIT}, + {NULL, 0, NULL, 0} +}; + +static QRcode *encode(const char *intext) +{ + QRencodeMode hint; + QRcode *code; + + if(kanji) { + hint = QR_MODE_KANJI; + } else { + hint = QR_MODE_8; + } + + if(eightbit) { + code = QRcode_encodeString8bit(intext, version, QR_ECLEVEL_L); + } else { + code = QRcode_encodeString(intext, version, QR_ECLEVEL_L, hint, casesensitive); + } + + return code; +} + +static void qrencode(const char *intext,int Size) +{ + QRcode *qrcode; + //png_structp png_ptr; + //png_infop info_ptr; + unsigned char *row, *p, *q; + int x, y, xx, yy, bit; + int realwidth; + + qrcode = encode(intext); + if(qrcode == NULL) { + fprintf(stderr, "Failed to encode the input data.\n"); + exit(1); + } + + realwidth = (qrcode->width + margin * 2) * Size; + + row = (unsigned char *)malloc(realwidth); + // top margin + memset(row, 0x0, realwidth ); + QImage QRImage(realwidth, InkColor?realwidth:qrcode->width*Size ,QImage::Format_ARGB32 ); + QImage *img; + img = &QRImage; + if( AutoCount ) { + InkColor =0; + img->fill(0xff00ff00); // 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR) + } + else + img->fill(InkColor?0xff000000:0x00ffffff); + /* data */ + p = qrcode->data; + int ypos=InkColor?margin:0;//margin * Size; + int xpos=0; + + for(y=0; ywidth; y++) { + bit = 7; + bit = 7 - (margin * Size % 8); + xpos=margin * Size; + for(x=0; xwidth; x++) { + for(xx=0; xxsetPixel(xpos,ypos+yy,InkColor? 0x00ffffff:0xff000000); + img->setPixel(xpos,ypos+yy,InkColor? 0x00ffffff:0xff000000); + } + } + xpos++; + + } + p++; + bit--; + if(bit < 0) { + //q++; + bit = 7; + } + } + ypos+=Size; + } + img1 = img->copy(img->rect()); + if(AutoCount) img1.setPixel(0,ypos-1,QRFLAG); + free(row); + QRcode_free(qrcode); +} + + void dlgQrCode::MatrixEnCode(unsigned char *intext,int Size) +{ + U16 sColumns, sRows; + U08 *Grid; + sColumns = sRows = 0; + Grid = 0; + short sizeType = ui->comboBox_DMType->currentIndex(); + Grid = iec16022ecc200((short*)&sColumns, (short*)&sRows, intext, &sizeType); + if(sizeType == -1) + { + QMessageBox::warning(0,tr("警告"),tr("输入内容超出选择DM码尺寸大小,请选择更大的尺寸!")); + return; + } + DataMatrixdDrawImg(Grid,sRows,sColumns,Size); +} + +void dlgQrCode::on_pushBtnClose_pressed(){ + + flagInsert = ui->checkBox->checkState()?1:0; + AutoCount=(ui->checkBoxAutoCount->checkState())?1:0; + ui->checkBox->setChecked(0); + barCodeFlag = ui->barCodeCheckBox->checkState()?1:0; + + emit onQRCodeCloseNow(); + this->close(); +} + + char DataMatrixdDrawImg(U08 *OutBuff, U16 cRows, U16 cColumns, U08 MSize) +{ + int Size=MSize; + int w = cColumns*Size; + int h = cRows*Size; + //qDebug()<fill( AutoCount?0xff00ff00:0x00ffffff); + /* data */ + int margin=0; + U08 *p = OutBuff; + int ypos=0;//margin * Size; + int xpos=0; + int x,y,xx,yy,bit; + for(y=0; ysetPixel(xpos,h-1-(ypos+yy),AutoCount?0xff000000:0xff000000); + } + } + xpos++; + } + p++; + bit--; + if(bit < 0) { + //q++; + bit = 7; + } + } + // xpos++; + for(xx=0; xxsetPixel(xpos,h-1-(ypos+yy),0x00ffffff); + } + xpos++; + } + + ypos+=Size; + + } + //img->save("Myqr.bmp"); + img1 = img->copy(img->rect()); + if(AutoCount) img1.setPixel(0,ypos-1,MDTFLAG); // 设置定位标志 + return 0; +} +void dlgQrCode::on_pushBtnPreView_pressed(){ + QString in; + InkColor = ui->comboBoxInkColor->currentIndex()?1:0; + AutoCount=(ui->checkBoxAutoCount->checkState())?1:0; + + QString s1=ui->lineEditCNT->text(); + QString s2; + int len = s1.length(); + + + if(ui->checkBoxAutoCount->checkState()) { + + in = ui->lineEditIn->text() + ui->lineEditCNT->text() +ui->lineEditIn2->text();// "%04d" + + } + else in = ui->lineEditIn->text()+ui->lineEditIn2->text(); + if(flagCount==0) in=ui->lineEditIn->text(); + + ui->lineEdit->setText(in); + + if(in.isEmpty()) + { +// qDebug()<<"QRcode string isEmpty"; + return; + }QByteArray inUtf8 = in.toUtf8(); + char *intext =""; + intext = (char *)malloc(inUtf8.length()*2);//intext = (char *)malloc(in.length()*2); + memset(intext,0,sizeof(intext)); + memcpy(intext,inUtf8.data(),2*inUtf8.length());//memcpy(intext,in.toLocal8Bit().data(),2*in.length()); + + if(ui->comboBoxType->currentIndex()){ qrencode(intext,1); } + else { MatrixEnCode((unsigned char *)intext,1); } + + //if(pInkJectPrinter->modbus->modbus_up_QRCODE == 0) + { + ShowQRCode(&img1); + } + bcWidth = img1.width(); + bcHeight = img1.height(); + ui->labRECT->setText(tr("[%1 X %2]").arg(img1.width()).arg(img1.height())); + if(!ui->checkBoxAutoCount->isChecked()) + { + ui->pushBtnSave->setEnabled(true); + } + else + { + ui->pushBtnSave->setEnabled(false); + } +} + +void dlgQrCode::onTextChanged(){ + //qDebug()<<"onTextChanged:"; + if(AutoRefresh){ + emit on_pushBtnPreView_pressed(); + } +} + +void dlgQrCode::ShowQRCode(QImage *img) +{ + //scene = new QGraphicsScene; 一直new不释放会让内存耗尽 + scene->clear(); + int scale = 4; + int bcWidth= img->width(); + int bcHeight = img->height(); + scene->setSceneRect( 0,0,bcWidth*(scale),bcHeight*(scale)); + scene->setItemIndexMethod(QGraphicsScene::NoIndex); + QPixmap pixmap(QPixmap::fromImage(*img)); + pixmap = pixmap.scaledToHeight(bcHeight*(scale)); + //pixmap = pixmap.scaledToWidth(scale*bcWidth); + item = scene->addPixmap(pixmap); + /***************设置view的场景*****************************/ + ui->BarCodeView->setScene(scene); + ui->BarCodeView->setRenderHint(QPainter::Antialiasing); + ui->BarCodeView->setCacheMode(QGraphicsView::CacheBackground); + ui->BarCodeView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + ui->BarCodeView->setDragMode(QGraphicsView::ScrollHandDrag); + //ui->graphicsView->resize(400,300); + ui->BarCodeView->setScene(scene);//设置view的场景 +} + + +void dlgQrCode::on_pushBtnSave_pressed(){ + //if(img1.width()<10) + // on_pushBtnPreView_pressed(); + + QString s1 = ui->lineEditIn->text(); + QString s2=""; + int len =s1.length()<10?s1.length():10; + for(int i=1;i='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z') ) + s2+= QString(c); + } + + s2 = (ui->comboBoxType->currentIndex()?"QR_":"DMT_")+s2.left(10)+".bmp"; + if(AutoCount) s2 = (ui->comboBoxType->currentIndex()?"QRV":"DMTV")+ QString().sprintf("%02d",img1.height())+".bmp"; + if(sysPara->status.flagOfWeiDaLiTCP) + s2 = "WeiDL_DMCode.bmp"; + ui->labName->setText(s2); + + if(pInkJectPrinter->modbus->modbus_up_QRCODE == 1) + { +// qDebug()<<"save modbusQR"; + s2 = "modbusQR.bmp"; + this->pictureName=DOC_ROOT_DIR+s2; + img1.save(pictureName); + pInkJectPrinter->modbus->modbus_up_QRCODE = 0; + }else + { + this->pictureName=DOC_ROOT_DIR+s2; + //如果是自动计数不作保存 + if(AutoCount) + { + return; + } + img1.save(pictureName); + } + +} +QString dlgQrCode::getCounterText( int counter,int QRCntNum){ + QString s1=""; + //counter = qrOption->counter; + char mFormat[20]; + memset(mFormat,0,20); + if(QRCntNum>0) {snprintf(mFormat,20,"%%%02dd",QRCntNum); + if(QRCntNum==1) s1 = QString().sprintf(mFormat,counter%10); + else if(QRCntNum==2) s1 = QString().sprintf(mFormat,counter%100); + else if(QRCntNum==3) s1 = QString().sprintf(mFormat,counter%1000); + else if(QRCntNum==4) s1 = QString().sprintf(mFormat,counter%10000); + else if(QRCntNum==5) s1 = QString().sprintf(mFormat,counter%100000); + else if(QRCntNum==6) s1 = QString().sprintf(mFormat,counter%1000000); + else if(QRCntNum==7) s1 = QString().sprintf(mFormat,counter%10000000); + else if(QRCntNum==8) s1 = QString().sprintf(mFormat,counter%100000000); + else if(QRCntNum==9) s1 = QString().sprintf(mFormat,counter%1000000000); + else if(QRCntNum>=10) s1= QString().sprintf(mFormat,counter%10000000000); + //else s1 = QString().sprintf(mFormat,counter); + } + return s1; +} + +void dlgQrCode::SetOption(qrOption_t *qrOption){ + //memcpy( qrOption,qrOption0,sizeof(qrOption)); + QString s1=qrOption->text2; + ui->checkBoxAuto->setChecked(qrOption->AutoRefresh); + ui->checkBox->setChecked(0); + ui->lineEditIn2->setText(s1);//后缀 + ui->lineEditVarInc->setText(QString("%1").arg(qrOption->CntInc)); + //qDebug()<CntInc; + s1=getCounterText(qrOption->counter,qrOption->cntNum); + ui->lineEditCNT->setText(s1);//变量 + s1=qrOption->text; + ui->lineEditIn->setText(s1);//前缀 + ui->comboBoxInkColor->setCurrentIndex(qrOption->InkColor); + ui->checkBoxAutoCount->setChecked(qrOption->AutoCount);//z//计数器变量 + ui->checkBox->setChecked(flagInsert); + ui->barCodeCheckBox->setChecked(qrOption->barCodeFlag); + ui->comboBoxType->setCurrentIndex(qrOption->type); + QRCntNum = qrOption->cntNum; + if(qrOption->AutoCount) { + counter = qrOption->counter; + s1 = ui->lineEditIn->text()+ui->lineEditCNT->text()+ui->lineEditIn2->text(); + } + else s1 = ui->lineEditIn->text()+ui->lineEditIn2->text(); + + ui->lineEdit->setText(s1); + + if(s1.length()>10) s1 = "QR_"+s1.left(10)+".bmp"; + if(AutoCount) s1 = (ui->comboBoxType->currentIndex()?"QRV":"DMTV")+ QString().sprintf("%02d",img1.height())+".bmp"; + this->pictureName=DOC_ROOT_DIR+s1; + if(!qrOption->AutoRefresh) emit on_pushBtnPreView_pressed(); + //AutoRefresh = AUTOREF; + ui->pushBtnSave->setEnabled(false); + if(sysPara) + { + sysPara->para.isCheckInsertTime ? ui->checkBoxInsertTime->setChecked(true) : ui->checkBoxInsertTime->setChecked(false); + } +} + +void dlgQrCode::GetOption(qrOption_t *qrOption0){ + //qrOption = qrOption0; + if(qrOption0){ + qrOption0->width = img1.width(); + qrOption0->height = img1.height(); + //qrOption0->level = level; // ui->qrLevel->currentIndex()+1; + qrOption0->InkColor = ui->comboBoxInkColor->currentIndex()?1:0; + qrOption0->AutoRefresh = AutoRefresh; + qrOption0->type = ui->comboBoxType->currentIndex(); + qrOption0->AutoCount=(ui->checkBoxAutoCount->checkState())?1:0; + snprintf(qrOption0->text,sizeof(qrOption0->text),"%s",ui->lineEditIn->text().toAscii().constData()); + snprintf(qrOption0->text2,sizeof(qrOption0->text2),"%s",ui->lineEditIn2->text().toAscii().constData()); + snprintf(qrOption0->textCnt,sizeof(qrOption0->textCnt),"%s",ui->lineEditCNT->text().toAscii().constData()); + qrOption0->cntNum =ui->lineEditCNT->text().length(); + //qDebug()<<"GetOption cntNum"<cntNum; + //bool ok; + qrOption0->counter = ui->lineEditCNT->text().toInt(0,10); + qrOption0->CntInc = ui->lineEditVarInc->text().toInt(0,10); + //qrOption->CntInc =11; + //qDebug()<<"TTTT"<CntInc)<<(qrOption0->counter)<<(qrOption0->cntNum); + ui->pushBtnSave->setEnabled(false); + if(sysPara) + { + sysPara->para.isCheckInsertTime = ui->checkBoxInsertTime->isChecked() ? true : false; + } + } +} + +int dlgQrCode::getDat(SysPara* sysPara,int varNum){ + + //TextToQRImg((QRvars_t *)&sysPara->print.QRvars[varNum]); + + int w= img1.width(); + int h= img1.height(); + if(varNum>1)varNum=0; + int wStart=sysPara->print.QRvars[varNum].startColPos; + int hStart= sysPara->print.QRvars[varNum].startRowPos; + //if(hStart)hStart-=1; + //qDebug()<<"wStart"<status.printDat; + for(int i = 0 ; i < w; i++) + { + unsigned char c=0,c1=0; + int j=0; + hStart= sysPara->print.QRvars[varNum].startRowPos; + c=sysPara->status.printDat[(wStart)*5+(hStart)/8]; + for( j = 0; j < h; j++) + { + QRgb rgb = img1.pixel(i,j); + if((rgb == 0xff000000)) c |= (1 << (hStart%8)); + else c &= ~(1 << (hStart%8)); + if(hStart%8==7) { + sysPara->status.printDat[(wStart)*5+(hStart)/8]=c; + c=sysPara->status.printDat[(wStart)*5+(hStart+1)/8]; + } + hStart++; + } + sysPara->status.printDat[(wStart)*5+(hStart)/8]=c; + wStart++; + if(sysPara->status.addSpace ) wStart++; //&& sysPara->print.QRvars[varNum].type==0 + } + return w; +} + + +#include "QDateTime" +void dlgQrCode::extSetText(QString text, bool flag) +{ + if(flag) + { + ui->comboBoxType->setCurrentIndex(1); + } + else{ + ui->comboBoxType->setCurrentIndex(0); + } + ui->lineEditIn->setText(text); + ui->lineEditIn2->setText(""); + ui->lineEditCNT->setText(""); + + pInkJectPrinter->modbus->modbus_up_QRCODE =1; + + emit on_pushBtnPreView_pressed(); + emit on_pushBtnSave_pressed(); +} + +QString dlgQrCode::TextToQRImg(qrOption_t *qrVar){ + QString in,s1,s2,s3; + + //snprintf(qrVar->text,sizeof(qrVar->text),"%s",ui->lineEditIn->text().toAscii().constData()); + s1 = qrVar->text;//ui->lineEditIn->text(); + s2 = qrVar->text2; + s3 = getCounterText(qrVar->counter,qrVar->cntNum) ; + QRCntNum = qrVar->cntNum; + in = s1+s2; + + if(QRCntNum>0) { + in =s1+s3+s2; + } + + + // if(qrVar->TimeEn) + // in += " "+ QDateTime::currentDateTime().toString(tr("yy-MM-dd HH:mm:SS")); + counter = qrVar->counter; + if(in.isEmpty())in = ""; +#ifdef MYARMTEST + //qDebug()<<"txtToImg:"<type){ qrencode(intext,1); } + else { MatrixEnCode((unsigned char *)intext,1); } + //ShowQRCode(&img1); + free(intext); + qrVar->width = img1.width(); + qrVar->height = img1.height(); + //qrVar->startRowPos = qrVar->endRowPos-qrVar->height; + bcWidth = img1.width(); + bcHeight = img1.height(); + return in;// 返回文件名 +} + +void dlgQrCode::onQRCodeAuto(bool En){ + AutoRefresh = En; + //ui->pushBtnPreView->setEnabled(!En); +} + +void dlgQrCode::onComboBoxType(int type) +{ + if(type == 0) + { + ui->comboBox_DMType->setEnabled(true); + } + else + { + ui->comboBox_DMType->setEnabled(false); + } +} + +void dlgQrCode::setCntCheckBoxHide(bool hideEn){ + if(hideEn){ + ui->checkBoxAutoCount->setChecked(0); + ui->checkBoxAutoCount->hide(); + flagCount = 0; + ui->lineEditCNT->hide(); + ui->labelVarInc->hide(); + ui->lineEditVarInc->hide(); + ui->lineEditIn2->hide(); + ui->label_4->hide(); + ui->label_3->hide(); + } + else { + ui->checkBoxAutoCount->show(); + ui->lineEditCNT->show(); + ui->labelVarInc->show(); + ui->lineEditIn2->show(); + ui->label_4->show(); + ui->lineEditVarInc->show(); + ui->label_3->show(); + flagCount =1; + } +} + +void dlgQrCode::setSysPara(SysPara * sysPara) +{ + this->sysPara = sysPara; +} + +void dlgQrCode::drawingVersionQRCode(QString str){ + ui->lineEditIn->setText(str); + emit on_pushBtnPreView_pressed(); + emit on_pushBtnSave_pressed(); +} diff --git a/dlgQrCode.h b/dlgQrCode.h new file mode 100644 index 0000000..632e53b --- /dev/null +++ b/dlgQrCode.h @@ -0,0 +1,65 @@ +#ifndef DLGQRCODE_H +#define DLGQRCODE_H + +#include +#include "QtQREnCode/qrencode.h" +#include "QGraphicsScene" +#include "QGraphicsPixmapItem" +#include "SysPara.h" + +namespace Ui { + class dlgQrCode; +} + +class dlgQrCode : public QDialog +{ + Q_OBJECT + +public: + explicit dlgQrCode(QWidget *parent = 0); + ~dlgQrCode(); + //dlgQrCode(qrOption_t *qrOption); + + int bcWidth,bcHeight; + unsigned char flagInsert:1; + unsigned char flagCount:1; + unsigned char AutoCount11:1; + unsigned char barCodeFlag:1; //明码标志 + unsigned char NNNCC:5; + QString pictureName; + int QRCntNum; + void SetOption(qrOption_t *qrOption); + void GetOption(qrOption_t *qrOption); + void extSetText(QString text, bool flag = false); + QString TextToQRImg(qrOption_t *qrVar); + int getDat(SysPara * sysPara,int varNum); + unsigned long counter; + + void setCntCheckBoxHide(bool hideEn); + QString getCounterText( int counter,int QRCntNum); + void MatrixEnCode(unsigned char *intext,int Size); + void setSysPara(SysPara * sysPara); + void drawingVersionQRCode(QString); + +public slots: + void onTextChanged(); +signals: + void onQRCodeCloseNow(); + +private slots: + void onQRCodeAuto(bool); + void on_pushBtnPreView_pressed(); + void on_pushBtnClose_pressed(); + void on_pushBtnSave_pressed(); + void onComboBoxType(int); +private: + void ShowQRCode(QImage *img); + QGraphicsScene *scene;//声明scene + QGraphicsPixmapItem *item;//声明item + qrOption_t *qrOption; + bool AutoRefresh; + Ui::dlgQrCode *ui; + SysPara * sysPara; +}; + +#endif // DLGQRCODE_H diff --git a/dlgQrCode.ui b/dlgQrCode.ui new file mode 100644 index 0000000..2dc2957 --- /dev/null +++ b/dlgQrCode.ui @@ -0,0 +1,353 @@ + + + dlgQrCode + + + + 0 + 0 + 560 + 300 + + + + Qt::StrongFocus + + + Qt::NoContextMenu + + + Dialog + + + + :/icon/bypm.png:/icon/bypm.png + + + false + + + + + + + + + + + 120 + 0 + + + + 返回 + + + + + + + + DataMatrix + + + + + QRCode + + + + + + + + 保存 + + + + + + + 预览 + + + + + + + + 正相打印 + + + + + 反相打印 + + + + + + + + + + + 120 + 16777215 + + + + 变量增量 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 80 + 16777215 + + + + Qt::ImhDigitsOnly + + + 4 + + + + + + + + + + + + + + + 信息前缀 + + + + + + + + + + 80 + 16777215 + + + + Qt::ImhDigitsOnly + + + 10 + + + + + + + 变量(初值) + + + + + + + 80 + + + + + + + 100 + + + + + + + + + 信息后缀 + + + + + + + + + + + + + TextLabel + + + + + + + 计数器(变量) + + + + + + + 自动刷新 + + + + + + + 插入文档 + + + + + + + + 120 + 0 + + + + + 160 + 16777215 + + + + TextLabel + + + + + + + + + false + + + 200 + + + true + + + + + + + + 16777215 + 600 + + + + + + + + + 0 + 0 + + + + 条形码 + + + + + + + + 0 + 0 + + + + + 默认 + + + + + 8 x 18 + + + + + 8 x 32 + + + + + 12 x 26 + + + + + 12 x 36 + + + + + 16 x 36 + + + + + 16 x 48 + + + + + + + + DM码尺寸: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + 自动插入时间 + + + + + + + + + + + + diff --git a/dlgdrawinit.cpp b/dlgdrawinit.cpp new file mode 100644 index 0000000..c9bef93 --- /dev/null +++ b/dlgdrawinit.cpp @@ -0,0 +1,37 @@ +#include "dlgdrawinit.h" +#include "ui_dlgdrawinit.h" +#include "MyInputMethod.h" +dlgDrawInit::dlgDrawInit(QWidget *parent) : + QDialog(parent), + ui(new Ui::dlgDrawInit) +{ + ui->setupUi(this); +} + +dlgDrawInit::~dlgDrawInit() +{ + delete ui; +} + +int dlgDrawInit::getWidth(){ + return ui->spinBoxWidth->value(); +} + +int dlgDrawInit::getHeight(){ + return ui->spinBoxHeight->value(); +} + +int dlgDrawInit::setWidth(int w){ + ui->spinBoxWidth->setValue(w); + return w; +} +int dlgDrawInit::setHeight(int h){ + ui->spinBoxHeight->setValue(h); + return h; +} +void dlgDrawInit::on_pushButtonOK_pressed() +{ + +emit dlgDrawOK(); + +} diff --git a/dlgdrawinit.h b/dlgdrawinit.h new file mode 100644 index 0000000..90fa7c8 --- /dev/null +++ b/dlgdrawinit.h @@ -0,0 +1,31 @@ +#ifndef DLGDRAWINIT_H +#define DLGDRAWINIT_H +#include +#include +#include "MyInputMethod.h" + +namespace Ui { + class dlgDrawInit; +} + +class dlgDrawInit : public QDialog +{ + Q_OBJECT + +public: + explicit dlgDrawInit(QWidget *parent = 0); + ~dlgDrawInit(); + + int getWidth(); + int getHeight(); + int setWidth(int w); + int setHeight(int h); +public slots: + void on_pushButtonOK_pressed(); +Q_SIGNALS: + void dlgDrawOK(); +private: + Ui::dlgDrawInit *ui; +}; + +#endif // DLGDRAWINIT_H diff --git a/dlgdrawinit.ui b/dlgdrawinit.ui new file mode 100644 index 0000000..b194894 --- /dev/null +++ b/dlgdrawinit.ui @@ -0,0 +1,73 @@ + + + dlgDrawInit + + + + 0 + 0 + 318 + 186 + + + + Qt::StrongFocus + + + 图案参数设置 + + + + + 50 + 30 + 214 + 87 + + + + + + + + + + + + + 图案宽度(像素) + + + + + + + 图案高度(像素) + + + + + + + + + 180 + 130 + 80 + 35 + + + + + 0 + 35 + + + + 确定 + + + + + + diff --git a/dlginputaddr.cpp b/dlginputaddr.cpp new file mode 100644 index 0000000..da83714 --- /dev/null +++ b/dlginputaddr.cpp @@ -0,0 +1,847 @@ +#include "dlginputaddr.h" +#include "ui_dlginputaddr.h" +#include +#include +#include +#include +#include +#include +#include +#include "qnamespace.h" +#include +#include +// 修改超级密码,一周一变,增加校验码,且顺序改为 123C4DD +#define MAC_FILE_PATH "/home/plg/conf/mac.bin" + +DlgInputAddr::DlgInputAddr(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgInputAddr) +{ + ui->setupUi(this); + connect(this,SIGNAL(changePowerCnt(QString )),ui->labPowerMinuteCnt,SLOT(setText(QString))); + connect(this,SIGNAL(changePrintCnt(QString )),ui->labPrintDotCnt,SLOT(setText(QString))); + curDate =QDate::currentDate(); + QDate curDate1; + curDate1.setDate(2017,11,13); + if(curDatelineEdit->setValidator(new QIntValidator(100000, 999999, this)); + ui->superNodeIp3->setValidator(new QIntValidator(1, 255, this)); + ui->superNodeIp2->setValidator(new QIntValidator(0, 255, this)); + ui->superNodeIp1->setValidator(new QIntValidator(0, 255, this)); + ui->superNodeIp0->setValidator(new QIntValidator(1, 255, this)); + + ui->edgeIp3->setValidator(new QIntValidator(1, 255, this)); + ui->edgeIp2->setValidator(new QIntValidator(0, 255, this)); + ui->edgeIp1->setValidator(new QIntValidator(0, 255, this)); + ui->edgeIp0->setValidator(new QIntValidator(1, 255, this)); + repairTimeLess = 0; + //ui->lineEditLanIP->setInputMask("119.23.201.56"); + //ui->lineEditLanMask->setInputMask("10.0.0.11"); + adjustSize(); +#else + ui->superNodeIP->close(); + ui->superNodeIp3->close(); + ui->superNodeIp2->close(); + ui->superNodeIp1->close(); + ui->superNodeIp0->close(); + ui->edgeIP->close(); + ui->edgeIp3->close(); + ui->edgeIp2->close(); + ui->edgeIp1->close(); + ui->edgeIp0->close(); + adjustSize(); +#endif +} + + +DlgInputAddr::~DlgInputAddr() +{ + delete ui; +} + +void DlgInputAddr::SetAddr() +{ + jd.addr = ui->lineEdit->text().toInt(0,10); + if(jd.addr < 100001 || jd.addr > 999999) jd.addr = 100001; + + //QStringList superNodeIpList = ui->superNodeIpEdit->text().split("."); + quint8 ip3 = ui->superNodeIp3->text().toInt(0,10); + quint8 ip2 = ui->superNodeIp2->text().toInt(0,10); + quint8 ip1 = ui->superNodeIp1->text().toInt(0,10); + quint8 ip0 = ui->superNodeIp0->text().toInt(0,10); + jd.superNodeIp = (ip3<<24) + (ip2<<16) + (ip1<<8) + ip0; + + ip3 = ui->edgeIp3->text().toInt(0,10); + ip2 = ui->edgeIp2->text().toInt(0,10); + ip1 = ui->edgeIp1->text().toInt(0,10); + ip0 = ui->edgeIp0->text().toInt(0,10); + jd.edgeIp = (ip3<<24) + (ip2<<16) + (ip1<<8) + ip0; + + SaveJm(); + SaveAddrBackup(); +} +void DlgInputAddr::vpnConnect() +{ + QStringList edgeArgList; + //QProcess edge + //edge -d n2n0 -c vernonbach -k encryptvb -a 10.0.0.11 -l xxx.xxx.xxx.xxx:1000 >/dev/null & + edgeArgList<<"-d"<<"n2n0"; + edgeArgList<<"-c"<<"vernonbach"; + edgeArgList<<"-k"<<"encryptvb"; + edgeArgList<<"-a"<>24)&0xFF).arg((jd.edgeIp>>16)&0xFF).arg((jd.edgeIp>>8)&0xFF).arg((jd.edgeIp)&0xFF); + edgeArgList<<"-l"<>24)&0xFF).arg((jd.superNodeIp>>16)&0xFF).arg((jd.superNodeIp>>8)&0xFF).arg((jd.superNodeIp)&0xFF); + edgeArgList<<">/dev/null &"; + QProcess::startDetached("edge",edgeArgList); +} + +QString DlgInputAddr::GetAddr() +{ + ReadJm(); + return ui->lineEdit->text(); +} + +void DlgInputAddr::SaveJm() +{ + QFile file("/lib/syst"); +// QFile Macfile(MAC_FILE_PATH); + + if (file.isOpen()) { + file.close(); + } + +/* if (Macfile.isOpen()) { + file.close(); + }*/ + jdDataRwLock.lockForWrite(); + if(!file.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + QMessageBox::warning(0,"警告",QString("无法打开文件 1") ); + } + else { + file.seek(0); + //file.write((char *)&jd.addr,(long long int)sizeof(jd)); + file.write((char *)&jd,(qint64)sizeof(jd)); +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); + } + /////// +/* if(!Macfile.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + //QMessageBox::warning(0,"警告",QString("无法打开文件:mac.bin") ); + } + else { + Macfile.seek(0); + //file.write((char *)&jd.addr,(long long int)sizeof(jd)); + Macfile.write((char *)&jd.addr,(qint64)sizeof(jd.addr)); +#if 1 + fsync(Macfile.handle()); +#endif + Macfile.close(); + }*/ + jdDataRwLock.unlock(); +} + +void DlgInputAddr::ReadJm() +{ + QFile file("/lib/syst"); + QFile Macfile(MAC_FILE_PATH); + unsigned int addr; + + if(!Macfile.exists()) + { + if(!Macfile.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + QMessageBox::warning(0,"警告",QString("无法打开文件:mac.bin") ); + } + } + + if(!file.exists()) + { + if(!file.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + QMessageBox::warning(0,"警告",QString("无法打开文件") ); + } + else { + file.close(); + ResetJm(); + show(); + } + } + else { + if (file.isOpen()) { + file.close(); + } + jdDataRwLock.lockForRead(); + if(!file.open(QIODevice::ReadOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + QMessageBox::warning(0,"警告",QString("无法打开文件") ); + } + else { + file.seek(0); + //file.read((char *)&jd.addr,(long long int)sizeof(jd)); + file.read((char *)&jd,(qint64)sizeof(jd)); + file.close(); + } +//////////////////// + if (Macfile.isOpen()) { + Macfile.close(); + } + //jdDataRwLock.lockForRead(); + if(!Macfile.open(QIODevice::ReadOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + //QMessageBox::warning(0,"警告",QString("无法打开文件") ); + } + else { + Macfile.seek(0); + //file.read((char *)&jd.addr,(long long int)sizeof(jd)); + Macfile.read((char *)&addr,(qint64)sizeof(addr)); + Macfile.close(); + } + + jdDataRwLock.unlock(); + } + if((jd.addr != addr) && (addr >= 100001 && addr <= 999999)){ + jd.addr = addr; + SaveJm(); + } + ui->lineEdit->setText(QString().sprintf("%06d",jd.addr) ); + ui->labPowerMax->setText(QString("%1").arg(jd.powerMinuteMax)); + ui->labPrintMax->setText(QString("%1").arg(jd.printMax)); + ui->labPowerMinuteCnt->setText(QString("%1").arg(jd.powerMinuteCnt)); + ui->labPrintDotCnt->setText(QString("%1").arg(jd.printCnt)); + ui->EditStartTime->setText(QString("%1").arg(jd.start)); + ui->EditEndTime->setText(QString("%1").arg(jd.end)); + + //qDebug()<<"jd.superNodeIp"<superNodeIp3->setText(QString::number((jd.superNodeIp>>24)&0xFF)); + ui->superNodeIp2->setText(QString::number((jd.superNodeIp>>16)&0xFF)); + ui->superNodeIp1->setText(QString::number((jd.superNodeIp>>8)&0xFF)); + ui->superNodeIp0->setText(QString::number((jd.superNodeIp)&0xFF)); + + ui->edgeIp3->setText(QString::number((jd.edgeIp>>24)&0xFF)); + ui->edgeIp2->setText(QString::number((jd.edgeIp>>16)&0xFF)); + ui->edgeIp1->setText(QString::number((jd.edgeIp>>8)&0xFF)); + ui->edgeIp0->setText(QString::number((jd.edgeIp)&0xFF)); + //ui->lineEditLanIP->setInputMask("119.23.201.56"); + +} + +void DlgInputAddr::setNodeIpAndPrivateIp(bool bNodeIpSetDone) +{ + ui->label->setVisible(bNodeIpSetDone); + ui->lineEdit->setEnabled(bNodeIpSetDone); + ui->lineEdit->setVisible(bNodeIpSetDone); + ui->label_2->setVisible(bNodeIpSetDone); + ui->EditStartTime->setEnabled(bNodeIpSetDone); + ui->EditStartTime->setVisible(bNodeIpSetDone); + ui->label_3->setVisible(bNodeIpSetDone); + ui->EditEndTime->setEnabled(bNodeIpSetDone); + ui->EditEndTime->setVisible(bNodeIpSetDone); + + ui->horizontalLayout->setEnabled(bNodeIpSetDone); + ui->labPowerMinuteCnt->setVisible(bNodeIpSetDone); + ui->labPowerMax->setVisible(bNodeIpSetDone); + ui->labPrintDotCnt->setVisible(bNodeIpSetDone); + ui->labPrintMax->setVisible(bNodeIpSetDone); + ui->line->setVisible(bNodeIpSetDone); + ui->line_2->setVisible(bNodeIpSetDone); + ui->line_3->setVisible(bNodeIpSetDone); + //adjustSize(); +} + +void DlgInputAddr::on_buttonBox_clicked(QAbstractButton *button) +{ + //QMessageBox::warning(0,"警告",QString("无法打开文件 3") ); + if(ui->buttonBox->button(QDialogButtonBox::Ok) == button) //判断按下的是否为"确定”按钮 + { + if(!ui->lineEdit->text().isEmpty()) //判断lineEdit是否为空,不为空返回0 + { + SetAddr(); + vpnConnect(); + emit changeMac(QString(" Mac:%1").arg(jd.addr)); + } + } + setNodeIpAndPrivateIp(true); + //else if(button == ui->buttonBox->button((QDialogButtonBox::Cancel))) + // ui->lineEdit->setText("001002"); +} +#define XXXX + +char DlgInputAddr::isEnabled()// check where is enable?10秒钟1次 +{ + char res=0; + static int cnt=0; + static char changTimeCnt=0; + + curDate =QDate::currentDate(); + unsigned int ndate = curDate.toString("yyyyMMdd").toInt(0,10); + + if(cnt<5) + { + cnt++; + if((jd.workout && jd.nDate<=jd.start) && ndate>=jd.start && ndate< jd.end ) + { + jd.nDate = ndate; + jd.workout =0; + SaveJm(); +// qDebug()<ndate ) { + res |=(1<<2); + if( jd.workout==0) + { + jd.nDate = ndate; + jd.workout =1; + SaveJm(); +// qDebug()<jd.end ) + { +// QString jdEnd = QString::number(jd.end); + +// QDateTime currentTime = QDateTime::currentDateTime(); +// QDateTime endTime = QDateTime::fromString(jdEnd, "yyyyMMdd"); +//// qDebug() << "currentTime.toTime_t()" << currentTime.toTime_t(); +//// qDebug() << "endTime.toTime_t(" << endTime.toTime_t(); + +// repairTimeLess = (endTime.toTime_t() - currentTime.toTime_t()) / (60*60); + + emit printErrorStatus(QString(tr("Mac:%1维护时间剩余")+"%2").arg(jd.addr).arg(repairTimeLess)+tr("小时,喷码机将停止工作.请与供应商联系!"),2); + } + + //qDebug()<3) + { + changTimeCnt=0; + QTime time1= QTime::currentTime(); + //qDebug()<=jd.end); + else { + // jd.nDate = ndate; + // SaveJm(); + //qDebug()< +void adjustdate1(int year, int mon, int mday, int hour, int min, int sec) { + time_t t; + struct tm nowtime; + nowtime.tm_sec = sec; // Seconds.[0-60] (1 leap second) + nowtime.tm_min = min; // Minutes.[0-59] + nowtime.tm_hour = hour; // Hours. [0-23] + nowtime.tm_mday = mday; // Day.[1-31] + nowtime.tm_mon = mon - 1; // Month. [0-11] + nowtime.tm_year = year - 1900; // Year- 1900. + nowtime.tm_isdst = -1; // DST.[-1/0/1] + t = mktime(&nowtime); + // qDebug()< +#include /*用到time函数和gmtime函数。*/ + +int getWeekNumber() +{ + int nweek = 0; + int wd = 0; + time_t t; /*声明time_t结构体 t 。*/ + struct tm *ptr; /*声明tm结构体指针。*/ + + time(&t); /*初始化time_t结构体t 。*/ + ptr = gmtime(&t); /*获得已初始化的tm结构体。*/ + nweek = ptr->tm_yday / 7 + 1; /*以1月1日那周为第1周。*/ + wd = ptr->tm_wday; /*算出今天是星期几。*/ + if (wd - ptr->tm_yday % 7 < 0)/*表示是新的一周。*/ + { + nweek++; + } + //printf("从1月1日算起今周是第 %d 周。\n", nweek); + + return nweek; +} +// 一时一变 +unsigned char DlgInputAddr::checkSupperInit(QString str) +{ + QString s; + QDate curDate; + curDate =QDate::currentDate(); + QTime curTime; + curTime = QTime::currentTime(); +// check crc + //s.sprintf("%04d%02d", curDate.year(), curDate.month()); + s.sprintf("%04d%02d", curDate.year(), getWeekNumber()+curDate.day()+curTime.hour()); + unsigned long m,n; + + m= str.toLong(0,10); + n= mb_crc2(s,0xa061); + s.sprintf("%06ld",n*100+ (m%100)); + //qDebug()<>=1; + crc^=m; // + } + else crc>>=1; + } + } + return(crc ); +} + + +void DlgInputAddr::enCodeMsh(QString s) +{ + + +} + +void DlgInputAddr::SaveAddrBackup() +{ + QFile Macfile(MAC_FILE_PATH); + if (Macfile.isOpen()) { + Macfile.close(); + } + jdDataRwLock.lockForWrite(); + if(!Macfile.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + //QMessageBox::warning(0,"警告",QString("无法打开文件:mac.bin") ); + } + else { + Macfile.seek(0); + Macfile.write((char *)&jd,(qint64)sizeof(jd)); +#if 1 + fsync(Macfile.handle()); +#endif + Macfile.close(); + } + jdDataRwLock.unlock(); +} diff --git a/dlginputaddr.h b/dlginputaddr.h new file mode 100644 index 0000000..0168276 --- /dev/null +++ b/dlginputaddr.h @@ -0,0 +1,84 @@ +#ifndef DLGINPUTADDR_H +#define DLGINPUTADDR_H +#include +#include "myinclude.h" +#include +#include +#include + +#include +typedef struct { // 28B + unsigned int addr; + unsigned char enable; //1Byte + unsigned char validity; // 1Byte + unsigned char powerEn; // 1Byte + unsigned char printEn; // 1Byte + + unsigned int powerMinuteMax; + unsigned int powerMinuteCnt; + unsigned int printMax; + unsigned int printCnt; // printDot/1024 + + unsigned int start;// yyyymmdd + unsigned int end; // yyyymmdd + unsigned int nDate; + unsigned int workout; + unsigned int nc; + unsigned int superNodeIp; + unsigned int edgeIp; +}JMDATA; + +namespace Ui { + class DlgInputAddr; +} + +class DlgInputAddr : public QDialog +{ + Q_OBJECT + +public: + explicit DlgInputAddr(QWidget *parent = 0); + ~DlgInputAddr(); + + void SetAddr(); + QString GetAddr(); + void vpnConnect(); + void SaveJm(); + void ReadJm(); + void SaveAddrBackup(); + void workcnt(); + char isEnabled(); + void ResetJm(); + JMDATA jd; + void SetNewJm(unsigned int validity); + unsigned char checWhJmDate(QString s );// 日期维护 + unsigned char checWhJm(QString s );// 维护 + unsigned char checWhJmOLD(QString s );// 维护1 + unsigned char checkSupperJm(QString s );// 超级 + unsigned char checkSupperJmOLD(QString s );// 超级1 + void enCodeMsh(QString s );// 墨水 + unsigned char checkSysJm(QString str); + unsigned long mb_crc2(QString str, unsigned int x); + unsigned int mb_crc1(QString s, unsigned int m); + unsigned int enValidity(unsigned long m,unsigned int xx); + void CheckDate(); + unsigned char checkSupperInit(QString str); + void setNodeIpAndPrivateIp(bool bNodeIpSetDone); + unsigned int repairTimeLess; +private slots: + void on_buttonBox_clicked(QAbstractButton *button); + void setTime(int year, int mon, int mday, int hour, int min, int sec); + +Q_SIGNALS: + void changePowerCnt(QString ); + void changePrintCnt(QString ); + void dateError(QString); + void printErrorStatus(QString,unsigned int); + void changeMac(QString); +private: + Ui::DlgInputAddr *ui; + QDate curDate; + QReadWriteLock jdDataRwLock; +}; + +#endif // DLGINPUTADDR_H diff --git a/dlginputaddr.ui b/dlginputaddr.ui new file mode 100644 index 0000000..d016f7f --- /dev/null +++ b/dlginputaddr.ui @@ -0,0 +1,290 @@ + + + DlgInputAddr + + + + 0 + 0 + 319 + 297 + + + + Dialog + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::ImhNone + + + 6 + + + + + + + 请输入6位机编号(前3位为经销商编号) + + + + + + + + + PowerOnCnt + + + + + + + Qt::Vertical + + + + + + + PrintDotCnt + + + + + + + Qt::Vertical + + + + + + + PowerMax + + + + + + + Qt::Vertical + + + + + + + PrintMax + + + + + + + + + + + 开始时间 + + + + + + + true + + + + + + + 结束时间 + + + + + + + true + + + + + + + + + SuperNodeIP: + + + + + + + edgeIP: + + + + + + + + + 3 + + + + + + + . + + + + + + + 3 + + + + + + + . + + + + + + + 3 + + + + + + + . + + + + + + + 3 + + + + + + + + + + + 3 + + + + + + + . + + + + + + + 3 + + + + + + + . + + + + + + + 3 + + + + + + + . + + + + + + + 3 + + + + + + + + + + + + + buttonBox + accepted() + DlgInputAddr + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DlgInputAddr + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dlgmutilanguage.cpp b/dlgmutilanguage.cpp new file mode 100644 index 0000000..c0c00de --- /dev/null +++ b/dlgmutilanguage.cpp @@ -0,0 +1,135 @@ +#include "dlgmutilanguage.h" +#include "ui_dlgmutilanguage.h" +#include "InputMethod.h" +#include +#include + +DlgMutiLanguage::DlgMutiLanguage(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgMutiLanguage) +{ + ui->setupUi(this); +// ui->listWidget->hide(); + connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(SetNewLanguage())); + LangIndex=INPUT_METHOD_TYPE_CHINESE; +} + +DlgMutiLanguage::~DlgMutiLanguage() +{ + delete ui; +} + +void DlgMutiLanguage::setCurrentLanguage(){ + + if(LangIndex==INPUT_METHOD_TYPE_ENGLISH) ui->radioButton_2->setChecked(true); + else if(LangIndex==INPUT_METHOD_TYPE_CHINESE) ui->radioButton->setChecked(true); + else if(LangIndex==INPUT_METHOD_TYPE_VIETNAM) ui->radioButton_3->setChecked(true); + //else if(LangIndex==INPUT_METHOD_TYPE_RUSSIAN) ui->radioButton_4->setChecked(true); + //else if(LangIndex==INPUT_METHOD_TYPE_JAPANESE) ui->radioButton_5->setChecked(true); + //else if(LangIndex==INPUT_METHOD_TYPE_KOREAN) ui->radioButton_6->setChecked(true); + else ui->radioButton->setChecked(true); + +} + +int DlgMutiLanguage::getCurrentLanguage(){ +// LangIndex = INPUT_METHOD_TYPE_CHINESE; +// if(ui->radioButton_2->isChecked()) { +// LangIndex = INPUT_METHOD_TYPE_ENGLISH; +// QMessageBox::information(this,tr("提示"),tr("重启后切换到英文界面")); +// buf.append("English\r\n"); +// buf.append("WINPY_utf8.txt\r\n"); +// } +// else if(ui->radioButton_3->isChecked()) { +// LangIndex = INPUT_METHOD_TYPE_VIETNAM; +// QMessageBox::information(this,tr("提示"),tr("重启后切换到越南语界面")); +// buf.append("Vietnamese\r\n"); +// buf.append("YN_utf8.txt\r\n"); +// } +// /*else if(ui->radioButton->isChecked()) { + +// } +// else if(ui->radioButton->isChecked()) { + +// } +// else if(ui->radioButton->isChecked()) { + +// }*/ +// else { +// QMessageBox::information(this,tr("提示"),tr("重启后切换到中文界面")); +// buf.append("Chinese\r\n"); +// buf.append("WINPY_utf8.txt\r\n"); +// } + return LangIndex; +} +void DlgMutiLanguage::SetNewLanguage(){ + + LangIndex = INPUT_METHOD_TYPE_CHINESE; + + QFile file("/home/plg/UseEn"); + +// QMessageBox::StandardButton ret; +// ret = QMessageBox::information(this, tr("警告"), +// tr("确定要切换显示语言吗?\r\n(重启才能生效)"), +// QMessageBox::Ok | QMessageBox::Cancel); +// if (ret != QMessageBox::Ok){ +// return; +// } + QByteArray buf; + buf.clear(); + + if(file.open(QIODevice::ReadWrite)) {//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + + + if(ui->radioButton_2->isChecked()) { + LangIndex = INPUT_METHOD_TYPE_ENGLISH; + buf.append("English\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + else if(ui->radioButton_3->isChecked()) { + LangIndex = INPUT_METHOD_TYPE_VIETNAM; + buf.append("Turkish\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + else if(ui->radioButton_4->isChecked()) { + LangIndex = INPUT_METHOD_TYPE_SPANISH; + buf.append("Spanish\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + else if(ui->radioButton_5->isChecked()) { + LangIndex = INPUT_METHOD_TYPE_THAI; + buf.append("Thai\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + else if(ui->radioButton_6->isChecked()) { + LangIndex = INPUT_METHOD_TYPE_VIETNAM; + buf.append("Vietnamese\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + else if(ui->radioButton_7->isChecked()) { + LangIndex = INPUT_METHOD_TYPE_Farsi; + buf.append("Farsi\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + /*else if(ui->radioButton->isChecked()) { + + } + else if(ui->radioButton->isChecked()) { + + } + else if(ui->radioButton->isChecked()) { + + }*/ + else { + //QMessageBox::information(this,tr("提示"),tr("重启后切换到中文界面")); + buf.append("Chinese\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + file.write(buf); +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) + #if 1 + fsync(file.handle()); +#endif + file.close(); + + } +} diff --git a/dlgmutilanguage.h b/dlgmutilanguage.h new file mode 100644 index 0000000..35abb4e --- /dev/null +++ b/dlgmutilanguage.h @@ -0,0 +1,28 @@ +#ifndef DLGMUTILANGUAGE_H +#define DLGMUTILANGUAGE_H + +#include + +namespace Ui { + class DlgMutiLanguage; +} + +class DlgMutiLanguage : public QDialog +{ + Q_OBJECT + +public: + explicit DlgMutiLanguage(QWidget *parent = 0); + ~DlgMutiLanguage(); + + void setCurrentLanguage(); + int getCurrentLanguage(); + int LangIndex; +public slots: + void SetNewLanguage(); +private: + Ui::DlgMutiLanguage *ui; + +}; + +#endif // DLGMUTILANGUAGE_H diff --git a/dlgmutilanguage.ui b/dlgmutilanguage.ui new file mode 100644 index 0000000..155a355 --- /dev/null +++ b/dlgmutilanguage.ui @@ -0,0 +1,154 @@ + + + DlgMutiLanguage + + + + 0 + 0 + 376 + 328 + + + + 界面语言设置 + + + + :/icon/TEXT.PNG:/icon/TEXT.PNG + + + + + 110 + 280 + 221 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 60 + 20 + 271 + 213 + + + + + + + 中文 + + + + + + + 越南语 + + + + + + + true + + + 土耳其语 + + + + + + + 泰语 + + + + + + + 西班牙语 + + + + + + + true + + + 英语 + + + + + + + 波斯语 + + + + + + + + + 20 + 250 + 331 + 20 + + + + (注意: 选择切换显示语言, 重启后才能生效) + + + + + + + + + buttonBox + accepted() + DlgMutiLanguage + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DlgMutiLanguage + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dlgmywarring.cpp b/dlgmywarring.cpp new file mode 100644 index 0000000..ec31db1 --- /dev/null +++ b/dlgmywarring.cpp @@ -0,0 +1,34 @@ +#include "dlgmywarring.h" +#include "ui_dlgmywarring.h" + +DlgMyWarring::DlgMyWarring(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgMyWarring) +{ + ui->setupUi(this); + connect(ui->pushButtonOK,SIGNAL(pressed()),this,SLOT(pushButtonPressed())); + QFont font; + font.setFamily("wenquanyi"); + font.setPixelSize(24); + ui->labelTitle->setFont(font); +} + +DlgMyWarring::~DlgMyWarring() +{ + delete ui; +} + +void DlgMyWarring::SetWarringText(QString txt){ + ui->label->setText(txt); + +} + +void DlgMyWarring::SetTitleText(QString txt){ + + ui->labelTitle->setText(txt); + +} + +void DlgMyWarring::pushButtonPressed(){ + DlgMyWarring::hide(); +} diff --git a/dlgmywarring.h b/dlgmywarring.h new file mode 100644 index 0000000..9415bb5 --- /dev/null +++ b/dlgmywarring.h @@ -0,0 +1,26 @@ +#ifndef DLGMYWARRING_H +#define DLGMYWARRING_H + +#include + +namespace Ui { + class DlgMyWarring; +} + +class DlgMyWarring : public QDialog +{ + Q_OBJECT + +public: + explicit DlgMyWarring(QWidget *parent = 0); + ~DlgMyWarring(); + + void SetWarringText(QString txt); + void SetTitleText(QString txt); +public slots: + void pushButtonPressed(); +private: + Ui::DlgMyWarring *ui; +}; + +#endif // DLGMYWARRING_H diff --git a/dlgmywarring.ui b/dlgmywarring.ui new file mode 100644 index 0000000..baf08ae --- /dev/null +++ b/dlgmywarring.ui @@ -0,0 +1,166 @@ + + + DlgMyWarring + + + + 0 + 0 + 464 + 213 + + + + 警告 + + + + :/icon/a9.ico:/icon/a9.ico + + + + + 20 + 40 + 431 + 111 + + + + + + + + + 0 + 85 + 255 + + + + + + + + + 0 + 85 + 255 + + + + + + + + + 150 + 147 + 140 + + + + + + + + + 12 + + + + 5 + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + 0 + + + + + + 310 + 170 + 93 + 27 + + + + 确定 + + + + + + 10 + 10 + 441 + 31 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 150 + 147 + 140 + + + + + + + + + 16 + + + + TextLabel + + + Qt::AlignCenter + + + true + + + + + + + + diff --git a/dlgselectinputlanguage.cpp b/dlgselectinputlanguage.cpp new file mode 100644 index 0000000..d2a2b48 --- /dev/null +++ b/dlgselectinputlanguage.cpp @@ -0,0 +1,33 @@ +#include "dlgselectinputlanguage.h" +#include "ui_dlgselectinputlanguage.h" + +DlgSelectInputLanguage::DlgSelectInputLanguage(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgSelectInputLanguage) +{ + ui->setupUi(this); + selectIndex = 0; + connect(ui->radioButtonChinese,SIGNAL(clicked(bool)),this,SLOT(selectChanged1(bool))); + connect(ui->radioButtonEnglish,SIGNAL(clicked(bool)),this,SLOT(selectChanged2(bool))); + connect(ui->radioButtonVietnam,SIGNAL(clicked(bool)),this,SLOT(selectChanged3(bool))); + +} + +DlgSelectInputLanguage::~DlgSelectInputLanguage() +{ + delete ui; +} + +void DlgSelectInputLanguage::selectChanged1(bool ok){ + selectIndex=1; + hide(); +} +void DlgSelectInputLanguage::selectChanged2(bool ok){ + selectIndex=0; + hide(); +} + +void DlgSelectInputLanguage::selectChanged3(bool ok){ + selectIndex=2; + hide(); +} diff --git a/dlgselectinputlanguage.h b/dlgselectinputlanguage.h new file mode 100644 index 0000000..787926f --- /dev/null +++ b/dlgselectinputlanguage.h @@ -0,0 +1,28 @@ +#ifndef DLGSELECTINPUTLANGUAGE_H +#define DLGSELECTINPUTLANGUAGE_H + +#include + +namespace Ui { + class DlgSelectInputLanguage; +} + +class DlgSelectInputLanguage : public QDialog +{ + Q_OBJECT + +public: + explicit DlgSelectInputLanguage(QWidget *parent = 0); + ~DlgSelectInputLanguage(); + int selectIndex; + +public slots: + + void selectChanged1(bool ok); + void selectChanged2(bool ok); + void selectChanged3(bool ok); +private: + Ui::DlgSelectInputLanguage *ui; +}; + +#endif // DLGSELECTINPUTLANGUAGE_H diff --git a/dlgselectinputlanguage.ui b/dlgselectinputlanguage.ui new file mode 100644 index 0000000..0d745d7 --- /dev/null +++ b/dlgselectinputlanguage.ui @@ -0,0 +1,55 @@ + + + DlgSelectInputLanguage + + + + 0 + 0 + 291 + 162 + + + + Qt::StrongFocus + + + Dialog + + + + + 20 + 10 + 241 + 131 + + + + + + + 汉语(Chinese) + + + + + + + 英语(English) + + + + + + + 越南语(Vietnam) + + + + + + + + + diff --git a/dlgshowmsg.cpp b/dlgshowmsg.cpp new file mode 100644 index 0000000..5877490 --- /dev/null +++ b/dlgshowmsg.cpp @@ -0,0 +1,36 @@ +#include "dlgshowmsg.h" +#include "ui_dlgshowmsg.h" + +DlgShowMsg::DlgShowMsg(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgShowMsg) +{ + + ui->setupUi(this); + this->setToolTip("警告"); + connect(ui->pushButtonOK,SIGNAL(pressed()),this,SLOT(OnpushButtonOKPressed())); + this->hide(); + +} + +DlgShowMsg::~DlgShowMsg() +{ + delete ui; +} + + +void DlgShowMsg::hideMsg() +{ + ui->label->setText(""); + this->hide(); +} + +void DlgShowMsg::showMsg(QString txt){ + ui->label->setText(txt); + this->show(); +} + +void DlgShowMsg::OnpushButtonOKPressed(){ + ui->label->setText(""); + this->hide(); +} diff --git a/dlgshowmsg.h b/dlgshowmsg.h new file mode 100644 index 0000000..ff63fc2 --- /dev/null +++ b/dlgshowmsg.h @@ -0,0 +1,25 @@ +#ifndef DLGSHOWMSG_H +#define DLGSHOWMSG_H + +#include + +namespace Ui { + class DlgShowMsg; +} + +class DlgShowMsg : public QDialog +{ + Q_OBJECT + +public: + explicit DlgShowMsg(QWidget *parent = 0); + ~DlgShowMsg(); + void showMsg(QString txt); + void hideMsg(); +private slots: + void OnpushButtonOKPressed(); +private: + Ui::DlgShowMsg *ui; +}; + +#endif // DLGSHOWMSG_H diff --git a/dlgshowmsg.ui b/dlgshowmsg.ui new file mode 100644 index 0000000..819880d --- /dev/null +++ b/dlgshowmsg.ui @@ -0,0 +1,68 @@ + + + DlgShowMsg + + + + 0 + 0 + 298 + 91 + + + + 警告 + + + + + + + + + + + Qt::AlignCenter + + + + + + + 确定 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/dlgvarlength.cpp b/dlgvarlength.cpp new file mode 100644 index 0000000..b8f9513 --- /dev/null +++ b/dlgvarlength.cpp @@ -0,0 +1,44 @@ +#include "dlgvarlength.h" +#include "ui_dlgvarlength.h" + +DlgVarLength::DlgVarLength(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgVarLength) +{ + ui->setupUi(this); + connect(ui->pushButtonOK,SIGNAL(pressed()),this,SLOT(pushButtonOK_Pressed())); + + +} + +DlgVarLength::~DlgVarLength() +{ + delete ui; +} +void DlgVarLength::applyUI(int len) +{ + int tmp=len/2; + ui->spinHeadLen->setMaximum( tmp); + ui->spinEndLen->setMaximum( tmp); + + ui->spinHeadLen->setValue(headLen); + ui->spinEndLen->setValue(endLen); + ui->spinVarLen->setValue(varLen); + ui->spinVarLen1->setValue(varLen1); + ui->checkVarEN->setChecked(varEn); + ui->pushButtonOK->setFocus(); + //ui->lab_AllLength ->setText(QString().sprintf("%0.1f",len)); + ui->lineEditAllLen ->setText(QString().sprintf("%d",len)); +} + +void DlgVarLength::pushButtonOK_Pressed() +{ + headLen = ui->spinHeadLen->value(); + endLen = ui->spinEndLen->value(); + varLen = ui->spinVarLen->value(); + varLen1 = ui->spinVarLen1->value(); + varEn = ui->checkVarEN->isChecked(); + emit on_set(); + this->hide(); + +} diff --git a/dlgvarlength.h b/dlgvarlength.h new file mode 100644 index 0000000..28da5a2 --- /dev/null +++ b/dlgvarlength.h @@ -0,0 +1,32 @@ +#ifndef DLGVARLENGTH_H +#define DLGVARLENGTH_H + +#include + +namespace Ui { + class DlgVarLength; +} + +class DlgVarLength : public QDialog +{ + Q_OBJECT + +public: + explicit DlgVarLength(QWidget *parent = 0); + ~DlgVarLength(); + int headLen; + int endLen; + short varLen; + short varLen1; + bool varEn; + void applyUI(int len); + +public slots: + void pushButtonOK_Pressed(); +Q_SIGNALS: + void on_set(); +private: + Ui::DlgVarLength *ui; +}; + +#endif // DLGVARLENGTH_H diff --git a/dlgvarlength.ui b/dlgvarlength.ui new file mode 100644 index 0000000..d363408 --- /dev/null +++ b/dlgvarlength.ui @@ -0,0 +1,202 @@ + + + DlgVarLength + + + Qt::WindowModal + + + + 0 + 0 + 386 + 166 + + + + Qt::StrongFocus + + + 变长喷印参数 + + + + + + + + + 100 + 16777215 + + + + 头部长度(m) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 100 + 16777215 + + + + 尾部长度(m) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 100 + 16777215 + + + + 总长(m) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 9999 + + + + + + + 9999 + + + + + + + true + + + + 120 + 16777215 + + + + false + + + true + + + + + + + + 100 + 16777215 + + + + 调整长度(mm) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 60 + 0 + + + + -9999 + + + 9999 + + + + + + + + 100 + 16777215 + + + + 调整长度(mm) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 60 + 0 + + + + -9999 + + + 9999 + + + + + + + Qt::RightToLeft + + + 可变长度允许 + + + + + + + + 100 + 60 + + + + 确定 + + + true + + + + + + + + + + diff --git a/emergency b/emergency new file mode 100644 index 0000000000000000000000000000000000000000..d910a0141c7c17ffd9e5cac789499837c1bd85dc GIT binary patch literal 41521 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 literal 0 HcmV?d00001 diff --git a/english-0412-2OK.ts b/english-0412-2OK.ts new file mode 100644 index 0000000..6335cdb --- /dev/null +++ b/english-0412-2OK.ts @@ -0,0 +1,4100 @@ + + + +UTF-8 + + DacDisplayAndEdit + + + Form + + + + + 10 + + + + + 07 + + + + + 02 + + + + + 20 + + + + + 06 + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 30 + + + + + 00 + + + + + 墨点 + InkDot + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + + 默认值 + Default + + + + + 编辑 + Edit + + + + 是 + YES + + + + 否 + NO + + + + 完成 + OK + + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + + 提示 + Tips + + + + %1 + %1 + + + + DevOp + + 错误 + Error + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized! + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + + 变量2 + Counter 2 + + + + 数字个数 + Digit Number + + + + 3个 + 3 + + + + 6个 + 6 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + 4个像素 + 4 pixel + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DigitalInput + + 退格 + Backspace + + + 全选 + SelectAll + + + + DlgInputAddr + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + 开始时间 + StartDate + + + 结束时间 + EndDate + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + MainWindow + + + + + + 图案编辑 + PictureEdit + + + + 打印设置 + PrintSetup + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + + 信息编辑 + EditText + + + + 触发设置 + TriggerSetup + + + + + 系统管理 + SystemManage + + + + + 日志信息 + LogInfo + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + Self-checking started, please wait for 60 s...... + + + + 开始自检,请等待%1秒............... + Self-checking started, please wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + + 警告 + Warnning + + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + 英文 + English + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + ! + + + + 2 + @ + 1 {2?} + + + + 3 + # + 1 {3?} + + + + 4 + $ + 1 {4?} + + + + 5 + % + 1 {5?} + + + + 6 + ^ + 1 {6?} + + + + 7 + & + & + + + + 8 + * + 1 {8?} + + + + 9 + ( + 1 {9?} + + + + 0 + ) + 1 {0?} + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + ? + + + + 特殊字 + SpecialChar + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + 错误 + Error + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + 选择历史记录文件 + Choose record file + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Solvent +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + + 故障恢复 + FaultReset + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + + + + 开 + Collector +Open + + + + + + + 关 + Collector +Off + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, and turn collector and ink-jet off + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + + + 相位故障,准备关机 + + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + 错误 + Error + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + 暂停喷印............... + Pause printing... + + + + 停止打印 + Stop printing + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + + 打开回收槽 + Opening collector + + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + + 关闭回收槽 + Closing collector + + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + MyFileDialog + + + 确定 + Confirm + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + + 相检墨点: + Phase Detect Dot: + + + + 相检占空比(%) + PhaseDetectDuty + + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + Picture Edit + + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Insert +Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Insert +Piture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + + 字符 +光标 + Character +Cursor + + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 放弃保存 + Quit without save + + + + 另存为 + Save As + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + 快速 + Fast + + + + + + 标准 + Standard + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + + 慢速3 + Slow 3 + + + + + 慢速4 + Slow 4 + + + + + 慢速5 + Slow 5 + + + + + 慢速6 + Slow 6 + + + + + 慢速7 + Slow 7 + + + + + 慢速8 + Slow 8 + + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + + + 起始值: + StartValue: + + + + + + 结束值: + EndValue: + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + + 慢速 + Slowly + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 高级设置 + AdvancedSetting + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + + 速度: + Speed: + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + 重设值 + ResetCurrentCounter + + + + + 重复数: + RepeatTimes: + + + + + 当前值: + Current: + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + 系统维护设置成功! + Syster maintenance setting success ! + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + + 提升授权 + More authorized setting + + + + 取消授权 + Quit authorized setting + + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + + 回收泵 + Recycle Pump + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 更新字库 + UpdateFontLibrary + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + + + + + + + 开 + On + + + + + + + + + + + + 关 + Off + + + + + + + + + 警告 + Warnning + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + + + + 启动 + Start + + + + + + + + + + + + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + 错误 + Error + + + + 更新文件不存在! + Update file was not found! + + + + 是否确认备份系统文件? + Confirm to backup system file? + + + + 系统备份成功! + System backup suceess ! + + + + 备份操作失败! + Backup operation failed! + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 重置高压 + Reset High Voltage + + + + 应用当前配置 + Apply + + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + + 隔膜位置: + DiaphragmPosition: + + + + 混合阀管路: + MixingValvePiping: + + + + 旧管路 + OldPiping + + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + 最佳晶振电压完成 + Suitable voltage search done + + + + TextEditOption + + + Form + Form + + + + 新建 + NewFile + + + + + 另存为 + Save as + + + + 预览 + Preview + + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Insert +Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + 9 + 1 {9?} + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Application + Application + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + Trigger Mode + + + + 延时触发 + Time Delayed +Triggering + + + + 光电边沿触发 + Optical Edge +Triggering + + + + 光电电平触发 + Electrical Level +Triggering + + + + 同步器触发 + Synchronizer + Triggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth +(mm) + + + + 同步喷印模式 + Synchronizer + Mode + + + + 按字符宽度 + as per font + width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + Character + Width: + + + + 重复次数 + Repeat + Times + + + + + + + 重复间隔(毫秒) + RepeatInterval + (ms) + + + + + + 触发延时(毫秒) + TriggerDelay + (ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + 延时(毫秒): + Delay (ms): + + + + 电眼清零 + PhotodEtector +ResetCounter + + + + 自动调速 + AutoSpeed +Enable + + + + 同步打印 + Synchronizer + Enable + + + + 同步器清零 + Synchronizer +ResetCounter + + + + 脉冲数修正 + Correction +Pulses + + + + 脉冲输出使能 + PulseOutput +Enable + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + + 独立参数 + Independent parameter + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + 重复间隔(毫米) + Repeat interval (mm) + + + + 字符宽度 + Character width + + + + 喷印比例(%) + Printing scale (%) + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + zkWidget + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + 请新创建建图片 + Please set up a new pattern file + + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/english-1.ts b/english-1.ts new file mode 100644 index 0000000..c17b1b1 --- /dev/null +++ b/english-1.ts @@ -0,0 +1,5362 @@ + + + +UTF-8 + + DacDisplayAndEdit + + + Form + + + + + 10 + + + + + 07 + + + + + 02 + + + + + 20 + + + + + 06 + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 30 + + + + + 00 + + + + + 墨点 + InkDot + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + + 默认值 + Default + + + + + 编辑 + Edit + + + + 是 + YES + + + + 否 + NO + + + + 完成 + OK + + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + + 提示 + Tips + + + + %1 + %1 + + + + DevOp + + 错误 + Error + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized! + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + cp %1/* %2/ + cp %1/* %2/ + + + + cp %1/*.dpn %2/ + + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + + 变量2 + Counter 2 + + + + 数字个数 + Digit Number + + + + 3个 + 3 + + + + 6个 + 6 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + 4个像素 + 4 pixel + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DialogSaveFile + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 预览文件内容: + Preview: + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 请输入文件名: + File Name: + + + + 取消 + Cancel + + + + + 保存 + Save + + + + 警告 + Warnning + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + SelectAll + + + + DlgInputAddr + + + Dialog + + + + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + + PowerOnCnt + + + + + PrintDotCnt + + + + + PowerMax + + + + + PrintMax + PrintMax + + + + 开始时间 + StartDate + + + + 结束时间 + EndDate + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Mac:%1 + + + + + 喷码机恢复工作! + InkJet Back to Work! + + + + 喷码机维护时间已到,请48小时内与厂家联系! + InkJet Servicing is timeout,Please contacted with manufacturer in 48 hours! + + + + + 当前日期: + CurDate: + + + + + 正确? + Correct? + + + + 维护时间已到,喷码机停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + DlgShowMsg + + + 警告 + Warnning + + + + 确定 + Confirm + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + MainWindow + + + + 图案编辑 + PictureEdit + + + + 打印设置 + PrintSetup + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + + 信息编辑 + EditText + + + + 触发设置 + TriggerSetup + + + + + 系统管理 + SystemManage + + + + + 日志信息 + LogInfo + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + Self-checking started, please wait for 60 s...... + + + 开始自检,请等待%1秒............... + Self-checking started, please wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + 错误!粘度计下位灯故障. + Error! Viscometer inferior lamp failure. + + + + 错误!粘度计故障:检测不到上位灯. + Error:Viscometer fault! the upper lamp is not detected. + + + + 粘度检测异常,粘度值太大!!! + The viscosity anomaly detection, viscosity too high!!! + + + + 正在开墨线..... + InkLine Openning...... + + + + 回收泵全速开 + ReclaimPump ON + + + + + + + + 粘度泵开 + ViscosityPump ON + + + + + + + + + 循环阀开 + CycleValve ON + + + + + + + + 墨线阀开 + InkLineValve ON + + + + + 清洗阀开 + CleanValve ON + + + + + 清洗阀关 + CleanValve OFF + + + + + + + + 墨线阀关 + InkLineValve OFF + + + + + + + + 粘度泵关 + ViscosityPump OFF + + + + + + + 供墨阀开 + InkValve ON + + + + 正常开墨线状态,请等待%1秒 + InkLine Raedy,Please wait %1 s + + + + + + + 循环阀关 + CycleValve OFF + + + + 开晶振电压,正在检测相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + + + 正在测试相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + + + 相位检测正常,开启高压 + Phase Ready + + + + + 相位检测异常 + Phase error + + + + 开墨线完成 + InkLine Open Complete + + + + 开墨线完成,可以打印! + InkLine Ready,You Can To Print Now + + + + 正在关闭墨线 + Closing InkLine..... + + + + 回收泵变全压运行 + ReclaimPump ON + + + + 清洗阀点动%1次 + CleanValve work %1 times + + + + 循环阀开,请等待%1s + CycleValve on,please wait for %1 s + + + + 关回收泵 + ReclaimPump OFF + + + + %1秒后关回收泵 + Wait %1s and ReclaimPump OFF + + + + + 可以关机断电 + InkJet can Shoutdown + + + + + 正在关机..... + Shutdown ...... + + + + 正在快速开墨线..... + Is InkLine Openning ...... + + + + 打开晶振电压 + OscillatorVoltage ON + + + + 正常开墨线状态 + + + + + 5秒后打开晶振电压 + crystals voltage on after 5s + + + + 开晶振电压,正在检测相位,请等待%1s + is phase testting, please wait for %1 s + + + + 快速开墨线完成 + InkLine Open Finish + + + + 快速开墨线完成,可以打印! + InkLine Open Finish + + + + 正在快速关闭墨线 + Is InkLine OFF ...... + + + + 回收泵关 + ReclaimPump OFF + + + + 回收泵变全速运行 + ReclaimPump On + + + + 回收泵全速运行 + ReclaimPump ON + + + + 回收泵全速运行,请等待%1秒 + Is ReclaimPump On, Wait %1s + + + + 快速关闭墨线完成 + Complete the quick closing InkLine + + + + + + + 警告 + Warnning + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + Speed is too fast or interval is too short! Unable to print all, stop print now!!! + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + Speed is too fast or interval is too short! Unable to print all char!!! + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + + 打开文件出错次数超多3次,自动清除默认喷印文件. + Automatically clear the default file because openFile error. + + + + 非法关机次数过多,自动清除默认喷印文件. + Automatically clear the default file because illegal shutdown. + + + + 上次出现非法关机. + Illegal shutdown Last time. + + + + 自动循环中,请等待%1秒............... + Is AutoCyclling ,Wait %1s...... + + + + + 自动循环完成!!! + Auto Cycle finish!!! + + + + 正在自检,请等待%1秒............... + Is InkJet Testting, Wait %1 s...... + + + + + + + + 供墨阀关 + InkValve OFF + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + + 大写 + Caps +LOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + + + + + 2 + @ + + + + + 3 + # + + + + + 4 + $ + + + + + 5 + % + + + + + 6 + ^ + + + + + 7 + & + + + + + 8 + * + + + + + 9 + ( + + + + + 0 + ) + + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Special +Char + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 小写 + Caps +LOCK + + + + 中文 + Chinese + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + 选择历史记录文件 + Choose record file + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 条形码 + BarCode + + + + 二维码 + QRCode + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Solvent +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + + 故障恢复 + FaultReset + + + + 立即重新计米 + ResetCounterNow + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + 墨水缸满 + Inkstand +Full + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + 2014-08-23 + 1 {2014-08-23?} + + + + + + + 开 + Collector +Open + + + + Push + + + + + + + + 关 + Collector +Off + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + + + 墨水或溶剂空,准备关机 + Ink or solvent empty, prepare shutdown + + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, and turn collector and ink-jet off + + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + 维护时间已到喷码机停止工作 + The maintenance time has come,Inkjet printer stop working! + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + + 开墨线 + OPEN + + + + 关墨线 + CLOSE + + + + 墨线状态 + INKLINE + + + + 喷 嘴 +逆清洗 + nozzles +Clean + + + + 机箱: + CASE: + + + + 正在喷印...... + Printting...... + + + + 墨线正常,可以喷印. + InkLine ready to print. + + + + + 墨线正常. + InkLine Ready. + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + + + 高压故障,快速关墨线 + high voltage error, closing now. + + + + 维护时间已到,喷码机将停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + + 相位故障,FPGA自动关高压. + phase error,FPGA turnoff the high voltage. + + + + + 相位故障,准备关机 + + + + + %1.%2[%3.%4]米/秒 + %1.%2[%3.%4]m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + 提示 + Tips + + + + 文件未保存,是否先保存文件! + File not save,please save it Now! + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + + 错误 + Error + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 墨线未开,请先开墨线! + InkLine is Close,Please Open it! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + 暂停喷印............... + Pause printing... + + + + 停止打印 + Stop printing + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + + 请切换为自动状态,再继续操作! + Please switch to automatic state, to continue the operation! + + + + 打开墨线 + InkLine OPEN + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + + 打开回收槽 + Opening collector + + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + + 关闭墨线 + InkLine Close + + + + 关闭回收槽 + Closing collector + + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + + 墨线未关,是否关闭墨线后关机! + Whether chalk line did not closed, shutdown after the inkline closed! + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 是否立即重新计米? + Are you want to reset counter! + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + 条形码信息编辑 + BarCode Edit + + + + 二维码信息编辑 + QRCode Edit + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + MyFileDialog + + + 确定 + Confirm + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + + 相检墨点: + Phase Detect Dot: + + + + 相检占空比(%) + PhaseDetectDuty + + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 列高 + RowHeight + + + + 无加粗 + Normal + + + + 加粗1倍 + Bold1 + + + + 加粗2倍 + Bold2 + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 字符光标 + Character +Cursor + + + + 像素光标 + Pixel +Cursor + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + 字符 +光标 + Character +Cursor + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 放弃保存 + Quit without save + + + + 文件另存为... + Save As...... + + + + 另存为 + Save As + + + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 文件保存为... + Save...... + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + 快速 + Fast + + + + + + 标准 + Standard + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + + 慢速3 + Slow 3 + + + + + 慢速4 + Slow 4 + + + + + 慢速5 + Slow 5 + + + + + 慢速6 + Slow 6 + + + + + 慢速7 + Slow 7 + + + + + 慢速8 + Slow 8 + + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + + + 起始值: + StartValue: + + + + + + 结束值: + EndValue: + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 墨线时间: + WorkingTime: + + + + 0 + 1 {0?} + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + + 慢速 + Slowly + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 不打印走米 + Not print continue counter + + + + 打印优化 + Print optimization + + + + 电眼误触禁止 + Prohibition ElectricEye +re-trigger + + + + 高级设置 + AdvancedSetting + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + + 速度: + Speed: + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + 重设值 + ResetCurrentCounter + + + + + 重复数: + RepeatTimes: + + + + + 当前值: + Current: + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + + 系统维护设置成功! + Syster maintenance setting success ! + + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + + 提升授权 + More authorized setting + + + + 取消授权 + Quit authorized setting + + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QBarCode + + + Dialog + + + + + 条形码类型 + BarType + + + + 文本信息 + Input: + + + + 显示缩放 + Scale + + + + 条形码高度 + BarHeight + + + + 1点 + 1Dot + + + + 2点 + 2Dot + + + + 3点 + 3Dot + + + + 4点 + 4Dot + + + + + 5点 + 5Dot + + + + 6点 + 6Dot + + + + 条码宽度 + BarWidth + + + + 字体 + Font + + + + 文本宽度调整 + TextWidth + + + + 居中对齐 + CenterAlign + + + + 左对齐 + LeftAlign + + + + 右对齐 + RightAlign + + + + 文本对齐 + TextAlign + + + + 文本加粗 + TextBold + + + + 插入到文档 + InsertToDoc + + + + FileName + + + + + TextLabel + + + + + 预览 + Preview + + + + 条形码保存 + Save + + + + 墨水类型 + InkType + + + + 黑墨 + BlackInk + + + + 白墨 + WhiteInk + + + + 返回 + Return + + + + 文件未保存 + File Not Saved + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵 + 12 Matrix + + + + 16点阵 + 16 Matrix + + + + BARCODE_128 + + + + + BARCODE_93 + + + + + 自适应编码 + AUTO + + + + 7点 + 7Dot + + + + 9点 + 9Dot + + + + 12点 + 12Dot + + + + 16点 + 16Dot + + + + 24点 + 24Dot + + + + 标签宽度:%1,标签高度:%2,文本宽度:%3 + TabWidth: %1,Height: %2,TextWidth: %3 + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + + 回路阀 + FeedBack +Valve + + + + 回收泵 + Recycle Pump + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 更新字库 + UpdateFontLibrary + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + + + + + + + + + + + + + + + + + + + 开 + On + + + + + + + + + + + + + + + + + + + + + + + + 关 + Off + + + + + + + + + + + + + + 警告 + Warnning + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + 手动 + Manul + + + + 自动 + Auto + + + + + + + 启动 + Start + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + 密码不正确! + Incorrect Password! + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + + 错误 + Error + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + 更新文件不存在! + Update file was not found! + + + + 是否确认备份系统文件? + Confirm to backup system file? + + + + 系统备份成功! + System backup suceess ! + + + + 备份操作失败! + Backup operation failed! + + + + + + + + + 提示 + Tips + + + + 开墨线 + Open InkLine + + + + 关墨线 + Close InkLine + + + + 清洗阀 + Clean Valve + + + + 墨线阀 + InkLine Valve + + + + 供墨阀 + InkValve + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + If you start cleaning, be sure the recycling tank has opened more than 10 mm, and stop to clean after 1 minute + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 重置高压 + Reset High Voltage + + + + 应用当前配置 + Apply + + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + + 隔膜位置: + DiaphragmPosition: + + + + 混合阀管路: + MixingValvePiping: + + + + 旧管路 + OldPiping + + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + + 小喷嘴片 + Small Nozzle + + + + 大喷嘴片 + Big Nozzle + + + + English interface + + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 自动清洗时间约为一分钟,然后自动停止 + Auto Cleanning,wait 1 minute. + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + + 正在进入手动模式...... + Enter Manual Mode..... + + + + 正在喷嘴逆清洗...... + Is Nozzles Cleanning..... + + + + + + + + + 喷嘴逆清洗完成 + Nozzles Cleanning Finish. + + + + 正在开回收槽...... + ReclaimTank Openning...... + + + + 正在关回收槽...... + ReclaimTank Closing...... + + + + 密码不正确! + Incorrect Password! + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 重置高压前,请先关墨线! + Please Turnoff InkLine before Reset High voltage! + + + + 重置高压前,请先关闭回收槽! + Please Turnoff ReclaimTank before Reset High voltage! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + + + 墨线未打开! + InkLine Not Opened! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + + 高压设置异常 + High Voltage Set False + + + + 高压设置异常,本次重置操作无效! + High Voltage Set False! + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + + 最佳晶振电压完成 + Suitable voltage search done + + + + + + 警告 + Warnning + + + + 确定要切换中英文界面? + You want to switch Language? + + + + 重启后切换到英文界面 + Switch to English GUI After the restart + + + + 重启后切换到中文界面 + Switch to Chinese GUI After the restart + + + + TextEditOption + + + Form + Form + + + + 新建 + New + + + + 另存为 + SaveAs + + + + 预览 + Preview + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + 12 + + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Application + Application + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 另存为123 + SaveAs + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 保存... + Save..... + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + Delayed Triggering + + + + 光电边沿触发 + OpticalEdge Triggering + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + SynchronizerTriggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + 触发延时(毫秒) + TriggerDelay(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + 延时(毫秒): + Delay(ms): + + + + 电眼清零 + PhotodEyeResetCounter + + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 禁止电眼清零 + ForbiddenMagicEyeReset + + + + 允许电眼清零 + AllowMagicEyeReset + + + + 允许电眼立即清零 + AllowMagicEyeResetNow + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + 独立参数 + Independent parameter + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + 重复间隔(毫米) + Repeat interval (mm) + + + + 字符宽度 + CharWidth + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 图片另存为... + SaveAs + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 图片保存为... + Save to...... + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + dlgQrCode + + + Dialog + + + + + 返回 + Return + + + + + + TextLabel + + + + + 信息 + Text: + + + + 保存 + Save + + + + 预览 + Preview + + + + 插入到文档 + InsertToDoc + + + + 自动刷新 + AutoShow + + + + 黑墨 + BlackInk + + + + 白墨 + WhiteInk + + + + [%1 X %2] + + + + + zkWidget + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + 请新创建建图片 + Please set up a new pattern file + + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/english.qm b/english.qm new file mode 100644 index 0000000000000000000000000000000000000000..5b511a3c769fe6fc250f3c15993647116b771050 GIT binary patch literal 135006 zcmeFa2Yl2;^FO|yyUXQrx!lp42uA<~Bt5jytALcy5kv_|fIu1{bcN6pS_0Br=uJ9E z301K-RBVU^GZ`M+oPKKHpxuHp0i{?GUK|Nix*le^n8J2N{oJ3G7E>O?}d z_in9U@nM~s=Z0@S^KA#lLfSFLB>YGJJjq!0eZaSw~C*WwnRKO&_2Y_Q3%Y6)REFjS*84!K36u{|#D4Y8bFpaT1 zGhjMkd%$sk=$nD&d9wk>18xJ%1bh>40-zOeB4bPa0Ve@A0Gtd+?M?yA2b>Cco-uVh zCaqrw*nvsM(4M+8K9>N-GHCyX%MX{W%V$ z=VuByu^}L6Xa0>t=>;`YZ5hR+N@JKh=q)C-+Y9k|AAGpL)CF@G`~4bIKg2lGpJEyY z+#jpQG$#6-#WdyUb8n`pO`mr&jhQ}AWtuSh{3+9f)939>)0RH}$u#Zg^T$ln8=uFa zoml#e?_Z$LJ(*@WKG%GLY0?SyVVcQi#_qq%G&AV;iA$ONKkXrF0`jm0V_8!!Fa255P1Bf^*_$=} zxPY-ger8Q?@5k?lSTnTCsM?ASUWYwJ?L51wFC6>ccWSN2AIz^zhFJu7#N%LJ?k;#b;cGM zS^YXvw>(V5WHzx&ZzkpLXH%<L?9N;Fv5rA(4 z#sl62Ou&4o444Sm3UDM~Jm4t61%RUg4*|mdj{S;FFUB}8X0o|g)0hNRFt2kElSW-* z*-vd|tWF5aX$U#``T|>28+5!K!IqfU!cRKLR(9FUq`66K!(*A?UuTvd)r+yWzGRyg zf5O;|t8DjoO~9|m*`C#v05jR4WstwhjaY%-Ot=(_+3WGt-xBuv?hlyMrZ&6K><*LK z^=EI6fxH|&%ib&;4*AYx??$a;Y;9-u*)_RNtF>Q} z&Y{1|weQ{}*8^W(<{r&WwYtoF*A1$bY{RlJTjdObU;YjPcJi z_U#O*Vt43?xtFC%wLoY89I1LOHIvHMlxj4_Jgtx<)wtP`u`Sc2+Ay_J$5^Ss{ZPhk z++1v z`dd1F?;z-ZM=BWIpGnm&OCK!(|Lbj%zTSD5Nk;}r-)%tq<{r|GpFxMIIns^4uA`q_ z(r@wKKyQC5{Wda&u@?tO56C~L__2TuZb*NILl6CNR>gu2!IiwCl1_AkUeK#lqhGkaC#FXdqV6sanNe+T}XRaJUUWs+X2GS{=hhw81W zqbmTPUslyQ{08*o=c>B#&%vHFRn@x+{qt0efIk+i>MwtnNpF9vdU6o>YpAAra?@2N z4IQUyICBV-_J5*k)D`n-#~4+}li;i6V^zpa(6R3lRp^a6@EKdG!a7c8l0Q>%d3m9! zs*N>x@PU9k(*%5Xt*ZU)iJ;FtRgaIrzm8W_30L4le{oBdlmr2N zkf|D1GJ~-%?{X;hs->E+67*^orJC?Q^!=jMs;T9kWm5G&Rnv+s@FSb*rjh( zN2|XCzfhxkwS-`_>dY&fm^7wH^~U}88Qc4V>TUQ|(*EVD_ombQ7_9ngJoILhR;q6= zqP?%~tG;U=&ZG}wR6q30V$wHHsH~TuM>oEtD#|?1q!mq7CByLjm0whMZu&7PYM$!u zQQ-CJ+p1q5LNC72ltXFjaMf>jyJKl~UiEu`p0P%ARKEwUWlaA8;2y>TGXdYj=X!u& zGp1_*cpdOl)$c~gS-^{``=PK`XJb_lf=x`yi&6cx74x`GhFSwCwSG*kdtoPIZ4avr zs;W#{*+*Sr2JF`3C)E`%;P-E=>WZJ6nRKz1x@rdI`Hc1Isz3IIo?4@>UaKOL$_-IJ zRy&SKFU?Tb+6y^(rJLH^p%dC&sW#8TJnH|2x{eO?dvdM1{{f{;=>9eQR zPjs!#q@M4n8>UH&y*ZvkX>xN0<+((>RnW-c`4Gs(`V2 zHPuhYe*t_(sGoTTpF7@F_wHPXHO&NdpM6Uidv>_GuRrL~*sSiK_$lxhrXIBH7L$@X zsh?GKXYATF^^ghw0{u6u6B~ejbw5;3qjk?Oe(LE@6O2$#?@w@;dinr@IqK=N3BIbH zJ_qA3e_1{KN6eSYGt^mx|ArIl#oupc40vyX9hcSyt9Neg%A~KS1C9XPqTW3p^4{*A zx?uEl#`e!vpS}e79(zlDb}7~syM9ogzqN`v+Fu7-KDPs0x8Lhm-yRDM_k zbRVFp(gVi((t1sm^RPoH{WUdD)?!R`MDuui=%q_dHT4hNfW9o!G&oud_BLDdRA_G| zy{Xqc^-Lb{y{(D92YLGXElsnFeIP$KG@W9fXHxfln$BC&m=sr_d3r1Sz^_e!Bbjvh zx~A&|tRG6kG+p0;ANpx`P1mnyGijYx(@g`t^vPXKx6C)06n$IM{lHcxeRx^Z{aRZl zt*)+l;m85_eK#~?PD4*<)@f1)++l20rY0i``uP5B%|!i0#)7`lOnvoD*omH+mpV^n z?4{nC=@CD{&y3g1*p7LkeOfbr!ZpT*q-f@IzCQ~{_(f|LUpj|*cS5t|x#7U4kLKkE zlbH14YR&3yr!jAy)U3|m2EE@!v+09aCJlN|v#l!h%eG6J?cYxYp0hOvX2b9DA1a`s zrVTzVVD%?$ut>ni!vw6mRls@=1bkw?fDQi?u<;TBLn;dx9xh;uvm8oeR058>Dd72w z0$z#K91Vlr-5#hZcmwmMUuVsQs##3xTvPMb&ttK!)oI?==wKH|YTn7H06%7!=7W~E zq2C&7E;bB51 z<&C|X8~vVR?E4bU&(Ylw1DLP5bsPL>dqZ>Q#RH73e_C@d7V~b+dd)8nP=DPz&2K3h z#y+X8`Aahe<=gtHo>+?z%Qt?0>6GPb(*e# zKb7ZK{|U(7Gn4(oMq(ab_|C6s`;Q@q2mRWf2HhGS@oQfxok`}O{GPsr`9G(;U)Lh& zmmj|Id+z2*_$M3vMsD8@Jv@X%>B>OADeosiA8+z|k$$iCk>Bh)ux~S;_gh%41=ctB z{1$bAe6z3oa!>VP?Da&yb*vKT+}iJ4G3@S=vwrWiT!3}#R=-b|L;w8zjNhkU*J14G z+J2ukLwu>ia=#zvV_pw`&#z>2IP6ol-`(=S=d0KK?w&-sKKuNBO}hm?0IkOxvpbF3^E-C|%KO+o|z= zR<5@F7m%y?yV}mj;~1NMK-)#%9(piW+tm;L>BdjAu~2i;TMe{*?(T-al%O4aGlQ|i z-)e`nox!9-+qH2=K4R>fkF}#e?Tt{}i`uD&Z(!by($07=k+HYm(dGuf3wu6EE9R?8 zyZ-Dau#aoCdw#yj*ohakdv3Lcf7V31cOLliNhR&x_oguE6EG3$;JScV? z7WCuZ1nm!NwlKDJp!SEe?I0IZv_FPrfc|~n^{;_M)?PIZ^T&t*8UYP)qz}Y z@~?cMKKL5wU-^?SnKVCJz@5MPSE&X)G4N^sYJLBPKm3lr@OM`F*9-(cg~$DCeuw!y z`%VAaOUpCqu^Iw?*~~v!P4c$bzy9OU`;Q;@Zy1d7FIoK?Mt#Smua@~YTJkUWV+;L5 ze?HHofj9j_AG`~{d5M2Sqh}b~JkGz#;pZ{$M*27X9`itT%)eRxaR?dL@^5x*DB>17 z{9}Iph)FN}=HIr%Ym5yZ=HEf0{;v5CJ@yvjjYIvPi`)o1Kf!<8wgs@~b^XVWL;IR^ z|ExcHVxG6~pS>>){&A-N!i~|4J^wHNrO!Zr_1@$!a{O`GYz`Y{dszF++} z&qMv1KlvY;20vrS8vpZou-`G={Xe)clSwVp{l9!Rl1cS{^Z)+$qtGvt{javee2=~7 z|6|^7kn<1yONxO{!CL>HrqjIs+5hJ3)0nSj|KDRUPxEvA?@QoAs}O&#Pbz42(!+~P z>h+_}fBsm;_Jr$nCVYOpq0aat{Nxqy=}ad0+w&rI~s;LvDW5QQy}2$dp)!-QE9=5PqIQyWQTreVnKgAyKQ>}ro2P3&>_^z^7j-Q+ zp#1a%U90qOv5tLS*XlF$Gwy9&hi#uBF3>{PF%o)dScvZF85nQ!kGh_H^WeYq)b%8L zGJJ)u&&2}9ipT2uj@ZxGYXfwnyRE=FYmjd0XW(z~SzVsa2>G8y_<1qsh9r4$Xv}_(1pGbn@3f z(_N0l{Hb$6cXN0#^_bJ`gEr7wdbXQ-e&!co#Kc&wtbyt4? ztn*NJ^)7urqPwOdI7wG@81c8}Kk9x;xCuM|h3;NXFxIbibiWUMg|QvIb@yj{h;_&% z-JiLD`f0j9^8s};bblV8?;Gm={2nl{uI|rU1mD;F>pb*hlS19Ynfb5}%L14=27I0( zV1vp5tnTNC!|Me6H84P`p@H5U8ldTYj7hcH2l%ZdJvu)ipmAf^qpAS`(V+MIPXbI? zJDK#)jIpkDu2wDKRKO$j5sD4ZJ#ucwU2-wH4KQ%pMZG!h=7>*P{b)~2ef;<73ls!K*zb6OnNptpwC0t z*G+2!`p$qJT#_3w=rz!3@7DoCZa@zW+ZZq|eIk?UE)1AGs}tsTY{1-SpogSs0gFFa z1HX1)z_MYOpMCEI<1bq4_ z^yar;27HnACu2LG4fx8G4u5@cz*oDPGxp=afGf4Xz`U&=a0Po^QsZv}e%uE6o%~$D z^&1l6EH^lm)+`A4sr^;PR;~&7sc$1D={^x~Qs01|hC=?kv4EeB4uhZbdce+i8AIsl>oQ@9oWa|?%XHfyI<(Fn`4>OL8}kA*9vjJWqSR~ zOHeOeum5y8lfEmj4{UuKbXldZcyT_HR&CW+pF0He)vAAdb~VO+TEU@|xLE)AU(j>0 zW`PKCGXDw&!w~6{E2W-H21N05{!w*UurEhS02mFls`iR>t5cgWEk1B_GzMz6W z>g4;39XX_LwhVGKYmUCtFKrlm@RH+=B6`=3cC-tik zdzJD((r@fN2Yy3W{Z35?{4}QDbvlMgszm)Oclt0^)J?y?%>%3}gZ0M|FJTwY>rZsA z1^NG3f8wJWumgkj1z)a5oGV{{_VUZ{pL^)fXTz@y9In6E5Arvrf&NM@J!84~`r_N5 ztC*g2?Fi-z*z%s@*Js+sfO2>NOP@rGPH2Cu;1ND7| zW4(DdFmS^uCcOuEE{w5hs{;)waj=KlKohlB<@dmHS54siCxI1auEhGMeqe=*GZEjb z8(5_S?CiiXfz_{Jefrp_z{iigz@(RZ1)6U_FHY|l_|zNFXD=-ejA-=>lNt>a@an3- zh}qW|o83RKX+Gv*lU9Mvt{sA3@M&PXOxTI*KL)n%13skP3GA2xePT*fVf}>RIeR)(*_`&u7xvZGo$ne}?^xbAjtCG3@6)9=NfpAN>6hf!jJ?Wm5C1 zf%`TN!TP~3a6hWEuNMU#3V0lGuMUByt^tO}2cDU!#X9|!zz@fiAZ~pu@M3q+yUl3< zPZtJ$+CLe7NowHbt-zz{&cLr@`(s?21Fr=C&ZMfJ1s3iHp8{SFy#8`c_z&{~Z|++Q zyEi-V*YZ18kq@QW<%byJWu-2fB+sLGo=MDaw_Asg9YXV-f7<8#> z$oD;iZXEQ@>==XT$EJu!hZriif&8>>&!IGVxS?iNcj%YZhR63k!I){eq5hF4m{j>= zL&Lk6XJNApQ4{+hF8G(BY2TNyZmemDX^VAnLJLEiEvr$!m*MGJhafLo4BdXA^4}Ty z4#a#>cQOoIGXV4%V;K5<9OyUQFnn_a;%1i&qk6<)J<`T7ZaC&cWVm7WN$~fDUjVNI zzHi8lh{Sw8X;|yO7IBp@!}=Ftua2)V2;(2rI4Gsudst^x44QYk z4dO%Xf^uRppOIwYcdm(6ZFVr(_4B8si7IEN-LE9G5_ceoFUHcvO z+9w5_{0w^T-CjW_?>7Wg1r>|~UEhB_=-da;2UU&-ox2bD`mQkO?SAiKUH*H}+XDcr zObdFi_V-L$UODK~+pmD0(}OPc#JFDGA9U&NZRj&ZV|8fvont}YjC-C*pH~U`P6d9} z+8FeGojmX-Cg_KMEy4VY4*Kym{QlX+pc{3T!vD|*{S*QGNAwK3OSwR6t_I!DPh;$z zl%T)z;7^5r8uYIj8xZ%qZB$kG4e`bvMs44&@KYZcwa;B)Y~Pzk|A=;&2g{8CdA*?T zR~U_3uVI}(*;ww#Ir!hrjg^LULyAs6W0i*Bi`HbU)(7RL1{tekJuba9$5`_y+CN{} zXzu?!))8MB%^6i-ry3iB?|p{2d5N(uJPjd|Zf->iu;<`p)F-ucX!_iJs&?ld&+O8%a)&%ZbBesv1uV7qb8OBm04 zQ;dh(#lnw&U_3qm3jO!x#?!4q$6E)DuW1${{&?H?hIJ?zpmKTOgVz=%+j1pkP&ufm};HDACpW&yu^%cN@e z0+YtSWm5O62YAP%CceLxZ&IHFzRjAO{HD?8&rN>kW-w__sLAgtV2}MK|KX6Uf~F?_ z1La`PDsU(jj56siz>gcb%M>u|H>~Tgn*!3B!%plLaLP0RPX`J3HdBkHH%oVV0 z1rDW(Lj;^0D&Wan0WX~v@X9-;fNzP;_e}v;pMd|`7Z7xA|G7#38szu$LQ~+rUtzaQ zCWG++)}8fD1{2m>HTIeeb4>6b^G)SygKinWn96s-d32;xxE$C_&010KyRCi8{q_`aK|PDjXJ z-_xexYd3*kRSu>7?M!vQ7|0MHFg3`9UN5)P)F`9`_TX<*ql0HLp4}Wubz7Jk9f5vd z@i~W5-8j=zZ-IWhJDM63--B)N+#9CG$621{I^`U@kKNs+53jxoE0-l2((#{l-brJiZ1p|`U>R3}#idPi}2>4qEQ!@sCu5N&-SynE-Z_1$*{H1`?OagutZEAL8 z80eR7YTj!t_VK1U&bvfZvT1 z@Y)NemXWZp?N4ziO`I>_v~B{PUoGI(@}|z9uk=+SAmk(|z|<`a_G;o_0l&Xy>Y4ol zlcu~Y;OQJwuQwon(>^oB#$SbB_nfJ3LLB0f7X*A#GWCB5`JH&eG+_K3CSC1lifg(X z@d1-5^>4JlG}4qFT7Wpzd!~#A&>PWjnI>JS!K7{5P1Ek|hhOlr>BT8iv2U1dnvwE1 z_QUF#vM%0X(sPlfIX@#_^-L$zypZzP5ASE1*YN@NE9RJT9$+41Of@ap48CaRo0bK? z2>Grj;HusnN}|0f|cSqrg!_3&PIA}2~ zW`E&{eU|yTmV--0Q=(WYGJfWOhD^57$ofh|XCnMlQp&9OPY|)cdZxgT-E&!ul3P3u3OSTEy1h78=3>N}B1)qpk8EA!sekvCw62&ysNrhMl zzLXVOqW47nnusKHGZN3Kyl9hz$yU!UP`w}>mb^vQecOxoZ!S7?q-gCN>+HFfd9N0p zSZI?q@#~x%%e=$Z6$gvY&9`h@D~7{XObjuv4$#sS+@V3FxW z0h)lLfn({(DJBk;H-j29RcT7bVH`9aX>4)$>mSj|KIT>)#%x`+NlX?@F3cV4>a#`L z3M`8XEcy9`Ckjf|9V<1$k>Il!M>@wZ4o3-y&csKWA!%$R{@)F%fw)N2Cw_*2E@}8X z**+?>okql0Q8Es{+ceF)}v$t$ZNwU&dq9Ki$hamhlLqikB2&q8;N30^{Oib1m}=iWkkctUFq&C->@ITfA?FW$A)aFZ4`~UqWH7@gv`-t z8A(&)GLzC$xp}PsyWmXY7<>I7>ym8ihS`FEF&>+#$J%qD5tdg`Zi0xVRg|Il?8}z9 z+eO1(+Kphn&~ggS2?>!9LKzR1$Aj@C1`5K)2+P?$MN1A?_io0_;TV?_1MfH`J~=Tx zBPlhLkGdAZA|35bkkr{^oWnDucA$Xx0f@c|047Z^&jtjo9bBen8Q> z)z+2s3r}&+z-?7mpx_*x}cNw%X zTo3+v)5)TB`z>cyz+HqBn2;7PXkpoQvhc)W%f8icwYV8|OPDG^CLJBshms9rjrd=Y zEX+>e!1#1?{fMwe=K7Ig4$8k2znr++IAtPL8JL!w85@@o*EK10L{h5R@vDBB3H&>c zZIbfl>mcDz6F(Hb2Na%IP@+lT+71O{5k zoX+xr89HdEB($Q)x7M1Qhn0`V@m2z*Q=uow)gl??y3yV{S|CN?v4sw$cttB7S`&>F zZE>ySnSTnup0KVyV9DE2w0VE={%uZN6H6UI2G6u?;3(9-SpLAM`VJE(zJPt@b(=#cIw>a=|O{^9YXDwsfO<=zywA@%6ft@B49b$j+!wdvS`-H z1_<7T6)!y0&|MQ%coUsK-AvYi_2ot*ku|h8Q%*EvU3swR%&L;zd)+ofxHNT(OH*HP zsfNKspa~h93``&TM!_a9GJ+b)7#SJi7LiJ*6YY!$Guy{wjEwdLl?u4dVCI3ymn^E+MQd*h+DNseq)H zXc{R*HSl&Vxks$K_PA}jhC|aGxOyAKn@MtL$Rrxtmyf8jbzzR%wi-FK)dOvf1WG<4 zd3=W_B+GI7xta}vcAjWo4p)!3=37t;UnHh6>i+}U^R~UvzL7)IKGRDy?15fRYDcTY za$G5za?rgLw2a4+hJurw?DNTlcrM~~mV%e9o8}iEnCEU`0x4GfAWnZ_{ z@rfCk1LHE1c=(1&M>v#@@LD?3p>(9z(oqhjqr8@mb|@X~wR97Q(oH;;RymAO<9UcG zrVLQyd3-9Sj85Zua4Mz@P2+iFDyED}<84???Ih4N^+JJWO3`LsiZ)k@HuqArg;KPI z`=UrZwMKdquTnDPQlp?pVj3MQPyfQ2r#} z#&BJ}25bk}Yl`KYox^DM77PeFlU6*j2YXMoBT9^EO7j?<*d954ex-J<)uXSnB;-X)&j9%-~ zn!`n1GL>HI(yGlxU9z2C>(Y9~MO`wcp6WUoGY6aFlAE=->qvG$NzsYrnv$GSWqU3N z$`MH}C994WAK$=t=Ug^d4Y33=ONm@!sY$Wrsx+i8-n__LD+4)Fia$$jP;_)62`h*~ z`-zzd(v#7kEFIdIr#>lUC?=b$EFmSFR!exnc1$eG7C8>jwdlJeYjrV6V$-le*(qs! zW?X7~V*7+K6UGbgxDq$i34H1&L(QfDQ-vD-mTcIZeVm|P8|sXzo*J?oJnKtC)p(SL z5+X7^U{$hXr7w+9tda=t5VoJH5$T~DMLf@;cFBA>bHz(-ogA#PYcB^` zx2?1K#Z644y$Pt`C^9ib zWY&_m_}1yQ?gsD39m+&=Xs2Y$oZ_9?wnpa7wd_CXp&gHNuDno${YIxv>X7`xl*h*}5U0+Y>jHXz@U?Q`)<7s95~!apcZqbV#GJ;a|E*k7!g7Gb1G}A!+24{}3MT+H72AG~^Rem_W(zqE#YK zeYDGq!Io*qlg3DJTsH6I0*MV5L#L!sNttoUJR-=6t8xeiO5xO2sWQ&3@MVw35`0nS zu>@a#c`Om_6^|xfOEmRbqM6qcJOJep(-z*^&~!=5NO4h!n8sJ&loCTJCGFuCJ6bwq z5oG1KtJncTLIG&X@TI>LRieciVH*ggajA>CuTc1XogNs z#ejSV=p^bnh9{qpg%B2l9RF1OElfA4Qy6>3IAJAGuPI0Ak1(X;hrvwo)V{yB=NJ3STeC_J&G@a#HE!E(!rdBroA7acj}f@n@`)y1YwO3dgP z$Ah4y80%C}&kOcW?U+b(F=3SZS`Byvb}Z|Tdc;C` z*2(+*gCGzY5FI7YtD2ot)|p!@+ZNk7<${1fYZ=$_@k#ySR&B|euJ3#uB(@`IeWIM4%`nC z8TumJ>4yDOn^;95Q<{xRQii{E-&SP3@XQuhVk3N`G6)L~$rHl!N~r_Viln0GG>NQu zXuEGRwtHz`KuNo9VE>&q1~a(!q*~6Us0|tpsTz@}Ew@S&gm$&5FJ))DiG2mqwD8Pg ziea8!X~{i)>vT3e;wXHD6B?_`t)z}RG+>(bZrzO^$#l^GFAWDv4JKvZ$!MgRFkeSpY zE_Kv|xKVQ8ly+%JVez1cT~BKf0K)o<#MDi_{$MAm1xf=|b_NWV_4&nFM=W!X0U@`w z^;kv{0U#Ro9s{gLwpdpl@KlZBI%KGnN?PlYgPv-b5&CoH1aZ-R#>pY2s6x?-MI{@y z2r`P(6mHQs^2G%4-g)p^q#Jm`#t0cA^GqvFC!!T^KUb8yuP6t{Z`>2D5(4aGOfykm zth|wRrjW1r*aFMqRh}BqK*W^1n1KF?lQVn7jYv$Eby3eLgW@t^;YM+n*~qm?D#VcX zaZ>CZX`x6g``5az~&&9v3QAP`qDaa$PTSgy>&-&$ogl_kgX3f*qE*GmH11kj2iq`C8c1By&I>t26EmfVHAPO_ps(k+m$2 zV>S>xD2r?@s2OteDXQbGsQBo1n}6lHz5dXmEpf(y zmN;aQ#R7#+I4F43Ek1JqCp82%BEP$_-KGj_%1OJtsm^A6alF%RQ&f)?QY;uBL76Ox58(1A>DgVBaE#f{kP zCjX`z=aQoC<#hjbXDxGQyY7j?WV|P=?v?$l088!;gudZ$xvMn2Xu9B#xd+Z@MO8bAv{dDk8-|pFS3{9j z8X?V82N{5;Tzqz^r=E;_iV=x2u_REo&J1Gf44${`=(nr!(S-(yHt$9WIBUf&fNPdi z!WN8}9%MeEkm!-_1!CtrspQHE`li^)bu z@#$ER7X#3vG0GW{gn{}U$h zvk_4=i!Ir>k%gwPW%1_56lgkgu4wr#%aVM{l3C)1;;dEH4SE0m46ld9oJ>s8waSeM zd}Hl4v+rdqtj>{X1*SANB*G^O-qxX9Fs>>X~+}zodGo<`^~&CKsNTJEvS3LBG)Ku zV9K`fKgrOzR!D;*n%USQ{3{n`M*QI3%si4lBAzt=|9Juz!;_I{{%`W+5sgGOFr~%+ zVy5_FJX-wwEO`Xo#kN41mUWr_TkB4RK(3scR*^&-FYC=m6vt^gef6=@%(msu43 zpaqtQ$kI|xq@WNF-7md;S(}!P8bn7%gjx@8#$h72t0tdA340)qVn(_fcUdWPW&Qu( z9Y0p%WybGh&V3&LevDo$&fSgwzs`5aPuYk>Ok|V`8aS<-1r2-+Q?O&8gjmkHqs0Fh zNpM4vXcrW5Ar(GTWQWVJ&41rkxzm}gcx1)9y?PYAxWi?L^Xh!^d_7pPt+@@U#)s%-_@-?qI( zOAc})X*10XH_>rhNp|B)Z!i7BjWzqOOsy7WHf6kR$2jE)>nL|Tar}6meCc8nEf@*E z?Ga`ddl3`iu26ay?K#QeCM8@M)U$m@E3T1Vk&Tdy%h0-W*L@S?5;{!D(x)vlRSQ5_W>PT8r@BoG9mO zd;D;V5B>5ZEvsZ@u3_)`r<=5egMXYa{L&K$8wx)K9VoeN47=! z$hJsd`}L7+kv_65(nq#M`pC9OAK4}@&hf|&F7}Z=vdu@bMES_JC?DAt!d7xO++jZa2{N_m$$ zKi^CSFXm%w-bI+V=3Rn$F&{WeL-2v4RLlpCQZXMmO2vHOC>8UKqrQ>N2RlJz^TAB; zVm@~28?St@5xi61c;$nI;H~+_DPj05%QgKgl&eB+f5mVvkC+r09@ zF7VcTn^!(q1>Tx(^U4RCKswO-K&g~>nWR$Qhe@TpOC*)@K1eF%QXY}O+6Woiv|tu{ zFX9Q52|Nvn7SR*&7iDqr^Jex%uL)P|7oXc$bZTGG@>lT$kgHW3nhxi;EsNYbxq10S zFRi<2O>V}StyuOn*0_%8@>Os$w@d8P?UA={S#qi*Yi;4V&2{RyT+*T+#|MLG1BK8P z=Z0PNLK{hh4c)Lre=GO5Rk!sj`V)sxam3Mb;)I(4(%lkrny?&vpqI5M@E}ekl+J;x zfb3z~NjUPVEdkE$py)K1$eZquYvcOcX>R~2tTPXY+-Wy>B_nlS9Jr=qHgxYH5rzIw zF9OLsoSt^b=97n$w>E+rEVhvI|930Luo6}{6X=Lnaq+9#fS;-}_I zyVhW!0XNBu01XcBDI>*kzrs^1#dzI}G}xggjf~EuP&#KOctA&DGRw9nPNcYLuO=4> zYKQWv=@kUA_edv0Mmk_Nf1YLAe3Aa_rllD0!2O#|a(XHSa%9OV8_=ofn9Aw!;F1dx z($iGFb>|#Nb`?jWZbeKRaU{>(j>hDrNkp$)k;Kp*t&;m01KmN_2T-oJ2whF!B}9OZ zBB&J9kLNY1uE+{^RZ_XZFr1zoTd>Y@dKTto3?9Qk0<`U`tkd-)8jBOn$~P{J9b|5> z3(VTxsiKkWg-G5o9-OXLf0jARk3YrR4g!Xe(>=n=vj?!TN)SLcW0)eIk zZW@dn(j}cnd;UamAyuL;q2EZIi{X_nPv;`2B(jlFdjNPRCvg*zs6|Cfk`@sc1km{l z$_lAN|Jvt%3vn#5Br6|}T+*9_=UxGCaqC9O+U4?-jx#9=dt`;}0OS5ec-6$c_1gAd z9w<#gA|~C>;Y^5Bd^f4o@O%BU;oHrDb?q#e3DJmqnhddB8=)92*pjxwZetu%vB3Jy%f9rkjp=i_;1;Dcl=yWt44w9OWZ2 zh+cam&yX}GDIzfsNl}S&OQf(A1w^D*+$@u2-A3#3W7eH#a6t=>&bl$6*)F>vUB>Tu zhguLj!j6|hkYDGF)RP<$kph+pRLOx+uGNtrzY-dfa;Rm4Oi4F%auP0+ed;$=5MR8x z@C@nn;;gyKm$--n2cq~DJmRRo^6;Sxi){pdlYo)U&9nDnz=1gH=4_7+UKRTo2w$4L zq^KOu$3b-i5qg7XeSsVLjzK*-nn}(b(S;bPJR3>Jsp$3w;hqSkNPVQ>8)1)xn@c

    |X>IgYN0^?o&mAWWAv-`-Am^Fl1UnkTnp}Cw62>?n0G+ z?PP5v?n!}DYTcSeIpjtAax7=(;^w5C%R-(1aYL|hkG(hL_YA|RD*t-xyJ@)3ebXHe z4mV8LTjnn<$qy{M!CMFBay4SFb zlkFwPm$v#HnScDaB`>>Vb(T2p9O;hvRj|w#51TtJLhRTFIi?4=Yos0`2I4tg;vC%| zLAaJ$mfD*%SWj)nadwY!3Ih%alilD`OsOgAcw8=4K>&bG015?UU-&q+VfS_2OwSsw z+rWqv88ZPFdpqvkrewQh(L3BCrbG86(b-y3;pEU!0)#j%Om`iT1d{z0uS1ixxvEJ6 zBrjQx0XTca^@|R#rU&2gCiklg#k#Dq_{x%Xn%;}vw$nYzbjp7UP%TaSBd3Z^) z@I3y?g9|lP#a5GskRs|sE|eGR4YG&fL^|51c(W^Un`C2r=~8{B13dZWv?WSvL$KsiI_%v;5&l|um` zkXNyy7P3cLk@S!Vnk90-RL`fKIL=O!kJ?l`_Yr(T+Vur~7aBygtE_rR7YpxBT;Qd! zr-z_I49@Ep&EAJ_0fca6Ia@EnHq#BR(_*a5NTCbxC}SzMeT+*8}F zC@yBlqaE)pM^Bl1Kidn=cH=&$9Gy@C2XX*O4#SY0NdVPE0FxXKVSxm#6_ur|Ugb9F zay0T*iDSY~RVY`#_*@Ak3a?pd~Gh`)at}i)ruK3J;L}%U2KoRYbqp9BFK)38jRr9wMy`lPo?Z7;-Q zy!5#70It#sbk8Vae$k+Atr4JM`z+m8fHAMxapIZy^7I zE^npDNve+2qWDA(oIH8OTc@O2iTi^5$^unc?gWAi166bsUFl1_rOh2-bA&r4Z_7{& zgA|Oshb5DR0_+ZV-#U1QF&+jju2-j>8C>LY@|d{g)_&=&%dt8oOG;1DL<;10I< z9G!-1#hnW@_EvzuR_dt*E?S-n@b|Yp72wHJo(k}c6AuOaBFu#+cX%5K-%Ie+N~9SN z6?kif@A-RbCCY5O@y-ywU?vwCJQIsJK&$mQ#u#)EOO@IyDKeHKixVP2m@_j<+pC zvp3-0Xv?CNWxH|`5-G`Bfid0+jP+K)+kBJwD*(bY#ys^ny2`=dJk%^$zB` ztEWRR{2g+8FKWwi7j7jaZ?t_mL5od_(b95&4tGrjlq0gV+M&g!2*1--9mR5K$w%9h zqLv8M%UhYU9iS}>dUQ$IcdcX1IV%=*w%4?fp&;7;@hFx{TF@I3)S>($ryf+~i4pcO z1{CF-wC-PkcLiNGKpWX2UqiW9T#Gel@zJ9$%X_*9-FA6=8Hv+k5$!luEh0R4BhY30 z;;C9J!R!N|(s%^WW$6mCcycn(qRgS5@?K0CjJ(|0Tc$i=MH^y{t@8&?U1BA+(P#}# zSuNtxRF0cNzMDzhA&c80@urP!MNvsSQO=(@?KL4qJl15pnBDQ2F=cZnNYuweobo$m zZrX5C*mmF7zegJ0$QhYdYSrj`O}tVF6XQMm#25gQcfjB%--!f>_U;q7*o*xr=QsyV zBbgv#A72g~I7aHpT@pLiw9X#Ir`}Y2C$b5ggA+7;=$i>BC$>+>tx&#^SLPI9p?Edz z9#T2m6_*Yx^r!(v>sDLW?-3k9Zr5P5y^`PE089j05kc4UGO*Q3nh=Tg3#)gCG#w~hn0!$)ON6&*7`xZL||KK&mdYV zT5!yoHIt;%sU?cXBm}uS|F1Na-Xgc^lVmTO9i3d26C~H=q{5B?ep8;62^G;eJP1*|e;eIAECiSD>J=kO-Bjj`OtrF9@?jP^P%^9( z#?~C<1LX*eZIt8_%_g~JNm&hZOoUm9nXcwn1&XTfE)ZF_Zf03EM77CK(N;9YHqB-8 zHi~kxt?TzHc^gg)_2~f$ry7wCQ;x(=#90+_Bf%7@LrEMj$7^b9LmgY@W;;$nF)l%| zvU-{Jgebo>4FhyEF5;45oBw8?W7TYr>~Ntj-ha??W`&!X7R>Ma3&sB<*--qS?oz6c zJ7b0+d>n@VVDRj%R;(WpT0e4V{ix9T(Zle5Wf*SgB8{o<8JCngC@D1|Z4$TgsmQqw z1p~-fl3JrQFCqlR?#cJ0zbQA?aYMUo)ZQ`AUWwbwZ7OZGwBv`ntIcBH8;BKeodrKs zY

    %yhyTeEWpEgrLljp6!x;OOFawSBa(Q;OQ!TK8E)E^C9_|49OMEh4_lE|qB_Jw zQv9MV*%MdB5^Wy~EV||39LwD8A_ovV@M1Xhk|xfLY}r**aL&5&q$O{u%i-+j!y&X} zPeLXkDNB*hO`f(m&>;ILQTRo8e70J!1Pa_|fW9c91i1`6AL@B@1ef*_XM1=ySx**${GKW5ExC7%U0 z4$A{^-V36P7UGJqrGiLw8Fw1KrwwvKo;WSiwTO>$JMuO#$$qR&r75$OWM6pCN)1vQ za&nO%uIH8&`5;-x7BajJvDZ{|W~pV{66)pO!_N zgXHsx3(09L%Kn--Dj-~E;SLl1T#eUV`^vaT?yYjB7fxms&3x6y-Fb(tM_1YQ)5PfH zVlIca*ETfT1tYf6z7|b6ff$7(l)e4`^V05=iUvGr4w4wSl6w12Vcl$@%IHC=a?(vOLV(8%>wes#Cfi=2^ho*k{pp6Cgeum zo>b~Noee~bBY-E(DN-zSYD(A=@j!ymr}7&Q&f}E*MIyW03oY}=PgHsKF;TJ$EjpAMQLOW_Z!M6V|O+$lG^86}cn`X)orI66rQd2w8TK?uF3` z{Z4kBat}$%PjX?j-03sN^xd&c8PQWTBK|yrEoWrg9^{NUsb+crXBTc7cZvCnHq2!j z%OfDDSP%JI^66HBcz*@jal z-wvqBMw6zOHVc-bprw1YMkj*E`4PJZWqmqwl}dYu!5Ay$+|u`So`WX8 z!{e1Kn2&%sN?|4P1cSNTCCVvES(K9%iTtZPa*+i~V^FXcPI?O*l^{$>*h|+^%9d8( zv?wN}Nf?W)ba9xJoEr*6B-`CT;RMn{ZnCQwjjQv*QBTIT3C==>J1B*Xxb>DlbR>ie z*>lk7LfzR6!lJoC42#dLgTMbn)_TY6;vcd$6wNwmnSTo3iPQ+NV&wj zWi7(t3gc_Xg4PAwDW4PR(s+w{{jTWd;Xh<8Z_*^Z@Z>_AEOaU2wP451Y#IbE9DhY4 zuQwcn48i9p)|S0wUwP>x!y}?Y!kdRg^1PGMOR7BEMXbaNS`LYWA7pw(K6E-{fPz;< zQ`ymWCu_0}P|~*Csk5@Z$%`~a6GTTrQS*~xSXVhY(1`nFt#x!a?ZsSDD%CbbSuklz zioowkOaq#jv`TcGbpKRa)B0H%0G_)six=m}Jy?)WN#0pIophRTmieo6DB}`)nL)19 zCruvZ9I`J;niPzf(lRxi+ith8{5#g2-zBS?f1p=H|g6pzM{ zRV^*p6dan0e@Qqf51(|KJlSdGDO+M{J%!sN$FP=MQf5_ItSB7dXk+A(Wk)9eLTx&_ zqGLdGyPFJ`8LkDy2d-T4@eM^gP9b_wd~Uss4dQSOUc}vY)Or-J^zDMZvTmG1zw#GW z%eDidVaxv+!TttfcSr3#A?B z*eD2#Z6_RJKS~%%l5>8k1l0w|%?2))D zbKMyay8navmgg=BAss=J1J$y~_=<-zlY2D5OkRHwf<*g`IFu+3DQ{bem&mbRwdNcY z5{07)_|;aDm%#-FkUEP)NmpVcy=A+z+cEA)o`d~OY5OdrL5MiJyrCfvi@a6}uF*Uc zWF@A^njn#l1Nq7Cpx=q`^qU};%sB7H&b8<3c+rFKJt@*dF2H!Z-%EH9bCVs|Cp=(h z4~YVV#31=SK(PrRw-=1sie4f?p%I8PLSm^%%UYQt@Pw!6~h!4t_u$eIL6xUTZjj@}j(0Ywr+GZ!xUiww>b z9*=pHHMpX$LYm5vgyN&SO6KP}IX}X)lOqYPw3TDNgsNt%I-PoV?Eh?RXLHy7J$smA z2XyGst)n?OBrI%DRL8KePW?NHAEHCU!@@fE3N{Ci&df}Y2@9JvX;SE@ab`RgpV&Hh9LkK& zOq`qrPuPIGEz>)?oBb6A^J<1?ouCz>;-q@xrS2#X&-9u1{8HYX>Ur#*N1z zR(%MFK&%M3}6 z%ZM8VBu0l2(lLoC>6uennp5I3MkS?&WTvIZgr`roe;$#RnVFX2^i^`=$V{g%GI;mA z7PUVjIW2x{2)5Edq!^$?M6rLQrkw^iDKT~2gt*ixNlt@{2&d8E3G>XP__*Ydxa6c! zsWAc<45-zJ45EBkI{qWF5eEobC%ZsT&lu>_Ev|Z6b0r$;ly;Jq3#JP+Ak&d2&9LoSTNW zl;Ot0c+d@C>vJr*tD%9(<5_*SXj=hJEh9(7)o2Z@50XkP$UevNv4J9X3=D+@+pO!(3B&3N z@#eOw6dB5%&k+;}YUsZ4+Be`c{@1{S9 zMawZIhu&0Ju+#GLOl#ID9CNf~7M31r4L(RBv$(2^vXF!y?lfp>$9*G_NM{q9n__cU z#1F^gJCOm{6}f^vk#nmITR93?weZ{q%f8j5L2ZNGcBuI1cAmdc8d)9BZ9!s`omg72 zo#u)#cx+LkP(--(XJNE7>INly4Zu4=4v3zY6oe3vjo4ONPNko+CP5^O@5XC(w z13d?!$2B6BQ^ydzjlrcsvrf8dpYr(0%eP;LXh%>h4x78GwA`NXT3YGRI+akRPy>ZL zL?DD#lC&BZh>Ilz%~dnvzqB}z=Pj)$X#pj|kn%xySiFjt#@FMeaU4H)HB36CMyIbkvrcxZm@IjV ztoydp^#%MsJy-P{v?b>kDY?>olSxBjL#rxbSttRO2%@)rcHSe9!ybaPw2%-)B>pQ} zq_*w;G=9GyA~Hq!`x+xik6<5YQ9r`vNW*bWhhyxiFPI?KVYK2Td^&QQM*TTYSQGWO z`e;ekJh9E}iXN5toE7cStmCPrc8VIPg>6TR)~$3i;5crGxC%LR10Bc001+FBwX}?<%@YcFQn*pJ({y82 z1Z!w#Q$4X#7E8v)BJgL)J%B9&BqJaS6WXADL_=5HuVF(>q_`zQmdHZ#RlmJ)+#ts< z*yGD^SB(U_7##%IV#jX|;X1lQPhVr96J>YQWEV9WZHrni4{{P$+?vtg`^fM{FG9+3-u; zA-R^^Q4zPzK1e<)Pbv^NyF&68m&RDxb`vg;66=qLq|xjkxg-Bi=z9CLh4@wkxQMnC z5^~I63&m$TYNljy)8NP$Qd>fWQm{&Rm|~k&{7M-O;!Y`%$}8fj^30^58%0r-QgX_# z$jPHaL^L9rBW>}Ya)-$nJ2SEAiQG9{9#phEzhw0(B+em*Y5!GRa^rk~%_5QKY{B(P z*~chjoM&d!y%lGWLykjF`2JwY=40X;p5|QIDe3Pd#9S)_JtZy2`36Zx36KX!vO@Q7 z5JSi`CpcJejRn=8Bkpzh3LMK6?x<3RJ0l7pi6iQG56}%EqluNig&wQFcU_Q>5uHl@M ze5&V}f1v00Tkl?%z4zMt9JFVq+b$(xuXo+v_1-T(d<%r~ftekG5x)spbvMqKsx6h; z9&>KBLJ|a!!~poft@MB+y%JKXSuxp@xC`{5^n>t{?5f|INgr}2{rj~KLb7z|J3JhT z=k={Y63(^(`Q%M>sFNYzu@Z7lKozfDM$tVVkflb_)k}X_orvDTX2r;OR${?TJu#Ug z{lp}%hcX`Z2jQM4BxvlxPGwc<6x1!1It;tC^8Ft0giC>$9n9NZ0$jQKT~V=%8p$;EJC zoPS3y=GNtJ@eyjup>UiJS0($*wJznt=~Ve+&yYLrj39;zIkzDd8L;wl^nP=@&pDnI&9U@S1O%#kM)aVDu{7xEwqLF7>q2irMG$Fs| z*Z`p{T(1>&Hp(f3+(Mke#qs3dsk{=C#CsH?|iP`W*&{LAp_@xC>-qk1GBU ze*iUFL4=y1G&}QnROMjQhkk$Wtx=UcA0Ily47JuZCoPzh>*19lxxPZ4ua17?Cyi-3@VrtPg1wZuEUQdDV1YprZx-R%m$rJch ziDg*y)r+u{TeyZsPEiEvyeZeE5`g=tyoinpo}ei*rID#6I_b# zNp3%G9C?}EIp=^g(qJM6FS{3c1W`lx18xJ2XxVzNai%W9bs2XPR-rZckrRl*O#F1x zU7oyHyGRPV`t@p)sIy z$In6Vf+K-qIpwZlaUF`pmApyU<3FKJfjqnH_pME^qwWk^np&3v>>mQ(8PeFi9Cx(J zDcC+4DtPhS1uxs4uIioiD_tBXVs5Uo@ZqWa_0uUX(z@s#wGDV_IW`AOv^=+he=04Hxm&NqJ2v z`*xKxKXs8qgb(4+`7)@BEp4HfCXbL0hS~|Ap7)wWdNih)l;ySni*_m@T10qf$@&`N z|26n9OHKr-JB9N{f-?3(ZzhS0NcM`P8DN!6MpF5eK5U|^TaOg-Xn1rKf?~lw2z9D- zoz8`2t*X%eWX9(tfi&IbG&cgGq~*y4mu^RCO9e{3jRt4EW{sw0TcO+qz``Ow=1W+i z8l4~r>T@(B)3_$sCS|mlvqbW<%OPGl#OfDMT$2C@-v#htNNjM5O9k=OF!qT`;RC=f zmKuQT0O2{6iiM}l!nLE-n7MBThMNhOg+C}~LRhrfw}_u-EW-5*P|6PLvtfB!)lHjx z{F9HsX2kBEF}Zt$USp@bqjZ#OjqJfVx0G>U1CCfsob+9=h(V}{nPYpvorGQ?hbsF{ zj5aslwNW})31nM=|3+)GXeSVr|1O1m)&Vp-KKq5?u_M=4E?>cdYkte&lNk%pmYyw! z@Mle)*t(irl6QSu&zjkacbcy2nSByud}de1^UeHB%AU)6E7If81ofJ$e7>3D&9?RfCHPpG{#hcLnWHu-(fh#FI%V9&SGLQ5VCB0MquT7`Fu(sH zOny!E?+$qY#fj2dydKI@zPvJO?0j3=Dni+VPug}@6=|Bv1Q{Nsb5aqhK?d)h+3nBV zr7jb-Jp7d^H6^7&Y>%C|T;w|vKXH*BH0nswiOa*z!H|1t`zg08+n{UGTDfXut)>HygiMF7||%t_>m7ta=kKBE*NE!pB*oue?1x+LG6ul&4jM>G+oe2^MRyE;ite(X;tU;j+O|IxHp$axG*p<^Yxxt7g#|`r68KEet z7M2Uy936_1JXZ-G-G05Y%$s69k z1Z@VlA(EZ6-U+**#4l$`LZ7L~it@C^%;)$-%)MdI7tr;5G-D1{Ec;stp-XO#8YyE* z_`2F1w5%OFdD$~z=CjqWPG1c@V{hm`ke@WC8ikXXprrH>i>`}HYMdc=|W4zr!X83UuVgiCnu?2oafk_qd>q7$=2{iK)o2r|qc3DHG!2YbhIhwW;U z6cpfqH3$7@*s$ntL&xU-ZRoG85TXi`GCSzpb#O$45Tej=;p8RXEgXi(KrvriW@r&e zy32f4p?FLsEkpI7ETkO7LCfj~R8K?F4toNY0Q2f}Y_+vIG->G9Qz1D~lrDEgAwbh`~dYlIh6r__Y@Nc0P)>rWxtXUFQw?R*i*BaqY ziAdUsDd_2pF?Y9M`~$?+UnRACe=q9vAyOcJ;XRhbklLK$UY6pfx>jd=)pei%w4+lQ zqVsYK)~vdDnptv4KpcDXgaqmMkf6>nl1Rrsl0}eB1ENwmQ2yW^-}u>PydLdD&pFU;Sab|k~blmO?S!lZROv81#>f2 zU~-dvOIdFYgTf@KS9mMx!MH(%VsecqEM#gHu|<{AELN9Ti)2S~9j-~c4G1X$g$NGz zdC$t2-}{tLngz`F9)>JHXe^}_w>V1t@c5c-6)qiSMw_)buan2k5oGFaqJ1oC)jXBQ zqg(sn*5yy-H>MhvB#^^$g3$FsNd=0cM$~giR>$CEP--)4wQ)d6f2IUNMGV~&o0^nO z`|fp}C{?XGSS;`DSk=)r7%L||v8lP-4_nIpaACP0wwC+hqH;f6T<(WU%KdO@xgS1W z?uX0E{qU)BKU`7nhbznda8-6Cc9Oh~9C(4=hZ@ITSDt&O1)-54NCf?TB?HkL0ADvCSH zAri5?phW3dUB4>-@l}*V$bUGbl&O@(OoF$_?IEE;cr)hBR2)<0n4zpuG`D!Si$0qr zw>wMuTb|1_{;`}S_^q_+%ERS*bJvY@q2fO-u6)niV zg2k)bf%zT5U|-PQfz1h$^T+6(s<7P6U0Zhavlw;7ayLx{r z?Eh?G_jmU6y<%Z|ZsWFBZkS2-1}FaVg)+{!`j`EEJGPe~4ACdFcGap?!P2Id#^x7G zBjv=kZT?k&W-ze34N^KODXmgIS6%hmHa8tbSy{68J!Nfg`=-IJSNt?CvX#5mwGV9b zFE8@l@7DG8qg)4?y#;-}ox$=pb~f9zqrV@tp?g;VgpnD87uq%iZBMNTdipv#8-o|x zy9QDDV+Wpk(6>40>FV7v*f|h@1_y)vyMp#DC?8+?1ZzS{7_40xtm^OYQ;o{9kKl+i zWCJRdpa~(K#~`LdL$9Gl&76%%u)(!?eI|c@WmpX&?V4#b{3G{;l z8-iE6(3o@w=n2b_3^Zs+_`9mUUhLk&;Xw>;#nJS)_ijPulHV_%|GW12e{P!p_@Czg zK{bKPUiNIg?8sXV`a3su;yTNq?o&blWnAf<&#Ins*$bNVEUvrs4c(`&Jit@$?{427 zbbz+wXv%-6cgN{DD z2(qkQU|HLG`(6#&);?Pr!aW)SseQ0n@rcr+W<*A*m6vlzGo!*-_5GiuH>6 zmtNRi8#b(6S;o~)+5rAt8r&3qMv!HGs+$C6BSh_n&Te2e=+`dID@((Fcmu?cu1&!U ztJ;G44Inw- zM;C|>c+qx{z3p53+W`d}bSVkW;)M>&sp{(w7PkglJ9h>hU0c9zF~0QPYSm2Oe0{y` z-9bIZl(D>fF{tH7Z0jC1uI)BwtEMOcL8E+5@?bc^N+X6XZSLFATLv$BB!obYk4xAj z_&lIqJ)Uj9CfcPB_^ubaR(F;0(kA}4Q)SjDtt(+R%c- z^zY~;p=+!PpB>+u?IyWqpx~taPifB9n1=8<KoU$t@35rVb3amHa|>LSbfATQXLcA)FusRb?`ad{U{d1tcHrN3 zd&mVlfaDNpF`+fbhYOkcT)qMKV~O-|=(q-ZIW{drC#M{appRdL0_Id8GIsfdXU(1~ zQC0ytwa+Z~%VQY9B1u%*80N%$V5XO~AqBwZ;sM5?{9C6omB2U*{m`uSaGF3Vel?OG z{=`oRuo|8r?T$`FNa6bfVUqqBQ`ow!_-8t|tZ8@ZN~NW&>_qQ!9#Q3U5K;Pl{Y2%%=lfJAarZNI>Z^f> zuHn+yC)_V1`gGN5bOqno)zi63i7Tn!<<_7|np_-Yy5V1x^ ze=!hMg2+}fYDk5V{WI*EO%s~_?JlRJ|Gg5_nLl)rArvD=;5zvGHRbV+0j)CR#2#s_ z&>_jzwZtMe@<&m$7>rDU5&L#JGAbED&q%|52Z!zn9goOaf9;BdP$*=I4QG~<4dXR< zVRE1^O!b= zwk8W^nt)+pptGaC-7|AR1ChuEJNO2^m{a9BXd#5`Wfngz2%G(Wj@VHZ z@i)1xYm@k{fo`>U*Dc^iWXF>8zS9hy-rNGj8$b4a{@j6E*Z;zki;SItv5TW)9ey^w zd2!}wHV%o8u7|tmIo!rdr$m*3Gd}u`Zxyvze`|CVb_Xr3CDxD_i=Zse8Z?}gHPpa$ z<3Gd6i(~fV6CuPWz)FF?j4SC!*B*I84SNvxE`rp6U@Y_Emmcon)N+pud+L;J3 zHC!rk`@ML1f^3wTDa?r!EP>n-rbbzj=4#21VIBdK>p3bw_#U|-|DL?|CH!U;UJTu< zkKoTN!NPZKBu{gvPu#kG69VktuZ=>2&R_kD#J~Ri+I4Adf}kZO-Xbt{gi+m>F0c#c zkt_W8x^gZ?cEO69Dy81QuaG?X#3{|tU!v)$iPSNprpc%UHWWHCP0kEn?v#+NltGAO zP0UtnPJ0fV1^KjB44xxbz82Q$7}jYJ!x(HEEf7T1;lu{BhE zY}`M?p;!lis3Z}S*bvZ0M7C(XKx>Ao4SR@CsxR#H#|0 zSWEKt>r9#1!|nyry}U88+*+JBlYrJ>IbkxB*=q&TVG+%g7?V@-X1D?Kbxx+BV)(VH zb`rVQD$pfHwRJfD?5g}*CyU=6ZO#v=`cEm}x0o5i?^}G|Pd6wUKwPtRjw|!SXHdV^ zhoqArEj?#|Peh@u#7NY2T{6=yAUWC&Z zM~C^)hmYa%B+Xvlm$Ftw&Ss9YS0+shm0~j5OA33@^wDf9CuAmtDv)Q(_yPT5<0EZ= zeq;>{zvKzd3MpgveLWl}lyCm*vx=O&3P0UOc98m-aoAit=9-5cbjj<|u>{6)_9CxCa$L;weRueP`+0n_RU$#GC@iO@%4j7SUW>|lU>vkEYymsP zkV}=1LIr=0F(b3JYUyQAID8f{dOpcyr%43yCApAL%l0I@i+U~Vl1cYQ+xb+S1v=$N zLbl1jcmVQu?8ZcifjU7nJM1wegP^WQC>QI*m$4uAuy@&6B=&qDHk&Z3E`l;UBP=K? zJ_-Y}#ii})Xd>YwXWfBakQ#KSRLU{5MrfACBC}jGQ(Og_*eXEK%>lEDJDPTiTnzpq zMJa^WHpt(>z*hY0b+j^)x*`co`~SZQDy_G-i4<;@PBp2fOwsCt*(fr=DYGPSiA76A5hp5BwqlU7P$SkoVqy)Sr52k*3T5EdiNISt z%wp5bLi_Xsh|s>7YMg3&sR^o)W1SA;5Yd4vaI^X-Vvi*?Ny`WzatCY}}1QIL{4sGmqsN|jQMu4WtOSWA%8 z=L(k%E?q$5chOA8&g>4)8z=4899xw|z%Ebd&{`~ki-$iVd||Te@bb+;)Q;Ue0wFll z=CCH^P%KVcT~8yGsOXP?6HqkjLWfL<^Jdn1*|}JGlw^IKlu@a7q6ne(BvP1@h&~uw z%Ol!;f_X%E?sSw3DW4(NBOk1|9TQ;?e;5`nR_6^snB))|@G~vy zEAY11#(*7Oto3W!?@?>*)WL>%Ev%GA>JkI^By?#xOEL(86ay-4UAB=p|4d^^QsA=5 z*o{b~Lz5Iy?xcga)NUoo_~I(kW|8O250q2uABSN!G)1ruf>268Gcktwlo6Ly*Ej1EFC+24I2@4VoM+NbpN+>^j+9N}*`U z6bES@&rHz)px*{iUkcy7Cv3xWy{{;BR}Q>OVXCFXqQ2^+ds)FwT$N+x#81R@O1xBL zT&0CSQCe3q2I{+o_&3MTb5dLu$q`FQLP@^os+sh*lzZ6mtngL<}%PO`I8^bzAE|St@!>7w4d1Uz3com`0 z_EL7+PXe{z{ozG$GTkNE0(_4wR|++W0@sGz5kC8!$I>IuBs- zEXg9aggT`-5273cA2l^RiZLKs24Gb{yZSfBP!y3km}^6<{NRSpL8b{Q6515%rcBq? zRaiCyp(u}Wt&+OUY6(5~=TXNgS{q1*YDjeBuYX?O)AOh@CnTq+!kWU`W@cTJ11Tcr zUsO)f^nXUo!!MkOhdWdrWfFce$1L_u#1&`!X|a!RIsrtr)wtD__!A#I%&_>Aeq4i2 zL6qt1SFc@}KXi)aY>)q-sCN?FosK`YawEdrpJ{)oQ-!9)zKyJJ3bKdRtqXRkP?r)P z&R@4~e(4XZIy&UT(w}1T1?$!=DE%Q|%7>*tt?203y0u4zyJT(WuB}^_mHw(~7yggC z=}>W^SpaM7r$PC!xvMf^%cteRp2EefTUQ!#PJdX=ncdBg^H(meTUR)-ucM=I^fS+U zieT5w#E7(`!F!mlM0RG4Dne==Zv|pU5ryKJ3xjH%LG&r1K%YDCKSCcGIk!1XF4a(dZ>5Ahs!1LZ1Yw zz;?$Shp5>@1*w9dJFNMqnFTK%RduBY00{q-^jp`u%{V1}%nxpk;xz(}Cauu51ggy4 z3`XekgBs{ph2degbARnh{rKpyv2&0|uQsO<>AG;iYso&;vMJqmJM@0Kz?I$v%aqY2 z_WTqH(w!XC!6cK&#eHC+Bo8|0YOcn@6Guj_aA9f2#+fxLXo|ZcM6-P1&cjMC`E+2r-5H9@C%1OA3OAR)~&s))DVNI z07z9O-im@%ZACI*=RGcguZ>E%HoA#C&uVP+#mN`35Dl}q23g$r2XBuZ9hRUBIMnku z_l%z!mA^98h@@IZ@(yR2lcsl=Y>-b8Hw)*!mkRv;L$8qgGRHj`Hx!^rNx?Mw&V|gEcS3wdC_4L ziVMP5z}Ux!UPJI2I=V8r;M@%)P|$v^TztaxXsx^Sts7bZb7E+z*ns4G{EtIV6q(G-iyc&4dTl92thUcY3X z^m%KX77VgjE25v+-39NWt&Z#68_$3GCCuCnp(zJt@h@K%5i{&tn_T>_z(`09$gRba zNJQtKN%goetz}1!8rL4l7{bpMX=j@vrBcFFkW-R~LZ@nSAuUSgvT~9wPDj~Bq%@iV zr8k}uHOwW|hO(0?qzk`i@$EOg#0eV0Q`nI>SzV7%F8|@)u~VmPm}7E%Gt^sNa&hTQmq~8PlXs zo&ZTPZ!EULEe}r}!sdiVn7v&DmL}g|u6Rg``Z$;1`huU%=sr z5j6=xRU1u#&|n}$8LQ6-+++@Urps5rP7uBdg)2pynVT|&L}@g^?2dm7=zF4|uQsKU zpZgW*5t*G~fkeC>{15&;15L$LUO#>7+Ohn>6j_pCKyrqz$=ROb-B=JT#X^YcA(y47 zgG@@H0Kjs$d}(e{MrD5FO{9f|=@dz9s8?91lk6xr#;csJ#>ODHn2p_wzF%;x#Ojp# z9}_zkkutk-c?D>FDss+J!XXuJ8OEjqCRxcWp&B6Yv>?5zz76O7lZ(R}ZVEGwQ-jL* zKcB5CDwCV=MN;rf6U;APh6Ix(nBPV+Sn@`GR6bY|jAT48>@$D|Pa4ZXJ~U^MgVnwG z%{xU@&Hd0X6r&lDKEVy^cIo6k?z>hQ^os{ z!GIpdSlfGB7^*gVhyzk-{$^XX`5Rvr50AKJ5C3&f!Qs4-!yKI^~~uhBL8_z_Da*S_n$%kSP!zb08$k4G%!# z-~mRDrdHret||H*Aa2{gygDV+>dKS^M0pdu-kdV(5-3Y{hEecg7_Vt(_SoxifIMcJ zP3^98qRD1SADKA<$rt)7r95m`?(Vg?NX{vtdo%&j9uoBih+r%6LS*XHfW+)>t$ni# z!*3Tqy$S(IEbsZ@*TBi>f%xVV)ZFx+rxfB=ybRO&mO^|YCR!Dlct!<~2k2Rnxrw=E zL9P;C*0TKRv6GRF5Fo+Jzm+DS0@W#c@K@l!){tHW#f=KKJP@PVnuXR%)%Lt<)|TZB zdJNKo;2tlCl2rtq@iWaxkK(@;dG0Q}cM&mhg4B?GgOq188)wRB_~p1t^4f6){nzY%p-ToiPV z`+OxaaTIWDxcq}|$JM0YM8(P{U(-zWUU|D>DwfMhfg0xRDU-U0z9~>=#Go>+#=?Ba zU8%qVbYZS#1MUzC*#&uO7-4<=+ z{11r9lY**3>`AOhO{4}t7=by%>Vi0r-L4MF%az`=S~`hI9|-vpJB0ONbN2ADn3*04 zJ71zf`=RquL~Z~JQ30_hQ+*o^5tdH`qp6U*L0ku9S0;_b%=tiJWY{Ev9!>+Oik%(~4}U;{=$?C9zPNZ`xSK=L_F`j<{Vg>c0)0aGhg+8~Skk)c5dc z0)^+e{wIES;0B|DRkE{n$;#D0iT__iulbLx0@NCAU~}k`3ztR%vFqWXQt{Cy$MUq-^mex(t6md?>g7E{9VbabGa;f9MOM7>;t?&|mi6h<) zM*^P@y#TCMU>WayE?|)?rAr;t(0q2B7GozvXG}0k9-Wh9Pu-{I7sqQGR#pw zY3tIX^@76G7KLE;q1R%4=ruZa7LMn4vPdRdh7ugbnV0ZCY6n8l*$~K1NdKW~XNr?2 znVXL2p{%?S%Xbd2~~_20Drpc=z-#Q zqs7sWZ^LiI+7~3Q&*Ll@LGQkksm0O16h8cz%4UkeS2BXB-Ea@CyGtz5F0^TGL%x(Z zJR1yxua)vB*TWorhg6%xt%g^&_{I;=kFp&6vw?(MoAiHp8MIL-L46P(1Xe2SQf=w;}jcQ?@({c~smg-|kjJyhLxXB;bKEHPN|2$C%jybi`Js}`>_Ozm*;yKY|pYy2awf?B+!-J$g& z)?06qu{|Tx^wy~@xH^*0S%$S5Pfv~!{0$0hF?<(I3!Q&*nh;W z;{a@_&u0?b2R{o>0Dt=TIE2|zE`{kCnI=v&#(G;SLc6 zapQh!kvu`sqC(1Vz*ZZuS&N^W!u2BU{tV1q$YhnU;9uSp6Lw>gd!E4BXZ!GH3e2gvi8^G+bB~hCYRbNy!b#+a z|6zzjNee(${IR0=)KEN0Ki<+Xrn@3e`Yo-;u7qqzRw{SNTlXt5l>mw>N+n55b1qXR zlA@`lWug*Yhm*IpR9Wn3gAg+*QGmOlHO?A#wb;S5L<-1mP1Hx+_#9vfgb5@>BeoXO z$M}gM$dMApi*VycMaOF$U*;OyA?= zxwRlq!Oh>0H!q>e*7+wYKO+*cGP8o3Fq>oOnwSt$bmckW6j8$JutJAfR0~LNbmTS*>7H_<;jK<7!X z6D$JIidWBOv4|PYLX*t2B8!vSuG@T~As+@F^a$y2ZeFqDEFor@@>P*VQGSrLq$p5f zV6@1PRXY#BOjBplmZSsm_~|#;ncgc4M)D^sq_-teeQMi|?t#u{cl508+Nn~hX$;+^ zPMLQ`Bd&_OR0~~+KRaIjf184x_xxL>!}RO&Zyzjt^BI)N;_-|58*kJXM!v#x7n6Bn zuDKa=wc${rjm4`4wy*Pr>gF~juKHA6B zyO(aMyKs%fGlT6i4f1;iB9|BLr})9S{N*zcCs9HnoMb`q?7Jy<*o2o!vy7Eb)3JvK z-fqzM-onW%h~73BBOw^xTV-CSJBhLI8DO~(m^vme3@R^C7}g$RBpCy*THs|PTYOpO zfDM>%S#p@(Wl8A*=T+e>%R@iZ!{-w#jdCnqWB2L=`~nZw12>c(GJ*-y&Au0av?xxU zKx7t;C0>!R(_<_ziQW=Dm(}X34LsHt{pJ(zNjzo|wEQ!WlP!G)B}Bx;?pV;DoKnRT zd7fo;IghZx1#%mEQfWoy?1_c8itW#;PL~WYyUA z0B5@5blbq3cac+=k<4!@oWEGSFq;2JmBNiqA1wsTAZ_C1CObSV1dKXqrxa0%4xgpm zP-2T_+$}lo2JDC?8LQ`4hmkrbzO;38qj0LQ?p3HlkK9}{^<*i|rflbFUt3dW__eZg zrhRSAlHu3!d*!3X0Vr>uSx1HV`;$j5v7gY&+)saiCnotR(@1E~$4QxwbK>H)QLoWu zOU_(>;zFwtI)l1z2ue-6(^{2n*RK?+FoxMoYDZHmxT{2A32uLMGtTqCzm~j>#VJ~(8T<67a(3F1%aK-3yJ?y>!sHE==GCrv9Wx7^FX^J}K1*!@Dl_ zJ!7PJ0s&Zu4($%I5uidwo3p6ksL`vbx5wv0yV+oJzOXi5_Izd44Nlo-Nebp2_atHs zo1t^Js7U-3WVVWYh<&F4SRuJG?Z6HiKWYEr{-k!l>-!Drn-{b^8mvHhQMOoZ2+%;D zg+^a(?;1q){XpC;8+Hv0cJ{1m?`_{AD!{C80SkQ#Fb6*!z!zHJynvh+R15Y}3RFvJ zP_wbBg=wHB%yHJWur#ol(D9{vsg&jkwNe9Q>hkT|ySp}-#_7qOr8G@l(cZf$ta=wc zjEG2XXlfE}6JGuRqzOh@Gf0BP+_havH0VC)n%dab;iOI9{TuX4p)!bOR3mTZ_kAU0 zIikzJEiDGVkh;*fqH#-Ve~HPIEK2M^49%ku$rV|L(gW!G+qa206`-Fvb{nAEGrG3x zF5byK&GybH&|P0iwS^3L{eym-lFk`?4PqAK3DK6|7R9PW*<)%9VL7bC88A(s&OGju zbe3LP`gmO5L>1^K)fZNVWV1ZJH)agcxQTl)xN^^}(Zf7?`f>JrX4^|9&*6`ut&K%E zV=Zj~myt_$MbY{g41`&a*UsYqqMk^g3j>Hr4OmX*A+w@}a79ux!(A8rPITqHJ(7R> zFrt8wBanh5IxJQxie*-n695RrE?hk72U7ti?bgSih^Phs zmyB%`!!56n+h2*}*^J-OsN}FpWXR_azvkHa6SzPhH3NwTv2xxobE5dtAS*a)mwMV4 zhVxfcp|jSk#5@_ISG_;!0y_pd@;VCiTR{iR8ajZ zt`^|*2A#X2)BF>AkHhD_8JHz+Q-^T*PQ=0=KQ@{Qzb2I88QiFntjvj4z-5$w>$v}R zXQ+q5=O7DG_1n$RN(`mC8AdiIHbpHp6n@Q^3gY}*QWZ8afCaT;IV?EUC@SW{A~9#L zr{d(S6fjEcG%IlciO`w6b#chsVm2Q77A^Oe*io&hK-h&y|G*QofJ!l?j2}}XZ*unk ziLtCxMsL6lgcNW5)TkXgJP;r-%!9k9o%(|gd*fsmv@iIzy2@JOj#B68^<<2ZrB zZy8M1gnz?v{)(nl93%OR}P9RZ82ClBXlt4DggR`v5x2qQ5!f!P*X6K37IYt^5G@iS1_Nmk(F*Pn?r*UEJ}Z}@e9xXk zD7}}7kX5S48VQ({9bmKo`%K|yv&;Z7IFY;YY$?rJ5GYze5YlT4l5*7V@>jr)dR1!jf7Z9>Bs6@ylRn!>?Uf&3BY}*I`b*Swhlx@QW10{G)V>Aga!+8 zQf4hnGG*MO=Dj>*2_WI|(@W2{LN53V1M)se>K2{`G-o}a?+=WPyeBE*354&47A)M> z^7?2hd{ieP?_ie=pY~#_=-Y?j>acc|ftz~n(VbEjOZi$KhTt3-y(qFSeYA>dBpYAk zKT~!YDoDyaR1HN$VIBf&ib<_b!Sxs&#x+Q?twd??hJWFNM*Ym)s)$`cUSt_4Q3HLA zKNG^8-~U?5YJL@CeKM zZBHrZmV7)O!3g2qCr=^QzWDip{8c1Xe+-7j!fZERAG>*+nQrQDQ;B3b)ht}Ut;u#syA$1tB>RX;?_M2%9Nqzp~`nM>&OF3q!7WD|~O6vrBeo%Ir_x=Ipv{h*%Bf8M_)I z+tpUZUtwlG5GD$A<1y1;OTuAw$ehe5$l>35Q$(3?=}40LsK6-0%n?{dx`4d)!aJ8! z4J?asv`I3mWmRoBrm#-@6Ezbuo0+Aiph|RzSeC96ErT6FkXQ*Z>Sib}rE>#5Xc9(? z*7t`sI+XO*5Q-|wrkH}!n^iovuo4L$V=OHZi4wL1yK1#HiCCm?QaFQ(NEFTdZ)0BJ z+fxux!3FapSKtN~Vh2|3zL^wxPm-0%^jxcz4jN@A0CJj$8K&^v8!%+0O5Jr3;=7ap zDm(Q-xO6H1_P$gIGgPXH78f_-0&ywk=2`E+2#9{6fBV!q#5=mLV9a zwstDAmcYwZNUK#hus$cmJ%4B~!m|C#c^_{{k|A7<5hx=H#dceD-Mwuw7A35(xD8jX zqmflINhuvLA%U76Y|;3)l(}(@N-j~dy!{_!3xX}TMS!M&gD6SX+)jl^s{Vth)t|!} z5qfaUz?>`M`iGa78Jy4-j>N2*%zAbl*JAj|M<~wj2RCPS^id7YIsgrEOkw6$Fxq0#a)Xo z)^0(>l(Y|?3%{a{MpbyTW38JRuJY_Cl{DQ{CxxbLRIG=LN6RR2I`)&;rLe6Zfvqnq zf{?BVYK3|Ma9Z0!5JIkqfHvPX;HaDu$;HjTFP@7YsPNFZsoYCKdEdOlY>e?48Z3vaIL3 z3PfT=_R^BNmr3~4SzwEIfmjW{bEa-dn|cx=9vpZJ)8Vzc-?e6a=gixhHt(Iz>h4JU zXwrm5?xc&nlSXc1@}j1o{x|C$O}&ss&b)UnN}qVKJMrQ&CSIIAab$%P7q@!RCGyea zCFMd}vbZ#~iI4j~0-D@zlu8_VBddOJ#n!IgPSs|3u(N-2`=-u%w4((rosRX-ThTNtEGSJe7J7r z;|nb@QUD>L6q6}sMhPjV-oPMJmK4;2ij-kNsIDP3&Cd;N>gw)pA4H_f>i*7u3eY+> z2wm zkJ~{6ALefC`q!&Bd$$D7cm3<=-og6kyE+GZksRQnm=~)Q0X#opg*o1d|Ly#Wlsji| zhA5J9J5DH^8J-9%@f)4O~+U-1-pz(D@915*MQm%Tijd*=MzYA0K+ty8Ap^b*ougsg#lfRa45P64S-w zh^_t8i-pTyFycJrHde+2Vj~Y>-Q|kJj=p3B;KGS7AwD&TaEw2hzfh8~XOE3|NAZXa zH&RB-1KI^+cRAB&1C+nv5yX2vdNFOgKljYy6Ier84u@b(zHU6$eP&j*QFgtA&ZEDM z*wkdtE!2dr5{+B-oY_eT={mQEO<`^T_C#83F^ZSDZNke~Bn4lFD%fBxi%kufvUv4o zc&|XHYeOMI$yvL9op$capjcDe*OB^kYPtM{=S`nMFaD7*JPCer>rMS9$-^B#{Z8@l zUg#y#7)J_7dCt(6gHS6u2-1^76rYqE{82qhJgfMT!3G{knGRUb_l>|o67_x@ETiu> z;P839*4?aY4=6{QA%=B@w@(x=o(BKDb^W`-UwYa`4D!jE z-=W+OLL$ZvzMemRQJGjh$5QL4l%Wb~K%-Rq-olBmGfBV<3CE9$H3mW@y!>)EDJONT zgip~mXA}lkFN8hcjq) z9I8(UcIdD`6{JXG14})RE-scv5jhM)GxuDVe1;N=mU8V+cxLoHh1-}_wwO6<3)mIS zk*+w$pN$a}$RiI^QYr9nv%?3(c@dMqkVJw1OW9<-Q9dXpIf5&u6uW5r7;|AXfT|yr z0(GW}?Geo12}p@Yi>%@CW8Y^!+Qx`uAYONw2jada2b;uYAjqGFO)T3aM2cLLs7?ZJ zDzG?NTeYHjj*WaX_W6*FgYi(Q86HQ3UDjlAK%_4y>BU$MS?6W!k`&njstG+ADta&D z4L<2vPUsa01qgBctX0&A6y+5hMK|93K&-pQ1IBkEHUFjlX}zhU;W>+0kN|bzgm~3K zXDd=j!Bp!@Ih;F|8drjAV2{2#?GfQyAxYJ`G|8vLI5pz8rHuMIR>#i6BeC6fEt?cl zY{@-kEM634uc-b{rvgLa35QCJ1V+Uv38glX8L9QVk|ldLxNO5W(y&}W5oXdd;c16K z{2_ECC~;(L=qOZ*u^X?$C_u;IF(g`?3B3+`zhtzX`Ye>}l!(~!v~cMBn|oX;D)cOc zx7@*4ULFV!Q-o3;1%KneARZ>Ywb6@BzY@Ak#lNcsU5dRtD$XY2IUl+FB&whIJFJGO zouBM;pj`s){F>BKqb}u1=G?M73HXX4QG8z#!S||jNiSzz(ut4p?4Wy6SUk`U#Y4GQil?%PWjtbivFq6r#kF|#4C)7&$a8wQ z-uMCW=kldZ*zu5&xhg7{_rW>WU_RFQV!nVQr5N^?Lm&mhR7L(t;Y=lbEZ#M&#JtRC zVF@WRiyo!kx&@{!Nt-tQ!I7~yPdH5wJRr4s#s&EtguBfO^<83rj|(opd$@RZG=)e` zV3qQuobK`v%8isf-PMW$sLI%+0e%>O`Hb|FqF$e6q`7DOlf#Amd#U5TJ(8_l&oy_d zZ*-%&S+W0!vDB`%#z?lz7P@pUZNXC4PcX$NB3d>t^aC=t!J%52Ll}L!pcb()-r1}y zsna)h?i`F|p5Lx<+y^5g+uis1zZhj{Rp@+(ZdJ|AH6X?bTYs9I*W9xrfGxWX$5qPB97(yU!>|J zA8uk_k@K#6wX^r1cC`2I>hgYz@d28uuUB+}dvg1#h5In~eebQS2aBT@QF4PF(Dx2o z2`{k*!2KF$D;!E!v=mm|h!YZzr`FKO=!Kz6zy>V^JRy;$$pPi}`g_aEbd)pQ>7plU zu4v~JF2nn21XUWuozXF%VaeQ9J6wxApvJ+SgJF&3^Kag|j7)?Jh5hKoy1#JpTK*bB zIuG8uelpY|-?)j+Ir1^Cq;czDPq%!f*oN<1G7BvD2GFP{+evCMl`?gxv-n1rQ(wV1 zPF@lY)m(oC!l%$UE)9>E2J^J@vC(;a&};Frq>1q=lrUk2qIw3)H%Mea+H9FtDgTV? z6)h$bhS6qb#tJkB9DnoOw7F&}t0*}uWtJ)|oLIxx-tQ#-)GuRK!i2`#(Va3g1353Q+hycQZ_Urej^Zuu*Vjig@fw#K45b`5sV^De^aE#r& zo`35k^Mce0nT#iB#NS%QhRT zpcZ!N!!&YGMnR~=Y!TVUDR6i9#;%^uF#btO+^S+mHL#0uP1G@IE4K1+1yXy%n!_n$ zt0w#wV@PM+QCBWzkCHNNyPPqTP^L{u->LJg!PU}i;miYVFngYyviR}6ZjFpPu`hcZ z?}`Diqz7&>=1H(nWv$Xpe-j-u^m&-u&WSiEdMxkUx8KP9RkbuVFKljUSvp_U(wn-m zziZ2u&i)mH{oQv=jC^SVO`_jm5~k=2-6A($kA2a&6-w}CZM6uDK>`k87va z3h^wffMl!iGi4KXtai!yJ-f%wU4{(;efW?I3oY5ZWLDuV3o>RQSFwfH>f9NMUmeIF z`YvOhR;-goZ|kHHs`(6lC($+=aRD?s&_XQ9zm^o#=J)L9R#Z%lbQSdOra{Stygs4I zR6z(Y)~7H=XhP^?H?9=Ey_o@>&Paca;<&TCHmpsoiV9oPd*WUjaVk{3rGWrTx${(5 zDE~S9p0-fltOO6^e$DOLYT4*Bnjby{ge0pxbl!U^rDs`<74$2UliT$*G7J12*|V@i zq`Md5mE@i5vitJvfR2<>J78H7|H&K7S3-(uVru3IYk#AzID9GN$CYrIxQ2#Q@L5P{ zL1*AhdZlunR_N3=tIY}CWZWgmiM)=GfMV%_>!AzLz*5mcht3y9j@-I&0L}|9YS7Ow zytmV-K3NZ;sb|8Y2Gk6?xelEVoe^PWb}zhIT!YlGctN2t_=|y(g92Fm`iw1`nYafw z9g0`LFmN0`HO+IaYiU+!Wj`W;rwR=Xaw|h%g*gt{kPxy_>SIg0M$x z3M}Vt^P@lDc=g%( zFDecKN09=;bOVSmdhp@7&MHLR$a=OpSyjfHorC?5%ZlrQ|E1=j>zOFyp24E(!omIW zI^>~wFDed@)+5oC=!WW`6czY-$sFA}%(q%!?-LiTXnh$lvl$Y&olLTWcOMPBkG z@q~e6o5j_^(oy^r-D*A%!y@d7Am8w3dAD7oJnIyp2?_8FoNB1FK;>e z6Q(MPsfT}(Q%fw}0L~Q;d`($InLWLWdJF`V^)#u#b%15<0@PAWM707waV?XB2n%Hr z3(H<}rR#9OTkx~)Tx@1BtF4s|#Ui9-KxgX*>*A$1gcbipfD%t~v{7x1$dyR<$PZu2 zqg}1{BwWdKfzos+2nw-O)+w{j5FYHw3xxQmz+2%W4ImNA?aFO=R&Q1R_^Y1d41G?i zVB6KdeSEVv^lqa)*50ePuHQtAUCI)5`q=ZhA_=?_?#ZlKbUHIzt_@vgAH9a?-QvyB zG?Aa39K;1lXJ~--+R%Nf2KDSTI z|2h7E-ag(P*6CrHU@$rx%p2-W_#4=20z$8b71$+kp0Q}4W|&+eS}5`}#9Ey9G)>8$ zgaAba8IIxm=EW$iHb>|*vQ-_$rGviuC4{ z(E{7zqZhc0!Hvlp3CL+YeWnAM2NBmSasnwsr-&A&*3yrCe01GHQIqzx-rb2Sm_(PV z@Y?95B=;up9C;;8_L;4aO2gH%l$=&X0!lzkJ1sWPGu%aKvVuM&j{FleD092D!f@h! zg%kL~ENKffe*T0qcHxvjv6bo*P{io(ATux|gyo1g)8y3THvLrk&I!xS7VcQi`>Oce zHo893Y#ipV@oA>B$o(+I&0{=Mk$C}_b|CE|gRo>)7%jZ*&M+H@#3&6>$E7w5=>fSJ z_=JIga)>vST<}Hy+R6B|JXH&XVRY@Y4Ddq(C z)ruX~>^}65x!ds{SU500dmKYou#bm?CyZu@(8*EGev3l!!nAvyPuOZ5!)F;%B@q(pvq2}h+?>#B2Zm8awGrg z+5FHUh*--cHNb`SBfV}e2wh~|<8#yH(%sMNAdAqU!HbLFt9_@YT6*D>>b~F(FRMtp zJ0PdT7Ku5s>IQr2A!8+uS*_6}VTlQaKs_kGp_y+KOBNNu#vn}X=-#rjzx~y^EdAGEKPb;f3rl^p7?8^Ps8w|>N}aA^ zDF8K>@y$XNBILrsX77iMU>(j?+gjqJzFxP$Gzutq(HKib`68~+!Zih3B4%rZ_n6h zR0fqd2C#0j><{% z6IP7L@4JL-9nZ{k8O5V+MRy~?6{VV7j+&mbCYTL{N_BV~D%H{hzbxN#>ciL;Yv#S%guK@a68LWan9_2@z91D{nFdKQOslR`ST)7aao<#Q<@eMyoN8JzTEpmq zXp0UWlpdi&v}uhK- + + +UTF-8 + + DacDisplayAndEdit + + 墨点 + InkDot + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + 默认值 + Default + + + 编辑 + Edit + + + 是 + YES + + + 否 + NO + + + 完成 + OK + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + 提示 + Tips + + + %1 + %1 + + + + DevOp + + + 字高超出范围 + The char height is out of range + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + + + 错误 + Error + + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + No73 send DAC Data. + + + + + readB6Req + + + + + readB6com + + + + + readB6suc + + + + + 设置读写器密码成功! + Set reader password successfully! + + + + 设置读写器工作模式成功! + Successfully set the working mode of the reader/writer! + + + + + + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 输入密码 + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogCycleprint + + + Dialog + + + + + 1循环范围:0- + 1Cycle range:0- + + + + 1循环次数: + 1Number of cycles: + + + + 2循环范围:0- + 2Cycle range:0- + + + + 2循环次数: + 2Number of cycles: + + + + 3循环范围:0- + Cycle range:0- + + + + 3循环次数: + 3Number of cycles: + + + + 6循环次数: + 6Number of cycles: + + + + 6循环范围:0- + Cycle range:0- + + + + 5循环范围:0- + Cycle range:0- + + + + 5循环次数: + 5Number of cycles: + + + + 4循环范围:0- + Cycle range:0- + + + + 4循环次数: + 4Number of cycles: + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/ + + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(中/英) + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 7点(左横) + 7Dot(Left-Horizontal) + + + + 7点(右横) + 7Dot(Right-Horizontal) + + + + 9点(左横) + 9Dot(Left-Horizontal) + + + + 9点(右横) + 9Dot(Right-Horizontal) + + + + 7点(孟加拉) + 7Dot(Bengali) + + + + 32点 + 32 Matrix + + + + 7点(rf7) + 7点(数字) + 7 Dot(rf7) + + + + 21点(rf21) + 21 Dot(rf21) + + + + 12点(新罗马) + 12Dot(Rome) + + + + 123456890ABCDEFGWXYZ + + + + + - + + + + + 查字库标识 + check ID + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInputTxt + + + Dialog + + + + + DialogInsertVari + + + Dialog + + + + 二维码: + QRCode + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + 变量2 + Counter 2 + + + + DataMatrix + + + + + QRCode + + + + + BarCode128 + + + + + 计数器1 + CNT1 + + + + 计数器2 + CNT2 + + + + 随机码1 + RandomCode1 + + + + 有效日期 + ExpireDate + + + + 生产日期 + CurrentDate + + + + Class + + + + + 计数器3 + CNT3 + + + + 第XXX天 + XXX Day + + + + 隐藏变量 + Special Variable + + + + 数字个数 + Digit Number + + + + 9个 + 9 + + + + 11个 + 11 + + + + 10个 + 10 + + + + 3个 + 3 + + + + 6个 + 6 + + + + 12个 + 12 + + + + 13个 + 13 + + + + 14个 + 14 + + + + 15个 + 15 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + + 4个像素 + 4 pixel + + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DialogSaveFile + + + Dialog + File + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 预览文件内容: + Preview: + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 请输入文件名: + File Name: + + + + 取消 + Cancel + + + + + 保存 + Save + + + + 警告 + Warnning + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogShowCounter + + + Dialog + File + + + + 米标显示: + Meter scale display: + + + + 目前循环范围: + Current cycle range: + + + + + + 米 + metre + + + + 剩余米数: + Remaining meters: + + + + 循环次数: + Number of cycles: + + + + 立即重新计米 + ResetCounterNow + + + + 起始: + Start: + + + + 结束: + End: + + + + Dialoginputpasswd + + + Dialog + File + + + + 修改密码: + Change Password: + + + + Dialogmodifypasswd + + + Dialog + File + + + + 修改密码: + Change Password: + + + + 密码授权 + Password authorization + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + 0 + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + SelectAll + + + + DlgInputAddr + + + Dialog + + + + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + + PowerOnCnt + + + + + PrintDotCnt + + + + + PowerMax + + + + + PrintMax + PrintMax + + + + 开始时间 + StartDate + + + + 结束时间 + EndDate + + + + SuperNodeIP: + SuperNodeIP: + + + + edgeIP: + edgeIP: + + + + + + + + + . + . + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + 警告 + Warnning + + + 无法打开文件 + Cannot open file + + + + 喷码机恢复工作! + InkJet Back to Work! + + + + Mac:%1维护时间剩余 + 维护时间剩余 + Mac:%1 maintenance time remaining + + + + 小时,喷码机将停止工作.请与供应商联系! + hours, the inkjet printer will stop working. Please contact the supplier! + + + + Mac:%1维护时间已到,喷码机停止工作!请与供应商联系 + 维护时间已到,喷码机停止工作!请与供应商联系 + Mac:%1maintenance time has passed, the inkjet printer has stopped working! Please contact the supplier + + + 喷码机维护时间已到,请148小时内与厂家联系! + InkJet Servicing is timeout,Please contacted with manufacturer in 48 hours! {148小?} + + + 喷码机维护时间已到,请48小时内与厂家联系! + InkJet Servicing is timeout,Please contacted with manufacturer in 48 hours! + + + + + 当前日期: + CurDate: + + + + + 正确? + Correct? + + + 维护时间已到,喷码机停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + DlgMutiLanguage + + + 界面语言设置 + LanguageSettings + + + + 中文 + Chinese + + + + 泰语 + Thai + + + + 英语 + English + + + + 波斯语 + Farsi + + + + 土耳其语 + Turkish + + + + 越南语 + Vietnamese + + + + 西班牙语 + Spanish + + + 汉语(Chinese) + Chinese + + + + (注意: 选择切换显示语言, 重启后才能生效) + (Note: Select toggle display language and restart it to take effect) + + + 警告 + Warnning + + + + DlgMyWarring + + + 警告 + Warnning + + + + 确定 + Confirm + + + + TextLabel + + + + + DlgSelectInputLanguage + + + Dialog + File + + + + 汉语(Chinese) + Chinese + + + + 英语(English) + English + + + + 越南语(Vietnam) + Vietnam + + + + DlgShowMsg + + + 警告 + Warnning + + + + 确定 + Confirm + + + + DlgVarLength + + + 变长喷印参数 + Variable length parameter + + + + 头部长度(m) + Head length (m) + + + + 尾部长度(m) + Tail length (m) + + + + + 调整长度(mm) + Adj Length (mm) + + + + 总长(m) + Total Length (m) + + + + 确定 + Confirm + + + + 可变长度允许 + Variable length Enable + + + + FileLogger + + + The directory and all its contents have been removed + + + + + Failed to remove the directory + + + + + FileTranseceiver + + + 错误 + Error + + + + 更新失败! + Update failed! + + + + 提示 + Tips + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + FormScenedlg + + + Form + + + + + Last + + + + + First + + + + + 重置位置 + resetPt + + + + 另存为 + SaveAs + + + + 保存 + Save + + + + 新增图元 + NewItem + + + + 新建 + New + + + + 打开 + OpenFile + + + + 删除图元 + DelItem + + + + 编辑图元 + EditItem + + + + 插入图像 + InsertImg + + + + 场景缩小 + ZoomOut + + + + 场景放大 + ZoomIn + + + + Next-item + + + + + 预览 + PreView + + + + Prev-item + + + + + Test2 + + + + + 插入图片 + InsertImg + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + <html><head/><body><p>[<span style="color:red;font-size:12px;"> %1行 </span>x %2列 ]</p></body></html> + + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + 主窗口 + Main + + + + 图案编辑 + PicEdit + + + + 打印设置 + Setting + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + 网络管理 + NetSet + + + + 电压调整 + VolSet + + + + Save + + + + + 不连续电压 + Discontinuous voltage + + + + + vol0 + + + + + + vol1 + + + + + + vol2 + + + + + + vol3 + + + + + + vol4 + + + + + + vol5 + + + + + + vol6 + + + + + + vol7 + + + + + + vol8 + + + + + + vol9 + + + + + + vol10 + + + + + + vol11 + + + + + + vol12 + + + + + + vol13 + + + + + + vol14 + + + + + + vol15 + + + + + + vol16 + + + + + + vol17 + + + + + + vol18 + + + + + + vol19 + + + + + + vol20 + + + + + + vol21 + + + + + + vol22 + + + + + + vol23 + + + + + + vol24 + + + + + + vol25 + + + + + + vol26 + + + + + + vol27 + + + + + + vol28 + + + + + + vol29 + + + + + + vol30 + + + + + + vol31 + + + + + + vol32 + + + + + + vol33 + + + + + + vol34 + + + + + + vol35 + + + + + + vol36 + + + + + + vol37 + + + + + + vol38 + + + + + + vol39 + + + + + 连续电压 + Continuous voltage + + + + 满列电压 + Full train voltage + + + + fvol0 + + + + + fvol1 + + + + + fvol2 + + + + + fvol3 + + + + + fvol4 + + + + + fvol5 + + + + + fvol6 + + + + + fvol7 + + + + + fvol8 + + + + + fvol9 + + + + + fvol10 + + + + + fvol11 + + + + + fvol12 + + + + + fvol13 + + + + + fvol14 + + + + + fvol15 + + + + + fvol16 + + + + + fvol17 + + + + + fvol18 + + + + + fvol19 + + + + + fvol20 + + + + + fvol21 + + + + + fvol22 + + + + + fvol23 + + + + + fvol24 + + + + + fvol25 + + + + + fvol26 + + + + + fvol27 + + + + + fvol28 + + + + + fvol29 + + + + + fvol30 + + + + + fvol31 + + + + + fvol32 + + + + + fvol33 + + + + + fvol34 + + + + + fvol35 + + + + + fvol36 + + + + + fvol37 + + + + + fvol38 + + + + + fvol39 + + + + + 其他调整 + Other adjustments + + + + 整体缩放(%) : + Overall scaling (%) : + + + + WriteByte + + + + + ReadByte + + + + + + + Address: + + + + + + Value: + + + + + WriteWord + + + + + ReadWord + + + + + ReadDword + + + + + WriteDword + + + + + ValueH: + + + + + ValueL: + + + + + + + 信息编辑 + EditTXT + + + + 触发设置 + TrigSet + + + + + 系统管理 + SysSet + + + + + 日志信息 + LogInfo + + + + 定时开机循环完成,准备关机 + self checking done in alarm resump, ready to poweroff + + + + 准备关机 + ready poweroff + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + POST,Wait for 60 s...... + + + + 开始自检,请等待%1秒............... + POST,Wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + + 缺少墨水,喷码机不能正常工作! + Lack of ink, inkjet printer cannot normal working! + + + 墨水或溶剂空,准备关机 + Ink or mekeup empty, prepare shutdown + + + + 压力波动超过设定的5个值. + The pressure fluctuation exceeds the set 5 values. + + + + 停止打印,自动关闭高压. + Stop printing and automatically turn off high voltage. + + + + 压力异常:上次压力值%1,当前压力值%2 + Pressure fault:last value is %1, current value is %2 + + + 高压异常:上次电流值%1,当前电流值%2 + High voltage fault:last current value is %1, current current value is %2 + + + + 添加溶剂: + Add solvent + + + + 混合阀打开2: + The mixing valve opens 2: + + + 混合阀打开1. + The mixing valve opens 1 + + + 混合阀打开2. + The mixing valve opens 2 + + + + 提示 + hint + + + + 是否接收新的信息! + Whether to receive new information! + + + 请立即检查过滤器是否堵塞或者漏气! + Please immediately check whether the filter is blocked or leaking! + + + 请清理过滤器或者检查是否泄露! + Please clean the filter or check for leaks! + + + + 错误!粘度计下位灯故障. + Error! Viscometer inferior lamp failure. + + + + 错误!粘度计故障:检测不到上位灯. + Error:Viscometer fault! the upper lamp is not detected. + + + + 粘度检测异常,粘度值太大!!! + The viscosity anomaly detection, viscosity too high!!! + + + + + 错误!!!!!!!!!!!粘度偏大故障 + Error! Viscosity larger fault + + + + 定时开机 + timed start + + + + 读卡器故障! + Card reader fault! + + + + 13.读卡器故障! + Card reader fault! + + + + + 压力泄漏或压力传感器故障! + Pressure leakage or pressure sensor failure! + + + + 运行中压力泄漏,停齿轮泵! + If the pressure leaks during operation, stop the gear pump! + + + + + 测试时间结束,准备关机 + The test time is over, ready to shut down + + + + + + 刷墨水卡成功! + Successfully swiped ink card! + + + + + + 刷溶剂卡成功! + Successfully swiped solvent card! + + + + + MAC无效卡! + MAC invalid card! + + + + + 无效卡! + Invalid card! + + + + + 9.墨水空,机器自动关机 + 9. The ink is empty, the machine will automatically shut down + + + + + 10.溶剂空,机器自动关机 + 10. The solvent is empty, machine automatically shuts down + + + + + 11.墨水空,机器再次自动关机 + 11. The ink is empty, and the machine will automatically shut down again + + + + + 12.溶剂空,机器再次自动关机 + 12. The solvent is empty, and the machine automatically shuts down again + + + + + 21.没有使用原厂墨水耗材,机器自动关机 + 21. No original Ink consumables were used, so the machine automatically shut down + + + + + 22.没有使用原厂溶剂耗材,机器自动关机 + 22. No original solvent consumables were used, so the machine automatically shut down + + + + + 23.没有使用原厂墨水耗材,机器再次自动关机 + 23. No original Ink consumables were used, so the machine automatically shut down again + + + + + 24.没有使用原厂溶剂耗材,机器再次自动关机 + 24. No original solvent consumables were used, so the machine automatically shut down again + + + + + 1.请添加墨水,否则机器将在24小时后自动关机! + 1. Please add ink, otherwise the machine will automatically shut down after 24 hours! + + + + + 2.请添加墨水,否则机器将在%1小时后自动关机! + 2. Please add ink, otherwise the machine will automatically shut down in%1 hours! + + + + + 3.请添加墨水,否则机器将在%1分钟后自动关机! + 3. Please add ink, otherwise the machine will automatically shut down in%1 minutes! + + + + + 4.请添加墨水,否则机器将在2分钟后自动关机! + 4. Please add ink, otherwise the machine will automatically shut down in 2 minutes! + + + + + 5.请添加溶剂,否则机器将在6小时后自动关机! + 5. Please add solvent, otherwise the machine will automatically shut down after 6 hours! + + + + + 6.请添加溶剂,否则机器将在%1小时后自动关机! + 6. Please add solvent, otherwise the machine will automatically shut down after%1 hours! + + + + + 7.请添加溶剂,否则机器将在%1分钟后自动关机! + 7. Please add solvent, otherwise the machine will automatically shut down after%1 minutes! + + + + + 8.请添加溶剂,否则机器将在2分钟后自动关机! + 8. Please add solvent, otherwise the machine will automatically shut down after 2 minutes! + + + + + + 13.请刷墨水卡,请使用原厂墨水耗材,否则机器将在24小时后自动关机! + 13. Please swipe the ink card and use original ink consumables, otherwise the machine will automatically shut down after 24 hours! + + + + + 14.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后自动关机! + 14. Please swipe the ink card and use original ink consumables, otherwise the machine will automatically shut down after%1 hours! + + + + + 15.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1分钟后自动关机! + 15. Please swipe the ink card and use original ink consumables, otherwise the machine will automatically shut down in%1 minutes! + + + + + + 16.请刷墨水卡水,请使用原厂墨水耗材,否则机器将在2分钟后自动关机! + 16. Please swipe ink card water and use original ink consumables, otherwise the machine will automatically shut down in 2 minutes! + + + + + + 17.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2小时后自动关机! + 17. Please swipe the solvent card and use the original solvent consumables, otherwise the machine will automatically shut down after 2 hours! + + + + + 18.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后自动关机! + 18. Please swipe the solvent card and use the original solvent consumables, otherwise the machine will automatically shut down after%1 hours! + + + + + 19.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1分钟后自动关机! + 19. Please swipe the solvent card and use the original solvent consumables, otherwise the machine will automatically shut down in%1 minutes! + + + + + + 20.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2分钟后自动关机! + 20. Please swipe the solvent card and use the original solvent consumables, otherwise the machine will automatically shut down after 2 minutes! + + + + + 齿轮泵转速过高,请立即停机并联系供应商! + The speed is too high, please stop immediately and contact the supplier! + + + + + 齿轮泵转速过高,请清理过滤器或者检查是否泄露! + The speed is too high, please clean the filter or check for leaks! + + + 混合阀打开1: + The mixing valve opens 1: + + + + + 警告!!!!!!!!!!!粘度值偏低 + Warning! Low viscosity + + + 正在开墨线..... + InkLine Openning...... + + + 回收泵全速开 + ReclaimPump ON + + + 粘度泵开 + ViscosityPump ON + + + 循环阀开 + CycleValve ON + + + 墨线阀开 + InkLineValve ON + + + 清洗阀开 + CleanValve ON + + + 清洗阀关 + CleanValve OFF + + + 墨线阀关 + InkLineValve OFF + + + 粘度泵关 + ViscosityPump OFF + + + 供墨阀开 + InkValve ON + + + 正常开墨线状态,请等待%1秒 + InkLine Raedy,Please wait %1 s + + + 循环阀关 + CycleValve OFF + + + 开晶振电压,正在检测相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + 正在测试相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + 相位检测正常,开启高压 + Phase Ready + + + 相位检测异常 + Phase error + + + 开墨线完成 + InkLine Open Complete + + + 开墨线完成,可以打印! + InkLine Ready,You Can To Print Now + + + 正在关闭墨线 + Closing InkLine..... + + + 回收泵变全压运行 + ReclaimPump ON + + + 清洗阀点动%1次 + CleanValve work %1 times + + + 循环阀开,请等待%1s + CycleValve on,please wait for %1 s + + + 关回收泵 + ReclaimPump OFF + + + %1秒后关回收泵 + Wait %1s and ReclaimPump OFF + + + 可以关机断电 + InkJet can Shoutdown + + + 正在关机..... + Shutdown ...... + + + 正在快速开墨线..... + Is InkLine Openning ...... + + + 打开晶振电压 + OscillatorVoltage ON + + + 5秒后打开晶振电压 + crystals voltage on after 5s + + + 开晶振电压,正在检测相位,请等待%1s + is phase testting, please wait for %1 s + + + 快速开墨线完成 + InkLine Open Finish + + + 快速开墨线完成,可以打印! + InkLine Open Finish + + + 正在快速关闭墨线 + Is InkLine OFF ...... + + + 回收泵关 + ReclaimPump OFF + + + 回收泵变全速运行 + ReclaimPump On + + + 回收泵全速运行 + ReclaimPump ON + + + 回收泵全速运行,请等待%1秒 + Is ReclaimPump On, Wait %1s + + + 快速关闭墨线完成 + Complete the quick closing InkLine + + + 警告 + Warnning + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + Speed is too fast or interval is too short! Unable to print all, stop print now!!! + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + Speed is too fast or interval is too short! Unable to print all char!!! + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + 打开文件出错次数超多3次,自动清除默认喷印文件. + Automatically clear the default file because openFile error. + + + 非法关机次数过多,自动清除默认喷印文件. + Automatically clear the default file because illegal shutdown. + + + 上次出现非法关机. + Illegal shutdown Last time. + + + 自动循环中,请等待%1秒............... + Is AutoCyclling ,Wait %1s...... + + + 自动循环完成!!! + Auto Cycle finish!!! + + + 正在自检,请等待%1秒............... + Is InkJet Testting, Wait %1 s...... + + + 供墨阀关 + InkValve OFF + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + + 大写 + Caps +LOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + + + + + 2 + @ + + + + + 3 + # + + + + + 4 + $ + + + + + 5 + % + + + + + 6 + ^ + + + + + 7 + & + + + + + 8 + * + + + + + 9 + ( + + + + + 0 + ) + + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Special +Char + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 小写 + Caps +LOCK + + + 中文 + Chinese + + + + Tiếng Việt + + + + + Russian + + + + + Japanese + + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 导出日志到U盘 + Export logs to USB flash disk + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + + + + 提示 + Tips + + + + 是否确认将所有日志文件导出到U盘? + Are you sure to export all log files to USB flash disk? + + + + U盘未插入或无法识别,请重新插拔设备! + The USB flash drive is not inserted or cannot be recognized, please unplug and plug the device again! + + + + 成功导出到U盘 + Export to flashdisk success + + + 成功导出到U盘? + Export to flashdisk success ? + + + + 选择历史记录文件 + Choose record file + + + + 是否确认将历史日志文件全部清除? + Are you sure to clear all history log files? + + + + 是否确认将当前日志全部清除? + Are you sure to clear all current logs? + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 条形码 + BarCode + + + + 二维码 + QRCode + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 获取数据 + get the data + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + + 紧急停机 + Emergency stop + + + 晶振电压 + CrystalVOL + + + + 粘度 + Viscosity + + + + 压力 + Pressure + Pressure + + + + + 隔膜位置 + DiaphragmPOS + + + + + 暂停打印 +停止高压 + Pause to print +Stop high pressure + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Mekeup +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + 故障恢复 + Fault +Reset + + + + 立即重新计米 + ResetCounterNow + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt; vertical-align:bottom;"><br /></p></body></html> + + + + + 墨水缸满 + Inkstand +Full + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + 2014-08-23 + 1 {2014-08-23?} + + + + 高压包 + High Voltage + + + + + + + 开 + Collector +Open + + + + + + + 关 + Collector +Off + + + + 泵启动 + Pump to start + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + 墨水或溶剂空,准备关机 + Ink or solvent empty, prepare shutdown + + + + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, Turn OFF collector and inkLine + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + 维护时间已到喷码机停止工作 + The maintenance time has come,Inkjet printer stop working! + + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + 开墨线 + OPEN + + + 关墨线 + CLOSE + + + 墨线状态 + INKLINE + + + 喷 嘴 +逆清洗 + nozzles +Clean + + + + + 机箱: + CASE: + + + 正在喷印...... + Printting...... + + + 墨线正常,可以喷印. + InkLine ready to print. + + + 墨线正常. + InkLine Ready. + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + 高压故障,快速关墨线 + high voltage error, closing now. + + + 维护时间已到,喷码机将停止工作! + The maintenance time has come,Inkjet printer stop working! + + + 相位故障,FPGA自动关高压. + phase error,FPGA turnoff the high voltage. + + + + 高压故障,关回收槽 + HighVoltFault,ReclainTank auto Colse + + + + 高压故障,关回收槽和墨线 + HighVoltFault,ReclainTank auto Colse + + + + 回收故障. + Recovery failure. + + + + 回收异常,墨线可能偏离.(%1) + Recovery abnormal, InkLine may deviate (%1) + + + + 维护时间已到,喷码机停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + + + 相位故障,准备关机 + Phase Fault, ShoutDown Now + + + + 电眼交替 + Alter by electronic Eye + + + %1.%2[%3.%4]米/秒 + %1.%2[%3.%4]m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + + + + + 提示 + Tips + + + + 文件未保存,是否先保存文件! + File not save,please save it Now! + + + + + + + 变量数大于8个,某些变量将不起作用!!! + The variable number is greater than 8, and some variables will not work!!! + + + + + 请减少信息中的变量(或计数器)数量. + Please reduce the number of variables (or counters) in the printe file. + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + + 错误 + Error + + + + 喷印间隔过短,应高于%1! + Printing interval is too short, +should be higher than %1! + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 开始打印1 + Start printing 1 + + + + 继续打印 +保持高压 + To continue printing + +Keep the high pressure + + + + 正在排气 ............... + Exhausting............... + + + + 泵停止 + Pump stop + + + + + 最多支持的列数目为:%1请减小信息长度. + The maximum number of columns supported is:%1, please decrease the length of the information. + + + + + 正在准备关机,请等待%1秒............... + Power Off in %1 seconds.......... + + + + 是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动! + Do you want to turn off the gear pump? Turning off the gear pump will cause the ink to stop flowing! + + + + 是否启动齿轮泵? + Do you want to start the gear pump? + + + + 保存html文件失败! + Failed to save HTML file! + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;"><br /></p></body></html> + + + + + 获取DM码内容为空! + Get DM code content is empty! + + + + + 获取DM码内容: + get DM code data: + + + + + 获取DM码内容跟上次相同 + Get the same DM code content as last time + + + + 高压故障:两高压偏转板间的电压检测异常 + High-voltage fault: two high voltage deflection plate voltage detection abnormal + + + + 1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座; + 1. high pressure deflector and high voltage base, wet and dirty, please clean and dry high pressure plate and high voltage base; + + + + 2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间; + 2., the machine changes the motherboard or high voltage package, please enter the "system settings", click "reset high", and set the word high to 90, reset the high voltage alarm value should be between 480 and 550; + + + + 3.高压线路漏电,请更换高压线路; + 3. high voltage line leakage, please replace the high voltage line; + + + + 4.高压底座漏电,请更换高压底座。 + 4. high voltage base leakage, please replace the high voltage base. + + + + 墨水过多:墨水溢出 + Excessive ink: ink overflow + + + + 1. 请停止添加墨水; + 1. please stop adding ink; + + + + 2. 请排出多余墨水。 + 2. please discharge excess ink. + + + + 墨水液位:墨水即将耗尽 + Ink level: ink is about to run out + + + + 1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。 + 1., the ink is exhausted, 3 hours after the automatic shutdown, please add ink in time. + + + + 回收故障:未检测到有墨水回收 + Recovery failure: no ink recovery was detected + + + + 1. 墨水未射入回收管,请修正墨线方向; + 1. ink not into recycling tube, please correct line direction; + + + + 2. 墨水粘度太低,请更换新墨水; + 2. ink viscosity is too low, please replace the new ink; + + + + 3. 回收管堵塞,请清通或者更换回收管; + 3. recovery of pipe blockage, please clear or replace the recovery tube; + + + + 4. 回收泵故障,请清洗或者更换回收泵; + 4., the recovery pump failure, please clean or replace the recovery pump; + + + + 5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮. + 5. after confirming that all the parameters and equipment are not abnormal, please enter the "print settings", cancel the "recovery troubleshooting" check, return to the main window interface, click the "fault recovery" button. + + + + 溶剂液位:溶剂即将耗尽 + Mekeup level: mekeup is about to run out + + + + 1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。 + 1. mekeup depletion, 3 hours after the automatic shutdown, please add solvent in time. + + + + + 粘度故障报警 + Viscosity alarm + + + + 粘度故障:墨水粘度无法自动调整 + Viscosity fault: Ink viscosity can not be adjusted automatically + + + + 1. 混合阀失灵,请冲洗或者更换混合阀; + 1. the mixing valve fails, please flush or replace the mixing valve; + + + + 2. 墨水罐内的墨水异常,请更换新墨水; + 2. the ink in the ink pot is abnormal. Please replace the ink; + + + + 粘度计异常: + Viscometer anomaly: + + + + 1. 泵前过滤网堵塞,请更换泵前滤网; + 1. the filter screen is blocked before the pump. Please replace the strainer before the pump; + + + + 2. 粘度泵异常,请清洗或更换粘度泵; + 2. viscosity pump abnormal, please clean or replace viscosity pump; + + + + 3. 粘度传感器异常,请检查传感器线路或者更换传感器. + 3. viscosity sensor abnormal, please check the sensor or replace the it. + + + + 相位故障报警 + Phase alarm + + + + 相位故障:相位信号检测异常 + Phase fault: phase detection exception + + + + 1. 墨水分裂不正常,请调整墨水分裂; + 1. ink dot split abnormal, please adjust the ink split; + + + + 2. 充电槽或者相检头脏污,请清洗充电槽和相检头; + 2. charging tank or check head dirty, please clean the charging tank and phase head; + + + + 3. 放大板功能性异常,请更换放大板; + 3. the magnifying board is abnormal. Please replace it; + + + + 4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离; + 4. phase detection head and its distance is too far away, check the nozzle moving mechanism, adjusting the distance between the head and the ink; + + + + 5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰; + 5., the ground has not received or outside interference, please connect the ground wire or isolate the outside interference; + + + + 6. 墨水质量异常,请更换新墨水。 + 6. the ink is of exceptional quality. Please replace the ink. + + + + 回收槽开关检测完成! + Recycling tank switch detection completed! + + + 墨线未开,请先开墨线! + InkLine is Close,Please Open it! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 正在加高压... + High voltage is being up... + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + + 暂停喷印............... + Pause printing... + + + + + 墨水缸满报警 + The ink jar is full of alarm + + + + + 墨水液位报警 + Ink level alarm + + + + + 溶剂液位报警 + Mekeup level alarm + + + + + 高压故障,暂停打印. + High voltage fault, Pause Printing. + + + + 相位故障:飞行时间错误! + Phase fault: wrong flight time! + + + + 相位故障:相位检测错误! + Phase fault: phase detection error! + + + + 齿轮泵转速 + Gear pump speed + + + + %1.%2[%3.%4]米/分 + %1.%2[%3.%4]m/min + + + + 停止打印 + Stop printing + + + + + 随机码文本将展出到U盘,请插入U盘 + The RandomCode save U disk. Please insert the U disk + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + 请切换为自动状态,再继续操作! + Please switch to automatic state, to continue the operation! + + + 打开墨线 + InkLine OPEN + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + 打开回收槽 + Opening collector + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + 关闭墨线 + InkLine Close + + + 关闭回收槽 + Closing collector + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + 墨线未关,是否关闭墨线后关机! + Whether chalk line did not closed, shutdown after the inkline closed! + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 是否立即重新计米? + Are you want to reset counter! + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + 条形码信息编辑 + BarCode Edit + + + + + 二维码信息编辑 + QRCode Edit + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + ModbusSerial + + 接收到开始打印命令 + Start printing command received + + + 接收到暂停打印命令 + Pause printing command received + + + 接收到停止打印命令 + Stop printing command received + + + 接收到DM码数据命令 + DM code data command received + + + + MyFileDialog + + + 确定 + Confirm + + + + NetworkManager + + + Form + + + + + 手动设定 + Manual + + + + + IP: + + + + + Mask: + + + + + GW: + + + + + 取消 + Cancel + + + + 有线LAN + LAN + + + + WiFi: + + + + + SSID: + + + + + Status: + + + + + auth: + + + + + Encryption: + + + + + Plaintext (open / no authentication) + + + + + 主获取数据按钮 + get data button + + + 断开 + Disconnect + + + + Static WEP (no authentication) + + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + 设备码: + Equipment code: + + + + 服务IP: + Service IP: + + + + None + + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + 8754 + 8754 + + + + 服务端口: + Service port: + + + + PSK: + + + + + AddNetwork + + + + 连接 + Connect + + + + Password: + + + + 扫描 + Scan + + + 清除 + Remove + + + + 获取数据 + get the data + + + + Network: + + + + 添加网络 + Add network + + + + 测试 + Test + + + + 应用配置 + Application configuration + + + + 去掉数字码 + remove data code + + + + 去掉QR码 + remove QR code + + + + ScanSSID + + + + + Disconnect + + + + + Connect + + + + + Scan + + + + + Remove + + + + + 1 + 1 + + + + 47.111.170.144 + 47.111.170.144 + + + 错误 + Error + + + + wpa_supplicant service is not running. +Do you want to start it? + + + + + Disconnected + + + + + Inactive + + + + + Scanning + + + + + Authenticating + + + + + Associating + + + + + Associated + + + + + 4-Way Handshake + + + + + Group Handshake + + + + + Completed + + + + + Unknown + + + + + Could not get status from wpa_supplicant + + + + + Select any network + + + + + WPS AP in active PBC mode found + + + + + Press the PBC button on the screen to start registration + + + + + WPS AP with recently selected registrar + + + + + WPS AP detected + + + + + PBC mode overlap detected + + + + + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + + + + + Network configuration received + + + + + Registration started + + + + + Registrar does not yet know PIN + + + + + Registration failed + + + + + Registration succeeded + + + + + WPA Pre-Shared Key Error + + + + + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + + + + + Network ID Error + + + + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + + + + + Failed to add network to wpa_supplicant +configuration. + + + + + Failed to enable network in wpa_supplicant +configuration. + + + + + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + + + + + Yes + + + + + No + + + + + Failed to remove network from wpa_supplicant +configuration. + + + + + 是否去获取数据! + to get data ? + + + + 获取数据中... + get data ... + + + + + 上报数据中... + Reported data ... + + + + + + + 提示 + Tips + + + + + IP设置错误! + IP set error! + + + + 应用成功 + Apply success + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + 相检墨点: + Phase Detect Dot: + + + 相检占空比(%) + PhaseDetectDuty + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + DetectDelay + DetectDelay + + + + detect_num + + + + 相检: + phase: + + + + 相位偏移: + Phase offset: + + + + 相检: + Phase: + + + + FullTimeEn + + + + + DetectVol + + + + + HighLowRatio + + + + + 充电占空比100% + ChargeDuty {100%} + + + + 相位检测电压: + 相位检测电压 + PhaseVol: + + + + 检测延时: + Phase Delay: + + + 检测点数量: + 检测点数量 + Num: + + + + 检测墨点数量: + 检测延迟 : + Number: + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 列高 + RowHeight + + + + 无加粗 + Normal + + + + 加粗1倍 + Bold1 + + + + 加粗2倍 + Bold2 + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 字符光标 + Character +Cursor + + + + 像素光标 + Pixel +Cursor + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + 字符 +光标 + Character +Cursor + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 编辑现有的多字体文件 +请使用修改模式!!! + + + + + 放弃保存 + Quit without save + + + + 文件另存为... + Save As...... + + + + 另存为 + Save As + + + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 文件保存为... + Save...... + + + + 本条信息的变量超过规定数量! + The variables in this message exceed the specified quantity! + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + Please input a char. + Please input a char. + + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + 信息中的变量数超过了最大值(8)!请减小变量数. + The number of variables in the information exceeds the maximum (8)! +Please reduce the number of variables. + + + 信息中的变量数超过了最大值(8)!,请减小变量数. + The number of variables in the information exceeds the maximum (8)! +Please reduce the number of variables. + + + + + 两个变量之间至少要空出一个墨点! + One point between two variables! + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + + + + + 快速 + Fast + + + + + + + + + + 标准 + Standard + + + + + + + + 慢速 + Slow + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + 慢速3 + Slow 3 + + + + 慢速4 + Slow 4 + + + + 慢速5 + Slow 5 + + + + 慢速6 + Slow 6 + + + + 慢速7 + Slow 7 + + + + 慢速8 + Slow 8 + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + 高速模式 + High speed mode + + + + 使用回收泵 + Use recycle pump + + + + 齿轮泵转速预警值 + Gear pump speed warning value + + + + 隐藏值米标: + Hidden value meter marker + + + + 隐藏打印值 + Hide print values + + + + 打印条件倍数值: + Printing condition multiple value + + + + 使用隐藏功能时必须使用计数器1 + Counter 1 must be used when using the hidden function + + + + 其它设置 + OtherSetting + + + + 更换信息文件时执行的动作: + Excute when change file: + + + + 产品计数器自动清0 + ProductAutoReset + + + + 总产品计数器自动清0 + TotalProductAutoReset + + + + 高压故障关回收槽 + ReclainTankColse +WhenHighVoltFault + + + + 无交替 + None + + + + 普通交替 + General Alter + + + + 电眼触发交替 + Electronic Trigger + + + 更换信息文件时执行的动作 + Action when File Replace + + + + 导出随机码文本 + ExportRandomCodeFile + + + + 无 + None + + + + 外接显示屏: + Extra Screen: + + + + 复位到起始值 + Reset to the starting value + + + + 小屏 + Small + + + + 大屏 + BIg + + + + 总产品计数值 + Product Counter + + + + + 计数器1 + CNT1 + + + + + 计数器2 + CNT2 + + + + + + + 起始值: + StartValue: + + + + + + + 结束值: + EndValue: + + + + + + 清零 + ResetCnt + + + + 可变长度 + Variable +Length + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 墨线时间 + InkLineTime + + + + 墨线时间: + WorkingTime: + + + + + + + 0 + 1 {0?} + + + + 开机次数: + PowerOnTimes: + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + 速度优先 + Speed First + + + + yyyy-MM-dd + + + + + yyyy/MM/dd + + + + + yyyyMMdd + + + + + yyyy年MM月dd日 + + + + + yyyy-MM-dd hh:mm + + + + + yyyy/MM/dd hh:mm + + + + + yyyyMMddhhmm + + + + + yyyy年MM月dd日hh:mm + + + + + hh:mm + + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 不打印走米 + Not print +continue counter + + + 打印优化 + Print +optimization + + + + 电眼误触禁止 + Prohibition +ElectricEye re-trigger + + + + TextLabel + + + + 0211模式 + 0211 Mode + + + 空列打印 + Blank column +print + + + + 字形优化 + char Optimize + + + + 有效期(天): + Expire(Days): + + + 2018-05-24 + 24Dot {2018-05-24?} + + + 2018/05/24 + 24Dot {2018/05/24?} + + + + + 高级设置 + AdvancedSetting + + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 修改授权 + Modify authorization + + + + 省点 + save point + + + + dd MM yy + + + + + + 调整电压 + Adjust the voltage + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + 速度: + Speed: + + + + 检测回收槽 + detect Collector + + + + + 锁定脉冲计数 + Lock pulse count + + + + 每条信息只打印一次 + Print once per message + + + + 新放大板 + newAmplifyPlate + + + + 非字宽 + Not word wide + + + + 使用齿轮泵 + Use gear pumps + + + + 高压阈值: + High voltage threshold: + + + + 不检测喷头盖 + Do not test sprinkler caps + + + + 维护时间: + Maintenance time: + + + + 打印时绿灯常亮 + green light is always on +when printing + + + + 复位发送打印数据 + Reset sending print data + + + + 计数器设置 + Counter setting + + + 显示小数 + Display +decimals + + + + 注意:“其它设置”页下的"分段计米“勾选时,计数器1不可用。 + Note: when "section meter" under "other settings" page is checked, counter 1 is not available. + + + + + 计数器3设置 + Counter 3 Setup + + + + ddhhmm + + + + + 计数器3 + CNT3 + + + + 生产日期: + Production Date: + + + + dd/MM/yy + + + + + 小数点位数 + Decimal Number + + + + dd/MM/yyyy + + + + + dd-MM-yy + + + + + dd-MM-yyyy + + + + + 计数器保存关机值 + Counter save shutdown value + + + + 距离尾部(mm): + Distance from tail (mm): + + + 当计数达到 : + Count reached: + + + 特殊条件计数 + Special condition count + + + + 首尾交替 + Head tail alternation + + + 显示 + display + + + + 米标显示 + M the display + + + + 上移 + Move up + + + + 下移 + Move down + + + + + + + 打印电压缩放 + Print voltage scaling + + + + 整体缩放(%) : + Overall scaling (%) : + + + + 显示屏显示: + Show on Screen: + + + 显示小数点 + Show Decimal separator + + + + 循环产品计数 + Cycle Product Count + + + 特殊变量结束值: + Special variable end value: + + + 特殊变量起始值: + Special variable starting value: + + + 打印 + Print + + + + 分段计米 + CNT1 by Group + + + + 插 入 + Insert + + + + 添 加 + Add + + + + 全部删除 + Del All + + + + 删 除 + Del + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + + 重设值 + ResetCurrentCounter + + + + + + 重复数: + RepeatTimes: + + + + + + 当前值: + Current: + + + + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + + + 输入密码 + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + Tip: Incorrect alternating parameters + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + + + + + + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + %4d天 %02d:%02d:%02d + %4d Day %02d:%02d:%02d + + + + + + + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + + 系统维护设置成功! + Syster maintenance setting success ! + + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + 提示:可变长度参数不正确 + Hint: Incorrect variable length parameter + + + + 要求:调整长度小于喷印间隔 + Requirement: Adjust the length less than the printing interval + + + + 小时 + Hour + + + + 错误 + error + + + + 密码: + Password: + + + + 取消授权 + Quit authorized setting + + + + + + 其他设置 + Other setting + + + + + 超高速 + Super Speed + + + + + 高速 + High Speed + + + + 软件初始化完成. + Software initialization completed + + + + RFID卡清零! + RFID card reset! + + + + 随机码文件为空,不需要导出 + No randomCode file to export + + + + 随机码文本将展出到U盘,请插入U盘 + The RandomCode save U disk. Please insert the U disk + + + + 计数器1(结束值-开始值)不能被增量整除,结束值将被设为%1 + CNT1 distance can not divisible by Increment. the end value will set to %1 + + + + 计数器1(结束-开始)不能被增量整除,结束值将被设为%1 + CNT1 distance can not divisible by Increment. the end value will set to %1 + + + + 1 + 1 + + + + 正在打印第%1组设置,不可删除 + %1 is printing,can not delete + + + + 是否确认删除第%1组设置? + delete %1? + + + + 是否确认删除全部设置? + delete all? + + + + 字体宽度不能为0 + Font width cannot be 0 + + + + 是否立即重新计米? + Are you want to reset counter! + + + + 解锁脉冲计数 + Unlock pulse count + + + + builTime:%1 + + + + + fpgaVersionNum: %1 + + + + + 字体宽度太小,打印字体将会被严重压缩! +建议最小字体宽度为:%1 +建议最小喷印间隔为:%2 + + + + + FPGAVersion: %1 + + + + + + FPGAType: %1 + + + + + FPGAChip: %1 + + + + + 喷印间隔太小,无法正常打印!!! + Printing interval is too short unable to print normally!!! + + + + 字体宽度为0!!! + Font width is 0!!! + + + + 原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)! + The original font width (%1mm) is no longer suitable for the newly set printing interval, and has been automatically adjusted to the maximum allowed value (%2mm)! + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QBarCode + + + Dialog + + + + + 条形码类型 + BarType + + + 文本信息 + Input: + + + + 显示缩放 + Scale + + + + 条形码高度 + BarHeight + + + + 1点 + 1Dot + + + + 2点 + 2Dot + + + + 3点 + 3Dot + + + + 4点 + 4Dot + + + + + 5点 + 5Dot + + + + 6点 + 6Dot + + + + 文本1 + TEXT1 + + + + 文本3 + TEXT3 + + + + 计数器2 + CNT2 + + + + 文本2 + TEXT2 + + + + 计数器1 + CNT1 + + + + 插入文档 + InsertToDoc + + + + 条码保存 + Save + + + + 增加数字行 + add number row + + + + 日期 + Date + + + + 时间 + Time + + + 增加数字行 + Add number line + + + + 条码宽度 + BarWidth + + + 字体 + Font + + + 文本宽度调整 + TextWidth + + + 居中对齐 + CenterAlign + + + 左对齐 + LeftAlign + + + 右对齐 + RightAlign + + + 文本对齐 + TextAlign + + + 文本加粗 + TextBold + + + 插入到文档 + InsertToDoc + + + + FileName + + + + + 预览 + Preview + + + 条形码保存 + Save + + + + 墨水类型 + InkType + + + + 黑墨 + BlackInk + + + + 白墨 + WhiteInk + + + 条形保存 + Save + + + + 返回 + Return + + + + 文件未保存 + File Not Saved + + + 5点阵 + 5 Matrix + + + 7点阵 + 7 Matrix + + + 9点阵 + 9 Matrix + + + 12点阵 + 12 Matrix + + + 16点阵 + 16 Matrix + + + + BARCODE_128 + CODE_128 + + + + + BARCODE_93 + + + + 自适应编码 + AUTO + + + + 7点 + 7Dot + + + + 9点 + 9Dot + + + + 12点 + 12Dot + + + + 16点 + 16Dot + + + + 24点 + 24Dot + + + + + 标签宽度:%1,标签高度:%2,文本宽度:%3 + TabWidth: %1,Height: %2,TextWidth: %3 + + + + QObject + + + + 手动设定 + Manual Mode + + + + 应用 + Apply + + + + 起始值 + StartValue + + + + 结束值 + EndValue + + + + 循环值 + RepeatValue + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SceneEditOption + + + Form + Form + + + + 预览 + Preview + + + + 新建 + New + + + + 打开 + OpenFile + + + + + 保存 + Save + + + + 另存为 + SaveAs + + + + 新增图元 + NewItem + + + + 编辑图元 + EditItem + + + + 删除图元 + DelItem + + + + 放大 + Zoom In + + + + 缩小 + Zoom Out + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + without save it + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + 回路阀 + FeedBack +Valve + + + + 回收泵 + Recycle Pump + + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 系统升级 + System upgrade + + + + 排气 + Exhaust + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 自动清洗 + AutoClean + + + 齿轮泵 + The gear pump + + + + 电机测试 + Motor Test + + + + 更新字库 + UpdateFontLibrary + + + + 齿轮泵开 + Gear pump open + + + + 齿轮泵关 + Gear pump close + + + + 切换屏幕 + Switch screen + + + + 导出字库 + Export Character Library + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + Cancel + Cancel + + + + (1/2) Cleaning, please wait... + (1/2) Cleaning, please wait... + + + + + + + + + + + + + + + + + + + + 开 + On + + + + + + + + + + + + + + + + + + + + + 关 + Off + + + + + + + + + + + + + + + + + 警告 + Warnning + + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + + 手动 + Manul + + + + + + 自动 + Auto + + + + + + + + + + + 启动 + Start + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + 无法生成脚本 + Fail to generate script + + + + + + + 密码不正确! + Incorrect Password! + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + + + + 错误 + Error + + + + 没找到对应字库,更新失败! + No corresponding word library found, update failed! + + + + 更新失败! + Update failed! + + + + 找不到更新软件! + Unable to find update software! + + + + 是否确认更新系统? + Are you sure to update the system? + + + + 系统更新成功,重启后生效! + The system has been updated successfully and will take effect after reboot! + + + + 文件不存在! + File does not exist! + + + + 压力 + Pressure + + + + autoclean cancel or status: + autoclean cancel or status: + + + + (2/3) Cleaning + (2/3) Cleaning + + + + (3/3) Cleaning + (3/3) Cleaning" + + + + 是否确认切换屏幕? + + + + 是否确认切换屏幕! + Are you sure to switch screens? + + + + flagOfTouchScreenType: %1 + + + + + + open %1 failed + + + + + + open /etc/init.d/qtui.sh failed + + + + + write /etc/init.d/qtui.sh failed + + + + + open /home/plg/calibrate failed + + + + + write /home/plg/calibrate failed + + + + + 切换成功 + Switching successful + + + + 切换电容屏 + Switch capacitive screen + + + + 切换电阻屏 + Switch resistance screen + + + 混合阀打开3: + 混合阀打开3. + The mixing valve opens 3: + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + autoclean start + autoclean start + + + + 是否确认启动自动清洗? + Start up auto clean: + + + + 是否确认墨水排除,加入清洗剂? + Ink empty and cleaning agent in? + + + + (1/3) Cleaning + (1/3) Cleaning + + + + 是否确认导出字库到U盘? + Export Character Library to usb disk? + + + + U盘不可识别! + usb disk not recognized! + + + + 字库导出完成! + Character library export done! + + + + 是否开始电机测试? + Startup motor test? + + + + 正在排气,是否停止? + Venting, do you want to stop? + + + 更新文件不存在! + Update file was not found! + + + 是否确认备份系统文件? + Confirm to backup system file? + + + 系统备份成功! + System backup suceess ! + + + 备份操作失败! + Backup operation failed! + + + + + + + + + + + + + + + + + + + 提示 + Tips + + + 开墨线 + Open InkLine + + + 关墨线 + Close InkLine + + + 清洗阀 + Clean Valve + + + 墨线阀 + InkLine Valve + + + 供墨阀 + InkValve + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + If you start cleaning, be sure the recycling tank has opened more than 10 mm, and stop to clean after 1 minute + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 粘度校正(%): + ViscosityAdjust: + + + + 新晶振 + NewCrystal + + + + 场景模式 + SceneMode + + + + 墨水温度: + InkTemp: + + + + + °C + °C + + + + 0 + 0 + + + + 0.6 + 0.6 + + + + 1.0 + 1.0 + + + + 1.6 + 1.6 + + + + 2.0 + 2.0 + + + Pulse Counter: + Pulse Counter: + + + + 脉冲计数器: + Pulse Counter: + + + + 隔膜位置偏移: + DiaphragmOffset: + + + + 5 + 5 + + + + 10 + 10 + + + + 15 + 15 + + + + 20 + 20 + + + + 25 + 25 + + + + 30 + 30 + + + + 40 + 40 + + + + 45 + 45 + + + + 50 + 50 + + + + 55 + 55 + + + + 60 + 60 + + + + 喷嘴直径: + Nozzle Diameter: + + + + 50 (UM) + + + + + 60 (UM) + + + + + 70 (UM) + + + + + 风扇开启温度: + Fan on temperature: + + + + 重置高压 + Reset High Voltage + + + + 界面语言设置 + LanguageSettings + + + + 应用当前配置 + Apply + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + 脉冲计数器: + Pulse counter: + + + + 隔膜位置: + DiaphragmPosition: + + + 混合阀管路: + MixingValvePiping: + + + 旧管路 + OldPiping + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + 小喷嘴片 + Small Nozzle + + + 大喷嘴片 + Big Nozzle + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 自动清洗时间约为一分钟,然后自动停止 + Auto Cleanning,wait 1 minute + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + 正在进入手动模式...... + Enter Manual Mode..... + + + + 正在喷嘴逆清洗...... + Is Nozzles Cleanning..... + + + + 自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率? + Automatic search takes a long time. Are you sure to automatically search for the best crystal oscillator frequency within the current frequency range of 2K? + + + + Tiếng Việt(Vietnamese interface) + + + + + Chinese interface(中文界面) + + + + + English interface(英文界面) + + + + 喷嘴逆清洗完成 + Nozzles Cleanning Finish. + + + 正在开回收槽...... + ReclaimTank Openning...... + + + 正在关回收槽...... + ReclaimTank Closing...... + + + + 清洗完成 + The cleaning is done + + + 密码不正确! + Incorrect Password! + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + 重置高压前,请先关墨线! + Please Turnoff InkLine before Reset High voltage! + + + 重置高压前,请先关闭回收槽! + Please Turnoff ReclaimTank before Reset High voltage! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + 墨线未打开! + InkLine Not Opened! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + 高压设置异常 + High Voltage Set False + + + 高压设置异常,本次重置操作无效! + High Voltage Set False! + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + + 最佳晶振电压完成 + Suitable voltage search done + + + 警告 + Warnning + + + 确定要切换中英文界面? + You want to switch Language? + + + 重启后切换到英文界面 + Switch to English GUI After the restart + + + 重启后切换到中文界面 + Switch to Chinese GUI After the restart + + + + TextEditOption + + + Form + Form + + + + 新建 + New + + + + + 另存为 + SaveAs + + + + 预览 + Preview + + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + wenquanyi + + + + + 12 + + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + + 警告 + Warnning + + + + + + + 无法打开文件 + Cannot open file + + + + + Application + Application + + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 二维码变量设置 + QR Variable Edit + + + + 完成 + OK + + + 另存为123 + SaveAs + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 保存... + Save..... + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + Delayed Triggering + + + + 光电边沿触发 + OpticalEdge Triggering + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + SynchronizerTriggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + + 触发延时(毫秒) + TriggerDelay(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + + + + 延时(毫秒): + Delay(ms): + + + + 允许电眼复位 + Allows ELE-EYE Reset + + + + 允许电眼立即复位 + Allows ELE-EYE Reset now + + + + 电眼清零 + PhotodEyeResetCounter + + + + 镜像交替间隔 + MirrorAlternately + + + + 镜象交替类型 + MirrorMode + + + + 无镜像打印 + NoMirror + + + + 自动水平翻转 + AutoRollover + + + + 自动垂直翻转 + AutoVerticalFlip + + + + 中心对称旋转 + CenterRotation + + + + 同步器正反转打印 + EncoderAlwasyValid + + + + 同步器只正转打印 + EncoderValidOnlyForward + + + + 同步器只反转打印 + EncoderValidOnlyReverse + + + 对应编码器脉冲数 + Encoder/pulse + + + + 脉冲信号值: + Pulse signal value: + + + + + 封锁时间(毫秒) + LockTime(ms) + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 禁止电眼清零 + ForbiddenMagicEyeReset + + + 允许电眼清零 + AllowMagicEyeReset + + + 允许电眼立即清零 + AllowMagicEyeResetNow + + + 镜像交替间隔数 + Mirror interval + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + + 独立参数 + Independent parameter + + + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + + 重复间隔(毫米) + Repeat Gap (mm) + + + + + 封锁间隔(毫米) + Lock Gap(mm) + + + + + + + 延时(毫米): + Delay(mm): + + + + 字符宽度 + CharWidth + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示:参数不正确 + Hint: The parameter is incorrect + + + + 要求:触发长度小于喷印间隔 + Requirement: The trigger length is less than the printing interval + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + 原字符宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)! + The original character width (%1mm) no longer applies to the newly set print interval, and is automatically adjusted to the maximum allowed value (%2mm)! + + + + 封锁间隔(毫秒) + Lock Gap(ms) + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 图像扩张 + Image expansion + + + + 图像裁剪 + Image clipping + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 图片另存为... + SaveAs + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 图片保存为... + Save to...... + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + dlgQrCode + + + Dialog + + + + + 信息前缀 + Text + + + + 变量(初值) + Curent-Couter + + + + 信息后缀 + Suffix-Text + + + + 条形码 + BarCode + + + + 默认 + default + + + + 8 x 18 + + + + + 8 x 32 + + + + + 12 x 26 + + + + + 12 x 36 + + + + + 16 x 36 + + + + + 16 x 48 + + + + + DM码尺寸: + DM code size: + + + + 自动插入时间 + Automatic insertion time + + + + 变量增量 + Increment + + + 增量 + Increment + + + + 返回 + Return + + + + + TextLabel + + + + 信息 + Text: + + + + 正相打印 + NormalPrint + + + + 反相打印 + RP-Print + + + + DataMatrix + + + + + QRCode + + + + + 插入文档 + InsertToDoc + + + + 计数器(变量) + CNT(Var) + + + + 保存 + Save + + + + 预览 + Preview + + + 插入到文档 + InsertToDoc + + + + 自动刷新 + AutoShow + + + 黑墨 + BlackInk + + + 白墨 + WhiteInk + + + + 警告 + Warnning + + + + 输入内容超出选择DM码尺寸大小,请选择更大的尺寸! + Input exceeds the size of the selected DM code, please select a larger size! + + + + [%1 X %2] + + + + + logo_Form + + + Form + + + + + zkWidget + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + 请新创建建图片 + Please set up a new pattern file + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/english0417.ts b/english0417.ts new file mode 100644 index 0000000..f53bc97 --- /dev/null +++ b/english0417.ts @@ -0,0 +1,4210 @@ + + + +UTF-8 + + DacDisplayAndEdit + + + Form + + + + + 10 + + + + + 07 + + + + + 02 + + + + + 20 + + + + + 06 + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 30 + + + + + 00 + + + + + 墨点 + InkDot + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + + 默认值 + Default + + + + + 编辑 + Edit + + + + 是 + YES + + + + 否 + NO + + + + 完成 + OK + + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + + 提示 + Tips + + + + %1 + %1 + + + + DevOp + + 错误 + Error + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized! + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + + 变量2 + Counter 2 + + + + 数字个数 + Digit Number + + + + 3个 + 3 + + + + 6个 + 6 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + 4个像素 + 4 pixel + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + SelectAll + + + + DlgInputAddr + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + 开始时间 + StartDate + + + 结束时间 + EndDate + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + MainWindow + + + + + + 图案编辑 + PictureEdit + + + + 打印设置 + PrintSetup + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + + 信息编辑 + EditText + + + + 触发设置 + TriggerSetup + + + + + 系统管理 + SystemManage + + + + + 日志信息 + LogInfo + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + Self-checking started, please wait for 60 s...... + + + + 开始自检,请等待%1秒............... + Self-checking started, please wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + + 警告 + Warnning + + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + 1 {1?} + + + + 2 + @ + 1 {2?} + + + + 3 + # + 1 {3?} + + + + 4 + $ + 1 {4?} + + + + 5 + % + 1 {5?} + + + + 6 + ^ + 1 {6?} + + + + 7 + & + 1 {7?} + + + + 8 + * + 1 {8?} + + + + 9 + ( + 1 {9?} + + + + 0 + ) + 1 {0?} + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + SpecialChar + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 中文 + Chinese + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + 选择历史记录文件 + Choose record file + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Solvent +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + + 故障恢复 + FaultReset + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + + + + 开 + Collector +Open + + + + + + + 关 + Collector +Off + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, and turn collector and ink-jet off + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + + + 相位故障,准备关机 + + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + 错误 + Error + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + 暂停喷印............... + Pause printing... + + + + 停止打印 + Stop printing + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + + 打开回收槽 + Opening collector + + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + + 关闭回收槽 + Closing collector + + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + MyFileDialog + + + 确定 + Confirm + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + + 相检墨点: + Phase Detect Dot: + + + + 相检占空比(%) + PhaseDetectDuty + + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + + 字符 +光标 + Character +Cursor + + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 放弃保存 + Quit without save + + + + 另存为 + Save As + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + 快速 + Fast + + + + + + 标准 + Standard + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + + 慢速3 + Slow 3 + + + + + 慢速4 + Slow 4 + + + + + 慢速5 + Slow 5 + + + + + 慢速6 + Slow 6 + + + + + 慢速7 + Slow 7 + + + + + 慢速8 + Slow 8 + + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + + + 起始值: + StartValue: + + + + + + 结束值: + EndValue: + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + + 慢速 + Slowly + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 高级设置 + AdvancedSetting + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + + 速度: + Speed: + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + 重设值 + ResetCurrentCounter + + + + + 重复数: + RepeatTimes: + + + + + 当前值: + Current: + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + 系统维护设置成功! + Syster maintenance setting success ! + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + + 提升授权 + More authorized setting + + + + 取消授权 + Quit authorized setting + + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + + 回收泵 + Recycle Pump + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 更新字库 + UpdateFontLibrary + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + + + + + + + + + + + + + + + 开 + On + + + + + + + + + + + + + + + + + + + + 关 + Off + + + + + + + + + 警告 + Warnning + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + 手动 + + + + + 自动 + + + + + + + + 启动 + Start + + + + + + + + + + + + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + 错误 + Error + + + + 更新文件不存在! + Update file was not found! + + + + 是否确认备份系统文件? + Confirm to backup system file? + + + + 系统备份成功! + System backup suceess ! + + + + 备份操作失败! + Backup operation failed! + + + + 提示 + Tips + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 重置高压 + Reset High Voltage + + + + 应用当前配置 + Apply + + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + + 隔膜位置: + DiaphragmPosition: + + + + 混合阀管路: + MixingValvePiping: + + + + 旧管路 + OldPiping + + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + + English interface + + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + 最佳晶振电压完成 + Suitable voltage search done + + + + 重启后切换到英文界面 + + + + + 重启后切换到中文界面 + + + + + TextEditOption + + + Form + Form + + + + 新建 + New + + + + + 另存为 + SaveAs + + + + 预览 + Preview + + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Insert +Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + 9 + + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Application + Application + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + Delayed Triggering + + + + 光电边沿触发 + OpticalEdge Triggering + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + SynchronizerTriggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + 触发延时(毫秒) + TriggerDelay(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + 延时(毫秒): + Delay(ms): + + + + 电眼清零 + PhotodEyeResetCounter + + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + + 独立参数 + Independent parameter + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + 重复间隔(毫米) + Repeat interval (mm) + + + + 字符宽度 + CharWidth + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + zkWidget + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + 请新创建建图片 + Please set up a new pattern file + + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/english0524.ts b/english0524.ts new file mode 100644 index 0000000..d252282 --- /dev/null +++ b/english0524.ts @@ -0,0 +1,4223 @@ + + + +UTF-8 + + DacDisplayAndEdit + + + Form + + + + + 10 + + + + + 07 + + + + + 02 + + + + + 20 + + + + + 06 + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 30 + + + + + 00 + + + + + 墨点 + InkDot + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + + 默认值 + Default + + + + + 编辑 + Edit + + + + 是 + YES + + + + 否 + NO + + + + 完成 + OK + + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + + 提示 + Tips + + + + %1 + %1 + + + + DevOp + + 错误 + Error + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized! + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + + 变量2 + Counter 2 + + + + 数字个数 + Digit Number + + + + 3个 + 3 + + + + 6个 + 6 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + 4个像素 + 4 pixel + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + SelectAll + + + + DlgInputAddr + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + 开始时间 + StartDate + + + 结束时间 + EndDate + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + MainWindow + + + + + + 图案编辑 + PictureEdit + + + + 打印设置 + PrintSetup + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + + 信息编辑 + EditText + + + + 触发设置 + TriggerSetup + + + + + 系统管理 + SystemManage + + + + + 日志信息 + LogInfo + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + Self-checking started, please wait for 60 s...... + + + + 开始自检,请等待%1秒............... + Self-checking started, please wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + + 警告 + Warnning + + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + + 大写 + Caps +LOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + 1 {1?} + + + + 2 + @ + 1 {2?} + + + + 3 + # + 1 {3?} + + + + 4 + $ + 1 {4?} + + + + 5 + % + 1 {5?} + + + + 6 + ^ + 1 {6?} + + + + 7 + & + 1 {7?} + + + + 8 + * + 1 {8?} + + + + 9 + ( + 1 {9?} + + + + 0 + ) + 1 {0?} + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Special +Char + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 小写 + Caps +LOCK + + + + 中文 + Chinese + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + 选择历史记录文件 + Choose record file + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Solvent +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + + 故障恢复 + FaultReset + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + + + + 开 + Collector +Open + + + + + + + 关 + Collector +Off + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, and turn collector and ink-jet off + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + + + 相位故障,准备关机 + + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + 错误 + Error + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + 暂停喷印............... + Pause printing... + + + + 停止打印 + Stop printing + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + + 打开回收槽 + Opening collector + + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + + 关闭回收槽 + Closing collector + + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + MyFileDialog + + + 确定 + Confirm + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + + 相检墨点: + Phase Detect Dot: + + + + 相检占空比(%) + PhaseDetectDuty + + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + + 字符 +光标 + Character +Cursor + + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 放弃保存 + Quit without save + + + + 另存为 + Save As + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + 快速 + Fast + + + + + + 标准 + Standard + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + + 慢速3 + Slow 3 + + + + + 慢速4 + Slow 4 + + + + + 慢速5 + Slow 5 + + + + + 慢速6 + Slow 6 + + + + + 慢速7 + Slow 7 + + + + + 慢速8 + Slow 8 + + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + + + 起始值: + StartValue: + + + + + + 结束值: + EndValue: + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + + 慢速 + Slowly + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 高级设置 + AdvancedSetting + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + + 速度: + Speed: + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + 重设值 + ResetCurrentCounter + + + + + 重复数: + RepeatTimes: + + + + + 当前值: + Current: + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + 系统维护设置成功! + Syster maintenance setting success ! + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + + 提升授权 + More authorized setting + + + + 取消授权 + Quit authorized setting + + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + + 回收泵 + Recycle Pump + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 更新字库 + UpdateFontLibrary + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + + + + + + + + + + + + + + + 开 + On + + + + + + + + + + + + + + + + + + + + 关 + Off + + + + + + + + + 警告 + Warnning + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + 手动 + + + + + 自动 + + + + + + + + 启动 + Start + + + + + + + + + + + + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + 错误 + Error + + + + 更新文件不存在! + Update file was not found! + + + + 是否确认备份系统文件? + Confirm to backup system file? + + + + 系统备份成功! + System backup suceess ! + + + + 备份操作失败! + Backup operation failed! + + + + 提示 + Tips + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 重置高压 + Reset High Voltage + + + + 应用当前配置 + Apply + + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + + 隔膜位置: + DiaphragmPosition: + + + + 混合阀管路: + MixingValvePiping: + + + + 旧管路 + OldPiping + + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + + English interface + + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + 最佳晶振电压完成 + Suitable voltage search done + + + + 重启后切换到英文界面 + + + + + 重启后切换到中文界面 + + + + + TextEditOption + + + Form + Form + + + + 新建 + New + + + + + 另存为 + SaveAs + + + + 预览 + Preview + + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + 9 + + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Application + Application + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + Delayed Triggering + + + + 光电边沿触发 + OpticalEdge Triggering + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + SynchronizerTriggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + 触发延时(毫秒) + TriggerDelay(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + 延时(毫秒): + Delay(ms): + + + + 电眼清零 + PhotodEyeResetCounter + + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + + 独立参数 + Independent parameter + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + 重复间隔(毫米) + Repeat interval (mm) + + + + 字符宽度 + CharWidth + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + zkWidget + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + 请新创建建图片 + Please set up a new pattern file + + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/english20141023-ok.ts b/english20141023-ok.ts new file mode 100644 index 0000000..6917e5a --- /dev/null +++ b/english20141023-ok.ts @@ -0,0 +1,4401 @@ + + + +UTF-8 + + DacDisplayAndEdit + + + Form + + + + + 10 + + + + + 07 + + + + + 02 + + + + + 20 + + + + + 06 + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 30 + + + + + 00 + + + + + 墨点 + InkDot + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + + 默认值 + Default + + + + + 编辑 + Edit + + + + 是 + YES + + + + 否 + NO + + + + 完成 + OK + + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + + 提示 + Tips + + + + %1 + %1 + + + + DevOp + + 错误 + Error + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized! + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + + 变量2 + Counter 2 + + + + 数字个数 + Digit Number + + + + 3个 + 3 + + + + 6个 + 6 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + 4个像素 + 4 pixel + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + SelectAll + + + + DlgInputAddr + + + Dialog + + + + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + + PowerOnCnt + + + + + PrintDotCnt + + + + + PowerMax + + + + + PrintMax + PrintMax + + + + 开始时间 + StartDate + + + + 结束时间 + EndDate + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + + DlgShowMsg + + + 警告 + Warnning + + + + 确定 + Confirm + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + MainWindow + + + + 图案编辑 + PictureEdit + + + + 打印设置 + PrintSetup + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + + 信息编辑 + EditText + + + + 触发设置 + TriggerSetup + + + + + 系统管理 + SystemManage + + + + + 日志信息 + LogInfo + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + Self-checking started, please wait for 60 s...... + + + + 开始自检,请等待%1秒............... + Self-checking started, please wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + 错误!粘度计下位灯故障. + Error! Viscometer inferior lamp failure. + + + + 错误!粘度计故障:检测不到上位灯. + Error:Viscometer fault! the upper lamp is not detected. + + + + 粘度检测异常,粘度值太大!!! + The viscosity anomaly detection, viscosity too high!!! + + + + + + + 警告 + Warnning + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + Speed is too fast or interval is too short! Unable to print all, stop print now!!! + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + Speed is too fast or interval is too short! Unable to print all char!!! + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + + 大写 + Caps +LOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + + + + + 2 + @ + + + + + 3 + # + + + + + 4 + $ + + + + + 5 + % + + + + + 6 + ^ + + + + + 7 + & + + + + + 8 + * + + + + + 9 + ( + + + + + 0 + ) + + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Special +Char + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 小写 + Caps +LOCK + + + + 中文 + Chinese + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + 选择历史记录文件 + Choose record file + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Solvent +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + + 故障恢复 + FaultReset + + + + 立即重新计米 + ResetCounterNow + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + 2014-08-23 + 1 {2014-08-23?} + + + + + + + 开 + Collector +Open + + + + + + + 关 + Collector +Off + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + + + 墨水或溶剂空,准备关机 + Ink or solvent empty, prepare shutdown + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, and turn collector and ink-jet off + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + + 维护时间已到,喷码机停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + + + 相位故障,准备关机 + + + + + 机箱: + CASE: + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + + %1.%2[%3.%4]米/秒 + %1.%2[%3.%4]m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + 提示 + Tips + + + + 文件未保存,是否先保存文件! + File not save,please save it Now! + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + 错误 + Error + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + 暂停喷印............... + Pause printing... + + + + 停止打印 + Stop printing + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + + 打开回收槽 + Opening collector + + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + + 关闭回收槽 + Closing collector + + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 是否立即重新计米? + Are you want to reset counter! + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + MyFileDialog + + + 确定 + Confirm + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + + 相检墨点: + Phase Detect Dot: + + + + 相检占空比(%) + PhaseDetectDuty + + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 列高 + RowHeight + + + + 无加粗 + Normal + + + + 加粗1倍 + Bold1 + + + + 加粗2倍 + Bold2 + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 字符光标 + Character +Cursor + + + + 像素光标 + Pixel +Cursor + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + 字符 +光标 + Character +Cursor + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 放弃保存 + Quit without save + + + + 另存为 + Save As + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + 快速 + Fast + + + + + + 标准 + Standard + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + + 慢速3 + Slow 3 + + + + + 慢速4 + Slow 4 + + + + + 慢速5 + Slow 5 + + + + + 慢速6 + Slow 6 + + + + + 慢速7 + Slow 7 + + + + + 慢速8 + Slow 8 + + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + + + 起始值: + StartValue: + + + + + + 结束值: + EndValue: + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + + 慢速 + Slowly + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 不打印走米 + Not print continue counter + + + + 打印优化 + Print optimization + + + + 电眼误触禁止 + Prohibition ElectricEye +re-trigger + + + + 高级设置 + AdvancedSetting + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + + 速度: + Speed: + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + 重设值 + ResetCurrentCounter + + + + + 重复数: + RepeatTimes: + + + + + 当前值: + Current: + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + + 系统维护设置成功! + Syster maintenance setting success ! + + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + + 提升授权 + More authorized setting + + + + 取消授权 + Quit authorized setting + + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + + 回收泵 + Recycle Pump + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 更新字库 + UpdateFontLibrary + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + + + + + + + + + + + + + + + 开 + On + + + + + + + + + + + + + + + + + + + + 关 + Off + + + + + + + + + + + + + + 警告 + Warnning + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + 手动 + Manul + + + + 自动 + Auto + + + + + + + 启动 + Start + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + 密码不正确! + + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + + 错误 + Error + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + 更新文件不存在! + Update file was not found! + + + + 是否确认备份系统文件? + Confirm to backup system file? + + + + 系统备份成功! + System backup suceess ! + + + + 备份操作失败! + Backup operation failed! + + + + + + + + + 提示 + Tips + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 重置高压 + Reset High Voltage + + + + 应用当前配置 + Apply + + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + + 隔膜位置: + DiaphragmPosition: + + + + 混合阀管路: + MixingValvePiping: + + + + 旧管路 + OldPiping + + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + + English interface + + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + + 最佳晶振电压完成 + Suitable voltage search done + + + + 警告 + Warnning + + + + 确定要切换中英文界面? + + + + + 重启后切换到英文界面 + + + + + 重启后切换到中文界面 + + + + + TextEditOption + + + Form + Form + + + + 新建 + New + + + + + 另存为 + SaveAs + + + + 预览 + Preview + + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + 12 + + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Application + Application + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + Delayed Triggering + + + + 光电边沿触发 + OpticalEdge Triggering + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + SynchronizerTriggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + 触发延时(毫秒) + TriggerDelay(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + 延时(毫秒): + Delay(ms): + + + + 电眼清零 + PhotodEyeResetCounter + + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + + 独立参数 + Independent parameter + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + 重复间隔(毫米) + Repeat interval (mm) + + + + 字符宽度 + CharWidth + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + zkWidget + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + 请新创建建图片 + Please set up a new pattern file + + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/english20141023.ts b/english20141023.ts new file mode 100644 index 0000000..0797643 --- /dev/null +++ b/english20141023.ts @@ -0,0 +1,4399 @@ + + + +UTF-8 + + DacDisplayAndEdit + + + Form + + + + + 10 + + + + + 07 + + + + + 02 + + + + + 20 + + + + + 06 + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 30 + + + + + 00 + + + + + 墨点 + InkDot + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + + 默认值 + Default + + + + + 编辑 + Edit + + + + 是 + YES + + + + 否 + NO + + + + 完成 + OK + + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + + 提示 + Tips + + + + %1 + %1 + + + + DevOp + + 错误 + Error + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized! + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + + 变量2 + Counter 2 + + + + 数字个数 + Digit Number + + + + 3个 + 3 + + + + 6个 + 6 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + 4个像素 + 4 pixel + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + SelectAll + + + + DlgInputAddr + + + Dialog + + + + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + + PowerOnCnt + + + + + PrintDotCnt + + + + + PowerMax + + + + + PrintMax + + + + + 开始时间 + StartDate + + + + 结束时间 + EndDate + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + + DlgShowMsg + + + 警告 + Warnning + + + + 确定 + Confirm + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + MainWindow + + + + 图案编辑 + PictureEdit + + + + 打印设置 + PrintSetup + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + + 信息编辑 + EditText + + + + 触发设置 + TriggerSetup + + + + + 系统管理 + SystemManage + + + + + 日志信息 + LogInfo + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + Self-checking started, please wait for 60 s...... + + + + 开始自检,请等待%1秒............... + Self-checking started, please wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + 错误!粘度计下位灯故障. + + + + + 错误!粘度计故障:检测不到上位灯. + + + + + 粘度检测异常,粘度值太大!!! + + + + + + + + 警告 + Warnning + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + + 大写 + Caps +LOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + + + + + 2 + @ + + + + + 3 + # + + + + + 4 + $ + + + + + 5 + % + + + + + 6 + ^ + + + + + 7 + & + + + + + 8 + * + + + + + 9 + ( + + + + + 0 + ) + + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Special +Char + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 小写 + Caps +LOCK + + + + 中文 + Chinese + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + 选择历史记录文件 + Choose record file + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Solvent +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + + 故障恢复 + FaultReset + + + + 立即重新计米 + + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + 2014-08-23 + 1 {2014-08-23?} + + + + + + + 开 + Collector +Open + + + + + + + 关 + Collector +Off + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + + + 墨水或溶剂空,准备关机 + + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, and turn collector and ink-jet off + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + + 维护时间已到,喷码机停止工作! + + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + + + 相位故障,准备关机 + + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + + %1.%2[%3.%4]米/秒 + + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + 提示 + Tips + + + + 文件未保存,是否先保存文件! + + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + 错误 + Error + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + 暂停喷印............... + Pause printing... + + + + 停止打印 + Stop printing + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + + 打开回收槽 + Opening collector + + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + + 关闭回收槽 + Closing collector + + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 是否立即重新计米? + + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + MyFileDialog + + + 确定 + Confirm + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + + 相检墨点: + Phase Detect Dot: + + + + 相检占空比(%) + PhaseDetectDuty + + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 列高 + + + + + 无加粗 + + + + + 加粗1倍 + + + + + 加粗2倍 + + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 字符光标 + + + + + 像素光标 + + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + 字符 +光标 + Character +Cursor + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 编辑现有的多字体文件 +请使用修改模式!!! + + + + + 放弃保存 + Quit without save + + + + 另存为 + Save As + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + 快速 + Fast + + + + + + 标准 + Standard + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + + 慢速3 + Slow 3 + + + + + 慢速4 + Slow 4 + + + + + 慢速5 + Slow 5 + + + + + 慢速6 + Slow 6 + + + + + 慢速7 + Slow 7 + + + + + 慢速8 + Slow 8 + + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + + + 起始值: + StartValue: + + + + + + 结束值: + EndValue: + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + + 慢速 + Slowly + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 不打印走米 + + + + + 打印优化 + + + + + 电眼误触禁止 + + + + + 高级设置 + AdvancedSetting + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + + 速度: + Speed: + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + 重设值 + ResetCurrentCounter + + + + + 重复数: + RepeatTimes: + + + + + 当前值: + Current: + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + + 系统维护设置成功! + Syster maintenance setting success ! + + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + + 提升授权 + More authorized setting + + + + 取消授权 + Quit authorized setting + + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + + 回收泵 + Recycle Pump + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 更新字库 + UpdateFontLibrary + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + + + + + + + + + + + + + + + 开 + On + + + + + + + + + + + + + + + + + + + + 关 + Off + + + + + + + + + + + + + + 警告 + Warnning + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + 手动 + + + + + 自动 + + + + + + + + 启动 + Start + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + 密码不正确! + + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + + 错误 + Error + + + + 配置文件/udisk/sysPara.bin不存在! + + + + 更新文件不存在! + Update file was not found! + + + + 是否确认备份系统文件? + Confirm to backup system file? + + + + 系统备份成功! + System backup suceess ! + + + + 备份操作失败! + Backup operation failed! + + + + + + + + + 提示 + Tips + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 重置高压 + Reset High Voltage + + + + 应用当前配置 + Apply + + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + + 隔膜位置: + DiaphragmPosition: + + + + 混合阀管路: + MixingValvePiping: + + + + 旧管路 + OldPiping + + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + + English interface + + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + + 最佳晶振电压完成 + Suitable voltage search done + + + + 警告 + Warnning + + + + 确定要切换中英文界面? + + + + + 重启后切换到英文界面 + + + + + 重启后切换到中文界面 + + + + + TextEditOption + + + Form + Form + + + + 新建 + New + + + + + 另存为 + SaveAs + + + + 预览 + Preview + + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + 12 + 1 {12?} + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Application + Application + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + Delayed Triggering + + + + 光电边沿触发 + OpticalEdge Triggering + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + SynchronizerTriggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + 触发延时(毫秒) + TriggerDelay(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + 延时(毫秒): + Delay(ms): + + + + 电眼清零 + PhotodEyeResetCounter + + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + + 独立参数 + Independent parameter + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + 重复间隔(毫米) + Repeat interval (mm) + + + + 字符宽度 + CharWidth + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + zkWidget + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + 请新创建建图片 + Please set up a new pattern file + + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/english24-1.ts b/english24-1.ts new file mode 100644 index 0000000..4a193f1 --- /dev/null +++ b/english24-1.ts @@ -0,0 +1,4223 @@ + + + +UTF-8 + + DacDisplayAndEdit + + + Form + + + + + 10 + + + + + 07 + + + + + 02 + + + + + 20 + + + + + 06 + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 30 + + + + + 00 + + + + + 墨点 + InkDot + + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + + 默认值 + Default + + + + + 编辑 + Edit + + + + 是 + YES + + + + 否 + NO + + + + 完成 + OK + + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + + 提示 + Tips + + + + %1 + %1 + + + + DevOp + + 错误 + Error + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized! + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + Password: + + + + 提升授权 + Authorized setting + + + 取消授权 + Deauthorize + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + + + + U盘文件 + FlashDiskFiles + + + + 删除文件 + Delete + + + + 删除全部 + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + + + + 导出到U盘 + OutportToFlashDisk + + + + 插入 + InsertFile + + + + 打开文件 + OpenFile + + + + 上一个 + Previous + + + + 下一个 + Next + + + + 退出 + Exit + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + Delete all files? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(英) + 9 Matrix + + + + 24点(中/英) + 24 Matrix + + + + 16点(中/英) + 16 Matrix + + + + 5点(英) + 5 Matrix + + + + 12点(中/英) + 12 Matrix + + + + 7点(英) + 7 Matrix + + + + 选择字体大小 + Choose font size + + + + DialogInsertVari + + + Dialog + + + + + 变量类型 + VariableType + + + + 日 + Day + + + + 秒 + Second + + + + 分 + Minute + + + + 变量1 + Counter 1 + + + + 月 + Month + + + + 周 + Week + + + + 时 + Hour + + + + 年 + Year + + + + 变量2 + Counter 2 + + + + 数字个数 + Digit Number + + + + 3个 + 3 + + + + 6个 + 6 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + 1 pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + 4个像素 + 4 pixel + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + LineSpacing: + + + + 字符间距: + CharacterPitch: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + Reset + + + + 测试 + Test + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + SelectAll + + + + DlgInputAddr + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + 开始时间 + StartDate + + + 结束时间 + EndDate + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + MainWindow + + + + + + 图案编辑 + PictureEdit + + + + 打印设置 + PrintSetup + + + + + 系统设置 + SystemSetup + + + + + 其他信息 + Others + + + + + + 信息编辑 + EditText + + + + 触发设置 + TriggerSetup + + + + + 系统管理 + SystemManage + + + + + 日志信息 + LogInfo + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + Self-checking started, please wait for 60 s...... + + + + 开始自检,请等待%1秒............... + Self-checking started, please wait for %1 s ...... + + + + + 自检完成!!! + Self-checking done ! + + + + + 警告 + Warnning + + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + + 大写 + Caps +LOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + + + + + 2 + @ + + + + + 3 + # + + + + + 4 + $ + + + + + 5 + % + + + + + 6 + ^ + + + + + 7 + & + + + + + 8 + * + + + + + 9 + ( + + + + + 0 + ) + + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Special +Char + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 小写 + Caps +LOCK + + + + 中文 + Chinese + + + + 全选 + SelectAll + + + + 复制 + Copy + + + + 粘贴 + Paste + + + + 剪切 + Cut + + + + 后退 + Back + + + + InsertSpaceNumDialog + + + 插入空格数 + Insert Spaces + + + + 空格个数: + Number: + + + + LogInfo + + + Form + + + + + 当前状态 + Current Status + + + + 清空当前状态 + Clear Status + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + 选择历史记录文件 + Choose record file + + + + MainWindow + + + InkJet + + + + + 编辑 + Edit + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + SPEED + + + + 当前时间 + Time + + + + 墨线开关 + Inkjet +Switch + + + + 喷头盖开 + Cover +Open + + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + InkLevel +Fault + + + + 溶剂液位 + Solvent +Level + + + + 粘度故障 + Viscosity +Fault + + + + 相位故障 + Phase +Fault + + + + 高压故障 + HighVolt +Fault + + + + + 故障恢复 + FaultReset + + + + 产品总计数 + Grand Total + + + + 回收故障 + Recycle +Fault + + + + 产品计数 + Product Count + + + + 关机 + Power +OFF + + + + + + + 开 + Collector +Open + + + + + + + 关 + Collector +Off + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + OpenFile + + + + + 正在喷印............... + Printing... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, and turn collector and ink-jet off + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + + + 相位故障,准备关机 + + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + Open file: + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + 错误 + Error + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + 开始打印 + Print start + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + 暂停喷印............... + Pause printing... + + + + 停止打印 + Stop printing + + + + 暂停打印 + Print paused + + + + 继续打印 + Continue printing + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + Stop + + + + 打开回收槽 + Opening collector + + + + + 停止打开 + Stop opening + + + + 正在打开回收槽... + Opening collector... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + + 关闭回收槽 + Closing collector + + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + Edit + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + OK + + + + MyFileDialog + + + 确定 + Confirm + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + + 相检墨点: + Phase Detect Dot: + + + + 相检占空比(%) + PhaseDetectDuty + + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Apply + + + + 频闪灯周期: + StrobePeriod: + + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + + 光栅高度 + Cursor height + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + FileName + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + Save/Print + + + + 删除字符 + Delete + + + + + + 字库编辑 + FontsEdit + + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + + 字符 +光标 + Character +Cursor + + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + Save + + + + 放弃保存 + Quit without save + + + + 另存为 + Save As + + + + + + + 文件名: + File name: + + + + 文件名:) + File Name:) + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + Open File + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + + 两个变量之间至少要空出一个墨点! + + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + FontWidth: + + + + + 快速 + Fast + + + + + + 标准 + Standard + + + + + 慢速1 + Slow 1 + + + + + 慢速2 + Slow 2 + + + + + 慢速3 + Slow 3 + + + + + 慢速4 + Slow 4 + + + + + 慢速5 + Slow 5 + + + + + 慢速6 + Slow 6 + + + + + 慢速7 + Slow 7 + + + + + 慢速8 + Slow 8 + + + + + 慢速9 + Slow 9 + + + + 打印模式: + PrintMode: + + + + + + 起始值: + StartValue: + + + + + + 结束值: + EndValue: + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 应用当前配置 + Apply + + + + 常用设置 + General Setting + + + + 慢速 + Slowly + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + FontHeight: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + Mirror +Horizontal + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + Mirror +Vertical + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 高级设置 + AdvancedSetting + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + + 行业: + IndustryMode: + + + + 快 + Fast + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + + 速度: + Speed: + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + 重设值 + ResetCurrentCounter + + + + + 重复数: + RepeatTimes: + + + + + 当前值: + Current: + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + 系统维护设置成功! + Syster maintenance setting success ! + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + 错误 + Error + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + + 提升授权 + More authorized setting + + + + 取消授权 + Quit authorized setting + + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manual Control + + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Collector Open + + + + + + + + + 停止 + Stop + + + + 回收槽关 + Collector Off + + + + 回收泵 + Recycle Pump + + + + 压缩机 + Compressor + + + + 主墨泵 + Main Ink Pump + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + Recycle Valve + + + + 墨水阀 + Ink Valve + + + + 粘度泵 + Viscosity Pump + + + + 混合阀 + Mixing Valve + + + + 时间设置 + Time Setting + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + + + + 更新字库 + UpdateFontLibrary + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + + + + 屏幕校正 + Touch-Screen +Calibration + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + + + + + + + + + + + + + + + 开 + On + + + + + + + + + + + + + + + + + + + + 关 + Off + + + + + + + + + 警告 + Warnning + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + 手动 + + + + + 自动 + + + + + + + + 启动 + Start + + + + + + + + + + + + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + Touch-screen calibration + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + 错误 + Error + + + + 更新文件不存在! + Update file was not found! + + + + 是否确认备份系统文件? + Confirm to backup system file? + + + + 系统备份成功! + System backup suceess ! + + + + 备份操作失败! + Backup operation failed! + + + + 提示 + Tips + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + Pressure: + + + + 粘度: + Viscosity: + + + + 高压包容差: + HighVoltTolerance: + + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + Printhead Temperature: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 重置高压 + Reset High Voltage + + + + 应用当前配置 + Apply + + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + CrystalVoltage(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + + 隔膜位置: + DiaphragmPosition: + + + + 混合阀管路: + MixingValvePiping: + + + + 旧管路 + OldPiping + + + + 新管路 + NewPiping + + + + 信息编辑模式: + Text editing mode: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + + English interface + + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + 最佳晶振电压完成 + Suitable voltage search done + + + + 重启后切换到英文界面 + + + + + 重启后切换到中文界面 + + + + + TextEditOption + + + Form + Form + + + + 新建 + New + + + + + 另存为 + SaveAs + + + + 预览 + Preview + + + + + + 保存 + Save + + + + 文件 + File + + + + 插变量 + Variable + + + + 间距 + Spacing + + + + 字体 + Font + + + + 9 + + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + Application + Application + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + Open file + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Second: + + + + 分: + Minute : + + + + 月: + Month: + + + + 日: + Day: + + + + 时: + Hour: + + + + 年: + Year: + + + + 设置时间 + Time setting + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + Delayed Triggering + + + + 光电边沿触发 + OpticalEdge Triggering + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + SynchronizerTriggering + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + 触发延时(毫秒) + TriggerDelay(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + 延时(毫秒): + Delay(ms): + + + + 电眼清零 + PhotodEyeResetCounter + + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 20131228-1 + + + + + 应用当前配置 + Apply + + + + 独立参数 + Independent parameter + + + + + 触发延时(毫米) + Trigging delay (ms) + + + + + 重复间隔(毫米) + Repeat interval (mm) + + + + 字符宽度 + CharWidth + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示 + Tips + + + + 应用成功 + Apply success + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Edit Pattern + + + + 缩小 + Zoom Out + + + + 放大 + Zoom In + + + + 宽度 + Width + + + + 新建 + NewFile + + + + 高度 + Height + + + + + + 保存 + Save + + + + 保存为 + SaveAs + + + + 打开 + OpenFile + + + + 导入 + Load + + + + A + A + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 另存为 + Save as + + + + 打开文件 + Open file + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + Confirm + + + + zkWidget + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + 请新创建建图片 + Please set up a new pattern file + + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/farsi.qm b/farsi.qm new file mode 100644 index 0000000000000000000000000000000000000000..87fa8c6b40141e3e44fa243504b3e799bf1c9e9e GIT binary patch literal 125601 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≥*qve2TXUu7`Gn6)-rAUbxK_9H)NVt8}8whKW59^eTdSjG& zHrM8D<%P#wb5DREpS7*5D`q-rk!+=AnETjH_u3+V)huivH+pI%v-{X#e>JL}67Y

      0MPki55=FI=wHqw5QNFYBtgZr9xb9`N@7-hG~OtTHo@=^5e~9UU!^NKlWv-p;bTygWZYU)N9>ceRo{gCN81r~@Rf($ZDP7ABOQ&I{t>arcH#qKd?p}Aie17)vyX)tB*B3c= zj?0Qn1zIg zNTpJE1xx}Tp3A4?o|&FX8A=-EBx)_ypuy0%jbYJgVcW~JA7X7B-3S$~ldkM(4u}wc zo^-_wz*#buZ6DL3)7-e#nDP@-Y14J!5O^r_WU+zXtwX>09+?Nd`zM@B|wf1dp~{bSWaRRa9w zs7by^hD&<&`cMJkrk72@V%2SB-D7RjV`I}}jT|#(mradZ8K}_*cnwwiqPE5bO&|b` zyoVeZ5m;4KmED&8!uFRtSB#n$G|5%k)M|=e-8zE?19~$ZEU;^Rhbj7w(WK3U(aOL) zIt4SSH5BYzv*HCf5x{f^b;!xd;h*HIDL<=HX359@Y%45 zhTNb*AM98~4Y?BFuaF4@VA3LK$;ru95-YW`SI#TIkx;9s=9kPJn;khF9Pch~elI_$ zKQL$@C}1Ff*T?&;`!mctwK`chSkr5bv@77u8~DH^?IXp;#;PAtC!HfHRwE7YKwPh<# zRC+a?TtOzFfcas%;u6S`fxSzCt!fs>RHP|s~7pQW-=vqH0P$G;Vii-|y(18m?5EVNd3ps=qIEKDJNKkJOT!mLeI|vG$Y#sg)K7L;dj~3X4?4Xt)$)tpc z%{dDDNoDVqS%CDB& zNNwU}@j25uL}X88BaTlU&zj5v*9)R?F%&@#w1`GUXbm9*tw%=${es}$odktzy(?8h zjm(K8&Nt!+O=?bZDtAg7O)H!!L`Y|(1vd)vZsh$i{R2S+X;1_fXn|vdkp08^(Gm3S z-xR@~EuOS|ns*q5lmYyud)WtZKIvyH2RC=@YOZk{NaEh(BQB8Z?1atJNx z4j}}shgS*;k46uA9^EU;Yh--n7w;EPEUzw$JH)I)mY`KoGE;J9?#!uMr^;@Xfv9-4 z7>aVIbD`zfiaZ5g5fs7!p>u_^QI=6eQN+xxnP0yj370U|PSo;F@$5_Ncen4( zoyBgiK(wd|-IIkFgWjNQAM<|!@YI!~ literal 0 HcmV?d00001 diff --git a/icon/TEXT.PNG b/icon/TEXT.PNG new file mode 100644 index 0000000000000000000000000000000000000000..54d35cd1351d846157f42ad780fa6be5797c0474 GIT binary patch literal 543 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 b$3F)ELWu!2w3^#E00000NkvXXu0mjfbs8GS literal 0 HcmV?d00001 diff --git a/icon/arrowdown.png b/icon/arrowdown.png new file mode 100644 index 0000000000000000000000000000000000000000..8fb9e0edd1d2bc7975f4c6c73dba6617f9f4df2c GIT binary patch literal 4059 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 N002ovPDHLkV1niD(Gmav literal 0 HcmV?d00001 diff --git a/icon/arrowleft.png b/icon/arrowleft.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8b0dafd0dbf231e4cb3c46a0d45a401cb236cf GIT binary patch literal 4057 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 literal 0 HcmV?d00001 diff --git a/icon/arrowup.png b/icon/arrowup.png new file mode 100644 index 0000000000000000000000000000000000000000..debe79a7d05668763ebacab14ad4f3e0d2d72034 GIT binary patch literal 4062 zcmV<44KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z1q(?;K~#9!l$KqLT~!swe{1i3&b?>8?sRDBfJ4VZ6){?CXbkF$AHhD@xex=GXj?FT zBnEvjCMK0=q7UkW@?b1rBxy*fPLr{M0b`IE>|9TUS>)r8mKA)s1aV=P}%`m_2t7IuLHO5 ztv^^Qg#U%W8AA~@J2AU_c4k4Qk{d?xs?d875!Aw~9VHLSYN&qHQihu2*>~d(?Q&6N zTU+ud*|FK>v*+G4QzQEtRI2#Un=BQfKVV>l^Iav6%95|Xv+k)Mo5;TD*G{cw1prm${loG6sMR(Cmn-<=hVruu<;jOHwtwu1 zBt%3@EEOiHB6YQNW14+-?#;7LEKBpo$p#MS1o+?xug<(LJ+iMZ=ZQd6n&Zjirw`Rm z44YV?uu{P*ZQ&;u{8zvCdiSRSCXon4j1!?9HT%r7m#2TTY?`-B?!p2sANklAFV7sx zZof9Of0N$k0kENx+_~GGd-8C4*PfJhRB1=$jT}y0sJ?XaubszGaVdi78m-?uw=_Ms zBF%$uA4L$_9**vj=g+)1JK~i~e^?3BguJ(TU{L09eDoUo>t{ZYeB!_$|0F0ygw+C0 zUG&Gk{95_*PNZhO^>X{$zgv~&;r*i+RXRR!&tCJ?L+>6qI%w@uZY}#8HTKrc`qnTA zYJfF`LnFNK+uMdea_gA+GePkRRSBmrhP!`wF?_?kv|&DV+x{^`p$N)}>&=<(-(0^d zHPTv($^bB7gliL70RfRM8CjE*ppl#E^^>E+&qs5MZm-CqCaZJ8UuS0lrkvy z-C!R&c_2FuQj`i^AO|`?=FFn$DItkyto4SFHVK51u_P@1>el3wCnja4H>biI>(zw0 zE|vKrM7}s_e{la~{eG`#Q1HE23<(SZ4NGqOD`Q2}^tZGnDV0r8F=QsRA3a$6^w-{D zPT?arkGQ|MiHui1ygPaF?(1t0R4B3E=WYbwE0zMNThjID-qzeb6Sc4Jshg!7F#UHeDz6s-(TP!*7weD;X%N zaB#qEa|B357>*`SL@+3u2zl!%r!Wal{q_n3C{nBs<+m zaRf;)T3sPflvN*b^46?2L4$^NO?1Ht*HuwF>k-;Pclse=gM{7IV+H;-0M?#M=P3!X Q!vFvP07*qoM6N<$f{S3sApigX literal 0 HcmV?d00001 diff --git a/icon/bypm.png b/icon/bypm.png new file mode 100644 index 0000000000000000000000000000000000000000..63317d2451607e68506653314fd7fd2649ee7e24 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^u0ZU_!2~2Z>i%T_DYhhUcNd2LAh=-f^2tCE&H|6f zVg?4jBOuH;Rhv(mfq}8m)5S3)qw(!*Z@y*+9%t*&_w`|U4(4x5CI&vKad^tPUZBZk zn(q1b#GKpT7!u$7{~LpMZ&-e)Z|XzSgguUxPS~zB8%K zs1d81U0|gCeCY(y;=7r@F8rvdJAH80!F!r%3z%ownb`fU(>`~kYr#wB$B%!mwXJbt zg{ac`b4@hh+^x%!{@q|*J>LYZ^YWH8EaUGzuYW&hgT?LCQ_<&){kkt0Zxi>GmzwXo zuT^JB&ck^d&RRQOZa=2JEiND}Ns+tt&bpo}AZH|f-o8jOXYL~JTv?E{m;ObcNb8zj zWbDiel2zGnIdSQdnL4RTw+yBMhFdelF{r5}E)ij@jD) literal 0 HcmV?d00001 diff --git a/icon/cleanup.png b/icon/cleanup.png new file mode 100644 index 0000000000000000000000000000000000000000..26885df7e17f2cb852550f47634fa8e525a3bfae GIT binary patch literal 4496 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 Ef>2kX761SM literal 0 HcmV?d00001 diff --git a/icon/controlbyhand.png b/icon/controlbyhand.png new file mode 100644 index 0000000000000000000000000000000000000000..fa448ddca5d9c919273b00ea1d2edc75d980e902 GIT binary patch literal 4457 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 literal 0 HcmV?d00001 diff --git a/icon/counter.png b/icon/counter.png new file mode 100644 index 0000000000000000000000000000000000000000..97ab15579f74d4c69108289d67eff464aacef473 GIT binary patch literal 5790 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 literal 0 HcmV?d00001 diff --git a/icon/export.png b/icon/export.png new file mode 100644 index 0000000000000000000000000000000000000000..50dcbe4991335bb18daeee3fb755689345d95cf4 GIT binary patch literal 4186 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 literal 0 HcmV?d00001 diff --git a/icon/factorysetting.png b/icon/factorysetting.png new file mode 100644 index 0000000000000000000000000000000000000000..6f1be9c94830b67aa1ca20fa312355b629fbd443 GIT binary patch literal 4257 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 D@H8y0 literal 0 HcmV?d00001 diff --git a/icon/filedelete.png b/icon/filedelete.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd30cf93d5ff578d6c8e784995a3b3456787b12 GIT binary patch literal 1458 zcmV;j1x@;iP)KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0uxC@K~#9!)RIp~R8bhkfA_sN<2a-F zrxF=4oBl`?VT@QJL`2ap7X{(Ug%Sjni<(w0f>yN{qBapNidv-7sy~E~CWN$-iX=$Q zktSwxteA0fCVFq~*TSip!H9}B-MhHo;oigf?stw7{%jfi4Z*IKEje$J6iHw#=o?lK z)#$ArOihXui-_fz%LFArv}3aGZfa=Ov~0bv@_Fx@ItA2l^x5>#6GIT^%+65Qd-Tu}fyoFPBPy$J=$y>-OUpdamxhlHR>;YSD=_$ET`rZ)$oue&|{#d~e5% zmig7=KNJL^JBXY*89i1hk2*gD{PwHX7wy$Dx$AZpGJ00{ntx{j3^Kw^Ag1PzqT z51sx`2st#cGW=FCkfO6z`2@;W%&LUY;3f_^Lzlr;OS@pBk&s^yvgOVFA#cZc-Q2m0 ztrMB569a8ycMgJ%gU)xa%tKz&1a7`rP*o9OBpr^>}bF7t%wnY(e$g0P*bE59nWt<8 M07*qoM6N<$f;D=)8~^|S literal 0 HcmV?d00001 diff --git a/icon/filedelete2.png b/icon/filedelete2.png new file mode 100644 index 0000000000000000000000000000000000000000..da57f909907f05260ee4a5df75220739e2dab098 GIT binary patch literal 4112 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 IM6N<$f-Pt`I{*Lx literal 0 HcmV?d00001 diff --git a/icon/fileoperation.png b/icon/fileoperation.png new file mode 100644 index 0000000000000000000000000000000000000000..a8bfacc5621956dbd10b3fc48c04cbc618de19d5 GIT binary patch literal 4067 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 TmU#bB00000NkvXXu0mjf&~!wG literal 0 HcmV?d00001 diff --git a/icon/filesaveas.png b/icon/filesaveas.png new file mode 100644 index 0000000000000000000000000000000000000000..ad89341a84de002c8f407b2da228276ce01348a8 GIT binary patch literal 4085 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 literal 0 HcmV?d00001 diff --git a/icon/keydelete.png b/icon/keydelete.png new file mode 100644 index 0000000000000000000000000000000000000000..da7627ef6b3df644e0fe8d229086ea5b1755c1bb GIT binary patch literal 4125 zcmV+&5aRENP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z1xiUoK~#9!v{hSdR8q^KEsmywF$TwRAc!I& z-Q8%asev8}fr}z+U5DH2g{G=-dA*=;C{OI_dWHLZ-pu(6j)(w2jsvLbq%_Mon4BCx z#q4Z{eCpVn(d@jPiPLB7=Y|eA&J%jTKyEjzfPYeQTk8fP7+l^Fjix4z9ea_B;z;Mi&Hz|@3(R}B z5y;HzjNNr`xi2HVEF1`+xwaOnrURANHY8rYv`tjCq>edr?9?@Dw~xuq-N_6?wrv}n zbAX7TC<>yQhK`QTochzhl{6QvCF6}5q%Rytp~=IkGYwQzklowX*!WgRmhopvNovKb z%Svx0CD7HZv2JBsukU)4a`Z)|gbhvoZ+_@jvilX<;6XzVx zqr2jqKS6*9lFJ1M0u&-|2_!8;mh< z&L7UfKrqgsMj~jaybhBK@FpgR>hWVf7XaIS7?T9R*t0udUASnJM-=^i6%P~{G|7Dn zeU->PJ!q+`L#U}~LeHwzRjvz{rf~q>IXO;fZlU1<5dUjQO5Io6ejrI={lz`%fFKAE z1Oc4$!2L|DBmKw z-B122hzPPQ_fxejG*nk-UrHa*dkvr)0F`k@mw!B1W)g|IVW8Kt$5*aj-J+(0YF;Ze zyJRKbFbrs#HiRG|XqpO5Q(;&pf?Zun;ur5iVN%S7XJU5BcwFijId zP0y}*XQ@Aw465Gy&1szos;UklhzQ|O2;oo&y@r9RqM}280aWGURLenU3-YMByZb%M zv<6jXIu6>}JEzsnnh?F46;Dlf@2xW|>+u4&tEy0Y>o%?*KR)jYK-DfrcZYGhp5&n` zXU-h8i3TO_+iVh{p}cHeV+yEdb5WH-Bq)l4f#d+-^0*Pswxf9{e@PQ;P~aXAlR%aU8_BB!BX@uRrXrt$opSoJ_{pU`LZci1!VTMxM{9@Mv92#aN(;Nl3{r zIAa$UC==l$!9h@k5_xF8@B3Xi{k>~MwIRPRIK;_}Ha zFPra}hWWJQgZsfjkN%KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0Ch=3K~#9!%u~w_z#s^tX5s(8m&-gD z2_nob*#VByCiEe0`ZkTq5w2{(LmY^tx`u)T%xbXTsI7LyKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0GLTcK~#9!?3K+8fFKNoTXYpia}6ED&D=%n1ulfbgF=jny^yrY`_f-nL};Wr8f@PO z%&~)c4Nc)F6#SEa?^ImmU^D}*`+GvXszj_nf`7}v;U1JAghFy9LLjGgib{~BlnFAX zrgEWsfI!TP)&!{mG)KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0LV#1K~#9!%#=Y6f-n$8-vGi+UC73R zdIFE@!e}B;W5$JoEfgbziT+KSS-kvC|BNW_mB*{<0B{13@CE%6;{L`-sBBm&RK3od zAi2(d&I|Fmj~=8jAp%I-i>U|?Vn=k4afHKBQsSPs#~DgAKuk_hCjd*Wqpi(xqpPW%=I)D6l9+?mXo=<4*;B2LNsLxDpCLd002ovPDHLkV1i^H4G{nU literal 0 HcmV?d00001 diff --git a/icon/keyhide.png b/icon/keyhide.png new file mode 100644 index 0000000000000000000000000000000000000000..b86824550e4fef2c72eab5bd7ae1a6eeda528cd5 GIT binary patch literal 1085 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 literal 0 HcmV?d00001 diff --git a/icon/keyinput.png b/icon/keyinput.png new file mode 100644 index 0000000000000000000000000000000000000000..09cf0c703c5c5962d4b04c95d0bbf9c0664336e7 GIT binary patch literal 1561 zcmV+!2Il#RP)KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0(wbAK~#9!l+(>`lvNbR@z3-0nV~aG zX&YNB6{Nh>2s8ylXq1HuU$!oc3!^KeVL|){O!N<6;ljAG3bAoxOh|~vxX~3cXxbpU zl0~5dgB>AsoC%%jygbi!VQX6wjhwqWH@|bwJ@@;&QSfk)Jdl3|`oU}9?e^nW-;Lgx z`E*?oHrIQt^S9F*q1-LkmqT;m@7?;`LO2`FhYi)14xN!3Z~ow(d=hqzI1wF1duZ|X z%TjyhHdN923}<_#-_HD`E)@$B!v+^gOZBl82kIw_d-D&>aQ)1@6^EL;&&A!wq4LYW zyM2(%fJw&(_k6T%=NHxbT;Jr-b!+@Ac$n2^a{OeSs|%S&W<*Su7+C{ zQIHqeiZQHb0Ueo%@1K5S{Ey^kgH9R{`*-HCwmaru2p7knP1;I|Zd#S0s3TRdhJG!H zoTk{AQJK~haiXZFEN9FkmNBHFprB$%ux!+ts)By;DhZiX&M^~OswPdSIEFi(v83%e zKe{EAZE{G&z7Z*Ey5y3~SIB%WCpIfJvE8jfFsWwA^CB&yY8ZA`Rnq}g-R%Xb%n_^B zj2jlo>_cXsE0)ZdSGB=93CIb)kXP`fp7@{BGDV4x1y8bGlB}uQ<+!>&B@JEC7IZu1 z{i)xumWK8i$+(v5cIuOw%H?=L)Q*3o;z{6 zKZ`oi{io_P-C`(j6_ysce-ISowpy5uyN`Z5P}%%(|2yJ`)cb1ym(};#ZF-ZT00000 LNkvXXu0mjfDT(^; literal 0 HcmV?d00001 diff --git a/icon/keyleft.png b/icon/keyleft.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9afc8aff696eebe2d082a70333f80b24f17a9a GIT binary patch literal 1042 zcmV+t1nv8YP)KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0CP!1K~#9!#FW7ffFKM*S7ZAB-@8k> zi4a}Z#KfH`Z)*oocy+{A0*a1+vIvyb5@pRmSwmBnOO$0RTNy&_DiCAf}cTaCQ@ZZBU3OUd(lC?xpr6L_mJ0C^@FLIKLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0D4J8K~#9!#FR@4z#t4nC#B^6=glTv zNUcV#87S2Cdrm&0IJk4*CqbbOD3nQ1H?|~o8!|RMl)|{CgOZt2r-;|Nj97C7FlrAq ztch#9xIOzTCrypTIQ$`q~^e T$L0u=00000NkvXXu0mjfhz;p+ literal 0 HcmV?d00001 diff --git a/icon/keyshift.png b/icon/keyshift.png new file mode 100644 index 0000000000000000000000000000000000000000..460fbe424580cdec2854bdd2689945b9a58ebbbc GIT binary patch literal 1621 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 b1o(3R0nstDSj|ji00000NkvXXu0mjf{=)y6 literal 0 HcmV?d00001 diff --git a/icon/leftright.png b/icon/leftright.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3e7cba632f41788363fedaea1e59afd0ba6a2a GIT binary patch literal 4155 zcmV-B5XA3^P)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z1!ze`K~#9!w3b_lomUmde`|mH`_66VOeQmv%fvP%X{~6Ymd1Fgp;S?-LbVwBgFt>fS8&VzXI)*53QS{!7e^H*)xZBAfGHP=dYcJA^tEt+l5fe*eP3PyXJe?GnI> zAz^t5vl7jfa!?Y3GJWM9s^K#2-EYTF&EftVs$e(-5cGSQ@=2?t^lGn zv3Ks()BiJr*9Qj!ikF{#cli6G_cv|z`m6z?*3`QAtgrb13?ykml7l6XMDPww!MDJ- z5SP9Npg^(-P_Cc9qI~Aq*VBzZf4Z}{E0JawE!RnH)C^1CJtCD3CCxfI9*iyICRqaG zV6st|E0t=ki6x~Je)PBY-VgprDvMhL*BhUGetYrUZ@!qFfAlM@X6(?~f=qS68qD@BNe%rR8&=3vip(@{U8A?~sYm8MaQ7|VA-C3L@w48O-+ydAK6zc% zZK1vmP9Y4TQY?(H(1*c*`dkmH8u}$#8q_r|6)cUoGT?e+s&NJH9gWNh9Oyy_D{|wd7s(}Tzf=47$U<8{RdbM=}yot$OWJPI}b@4XiiK95LQIy-24EwMru={8PNqxDUsByw%wMeu;9%{xxsZ>w{)d}k|p>ECYI^~357)4Rd zTGB$qlZYYIWKQX%N|q*?9v$Og(+#|<5gd&(-+ZL^#8-cM zabx9LXd`6&d&v|LFhj8kfJ;)GWVkHFH9Se0Zu%+s6ctAxqoxV4zf+A4%sqYNHa&LW z#LBPkIo|INuBmBalD@7oiCRoI&c5*ReC5TRl89+3;J_ld6kHobz!0oLB_=nfOGj^; z?j1+hp}qve#W%ka-umVHW)6M!-sx^97t_gY2uN9u(<&Xb)ru zFatbmKw~%5%ai%l}OK+){PCf9-iJ#xm{qUWK zr?xGg@JVYLw_{5qJG2ujk6kRWehCW+GSfmD4Xk#!*(t2qKwJYz!OtLB2O?Ow1jT@| zEXk*?`$KErN57WMZauB2cmrBj9DKSe&o1J`v=gvt!_PM*={C_In0Ty}fuy+3tmt^< zhQ!LP((K~I5r#v`=Cw~H`)>W#%-$P*>050o3{a%9nmFzeH`XXFETgqY#K;Q;hYrY5*Vr4#8jcjdD&)?fQ@R=i>tvd<`L~4xWG8y&%w=FP3k__4Y zHljE@P|3EV>AsIVyS20UjCqGrKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0EtONK~#9!?3GIjfG`Y1XG(9-V|4A|JgCR;2I9D}P>LVWL?}3`wu=c#^AbvervjYi z9)L_)U1tyhuw0gT5&*=MX`VqbZ_ls)KoVB+&@f0e$zV6C&1hl%EeFAg=>AC#C*5No zAP%F?EUL$K;lZj!zXPp-3>R;YNp218O4R*6;J@_mv<(2gzBA70X563v0000KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z1&c{UK~#9!wAD*&TxS))@&BEB7tkeA zH^71gQjoG>!2$$=9TK2Wfsmj=sFbLsmZFljZj-o;Lu2E|*q#~NGxj|0-1q%hM5#c? z5n1#|-|CaTpU%#&H9eHoeS8tc{nNXwY&Lmj`snx0oj>>MLxGWszHt1Lvln}Pn-_1~M^O~=Cocm6 z5r%kSNJ9u}`w%umJgl>}5?}k&EY}YO;z_;JF)r}Zy)Li(;LjxD z3Y0D(Avi$LA;S7@6lpI?@O~4^u3_3feLG;Zr19LBW=8%igWI=nf5rDaEgF?jRjs3I z{p$0dmQH1|qex1Ej_I&nYtXlBWLYK}l~Glhm=+@u*GR-;WYP&vjE|8?D)_$liw}WD zqj99Ry)_jC{?*sk)7-4aXgf0~cAev4l*^}Nrp7~lbMGHKc>gZ>d>+Fv&?^HB<^~uX zC{eDI$z^klAD`g<@;cp)S^5y@cDn;nMZ0?SuW)NK1j*wQLn=*6=8ty+UcS@hyU)gm zrHgF4WxBmMyMfGxX%VmOplDruv5e`!f&CY3%i_x1#1G|%W8q-r)fI(zcA_W| zhi}YUJbxhz>M+m!_%2J^Ha~y0&(}|tnSN#j2|*Z!4@ZR%2n6^(nUr8`IK}vIis=(W z4@=~_u54TV{OYbl#CMQYjh&{+M%BiNShzwXmXzrQKEBmPtu2yBWyoeS=z0#rFenrY zl!`?Pd7V>}lkDs^sn;9J0CKSB zukJWRaUoS9Rvf`^^azB+nWHjUrHFp~S)@pW4$$pKSglG>ZQ*%)*j|9+g^UgsI6Xet z29SH*4uR+JlUsQjtpr~_(%|2!vC-Z-(ev~*dP<%ex*_Ijv_itE^fj>)ZhnlDVa zm@oYdeYMSYeUDT$#7mw*oV(1->{Bfv$xbvH_2cn)C!R>I^)1^xXm_ewEdEc|brW-Q zb3c0Yfu+}9|GVgRI&AFpsX1u^Au%;1b9=dt1cVWp(Dz9uHHH%wqr*erzVsgt{2wb* z;?1|-CZ?&}fBP1ta*6k9WmHKZNf9EE2(lDms?+D)u0tXoJN867+4DSX+a?S{9;{aB zS{`aVL#x$7k|bnVW_W0b!0OX)_s}%0{X~Fa7@R$O7R$028ymxM9AdE;s;Ux+L@-Sg oP1Eo=#)%+cdTQ!-PXhdV00b6=ve5CS-v9sr07*qoM6N<$f?PTYc>n+a literal 0 HcmV?d00001 diff --git a/icon/lockphase.png b/icon/lockphase.png new file mode 100644 index 0000000000000000000000000000000000000000..5877c780aaad8d21ed1e7a452be65a01c433c539 GIT binary patch literal 3755 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 VwWxyC43z)?002ovPDHLkV1h_aL!$ry literal 0 HcmV?d00001 diff --git a/icon/nextpage.png b/icon/nextpage.png new file mode 100644 index 0000000000000000000000000000000000000000..58c6e5b735da5e55924c8f94a7cf7edac5851564 GIT binary patch literal 3662 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 cqWJ#@0Et<8 literal 0 HcmV?d00001 diff --git a/icon/pauseprint1.png b/icon/pauseprint1.png new file mode 100644 index 0000000000000000000000000000000000000000..dadf83867c25b96af21079fb662452ed9b9d6869 GIT binary patch literal 7105 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 ZfvNTQC4UkN_Ad#buJTH`O7U&ze*vzuw|D>m literal 0 HcmV?d00001 diff --git a/icon/pauseprint2.png b/icon/pauseprint2.png new file mode 100644 index 0000000000000000000000000000000000000000..e29bf97240f2a6eadaea9fb6c3425a5fa1b59508 GIT binary patch literal 7643 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 literal 0 HcmV?d00001 diff --git a/icon/poweroff.png b/icon/poweroff.png new file mode 100644 index 0000000000000000000000000000000000000000..0dbcc35c3cfcfc37784335bd28b776b568faa1d6 GIT binary patch literal 17259 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

      IMnj=WRs;dANW$cMg!C9zLcV#Dt|;FA&g0MK#q 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 Bu}%O0 literal 0 HcmV?d00001 diff --git a/icon/preview.png b/icon/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..26196c537d4a9da9def1d20721034eae61655772 GIT binary patch literal 937 zcmV;a16KTrP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ{ z2nK`DXf&@K4#$IS0Y;;7+~sm17K>qFVF9bFt56gLYin!BX0w=`okdqy7dVbf`u+aq zf`In+_R}hrO783HLoS!Y=d!%Kj9@SbmStsGmQ{HJPN%cmX0u^&aS>Z(VqyYiWo2k- zX*r({zz`A1vRola5|x*i(^jdhtR#!YLXk+Mn(_#Gq1Wrda~w{1JROl}%v3M{fJR40 zch}d~-w{Re8PD_JI1VP0DdPA0o8!-)8-Bmt;-iuhSk$aswZHPoV-kBSBWpntj_ep{gx5`RlNOt}OE z_LQbh9Xs(?(EtDxx_j^JSAsh6$j0HVQ^3WYls@;<`P)SU0MM_^x2`xiRvwXdAaR(7 zZ%0Y`M&RbPq5%M?>E~arS8G{0YBS*3*J`*8T(YC<{_&y#0LXvwQu9$YlX~h95I!j2 zi*jSEr~m-+UAXX@Q_ZBlH&EJjq`JH4006pr>1xvtb!RqS^oIcelstZ8pTd6y00000 LNkvXXu0mjf-%GE* literal 0 HcmV?d00001 diff --git a/icon/pulse.png b/icon/pulse.png new file mode 100644 index 0000000000000000000000000000000000000000..2f49508225ab3d48c6947b3f5ce12285016f006e GIT binary patch literal 4155 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 FV1fh@{67Ey literal 0 HcmV?d00001 diff --git a/icon/screenfix.png b/icon/screenfix.png new file mode 100644 index 0000000000000000000000000000000000000000..75c0b212ab8dea8830c0b6b8b727352aa359400c GIT binary patch literal 3071 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 N002ovPDHLkV1i0d*3AF_ literal 0 HcmV?d00001 diff --git a/icon/searchsuitablefrequency.png b/icon/searchsuitablefrequency.png new file mode 100644 index 0000000000000000000000000000000000000000..76552d06b39acd11ca159d7645037db041560e89 GIT binary patch literal 1075 zcmV-31kC%1P)KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0F+5YK~#9!)RM6d#2^eqZG`gw-OZbg=#5K;?Zx{&X?hS2Ka)2kR3pt zrkEWx0I_fwf)@OD2VSceDcWyPPkvYAq2?!@Cqf^P9labAp-UM1?gR|4^=%kP1^FNl t0Jezfb!P&8?E5-Q43@%PHT=KeGXQBtDoyI`pp^gs002ovPDHLkV1f+?^Q!;= literal 0 HcmV?d00001 diff --git a/icon/searchsuitablevoltage.png b/icon/searchsuitablevoltage.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff457ee14043923169629865455b57ed56e7929 GIT binary patch literal 4268 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 O0000&) literal 0 HcmV?d00001 diff --git a/icon/specialchar.png b/icon/specialchar.png new file mode 100644 index 0000000000000000000000000000000000000000..39cf8ba481bd9324dadb601ffec7bd2ea1c769b7 GIT binary patch literal 3004 zcmV;t3q$mYP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0O?6YK~#9!v{l;SQI(uCQ`|Xh`3HsDU0t$jzOV7f|tX^ zkUIBQq?B@(HoyyU8-~e$!zRzb-LrT1Mn20XGLMXe82RY?jzA;9C`;sgSElr4&g)>T znk_+cpLh;Ock&9ChPpdL)c#7q%p5mT-9S%7Ql#d6LkA+ydN5h^=duycN^}4ihy-n7 y8|bEAAI_|*<1=~Xuz|9mU-6M13`=whzX1T;PL$GS3Q}7D0000KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C zm9|MlK~#9!?7exMW#?5Ly7t#4b!%)%mMm*($+Hq`1P@?rY;0`!!3#El#~>TS?>&c* zmjp84n1q-FLI6VuQy@GBCkze&9$;c1I01|;$r#U)Cxizq$+9fjYFl%6SJk)QALkp^ z-rqjAs$1P%rw#3&++9_7IQP~)>+HSP+H1+zzWHnPZdv>t6#eSX#gSAQOf*%C9dLR#aDBOAoC4$a5ssEj4Oze zS=8IcNup+6r(2BXG#XD1&!O9@Oc?)f2Cp~^3 zcLFjHD<*6Va=ogH?llK01cIyPe?bM;-c8v8lx2$x&MItcuRx)7P^gUYQUIhf%tXA1 zBPxOuO2_gpJ|lxUnyw%ubnY?B$4`eUPghidbidCf&|6VKACH+`ExdSMSKHW!HXec= z(h2D5e;dHsx~@a0zu-!4J+C*Wqk^56q5MrXx2>Z#z~oI}vH^Yu1d7yn%IHZI8>lz5jb{bK0 zg)bDdg^HE>JO-}l`CMO z3p=&3x?yH@tXJW`nW#8kU?)*kwD3;WfJ{AD8G&PLY^CD`A))YNXm4jl#j>DtP}#)5 zva-n)^R$Jj6=|R#uB|g5sx!#FonmixXy?GMihEUKAf%tqF`-d2n{@_OmFI0bg6x)( z6kRb_WI&bqO7w*6XOHdC^P)rTKo8|ZSl?WqK&_Aw2I$rSY|aJ#uy7TkVHM26ZqoX1#&OwVgN+~7X^uu9;{ zVCF!z0bi}IROWwIgQ9s0L2wSLFCF!GW`3sir&1n3s6taWev2!&S%B22h|%%XR<8d7 zkd){)0<5SOPZ*#R4DJ50n%A|NU7qmD09~o%uvz}jrHy5=Fq0AtbhV}RjO=lp(=E87 z8|owir}}dNut_sBo`VU`(g@&%z(a&UsEx1YTV7FVCsGy$7zb?9AIpHHe|G}N;+sAs;FV67qwhQ1Bh@Hvg?I)c0Q-Ui&q_COLKcO zI_T;uJ>Cffc=`AocTnbVKe(92- zj@nRlAW~69eXH2F8N{{gjWpto2T-+D;Zj^BsTD@46^?)ufJy;Hp(=wOzi*x?J)_!c zuC}_tm1%koZEd$!QHMxxNd@h7=*(EL)px{dPPN+{F+t#>8qd`f@xQkOH$^YdT&t>n z4p_c6x&L9J%eezwc7Rv^)BfLDV>VznCCq>5EUe$8IM(gpa%XeF z(dr0R;;Ok3%x1`p`q+L><_QT!NJjK(jOKjxBBG_jQZb+=5Oad|rxtT^D}%18U+^_; znS>wwcx9_Tx^Vkh9x4aIT@8i4(X3W~Q zXVX>Hte!AHcPx)tRr|%l16u@ixmI@Wm&wT4{-?TgD`SGiR&;&MNsLTFw2$>oRa5|G z`b)<;NT%=0@Zqs7y{cndTOpX_CJ&}+5$Fa9Wps!Ue^tj1l+fI;0(h%F)qn0}(CbCjnXM`<;7a7M zQa=ki57sACou|k4h|O+uWID0Jh+@r``Bq#xzxaPF7}*XSy4Z^t$z(xgnmO6~sI7xi z13FPxEg@+4Kx|~c9b|0o>xO}6U~8)^fpWNlikRn619WOglirF;dp`G$q>+r^{apjP zJS;4Gy3_l@06fk=wSgkd{s@Tp>FNbU&1OS?&U*1t+CzracGz7hHMj9BA=e zu5vgY@MKj z!{>OacoTuL^m!k9&ecn%_Q$dpD4{Bt3=Uk?s1PJo6tlE38D=TPSc13V(j#Ury`yT8T_YN&&WTycQVJjUsyAuhC3o!uWh=<^@ zA`rC%hJS2+4tf-^$JPx5_yo3KJ4_G7fgR&oAz2W;zClB%!AviO@3gHD)l_&YuC~_x zx?4-Dy=oJhi_vhEz+cVmvsY&m=%rHW)%I45h?&VFwcdkul+m<`seqUE>xEj7?-eew z?Sd6-?P6y6m%%Rr#TeAajRRXX+WSgjRNK!8n0h7F z-KUeld|koTyhe#Bm{!3U&Xtu5Fm5{BWMsaW4(l(HzmbO=j5rEY>8$IICPRk%TuGOD% z^~nBr;+xg_x_MtVGFKG~9^zUzW)#G-!Ht|rg)A6YX)ZK7p&;})(?z?7|+vrAs(thLN>-p(EA+7e#=@LOBprAdPQ zQa`h@Kol8simUb{s2u%V&Q@u4UL<49Iq0@0Yq1dEA)l{ZX?Eom_L`jQQQDk&LX`{#Xa+B&(q}hKVR~`@z!Q1EsAN4SfU_J->6uyOW^2w)5|T0J6M(c39W4v-4p-70t}J znh`+&bkRI7fIb2vX<}VL5+)QZ(8yfNtTBKM8yx`&V}REYF9ja#HA~8hTrGL{E%juD z*s(rM>qt7HZSFV-?08L1J5W?~ssI$8Y`n!mm7uyYoWbJK&bAdb>9U(fc&Gz7kd#Km zuD|ut)lc!9{D$S!9`Jz0x3miE)ZXXXBH%=qJG_f>A;#U-aky`0Y=Li`pTpUiSqITn znL&DP17=8&qy(N^wfU;B{4K%J2(hp#gPg@5ukz!%2ezq8~gUx@JlLY^FvrR2)ifTs}>(> z6V)tWC)(My1pxi>=XByLt~iRpi#cKz6_|qz;hEgPyfSgn+uOKZwav812z*_vJKk35 zl?+ZPBD2XBX3i*a4D58C$}p-Ebu0s~uL+S4QuSvY1dO?-TBg+k9vVQfV3?H=_1}#U z<-whis$|2)TXz&4j2pTGi#Gqr`ZsTj^lI1+411@o!<2MnX?Lo2+UAIUhomTL3&NJg z97@!_#g4#(Qf<)AMQy8xIT1TMGi3m6+j zA;B=DCQqc+mwtdp)tkr)dnY1c)EQm5^*WsuA1@U0+^+ZWJifK#|5|0|X_*zrgF zbVYg?$!scs8f_iV^~%iAfS1^zesA&7%o-ql#qC7F5<#f$?Csz?{x_G?kyIVKP*+B@-cJClWWsO>~1Pmf~C_O-#@3oGuj-|&G6K-uBrueN2y7#1bh3eM(WaKA51za^5{G0b@GN!q5a<>BCS@c zy=qjk0%ncsq1N*H`Q3uIEROSGtsP&WlZCz44t4!STDU_LNR%-7MTg8`<1c<3{> z2nZ|QBzODxaUz2NzfQ)|mXZ8`+27??mV&F62oPr?)z;E*ltYxG2CHQa=!CvD8xFOd zRg!p!*>k8aCiT8Fv4d9q-H_Q>s<9y;Tmel@S2x`*!--~G#G{&uvJxwzlgqN0Hr4A3 z9g8fK>IQO)QF~!l-MLorNP+Hn)St%UeEkD7Esk`T&0a|>G&FkwJtyWm!Vl6s17BRiXPM+$e$X<$Pa-y)UbM%YX@y+CRuB~w+SF*dE+Ke07RQjv}@_mC@{I zT=|-7VPQnVDPmq{TVJ{zf1T#^dKg(=4|w2JG}s^@x8yeZgi7e##e6^;VI_5eKu!+q z^~-?C&*;@t1uNIIR=4F+{V|g~?b2rVJa((05f`@nY-B@{o@1+3x zvVy=6213Wsn$~q}LzB2x7BJx02HqG$vIiR}C$u)w9gP6bN++5RCd3tfG`Uim%ZW3? zRE4_fmau)WP{k%ebdXkWzvLG283@(v%T}TS()WIa*jJHURd%#PmhH@Um@)FZn8D16 z-@Z^_*b!m7sp(})u#K_M3UA0+IX1_(cFcigk=qe69H2y6I!8A2U>d~Uavtc!t#Y|4 z$!q315b;dTRdXKP1^^W^;}f%@mK;Hn0>QBpN5fXDqbX^y86v#|GsANe*=WRSE&Hdt z4AYcP0B9~%7r{dDwbQo3r5wU$6eMb@K?)Tr1O6sisSKp3>Zy>`rjWkE~+GakB#R-U5Tj{(M9 zCB^xbxOtpsRaX%SGHE%6Szd}HC8f=^T0LnywdVLL(9NxrQKdHr{=vS8GY()>tFuFP z_OK?PY}GD2%o8|xQ7CqyEATog!Oq0!^n(lK@g#(ml{7$8+pvR(C7 zT4Hrp{7U8qa0abi%A&mmChxn>ykbU;J1`qrGTBuFh=AUk`Ed5gbBqGAa;R*3=5 z?KFaf*1bi#&}6>Gud2?eh33}|s>=Ja{~zTx(T-=QV(@kmPe7M6~kYg`#G57SIg z1E~t%&whfFP~$0n86MWKh)e*~NL8qH>xnkDNsq}t+w&(wCD>We1YS2`P$%>Ne|58v@ z`Wcg;l2aC42m?Os(efyRh<=t~tq6j`e=LRk;GUg`t7rt01mV?7^%-hu#6eHF6!%5G^XVJ<0pPG%B8*pU7uL8y(`J<-V3 zq|MN*#pbx@N`E&%lwln#0>BDhhKWtK4YtDNvBkEV6HT!IOFLDML8JXSKeHR#*I)o&6S@NWLLlQB z+2}3Yt0zZR)E1LLZ(vKs&+;m8Ss6;BDMb3(Sftx)&yk!y&ua6g*_pJHBn^fEVr`Y8Nte25YnmeUESRkXfs!38A zrR4_nEG|wBI?H{a2xNkzC3D*bnSfG?TS;eNx&7^;>Avw%A5NT2JxNVk7c8wk@A^B0 zxjohsW?^K79z8%_JK9Gni)vq~w(`-0;%*}dA_C*Z{y~f^US3RXVgs0j?snt|h_ZJZ z>E_sYvwkm00B+2{*0nOffgy7%X->TCr6|d$2gli`up=`YT&6fQe5m!@grR8Xl7JXU zayX#~Md2Bp+lQ@y(E!D$@e2GE@JoPgW1+}x=T+?-4d{EZ8oU(KOmJ^jw05X$Z6_^c zMsU$|h3eiZw0AECp~4p)>f8-rMYqKL?`{6{@p4)WaP40k;`}Mb0wFNQCr4b$c?Ol^FbuF zQj(=K_tH#KlM3R!y0hVE?0rWqx+pDm*g0L-Y>)c8q)}wga@pCVHC0?Y>KLa>06qdH zLr6q!yV0D^Rc`b+rs@fn`aM};SyzOB7D`Qm>dw#ThFKrCyN(ROAT-8k?=GD?=IVBE zM5#a_qoavPU*n1+!p9;=-G{~`w~DV;5Y%&GY@f8*B5}1RU3`o@5fg>`t-BLRsvB~q zI7TH4_6o8EG+GloJ!h6YKM3Q`M`K-s4Bb|V(!8*MeRELOk(OCOYjSW||LiId+XXD7 z;yVUmxNArI*p?(7<}YmPxuVWfmW?1@d>7l+`RZq$L@4)C=_y~)rbI+Ulz&g{<^)M* z*(yAV^2Lqkq|Gfm_GYKy7d?43eTpmYO8FzkeF*Z z?`)!6CMg+#7Kur6cJR3gk<$cs<*r#0&HZR?%&oR2O+~9$*U8-3!JROHk-1Lym=EaqY@QxM8svX7(81$l6gqvKM8)yWs0A|+_y9qRs+=A+)4~o!Mql$v!A3 zTPQE2cJG*2b9O$*6MFy>yb1MLntBV@^J==kT{o>9#U-32(N1Ws*6dxh+re=1rAkyC z<@R8ewxGrQtgdRK#r;|xH;0r|NQn{D-0G|~69BA(jM3^bvCD#EdjDYU@zu1mHQ8(| zBo`^AFhs>8JJ_|O1;Db1_r?+pL(L(h*P0g#TNc-Ejd@V8?Q9YgU2T{C8KAhDOLH?i zaE<3|n^w*8(m+&BgO8>tEa$R*F?r(jaIl!L%*VTVD?` z`wzVTT2KB|D!M$dvR$Gw&E%>|~aZ5+9cgtJ9qpYCjBCkwnBNHi7?#lxeM?`URc zwRSQjgvn6pvFT+pw@n5FEzl*CH_mqdm zqb=;0HW;ap7B)aP6#z{QNb4?ZpJYy&&s2_KjQZx;8*?0@GtuB=SSqxcVPI{^R_?=I zr|t~cVIk3o!>o>m&#R_+*0BSju_cG(_~#Vo9AfxUo&oZ*|15wx&6}IoiBwV|wcDp5 zlY-h^r>*ldJBWWS@9ZMO%A3e2s1_M7Gh*M~na_=56~&~_j{P zWv|?_TBg0qO}aU!V$6J;NC$Q~Nm4NP>HVTT9tN3gcmK^wyDL|z%U2&x3Qjfv+l``gwb04NR+w; zBNUUl8GOx#C^NGLasq-oAqG~u;JD>Ypliw;3(K}mm7q{nq?DUq95b@avQAZADtQy# znqUga$z;aawRpLQ3N0%%x zHdq>GKnc2L+oY*-9?JiZTm?34@=1LtIlx*ypVJru! zgv*Y#CIDQo1rn2H1Emyp({*z-04dXoSSD~2(aylO-|a{`RKh|9aU$b>~eK=oizZCLAT0T9Q_8zog4gn1N+hmfF<{ zfT@&4735mWTIXiOskY_*qOY4g=~DATnUE?^_bb(5D*Ln0j3m^`YKQdfvL$5@7SnAR zxLo92_4V_qWi^3Jhf2)tNh+6{Hj=TGe;QBj7E{?FcuB_t?97wxPzx(YmGAAFcu_sZ zW%bT%YUOvf_OWxoaeIQQ9`X=KA~V{xU}HiG;Sg0}4(L*(nIl60FIEOsh#1;m8@`QT zZ&t#P9eUkEuC6mlmB_(|t;#8An%PD^M};C0xsBzW*TTNC+ez{xeJu-N(sg!fND66Y zpQ${i2d(MYQny(zEw7*538B5xYh_UE;XwuR#9QELGmGdMu^=);t*@PSJ*e5J075T2 zXy3E-*&U1P;vT`F9Gx~+b`I#ROeFfD4DGD6`BcCt8aF1y1 zD5K6!OzG%+nenXiN&;7%SZ$b}>(Mr-YgtXpD^{YyGc`j>M7HcqI%w73fj~5k(h;$b z52x8nZ00GQ>_`&FF7jiVwp0Q);~@Ck(zpREy^QB`i6F!NxJzn3NE%Fj%C{mf})eJEw~2S!J5N@rFhF2vqPY)mqz^ zow7GFX$UJ2@?4MkM)9G!l#FJQykW)2I@8L^@Lo7+O4~58P_l@*ogC*jc2Q!(+KT#0 zPPvtoz)D<(QMq+57T?d(ln%fwVc^!rfEi&gM$s@i5hwb8kvZEYH?yM_H4XOc!EDdS zP!ehH*fQR(uAyy!)DzkfHqP39K7?H9S0zSm(UY|%?M7uUZGI~e6!dkg;3)ewSN613 zcUESSo9%n*G84_EjZJ0Sq6FoX3NP2+UtwuMENp8#ORFkF51%G=pQwG`w7(t!j2xxM zCQ1tjGQ@++S~RAgtVOgD9R1&>0*t|JY3KcMX=8N}Rb3=7v7tC&G1zJe33+{S%cNE%sQ@e-C*>t>kEt3_Z7WsLxA*fq1W z77QsaQTg|UW*0SCzV%s>2S0#F2^V0kWs9MbBgsJ-3`1JjRO~{o0O#gzs?%JqkrCjQ zHn&!@ezsC^NwM5CRc-Y%&?>rmQl%+eTgh45I};OG)6T^r48~w+qCtGDwA)+OdwWo} zG&SDg>I09cvTJYj0*DD?5NUD|Xf|iMRS8CX){hNC_5>3hevSqUh%$yQ4sC5{x6X`c za>C+T1zPjZ+NSmyo@HXWB20*+DajfN42~`6*=RCaM%BO?3wU7?FRdq~fmGrTQ%ec! z;x8kCkimUe+?rTrRQ*;&qH3?-K9hZZ-L??qwhvpwcDiFQ&*!QjI(O0mmT^sWj@I6W zLV(nER&6!rZKE2201U)T7h;n;jM^c>=mE%cR5iP{%B%<&6c^OWK7w}kh$_3CwO)6X zm~nI!^8qmjIt<5s;Pu#k!UgPr+YF4YDg5`1XI*Od9i55&_h2_HoGirn+XaA}YaAtkz zsLGQv=R?umX|498uX7c>-L&hPTh-R;yfPci+D9t&9?(p$9ZgyTO`zV zakZMS0psS~&D6=z#)&Zob%aFkeES^JI!wuutv!tp`xsVsZWmUL_iI!$J&X5NM>h_h zNd?Unv8z#>PO?Bov4OVYNp$iG<+^qN!;Je#5{w`;m~y&xG6~#HcpXjRsxrYk6EiDo z*T*o}MHvHuNW3i=1jatC&7RSA&$YRo(1JhMldhb|T`FO(?WyVQ3O8HY&`ed{)D{Xd zIS_Z9TPGv>$9n=gsZtZ2ewVrYPP2BIkut&Hs@}Rjrk>QHP@cNRCA2MI1jS_E4gz)# z5a)|ZyNnpSVjIF^XMDg3F`BC!(_y&ptsQAqwR7uXvCpuvP4|}IGIQVNQY)kIRV+vj zvn#cm6^4uu%Z&1TaBic)X3ApqY)!n=Nl?WF!0FppD_uczKxU!@0dtE049&IAI2Fsv zf5Aqlwza1onW)X0y;du#yhAZGv0cv5ewMquL|7D@I^fZwziOGsk(s9vu4_*|n;6+z z<%uC#sv$r|w^o-rb94CaYy=Pp3Ow(XHm%8o~M zw>@-TJN&9@=UP~CB!opJCi@%%tIeA!xSN>Sn$2&;Ftl%MtiY^v8BhTK%()7q$U=k` z$i%IhiLW5-R)(z@>qf-brgkb&7ZkZ%T(Z&G zDTtY^w=3Y5Dp0lexQ|~3GZtzQa0J!o zVS$}4Wbxl5)QxKoxm}8 zlukJlwX(BXW_{Y$!Zep$FJY*w8L@S4my4XFuWU6Cte{k6BS{(u+YL5FOFOHy<>BFF z`m{~$Z}F;Abl^5St=-mYa+jjLTfo^oNt?m3HQhe zty=fB`)Hr9)i${ob$u_m1!Kd;QS^{AF^{KkxfQ%0#vnLQ8dx6Ox&7c{LQw1+9W#2? z372k7zoZVR5L$%yge;hWyw}3DR?+~PgHs8-Q-V#2WW>QRvX8+$GY}Rhw>H*R$|7c# zex8h0Zxl46wYi>XA?H1Bb;a*l4bc%9s%x`TYi32(&Pmj=jP1l^d5O}5uFmmTPli5Y zQ|D8co4_QOeb`*8u}lsp1$ZPiXJQh^SrK)q@>CVM2=t_R)Ky{fls48HS=IKvR>P_g zX=1D5QU{j#a3M)r_J)ugM!N-+_Bo#h0X>}=?p3K6(2#DyuoG%|{G&;@dgh zIY1w*zXJnKzMYEQei;7Wkqsk2I*=2L5r|=wqQAFgQZa~#5g2*~uEjoeOgu1-Z86XL zQnbz{fkSd5Zj!4^?Q2F2{0lsh`_iFw`w!>-B(%_>ws9i;cDeYk7Y9=gbYrkr=f8yVi8RzbQ^c=iQHyhuHYqq z*4|lQQl7W@o!6PwFzs976phMTFA7@kEn&+k~)Vb13x8J%T2ReW%ERLRIt>dz45R5)@% z&?*U`3ql7yH&`;ma4&;}nRBUeK4#uk46upR>TVM4YBO*Gc9mAK&hh$QD_3z%Ay)vf z)>b?h>wB%<=z!(BQ`Ja>L_1zFjCI!9#Malzw}c6ZP!SXV%JLRfTdAo(d0AVhtCzxj z2dA^Rw!?s@IIM`Ywe3A7z43WxXLKuJPv!yA|66>!WoCe5D<(6y@t$yfGoV*?wb>j6 zzR3|6a1~+-{O(-a%iFYtP>EVv19VZo1%<0CbPcqNH=U`%S$o$B8#UnN zen-?UY6CK9n!C0YQRM%1-liu0aQc&)Gx5ZhP9;?C6=yXONEta(!WnwCC$*Y0Ba@=B zb7V!+F~DI+V%D|~p%@)2jxYZj=T*rVygsMxipU6oAXc(CnfYLB*ivUK}K!l)B@kY+YWYg>abI^IgcuZRVbdeax*b&BbE9RCDF^H`7e%CIFfAZ)U0Aw~vjq zsKBVbk|kUETKV?K+5S0Dwi_?tA|hsvR-cnkK=DQjs%ezW_GfILiRheb-~}6b(-KF4(Q>1Tp8wSl(}e!^j=Hn zedHvVi6LJ1f(g-~N-nubM%t2yc5+jcN(Sqik^mq%A3k*sCw|RNW~y+LJpoTwG|e1u z1vI^!c2L#g6DK4xt}%zT74s!`PcQ#3Z?edwYa)!PNgGs5Hr3o5sD2GT5&XM z+Xou#@Y25!(a^Ky0lQQa-Pc>NOEB(>1h515T2Jx>SM`apb`RY{cnd)+tC<45n%Cxu zIEFTmrOZ`v!xjbX%x;(i1}$x0noEVn4t(vL1SP7j$E#-dJ872Twau+|?J7Md7UZ{P z0%Ww`7u{rYn%!l~%4)C3lrLaPestt|GRaEBv9VnM-7XHaOWPl>gQMyu$!aF;oHQb# zR`1;)pu3&eQ(1s!FU9su?Az1^D#{iM^au?Ec|}Z&068Kv7MVmQ+iR=W4g>0TzC~xI z$>Xrdd?7biUDWo|Y*=WUrA1@~B%JWsny@JB4e*J-b)c_fD3TzREQuNZo5;h#K{y3% zuAj#RgvC}ZE&7_7sdU4@Y?=8ydH)Wc)780?_7j-&U_yJcZL^}xxoSYQC_<0J>2uSy zbeXC%;b_RZ`wA^v4t+m3tC$_%3W6$}t3efAi%aC^C|bU1wO#|UWfJrCEr)X7T<@D8 zy4mYE0xSta23bVR4gfL`5B&lH=X2L64Aq%3ZXp6=+4@-44jVleAUPQ-IpZydK<~w; zAZJtbokeCm;j1he1ENhvgUG1ElMz_Fd?WU*qbS5W@58wBYFblg29P9nGj33-Ok$*A zs{+E-QE7g5XM(iFNxFT?mbG&d>4MzGM6#b9`jUUI?1aR_bV3&=liV12MXGwc&aW1S z6Db=NWpje$HPg@YR0j&p>dI%U!I%=~s<{MTOUboxHV7(x8=~q!iAff3!$j*PLM*Hl z%PKV-u$B}^ws{ig=cy}ji7zfQ-7C7y{bB`o+dQ;%B)#zxUXZDcf;r+qOvrpoB|+ksfB6T0iR)i|J+A+u>#b9A1E|yirvXdq&dO<=9k%;ba1;xQA_=GN zJr#Go_b&YAb-ytJRefxv8SDGLEy5s}WX9VMQe-9s;BJ$~E$_A8QxY08_?160hhU=! z3sTbof9f@#!lz&JY4hpwB6@S-jn*2`eeu}G(I@ADZYMM6%wTN0#6R0K+1z!(OD_1g zRfCg}k+uAXj7{A{#wN1nwtsj$hm*tps*`*OMFFxj#D-iaw+e83QuWNb@H~-pu@xkBzAT|ze;GPfNgIjOB73V$a zJe>KMGf4Y4ZexU+KCx9L8|Raw* zHa<>f;skWe4sLc#_5!C$kJH9;y(JwkkWjn&77Wq(m_GAA_v7wg{1hJi^9OP8!v~Sh z*oECs*ximp+2_y35)JYYLotZP+|cYaHJDlz+E@)xE~MqFPo2wuo9^%2+w--p>#8Nd zxr|nNLO~>cJxQFbLC4LBxe8KE)kN}==t}2JE5*k0*t9X21^xQ{2XA>0H~+nx0RZp% zzut{&e*9{j^Ne%G+y@2)M;IX3q}cy~{pR&O?K_`pt>jI02eZxL+1W$)9>jrr54fv+ zp9k`VhBI2F&8fs#I9Z~iyz45^)U{%~B39q$k6nK&K6&$9IBVZoxca)Qi@ka-#++SB zQgwDH`Z|S9Gc|U!c0+!&`D8{5s;>K}G>fa&?6qy*)IwrpyCGrX4>2*Zrh_P377u>t zA>8+_`|-(N_@wzn-u;tzWAgx@KwrQ9O`P?$d)wnSuRIlF0VTAT$8Iv+loMt%L)llW z35@M_i~7<~^{{+Vc9xip8RNC3j_8IXQ8AW4?F3`*I%mD^c#HmMcPrN4y5W}8lbeH# z=9Ezm10tuBp?Y-Yopjr~Uw^kbw)gy#n{fFnFUQ4Seeq1_jo+h9EJiVpUH^R9Yrf1e z!f7N(5Sa%|GqYQ7xV1gjW3GA(zVX+-vFB3+4l>E~OI&rOmhjboKh{E@t(XE~51#w4 zo{MX)yQTmbnm)3htaY)zhfuf81)Wxal1N_<(=Ha4#=?pV?3OnCw>+|xeb}-ELB4Zh zv~cwjy4haiCx7j3C={Rmy-(xNorl`%JL@aX!by)gsSq=2FB-+Avl;-HJzMP;W;NR( z^MarDJJ7klP%*zxyD-4p##66tPvds{Ux%!w8@3pY28=3KTBlEdcj%AS7de9X@Xvf0 zB7%KieTntA3s%6q8lPu6<9jfskBwnH%w{LtciX)N?7rk*eTfPGmSGkN1Aq)*mG$hy zabjsr79fSbxL@+;z4Tglawd1`ma2&=xyrO=bXVfq8Ni5z)q=kQZ~FUh!dZXoEL`y& zR|K*lbO#c2mCT3#^G5+FF8j92I_Fsc>b9S|0}tNvAntqTeeD%I?$wW*w15iie&WfH z()S;DI^i`I6I=g9+;T}bU|)nCb}f<1q4H_~Ynh@A40Jw|e2 zhS-wu&~HD8`+oWU>B{@fd$IRx_d-&lAv?JRmw|n~|6jfGW4Qla(|s@g){AlBbr-n% zM6)<{8HO8ji^;AJ?(*7q|%ka6cf{Ujd!@6IdM@wsiApn&3pb>;g7 z$nr-sHs8C62fqG6q{k)f{*IG@M-R2#mRSxh)y=SWy1Xt>=7rB|SnMA`Bo;BFAJJi6 z*YQq=*4E4KcE4nI`!H2EW1-EAXcXJpRCUa($Z&fJMYYb&S1@i}Fta9B=Z8>_7kRMQ zs%~&c9<+E}1K5Bcz?**XP3^Is_ubEPRiqe_$Y*od_XdN7khKG^`>+^pJG}R(xelD$ z3fy|bt=*1YwS?PDz*qsLUilRY&1K$)2_z<&NgxiMBoe=syENz^^2Am7Z0A-vDdgbp|_H^9O_=F0=NABEx75mH{q)5uEO3+ z_M-dWX$zaFV0ho{_u&Ko{R04iGcGv;PyV_mo7j1*eK7n_F8M zRuTN^54@=X-SfZu`8egQQwC##Pu%8)u3D&;6Ir#pPdlIUarGdDwmC?x|9%kEgk`jZ+18`;E6XusidTGja9byQ;O2 zrmaM7^RxOh5rt+czv#`zI9I?6Kg-gY(GF&68%Wx1wOxe$-kxiAj=iTyt zG{=820SlgA1;@paWeXe7^ptuE(p+e--Y$`OY!s(PiAG zXp6zsvXJB~uIvSL5HX=O-KyXzU3oPl$na&EZ9^r`oK3h(^ccj3}!U5Y3DA5X+t`_6WD?SjAf zy<70fn?H%iKKrrw{BQca(S@aaebLny;l)4tV*Ktu|6Tm||NFn=#sBfec;a)O&}Anw zhPb4{psE6I`{lRc;me`3c7^%$x?PnV2rD{{Wq=Iy)8n63jufsW)or9PE_RHyg&|X=!5SQuwzWADp@srQ{$!&i= z{`dF)(d^IO_ycbQ09<|DRpz;y2Z0JXCPx=Nnw!bkn#zzXLE>k%EBzQq25Bi{+(B>v z5kEhirf>eD&U6n9vpUz5#Qf`wdM+>&5T63K*n&y7JG0yQrh6RnTi>{F$Ob3hif->_ zMOq^b6^`MAlTifxut>0Sw5lj%`y+AH9>A{5!h68fzFzqqSK-Zn|4q2-t#{2n*TMS^ z;*Pi6vE{pc*L&~s2Jkp=?*V-F*3aT4zy113w_c84_?ln9 z{#*CsyB_sj_~HFO4BO-b{>{4NnoID*`+uYubykx$J7|B?PrM0l_;+sr0DRwF-`CjF zK1(ahjwLI#1xGjEx|#)n;&~?_!>-ybnN%rHM7#8&0T(l`>^Rc4E$r{SKCdbakPU)e z7A23Aj(J>;SAt>zNCs)J7Fc}C5ft2~EyIAWYly!$aeOp_Ji93=xG4D9QDNP)} z(uWjk0#R&vSDAycf=yhpNssN5B=gYU=1FR+IFb3v5^z3t6w@aoKMOcfG*xn6@^jBM zOZdA)@V;MsKi>JH@0_ZeZ@n7Nc*QfCjT6txe(JG5)gJ$A|J&CVEA@$}ct23 zH{$F|&%!BtPazw3jA22JjXm}3Q*q8^=V1TGCdtN6KJO>-O|N+=9`)FBSN^IwzEo?) zBx;S-7?fJ9A{F{7v`U3;s@W{1guLbu2#l;0rruvNySfqET(fHhlgPJx7RNSLVl@ZP zb+gNa9UAN4!>7?XV{O^P!3wvcrnl)L@2FZ6czbsZ^u^0s8`JF&6bdJ5-$^=UW~bF? z*o1de1ISdE4?$PRtEt**j!SPp)nu?oyrK+IJUsN5`B@|d^9+I9!0NmVu@z^Mu?~Lv zcRoF)ap-q?>9h9X?0sjq+uZcpoAAaTcq7ib^elYk4}T>ty!ry`z#`6`fU^i&7hUl+r7Ee$Gd%Gxo>G`rVX6ixr!vA8a|<$nieQdM^R=8guf*lf z2HG`{Y3BF>0wYm~sc!c@>r$MxZ!Z8TK=-ErfV20VjmLiRrp$`CPgP7Je8GCU9&KOY)} zp-WK7OV1e=cypDR^MzO6n1L1NbLfdI7$(`Grw6*j1RKRnlkB|j)ZJX%sWE`da(tk4 zdo#PG_2NOb$7BU$toGc?5t*y7>Y&&;VYm<7+&%p-Itu>@F7vY!$$Q?mA19xA63+Tt zXIq_J%f0}tIl%P2JKu6A-tnXF005kO#ko^UC&_6Ff!DqCckBg01h-y)EB^4i{ty6g z!BrRFng8gS_^UVnRRfw2y#51t$FIC&%iq!|XPttJufBNrJ$(EF9k}m)SMwi~X`%D7mW5%5 ze`#ymDgSo1qLcAMq|QFwjV$^o&H0?^7WiWt6|u9}pye4`j;(hvYP*xTqbhg4{dITX z13&nFoO;ozxazyF#CgwnG>j!Ozi!UBa8La7?|eE{DxJ$s1B)^;#&_O)CtmyYubusk zeA%nMY;bs~k96u;r{W9085iTM@Yr%?GHaTb~#GbsavbN^jVkUF;_ljYFjTo8<#!%GJNd%j}1rrf`9!218C3v zj^~ijIZ=99X>ZHzp8rpt-@xvf-}20Xd2WeU+8Ix+%wK(N8MYE3mWp5gN8a=i+;P(# z_~@HII=P}W_LH(6l$}CWG@5PKRVfycJo@VIkE+0~#~Yd6{crzF-{OE>;IEqx73k`p zPyPC*anfT>#;Mny64)iRZrdIliH?GT{PZfB74K2>`hK>o3Q-PdN`}r<6?+%C|0k_NBP=S(icp zoW1WXe8sE30>ATZzk@q(z7rQ*bpc-RufG(6geN@b@sla1B%}V1*7RhiTDEIZ;fE z;lX^qTYY#X0dtPK7^TZZd3-%A9&~5wBM-!DE5T8Z@3Dv1U6Ln+fv=__E0O~m!gs5j zghT)B5Z3=_1NxvMou81-PeF?`PUSZ5noJkd=?M?N`v4w(&z&nQGv(0Hhm*09Stdm2L=a7wmaNcE%-VVE5kL<2sQD-u|=i zz->3&HojgFoPFt8c7tp*6Tyy!ktE`@27m%fICEfhf|J z{i{P1pmX;$&;Q{!e;7Bv?qE|G4w{u(my-6-8_4xVUU=Om7 zy=Yc&U*FQ)REN_~y+r`agmknB*wNZf=gYj+GrJuG=^^>ZkdVO&jl#BS-tk0$-Pi3# zI)4}RLB-nR)^PGwCz%~ev$sk45fA*<1NiJO-HY8%I2jlG`^OY{#IE8XvdaX-B$rq5 zp;vsk88x2&ch1KpFTI$ar+e46$EljQ)cx+p>9c+9x0I^x!e?HH^PY0vtYo47Uia?X zi}SBMe~`RX3#Yg&m0*X}?SnF)h~ScI_F>;OmlB(3ZPxp(lgm?}ipr4`zwmc|VVX<6 z?CE&XkG`l?N@if+*222mu%EN7Vh!zRO}egAwMj?Vf`XUZqDNKrz2)j!!uaJO-h~hm zXzq3~qE?@$qQeAW>sPBYRnh#G#o_`Mk9cOcqb|!5u8JwVghV{P1uwpTC{O;Gd>GEu5yVRzY5wKmED&4<{$#i=KHAF8ZPix7;5- zYu{P8^jVh}EbU$f}mPNwJMKR(1@wS7utu5yt=2*4DAC zjnoZ+K`A6gA}ZDbsYKaKvfbfih^2i#f@zaOVKrT4v=|9kRACdwXpA^c&ygzFXf%=@HFUKB5*3|MY(ths&RLIRSReD%SKXZZ~gv<1P5< z7yb0?TlejM^6lNOsWw@>zo|VyrvYEvZ|yUYRlfqWKWlv6WKekaSEcizUEC>D*3B>^O>|E5yN%?7*%_fOT8DO8v3#$Sm6hGj_1vBq6@Muc85z`B1o4*a z)`27WZrJ_1V%@=;4&t-FbgwxM5o-f5m=esvoeH)}&0u9oQp}5A%Ug2)$M3_z`wn9F znI~iSnJ4$ngUHaJ{5k*1^8-kp?(oq!e-uCe!k@znUiHFeg*33O;ePD&i1&Q#9=!hF zydD7X%Ip6H_Fa4FFc)nnwF0-j=XN~wnFsN%-+32q{4Y0}ZcEBQD*tq2tFC^n@*?w67x-@pclyt4M}@Smg_^J646M&g{Hx z8#Jy4)hC&$)^kVAT+id21dY6&C}6j98t8#wB@IdE(!xS)KrTxZsA*-z$B?;-O+>bs z=ujIvW2-VNb1*0r05pBD)#ripT(ZmrZ+*k9xaa-%;KFBKh|9nJa&wajF~=eG7yrvI z28;y6)_R|~`A+=O|M^Rg`1kpX-}D+>_fy}9%b)kREb&4-;qQLW>+lzE{0noxCx6M4 z@ucTI3D>;nYMgV~Ir!rr`;*~B73tMfo9$(8wb+f9YO{8`IS}Bb{iqpasqc0{js$Ei zViDFt+=+KVG8~;9vq+Chgu;|z5X|aU)D?9N+&j?mVG~7T$&wJ)mRsp9N@u4SY4z^S zZ|XFRlO?#Ti=d10`5v_Tufa4JtE>oCAG8EJ72{{L*a4-uLRFdkci~!5<2}kt?jl=W z!9@f&zWPS@Y1g0vwtrsusu$v-t1lW1I}>cYWUcOQf6wi$ssn&i&ps9BUUn|E!1Vhm zXVr_p@5T6`XaA6?=Dy*_zX9i5c23Weka)5dRVAdsfM^bZLPb|sUxTVv3@2$7Y7*Rb z{L=dx_<3d6XKq!B`eW68DcM$K=Vo}>e4ukst?9DKi7iNnt)(YBRM{!d&BT9LgG^D0 zfX}Xe@lOrW5tWPqhMfF_lY5U_k25KmY>#bWG+35YDi0ZFSj}B;mUNlsPb$DC-+E_r zIr;L}e3@%aZ4Z0*d++Wo?94pUKi7p#)=ka~fzU{E4mOf@&iQOZ-^7>cy?^DUi z?i>5Ay#%j(^DFVXfAc!L=zCv;ORl-Zh;aSqkkhRiw<_q&WB^j?b)&kCIhc;$&W<0| zZJ#7WmV`Fv@%h)*+f-vPR1L~Pnoo-!M)f(+gB>(=<{B^)tGKL%v3}5L#XJ>@+8PVK zmKj@8ZH^@xN|gF}r>lQO0z7=fL+#6RzUA!B%88Qm?C6OhE4V0WLvTyD?!xW}lVN5j^P}z1D8qh+p}{ti*e+!GP3#Ibc4x_!c?;?of62>L+_1L@ zKzW!i1DmkLCaVGuyy3y&8eLP(WQ*b;X2KMj(vSh5;wNZvvC&?!0FQdgIe6hOz5wt1 zkMF`e{=+-)u|NDP0D@<{;u(#E00eLO;kV2lq;e>7SVuZbBHml|-=8_Ll^?;UF-2y2(t7m5R-2DmCE1D0MzG1<(kK7Kkse4l%vHmfUgDA5*3twBLl|M}_P z`!qiLrq5#I{tcY+#8a^Aj9u|lmO!Fj{i&H$w<8KRB0|ZW&b$%gNes2*Z%EQC*S~me zOLF44)}>L~r;sELqHLl;1P;DgwV};alP7k95Z`aMFVFs#v&WOzjre79AR=gHfSGk~%*Lg%(;B}A76ya}Bt@Qpi1(|+O~rxIG}hZY4u|GnTqLOnC=V(o z&|X)PV;y$4!*B{U%NmIIg|u+Ca=-oOZpVYSJP1H>@Dqn{@XmvH+^ZjplP)+3yH4BH zR>cwg9`GRnCl+%_wqZ5E5VSgpXyK9!ExW_mELf zci^T2eO~wYlZKLLY=?Mha+NSyR=x)&K-+}w1r8wsob!}N;oK|E!!_S}H4+lu_M>md zdw%Xc`1o5sZXS8>C3~@F@1E}F%X&G?+xcl&t@0{U3f*BUV0Uv$?Z1S|mI{oCQC(DL zU6&4JkdCvwb{=}j(QxpmvjvZ;xm6K6l?Y@G9z=a{v(tT}E)>%}4in-63h`q05L=PY*h<=^WcS;s@a`tV_u z8r#t7L9fjbY@0pbQ zd#>JtwF^$7gGmH9V{OwU4g&(z_P{2`D?yss#vuE73_z`2bS(B!p7DxjVE5kLxZ^E% z;Nv%Tz`O0n+aMx%#{ct-sQ$t%Gw8Pq)VAG9^RV%r3SLRKu0ZPMVu96nv@ERyJT-Kh z+SLBusoPFaU41#P8n`CoYpCt|UnRg3JH)@`Ki$%9w*PJWp{jWJj)(Dy-~B}U{+ z;L(5QJg5Taf8+TRz-0xPK`y^n&Ew}tN-L`mWE}d)IsnDSCpYoX|9a?=6-DA-Y99w| zr)pbX3%jKefG*=8Rmkl`17K6f^wGy!-I&R&VU0jig|QXC?*EnE{_VbIH`dPIW#7N# zliJ7HNN0yw9W2_bQi)|GKA?=+Np+&*{7NCObn%~nbgXH!f93`1{7KCz5!QsTH04z+i7@0)_|Tmma467Hf!rjuY+IGCM)A{o+ z&0XDgzTtL`6SJB+4M$^x*jFPRzoD{PD%Iv)n>hHMLle+ly&GqK&6yaj*=tf1FPG1^ zHnuJW2HCL?&Ck`2ayw@~QanvpI;j=FyMON8__H5*D*)h>4?|K6szV|?>fOOV>Pq`ve-x!i@Q7~^+Ql|Cyi@)D**KVWKzD5ME`fj$L zsBAu|%o=L{K{RX9;WMYE>eo`;se^nS<|M%0%l8hCfA-VP#*_ZV6Y=aDo`tiXx)-NC z=~R#2pQ z3eCz_Y~}z6fl1qSVs%b-0}$$awI#AH@1c)~8wB z6HcZUle>%fYhy1YThC7YJW6GpKh0~g!~sCR;h+D=p928SyW%{&=vQ8ZM_=)1JoVe2 zI?e3LpPOEL6FzzKC&zYh;3(A8K5gdK`#g`)7VtRou*{_D{n<>CtGPada>rGHk$|&4 zxjNAAKkpud_I1$jfbUbWk=x+LT4*@ou4bH2;K~2+$>u#cvt`T{d0kB7x^t@?M`qAv8!h_!M>g=#|C)xnXTI!A?EU652cpBDfNeVm*2QAJ zf*5xRsqp9kueKpm_sss^_0I=?{e$h_U-*hIY(Kx^8?V5#Uin4w2yBZFimGMdlz>MG zZ1_*+%C2O)@&*EwvtK7+aGRB>4l_Ml$EjgB!&{JWt^udcc}Ocgo%tmYp;BdYYA%q? zfS`5=qPY0Q7Xtv!dD=O+;`^U6zN1whW#l|Ih#KrU7f}a>JYmo+Ap1RMVD}4l8?s51 zrm1Q}7e~t~%M#AJ<1Gm8X4W@nXLdV>!6VQP4z>t5+mJ5owe~b}QZuuQMJtL2e&vDb zgYvR7aQfGrZW>N8cE>zPv^L0%pqTwINSnPiA|o-3iur$;t511%vwR>w`0F3UJO0BY zLHXO?@V9Z^73UhM%N5sMi39f?#0@`m!%&|LN_{odLa#SCGZnlX9spB@-P!cnqf7$8 z+LcH1$rJzK6Y=QhKN@>3*p1y6?lGD_ zHD$9?UgsRFeF;|1)GS8?ZW5vpVB_w*^7F!^o#wft~IUP|NIh zBp4PLD3D<+Zb*n8u8n4u#LVvIU7NW7M<2lEU7I-bADoHPzU%5PNz!nn`@U!&_U_w@ zdvCkf&ZXS(-f{CMdaNVIWlIT}Cf~XQ!N=co$I!x}fM^y9H?I{dnOXKzExW4G&e&Ad zR&~^F_LevgREln+oK-gm?JctxEYF-CMB$!v<{Hj<>e<$A-OWMGSK5KIIRNW?yJ(-5 zvmu1M_Tqz8og*S$?=vW%b(k|Q9q#zgYCk*O*<+6#n4HcGh*uVj{Rj87y)CYb_J?jd zgafZTh>eeI;EaE822Oe5DTe&83~o@hbGyxS0o~m!8?eW&F|p(f9w+Bm4c;Ss4P! zNd+tgK7H#wxaoJ^17M0{e8x9Fqk+slAKQ-)z3D>^7(B7zAVh)B-1-@O@bw>T@7~k@ z!PCr!#)tmkLlF%#aI>gOBn#R)LDqHKx8%LY4I8#?YfyTSKlWiEv+jbgwa8bR0UZhUkT5B|RoA>Wm8 z+DlKvDKFgPo=axC<*|EKQ-Os|>|i;?m0>^Pny=cu9+lY;FjPX(3;~|}bx+3AzVoTA z`a?q7V5kNH0I=^_m*CQ8UD`8TgAeWVzx(;P=<18giB~sKl66s*?tya0d+xv=eBU3? zTb-LUC2POfh$B-@-Fph|x%D2r^}oIqr<`>PZhGBK?Pm{t_95JH(;bfRfT_IH%mb%K z-m`ZP6pAh60sy@5H7~^8OU}f}XPjJia228%kVNXU4Ct;_5vcX0HHUh^RTto~&%O+(nHt8d zlm9MrAWu*~aB`|Z!gl`pyqKmXM~XDYe5&t@(L0Y>(sy)N6mcQ>wi z$u&6t%JZR6{N{DPIs1s`UUA+Of>YGA3{DztOgOqg2f2$nB8z1;p3GrV%O-;XT~E0+ z5f`;#4&5U66xm{GHGBT+;@ei;-po!GL9VPC^jq6>v6}^R1KrZP>Vt~Sk8a|?YY*b2 ztJZMl51-lHhrMBd`O8rw)J8@-qQPn5YPvcou0UOt@nVFXsS2pg9+TkxuX#Ui`mvkv zsHdERul&ugoI-+9>Y!gAOIZ?AvJc4qNUG=GOv}~6TqLS4ruQq&$xirm5Nes6qsTdz zorAM4JsYpS=hgW0U;1*Qa^Smq0vu!664HcM-lm#O@%hDAFve6T1kUJ?eu~o}wRvC2V zID~sK1C&EP?EE5_O$}4yWH-uD)g+E>OiW|kD z*B(T^E90auT${v~(T&y3;FRo%3iBm0vKKmab_F#18@T(z-8k*Zrwwfkl8q4L=WM{F z?Cdg~3?KfjkKiM}`4L?6Pp`pcUw-N6lShBEqlwh&4!elGWZl*D=dsUzEY8|@R!&c^Tj^WSNJ_tcj?6<_rq zzN%~W&}Wfq$P9Rn7Es{PSDuf*``WL@Z@uKVaeHZDFaDy7@tlA6#RVvJlD=?z>?zG{Ss%(y&2>jywOfvvY6`s9Wn?A#*&PbSMJ?JzL#XEE2-o}ot`65=uRz&E? z=l#L8S{b7a-N1TY$3|Yqx^Cc5K7{qWj&)tfrf#zjirOig za@Bth0oMQ92G*|Jg>-(x+WEUmu7V(?-j<~jrC42f6PZ>f6SdgCuCa$n#Qc5WLkEx_ z$T;cDHJtvW(|hD1$1k?$>2ZoJW-$Q*j%yUW|0my%kN$suh3EeKb8+rd&TY(SJDwWH zNcU;?NB^3Sv)l`}-f$~K1ZQ7*HqN>1Z2La&``Yp;(A9x8`9%pC2=uELgs6`5DUhbI}!I+JkN1 z=lh`FSLyio|K@(&^I!Jk{O>;>Yv=F6uJd>G+m!PcEr>gJ5jXM>%&oLZG7>(vLbY2$ zI=0!W$9HDut`pcSNWV`19V-8=1G=v5HmkvI^AOgtj`h4VUaR<^qfk3d|HDUs`Nd#-k@?se0Jp#EO!dj?b~3I#+;wBjd0WS^aT)o8$W!l@Mz zD^)$&$x|%oW%_vs69u5zfe<{HmD@59VFbJeZqV|WxdG1rddSeM?Kb^!HVvqmAnke| z)ccg@K|MYlj!oevTx%!3*;m-| z$Y&)h5)c=pDeCr8RELnGZ~F=5esU)5G|!U;GM&g!6RKS2dX3<4JCo{`y)87*%tZJx z)g8CEp>_Sfl55Fyl~3jWncT~ok&tGzHkFM=Ct6JEeFr%qhC>5p)k`rllMl6%kgClq zwTRQ(adt&EtY;?TA{&B3%a(`Pu~pv9h2vMt1tnMcatv%ungS;fhFdpOHS<8s`tiAW zr~iM|A=}mH8wb`^2dT>}1A=&d7g4t-ob*JtMLi$;3FDv(R#~BWc2bm876DNnt0yvA z;E$SLq;IpiEfb2dW5*5SRA&eTR@w1fq`MR=1X*=jcdHC5Wtvv8XriqI;YE5;>{1R* zR&#Qo2v<{iyk=Wej!_u!!e5m_OJ!)^L>Y$fq=PO>h_RIgc%H;9ZYL0I6^Cy31gh*D zX)%a~)w{W<+2!>uGwaoO{Y(^g%R{405Ks%Lp<9cod)-!vuOwAnO{WMK+c4IO^R4o-;&r^-7XuuTurnS9UBHU4L9M<0C9{fn@Pes_L^if*kx(EGiK>uldaK4h9H#^Hvg z5ac#_0H!+ss;WhjGxKq~v4g3=q-*O2Cm9bNiUHtkMW{2i8s|u;$F1>P*YWo-0LKae zvM#WR-4@vSH(}@CECL=4-HEqMdleTu;S#Rwq*BZWjx}mk7bV6XK+Qe66o$4V(zris zO^EHG7P8evb+}17yo5 zt{&a|EVH$gl1Cp~Vb#zawFU<5TAD|f8)(qxa)lgte|9^w++UCP_uI0A3;J1yp4)L0 zI-ZST^m5i#!p;tW^{Vg|%sHa0nE7?7SC6DqBuJ1&!LGVY|J~koosNTV>{Y17z|N?k(Gs? z%MpmGBP$}t7gnOtK+QsIXw9XL*nn1ZQJ`hCSd) zDnk*v!7OY{w_UKqj->C5Q?UwAGKLHa=G+2|lFI~Zd(bj&BfdpNuQCE4R41um>n65c z*P0ms5CC+=zfqk@hP3&Zc83$VELHQoYM0pB0)8bPx)8b&2vcR(>Aozbbw!#2x`q7Y z3h34SS`jHT!puX?Y2AwFsv2#Sz~(o=vXn3t6;(^dWw^JY2!V(^@@Qu^!|KbRY((nF z4wh?-+^h=*a?T~Hqd=HiPj%Z5%5%S9iQg&P;GJ2b5F(wcdNLVx&dlX~0-Fx2X3Niu z)x!fj*&%{LN2=H|%?Ll0DEWh2JrR#!V2;aJwF zQVe%$eFLrDo>d2e%_ePVT;VBf^{O*d{77D+(L8l&i~g%S#KUM~G4qD(#N=*kXbj^L z1E$uj!}tX41~L`k#O!l2i)hIPnCTsN&9y@6w$~l#gmieI-OjeVT3gsE?+|TLk=EWC z%j|MuN-FJet?Q~8z%*-uq@tJ0)9s|p>2w0s4HU(Ab*LFq zAZNz_I=2sTnlyrfY(SlXZq&oo%m_nLz!DX99+$_;E}9Q|aO9R+F_=Y}%8Z1*aGMGS zW?eY0s?T+FpbLyGt^ks`Nb`9m9@?W>T*&8+DR9d{xg)9UbZixOFf2P_S?58~d)TFj z%N=`QZkGe+C}XRH-iorAw&tOVs5`}#balPGo@6Bzz$O5l=!V)>br72bAiV{hy2MgN zY5_K>pit!^Jsn=l&+B6sJ#jx%%4{z;+a@mKoU9~^kFN!1QHk_qZDB_bB4m)ANkDD2 zGloisr8Jl&DR^SWD^qGKE!a6o8kvdf~|1HdfFq z)$>9+H*uP%-4iEg>2eRCyRWccNI$0D#z8csPN;Y!_N_`|)VN>p_JK|;TMsy;FL zta|S(Kx!b`8kgyNA-k3d#7gTasfdX|YPb4dnagQv*O}b1c!f5^`uk&m&SdOLI1sk& zU0(?0O^WPiT2S)0izF$zucGn7JQEM?{@F@B{0z?+6S%DiWpK{J7DhIeDU9~c)JzgM zA@lUF_}kTeWz8^ghpoyBY=q6^O)Qx;xYFs0alK1fTwMD)kJ_u-Sn+ea9epiUOw7ym z!-hoQf!77RENrdY27H_HJ?(&~!onEZ2b}@hc5NBfhOm3*%gvf|Z0=gbA+kI3f3EF-x1BhpA z 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

      你好下 上,我时易r于

      diff --git a/image/txt0.png b/image/txt0.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fc582b5b8386a62a5b011dd3200a117833e721 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^AAnezgAGVJU1Pcoq_R9+978JRyuG}Ulfi)Jzy^nZ z|1IrHG}&G<>EC1A^sSuX!?^ literal 0 HcmV?d00001 diff --git a/image/txt1.png b/image/txt1.png new file mode 100644 index 0000000000000000000000000000000000000000..72a0fb9c76f4ac7ebb5a12f5c765e3ed3698129d GIT binary patch literal 3322 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 Hu0mjf!RZ)x literal 0 HcmV?d00001 diff --git a/image/txt12.png b/image/txt12.png new file mode 100644 index 0000000000000000000000000000000000000000..089f3f00cfbd621cc62d89b9bb439aa6d86395db GIT binary patch literal 3830 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 literal 0 HcmV?d00001 diff --git a/image/txt13.png b/image/txt13.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0a12dcb4d8afa3bb8c768ad9bb99ac8fc724a1 GIT binary patch literal 4236 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 literal 0 HcmV?d00001 diff --git a/image/txt2.png b/image/txt2.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5a5209312ddfb4ae0cb8de9f674c551406ecf2 GIT binary patch literal 2992 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 VNfUTtJ)000dLNklpjDW|Cd|te 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 XWDb!_GAH9G00000NkvXXu0mjf(?G0p literal 0 HcmV?d00001 diff --git a/image/txt6.png b/image/txt6.png new file mode 100644 index 0000000000000000000000000000000000000000..5fab91d2995e02205a5ab51d9de3c403e3c4532c GIT binary patch literal 1928 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 literal 0 HcmV?d00001 diff --git a/image/txt9.png b/image/txt9.png new file mode 100644 index 0000000000000000000000000000000000000000..31166eb6d0916f666de448e331917280ab56f424 GIT binary patch literal 3873 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 R`bVMx#s=p4XkB>x{{Vf%WF7zj literal 0 HcmV?d00001 diff --git a/image/txtd.png b/image/txtd.png new file mode 100644 index 0000000000000000000000000000000000000000..3a26d73683e197760dc1f46d6d487f7fece04414 GIT binary patch literal 2734 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

      60V~ZFHTZ>y9dPJggg)!44j;& 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Ξ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

      8TGpakXv1oCBB6t=Jv zn1%}V-B=8|q!W-)I$f2z@1no)F@rLFMT?jhr*O0qa4c2$B=0H_;rF?6?L)Hy5hOc4 z8c)EA5t#*(s|BB=-u{?dl(1l<8*3)3X@33WOn3r>jTh&*Z9#5Bvg`t6RW5A<_8<&S ziCJ*|n&KagvWAL0YsZAvi1chAIHx43@873F-?~CeUH~i9mjC%kcX<5Vhp+W4LZ5o3 zMdI@cbNZCmoF--;y;n$Z%GZ%g7bs^cDzVDHHx$Eyb%|lwP1UKok} zzNh0!syupACK|WzoBXmg_z%dcUMGi5vfXR(nbJU!XjF0U+xrARKe7Rp%389A@i;`2 zQSucEi(Efld@lXV_^!gv#Zo&G&~`iI)Mf$1vsrhip!~f1r5owB^3RFwwlp&gqNSgM zc4?9a%ynI$7=&+|KLPEim=vY# zhW|Y>u6d>2Jx0K5VJT#mLfk(fDvG`$7G^(WZ^d*tvZt&j)p<%wcnkQ(o3cHJ4a4Ik zAoFb5;2tbQ@OEo%XvOo1UG*7?0`R%U1-xfj5C|{k`%!mrY+&zuukgEp6yO+jLZ2o8gb6r^#%v~u|9M;&fxBxNWw7Nz zG!lc={Q3EBKL0!SWH`9*>KPi+5wewe`_4{onIJr~89)5scL*``Tnddr!}L79EjK)JhcKiw1!*~jc?ts9V4^bDpZi~koC z#q|AnSNPt<_I4p%#&3+pPf9-|CCDB5Lz6z(Sobr6?S?XcGq;66wwR+4CXxx^L zK&TGKu@2OxBc16Z9S90^xFzuCFT>Hl9ZWiMG%yT+3!*V0+l6DKDe zRSK(Yzm~*|eosSi#~%<6WD(#w11^&(`JZeR3kQ7^ZU-{7O*f@P(fDG9K4Tlh4E;Z` z-v4#Wz%S4?MAY-Rv8co+MG4A#_(0^;1eFo&U1o8U0;iRlf% z&kI}?MXyE+hvsa3z}m$mqwy{(y8U7mc$+r*zdmgJvyoH0Az*;Gxxx)kh6wfzvilJT zm@##z0Awh$je!TU(E;9rtr`GL*mfcS3@HC!6d-Pi z|5ckX(B#y!05B#vrxlp-JLE~HutHVX4mRo*x)XRpDV2bX(iD6MIjR7f>YkJYBot4@ zT($$33K0QMeq&#KgF0wslk+6Q!#&4xZURP7E~c1H>{kf6XvEM0 zV!E_+`PM1$z`wj*{B=I2}mFty(oZ_7r0WT?WKVdOaA-~cot!h6jhZwikL9Fnj1dK|9JEN<5QS| za@Np)d@e>g#~1tT3f2uPz>HgeXxJZ+5%{cqRS&ZQJnrnmy%xQ}I7q1E^z^iBE2F<} z-ZcIlw6y}UYrxVBC@J2Uu5bihVV=PB`G4J|GJ$_5gM^ou_iw<;1$Fq_olnDI?_v~} zVUeep`bJ(;3NH0!|kF-tHe%%0M~& zuxtHd|1<6eQc^$pK_M>jNE8K-)o%|9O!de=AoD@J0S+O{kMccJj1!A|qfj-_cy4&^@cwkGpXZcsIdNocY zur8<#hh9@r&`T1F%94)C@+D{*3*IsPq`BrCT1uyby!9(J(i$ zxW0-ON3;gqBIk(ZCi-^kv{_o5F2e4TVe11mRf2aB;}ZS8F4fKA8~m)-DX@?bh5vkhyl+7SI3Z}$(# z;8YA&kHQD4BjE$-H?M1kxf4p>a5{}_UIziMP+lTC*7pSBmk{Mkv1su#_>G7mrr02M z?OPQ^b5rALwDcMH>@6^cZl61jEn&lY3y{@eFnA9Vbb^_oUc&M^e?Z$Vt~b6x`~2X` zL(FW`x4PuK+#jBR6ma?c0qwp4Ms9b`R}RRKFu%YHHn98yLcqG)fgkF188S$Nkc->o zk^9OR=jAm_Ylmvv8KnP!lAD{t|9}eSfT)+KzpIdx41O$r|Ng=R5WTV;`3VhK(`*Nt zo6kVD)~s{W-gJr1Fh_Tym0+~Mt5tIl?Q~0M8@zq+o~0t>@&F_JaR@M-w9-OHGc0Q( zGF`a+H`W&@rfEz(8GS2ng*uyI(;Q+P=x<6;fT>ex-O>s$1*ihlj2ndWKB1I5sN*zT+K!|h!1JYYaq$ELF#s*52ULv6M-bo-aM5K4AA%uWZ zg^gfS&{ehcjFw6 z6&MPXHXeELD~}Fv=d}OhbN{y&`PYSK35Uz|zuf!2dCBc>#JxTr$x=s)OTMxZl7ByR z{O9!SHBXf*_WtEzMaTQ{hjOR3e~A*6=s!p(IGA?&uVd+7Q99@BAeqORrKO%FB_+9u z!BKDK?>&D0`-5(k5t9oKXQQr+)+zrXaN@uogiDAfcDj3B*=&q?b=F4cZBbO^3#r)B z=eXy%R5(AciI|&w;>hSo-%G(jck82H0TEbnayxSC@rf+iV~6U1-sbQ3O;awnuJa#g zq?`Xlx!7;)N7EpQ$PRN>^O9srMPcU`3-)4MwuH9Zqqifii^Um|;QOkYN6x=Jc=~6p zaq&kDcYl?~T)$735)jrXmxuqTN-gZPGQK20J|5%U<8vXmI9upW%Gd z+%AESkaLgzN$1M$Tcf66v8MfGVd~iPwl%)iuuo_qh|PS7R~@>Ze*a-V)aCDv?u%ot zBfq?HD=za)N&TH_oKOM-kPizeg`uq2Uafz~pf2elorI-ffo2C^nMW5U1v2bzGS8kk z(d5?E`ggaRpIOgXvSo&slB)RG1e=G(`@$zesscB%2EOiK_?4TOIv#>pwdtvL*8qIv zlO=zZpcwHJJg@W67gGBc{mI8lzAFWlgO6w>jaq^(>iu?QV6`+K7=heq20ee&=zieC z)kTR53XXjE$TMPRO`}Th7yi;OTNrTuElAS(8@cTLuZ341BwY_C_@Lm74~+h~dW`s4 za3=w)#^Xt6`6#8c147cS>b-0?c-uc;@?^sMY*p7F=)T-_viEl{uiUZ9;5UgXM6S9_ps=5=b#*i$%Y6#=BH<=XiT;7xZNKaYK@nedPP9 z>>D1%QEE}bm-G?l2PLI-7BI0qTU;&rY*L`_N(Jp@n@b%#>jNmG)1;~9p?uqRVB@<1 zgCk;kuHS2(%4Q1ZJ%4)fVL?#3-01_sOwI_ZLMbyqm}L+{tmQ%BxxHxto%@X#2G8{yykJa!RXN|5R}@12p^bZ zX3O5oKJVj7qYATYQ^7zS%Qmn0xe4D8G0xL=F6{IL3zybkbq+A}p;E?uckhTC>4>f` zZZ!=~lWCGMWkppVN*>M!xq1iVY^93QFAde6E{F8onm;(SK?jGx)6!+H{QQXA!t7&Z zDVI~E;j&dxC3?kUya@osEcYOrLm`P z{A;hvlZTK%htLRnB}e0!jt4Cz7X7x4_VNPtH9k*NHH(`LADog!iomn~rCjI7hNB8T zsH)61El*cm=^KhFDu}!HEwR9B`)OwO%>ql0!}r_|p%V^HSl;B0%SKwtuAV|ls-pAG z?W%4!x{c$btcp@`8fT=b+UElr?!0I%} z*v3!=E--e@=tExSv2Pwxp7|DVw@arE?Ca6^|M7Z(MmYP0R6UH2XXrF5&#cyS9q{>I z1B4*^9b!B3rZ(K21xvt7hchN8gQq0tWZt(Zj3&9upHhLVIwBg5q~CcU7g7a3;l{!A z0_Am!$EW~ffEnoNn8!$W4#w?Ukj1hl&4A_*Z|DQF4Bo-Uc`_Ab@m#?CLA|hPMa%i! zF_H8olUrH}ahDu{HV^7A}AqOR-q+ zMED9=iBkN0!2}Z%aB|00IYVuTccSU5*MIdj)2OHSKXB$WoU0&A=psWgR##EON=Ii0 z>|wQ&r4=TVzJ~KfH~EDa00U)OsFe6Qtt@=~4xCT<4E~C>p?}I~8S`}g?M;1Ipf!SF z4F6Ur1@D1mzTiZ#61Mb8G;AQy{ulZ~;4d@BnqAJTyM9$4JFCdom_>;m`~f{(ds*NZxn7xiW#;}KA-Jj9)zxvrsH7Jiu_kpWHuO=P)^*$13R?-_l(=UA?e zwLlO|^&}d75UCPgtz%+IuO|0q(Fj;pzp>!uU!w}+czVOO<*Uy=&%Ftx_T5o`Pecm^ zE@|Ll?%dlbIpU&ZT?j}!9Uc9{Y(?{$=O zx#Da@mWsO3=U1KxAgKzf6{x!W+K9^R%ntyn9@P^=I&#lGZK@`zwIB zeW`i77S?-fV>fK^ni%BgAxRmH1msnNTl1PPc%FAkKWVQ|lLn8DtgUbY-UVKRuCtyc z6?f#8n8{bSsU87*09}^tR(uurQK;t%m)+x1iUaw<&fnQ!Fe+BbX+8{a*2in`u^T3X z(a*IuXIGTb@Bo!FI*Kv^#)4rd^e;RtxZWZJ^x}luf`K%Oq0#FaZ+m(^uk?KWmh!Ao zk_M>IKOMslAnWwxK%hayU%V&qLelz@HKRw=0d9xmNX+#P^ilIlyS&MIV5hg!;1(YAN9K zm4$^7DPhC|f6`=ljNYw^%3jK0VQuzNTj+l>F)>yYs7V_gRkasirMo5pJMd*c5ERI; z)%!d@&P@Uh{5!A*e{B|flnkU~ngKbMxGlg^K75d834b}e16)n{TeoPv=jS1AA+SZ` zlCLQqd#XajB~b?h?%V-BJcgVl>rND(|9NNt`zMMPc|efTBAF=2*7xisZUtEsg<3&FYX#;7i`zFB8s!;#irOJ+_&)#Haq!~ zqajF?U0|WHAinNgc1FR3{pV~vM$@1S5k6NwDa_wg`aH3;u=MoOowpjj1q2eVGzbZu z?qGzy!O8_A&%9f`qH`57yx`@yq-f#1TZceeo!wf=^i7(`@Q#5EYV6AMsh^3>#${HW zM8~B`f;pz%Q6j=J%LOXH_DP@?z9qK6DuOHXdj&7E8nz`K*fd zZt6BQo3!IXEUGb81|&L_gl|^mAXi@dX==_fZ9J3&1t+H92<8+lYcF#(RCUz9(niu= zYp(PDLjbtqTcAKMUdA@}G5W6J-(u*Ge%ddZn{U9HltgJb9PxuX$!zgSm;?s1(>G-$ ztYy7O6(-<6Uall>x+|qL3j3cP&O1`9)T9Jp^H{|^c=T~tli(ZXFpf?W0HM8 zKpSZo`Vt+mHq|T#eO$V;qrSIBxxUS%issh&8Q6`nAC3qeH%^F<(aX9d0cX6C?tsPG zrLZfD|6iUinjo^qL$gUcnxXiB~9(=QX2Dm)6W#NH4 z?wS?Bg^@MkCP?n#Iw`gynJR=2*jL{GiVzXp*~tmU+zk4}FU_U0wKF1nD9>@mqobNm zS)w*D8v}HOAf)41eSS6|_q^d6$Y%Sw={1@|$&`c)*S7FXwWj8LmA8jqI)B7dtG3?g z+|?d!T5LqoFF5WWdKCLqVuRn_fMGxtW-%@vVkLBMGF7;^0$A<`PB~q?aT?!Rwrim{ zCAPGoh+`SW{m8KTpMLEW>}Pb!SA2vG9ymYk$uuPcq6VD9O`&E^&=;wmoW z`%cBT1~G9 zmC!I$dDVtwu0h<%mz#PgRFvcnWGN59tFu@(LBZs>L%qY$xCILP7M2Ni824QRVQX^} zt@C<~>qyeCeEaJC|NeQ%Rd%^wzn;e&1|UiW1h0p~hesmxHvJ`1z)iN3RJ}23^lM5! zP>HCRAQpyISKyI~zgdDP+^-7n7IhB$czvQR`*=A))k;C+!(_t)EvHC;?%kze_ac>> zmz%BKbnKAl=-C}B+VL3aBHbQjGqZVU0&h=$Je3jxs#>W*?1w|OAH;r_-Ll7sB`Mk$A__4V9;QS(jk*QEMa>yS)Z{F z@r5(n!T?i;s}@)&66t5f!Ljy}R{F8zNE9MaJBu7*nuwpjBkCiC^WXC}g6DrSepi7O z7=6gzR5CF%J68-y^C&U3!a>^Gm22mYQ*@>8)AcaHHnUvGW3_6a?)Z3WQ_iYG%Vh87 z8P=lx%_iL5(=muid?WT#>3ehbk#@7b^*X6>VJ!e3`6)|_j-GDUZR6t!_zltU!0>`+L<_Xd7rb z;VFPTis^-SDEc#GoXPlzy3jjSJWNMz&sx^vy{vIBCw@SV|6(e3RW1yy@-M!6J|!U* z@?&m`+OR?2R27Z)hx>x1?;A#cSh00#fktWY?n|jy;cr>-xB&GI`vVWVsT^N>M4Cj_QxNfj)XLhh*C9;__Iij`@PGW6FF8VPdL~=Ur2k z{Clx4=qL8oo6AZ!_ zSSj&G=Rth;_js+1rN;MALgpKzqb;_-_DH7wPQC}I_t5=`ERXaFTZNTQ1{9y;=jP2d zK=@H69u;*84$S-QBMq<`!@hOdtuBk?jFob}wgK1LCXrCc9|oXU!5h0otfKUkJh0u4 z@t^1oQz5$EYxntfDM9i)mc(6Esu&+DtO|oL(T56!!3$@m!I35zlR>ftUEgZ$k+lJ~ zCw)$)@Trx;>Nj7jH0l8Aq0{!36 zS+S=Xv}!VfD`jFI$8~>Vd|b2NPJ28`KR=H0o|TdD%Q&8*@}nUp(fGFw`2!h}x36l_ z?5Wb6rr4AMmd=*uAheH9I==+B#+ywOU%7`dwF#fY9$%{%A&;iRq6I^0>wM{@rT65N zk|RZ5mkbPBnATTSE@+c*HK^BFLroYRo&}u+I&bG@QH>hE?E>x%V%r85*y%Q>X;=Da z{PSlZP9X|`yE*iBtdXk&*6i4Bh0m_gE=5Eet8B@t^aK7ser9O~v;(`vsh~ACRWQH_ zlt4#5t|7u<0=zUDRx?6==&6Q$w2+JTqfd>mQP95aP$8wHe9wh~w0?mC+k0+}fVP5c z57^~Zo>qz1z=ZhLM$NgV5VRA7H-SXGg}pwS0?wGw1gh^{Ja;->M_p;xEk+9^`D^PQ zK8hhvF>bvQyi(+zXg>TWz-q?WgwJapRwomDo_&`{5EXJ^W)J6@%w@2aCQ>Hs2z3-~ z9(26nJGe4^IE?~}-0sbye4=C9TqKnQ# zDj4J=?h1Vf?mU(}o%Ml48EmW$!F$^vq840fCN*_i*PLs7Y$#(7%pX`9#_{uMr^y(e zY`7&G1+YQ4i#JQ`zADd4>aTW$I!oK6B>zLV&b+UfRqxHn;^I2!9xt~rR zU!qqUyuO#LG|;a1`k#2qZ%~PZuvlEPPw2C0ZT$$USRG0C_-?B=TxWizzkyw(N2&)clH%Dd=2{ zdC=T%1AzEcSH){LHEW_htQiFQNXouiZ(6XtxK35=F1G&bRC@8U*F0oL_X%8WiTdz& zuT-3&SIqT+hF|XqM=i?&9P;=fK#TxuZVy}^v8~e z18;Yu`q_}Okh&(X5Rms;b{%6fbWua5tS0@9Z1F}yMCx11unzzZ|S*mC5{Us4J#Jb?RnoAC5|1!)4sv*QTlM@_F(PJIAu*MU$J zTc*ydWSw=D367^EHxZULxJ99l3;GBAo|a$MvF`e+E+{6Y8m3Zbc(?ajloucfRs3(C zp3iX!TbWNFmC(0T(LqG5(I+KSxPaT94Sw6h#bIrZnDY zL>Q{QzK7MV#i#K{wi((sJ^}g_L&Dn6l2E{AI{6*;iitd8Gla-Uv`T zeIK?jLZU0XV?z5nrSjxEF_{LPi$8*rkT4OuzCs!Ux;)K#tu7Ap|EBH+cipxM@p1KS zbbeo@%#&KCWXHu@H0+abJUX(WpH{D?WUyl~*B!;eoj8%vyj!FNQ_T|}gJ*bakf|dr zzPn;Sk{@Qp##POP5$kIkzwaz)tLH`>SIsSq2t1`OUj`if{aZYXJb{4Vlq;I8nyhUU zl_TtbxJi30B6Gr5p%c>}v+T-Mt-`)S%ET+0_BO^Y^XBrE@%K+l3hE4`=C@@5WG(aX z3f)+{I*86$APDt=qC^q3_~JTE*{V72!b*I?GRAvu(!TCyS|?N(;VbPA)zVR{@m_fD z9c;8BKd-Vi=W|MS?)o7oKx{TSHteODFnj|aw=ySB=T5)Hn5Iie=NDaJ#98)4*v#L( zjE~ua_Ry1SaO4rBEhu{O2B+Wk<_(!r&ahR!uZc=Ro_sTndM!|*m%Aw;t>bx~*{+zd zoi2rNmo2N}lM4r&tvWx(>~w;EXh)vd(QzRNmAZd!0Qx=(V0#=qbipf^A&Ih@90>gJV|hgnI-S{=I5~wKu`#Pd~WJr{LeR;tam657(hle+z5cly0njQN`6- z(@nDpa^D?rxBLf?6WCMbDU|yBvu&WWBLB8O+af&+s5MEE4 zgio5!X`ck=Og!b=D4=8zTFK|8zkFT`4F|H#3SX zm2?5+AT>1KwzdiFo6@vcTpZS!@{_Ta34Q7|aQ_Y6bS9s(?e{ z^ZKn_cRDmub1l#Hxc@z=d?`}_(AP6MT1b8i5@(jhuHoL`EHDO>MRfzViCvI1h;QX* zdSB$@Z`CP#9ug#T_?Ytp6YS0pffPYdO5Y!S((+#I^Wu1NKMfa2TN zMt_frB@8`{E!Yr+K*d>9QJObIi{EH9%4mO!qWL*ViA2#0bKQjFm#}p~PnDwT{aO`d zlPu%s|0o0O^lR2|#jVqnu>Djv+$5G|+)yhB*4OD?eWxlB#`#+ePQWmx%Y^r9@alK3 z7tPVl9!d@J?EGBkK)CP;}7*NRq$W zph>EKBKkX|^(a+SQVP2n5?LTM=zcvTD#QPCvrKWx#XLK^Fn(o|KO=z?zxz8V4RtYG z26Yvp?#^J;uAGNiI;(a1IN@gCb9nok$*UEullY|YwcV@HFNSnT>>+PA`m4~&l@zKrT#MIYuXt8k;>aBM&G z?&?g)^4yA_$t^zX%;UHoY$xW9l&^QG+^teqK=sw=ueb1#i~KIeZ>GWfDXSW~IU$O| zScLUwp!w(vG4AtVkGad;>|+$s5ZE?Bjo!9;KF%VrJNjI3V8tuvOsuX*-LIbjFiK)a zX}1#ajw)H*2Am$It^>SzmJE*Gn9)4?ZP{C=hfIC-y2Hi=sd{PO?pg)Ohrj*YGP{nh?SwhwTm59fXz|l29XjzS~MfN zRasD(9pOd|^G)mgiuL_Hw>+Za!~1U64dI>}k1I|E74hC*_=b33i3Zlw@MRi5jc%gM zD;hI&2I*O?)d(15r>K)kdC5R6N^Z8(`a5-ID*JvO0?PJotC=V9rY2^|%1E8Q z8D(|x=KZ&{1L7rxr2QDz`)a7>P?%H=YN8pimw+ zi!Es^NuOm?B&5R~cT5*1f3QztrYFE4P*s?@PU49$lOv1*NGx6so1#|S3)*iZ>{$%R{I?KVw%6fTTO-VZDebqZcOyu zj~b!$IYSP^o%`44{K+qUaMPr%u!85wx_eWtxG&G zv5v;XA{hHXWVW%geYT4PLDekxL2B&5l z6?>IM}kIdD=mkE)S@Y4S$zMc`n%9sjv1 zl6uAvhsso&(Ng+zyejRJk(6vSMTZ^cq(wfEr)Q+qL7-6gLP}O-HEu_7=>n%7o2535&abW; zgOoh6zaA-^*aeesCgpyR_*{JHd9$teu%ZCyMht*j<*=oh*2)S7XyIlP*AA9F$u^-1 z?(uw!_u|AX6B=fy4YzPL_V(e3&IgZ`_Y8uUuGt$yAp7`?nSI@u;2z&5hsQq;`3*11 zdHiY!jJ*K?CWa!6G5FHt*=JRVW49oUPg2Bt=IYiSyKs2Hp?K)F2P8{X=z+05=&cvj z{hn>Ep~4?2hk&5fiu*J*N0dm8XNmHgjH2W@;p=5wr<`NO)1Wsf1#ZwzC)D!sO7pGN z^Z*qz$TW*auOX$NohviyUGp=`7?LmJPv5)*fcOekH_M~@>f8iTOE-1q^VOn;>rH%V z6FE1-kMG#@>~}lHWM3^y>fa#+4bz(=Rtn3Dqpoarr+%jQlhVqIfbJi+@?Wml7E9d% zkeKq33#8F1#(v|F@j`PRU5d{f&-+Jj@_*QrP|!d(<_O_zkUK~ZX*YLIoqN6nx`h>< z?=ms49h~!iN+7}IyG*K9=-6qKOXV#W06bJ?dvJ&cb-0$Hy<7+4DGe8P5XWZ9K62qM zn=b$J5Oj<|Zy;>)1M>@ibo7ARKPopGd|rzY(-8_-thN1J#!nSKi-}!v3NlftxR?S2 zH9SO)i`)nEo>iCl)%=S~iOhG;66fFaO$-f>Ta4T~cj@ihR-h5R)`5x{1Dg6zW>~i_ zkh9p5w!eCC-2EK+S6p{R`%dofQW?z&c{hQaULZsmc=boeXh-Yc9k7otPgz4vhV;el zGI1YH+bW&YiV7Q$7K$0y?Rq;`5W8Y~=;;zd-sq(juuQ+Lc%XTW;sIf?Bmp$9aRi

      iop*(k11Fe0Yk)C6cL&?Sc~6qCCYGbldSnA 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%0DEQ@WE}k$*|BIwa|x0Ohd$xxinRtg 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�vuh|{rcmm8fBYic3O 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 literal 0 HcmV?d00001 diff --git a/image/显示屏3.jpg b/image/显示屏3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6f155a821f29444a811c1bf910f3fffcdd6a6ea GIT binary patch literal 325488 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

      !~Nc*N$jO&Z8`1PfT6eT@(Wfcik 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

      -bGMpiWX|}_$-8_aSIqSPx$d?#f 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 ekNZa)_rDeNr?Ex + + InkJetPrinter + + + + 0 + 0 + 800 + 600 + + + + + 0 + 0 + + + + TabWidget + + + QTabBar::scroller +{ + width:60px; +} + + + QTabWidget::North + + + QTabWidget::Rounded + + + 2 + + + + 16 + 16 + + + + true + + + false + + + + 主窗口 + + + + + 信息编辑 + + + + + 图案编辑 + + + + + 打印设置 + + + + + 触发设置 + + + + + 系统设置 + + + + + 系统管理 + + + + + 其他信息 + + + + + 日志信息 + + + + + 网络管理 + + + + + 电压调整 + + + + + 510 + 410 + 85 + 27 + + + + Save + + + + + + 10 + 0 + 611 + 411 + + + + Qt::StrongFocus + + + 3 + + + + 不连续电压 + + + + + 10 + 0 + 581 + 371 + + + + + + + vol0 + + + + + + + 20 + + + 4096 + + + 1 + + + + + + + 20 + + + 4095 + + + + + + + vol1 + + + + + + + vol2 + + + + + + + vol3 + + + + + + + vol4 + + + + + + + vol5 + + + + + + + vol6 + + + + + + + vol7 + + + + + + + vol8 + + + + + + + vol9 + + + + + + + vol10 + + + + + + + vol11 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol12 + + + + + + + vol13 + + + + + + + vol14 + + + + + + + vol15 + + + + + + + vol16 + + + + + + + vol17 + + + + + + + vol18 + + + + + + + vol19 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol20 + + + + + + + vol21 + + + + + + + vol22 + + + + + + + vol23 + + + + + + + vol24 + + + + + + + vol25 + + + + + + + vol26 + + + + + + + vol27 + + + + + + + vol28 + + + + + + + vol29 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol30 + + + + + + + vol31 + + + + + + + vol32 + + + + + + + vol33 + + + + + + + vol34 + + + + + + + vol35 + + + + + + + vol36 + + + + + + + vol37 + + + + + + + vol38 + + + + + + + vol39 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + + + 连续电压 + + + + + 0 + 0 + 581 + 371 + + + + + + + vol0 + + + + + + + 20 + + + 4096 + + + 1 + + + + + + + 20 + + + 4095 + + + + + + + vol1 + + + + + + + vol2 + + + + + + + vol3 + + + + + + + vol4 + + + + + + + vol5 + + + + + + + vol6 + + + + + + + vol7 + + + + + + + vol8 + + + + + + + vol9 + + + + + + + vol10 + + + + + + + vol11 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol12 + + + + + + + vol13 + + + + + + + vol14 + + + + + + + vol15 + + + + + + + vol16 + + + + + + + vol17 + + + + + + + vol18 + + + + + + + vol19 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol20 + + + + + + + vol21 + + + + + + + vol22 + + + + + + + vol23 + + + + + + + vol24 + + + + + + + vol25 + + + + + + + vol26 + + + + + + + vol27 + + + + + + + vol28 + + + + + + + vol29 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol30 + + + + + + + vol31 + + + + + + + vol32 + + + + + + + vol33 + + + + + + + vol34 + + + + + + + vol35 + + + + + + + vol36 + + + + + + + vol37 + + + + + + + vol38 + + + + + + + vol39 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + + + 满列电压 + + + + + 10 + 0 + 581 + 371 + + + + + + + fvol0 + + + + + + + 20 + + + 4096 + + + 1 + + + + + + + 20 + + + 4095 + + + + + + + fvol1 + + + + + + + fvol2 + + + + + + + fvol3 + + + + + + + fvol4 + + + + + + + fvol5 + + + + + + + fvol6 + + + + + + + fvol7 + + + + + + + fvol8 + + + + + + + fvol9 + + + + + + + fvol10 + + + + + + + fvol11 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + fvol12 + + + + + + + fvol13 + + + + + + + fvol14 + + + + + + + fvol15 + + + + + + + fvol16 + + + + + + + fvol17 + + + + + + + fvol18 + + + + + + + fvol19 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + fvol20 + + + + + + + fvol21 + + + + + + + fvol22 + + + + + + + fvol23 + + + + + + + fvol24 + + + + + + + fvol25 + + + + + + + fvol26 + + + + + + + fvol27 + + + + + + + fvol28 + + + + + + + fvol29 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + fvol30 + + + + + + + fvol31 + + + + + + + fvol32 + + + + + + + fvol33 + + + + + + + fvol34 + + + + + + + fvol35 + + + + + + + fvol36 + + + + + + + fvol37 + + + + + + + fvol38 + + + + + + + fvol39 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + + + 其他调整 + + + + + 0 + 10 + 154 + 31 + + + + + + + 整体缩放(%) : + + + + + + + 40 + + + 150 + + + 100 + + + + + + + + + + + FpgaDebug + + + + + 320 + 60 + 101 + 27 + + + + WriteByte + + + + + + 480 + 60 + 101 + 27 + + + + ReadByte + + + + + + 20 + 10 + 581 + 31 + + + + + + + Address: + + + + + + + Qt::Vertical + + + + + + + 65535 + + + + + + + Qt::Vertical + + + + + + + Value: + + + + + + + Qt::Vertical + + + + + + + 255 + + + + + + + + + 20 + 120 + 581 + 31 + + + + + + + Address: + + + + + + + Qt::Vertical + + + + + + + 65535 + + + + + + + Qt::Vertical + + + + + + + Value: + + + + + + + Qt::Vertical + + + + + + + 65535 + + + + + + + + + 320 + 180 + 101 + 27 + + + + WriteWord + + + + + + 480 + 180 + 101 + 27 + + + + ReadWord + + + + + + 480 + 370 + 101 + 27 + + + + ReadDword + + + + + + 320 + 370 + 101 + 27 + + + + WriteDword + + + + + + 20 + 250 + 581 + 80 + + + + + + + Address: + + + + + + + 65535 + + + + + + + ValueH: + + + + + + + 65535 + + + + + + + 65535 + + + + + + + ValueL: + + + + + + + + + + MainWindow + QWidget +

      mainwindow.h
      + 1 + + + PicEdit + QWidget +
      PicEdit.h
      + 1 +
      + + PrintSetting + QWidget +
      PrintSetting.h
      + 1 +
      + + SystemSetting + QWidget +
      SystemSetting.h
      + 1 +
      + + OtherInfo + QWidget +
      OtherInfo.h
      + 1 +
      + + LogInfo + QWidget +
      LogInfo.h
      + 1 +
      + + TriggerCtrl + QWidget +
      TriggerCtrl.h
      + 1 +
      + + SystemManage + QWidget +
      SystemManage.h
      + 1 +
      + + ZkEdit + QWidget +
      ZkEdit.h
      + 1 +
      + + NetworkManager + QWidget +
      Network/NetworkManager.h
      + 1 +
      + + + + diff --git a/insertspacenumdialog.ui b/insertspacenumdialog.ui new file mode 100644 index 0000000..bb897fb --- /dev/null +++ b/insertspacenumdialog.ui @@ -0,0 +1,103 @@ + + + InsertSpaceNumDialog + + + + 0 + 0 + 336 + 94 + + + + Qt::StrongFocus + + + 插入空格数 + + + + + 110 + 50 + 221 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 311 + 31 + + + + + + + 空格个数: + + + + + + + + 220 + 0 + + + + 1 + + + + + + + + + + buttonBox + accepted() + InsertSpaceNumDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + InsertSpaceNumDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/latest/InkJetPrinter.cpp b/latest/InkJetPrinter.cpp new file mode 100644 index 0000000..b882f7c --- /dev/null +++ b/latest/InkJetPrinter.cpp @@ -0,0 +1,3511 @@ +#include "InkJetPrinter.h" +#include "ui_inkjetprinter.h" +#include "QDebug" +#include "LogInfo.h" +#include "mainwindow.h" +#include "./Network/NetworkManager.h" +#include "ZkEdit.h" +#include "myinclude.h" +//#include "PIDController/fuzzy_PID.h" +#include "PumpValveEditor.h" +#include "PumpValveExecutor.h" +#include +// ℃℉㎡±ΦφΩ◆✪@☢*✿❧ + + +//#define DEBUG_CNT +#define MAX_VOL 300 +#define MIN_VOL 0 +void PID_init(); +#define ONLYCNTCLEAR + +InkJetPrinter::InkJetPrinter(QWidget *parent) : + QTabWidget(parent), + ui(new Ui::InkJetPrinter), + backwashSelfCheckDone(false) +{ + + system("ifconfig eth1 down"); + system("rm /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts/*.ttf > tty1"); + + ui->setupUi(this); + + SysPara *para = new SysPara(); + + // t_label = new QLabel(); + // t_label->setWindowFlags(Qt::WindowStaysOnTopHint); + // t_label->setGeometry(0,0,640,480); + // t_label->setPixmap(QPixmap(QString::fromUtf8(":/image/Turkey_logo.png"))); + + bindSysPara(para); + + ui->tabMainWindow->bindSysPara(para); + sysPara->status.InkOrSOLVEmptyCnt=0; + + t1.start();//calandar_and_dat_t + fileTransceiv = new FileTranseceiver(5001); + QObject::connect(fileTransceiv,SIGNAL(fileRecieved(QString)),this,SLOT(recievedFile2Save(QString))); + fileTransceiv->start(); + + //edit@12-30 + tcpTransceiv = new FileTranseceiver(5002); + tcpTransceiv->start(); + + connect(ui->tabPrintSetting,SIGNAL(HiddenFunction(bool)),ui->tabMainWindow->getTexteditOption(),SLOT(SetHiddenValue(bool))); + ui->tabMainWindow->SetEditMode(sysPara->para.EditMode); + ui->tabOtherInfo->bindSysPara(para); + ui->tabPrintSetting->bindSysPara(para); + ui->tabSystemSetting->bindSysPara(para); + ui->tabOtherInfo->bindSysPara(para); + ui->tabTriggerMode->bindSysPara(para); + ui->tabSystemManage->bindSysPara(para); + ui->tabPicEdit->bindSysPara(para); + + backwashEditor = ui->tabBackwashEditor; + + backwashExecutor.clear(); + connect(backwashEditor, SIGNAL(executorCreated(PumpValveExecutor*)), this, SLOT(onBackwashExecutorCreated(PumpValveExecutor*))); + connect(backwashEditor, SIGNAL(requestStopExecution()), this, SLOT(onBackwashStopRequested())); + connect(backwashEditor, SIGNAL(resetRequested()), this, SLOT(onBackwashResetRequested())); + + //#ifdef __NETWORKMANAGER__ +#if 1 + ui->tabNetworkManager->bindSysPara(para); +#else + //ui->tabNetworkManager->deleteLater(); + removeTab(9); +#endif + + //以下两个信号要在(ui->tabMainWindow->updateSysParaToUI();)之前绑定,否则获取不到文本框的更新值 + connect (ui->tabTriggerMode,SIGNAL(autoUpdateFontWidthByTriggerCtrl(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); + connect (ui->tabMainWindow,SIGNAL(autoUpdateFontWidthByMainWindow(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); + ui->tabMainWindow->updateSysParaToUI(); + + ui->tabPrintSetting->updateSysParaToUI(); + ui->tabPrintSetting->getFpgaVersionSetDisable(); + ui->tabSystemSetting->updateSysParaToUI(); + ui->tabOtherInfo->updateSysParaToUI(); + ui->tabTriggerMode->updateSysParaToUI(); + + dlgShowMsg =new DlgShowMsg; + dlgShowMsg->hide(); + + timer = new QTimer(); + connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); + timer->start(10); + + viscosity_timer = new QTimer(); + connect(viscosity_timer, SIGNAL(timeout()), this, SLOT(viscosity_timerHandler())); + + jd_timer = new QTimer(); + connect(jd_timer, SIGNAL(timeout()), this, SLOT(jd_timerHandler())); + jd_timer->start(500); + jd_res = 0; + if(sysPara->para.gearPumpEnable) + { + pushButtonStartFlag = true; + } + //connect(this,SIGNAL(SpeedOver(int)),this,SLOT(OnSpeedOver(int))); + + connect(this,SIGNAL(currentChanged(int)),this,SLOT(onInkJetPrinterCurrentChanged(int))); + connect(this,SIGNAL(setReclaimTankCurrentPos(int)),ui->tabMainWindow,SLOT(onReclainTankPositionChanged(int))); + + connect(this,SIGNAL(reclaimTankCloseDone()),ui->tabMainWindow,SLOT(checkForPowerOff())); + connect(this,SIGNAL(reclaimTankBlock()),this,SLOT(onReclaimTankBlock())); + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),this,SLOT(onAuthChanged(int))); + connect (this,SIGNAL(sendPicScene(PicScene*)),ui->tabPrintSetting,SLOT(updateUIForSpecialCondition(PicScene*))); + + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabOtherInfo,SLOT(onAuthChanged(int))); + //test + connect(ui->tabMainWindow,SIGNAL(InkjetCleanUP()),ui->tabSystemSetting,SLOT(on_pushButtonCleanUP_pressed())); + connect(ui->tabMainWindow,SIGNAL(clearPressureFault()),this,SLOT(resetPressureCnt())); + connect(ui->tabSystemSetting,SIGNAL(pressureAdjust()),this,SLOT(pressureAdjustForsystemseeting())); + +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + connect(this,SIGNAL(updateCnt1GroupDisp(bool)),ui->tabPrintSetting,SLOT(onUpdateCnt1GroupDisp(bool))); +#endif + + msgtest = new QMessageBox(this); + connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); + +#ifdef MIMA + connect(ui->tabPrintSetting->dlgInputAddr,SIGNAL(printErrorStatus(QString,unsigned int)),this,SLOT(onPrintErrorStatus(QString,unsigned int)));// +#endif + connect(ui->tabSystemSetting,SIGNAL(changeEditMode(int)),this,SLOT(onchangeEditMode(int))); + connect(ui->tabSystemSetting,SIGNAL(systemSettingsAccepted()),this,SLOT(onSystemSettingsAccepted())); + + // connect(ui->tabSystemSetting,SIGNAL(changeEditMode(int)),ui->tabMainWindow,SLOT(changeEditMode(int))); + connect(ui->tabSystemSetting,SIGNAL(setRunStatus(QString )),ui->tabMainWindow,SLOT(setRunStatus(QString))); + + connect(ui->tabSystemManage,SIGNAL(enableReclaimButton(bool)),ui->tabMainWindow,SLOT(onEnableReclaimCtrlButton(bool))); + connect(ui->tabSystemManage,SIGNAL(configChanged(void)),this,SLOT(onConfigChanged(void))); + connect(ui->tabPrintSetting, SIGNAL(change_OutputPulse()), ui->tabTriggerMode, SLOT(OutputPulse())); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabSystemSetting,SLOT( SystemupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabOtherInfo,SLOT( OtherupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabTriggerMode,SLOT( TriggerupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabMainWindow->getTexteditOption(),SLOT( updateSysParaToZero() )); + connect (ui->tabMainWindow,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + //if(sysPara->para.EditMode==PICFILE){ + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabPicEdit,SLOT(updateAuthorization(int)));// 字库编辑使能 + connect (ui->tabPicEdit,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + connect (ui->tabPicEdit ,SIGNAL(openCurrentFile (QString ,bool )),ui->tabMainWindow,SLOT(openPicFIleOpen(QString ,bool ))); + connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),ui->tabPicEdit,SLOT( EditCurrFile(QString))); + connect (ui->tabPicEdit ,SIGNAL(setMainTabEdit (int)),ui->tabMainWindow,SLOT(SetMainTabEdit(int))); + //} + //connect (ui->tabPrintSetting,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + + connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),this,SLOT(onChangeTab(QString))); + + connect (ui->tabMainWindow,SIGNAL(CloseJd()),this,SLOT(close_jd_timer())); + connect (ui->tabMainWindow,SIGNAL(pushButtonStartPressed(bool)),this,SLOT(handlePushButtonStartPressed(bool))); + connect (ui->tabMainWindow,SIGNAL(repeatInitedPid()),this,SLOT(handleInitedPID())); + connect (ui->tabMainWindow,SIGNAL(setCNT1Select(bool)),ui->tabPrintSetting,SLOT(setCNT1BackColor(bool))); + connect (ui->tabMainWindow,SIGNAL(setCNT2Select(bool)),ui->tabPrintSetting,SLOT(setCNT2BackColor(bool))); + connect (ui->tabMainWindow,SIGNAL(setCNT3Select(bool)),ui->tabPrintSetting,SLOT(setCNT3BackColor(bool))); + connect(ui->tabMainWindow,SIGNAL(setDisableAll()),this,SLOT(disableTabClick())); + connect(ui->tabPrintSetting,SIGNAL(engineerMode(bool)),ui->tabOtherInfo,SLOT(engieerModeAcceptOther(bool))); + connect(ui->tabPrintSetting,SIGNAL(engineerMode(bool)),ui->tabSystemSetting,SLOT(engieerModeAcceptSystemSettting(bool))); + connect(ui->tabPrintSetting,SIGNAL(continuousHeatModuleChecked(bool)),ui->tabSystemSetting,SLOT(onContinousHeatchecked(bool))); + + // backwashEditor will be shown/hidden based on authorization (onAuthChanged) + + sysPara->status.rWarnViscoReady=0; + +#ifdef SYS_LINUX + onAuthChanged(AUTH_NONE); +#else + onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); +#endif + +#ifdef CANCELAUTH + ui->tabPrintSetting->openAllAuth(); +#endif + + sysPara->status.WorkTimeOut=0; + ui->tabMainWindow->changeEditMode(0); + emit onchangeEditMode(0); // 20140912 + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); +#ifdef MYTEST + onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); +#else + ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); +#endif + sysPara->status.viscosityFaultCnt=0; + setCurrentIndex(0); + sysPara->status.updateSoftEN=0; + sysPara->status.adjHightVolInitEN=0; + sysPara->status.FileChangeRestCntFlag=0; + sysPara->status.HVFaultCloseEn=0; + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + sysPara->devOp->writeFpgaCalandar(1);// + //qDebug()<para.calandar_and_dat.year; + sysPara->status.cnt1GroupRunningIndex=0; + //sysPara->status.cnt1RepeatCurrent=0; + sysPara->status.cnt1GroupCurrentLoop=0; + + //JSON data + connect(ui->tabNetworkManager, SIGNAL(updateJSONData()), ui->tabMainWindow, SLOT(JSON_UpdateDATA()), Qt::QueuedConnection); + connect(ui->tabNetworkManager,SIGNAL(net_stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); + connect(ui->tabMainWindow,SIGNAL(getJSONData()),ui->tabNetworkManager,SLOT(on_GetJsonpushButton_clicked()), Qt::QueuedConnection); + connect(ui->tabNetworkManager,SIGNAL(OpenNewFile()),ui->tabMainWindow->getTexteditOption(),SLOT(onOpenNewFile()), Qt::QueuedConnection); + //JSON data +#ifdef MODBUS + + modbus = NULL; + memset((uint8_t *)&sysPara->modbusParas, 0, sizeof(sysPara->modbusParas)); + sysPara->modbusStatus.receiveEnbleFlag = 1; + snprintf((char *)sysPara->modbusParas.selectFileName, sizeof(sysPara->modbusParas.selectFileName), "%s",QFileInfo(sysPara->para.lastOpenedFileName).fileName().toAscii().constData()); + modbus = new ModbusTcp(&sysPara->modbusParas, &sysPara->modbusStatus); + connect(modbus, SIGNAL(updateQRcode()), ui->tabMainWindow, SLOT(modbusUpdateQRCode()), Qt::QueuedConnection); + connect(modbus, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); + connect(modbus, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); + connect(modbus, SIGNAL(pausePrint()), ui->tabMainWindow, SLOT(on_pushButtonPausePrint_pressed()), Qt::QueuedConnection);//暂时屏蔽排除问题 + connect(modbus,SIGNAL(stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar()),this,SLOT(onModbusWriteCalendar()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar1()),this,SLOT(onModbusWriteCalendar1CurrValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar1EndValue()),this,SLOT(onModbusWriteCalendar1EndValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2EndValue()),this,SLOT(onModbusWriteCalendar2EndValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2RepeatValue()),this,SLOT(onModbusWriteCalendar2RepeatValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2InitValue()),this,SLOT(onModbusWriteCalendar2InitValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(CNTResetNow()),ui->tabMainWindow,SLOT(onModbusCNTResetNowPressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(faultResume()),ui->tabMainWindow,SLOT(onLabelFaultRusumePressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(receivedPrintContent(int)),ui->tabMainWindow,SLOT(onModbusPrintReceivedContent(int)), Qt::QueuedConnection); + connect(modbus,SIGNAL(mbLineAndCharSpace(int, int)),ui->tabMainWindow->getTexteditOption(),SLOT(onMbSetLineAndChar(int, int)), Qt::QueuedConnection); + connect(modbus,SIGNAL(receivedPrintContent_PLC2(int)),ui->tabMainWindow,SLOT(onModbusPrintReceivedContent_PLC2(int)), Qt::QueuedConnection); + connect(this,SIGNAL(updataPara2UI()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() ), Qt::QueuedConnection); + connect(this, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); + connect(this, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(receivedPrintContent_PLC3(QString)),ui->tabMainWindow,SLOT(onModbusPrintReceivedContent_PLC3(QString))); +#endif + + ui->tabMainWindow->enableReclaimCtrlButton(false); + + + connect(ui->tabPrintSetting,SIGNAL(showYiMaShiFont()),ui->tabMainWindow->getTexteditOption(),SLOT(setShowYiMaShiFontOpt())); + + //edit@12-14 + connect(this,SIGNAL(currentChanged(int)),ui->tabMainWindow,SLOT(onInkJetPrinterCurrentChanged(int)), Qt::QueuedConnection); +#ifdef __STC_POWER__ + if(sysPara->devOp->getPowerSource() == POWER_SOURCE_TIMER) + { + sysPara->status.powerSource = POWER_SOURCE_TIMER; + sysPara->status.needPowerOffTimerout = 1; + sysPara->status.waitPowerOffTime = 18; //运行半个钟 + LogInfo::setRunStatusText(tr("定时开机")); + //qDebug()<<"power by:"<< sysPara->status.powerSource; + } + else + { + sysPara->status.powerSource = POWER_SOURCE_KEY; + sysPara->status.needPowerOffTimerout = 0; + } + //sysPara->devOp->setWakeUpTimer(3); + qDebug()<<"power by:"<< sysPara->status.powerSource; +#endif + //pidControllerInit(); + PID_init(); + + +#ifndef __DAC_ADJ_FUNCTION__ + qDebug()<<"__DAC_ADJ_FUNCTION__"; + removeTab(indexOf(ui->tabDacAdjust)); + removeTab(indexOf(ui->tabFpgaDebug)); +#else + + // qDebug()<<"!!!!!!!!!!!!!!!!!!!!deleteLater"; + + removeTab(indexOf(ui->tabDacAdjust)); + removeTab(indexOf(ui->tabFpgaDebug)); + // removeTab(indexOf(ui->tabNetworkManager)); + ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tab_3)); + + ui->vol0SpinBox->setMinimum(0); + ui->vol1SpinBox->setMinimum(0); + ui->vol2SpinBox->setMinimum(0); + ui->vol3SpinBox->setMinimum(0); + ui->vol4SpinBox->setMinimum(0); + ui->vol5SpinBox->setMinimum(0); + ui->vol6SpinBox->setMinimum(0); + ui->vol7SpinBox->setMinimum(0); + ui->vol8SpinBox->setMinimum(0); + ui->vol9SpinBox->setMinimum(0); + ui->vol10SpinBox->setMinimum(0); + ui->vol11SpinBox->setMinimum(0); + ui->vol12SpinBox->setMinimum(0); + ui->vol13SpinBox->setMinimum(0); + ui->vol14SpinBox->setMinimum(0); + ui->vol15SpinBox->setMinimum(0); + ui->vol16SpinBox->setMinimum(0); + ui->vol17SpinBox->setMinimum(0); + ui->vol18SpinBox->setMinimum(0); + ui->vol19SpinBox->setMinimum(0); + ui->vol20SpinBox->setMinimum(0); + ui->vol21SpinBox->setMinimum(0); + ui->vol22SpinBox->setMinimum(0); + ui->vol23SpinBox->setMinimum(0); + ui->vol24SpinBox->setMinimum(0); + ui->vol25SpinBox->setMinimum(0); + ui->vol26SpinBox->setMinimum(0); + ui->vol27SpinBox->setMinimum(0); + ui->vol28SpinBox->setMinimum(0); + ui->vol29SpinBox->setMinimum(0); + ui->vol30SpinBox->setMinimum(0); + ui->vol31SpinBox->setMinimum(0); + ui->vol32SpinBox->setMinimum(0); + ui->vol33SpinBox->setMinimum(0); + ui->vol34SpinBox->setMinimum(0); + ui->vol35SpinBox->setMinimum(0); + ui->vol36SpinBox->setMinimum(0); + ui->vol37SpinBox->setMinimum(0); + ui->vol38SpinBox->setMinimum(0); + ui->vol39SpinBox->setMinimum(0); + + ui->vol0SpinBox->setMaximum(MAX_VOL); + ui->vol1SpinBox->setMaximum(MAX_VOL); + ui->vol2SpinBox->setMaximum(MAX_VOL); + ui->vol3SpinBox->setMaximum(MAX_VOL); + ui->vol4SpinBox->setMaximum(MAX_VOL); + ui->vol5SpinBox->setMaximum(MAX_VOL); + ui->vol6SpinBox->setMaximum(MAX_VOL); + ui->vol7SpinBox->setMaximum(MAX_VOL); + ui->vol8SpinBox->setMaximum(MAX_VOL); + ui->vol9SpinBox->setMaximum(MAX_VOL); + ui->vol10SpinBox->setMaximum(MAX_VOL); + ui->vol11SpinBox->setMaximum(MAX_VOL); + ui->vol12SpinBox->setMaximum(MAX_VOL); + ui->vol13SpinBox->setMaximum(MAX_VOL); + ui->vol14SpinBox->setMaximum(MAX_VOL); + ui->vol15SpinBox->setMaximum(MAX_VOL); + ui->vol16SpinBox->setMaximum(MAX_VOL); + ui->vol17SpinBox->setMaximum(MAX_VOL); + ui->vol18SpinBox->setMaximum(MAX_VOL); + ui->vol19SpinBox->setMaximum(MAX_VOL); + ui->vol20SpinBox->setMaximum(MAX_VOL); + ui->vol21SpinBox->setMaximum(MAX_VOL); + ui->vol22SpinBox->setMaximum(MAX_VOL); + ui->vol23SpinBox->setMaximum(MAX_VOL); + ui->vol24SpinBox->setMaximum(MAX_VOL); + ui->vol25SpinBox->setMaximum(MAX_VOL); + ui->vol26SpinBox->setMaximum(MAX_VOL); + ui->vol27SpinBox->setMaximum(MAX_VOL); + ui->vol28SpinBox->setMaximum(MAX_VOL); + ui->vol29SpinBox->setMaximum(MAX_VOL); + ui->vol30SpinBox->setMaximum(MAX_VOL); + ui->vol31SpinBox->setMaximum(MAX_VOL); + ui->vol32SpinBox->setMaximum(MAX_VOL); + ui->vol33SpinBox->setMaximum(MAX_VOL); + ui->vol34SpinBox->setMaximum(MAX_VOL); + ui->vol35SpinBox->setMaximum(MAX_VOL); + ui->vol36SpinBox->setMaximum(MAX_VOL); + ui->vol37SpinBox->setMaximum(MAX_VOL); + ui->vol38SpinBox->setMaximum(MAX_VOL); + ui->vol39SpinBox->setMaximum(MAX_VOL); + + ui->fvol0SpinBox->setMinimum(0); + ui->fvol1SpinBox->setMinimum(0); + ui->fvol2SpinBox->setMinimum(0); + ui->fvol3SpinBox->setMinimum(0); + ui->fvol4SpinBox->setMinimum(0); + ui->fvol5SpinBox->setMinimum(0); + ui->fvol6SpinBox->setMinimum(0); + ui->fvol7SpinBox->setMinimum(0); + ui->fvol8SpinBox->setMinimum(0); + ui->fvol9SpinBox->setMinimum(0); + ui->fvol10SpinBox->setMinimum(0); + ui->fvol11SpinBox->setMinimum(0); + ui->fvol12SpinBox->setMinimum(0); + ui->fvol13SpinBox->setMinimum(0); + ui->fvol14SpinBox->setMinimum(0); + ui->fvol15SpinBox->setMinimum(0); + ui->fvol16SpinBox->setMinimum(0); + ui->fvol17SpinBox->setMinimum(0); + ui->fvol18SpinBox->setMinimum(0); + ui->fvol19SpinBox->setMinimum(0); + ui->fvol20SpinBox->setMinimum(0); + ui->fvol21SpinBox->setMinimum(0); + ui->fvol22SpinBox->setMinimum(0); + ui->fvol23SpinBox->setMinimum(0); + ui->fvol24SpinBox->setMinimum(0); + ui->fvol25SpinBox->setMinimum(0); + ui->fvol26SpinBox->setMinimum(0); + ui->fvol27SpinBox->setMinimum(0); + ui->fvol28SpinBox->setMinimum(0); + ui->fvol29SpinBox->setMinimum(0); + ui->fvol30SpinBox->setMinimum(0); + ui->fvol31SpinBox->setMinimum(0); + ui->fvol32SpinBox->setMinimum(0); + ui->fvol33SpinBox->setMinimum(0); + ui->fvol34SpinBox->setMinimum(0); + ui->fvol35SpinBox->setMinimum(0); + ui->fvol36SpinBox->setMinimum(0); + ui->fvol37SpinBox->setMinimum(0); + ui->fvol38SpinBox->setMinimum(0); + ui->fvol39SpinBox->setMinimum(0); + + ui->fvol0SpinBox->setMaximum(MAX_VOL); + ui->fvol1SpinBox->setMaximum(MAX_VOL); + ui->fvol2SpinBox->setMaximum(MAX_VOL); + ui->fvol3SpinBox->setMaximum(MAX_VOL); + ui->fvol4SpinBox->setMaximum(MAX_VOL); + ui->fvol5SpinBox->setMaximum(MAX_VOL); + ui->fvol6SpinBox->setMaximum(MAX_VOL); + ui->fvol7SpinBox->setMaximum(MAX_VOL); + ui->fvol8SpinBox->setMaximum(MAX_VOL); + ui->fvol9SpinBox->setMaximum(MAX_VOL); + ui->fvol10SpinBox->setMaximum(MAX_VOL); + ui->fvol11SpinBox->setMaximum(MAX_VOL); + ui->fvol12SpinBox->setMaximum(MAX_VOL); + ui->fvol13SpinBox->setMaximum(MAX_VOL); + ui->fvol14SpinBox->setMaximum(MAX_VOL); + ui->fvol15SpinBox->setMaximum(MAX_VOL); + ui->fvol16SpinBox->setMaximum(MAX_VOL); + ui->fvol17SpinBox->setMaximum(MAX_VOL); + ui->fvol18SpinBox->setMaximum(MAX_VOL); + ui->fvol19SpinBox->setMaximum(MAX_VOL); + ui->fvol20SpinBox->setMaximum(MAX_VOL); + ui->fvol21SpinBox->setMaximum(MAX_VOL); + ui->fvol22SpinBox->setMaximum(MAX_VOL); + ui->fvol23SpinBox->setMaximum(MAX_VOL); + ui->fvol24SpinBox->setMaximum(MAX_VOL); + ui->fvol25SpinBox->setMaximum(MAX_VOL); + ui->fvol26SpinBox->setMaximum(MAX_VOL); + ui->fvol27SpinBox->setMaximum(MAX_VOL); + ui->fvol28SpinBox->setMaximum(MAX_VOL); + ui->fvol29SpinBox->setMaximum(MAX_VOL); + ui->fvol30SpinBox->setMaximum(MAX_VOL); + ui->fvol31SpinBox->setMaximum(MAX_VOL); + ui->fvol32SpinBox->setMaximum(MAX_VOL); + ui->fvol33SpinBox->setMaximum(MAX_VOL); + ui->fvol34SpinBox->setMaximum(MAX_VOL); + ui->fvol35SpinBox->setMaximum(MAX_VOL); + ui->fvol36SpinBox->setMaximum(MAX_VOL); + ui->fvol37SpinBox->setMaximum(MAX_VOL); + ui->fvol38SpinBox->setMaximum(MAX_VOL); + ui->fvol39SpinBox->setMaximum(MAX_VOL); + + ui->cVol0SpinBox->setMinimum(0); + ui->cVol1SpinBox->setMinimum(0); + ui->cVol2SpinBox->setMinimum(0); + ui->cVol3SpinBox->setMinimum(0); + ui->cVol4SpinBox->setMinimum(0); + ui->cVol5SpinBox->setMinimum(0); + ui->cVol6SpinBox->setMinimum(0); + ui->cVol7SpinBox->setMinimum(0); + ui->cVol8SpinBox->setMinimum(0); + ui->cVol9SpinBox->setMinimum(0); + ui->cVol10SpinBox->setMinimum(0); + ui->cVol11SpinBox->setMinimum(0); + ui->cVol12SpinBox->setMinimum(0); + ui->cVol13SpinBox->setMinimum(0); + ui->cVol14SpinBox->setMinimum(0); + ui->cVol15SpinBox->setMinimum(0); + ui->cVol16SpinBox->setMinimum(0); + ui->cVol17SpinBox->setMinimum(0); + ui->cVol18SpinBox->setMinimum(0); + ui->cVol19SpinBox->setMinimum(0); + ui->cVol20SpinBox->setMinimum(0); + ui->cVol21SpinBox->setMinimum(0); + ui->cVol22SpinBox->setMinimum(0); + ui->cVol23SpinBox->setMinimum(0); + ui->cVol24SpinBox->setMinimum(0); + ui->cVol25SpinBox->setMinimum(0); + ui->cVol26SpinBox->setMinimum(0); + ui->cVol27SpinBox->setMinimum(0); + ui->cVol28SpinBox->setMinimum(0); + ui->cVol29SpinBox->setMinimum(0); + ui->cVol30SpinBox->setMinimum(0); + ui->cVol31SpinBox->setMinimum(0); + ui->cVol32SpinBox->setMinimum(0); + ui->cVol33SpinBox->setMinimum(0); + ui->cVol34SpinBox->setMinimum(0); + ui->cVol35SpinBox->setMinimum(0); + ui->cVol36SpinBox->setMinimum(0); + ui->cVol37SpinBox->setMinimum(0); + ui->cVol38SpinBox->setMinimum(0); + ui->cVol39SpinBox->setMinimum(0); + + ui->cVol0SpinBox->setMaximum(MAX_VOL); + ui->cVol1SpinBox->setMaximum(MAX_VOL); + ui->cVol2SpinBox->setMaximum(MAX_VOL); + ui->cVol3SpinBox->setMaximum(MAX_VOL); + ui->cVol4SpinBox->setMaximum(MAX_VOL); + ui->cVol5SpinBox->setMaximum(MAX_VOL); + ui->cVol6SpinBox->setMaximum(MAX_VOL); + ui->cVol7SpinBox->setMaximum(MAX_VOL); + ui->cVol8SpinBox->setMaximum(MAX_VOL); + ui->cVol9SpinBox->setMaximum(MAX_VOL); + ui->cVol10SpinBox->setMaximum(MAX_VOL); + ui->cVol11SpinBox->setMaximum(MAX_VOL); + ui->cVol12SpinBox->setMaximum(MAX_VOL); + ui->cVol13SpinBox->setMaximum(MAX_VOL); + ui->cVol14SpinBox->setMaximum(MAX_VOL); + ui->cVol15SpinBox->setMaximum(MAX_VOL); + ui->cVol16SpinBox->setMaximum(MAX_VOL); + ui->cVol17SpinBox->setMaximum(MAX_VOL); + ui->cVol18SpinBox->setMaximum(MAX_VOL); + ui->cVol19SpinBox->setMaximum(MAX_VOL); + ui->cVol20SpinBox->setMaximum(MAX_VOL); + ui->cVol21SpinBox->setMaximum(MAX_VOL); + ui->cVol22SpinBox->setMaximum(MAX_VOL); + ui->cVol23SpinBox->setMaximum(MAX_VOL); + ui->cVol24SpinBox->setMaximum(MAX_VOL); + ui->cVol25SpinBox->setMaximum(MAX_VOL); + ui->cVol26SpinBox->setMaximum(MAX_VOL); + ui->cVol27SpinBox->setMaximum(MAX_VOL); + ui->cVol28SpinBox->setMaximum(MAX_VOL); + ui->cVol29SpinBox->setMaximum(MAX_VOL); + ui->cVol30SpinBox->setMaximum(MAX_VOL); + ui->cVol31SpinBox->setMaximum(MAX_VOL); + ui->cVol32SpinBox->setMaximum(MAX_VOL); + ui->cVol33SpinBox->setMaximum(MAX_VOL); + ui->cVol34SpinBox->setMaximum(MAX_VOL); + ui->cVol35SpinBox->setMaximum(MAX_VOL); + ui->cVol36SpinBox->setMaximum(MAX_VOL); + ui->cVol37SpinBox->setMaximum(MAX_VOL); + ui->cVol38SpinBox->setMaximum(MAX_VOL); + ui->cVol39SpinBox->setMaximum(MAX_VOL); + + loadVoltageValue(); + connect(ui->savePushButton,SIGNAL(clicked()), this,SLOT( DacAdjustStore())); +#endif +#ifdef __FPGA_DEBUG__ + connect(ui->fpgaWriteBytePushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugWriteByte())); + connect(ui->fpgaReadBytePushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugReadByte())); + + connect(ui->fpgaWriteWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugWriteWord())); + connect(ui->fpgaReadWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugReadWord())); + + connect(ui->fpgaWriteDWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugWriteDWord())); + connect(ui->fpgaReadDWordPushButton,SIGNAL(clicked()), this,SLOT( fpgaDebugReadDWord())); +#endif + sysPara->status.statWarn = sysPara->status.statWarn | WARN_STATUS_INK_WARN; //先置墨水标示为1 + sleep(3); +} + +static void deleteLaterDeleter(PumpValveExecutor *p) { if(p) p->deleteLater(); } + +void InkJetPrinter::loadVoltageValue() +{ +#ifdef __DAC_ADJ_FUNCTION__ + ui->vol0SpinBox->setValue(sysPara->para.printed_adj_dac[0]); + ui->vol1SpinBox->setValue(sysPara->para.printed_adj_dac[1]); + ui->vol2SpinBox->setValue(sysPara->para.printed_adj_dac[2]); + ui->vol3SpinBox->setValue(sysPara->para.printed_adj_dac[3]); + ui->vol4SpinBox->setValue(sysPara->para.printed_adj_dac[4]); + ui->vol5SpinBox->setValue(sysPara->para.printed_adj_dac[5]); + ui->vol6SpinBox->setValue(sysPara->para.printed_adj_dac[6]); + ui->vol7SpinBox->setValue(sysPara->para.printed_adj_dac[7]); + ui->vol8SpinBox->setValue(sysPara->para.printed_adj_dac[8]); + ui->vol9SpinBox->setValue(sysPara->para.printed_adj_dac[9]); + + ui->vol10SpinBox->setValue(sysPara->para.printed_adj_dac[10]); + ui->vol11SpinBox->setValue(sysPara->para.printed_adj_dac[11]); + ui->vol12SpinBox->setValue(sysPara->para.printed_adj_dac[12]); + ui->vol13SpinBox->setValue(sysPara->para.printed_adj_dac[13]); + ui->vol14SpinBox->setValue(sysPara->para.printed_adj_dac[14]); + ui->vol15SpinBox->setValue(sysPara->para.printed_adj_dac[15]); + ui->vol16SpinBox->setValue(sysPara->para.printed_adj_dac[16]); + ui->vol17SpinBox->setValue(sysPara->para.printed_adj_dac[17]); + ui->vol18SpinBox->setValue(sysPara->para.printed_adj_dac[18]); + ui->vol19SpinBox->setValue(sysPara->para.printed_adj_dac[19]); + + ui->vol20SpinBox->setValue(sysPara->para.printed_adj_dac[20]); + ui->vol21SpinBox->setValue(sysPara->para.printed_adj_dac[21]); + ui->vol22SpinBox->setValue(sysPara->para.printed_adj_dac[22]); + ui->vol23SpinBox->setValue(sysPara->para.printed_adj_dac[23]); + ui->vol24SpinBox->setValue(sysPara->para.printed_adj_dac[24]); + ui->vol25SpinBox->setValue(sysPara->para.printed_adj_dac[25]); + ui->vol26SpinBox->setValue(sysPara->para.printed_adj_dac[26]); + ui->vol27SpinBox->setValue(sysPara->para.printed_adj_dac[27]); + ui->vol28SpinBox->setValue(sysPara->para.printed_adj_dac[28]); + ui->vol29SpinBox->setValue(sysPara->para.printed_adj_dac[29]); + + ui->vol30SpinBox->setValue(sysPara->para.printed_adj_dac[30]); + ui->vol31SpinBox->setValue(sysPara->para.printed_adj_dac[31]); + ui->vol32SpinBox->setValue(sysPara->para.printed_adj_dac[32]); + ui->vol33SpinBox->setValue(sysPara->para.printed_adj_dac[33]); + ui->vol34SpinBox->setValue(sysPara->para.printed_adj_dac[34]); + ui->vol35SpinBox->setValue(sysPara->para.printed_adj_dac[35]); + ui->vol36SpinBox->setValue(sysPara->para.printed_adj_dac[36]); + ui->vol37SpinBox->setValue(sysPara->para.printed_adj_dac[37]); + ui->vol38SpinBox->setValue(sysPara->para.printed_adj_dac[38]); + ui->vol39SpinBox->setValue(sysPara->para.printed_adj_dac[39]); + + ui->cVol0SpinBox->setValue(sysPara->para.printed_continue_col_dac[0]); + ui->cVol1SpinBox->setValue(sysPara->para.printed_continue_col_dac[1]); + ui->cVol2SpinBox->setValue(sysPara->para.printed_continue_col_dac[2]); + ui->cVol3SpinBox->setValue(sysPara->para.printed_continue_col_dac[3]); + ui->cVol4SpinBox->setValue(sysPara->para.printed_continue_col_dac[4]); + ui->cVol5SpinBox->setValue(sysPara->para.printed_continue_col_dac[5]); + ui->cVol6SpinBox->setValue(sysPara->para.printed_continue_col_dac[6]); + ui->cVol7SpinBox->setValue(sysPara->para.printed_continue_col_dac[7]); + ui->cVol8SpinBox->setValue(sysPara->para.printed_continue_col_dac[8]); + ui->cVol9SpinBox->setValue(sysPara->para.printed_continue_col_dac[9]); + + ui->cVol10SpinBox->setValue(sysPara->para.printed_continue_col_dac[10]); + ui->cVol11SpinBox->setValue(sysPara->para.printed_continue_col_dac[11]); + ui->cVol12SpinBox->setValue(sysPara->para.printed_continue_col_dac[12]); + ui->cVol13SpinBox->setValue(sysPara->para.printed_continue_col_dac[13]); + ui->cVol14SpinBox->setValue(sysPara->para.printed_continue_col_dac[14]); + ui->cVol15SpinBox->setValue(sysPara->para.printed_continue_col_dac[15]); + ui->cVol16SpinBox->setValue(sysPara->para.printed_continue_col_dac[16]); + ui->cVol17SpinBox->setValue(sysPara->para.printed_continue_col_dac[17]); + ui->cVol18SpinBox->setValue(sysPara->para.printed_continue_col_dac[18]); + ui->cVol19SpinBox->setValue(sysPara->para.printed_continue_col_dac[19]); + + ui->cVol20SpinBox->setValue(sysPara->para.printed_continue_col_dac[20]); + ui->cVol21SpinBox->setValue(sysPara->para.printed_continue_col_dac[21]); + ui->cVol22SpinBox->setValue(sysPara->para.printed_continue_col_dac[22]); + ui->cVol23SpinBox->setValue(sysPara->para.printed_continue_col_dac[23]); + ui->cVol24SpinBox->setValue(sysPara->para.printed_continue_col_dac[24]); + ui->cVol25SpinBox->setValue(sysPara->para.printed_continue_col_dac[25]); + ui->cVol26SpinBox->setValue(sysPara->para.printed_continue_col_dac[26]); + ui->cVol27SpinBox->setValue(sysPara->para.printed_continue_col_dac[27]); + ui->cVol28SpinBox->setValue(sysPara->para.printed_continue_col_dac[28]); + ui->cVol29SpinBox->setValue(sysPara->para.printed_continue_col_dac[29]); + + ui->cVol30SpinBox->setValue(sysPara->para.printed_continue_col_dac[30]); + ui->cVol31SpinBox->setValue(sysPara->para.printed_continue_col_dac[31]); + ui->cVol32SpinBox->setValue(sysPara->para.printed_continue_col_dac[32]); + ui->cVol33SpinBox->setValue(sysPara->para.printed_continue_col_dac[33]); + ui->cVol34SpinBox->setValue(sysPara->para.printed_continue_col_dac[34]); + ui->cVol35SpinBox->setValue(sysPara->para.printed_continue_col_dac[35]); + ui->cVol36SpinBox->setValue(sysPara->para.printed_continue_col_dac[36]); + ui->cVol37SpinBox->setValue(sysPara->para.printed_continue_col_dac[37]); + ui->cVol38SpinBox->setValue(sysPara->para.printed_continue_col_dac[38]); + ui->cVol39SpinBox->setValue(sysPara->para.printed_continue_col_dac[39]); + + ui->fvol0SpinBox->setValue(sysPara->para.printed_full_col_dac[0]); + ui->fvol1SpinBox->setValue(sysPara->para.printed_full_col_dac[1]); + ui->fvol2SpinBox->setValue(sysPara->para.printed_full_col_dac[2]); + ui->fvol3SpinBox->setValue(sysPara->para.printed_full_col_dac[3]); + ui->fvol4SpinBox->setValue(sysPara->para.printed_full_col_dac[4]); + ui->fvol5SpinBox->setValue(sysPara->para.printed_full_col_dac[5]); + ui->fvol6SpinBox->setValue(sysPara->para.printed_full_col_dac[6]); + ui->fvol7SpinBox->setValue(sysPara->para.printed_full_col_dac[7]); + ui->fvol8SpinBox->setValue(sysPara->para.printed_full_col_dac[8]); + ui->fvol9SpinBox->setValue(sysPara->para.printed_full_col_dac[9]); + + ui->fvol10SpinBox->setValue(sysPara->para.printed_full_col_dac[10]); + ui->fvol11SpinBox->setValue(sysPara->para.printed_full_col_dac[11]); + ui->fvol12SpinBox->setValue(sysPara->para.printed_full_col_dac[12]); + ui->fvol13SpinBox->setValue(sysPara->para.printed_full_col_dac[13]); + ui->fvol14SpinBox->setValue(sysPara->para.printed_full_col_dac[14]); + ui->fvol15SpinBox->setValue(sysPara->para.printed_full_col_dac[15]); + ui->fvol16SpinBox->setValue(sysPara->para.printed_full_col_dac[16]); + ui->fvol17SpinBox->setValue(sysPara->para.printed_full_col_dac[17]); + ui->fvol18SpinBox->setValue(sysPara->para.printed_full_col_dac[18]); + ui->fvol19SpinBox->setValue(sysPara->para.printed_full_col_dac[19]); + + ui->fvol20SpinBox->setValue(sysPara->para.printed_full_col_dac[20]); + ui->fvol21SpinBox->setValue(sysPara->para.printed_full_col_dac[21]); + ui->fvol22SpinBox->setValue(sysPara->para.printed_full_col_dac[22]); + ui->fvol23SpinBox->setValue(sysPara->para.printed_full_col_dac[23]); + ui->fvol24SpinBox->setValue(sysPara->para.printed_full_col_dac[24]); + ui->fvol25SpinBox->setValue(sysPara->para.printed_full_col_dac[25]); + ui->fvol26SpinBox->setValue(sysPara->para.printed_full_col_dac[26]); + ui->fvol27SpinBox->setValue(sysPara->para.printed_full_col_dac[27]); + ui->fvol28SpinBox->setValue(sysPara->para.printed_full_col_dac[28]); + ui->fvol29SpinBox->setValue(sysPara->para.printed_full_col_dac[29]); + + ui->fvol30SpinBox->setValue(sysPara->para.printed_full_col_dac[30]); + ui->fvol31SpinBox->setValue(sysPara->para.printed_full_col_dac[31]); + ui->fvol32SpinBox->setValue(sysPara->para.printed_full_col_dac[32]); + ui->fvol33SpinBox->setValue(sysPara->para.printed_full_col_dac[33]); + ui->fvol34SpinBox->setValue(sysPara->para.printed_full_col_dac[34]); + ui->fvol35SpinBox->setValue(sysPara->para.printed_full_col_dac[35]); + ui->fvol36SpinBox->setValue(sysPara->para.printed_full_col_dac[36]); + ui->fvol37SpinBox->setValue(sysPara->para.printed_full_col_dac[37]); + ui->fvol38SpinBox->setValue(sysPara->para.printed_full_col_dac[38]); + ui->fvol39SpinBox->setValue(sysPara->para.printed_full_col_dac[39]); + if(sysPara->para.dacScale < 40 || sysPara->para.dacScale>150) + sysPara->para.dacScale = 100; + //ui->dacScaledSpinBox->setValue(sysPara->para.dacScale); + //memcpy(sysPara->status.printed_adj_dac, sysPara->para.printed_adj_dac, sizeof(sysPara->para.printed_adj_dac)); +#endif +} + +struct _pid{ + float SetSpeed;//定义设定值 + float ActualSpeed;//定义实际值 + float err;//定义偏差值 + float err_last;//定义上一个偏差值 + float Kp,Ki,Kd;//定义比例、积分、微分系数 + float voltage;//定义电压值(控制执行器的变量) + float integral;//定义积分值 + float integral_max; //积分限幅(根据实际调整) +}pid; + +void PID_init(){ + pid.SetSpeed=0.0; + pid.ActualSpeed=0.0; + pid.err=0.0; + pid.err_last=0.0; + pid.voltage=0.0; + pid.integral=0.0; + pid.integral_max=400.0f; + pid.Kp=0.21; + pid.Ki=0.006; + pid.Kd=0.0; +} + +static float u = 1.0; +static int s_rampCnt = 0; +static bool s_rampDone = false; +static int s_pidCallCnt = 0; + +float PID_realize(float speed, float act){ + unsigned char index = 1; + pid.SetSpeed=speed; + pid.ActualSpeed = act; + pid.err=pid.SetSpeed-pid.ActualSpeed; + if(u < 900) + { + pid.integral+=pid.err; + } + pid.voltage=pid.Kp*pid.err + index*pid.Ki*pid.integral + pid.Kd*(pid.err-pid.err_last); + pid.err_last=pid.err; + pid.ActualSpeed =pid.voltage*1.0; + return pid.ActualSpeed; +} + +float PID_realize2(float speed, float act){ + pid.Kp = 0.08f; + pid.Ki = 0.003f; // 0.015 * (100ms/500ms) = 0.003,防积分饱和 + pid.Kd = 0.0f; + pid.SetSpeed = speed; + pid.ActualSpeed = act; + pid.err = pid.SetSpeed - pid.ActualSpeed; + + // 增量式PID差分公式:Δu = Kp*(e[k]-e[k-1]) + Ki*e[k] + Kd*(e[k]-2*e[k-1]+e[k-2]) + // e[k-2] 用 voltage 字段暂存 + float delta_u = pid.Kp * (pid.err - pid.err_last) + + pid.Ki * pid.err + + pid.Kd * (pid.err - 2.0f * pid.err_last + pid.voltage); + + // 自适应步长:误差大时快速逼近,误差小时精细调节 + float absErr = (pid.err < 0) ? -pid.err : pid.err; + float maxStep, minStep; + if(absErr > 50.0f) { + maxStep = 6.0f; minStep = -10.0f; // 大误差:快速逼近 + } else if(absErr > 20.0f) { + maxStep = 3.0f; minStep = -5.0f; // 中误差:适中 + } else { + maxStep = 1.5f; minStep = -2.5f; // 小误差:精细调节 + } + if(delta_u > maxStep) delta_u = maxStep; + if(delta_u < minStep) delta_u = minStep; + + pid.voltage = pid.err_last; // 暂存 e[k-2] + pid.err_last = pid.err; + return delta_u; +} + +void InkJetPrinter::pressureAdj(int type) +{ + if(sysPara->status.gearPumpRunStopFlag || sysPara->status.flagOfSpeedAlarm) + { + sysPara->para.gearPumpValue = 0; + u = 0.0f; + m_rampDone = false; + m_adjSkip = 0; + m_lastAvgPressure = 0; + m_bufValidCount = 0; + for(int i = 0; i < 20; i++) m_pressureBuf[i] = 0; + m_bufIdx = 0; + sysPara->devOp->WriteMoterPump(); + return; + } + + if(!sysPara->para.gearPumpEnable) + { + // 非齿轮泵模式:沿用原有位置式PID + if(u > 0 || ((sysPara->para.pressure - sysPara->status.PRESSURE) > 0)) + u = PID_realize((float)sysPara->para.pressure, (float)sysPara->status.PRESSURE); + sysPara->para.gearPumpValue = (u > 0) ? (unsigned short)u : 0; + if(sysPara->para.gearPumpValue > 800) + sysPara->para.gearPumpValue = 800; + sysPara->devOp->WriteMoterPump(); + return; + } + + //回收泵模式限速 + int maxValue = sysPara->para.flagOfReclaimPumEnable ? 420 : 800; + if(maxValue < 60) maxValue = 60; + + int maxSpeed = (int)sysPara->para.gearPumpSpeedAlarm; + + int actual = sysPara->status.PRESSURE; + int target = (int)sysPara->para.pressure; + int cur; + + //每次进入都更新滑动平均缓冲 + m_pressureBuf[m_bufIdx] = actual; + m_bufIdx = (m_bufIdx + 1) % 20; + if(m_bufValidCount < 20) m_bufValidCount++; // 累积有效点数 + + // 优化:缓冲区未满时只对有效数据求平均,避免0值拉低平均值 + int avgPressure = 0; + for(int i = 0; i < m_bufValidCount; i++) { + avgPressure += m_pressureBuf[i]; + } + avgPressure /= m_bufValidCount; + + //硬保护:压力超过目标+50,立即强制减速,优先级最高 + if(actual > target + 50) + { + float overErr = (float)(actual - (target + 50)); + float delta = -0.1f * overErr; + if(delta < -15.0f) delta = -15.0f; + u += delta; + if(u < 60.0f) u = 60.0f; + if(u > (float)maxValue) u = (float)maxValue; + m_lastAvgPressure = actual; + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + return; + } + + // 软启动:自适应步长,每 800ms 一次 + // 自检期间也走此逻辑,自检完成后重置重新收敛 + // 软启动阶段不做压力稳定检测,优先快速收敛 + if(!m_rampDone) + { + if(++m_adjSkip < 8) + { + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + return; + } + m_adjSkip = 0; + + int err = target - actual; + + if(err < 0) + { + // 超压:小步减速 + u -= 1.0f; + } + else + { + // 自适应步长:差得远步子大,差得近步子小 + float step; + if (err > 200) step = 5.0f; + else if(err > 100) step = 3.0f; + else if(err > 50) step = 2.0f; + else step = 1.0f; + u += step; + } + + if(u < 60.0f) u = 60.0f; + if(u > (float)maxValue) u = (float)maxValue; + + // 转速上限保护:VX4特有,防止回收泵模式下转速超标 + if(sysPara->para.flagOfReclaimPumEnable && + sysPara->status.gearPumpRunSpeed >= maxSpeed) + { + u -= 3.0f; + if(u < 60.0f) u = 60.0f; + if(u > (float)maxValue) u = (float)maxValue; + } + + cur = (int)u; + + // 进入闭环条件:压力已接近目标±30以内 + if(sysPara->status.selfCheckDone && err >= -30 && err <= 30) + { + m_rampDone = true; + m_adjSkip = 0; + } + + sysPara->para.gearPumpValue = (unsigned short)cur; + sysPara->devOp->WriteMoterPump(); + return; + } + + //闭环:使用实时压力做快速小步修正,每200ms调整一次 + { + m_adjSkip++; + if(m_adjSkip < 2) + { + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + return; + } + m_adjSkip = 0; + + float err = (float)(target - actual); + float absErr = err; + if(absErr < 0.0f) absErr = -absErr; + + if(absErr < 0.5f) + { + m_lastAvgPressure = actual; + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + return; + } + + int pressureChange = actual - m_lastAvgPressure; + m_lastAvgPressure = actual; + + float delta_u; + if(absErr <= 5.0f && + ((err > 0.0f && pressureChange > 0) || + (err < 0.0f && pressureChange < 0))) + { + delta_u = -0.20f * (float)pressureChange; + } + else + { + delta_u = 0.05f * err - 0.20f * (float)pressureChange; + } + + float maxDelta; + if(absErr > 30.0f) maxDelta = 1.0f; + else if(absErr > 10.0f) maxDelta = 0.6f; + else maxDelta = 0.3f; + + if(delta_u > maxDelta) delta_u = maxDelta; + if(delta_u < -maxDelta) delta_u = -maxDelta; + + if(sysPara->para.flagOfReclaimPumEnable && + sysPara->status.gearPumpRunSpeed >= maxSpeed) + { + if(delta_u > 0.0f) delta_u = 0.0f; + } + + u += delta_u; + if(u < 60.0f) u = 60.0f; + if(u > (float)maxValue) u = (float)maxValue; + cur = (int)u; + + sysPara->para.gearPumpValue = (unsigned short)cur; + sysPara->devOp->WriteMoterPump(); + } +} + +void InkJetPrinter::DacAdjustStore() +{ +#ifdef __DAC_ADJ_FUNCTION__ + sysPara->para.printed_adj_dac[0] = ui->vol0SpinBox->value(); + sysPara->para.printed_adj_dac[1] = ui->vol1SpinBox->value(); + sysPara->para.printed_adj_dac[2] = ui->vol2SpinBox->value(); + sysPara->para.printed_adj_dac[3] = ui->vol3SpinBox->value(); + sysPara->para.printed_adj_dac[4] = ui->vol4SpinBox->value(); + sysPara->para.printed_adj_dac[5] = ui->vol5SpinBox->value(); + sysPara->para.printed_adj_dac[6] = ui->vol6SpinBox->value(); + sysPara->para.printed_adj_dac[7] = ui->vol7SpinBox->value(); + sysPara->para.printed_adj_dac[8] = ui->vol8SpinBox->value(); + sysPara->para.printed_adj_dac[9] = ui->vol9SpinBox->value(); + sysPara->para.printed_adj_dac[10] = ui->vol10SpinBox->value(); + sysPara->para.printed_adj_dac[11] = ui->vol11SpinBox->value(); + sysPara->para.printed_adj_dac[12] = ui->vol12SpinBox->value(); + sysPara->para.printed_adj_dac[13] = ui->vol13SpinBox->value(); + sysPara->para.printed_adj_dac[14] = ui->vol14SpinBox->value(); + sysPara->para.printed_adj_dac[15] = ui->vol15SpinBox->value(); + sysPara->para.printed_adj_dac[16] = ui->vol16SpinBox->value(); + sysPara->para.printed_adj_dac[17] = ui->vol17SpinBox->value(); + sysPara->para.printed_adj_dac[18] = ui->vol18SpinBox->value(); + sysPara->para.printed_adj_dac[19] = ui->vol19SpinBox->value(); + + sysPara->para.printed_adj_dac[20] = ui->vol20SpinBox->value(); + sysPara->para.printed_adj_dac[21] = ui->vol21SpinBox->value(); + sysPara->para.printed_adj_dac[22] = ui->vol22SpinBox->value(); + sysPara->para.printed_adj_dac[23] = ui->vol23SpinBox->value(); + sysPara->para.printed_adj_dac[24] = ui->vol24SpinBox->value(); + sysPara->para.printed_adj_dac[25] = ui->vol25SpinBox->value(); + sysPara->para.printed_adj_dac[26] = ui->vol26SpinBox->value(); + sysPara->para.printed_adj_dac[27] = ui->vol27SpinBox->value(); + sysPara->para.printed_adj_dac[28] = ui->vol28SpinBox->value(); + sysPara->para.printed_adj_dac[29] = ui->vol29SpinBox->value(); + + sysPara->para.printed_adj_dac[30] = ui->vol30SpinBox->value(); + sysPara->para.printed_adj_dac[31] = ui->vol31SpinBox->value(); + sysPara->para.printed_adj_dac[32] = ui->vol32SpinBox->value(); + sysPara->para.printed_adj_dac[33] = ui->vol33SpinBox->value(); + sysPara->para.printed_adj_dac[34] = ui->vol34SpinBox->value(); + sysPara->para.printed_adj_dac[35] = ui->vol35SpinBox->value(); + sysPara->para.printed_adj_dac[36] = ui->vol36SpinBox->value(); + sysPara->para.printed_adj_dac[37] = ui->vol37SpinBox->value(); + sysPara->para.printed_adj_dac[38] = ui->vol38SpinBox->value(); + sysPara->para.printed_adj_dac[39] = ui->vol39SpinBox->value(); + //memcpy(sysPara->para.printed_adj_dac, sysPara->status.printed_adj_dac, sizeof(sysPara->para.printed_adj_dac)); + + sysPara->para.printed_continue_col_dac[0] = ui->cVol0SpinBox->value(); + sysPara->para.printed_continue_col_dac[1] = ui->cVol1SpinBox->value(); + sysPara->para.printed_continue_col_dac[2] = ui->cVol2SpinBox->value(); + sysPara->para.printed_continue_col_dac[3] = ui->cVol3SpinBox->value(); + sysPara->para.printed_continue_col_dac[4] = ui->cVol4SpinBox->value(); + sysPara->para.printed_continue_col_dac[5] = ui->cVol5SpinBox->value(); + sysPara->para.printed_continue_col_dac[6] = ui->cVol6SpinBox->value(); + sysPara->para.printed_continue_col_dac[7] = ui->cVol7SpinBox->value(); + sysPara->para.printed_continue_col_dac[8] = ui->cVol8SpinBox->value(); + sysPara->para.printed_continue_col_dac[9] = ui->cVol9SpinBox->value(); + sysPara->para.printed_continue_col_dac[10] = ui->cVol10SpinBox->value(); + sysPara->para.printed_continue_col_dac[11] = ui->cVol11SpinBox->value(); + sysPara->para.printed_continue_col_dac[12] = ui->cVol12SpinBox->value(); + sysPara->para.printed_continue_col_dac[13] = ui->cVol13SpinBox->value(); + sysPara->para.printed_continue_col_dac[14] = ui->cVol14SpinBox->value(); + sysPara->para.printed_continue_col_dac[15] = ui->cVol15SpinBox->value(); + sysPara->para.printed_continue_col_dac[16] = ui->cVol16SpinBox->value(); + sysPara->para.printed_continue_col_dac[17] = ui->cVol17SpinBox->value(); + sysPara->para.printed_continue_col_dac[18] = ui->cVol18SpinBox->value(); + sysPara->para.printed_continue_col_dac[19] = ui->cVol19SpinBox->value(); + + sysPara->para.printed_continue_col_dac[20] = ui->cVol20SpinBox->value(); + sysPara->para.printed_continue_col_dac[21] = ui->cVol21SpinBox->value(); + sysPara->para.printed_continue_col_dac[22] = ui->cVol22SpinBox->value(); + sysPara->para.printed_continue_col_dac[23] = ui->cVol23SpinBox->value(); + sysPara->para.printed_continue_col_dac[24] = ui->cVol24SpinBox->value(); + sysPara->para.printed_continue_col_dac[25] = ui->cVol25SpinBox->value(); + sysPara->para.printed_continue_col_dac[26] = ui->cVol26SpinBox->value(); + sysPara->para.printed_continue_col_dac[27] = ui->cVol27SpinBox->value(); + sysPara->para.printed_continue_col_dac[28] = ui->cVol28SpinBox->value(); + sysPara->para.printed_continue_col_dac[29] = ui->cVol29SpinBox->value(); + + sysPara->para.printed_continue_col_dac[30] = ui->cVol30SpinBox->value(); + sysPara->para.printed_continue_col_dac[31] = ui->cVol31SpinBox->value(); + sysPara->para.printed_continue_col_dac[32] = ui->cVol32SpinBox->value(); + sysPara->para.printed_continue_col_dac[33] = ui->cVol33SpinBox->value(); + sysPara->para.printed_continue_col_dac[34] = ui->cVol34SpinBox->value(); + sysPara->para.printed_continue_col_dac[35] = ui->cVol35SpinBox->value(); + sysPara->para.printed_continue_col_dac[36] = ui->cVol36SpinBox->value(); + sysPara->para.printed_continue_col_dac[37] = ui->cVol37SpinBox->value(); + sysPara->para.printed_continue_col_dac[38] = ui->cVol38SpinBox->value(); + sysPara->para.printed_continue_col_dac[39] = ui->cVol39SpinBox->value(); + + sysPara->para.printed_full_col_dac[0] = ui->fvol0SpinBox->value(); + sysPara->para.printed_full_col_dac[1] = ui->fvol1SpinBox->value(); + sysPara->para.printed_full_col_dac[2] = ui->fvol2SpinBox->value(); + sysPara->para.printed_full_col_dac[3] = ui->fvol3SpinBox->value(); + sysPara->para.printed_full_col_dac[4] = ui->fvol4SpinBox->value(); + sysPara->para.printed_full_col_dac[5] = ui->fvol5SpinBox->value(); + sysPara->para.printed_full_col_dac[6] = ui->fvol6SpinBox->value(); + sysPara->para.printed_full_col_dac[7] = ui->fvol7SpinBox->value(); + sysPara->para.printed_full_col_dac[8] = ui->fvol8SpinBox->value(); + sysPara->para.printed_full_col_dac[9] = ui->fvol9SpinBox->value(); + sysPara->para.printed_full_col_dac[10] = ui->fvol10SpinBox->value(); + sysPara->para.printed_full_col_dac[11] = ui->fvol11SpinBox->value(); + sysPara->para.printed_full_col_dac[12] = ui->fvol12SpinBox->value(); + sysPara->para.printed_full_col_dac[13] = ui->fvol13SpinBox->value(); + sysPara->para.printed_full_col_dac[14] = ui->fvol14SpinBox->value(); + sysPara->para.printed_full_col_dac[15] = ui->fvol15SpinBox->value(); + sysPara->para.printed_full_col_dac[16] = ui->fvol16SpinBox->value(); + sysPara->para.printed_full_col_dac[17] = ui->fvol17SpinBox->value(); + sysPara->para.printed_full_col_dac[18] = ui->fvol18SpinBox->value(); + sysPara->para.printed_full_col_dac[19] = ui->fvol19SpinBox->value(); + + sysPara->para.printed_full_col_dac[20] = ui->fvol20SpinBox->value(); + sysPara->para.printed_full_col_dac[21] = ui->fvol21SpinBox->value(); + sysPara->para.printed_full_col_dac[22] = ui->fvol22SpinBox->value(); + sysPara->para.printed_full_col_dac[23] = ui->fvol23SpinBox->value(); + sysPara->para.printed_full_col_dac[24] = ui->fvol24SpinBox->value(); + sysPara->para.printed_full_col_dac[25] = ui->fvol25SpinBox->value(); + sysPara->para.printed_full_col_dac[26] = ui->fvol26SpinBox->value(); + sysPara->para.printed_full_col_dac[27] = ui->fvol27SpinBox->value(); + sysPara->para.printed_full_col_dac[28] = ui->fvol28SpinBox->value(); + sysPara->para.printed_full_col_dac[29] = ui->fvol29SpinBox->value(); + + sysPara->para.printed_full_col_dac[30] = ui->fvol30SpinBox->value(); + sysPara->para.printed_full_col_dac[31] = ui->fvol31SpinBox->value(); + sysPara->para.printed_full_col_dac[32] = ui->fvol32SpinBox->value(); + sysPara->para.printed_full_col_dac[33] = ui->fvol33SpinBox->value(); + sysPara->para.printed_full_col_dac[34] = ui->fvol34SpinBox->value(); + sysPara->para.printed_full_col_dac[35] = ui->fvol35SpinBox->value(); + sysPara->para.printed_full_col_dac[36] = ui->fvol36SpinBox->value(); + sysPara->para.printed_full_col_dac[37] = ui->fvol37SpinBox->value(); + sysPara->para.printed_full_col_dac[38] = ui->fvol38SpinBox->value(); + sysPara->para.printed_full_col_dac[39] = ui->fvol39SpinBox->value(); + //sysPara->para.dacScale = ui->dacScaledSpinBox->value(); + sysPara->devOp->writeFpgaPrintPara(); +#endif +} + + +InkJetPrinter::~InkJetPrinter() +{ + delete ui; + delete timer; + if(backwashExecutor){ + backwashExecutor->stop(); + backwashExecutor.clear(); + } +#ifdef MODBUS + if (modbus) { + delete modbus; + } +#endif + if (fileTransceiv) { + fileTransceiv->deleteLater(); + } + //edit@01-03 + if (tcpTransceiv) { + tcpTransceiv->deleteLater(); + } +} + +void InkJetPrinter::jd_timerHandler(void) +{ + static int count_time = 0; + + count_time++; + if(count_time>= 20){ //each 10s + count_time = 0; +#ifdef MIMA + jd_res = ui->tabPrintSetting->dlgInputAddr->isEnabled(); + // qDebug()<<"jd_timerHandler"; +#endif +#ifdef __RFID_CARD + static int faultyNum = 0; + static uint noticeICReaderErrorTime = QDateTime::currentDateTime().toTime_t(); + if((QDateTime::currentDateTime().toTime_t() - noticeICReaderErrorTime > 7200 + || QDateTime::currentDateTime().toTime_t() == noticeICReaderErrorTime) + || (faultyNum > 0 && faultyNum < 10)) + { + noticeICReaderErrorTime = QDateTime::currentDateTime().toTime_t(); + if(sysPara->devOp->queryReadRFID_address() == 2) + { + faultyNum++; + if(faultyNum >= 10){ + msgtest->setText(tr("13.读卡器故障!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("13.读卡器故障!")); + qDebug()<<"读卡器故障"; + } + } + else + faultyNum = 0; + } +#endif + } +} +extern void MySleep(unsigned int msec); +extern unsigned char test_flag; +bool gearPumpRunNormalFlag = false; +void InkJetPrinter::timerHandler(void){ + // QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); + + int pulse_100ms = 0; + int pulse_1s = 0; + int pulse_10s = 0; + int pulse_100s = 0; + int pulse_300ms = 0; + static int pulse_3s = 0; + static int pulse_4s = 0; + static int pulse_5s = 0; + static int reciclar_30s = 0; + static int pulse_30s = 0; + static int xxxm=0; + // static char res=0; + static int save_weeknum = 0; + static bool gearPumpRunFlag = false; + static bool ControledSwitchFlag = false; + static bool gearPumpStartFlag = false; + static bool delay3s = false; + //gearPumpRunStopFlag = false; + bool InkSwintFlag = false,lastInkSwintFlag = false; + + static float gearPumpRunNormalValue = 0.0; +#ifdef DEBUG1 + sysPara->status.selfCheckDone=1; +#endif + + if(sysPara){ +#ifdef MODBUS + // processCommands(); +#endif + +#ifdef MIMA + if(xxxm==0) + { + +#ifdef AM335TEST + +#else + +#ifdef MYTEST + xxxm=1; +#else + QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); + if(!file.exists()) return; +#endif +#endif + } + xxxm=1; + +#endif + + sysPara->para.ReadFileErrorCnt=0; // 正常打开文件 + + // /opt/FriendlyARM/mini2440/rootfs_qtopia_qt4/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib + if(sysPara->para.gearPumpEnable) + { + ui->tabMainWindow->enablePushButtonStart(true); + if(!pushButtonStartFlag) + { + gearPumpRunNormalFlag = false; + } + //ui->tabSystemSetting->setSpinBoxPressureMaxValue(900); + if(!gearPumpRunFlag) + { + ui->tabMainWindow->enableReclaimCtrlButton(false); + } + } + else + { + ui->tabMainWindow->enablePushButtonStart(false); + //ui->tabSystemSetting->setSpinBoxPressureMaxValue(5000); + } + + /*-----------------------形成脉冲-----------------------------*/ + sysPara->status.delay10ms ++; + if(sysPara->status.delay10ms == 10){ + pulse_100ms = 1; + sysPara->status.delay10ms = 0; + } + if(pulse_100ms){ + sysPara->status.delay100ms ++; + if(sysPara->status.delay100ms == 10){ + pulse_1s = 1; + sysPara->status.delay100ms = 0; + } + pulse_300ms = (sysPara->status.delay100ms%3) == 0; //1秒3次,并非精确的300ms + + } + if((sysPara->status.delay10ms%3) == 0) //读取状态后再检測 + { + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) && !gearPumpRunFlag && !sysPara->status.isPumpValveControledByHand)//刚启动前3秒 + { + if(sysPara->para.gearPumpEnable) { + // 确保开机时pressureAdj 软启动从 0 爬坡,避免突变到高转速 + if(sysPara->para.gearPumpValue != 0) { + sysPara->para.gearPumpValue = 0; + u = 0.0f; + sysPara->devOp->WriteMoterPump(); + } + gearPumpStartFlag = true; + } + } + } + if(pushButtonStartFlag && sysPara->status.selfCheckDone) + { + if((sysPara->status.PRESSURE > (sysPara->para.pressure -10)) && (sysPara->status.PRESSURE < (sysPara->para.pressure +10))) + { + if(pulse_1s) + { + pulse_5s++; + } + if( pulse_5s == 5) + { + pulse_5s = 0; + gearPumpRunNormalFlag = true; + gearPumpRunNormalValue = u; + } + } + } + if(sysPara->status.isPumpValveControledByHand) + { + gearPumpRunNormalFlag = false; + ControledSwitchFlag = false; + pulse_3s = 0; + } + // 直接恢复压力控制,不走 gearPumpStartFlag 的 3s 等待 + // 平滑切换,避免手动操作后自动恢复时出现压力突变 + if(m_lastByHand && !sysPara->status.isPumpValveControledByHand) + { + ControledSwitchFlag = true; + u = (float)sysPara->para.gearPumpValue; // 同步当前转速,避免突变 + m_rampDone = false; // 重新软启动,适应切换后的压力状态 + m_adjSkip = 0; + m_lastAvgPressure = 0; + m_bufValidCount = 0; + for(int i = 0; i < 20; i++) m_pressureBuf[i] = 0; + m_bufIdx = 0; + } + m_lastByHand = sysPara->status.isPumpValveControledByHand; + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关,压力抖动 + InkSwintFlag = true; + } + else + { + InkSwintFlag = false; + } + if(lastInkSwintFlag != InkSwintFlag) + { + lastInkSwintFlag = InkSwintFlag; + gearPumpRunNormalFlag = false; + } + if(gearPumpRunNormalFlag && !sysPara->status.isPumpValveControledByHand && sysPara->para.gearPumpEnable) + { + static int count_3s = 0; + if(u > gearPumpRunNormalValue*1.5)//改大一点 + { + if(pulse_1s) + { + count_3s++; + if(count_3s == 3) + { + count_3s = 0; + ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!")); + sysPara->status.gearPumpRunStopFlag = true; + gearPumpRunNormalFlag = false; + LogInfo::setRunStatusText(tr("运行中压力泄漏,停齿轮泵!")); + } + } + } + else + { + count_3s = 0; + } + } + if(sysPara->para.gearPumpEnable && !sysPara->para.flagOfReclaimPumEnable && (sysPara->status.gearPumpRunSpeed < 100) && test_flag){ + if(test_flag % 2) + ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); + test_flag = 0; + } + if(pulse_1s) { + if(!modbus->m_thread.isRunning()) + modbus->m_thread.start(); + if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable) + checkPressureControl(); + if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){ + if(ui->tabMainWindow->getCurrPrintStatus() != 1){ + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("测试时间结束,准备关机")); + ui->tabMainWindow->setRunStatus(tr("测试时间结束,准备关机")); + } + } + if(reciclar_30s == 1){ + qDebug()<<"test_flag = "<status.selfCheckDone && sysPara->para.Reciclar && test_flag){ + reciclar_30s++; + if(reciclar_30s > 30){ + reciclar_30s = 0; + test_flag++; + } + } + else if(reciclar_30s){ + reciclar_30s = 0; + } + QDate d = QDate::currentDate(); + + if(save_weeknum == 0) + { + save_weeknum = d.weekNumber(); + } + + if(save_weeknum != d.weekNumber()) + { + sysPara->devOp->writeFpgaCalandar(1); + save_weeknum = d.weekNumber(); + } + + sysPara->status.delay1s ++; + if(sysPara->status.delay1s == 3 && !delay3s) + delay3s = true; + if(sysPara->status.delay1s == 10){ + pulse_10s = 1; + sysPara->status.delay1s = 0; + } + //if(pushButtonStartFlag) + pulse_4s++; + if(gearPumpStartFlag) + { + pulse_3s ++; + if(pulse_3s == 3) + { + pulse_3s = 0; + gearPumpRunFlag = true; + ControledSwitchFlag = true; + } + } +#ifdef QTV4 + if( sysPara->status.reclainTankReachEnd) sysPara->para.openInkLineTime++; +#else + if( sysPara->status.reclainTankReachEnd) sysPara->para.openInkLineTime++; +#endif + /**********24小时自动开机,5分钟没有完成自检就关机。齿轮泵机器墨水液位的情况下不会进行自检********************/ + static int timeToPowerOff = 0; + timeToPowerOff++; + if(sysPara->status.powerSource == POWER_SOURCE_TIMER && timeToPowerOff % 60 == 0){ + qDebug()<<"powerSource: "<status.powerSource; + qDebug()<<"timeToPowerOff: "<status.selfCheckDone; + } + + if(sysPara->status.powerSource == POWER_SOURCE_TIMER && timeToPowerOff >= 300 && !sysPara->status.selfCheckDone){ + sysPara->status.powerOffAppending = true; + qDebug()<<"24小时自动开机,5分钟没有完成自检"; + if(sysPara->status.statWarn && WARN_STATUS_INK_WARN) + qDebug()<<"24小时自动开机,缺少墨水,直接关机"; + ui->tabMainWindow->checkForPowerOff(); + } + } + if(pulse_10s){ +#ifdef __STC_POWER__ + { + sysPara->devOp->Heartbeat(1); + } +#endif + sysPara->status.delay10s ++; + if(sysPara->status.delay10s == 10){ + sysPara->saveParaToFile(); + pulse_100s = 1; + sysPara->status.delay10s = 0; +#ifdef __STC_POWER__ + if(!sysPara->status.selfCheckDone){ + qDebug()<<"gearPumpRunFlag: "<para.gearPumpEnable; + } + qDebug()<<"needPowerOffTimerout: "<status.needPowerOffTimerout; + qDebug()<<"getCurrPrintStatus: "<tabMainWindow->getCurrPrintStatus(); + if(sysPara->status.needPowerOffTimerout && (ui->tabMainWindow->getCurrPrintStatus() != 1)) + { + qDebug()<<"waitPowerOffTime: "<status.waitPowerOffTime; + if(sysPara->status.waitPowerOffTime) + { + sysPara->status.waitPowerOffTime--; + if(!sysPara->status.waitPowerOffTime) + { + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机")); + ui->tabMainWindow->setRunStatus(tr("准备关机")); + } + } + } +#endif + } +#ifdef AM335TEST + jd_res =0; +#else + +#endif + } + + /*------------------------------------------------------*/ +#ifdef UART2 + static bool Flag300=0; + if(sysPara->status.ExtScreenEn && sysPara->para.ExtScreenType) + { + + if(sysPara->para.ExtScreenType==2) + { + if(pulse_300ms) + { + if(Flag300) sysPara->devOp->RecDim(); + else sysPara->devOp->DatToDisp2(); + Flag300 = !Flag300; + + } + } + else if(pulse_1s) + { + if(Flag300) sysPara->devOp->RecDim(); + else sysPara->devOp->DatToDisp2(); + Flag300 = !Flag300; + } + sysPara->devOp->recUart2(); + } +#endif + + sysPara->devOp->readFgaStatus(); + sysPara->status.gearPumpRunSpeed = 0; + +#if 0 + unsigned char ByteData = 0; + static unsigned char lastByteData = 0; + + sysPara->devOp->fpgaRd(0x00fc,(unsigned char *)&ByteData,1);//读取1字节 + //ui->tabMainWindow->setRunStatus(tr("ByteData:<%1>").arg(ByteData)); + if((ByteData & 0x80) != lastByteData) + { + //LogInfo::setRunStatusText(tr("结果:%1").arg(ByteData & 0x80)); + lastByteData = ByteData & 0x80; + if(sysPara->status.selfCheckDone) + { + if(ui->tabMainWindow->getCurrPrintStatus() == 3) + { + ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + } + else + { + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + } + } + } +#endif + // unsigned int PulseMs = 0; //时间间隔 + + unsigned int PulseCnt = 0; //时间间隔内的脉冲累计数 + sysPara->devOp->fpgaRd(0x004E,(unsigned char *)&PulseCnt,2);//读取脉冲个数低字节 + { + sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2); + //sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (10 * 2); + } + if(!sysPara->para.gearPumpEnable) + sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍 + sysPara->devOp->ReadSomeDataForLostPrint(); +#ifdef UART1 + if(pulse_100ms){ + //static int uartReadcnt=0; + emit sysPara->devOp->readUart1(); + } +#endif + + /*-------------------------------------------------------*/ + bool lostCommuFlag = 0; + if(sysPara->status.configDone){ + lostCommuFlag = sysPara->status.maginNum != FPGA_MAGIC_NUM_AFTER_CONF; + } + else { + lostCommuFlag = sysPara->status.maginNum != FPAG_INIT_MAGIC_NUM; + } +#ifdef AM335TEST + sysPara->status.WorkTimeOut=0; +#else +#ifdef MIMAgearPumpRunFlag + if(jd_res &(1<<2)) { + sysPara->status.WorkTimeOut=1; + } +#endif +#endif + +#ifdef X86TEST + lostCommuFlag=0; +#endif +#ifdef MODBUS + + if(sysPara->status.delay10ms%5 == 0) + { +#if 1 //复位发送打印数据 + if((ui->tabMainWindow->getCurrPrintStatus() == 1)&&sysPara->para.ResetSendData) + { + static bool oneTimeFlag = false; + if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据 + { + oneTimeFlag = true; + ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + //复位重设起始值 + if(sysPara->para.cnt1ResetToInitValue) + { + sysPara->para.cnt1CurrValue = sysPara->para.cnt1StartValue; + sysPara->status.cnt1CurrentValueInitDoneFlag = false; + sysPara->devOp->writeFpgaCalandar(0); + } + } + if(sysPara->status.productCnt != 0) + { + oneTimeFlag = false; + } + } +#endif + static unsigned int lastProductCount=0; + if(sysPara->status.productCnt != lastProductCount || sysPara->status.printDoneFlag) + { + sysPara->RFIDPara.PrintInkDots += sysPara->status.TextInkDots; + sysPara->status.printDoneFlag = false; + lastProductCount = sysPara->status.productCnt; + sysPara->modbusStatus.printFinishFlag = 1; + memcpy((void*)(&sysPara->modbusStatus.orderCode), (void*)(&sysPara->modbusParas.QRcode_buf), 2);//写返回序列号 + ui->tabMainWindow->UpdateDateTimeQRCode(QDateTime::currentDateTime().toString("hh:mm")); + } + if (modbus->getModbusStatus() == 1) { + refreshModbusStatus(); + } + } +#endif + if(lostCommuFlag){ + static unsigned char lostCommuCnt=0; + if(sysPara->status.currentRunStatus != RUN_STATUS_LOST_COMMUNICATION_WITH_FPGA) { + // 增加FPGA通信异常判别阀值,避免产生误判。2017.8.30 + if(lostCommuCnt<10) lostCommuCnt ++; + else { + sysPara->status.fpgaVersionNum = 0; + LogInfo::setRunStatusText(tr("与FPGA失去通信!!!")); + sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->controlMixValve(false); + //sysPara->devOp->controlReclaimPump(false); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReleaseValve(false); + sysPara->devOp->controlHeater(false); + qDebug()<<"lostCommuteCation now."<status.maginNum; + } + } + sysPara->status.currentRunStatus = RUN_STATUS_LOST_COMMUNICATION_WITH_FPGA; + } + else if(!sysPara->status.lostCommuFlag && !SIMULATE_PRINTING_MODE) { + if(sysPara->status.currentRunStatus == RUN_STATUS_LOST_COMMUNICATION_WITH_FPGA) + LogInfo::setRunStatusText(tr("与FPGA通信恢复正常")); + + + sysPara->status.currentRunStatus = RUN_STATUS_IDLE; + if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0) + { + // 首先判断是否需要进行反涌清洗自检,如果需要则启动反涌清洗自检流程 + if(!sysPara->status.selfCheckDone && sysPara->para.enbBackwashOnPowerOn && !backwashSelfCheckDone && backwashExecutorForSelfCheck.isNull()) { + backwashExecutorForSelfCheck = QSharedPointer(new PumpValveExecutor(this), deleteLaterDeleter); + backwashExecutorForSelfCheck->setSysPara(sysPara); + bool ret = backwashExecutorForSelfCheck->init(CONF_BACKWASH_STAGES_FILE); + if(!ret) { + LogInfo::setRunStatusText(QString("Failed to load backwash stages file: ") + CONF_BACKWASH_STAGES_FILE); + LogInfo::setRunStatusText("We will skip the backwash process and continue with self-check."); + } + sysPara->status.isPumpValveControledByHand = true; + backwashExecutorForSelfCheck->start(); + + QString logMsg = tr("开始反涌清洗, 请等待%1秒...").arg(backwashExecutorForSelfCheck->processDuration() / 1000); + LogInfo::setRunStatusText(logMsg); + ui->tabMainWindow->setRunStatus(logMsg); + } + + // 反涌清洗流程期间处理 + else if(!backwashSelfCheckDone && backwashExecutorForSelfCheck) { + qint64 remainingMs = backwashExecutorForSelfCheck->processDuration() - backwashExecutorForSelfCheck->currProgressMs(); + int progress = int(remainingMs / 1000); + + // 如果反涌清洗自检流程已经完成,则标记为完成状态,并清理相关资源。准备进入开机自检流程 + if(!backwashExecutorForSelfCheck->isRunning()) { + backwashSelfCheckDone = true; + sysPara->status.isPumpValveControledByHand = false; + backwashExecutorForSelfCheck.clear(); + backwashSelfCheckProgressSecs = 0; + QString logMsg = tr("反涌清洗自检完成。"); + ui->tabMainWindow->setRunStatus(logMsg); + LogInfo::setRunStatusText(logMsg); + } + + // 如果反涌清洗自检流程仍在进行中,则更新进度显示 + else if(progress != backwashSelfCheckProgressSecs) { + backwashSelfCheckProgressSecs = progress; + ui->tabMainWindow->setRunStatus(tr("正在进行反涌清洗, 请等待%1秒...").arg(progress)); + } + } + else if(!sysPara->status.selfCheckDone) + { + /*开机自检*/ + autoControlValvePump(); + // 自检阶段也改为100ms调用一次,避免转速提升过快 + if(pulse_100ms) { + pressureAdj(0); + } + /*-----------------------------------------------------*/ + if(!sysPara->status.selfCheckCnt) { + LogInfo::setRunStatusText(tr("开始自检,请等待60秒...............")); + qDebug()<<"开始自检"; + ui->tabPrintSetting->PrintSettingLog(); + ui->tabTriggerMode->TriggerCtrlLog(); + ui->tabSystemSetting->SystemSettingLog(); + ui->tabOtherInfo->OtherInfoLog(); + ui->tabMainWindow->enableReclaimCtrlButton(false); + ui->tabMainWindow->enablePrintButton(false); + sysPara->devOp->mainInkCtrl(); //dsicard byons@2026年8月13日 + sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1 + sysPara->saveParaToFile(); // 保存开机次数值 + + sysPara->status.lastProductCnt = sysPara->status.productCnt ; //这会让产品计数显示出来 + + ui->tabMainWindow->updateTotalCnt(0); + +#ifdef X86TEST + // if(sysPara->status.selfCheckCnt < MAX_SELF_CHECK_CNT-2)sysPara->status.selfCheckCnt = MAX_SELF_CHECK_CNT-2; + +#endif + } + if((sysPara->status.selfCheckCnt % 100) == 0) + ui->tabMainWindow->setRunStatus(tr("开始自检,请等待%1秒...............").arg((MAX_SELF_CHECK_CNT - sysPara->status.selfCheckCnt)/100)); + + sysPara->status.selfCheckCnt ++; + if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) + { + sysPara->status.selfCheckDone = 1; + // 自检完成平滑进入闭环,不强制跳转造成扰动 + m_rampDone = true; + m_adjSkip = 0; + // 同步 gearPumpValue 与 u,防止两者不一致 + sysPara->para.gearPumpValue = (unsigned short)u; + LogInfo::setRunStatusText(tr("自检完成!!!")); + ui->tabMainWindow->setRunStatus(tr("自检完成!!!")); + qDebug()<<"自检完成!!!"; + ui->tabMainWindow->enableReclaimCtrlButton(true); + + // 先让软件更新泵/阀的期望状态 + autoControlValvePump(); + sysPara->devOp->mainInkCtrl(); + sysPara->status.canRunAirPushing = true; + sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100; + if(sysPara->para.Reciclar) + test_flag = 1; + LogInfo::setRunStatusText(tr("InkRFIDCnt=%1,PrintInkDots=%2,SOLVRFIDCnt=%3,solventNumber=%4,InkEmptyCnt=%5,SOLVEmptyCnt=%6").\ + arg(sysPara->RFIDPara.InkRFIDCnt).arg(sysPara->RFIDPara.PrintInkDots).arg(sysPara->RFIDPara.SOLVRFIDCnt).\ + arg(sysPara->RFIDPara.solventNumber).arg(sysPara->RFIDPara.InkEmptyCnt).arg(sysPara->RFIDPara.SOLVEmptyCnt)); + qDebug()<<"InkRFIDCnt="<RFIDPara.InkRFIDCnt; + qDebug()<<"PrintInkDots="<RFIDPara.PrintInkDots; + qDebug()<<"SOLVRFIDCnt="<RFIDPara.SOLVRFIDCnt; + qDebug()<<"solventNumber="<RFIDPara.solventNumber; + qDebug()<<"InkEmptyCnt="<RFIDPara.InkEmptyCnt; + qDebug()<<"SOLVEmptyCnt="<RFIDPara.SOLVEmptyCnt; + } + else { + if((sysPara->status.selfCheckCnt % 200) == 0) + ui->tabMainWindow->enableReclaimCtrlButton(false); + } + + } + else { + // 开机自检完成的前提下 + if (!sysPara->status.airPushing || ui->tabMainWindow->m_2sFlag) { + autoControlValvePump(); + } + // 检测回收泵模式切换,切换时重置泄漏保护学习状态和软启动状态 + if(m_lastReclaimMode != sysPara->para.flagOfReclaimPumEnable) + { + m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable; + gearPumpRunNormalFlag = false; // 泄漏保护重新学习 + gearPumpRunNormalValue = 0.0f; + + // 仅在压力偏离目标较大时才重置软启动 + // 避免模式抖动导致反复重新爬坡 + int err = (int)sysPara->para.pressure - sysPara->status.PRESSURE; + if(err < -100 || err > 100) { + m_rampDone = false; // 误差大时重新软启动 + m_adjSkip = 0; + m_lastAvgPressure = 0; + m_bufValidCount = 0; + for(int i = 0; i < 20; i++) m_pressureBuf[i] = 0; + m_bufIdx = 0; + } + // 否则保持当前控制状态,只更新maxValue限制 + } + // 压力调节改为100ms调用一次 + if(pulse_100ms && sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag) { + pressureAdj(0); + } + } + } + else{ + static bool flag = 1; + if(delay3s){ + if(flag){ + flag = 0; + LogInfo::setRunStatusText(tr("缺少墨水,喷码机不能正常工作!")); + qDebug()<<"缺少墨水,喷码机不能正常工作!"; + } + ui->tabMainWindow->setRunStatus(tr("缺少墨水,喷码机不能正常工作!")); + } + } + /*----------------------------控制温度--------------------------------------*/ + if(pulse_100ms){ + autoControlHeater(); + sysPara->devOp->readSyncCounterAtZero(); + } + } + sysPara->status.lostCommuFlag = lostCommuFlag; //务必放在后面 + static unsigned int lastProductCnt =0; + static int lastalterMode=-1; + if(sysPara->para.alterPrint.enable && pulse_100ms) + { + sysPara->para.AlterMode=sysPara->status.AlterMode; // 电眼触发交替功能:新增这一行 + if( (sysPara->para.AlterMode!=lastalterMode) + || (lastProductCnt != sysPara->status.productCnt) + ) + { + ui->tabMainWindow->alterDataPrint (sysPara->para.AlterMode); + } + } + else sysPara->para.AlterMode=0; + lastalterMode = sysPara->para.AlterMode; + lastProductCnt = sysPara->status.productCnt; + ui->tabMainWindow->CheckStatus(pulse_300ms); // + /*----------------------------------界面更新状态---------------------------------------*/ +#ifdef __RFID_CARD + static bool flag6 = true; + if(pulse_10s && flag6){ //初始化刷卡模块 + qDebug()<<"初始化刷卡模块"; + flag6 = false; + sysPara->devOp->setICReaderModeFlag = true; + sysPara->devOp->setRFIDReaderWorkMode(); + qDebug()<<"jd.addr: "<tabPrintSetting->dlgInputAddr->jd.addr; + sysPara->devOp->setRFIDReaderKey(ui->tabPrintSetting->dlgInputAddr->jd.addr,1); + sysPara->devOp->setICReaderModeFlag = false; + } + + if(pulse_300ms){ + if(!sysPara->devOp->setICReaderModeFlag) + { + sysPara->devOp->strRevdata =""; + sysPara->devOp->receiveReadRFID_data(); + if(sysPara->devOp->strRevdata.length() > 1) + { + if((sysPara->devOp->strRevdata.left(3) == QString::number(ui->tabPrintSetting->dlgInputAddr->jd.addr).left(3)) + || sysPara->devOp->strRevdata.left(3) == "100") + { + if(sysPara->devOp->strRevdata.at(3) == 'A') + { + bool flag = true; + if(!sysPara->status.flagOfNeedInkCard){ + flag = false; + msgtest->setText(tr("不需要刷墨水卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("不需要刷墨水卡!")); + LogInfo::setRunStatusText(tr("不需要刷墨水卡!")); + } + else if(sysPara->status.statWarn & WARN_STATUS_INK_WARN){ + flag = false; + msgtest->setText(tr("请先添加原厂墨水再刷墨水卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("请先添加原厂墨水再刷墨水卡!")); + LogInfo::setRunStatusText(tr("请先添加原厂墨水再刷墨水卡!")); + } + +#ifdef __RFID_IND + if(flag){ + sysPara->devOp->setRFIDReaderKey(ui->tabPrintSetting->dlgInputAddr->jd.addr,2); + sysPara->devOp->strRevdata =""; + if(sysPara->devOp->readIndBlock()){ + if(sysPara->devOp->strRevdata.left(3) == QString::number(ui->tabPrintSetting->dlgInputAddr->jd.addr).left(3)){ + if(sysPara->devOp->strRevdata.at(3) == 'C'){ + if(sysPara->devOp->comWriteRFID_data(2) == 1)//把卡数据清零 + { + // sysPara->RFIDPara.InkRFIDCnt = 0; + // sysPara->RFIDPara.PrintInkDots = 0; + // sysPara->saveRFIDPara(); + // sysPara->devOp->checkCardIntervalTime = QDateTime::currentDateTime().toTime_t(); + } + } + } + } + else{ + flag = false; + LogInfo::setRunStatusText(tr("Read India Ink Block data failure.")); + } + sysPara->devOp->setRFIDReaderKey(ui->tabPrintSetting->dlgInputAddr->jd.addr,1); + } +#endif + if(flag){ + if(sysPara->devOp->comWriteRFID_data(1) == 1)//把卡数据清零 + { + sysPara->RFIDPara.InkRFIDCnt = 0; + sysPara->RFIDPara.PrintInkDots = 0; + sysPara->saveRFIDPara(); + sysPara->para.RFIDInkWarn = false; + sysPara->para.inkWarnDate = 0; + sysPara->para.inkWarnTime = 0; + sysPara->status.flagOfInkMaxDot = false; + sysPara->status.flagOfNeedInkCard = false; + sysPara->devOp->checkCardIntervalTime = QDateTime::currentDateTime().toTime_t(); + msgtest->setText(tr("刷墨水卡成功!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("刷墨水卡成功!")); + LogInfo::setRunStatusText(tr("刷墨水卡成功!")); + qDebug()<<"刷墨水卡成功!"; + sysPara->saveParaToFile(); + } + } + } + else if(sysPara->devOp->strRevdata.at(3) == 'B') + { + bool flag = true; + if(!sysPara->status.flagOfNeedSolventCard){ + flag = false; + msgtest->setText(tr("不需要刷溶剂卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("不需要刷溶剂卡!")); + LogInfo::setRunStatusText(tr("不需要刷溶剂卡!")); + } + else if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN){ + flag = false; + msgtest->setText(tr("请先添加原厂溶剂再刷溶剂卡!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("请先添加原厂溶剂再刷溶剂卡!")); + LogInfo::setRunStatusText(tr("请先添加原厂溶剂再刷溶剂卡!")); + } + +#ifdef __RFID_IND + if(flag){ + sysPara->devOp->setRFIDReaderKey(ui->tabPrintSetting->dlgInputAddr->jd.addr,2); + sysPara->devOp->strRevdata =""; + if(sysPara->devOp->readIndBlock()){ + if(sysPara->devOp->strRevdata.left(3) == QString::number(ui->tabPrintSetting->dlgInputAddr->jd.addr).left(3)){ + if(sysPara->devOp->strRevdata.at(3) == 'D'){ + if(sysPara->devOp->comWriteRFID_data(2) == 1)//把卡数据清零 + { + // sysPara->RFIDPara.InkRFIDCnt = 0; + // sysPara->RFIDPara.PrintInkDots = 0; + // sysPara->saveRFIDPara(); + // sysPara->devOp->checkCardIntervalTime = QDateTime::currentDateTime().toTime_t(); + } + } + } + } + else{ + flag = false; + LogInfo::setRunStatusText(tr("Read India solvent Block data failure.")); + } + sysPara->devOp->setRFIDReaderKey(ui->tabPrintSetting->dlgInputAddr->jd.addr,1); + } +#endif + if(flag){ + if(sysPara->devOp->comWriteRFID_data(1) == 1)//把卡数据清零 + { + sysPara->RFIDPara.SOLVRFIDCnt = 0; + sysPara->RFIDPara.solventNumber = 0; + sysPara->saveRFIDPara(); + sysPara->para.RFIDSolventWarn = 0; + sysPara->para.solventWarnDate = 0; + sysPara->para.solventWarnTime = 0; + sysPara->para.RFIDSolventWarnMixCnt = 0; + sysPara->status.flagOfSolventMaxNum = false; + sysPara->status.flagOfNeedSolventCard = false; + sysPara->devOp->checkCardIntervalTime = QDateTime::currentDateTime().toTime_t(); + msgtest->setText(tr("刷溶剂卡成功!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("刷溶剂卡成功!")); + LogInfo::setRunStatusText(tr("刷溶剂卡成功!")); + qDebug()<<"刷溶剂卡成功!"; + sysPara->saveParaToFile(); + } + } + } + else + { + msgtest->setText(tr("MAC无效卡!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("MAC无效卡!")); + } + } + else + { + LogInfo::setRunStatusText(tr("card data: %1").arg(sysPara->devOp->strRevdata)); + QString str1 = QString::number(sysPara->devOp->strRevdata.mid(0,2).toInt(0,16)).rightJustified(2,'0'); + QString str2 =QString::number(sysPara->devOp->strRevdata.mid(2,2).toInt(0,16)).rightJustified(2,'0'); + QString str3 = QString::number(sysPara->devOp->strRevdata.mid(4,2).toInt(0,16)).rightJustified(2,'0'); + QString str4 = QString::number(sysPara->devOp->strRevdata.mid(6,2).toInt(0,16)).rightJustified(2,'0'); + QString str5 = QString::number(sysPara->devOp->strRevdata.mid(8,2).toInt(0,16)).rightJustified(2,'0'); + QString str6 =QString::number( sysPara->devOp->strRevdata.mid(10,2).toInt(0,16)).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + QString strShow = tr("无效卡,这张卡已经在%1时使用过").arg(strDateTime); + msgtest->setText(strShow); + msgtest->show(); + LogInfo::setRunStatusText(strShow); + } + } + } + } +#endif + if(pulse_100ms){ + sysPara->devOp->readCalandarDat(); //务必读一下此数据 +#ifdef RANDDEBUG + if(sysPara->status.RandomNum>0) + sysPara->devOp->Read_RanddomFromFpga(); +#endif +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + cnt1GroupCheck();//分段计米 +#endif + QWidget *widget = this->currentWidget(); + //无墨水或溶剂3小时,自动关机 + if(sysPara->status.InkOrSOLVEmptyCnt>MAX_INK_SOLV_EMTYTIME-10) + { + if(!sysPara->status.powerOffAfterInkOrSOLVEmptyAppending){ + sysPara->status.powerOffAfterInkOrSOLVEmptyAppending = 1; + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("墨水或溶剂空,准备关机")); + ui->tabMainWindow->setRunStatus(tr("墨水或溶剂空,准备关机")); + } + } + + static bool read_flag = false; + if(widget == ui->tabMainWindow) { + ui->tabMainWindow->updateSysStatusToUI(); + } + else if(widget == ui->tabTriggerMode){ + ui->tabTriggerMode->updateSysStatusToUI(); + if(sysPara->status.build_dat.builTime ==0) sysPara->devOp->readbuilDat(); + else + { + QString strFPGADate; + if(sysPara->status.build_dat.year!=0xff && sysPara->status.build_dat.month!=0xff && sysPara->status.build_dat.day!=0xff) + { + strFPGADate = QString("(%1-%2-%3)").arg(sysPara->status.build_dat.year).arg(sysPara->status.build_dat.month).arg(sysPara->status.build_dat.day); + } + if(sysPara->status.flagOfNo67FPGA && sysPara->para.flagOfFastMode) + ui->tabTriggerMode->setBuildTime(QString(" No66") + "_" + strFPGADate); + else if(sysPara->status.flagOfNo67FPGA && !sysPara->para.flagOfFastMode) + ui->tabTriggerMode->setBuildTime(QString(" No67") + "_" +strFPGADate); + else + ui->tabTriggerMode->setBuildTime(QString(" No%1").arg(sysPara->status.build_dat.builTime) + "_"+ strFPGADate); + } + } + else if(widget == ui->tabPrintSetting) + { + ui->tabPrintSetting->updateSysStatusToUI(); + if(!read_flag) + { + emit sendPicScene(ui->tabMainWindow->getPicScene()); + } + read_flag = true; + } + else if(widget == ui->tabSystemSetting){ + + ui->tabSystemSetting->updateSysStatusToUI(); + } + else if(widget == ui->tabSystemManage){ + ui->tabSystemManage->updateSysStatusToUI(); + } + else if(widget == ui->tabOtherInfo){ + ui->tabOtherInfo->updateSysStatusToUI(); + } + else if(widget == ui->tabNetworkManager){ + if(!sysPara->status.bLanConfigManual) + { + ui->tabNetworkManager->updateSysStatusToUI(); + } + } + if(widget != ui->tabPrintSetting) + { + read_flag = false; + } + + // 20140306 + static int last_lesslen_warn=0,lesslen_cnt=0; + if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) + { + if(last_lesslen_warn==0) + { + last_lesslen_warn =lesslen_cnt; + if(lesslen_cnt<60)lesslen_cnt +=6; + if(lesslen_cnt>40) sysPara->devOp->resumeFault(); + // HLP:临时解决杨年丰异常警报打印不全的问题 + if(sysPara->para.speedoverPaushPrint) { + ui->tabMainWindow->on_pushButtonPausePrint_pressed();// 2014-03-19 +// emit OnSpeedOver(2);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); + ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); + + } + else { +// emit OnSpeedOver(1);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全!!!")); + ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全!!!")); + } + + } + } + else { last_lesslen_warn=0;lesslen_cnt=30;} + + if(last_lesslen_warn) last_lesslen_warn--; + + } + + if(pulse_100ms){ + detectAndcontrolReclaimTank(); //控制回收槽 + } + + /*---------------------------------处理警告--------------------------------------------*/ + if(pulse_1s){ + if(sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone && gearPumpRunNormalFlag) + { + if((sysPara->status.PRESSURE < (sysPara->para.pressure -8)) || (sysPara->status.PRESSURE > (sysPara->para.pressure +8))) + { + LogInfo::setRunStatusText(tr("压力波动超过设定的5个值.")); + } + } + static bool logFlag1 = true; + if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN && logFlag1){ + logFlag1 = false; + LogInfo::setRunStatusText(tr("溶剂液位报警! %1").arg(sysPara->RFIDPara.solventNumber)); + qDebug()<<"溶剂液位报警! "<RFIDPara.solventNumber; + } +#ifdef __RFID_CARD + /*****************墨水刷卡控制start**********************************************/ + /*墨水刷卡新的控制逻辑*/ + /* 1.任何时候,打印墨点数达到2.3billion之后,提示24小时内刷卡,否则禁止使用机器*/ + /*2.当墨水液位后,持续提示刷卡,24小时后如果还没有刷卡,禁止使用机器*/ + static bool logFlag4 = 1; + static int warnNum1 = 0; + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) + warnNum1 = 0; + if((sysPara->status.statWarn & WARN_STATUS_INK_WARN) || sysPara->para.RFIDInkWarn){ + if(!sysPara->para.RFIDInkWarn){ + if(++warnNum1 >6){ + sysPara->para.RFIDInkWarn = true; + QDateTime curDateTime = QDateTime::currentDateTime(); + QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); + if(sysPara->para.inkWarnDate == 0){ + sysPara->para.inkWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.inkWarnTime = strCurDateTime.mid(6,6).toInt(); + } + sysPara->saveParaToFile(); + } + else{ + LogInfo::setRunStatusText(tr("detect Ink warning cnt: %1").arg(warnNum1)); + qDebug()<<"检测到墨水液位次数:"<status.flagOfNeedInkCard = true; + if(logFlag4){ + logFlag4 = 0; + QString strDate = QString::number(sysPara->para.inkWarnDate); + QString strTime = QString::number(sysPara->para.inkWarnTime); + QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); + QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); + QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); + QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); + QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); + QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + LogInfo::setRunStatusText(tr("ink Warning at: %1").arg(strDateTime)); + qDebug()<<"ink Warning at:"<RFIDPara.PrintInkDots >= MAX_INK_DOTS || sysPara->para.RFIDInkWarn){ + sysPara->status.flagOfNeedInkCard = true; + if(sysPara->RFIDPara.InkRFIDCnt == 0){ + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + } + int timeRemain = (MAX_INK_RFIDTIME - sysPara->RFIDPara.InkRFIDCnt)/60; + if(timeRemain > 60){ + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); + else + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); + } + else if(timeRemain > 0){ + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + else + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + } + if(sysPara->RFIDPara.InkRFIDCnt % 300 == 0) + sysPara->saveRFIDPara(); + if(++sysPara->RFIDPara.InkRFIDCnt >= MAX_INK_RFIDTIME) + sysPara->status.flagOfInkMaxDot = true; + } + + if(sysPara->status.flagOfInkMaxDot){ + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + static bool logFlag2= true; + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS){ + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + if(logFlag2){ + logFlag2 = false; + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + qDebug()<<"打印墨点已达到2.3billion,请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; + } + } + else{ + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + if(logFlag2){ + logFlag2 = false; + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + qDebug()<<"请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; + } + } + } + /*****************墨水刷卡控制end**********************************************/ + + /*****************溶剂刷卡控制start**********************************************/ + /*溶剂刷卡新的控制逻辑*/ + /* 1.任何时候,混合阀打开次数达到360次,提示2小时关机,必须刷卡才能恢复*/ + /*2.溶剂液位报警后,提示刷卡,允许有10次的混合阀打开次数,必须刷卡才能恢复*/ + if(sysPara->RFIDPara.solventNumber >= MAX_SOLV_OPENNUM){ //混合阀打开次数达到360次 + sysPara->status.flagOfNeedSolventCard = true; + if(sysPara->RFIDPara.SOLVRFIDCnt == 0){ + msgtest->setText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); + } + int timeRemain = (MAX_SOLV_RFIDTIME - sysPara->RFIDPara.SOLVRFIDCnt)/60; + if(timeRemain > 0) + ui->tabMainWindow->setRunStatus(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + if(sysPara->RFIDPara.SOLVRFIDCnt % 300 == 0) + sysPara->saveRFIDPara(); + if(++sysPara->RFIDPara.SOLVRFIDCnt >= MAX_SOLV_RFIDTIME) + sysPara->status.flagOfSolventMaxNum = true; + } + + static bool logFlag5 = 1; + static int warnNum2 = 0; + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) + warnNum2 = 0; + if((sysPara->status.statWarn & WARN_STATUS_SOLV_WARN) || sysPara->para.RFIDSolventWarn){ + if(!sysPara->para.RFIDSolventWarn){ + if(++warnNum2 > 6){ + sysPara->para.RFIDSolventWarn = true; + sysPara->para.RFIDSolventWarnMixCnt = 0; + LogInfo::setRunStatusText(tr("请添加原厂溶剂,然后刷溶剂卡!")); + qDebug()<<"请添加原厂溶剂,然后刷溶剂卡,否则将会在打开10次混合阀之后禁用喷码机!"; + QDateTime curDateTime = QDateTime::currentDateTime(); + QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); + if(sysPara->para.solventWarnDate == 0){ + sysPara->para.solventWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.solventWarnTime = strCurDateTime.mid(6,6).toInt(); + } + sysPara->saveParaToFile(); + } + else{ + LogInfo::setRunStatusText(tr("detect solvent warning cnt: %1").arg(warnNum2)); + qDebug()<<"检测到溶剂液位次数:"<status.flagOfNeedSolventCard = true; + ui->tabMainWindow->setRunStatus(tr("请添加原厂溶剂,然后刷溶剂卡!")); + if(logFlag5){ + logFlag5 = 0; + QString strDate = QString::number(sysPara->para.solventWarnDate); + QString strTime = QString::number(sysPara->para.solventWarnTime); + QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); + QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); + QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); + QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); + QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); + QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + LogInfo::setRunStatusText(tr("solvent Warning at: %1").arg(strDateTime)); + qDebug()<<"solvent Warning at:"<para.RFIDSolventWarnMixCnt >= 10) + sysPara->status.flagOfSolventMaxNum = true; + + if(sysPara->status.flagOfSolventMaxNum){ + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + static bool logFlag3 = true; + if(sysPara->para.RFIDSolventWarnMixCnt>=10){ + ui->tabMainWindow->setRunStatus(tr("请刷溶剂卡以恢复机器的正常功能")); + if(logFlag3){ + logFlag3 = false; + msgtest->setText(tr("请刷溶剂卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请刷溶剂卡以恢复机器的正常功能")); + qDebug()<<"溶剂液位报警后已经打开混合阀10次,请刷卡以恢复机器的正常功能"; + } + } + else{ + ui->tabMainWindow->setRunStatus(tr("请刷溶剂卡以恢复机器的正常功能")); + if(logFlag3){ + logFlag3 = false; + msgtest->setText(tr("请刷溶剂卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请刷溶剂卡以恢复机器的正常功能")); + qDebug()<<"已经打开混合阀360次,请刷卡以恢复机器的正常功能"; + } + } + } + /*****************溶剂刷卡控制end**********************************************/ +#endif + static bool resumeFlag = false; + if(lostCommuFlag || ui->tabMainWindow->updatePhaseIndicatorLight() || (sysPara->status.statWarn & (WARN_STATUS_POWER_MON|WARN_STATUS_INK_WARN|WARN_STATUS_SUMP_WARN + |WARN_STATUS_SOLV_WARN|WARN_STATUS_POWER_MON)) || (sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) ||sysPara->status.lastHighVoltageFault) + { //updatePhaseIndicatorLight()务必放前面 + sysPara->status.beeperOnFlag = true; + if(sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) + { + ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!")); + } + if(!resumeFlag) + { + resumeFlag = true; + pulse_4s = 0; + if(!sysPara->status.lastHighVoltageFault) + { + ui->tabMainWindow->onLabelFaultRusumePressed(); + } + } + } + else { + sysPara->status.beeperOnFlag = false; + sysPara->devOp->controlBeeper(false); + if(pulse_4s >= 20) + { + pulse_4s = 0; + resumeFlag = false; + } + } + + if(sysPara->status.beeperOnFlag){ //报警会时有时无 + sysPara->devOp->controlBeeper(!sysPara->devOp->isBeeperEnable()); + } + + if((sysPara->status.statWarn & (WARN_STATUS_POWER_MON)) + ||sysPara->status.lastwarmInkPump||sysPara->status.lastwarmInkPump||sysPara->status.mainInkPumpError + ||sysPara->status.compressPumpError||sysPara->status.lastPhaseFault||sysPara->status.lastRecycleWarn||sysPara->status.lastHighVoltageFault) + { //2013-12-12故障报警灯 杨 + sysPara->status.RedLightOnFlag = true; + + } + else { + sysPara->status.RedLightOnFlag = false; + sysPara->devOp->controlRedLight(false); + //sysPara->devOp->controlRedLight(true); + } + if(sysPara->status.RedLightOnFlag){ //报警会时有时无 + sysPara->devOp->controlRedLight(!sysPara->devOp->isRedLightEnable()); + } + if((sysPara->status.statWarn & (WARN_STATUS_INK_WARN|WARN_STATUS_SOLV_WARN |WARN_STATUS_RECYCLE_FAULT|WARN_STATUS_SUMP_WARN)) + && !sysPara->status.RedLightOnFlag){ + //if(!sysPara->status.RedLightOnFlag){ + sysPara->status.YellowLightOnFlag = true; + } + else { + sysPara->status.YellowLightOnFlag = false; + sysPara->devOp->controlYellowLight(false); + //sysPara->devOp->controlYellowLight(true); + } + if(sysPara->status.YellowLightOnFlag){ //报警会时有时无 + sysPara->devOp->controlYellowLight(!sysPara->devOp->isYellowLightEnable()); + } + + if(sysPara->status.waitHightVolOff>0){ + sysPara->status.waitHightVolOff--; + if(sysPara->status.waitHightVolOff==0){ + sysPara->devOp->highVoltageCtrl(0); + ui->tabMainWindow->setRunStatus(tr("停止打印,自动关闭高压.")); + } + } + + }// 1s + +#ifdef WARNING + static int pre_pressed=0,pre_hvcurrent=0,press_err_cnt=0; + if(pulse_1s) + { + if((pre_pressed > sysPara->status.PRESSURE+70)) + { + if(++press_err_cnt>3) + { + LogInfo::setRunStatusText(tr("压力异常:上次压力值%1,当前压力值%2").arg(pre_pressed).arg(sysPara->status.PRESSURE)); + } + } + else + { + press_err_cnt = 0; + } + pre_pressed = sysPara->status.PRESSURE; + + + } + + if(pulse_100ms) + { + if(pre_hvcurrent>150 && ( sysPara->status.HV_DETOUT> pre_hvcurrent+20) && (sysPara->status.waitHightVolOn==8 || sysPara->status.waitHightVolOff==1) && sysPara->status.isPrinting ) + pre_hvcurrent = sysPara->status.HV_DETOUT; + + if(sysPara->status.waitHightVolOn<8)sysPara->status.waitHightVolOn++; + if(sysPara->status.isPrinting==0) sysPara->status.waitHightVolOn=0; + } +#endif + if(sysPara->devOp->color_flag ==3){ + sysPara->devOp->color_flag = 0; + pulse_30s = 0; + } + else if(pulse_1s && sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone + && (!sysPara->status.statWarn) && !sysPara->status.powerOffAppending){ + if((!sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed <= 2000) + ||(sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed <= sysPara->para.gearPumpSpeedAlarm)) + { + pulse_30s = 0; + } + else{ + pulse_30s++; + if(pulse_30s >= 5){ + if((sysPara->status.gearPumpRunSpeed >= 3000)||(sysPara->devOp->color_flag == 2) + ||(sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed > sysPara->para.gearPumpSpeedAlarm)) + { + sysPara->status.flagOfSpeedAlarm = true; + sysPara->devOp->color_flag = 2; + if(pulse_30s % 500 == 0){ + LogInfo::setRunStatusText(tr("齿轮泵转速过高,请立即停机并联系供应商!")); + qDebug()<<"齿轮泵转速过高,请立即停机并联系供应商!"; + } + ui->tabMainWindow->setRunStatus(tr("齿轮泵转速过高,请立即停机并联系供应商!")); + sysPara->devOp->controlRedLight(true); + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + } + else{ + sysPara->devOp->color_flag = 1; + if(pulse_30s % 500 == 0){ + LogInfo::setRunStatusText(tr("齿轮泵转速过高,请清理过滤器或者检查是否泄露!")); + qDebug()<<"齿轮泵转速过高,请清理过滤器或者检查是否泄露!"; + } + ui->tabMainWindow->setRunStatus(tr("齿轮泵转速过高,请清理过滤器或者检查是否泄露!")); + sysPara->devOp->controlYellowLight(true); + } + } + } + } + else if(sysPara->status.statWarn & 0xFE){ + sysPara->devOp->color_flag = 3; + pulse_30s = 0; + } + } +} + +void InkJetPrinter::autoControlHeater(){ + //100ms + static int tempDly=1830; + if(sysPara->para.heatTime == 0) + sysPara->para.heatTime = 5; + int maxHeatTime = sysPara->para.heatTime * 600; + if(sysPara->para.flagOfContinueHeat) + maxHeatTime = 60* 600; + if(tempDly) tempDly--; + if(tempDly>=1800) + { + if(tempDly==1800) + { + sysPara->status.indoorTemperature = sysPara->status.TEMP_ADIN/4; + sysPara->devOp->pumpValveCtrl(1); + if(sysPara->status.indoorTemperature-35>0) + ui->tabSystemSetting->updateViscosityAdjust((sysPara->status.indoorTemperature-35)); + else + ui->tabSystemSetting->updateViscosityAdjust(0); + } + return; + } + if(sysPara->status.TEMP_ADIN/4 < sysPara->para.temperature && sysPara->status.heaterONTimeCnt < MAX_HEATER_TIME){ + if(tempDly==0) sysPara->status.heaterONTimeCnt ++; + if(!sysPara->devOp->isHearterEnable()) + sysPara->devOp->controlHeater(true); + + if(sysPara->status.heaterONTimeCnt == maxHeatTime) + { + if(sysPara->status.TEMP_ADIN/4 < (sysPara->para.temperature - 2)){ + LogInfo::setRunStatusText(tr("警告:加热器长时间无法达到预期温度,故障或设置错误!")); + ui->tabMainWindow->setRunStatus("加热器长时间无法达到预期温度,故障或设置错误!");//20150105 no check + sysPara->devOp->controlHeater(false); + } + else + sysPara->status.heaterONTimeCnt = 0; + } + } + else if(sysPara->status.TEMP_ADIN/4 >= (sysPara->para.temperature + 2)){ + if(sysPara->status.heaterONTimeCnt < maxHeatTime) + { + sysPara->status.heaterONTimeCnt = 0; + } + if(sysPara->devOp->isHearterEnable()) + sysPara->devOp->controlHeater(false); + } +} + +void InkJetPrinter::cnt1GroupCheck(void) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + static unsigned char lastGroupRunningIndex = 0; + if(sysPara->para.cnt1ByGroupEnalbe) + { + + + sysPara->devOp->ReadCnt1GroupStatus(); + if(lastGroupRunningIndex == sysPara->status.cnt1GroupRunningIndex) + return; + lastGroupRunningIndex = sysPara->status.cnt1GroupRunningIndex; + + emit updateCnt1GroupDisp(1); + } +#endif +} + +void InkJetPrinter::autoControlValvePump(void) + +{ + if(sysPara){ + if(!sysPara->status.isPumpValveControledByHand){ + + + /*---------------------------------供墨阀--------------------------------------------*/ + if(sysPara->status.selfCheckDone) { + autoControlInkValve(); + autoControlCycleValve(); + } + else { + // autoControlInkValveForSelfCheck(); + // autoControlCycleValveForSelfCheck(); + autoControlInkValve(); + + if(sysPara->devOp->isCycleValveOpen()) + sysPara->devOp->controlCycleValve(false); + } + + /*----------------------------------泄压阀-------------------------------------------*/ + //===================================================================================================== + if(sysPara->status.PRESSURE - sysPara->para.pressure > MAX_PRESSURE_RELEASE_DIFF) + sysPara->status.pressureOverFlowCnt ++; + else + sysPara->status.pressureOverFlowCnt = 0; + + if(( + sysPara->status.releaseValveOpenApending || + sysPara->status.pressureOverFlowCnt > 2 + ) //防止干扰和误动作 + && !sysPara->status.releaseValveDelayCnt) + { + if(!sysPara->devOp->isReleaseValveOpen()) + { //泄压阀 + sysPara->devOp->controlReleaseValve(true); + } + sysPara->status.releaseValveDelayCnt = MAX_RELEASE_VALVE_DELAY_CNT; + sysPara->status.releaseValveOpenApending = true; + } + else + { + if(sysPara->devOp->isReleaseValveOpen()) + { // + //sysPara->devOp->controlReleaseValve(false); + } + + if(sysPara->status.releaseValveDelayCnt) + sysPara->status.releaseValveDelayCnt --; + if(sysPara->status.PRESSURE < sysPara->para.pressure) + { + sysPara->status.releaseValveOpenApending = false; + if(sysPara->devOp->isReleaseValveOpen()){ sysPara->devOp->controlReleaseValve(false); + + } + } + } + + /*----------------------------------混合阀-------------------------------------------*/ + + /*备忘内容:主板的型号与软件版本 + `define JETV3 // EP4F15 V3板子 + `define JETV32 // EP3C10 V4板子 + `define JETV23 // V23板子 EP3C25 + */ + + /*-----------------------------------主墨泵------------------------------------------*/ + if(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV3 || PRODUCT_VERSION(sysPara->status.fpgaVersionNum) >= JETV23 ){ + //20170830修改主板硬件版本号,以便与主板硬件版本编号对应, V7主板编号为7 + if(sysPara->status.warm_InkPump){ + if(!sysPara->status.lastwarmInkPump){ + if(!sysPara->para.gearPumpEnable) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!主墨泵故障")); + ui->tabMainWindow->setRunStatus(tr("主墨泵故障!!!")); + sysPara->status.lastwarmInkPump = 1; + } + } + } + } + else + { + if(sysPara->status.SEPTAL_POSITION < (sysPara->para.septalPostion - DIFF_SEPTAL_POSITION)) + sysPara->status.septalPositionOverFlowCnt ++; + else + sysPara->status.septalPositionOverFlowCnt = 0; + if(sysPara->status.septalPositionOverFlowCnt > 2 && !sysPara->status.mainInkPumpError){ //主墨泵 + if(!sysPara->devOp->isMainInkPumpOpen()){ + sysPara->devOp->controlMainInkPump(true); + sysPara->status.mainInkPumpRunTmCnt = 0; + /*备忘内容:主板的型号与软件版本 + `define JETV3 // EP4F15 V3板子 + `define JETV32 // EP3C10 V4板子 + `define JETV23 // V23板子 EP3C25 + */ + /*-----------------------------------老管路的溶剂随主墨泵一起动作---------------------------*/ + if(sysPara->status.selfCheckDone && !sysPara->para.mixValveisNewVersion && PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1){ + if(sysPara->devOp->isMixValveOpen()) + checkMixValveClose(); + else + checkMixValveOpen(); + } + /*--------------------------------------------------------------------------------------*/ + } + else if(sysPara->status.selfCheckDone){ + if(sysPara->status.mainInkPumpRunTmCnt < MAX_MAIN_INK_PUMP_RUN_TIME){ // + sysPara->status.mainInkPumpRunTmCnt ++; + } + else { + if(!sysPara->para.gearPumpEnable) + { + sysPara->status.mainInkPumpError = true; + sysPara->devOp->controlMainInkPump(false); + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!主墨泵故障")); + ui->tabMainWindow->setRunStatus(tr("主墨泵故障!!!")); + } + } + } + } + else if(sysPara->status.SEPTAL_POSITION > sysPara->para.septalPostion){ + if(sysPara->devOp->isMainInkPumpOpen()) + sysPara->devOp->controlMainInkPump(false); + } + } + /*-----------------------------------压缩机------------------------------------------*/ + + if((sysPara->para.pressure - sysPara->status.PRESSURE > MAX_PRESSURE_DIFF) && !sysPara->status.compressPumpError){ //压缩机 + if(!sysPara->devOp->isCompressPumpOpen()){ + sysPara->devOp->controlCompressPump(true); + sysPara->status.compressPumpRunTmCnt = 0; + } + else if(sysPara->status.selfCheckDone){ + if(sysPara->status.compressPumpRunTmCnt < MAX_COMPRESS_PUMP_RUN_TIME){ //如果长时间开压缩机,考虑设备故障 + sysPara->status.compressPumpRunTmCnt ++; + } + else { + sysPara->status.compressPumpError = true; + sysPara->devOp->controlCompressPump(false); + if(!sysPara->para.gearPumpEnable) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!压缩机故障")); + ui->tabMainWindow->setRunStatus(tr("压缩机故障!!!")); + } + + } + } + } + else if(sysPara->para.pressure <= sysPara->status.PRESSURE){ //压力到达预期的压力 + if(sysPara->devOp->isCompressPumpOpen()) + sysPara->devOp->controlCompressPump(false); + } + + /*------------------------------------粘度泵,混合阀-----------------------------------------*/ + if(!sysPara->status.selfCheckDone){ +#ifdef __AIR_RELEASE_OLD__ + // 开机自检过程, 粘度泵跟随循环阀动作 + if ((sysPara->devOp->isCycleValveOpen() ^ sysPara->devOp->isViscosityPumpOpen()) && !sysPara->status.ink_Ctrl) { + sysPara->devOp->controlViscosityPump(sysPara->devOp->isCycleValveOpen()); + } +#endif + } + /*-----------------------------每30s打开一次粘度泵以及相关处理--------------------------------------*/ + else { + static bool hasDetectedBellow = false; // 检测到下位灯 + static bool hasDetectedTop = false; // 检测到上位灯 + static int viscosity_low = 0; //统计粘度连续偏低10%次数 + static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数 + static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数 + static bool flag = 0; + + if(sysPara->status.cycleValveOpenCntAfterSWintOff) { //关闭墨线的时候要提前开粘度泵 + sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100; + } + ++sysPara->status.viscosityDelayCnt; + int mixer_open_threshold = (105*sysPara->para.viscosity)/100; + int viscosity_faulty_threshold =(113*sysPara->para.viscosity)/100; + if(sysPara->status.viscosityDelayCnt >= sysPara->para.viscosityPumpInterval*100 && flag == 0) + { + flag=1; + if (!sysPara->devOp->isViscosityPumpOpen()) + { + sysPara->devOp->controlViscosityPump(true); + viscosity_timer->start(10000); + qDebug()<<"粘度: "<status.viscosity); + } + if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold)) + { + sysPara->status.viscosityFault = 0; + viscosity_low=0; + Mixing_valve_open = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100) + { + viscosity_low++; + viscosity_faulty_num = 0; + Mixing_valve_open = 0; + } + if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold) + { + Mixing_valve_open++; + viscosity_low = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity > viscosity_faulty_threshold){ + Mixing_valve_open++; + viscosity_faulty_num++; + viscosity_low = 0; + } + + if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { // + sysPara->devOp->controlMixValve(true); + sysPara->RFIDPara.solventNumber++; + sysPara->saveRFIDPara(); + if(sysPara->para.RFIDSolventWarn){ + sysPara->para.RFIDSolventWarnMixCnt++; + LogInfo::setRunStatusText(tr("RFIDSolventWarnMixCnt = %1").arg(sysPara->para.RFIDSolventWarnMixCnt)); + qDebug()<<"RFIDSolventWarnMixCnt ="<para.RFIDSolventWarnMixCnt; + } + Mixing_valve_open = 0; + LogInfo::setRunStatusText(tr("添加溶剂%1: %2").arg(sysPara->RFIDPara.solventNumber).arg(sysPara->status.viscosity)); + QString str = QString("添加溶剂%1: %2").arg(sysPara->RFIDPara.solventNumber).arg(sysPara->status.viscosity); + qDebug()<= 60) + { + LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度值偏低"; + sysPara->status.viscosityFault = 2; + } + if(viscosity_faulty_num >= 5) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度偏大故障"; + sysPara->status.viscosityFault = 1; + } + + } + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1) + { + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); + } + } + + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1) + { + if (sysPara->devOp->isViscosityPumpOpen()) { + sysPara->devOp->controlViscosityPump(false); + } + sysPara->status.viscosityDelayCnt = 0; + flag=0; + } + + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位 + viscosity_timer->stop(); + } + + if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) { + static int detectBelow = 0; + if (++detectBelow%400 == 0) { + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY) + { + if(sysPara->status.rWarnViscoReady>=15){ + sysPara->status.viscosityFault = 1; + sysPara->status.viscosity=0; + qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity); + hasDetectedBellow = true; + } + else sysPara->status.rWarnViscoReady++; + } + else { + sysPara->status.rWarnViscoReady = 0; + sysPara->status.viscosityFault = 0; + } + } + } + if(hasDetectedBellow && hasDetectedTop) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀 + } + } + if(sysPara->status.viscosityFault==0) + { + hasDetectedBellow = false; + hasDetectedTop = false; + } + } + + /*-----------------------------------回收泵------------------------------------------*/ + + if(!sysPara->status.autoCtlReclaimAfterSWintOff) + { + if(!sysPara->devOp->isReclaimPumpOpen() ){ //回收泵 + sysPara->status.reclaimPumpFullSpeedCnt = 0; + sysPara->devOp->controlReclaimPump(true,true); //先全速,后降速 + } + else if(sysPara->status.reclaimPumpFullSpeedCnt <= RECLAIM_PUMP_FULL_SPEED_CNT){ + sysPara->status.reclaimPumpFullSpeedCnt ++; + if(sysPara->status.reclaimPumpFullSpeedCnt == RECLAIM_PUMP_FULL_SPEED_CNT){ //降速 + sysPara->devOp->controlReclaimPump(true,false); + } + } + } + /*-----------------------------------------------------------------------------*/ + } + } +} +void InkJetPrinter::autoControlInkValve() +{ + bool enableFlag = ((sysPara->status.statWarn & WARN_STATUS_INK_SWINT) + || (sysPara->status.lastRecycleWarn && sysPara->para.RecycleWarnAction) // 2017.8.15版本回收故障关供墨阀问题 + || ( sysPara->status.HVFaultCloseEn ) //高压故障关闭墨线 + )?false:true; //墨线开关 + + if(enableFlag != sysPara->devOp->isInkValveOpen()){ + if(enableFlag == false) { //关闭供墨阀的顺序 先开循环阀后关闭供墨阀 + //#ifdef __AIR_RELEASE_OLD__ // 旧管路关闭墨线后 开粘度泵和循环阀一段时间 + if (sysPara->status.cycleValveOpenCntAfterSWintOff == 0) { + sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; + } + if (sysPara->status.cycleValveOpenCntAfterSWintOff < 60) { //在准备关闭循环阀的时候关闭供墨阀 + sysPara->devOp->controlInkValve(enableFlag); //关供墨 + sysPara->devOp->controlInkValvePWM(enableFlag); //关供墨 + } + } + else { //开供墨阀 + if(!sysPara->devOp->isReclaimPumpOpen()) //开供墨阀之前要判断回收泵有没有开,没开就提前打开 + { + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + } + if(!ui->tabMainWindow->m_2sFlag) + { + sysPara->devOp->controlInkValve(enableFlag); + sysPara->devOp->controlInkValvePWM(enableFlag); + } + } + } +} + +void InkJetPrinter::autoControlCycleValve() +{ + if(!sysPara->status.selfCheckDone || (sysPara->status.needPowerOffTimerout && sysPara->para.gearPumpEnable)){ + cycleValveRunForSelfCheck(); + if(sysPara->status.needPowerOffTimerout) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); + } + } + } + else { + if(sysPara->status.cycleValveOpenCntAfterSWintOff){ // 开循环阀 + if(!sysPara->devOp->isCycleValveOpen()){ + sysPara->devOp->controlCycleValve(true); + } + sysPara->status.cycleValveOpenCntAfterSWintOff --; + } + else if(sysPara->devOp->isCycleValveOpen()){ // 关循环阀 + sysPara->devOp->controlCycleValve(false); + } + } +} + +void InkJetPrinter::autoControlCycleValveForSelfCheck() +{ + if(sysPara->status.selfCheckCnt < 100 * 10 && !sysPara->devOp->isCycleValveOpen()) { + sysPara->devOp->controlCycleValve(true); + } + else if(sysPara->status.selfCheckCnt >= 100 * 10 && sysPara->devOp->isCycleValveOpen()) { + sysPara->devOp->controlCycleValve(false); + } +} + +//========================== +// 放在10ms的定时器运行,但和粘度泵工作周期一致 +void InkJetPrinter::checkMixValveOpen(){ + //混合阀 + if(sysPara->status.viscosity>40000){ + sysPara->status.viscosityMaxFaultCnt++; + if(sysPara->status.viscosityMaxFaultCnt>5) + { + sysPara->status.viscosityMaxFaultCnt=0; + if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("粘度检测异常,粘度值太大!!!")); + sysPara->status.viscosityFault=1; + } + sysPara->status.viscosity=0; + } + int mixer_open_threshold = MAX_VISICOSITY_RATIO*sysPara->para.viscosity/100; + int mixer_open_threshold_high = (MAX_VISICOSITY_RATIO + 11)*sysPara->para.viscosity/100; + if(sysPara->status.viscosity > mixer_open_threshold) + {// 粘度值高报警: 条件@高于设定值的1.05,时间:120个测量周期 + sysPara->status.visocityValueOverflowNum ++; + if(sysPara->status.visocityValueOverflowNum >= (MAX_VISICOSITY_VALUE_OVERFLOW_NUM/3)){ + if((sysPara->status.viscosity >= mixer_open_threshold_high)//超出太多加得快,否则隔三下,加一下 + || ((sysPara->status.visocityValueOverflowNum % 3) == 0)){ + if(!sysPara->devOp->isMixValveOpen()){ // + sysPara->devOp->controlMixValve(true); + LogInfo::setRunStatusText(tr("混合阀打开2:")+QString::number(sysPara->status.viscosity)); + } + } + } + if(sysPara->status.visocityValueOverflowNum > MAX_ALLOW_VISICOSITY_OVERFLOW_NUM){ + if(sysPara->status.viscosityFault ==0 ) + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")); + + sysPara->status.viscosityFault = 1; + } + } + else if(sysPara->status.viscosity > 90*sysPara->para.viscosity/100){ + // 粘度值正常 + sysPara->status.visocityValueOverflowNum = 0; + sysPara->status.viscosityFault = 0; // 20160922 粘度低报警不能复位问题 + } + else {// 粘度值低报警: 条件@ 低于设定值的0.9,时间:60个测量周期 + sysPara->status.visocityValueOverflowNum ++; + if(sysPara->status.visocityValueOverflowNum > (MAX_ALLOW_VISICOSITY_OVERFLOW_NUM/2)){ + + if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")); + sysPara->status.viscosityFault = 2; + sysPara->status.visocityValueOverflowNum=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM-10; + } + } +} + + +void InkJetPrinter::checkMixValveClose(){ + if(sysPara->devOp->isMixValveOpen()){ // 关闭混合阀 + sysPara->devOp->controlMixValve(false); + } +} + +//在开机自检过程中交替打开和关闭循环阀 +void InkJetPrinter::cycleValveRunForSelfCheck(){ + static int cycleValveOpenCnt = 0; + if (++cycleValveOpenCnt%300 > 150) { + if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 开 + sysPara->devOp->controlCycleValve(true); + } + } + else { + if(sysPara->devOp->isCycleValveOpen()){ //循环阀 关 + sysPara->devOp->controlCycleValve(false); + } + } +} + +void InkJetPrinter::onReclaimTankBlock(){ + if(sysPara){ + ui->tabMainWindow->enableReclaimCtrlButton(true); + sysPara->status.reclaimTankBlockedAppending = true; + if(sysPara->status.powerOffAppending && sysPara->status.powerOffAfterPhaseFaultAppending) + ui->tabMainWindow->checkForPowerOff(); + sysPara->status.powerOffAppending = false; //如果有关机动作,终止 + + } + +} +/* + * + * 控制回收槽 + * + * */ + +void InkJetPrinter::detectAndcontrolReclaimTank(){ + sysPara->status.currReclaimTankPos =10*sysPara->status.curr_reclaimTankTime; + sysPara->status.reclaimTankBlockedAppending =0; + //qDebug()<status.reclaimTankstatus; + + if(sysPara->status.reclaimTankstatus == 0x10) //7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + if(sysPara->devOp->isReclaimTankCloseEnable()) + { + LogInfo::setRunStatusText(tr("电机故障")); + ui->tabMainWindow->setRunStatus(tr("电机故障")); + sysPara->devOp->controlReclaimTankClose(false); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + else { + LogInfo::setRunStatusText(tr("电机故障")); + ui->tabMainWindow->setRunStatus(tr("电机故障!!!")); + sysPara->devOp->controlReclaimTankOpen(false); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + + } + else if(sysPara->status.reclaimTankstatus == 5 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 + sysPara->status.reclainTankReachEnd = true; + /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ + ui->tabMainWindow->setRunStatus(tr("回收槽到头")); + ui->tabMainWindow->enablePrintButton(true); //仅仅在此时能使能打印按钮 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankOpenDone(); + /*回收槽开关时间校正*/ + sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; + ui->tabSystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime ); + } + else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); + emit reclaimTankBlock(); + } + else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); + sysPara->status.reclaimBlockedCnt = 0; + + } + else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankClose(false); //到头,关闭 + /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ + ui->tabMainWindow->setRunStatus(tr("回收槽到头")); + //sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankCloseDone(); + sysPara->status.lastRecycleWarn = 0; + sysPara->status.HVFaultCloseEn=0; + sysPara->status.reclainCloseAppending=false; + sysPara->status.canRunAirPushing = true; //下次开回收槽就执行排气程序 + //emit reclaimTankBlock(); + } + else if(sysPara->status.reclaimTankstatus == 0x12 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 + LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + else // if(sysPara->status.reclaimTankstatus == 7 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); + } +} + +static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable){ + if(enable){ + if(tab->indexOf(page) == -1){ + tab->addTab(page,name); + } + } + else { + int index = tab->indexOf(page); + if(index != -1) + tab->removeTab(index); + } + +} + +static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable,int Pos){ + if(enable){ + if(tab->indexOf(page) == -1){ + tab->insertTab(Pos,page,name); + } + } + else { + int index = tab->indexOf(page); + if(index != -1) + tab->removeTab(index); + } + +} +void InkJetPrinter::onAuthChanged(int auth){ + + controlTabDisplay(this,ui->tabSystemSetting,tr("系统设置"),auth&AUTH_DISPLAY_SYSTEM_SETTING); + controlTabDisplay(this,ui->tabSystemManage,tr("系统管理"),auth&AUTH_DISPLAY_SYSTEM_MANAGE); + controlTabDisplay(this,ui->tabOtherInfo,tr("其他信息"),auth& AUTH_DISPLAY_OTHER_INFO); + controlTabDisplay(this,ui->tabLogInfo,tr("日志信息"),auth&AUTH_DISPLAY_LOG_INFO); + controlTabDisplay(this,ui->tabNetworkManager,tr("网络管理"),auth&AUTH_SUPER_USER1); + controlTabDisplay(this, backwashEditor, tr("反涌流程设置"), (auth & AUTH_ENGINEER) && sysPara->para.enbBackwashOnPowerOn); + + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),auth); + ui->tabPrintSetting->updateAuthorization(auth); + ui->tabSystemSetting->updateAuthorization(auth); + ui->tabNetworkManager->updateAuthorization(auth); +} + +void InkJetPrinter::onBackwashExecutorCreated(PumpValveExecutor *exec) +{ + if(!exec) return; + // check precondition + if(!sysPara->status.isPumpValveControledByHand){ + QMessageBox::warning(this, tr("权限/模式错误"), tr("请先切换到手动控制泵阀模式")); + delete exec; + return; + } + // stop and clean up any existing executor + if(backwashExecutor){ + backwashExecutor->stop(); + // clear will invoke the custom deleter (deleteLater) + backwashExecutor.clear(); + } + // set sysPara so executor can use DevOp + exec->setSysPara(sysPara); + // connect signals from executor to UI + connect(exec, SIGNAL(stageStarted(int)), backwashEditor, SLOT(onExecutorStageStarted(int))); + connect(exec, SIGNAL(stageProgress(int,int)), backwashEditor, SLOT(onExecutorStageProgress(int,int))); + connect(exec, SIGNAL(stageFinished(int)), backwashEditor, SLOT(onExecutorStageFinished(int))); + connect(exec, SIGNAL(finished()), this, SLOT(onBackwashStopRequested())); + connect(exec, SIGNAL(error(QString)), this, SLOT(onBackwashError(QString))); + + // manage lifecycle with QSharedPointer using deleter that calls deleteLater + backwashExecutor = QSharedPointer(exec, deleteLaterDeleter); + // start execution + exec->start(); +} + +void InkJetPrinter::onBackwashStopRequested() +{ + if(backwashExecutor){ + backwashExecutor->stop(); + backwashExecutor.clear(); + } +} + +void InkJetPrinter::onBackwashError(QString msg) +{ + Q_UNUSED(msg); +} + +void InkJetPrinter::onConfigChanged(void){ + + sysPara->loadParaFromFile(); + return; +} + +/* + * 这个方法的主要目的是在切换tab时不要弹出输入法 + * + */ + +void InkJetPrinter::onInkJetPrinterCurrentChanged(int index) +{ + QWidget *w = widget(index); + if(w){ + QWidget *subWidget = w->focusWidget(); + if(subWidget) + subWidget->clearFocus(); + } + //if(index == 3||index == 3) //刷新打印设置这个界面 + { + ui->tabPrintSetting->update(); + } + +} + +void InkJetPrinter::closeEvent(QCloseEvent *event) +{ +#ifdef SYS_LINUX + event->ignore(); +#else + exit(1); +#endif +} +void InkJetPrinter::resizeEvent(QResizeEvent *event){ + + event->ignore(); +} + +void InkJetPrinter::onChangeTab(QString) +{ + this->setCurrentIndex (indexOf( ui->tabPicEdit)); +} +void InkJetPrinter::onchangeEditMode(int) +{ + if(sysPara){ + if(sysPara->para.EditMode == PICFILE) { + insertTab(1,ui->tabPicEdit,tr("信息编辑")); + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),0); + } + else if(sysPara->para.EditMode == TXTFILE|| sysPara->para.EditMode == SCENE){ + controlTabDisplay(this,ui->tabPicEdit,tr("信息编辑"),0); + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),1,1); + } + ui->tabMainWindow->changeEditMode(sysPara->para.EditMode); + } +} + +void InkJetPrinter::OnSpeedOver(int mode) +{ + if(mode==2){ + //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); + msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); + msgtest->show(); + } + else if(mode==1){ + //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全!!!")); + msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全!!!")); + msgtest->show(); + } +} + +void InkJetPrinter::onPrintErrorStatus(QString s,unsigned int res) +{ + if(res==1 || sysPara->status.WorkTimeOut ){ + sysPara->status.WorkTimeOut =1; + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + //emit QMessageBox::warning(NULL,tr("警告"),s); + msgtest->setText(s); + msgtest->show(); + } + else if(res==2) { + //emit QMessageBox::warning(NULL,tr("警告"),s); + msgtest->setText(s); + msgtest->show(); + } + else if(res==3) { sysPara->status.WorkTimeOut =0; } +} +void InkJetPrinter::OnFinished(int event){ + //msgtest->setText(" ");msgtest->show(); + Q_UNUSED(event); + msgtest->hide(); + +} +unsigned char BCDtoHEX(unsigned char BCD) +{ + unsigned char tempData; + + tempData = (BCD >> 4) * 10 + (BCD & 0x0F); + return (tempData); +} +void InkJetPrinter::refreshModbusStatus(void) +{ +#ifdef MODBUS + if (modbus->getModbusStatus() != 1) { + qDebug()<<"refresh get modbus error"; + return; + } + + qint16 fileNameSize = QFileInfo(sysPara->para.lastOpenedFileName).fileName().size(); + if (fileNameSize) { + if (fileNameSize > 100) { + fileNameSize = 100; + } + } + QString str = QFileInfo(sysPara->para.lastOpenedFileName).fileName(); + snprintf((char *)sysPara->modbusStatus.usedFileName, sizeof(sysPara->modbusStatus.usedFileName), "%s",(char *)str.toAscii().constData()); + sysPara->modbusStatus.printStatus = ui->tabMainWindow->getCurrPrintStatus(); + memcpy(&sysPara->modbusStatus.curCalendarAndDate, &sysPara->status.calandar_and_dat, sizeof(sysPara->status.calandar_and_dat)); + + unsigned char tmp[4]; + memcpy(&tmp,&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,4); + tmp[0] = BCDtoHEX(tmp[0]); + tmp[1] = BCDtoHEX(tmp[1]); + tmp[2] = BCDtoHEX(tmp[2]); + tmp[3] = BCDtoHEX(tmp[3]); + //memcpy(&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,&tmp,4); + sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = tmp[3]*1000000 + tmp[2]*10000+ tmp[1]*100 + tmp[0] ; + //sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue).toUInt(0,16); + sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->modbusStatus.curCalendarAndDate.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->modbusStatus.curCalendarAndDate.cnt1End = sysPara->para.cnt1EndValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2End = sysPara->para.cnt2EndValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2Repeat = sysPara->para.cnt2RepeateValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2InitValue = sysPara->para.cnt2StartValue; + sysPara->modbusStatus.productCnt = sysPara->status.productCnt; + + + sysPara->modbusStatus.statWarn = sysPara->status.RedLightOnFlag ; + // 显示正在打印内容的行数和列数 + int wmax = sysPara->status.currPrintRow; + if (sysPara->para.AlterMode) { + wmax = sysPara->status.currAlterPrintRow; + } + sysPara->modbusStatus.mbCurrPrintRow = wmax; + sysPara->modbusStatus.mbCurrPrintCol = sysPara->status.currPrintCol; +#endif +} + +void InkJetPrinter::onModbusWriteCalendar() +{ +#ifdef MODBUS + if (modbus->getModbusStatus() == -1) { + qDebug()<<"get modbus error"; + return; + } + + sysPara->para.cnt1StartValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; + sysPara->para.cnt1EndValue = sysPara->modbusParas.setCalendar.cnt1End; + sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1Repeat; + sysPara->para.cnt1StepValue = sysPara->modbusParas.setCalendar.cnt1Step; + + sysPara->para.cnt2StartValue = sysPara->modbusParas.setCalendar.cnt2InitValue; + sysPara->para.cnt2EndValue = sysPara->modbusParas.setCalendar.cnt2End; + sysPara->para.cnt2StepValue = sysPara->modbusParas.setCalendar.cnt2Repeat; + sysPara->para.cnt2RepeateValue = sysPara->modbusParas.setCalendar.cnt2Step; + + if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x02) { + sysPara->status.cnt2CurrentValueInitDoneFlag = 0; + } + if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x01) { + sysPara->status.cnt1CurrentValueInitDoneFlag = 0; + } + sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; + sysPara->para.cnt2CurrValue = sysPara->modbusParas.setCalendar.cnt2CurrValue; + sysPara->devOp->writeFpgaCalandar(0); + emit updataPara2UI(); +#endif +} + +void InkJetPrinter::close_jd_timer() +{ + jd_timer->stop(); + timer->stop(); +} + +void InkJetPrinter::handlePushButtonStartPressed(bool flag) +{ + pushButtonStartFlag = flag; + + if(flag) + { + PID_init(); + } + sysPara->status.gearPumpRunStopFlag = !flag;//齿轮泵开关 +} + +void InkJetPrinter::handleInitedPID() +{ + PID_init(); +} + +void InkJetPrinter::fpgaDebugWriteByte() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaByteAddrSpinBox->value(); + unsigned char fpgaValue = ui->fpgaByteValueSpinBox->value(); + sysPara->devOp->fpgaWr(fpgaAddr, &fpgaValue, 1); +#endif +} + +void InkJetPrinter::fpgaDebugReadByte() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaByteAddrSpinBox->value(); + unsigned char fpgaValue; + sysPara->devOp->fpgaRd(fpgaAddr, &fpgaValue, 1); + ui->fpgaByteValueSpinBox->setValue(fpgaValue); + +#endif +} + +void InkJetPrinter::fpgaDebugWriteWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaWordAddrSpinBox->value(); + unsigned int fpgaValue = ui->fpgaWorldValueSpinBox->value(); + unsigned char buff[2]; + buff[0] = fpgaValue & 0xFF; + buff[1] = (fpgaValue >> 8) & 0xFF; + sysPara->devOp->fpgaWr(fpgaAddr, buff, 2); +#endif +} + +void InkJetPrinter::fpgaDebugReadWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaWordAddrSpinBox->value(); + unsigned int fpgaValue; + unsigned char buff[2]; + sysPara->devOp->fpgaRd(fpgaAddr, buff, 2); + fpgaValue = buff[1]<<8|buff[0]; + ui->fpgaWorldValueSpinBox->setValue(fpgaValue); +#endif +} + +void InkJetPrinter::fpgaDebugWriteDWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaDWordAddrSpinBox->value(); + unsigned int fpgaValueH = ui->fpgaDWorldValueHSpinBox->value(); + unsigned int fpgaValueL = ui->fpgaDWorldValueLSpinBox->value(); + unsigned char buff[4]; + buff[0] = fpgaValueL & 0xFF; + buff[1] = (fpgaValueL >> 8) & 0xFF; + buff[2] = fpgaValueH & 0xFF; + buff[3] = (fpgaValueH >> 8) & 0xFF; + sysPara->devOp->fpgaWr(fpgaAddr, buff, 4); +#endif +} + +void InkJetPrinter::fpgaDebugReadDWord() +{ +#ifdef __FPGA_DEBUG__ + if(sysPara == NULL) { + return; + } + int fpgaAddr = ui->fpgaDWordAddrSpinBox->value(); + unsigned char buff[4]; + sysPara->devOp->fpgaRd(fpgaAddr, buff, 4); + unsigned int fpgaValueL = buff[1]<<8|buff[0]; + unsigned int fpgaValueH = buff[3]<<8|buff[2]; + ui->fpgaDWorldValueHSpinBox->setValue(fpgaValueH); + ui->fpgaDWorldValueLSpinBox->setValue(fpgaValueL); +#endif +} + +void InkJetPrinter::recievedFile2Save(QString fileName) +{ + //qDebug() << "recieveFile2Save:"<exists(saveName); + if (exist) + { + createfile->remove(saveName); + }//end if + QFile::copy ( sourceName,saveName ); + emit openFile(saveName,false); + //emit startPrint();确认接收到消息立即打印 + //ui->tabMainWindow->getTexteditOption()->onFileOpen(saveName,false); + //ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + } + else { + + } +} + +void InkJetPrinter::viscosity_timerHandler() +{ + qDebug()<<"错误!粘度计故障:检测不到上位灯"; + viscosity_timer->stop(); +} + +void InkJetPrinter::disableTabClick(){ + this->setDisabled(true); + this->setCurrentIndex(0); +} + +void InkJetPrinter::onSystemSettingsAccepted() +{ + int auth = ui->tabPrintSetting->auths(); + onAuthChanged(auth); +} + +void InkJetPrinter::onBackwashResetRequested() +{ + if(!sysPara) { + return; + } + + QVector defaultBackwashStages = PumpvalveStage::defaultBackwashStages(sysPara->para.flagOfReclaimPumEnable); + PumpvalveStage::saveToFile(backwashEditor->processFilePath(), defaultBackwashStages); + backwashEditor->loadFromFile(backwashEditor->processFilePath()); +} + +static int highPressureCnt = 0; +static unsigned int logCnt = 0; +void InkJetPrinter::checkPressureControl(){ //1s + unsigned int alarmPressure = 0; + if(sysPara->para.pressure <= 700) + alarmPressure = 800; + else + alarmPressure = 950; + + if(sysPara->status.PRESSURE > alarmPressure) + highPressureCnt++; + else + highPressureCnt = 0; + + if(highPressureCnt >= 4 && sysPara->status.PRESSURE > 1000){ + QString str = tr("压力过高,请检查管路是否堵塞,然后点击故障恢复按钮"); + showMessage(str); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + sysPara->status.flagOfPressureFault = true; + } +} + +void InkJetPrinter::showMessage(QString str){ + if(logCnt++ % 30 == 0){ + LogInfo::setRunStatusText(str); + qDebug()<devOp->color_flag = 2; + ui->tabMainWindow->setRunStatus(str); +} + +void InkJetPrinter::resetPressureCnt(){ + logCnt = 0; + highPressureCnt = 0; +} + +void InkJetPrinter::pressureAdjustForsystemseeting(){ + pressureAdj(1); +} diff --git a/latest/InkJetPrinter.h b/latest/InkJetPrinter.h new file mode 100644 index 0000000..83826bf --- /dev/null +++ b/latest/InkJetPrinter.h @@ -0,0 +1,179 @@ +/* + * + * + * DIFF_SEPTAL_POSITION 隔膜位置由20改为50的主泵动作时间 + */ +#ifndef INKJETPRINTER_H +#define INKJETPRINTER_H + +#define SPEEDOVER //超速停止 + + +#include +#include +#include +#include +#include "Tftp/filetranseceiver.h" +#include "ParaSettingUI.h" +#include "modbus/modbustcp.h" +#include +#include "dlgshowmsg.h" +#include +#include +#include "serial/serial_port.h" + +namespace Ui { +class InkJetPrinter; +} + +class PumpValveEditor; +class PumpValveExecutor; + +#define MAX_PRESSURE_RELEASE_DIFF 25 +#define MAX_PRESSURE_DIFF 50 +#define MAX_VISICOSITY_RATIO 110 //105% +#define DIFF_SEPTAL_POSITION 50 +#define MAX_VISICOSITY_VALUE_OVERFLOW_NUM 3 //连续超过此值会进行粘度调整 +#define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 + +class PicScene; + +class InkJetPrinter : public QTabWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit InkJetPrinter(QWidget *parent = 0); + ~InkJetPrinter(); + void pressureAdj(int); + FileTranseceiver* fileTransceiv; + FileTranseceiver* tcpTransceiv; + SerialPort *m_serial; +// void processCommands(); +#ifdef MODBUS +// class ModbusSerial *modbus; + class ModbusTcp *modbus; + QThread m_thread; + int SolventNum; +#endif + void sendDataToSerial(QString); + +public slots: + void onchangeEditMode(int); + void onChangeTab(QString); + //void onPrintErrorStatus(QString s); + void onPrintErrorStatus(QString s, unsigned int res); + + void close_jd_timer(); + void handlePushButtonStartPressed(bool); + void handleInitedPID(); + + void onModbusWriteCalendar(); + void resetPressureCnt(); + void pressureAdjustForsystemseeting(); +// void handleSerialData(QString data); + +private: + Ui::InkJetPrinter *ui; + DlgShowMsg *dlgShowMsg; + //MainWindow *mainWindow; + QTimer* viscosity_timer; + + PumpValveEditor *backwashEditor; + QSharedPointer backwashExecutor; + + QSharedPointer backwashExecutorForSelfCheck; + + bool backwashSelfCheckDone; // 标记开机反涌自检是否完成。 + int backwashSelfCheckProgressSecs; // 记录开机反涌自检的进度时间(秒)。 + + QTimer* timer; + QTimer* jd_timer; + QTime t1; + void autoControlHeater(); + void autoControlValvePump(); + + void autoControlInkValve(); + + void autoControlCycleValve(); + void autoControlCycleValveForSelfCheck(); + + void detectAndcontrolReclaimTank(); + void refreshModbusStatus(void); + void checkPressureControl(); + void showMessage(QString); + +Q_SIGNALS: + +// void updateQRcode(); +// void startPrint(); +// void pausePrint(); +// void stopPrint(); + + void setReclaimTankCurrentPos(int); + void reclaimTankOpenDone(); + void reclaimTankCloseDone(); + void reclaimTankBlock(); //回收槽卡住 + //void changeEditMode(int); + void SpeedOver(int mode); + void updateCnt1GroupDisp(bool); + void updataPara2UI(); + void sendPicScene(PicScene* pPicScene); + void openFile(QString filePath,bool insertFlag); + +private slots: + void OnSpeedOver(int mode); + void jd_timerHandler(); + void timerHandler(); + void onInkJetPrinterCurrentChanged(int index); + void onReclaimTankBlock(); + void onAuthChanged(int auth); + void onBackwashExecutorCreated(class PumpValveExecutor *exec); + void onBackwashStopRequested(); + void onBackwashError(QString msg); + void onConfigChanged(); + void OnFinished(int event); + void DacAdjustStore(); + void fpgaDebugWriteByte(); + void fpgaDebugReadByte(); + void fpgaDebugWriteWord(); + void fpgaDebugReadWord(); + void fpgaDebugWriteDWord(); + void fpgaDebugReadDWord(); + void recievedFile2Save(QString fileName); + void viscosity_timerHandler(); + void disableTabClick(); + + void onSystemSettingsAccepted(); + + void onBackwashResetRequested(); + +private: + + QLabel *t_label; + QMessageBox *msgtest; + void closeEvent(QCloseEvent *event); + void resizeEvent(QResizeEvent *); + void checkMixValveOpen(); + void checkMixValveClose(); + void cycleValveRunForSelfCheck(); + void cnt1GroupCheck(void); + void loadVoltageValue(); + void initSerialPort(); + char jd_res; + bool pushButtonStartFlag; + + unsigned char rWarnViscoReady; + + //压力控制相关状态变量 + bool m_rampDone = false; // 软启动完成标志 + int m_adjSkip = 0; // 节拍计数(闭环500ms周期) + int m_lastAvgPressure = 0; // 上次平均压力(微分项用) + int m_pressureBuf[20] = {}; // 压力滑动平均缓冲(20点=2s) + int m_bufIdx = 0; // 滑动平均写入索引 + int m_bufValidCount = 0; // 缓冲区有效数据点数(0~20) + bool m_lastReclaimMode = false; // 上次 flagOfReclaimPumEnable 状态 + bool m_lastByHand = false; // 上次 isPumpValveControledByHand 状态 +}; + +#endif // INKJETPRINTER_H diff --git a/loginfo.ui b/loginfo.ui new file mode 100644 index 0000000..0d29c84 --- /dev/null +++ b/loginfo.ui @@ -0,0 +1,299 @@ + + + LogInfo + + + + 0 + 0 + 800 + 600 + + + + Qt::StrongFocus + + + Form + + + + + + + + 0 + + + + 当前状态 + + + + + + true + + + + + + + + 240 + 240 + 240 + + + + + + + + + 240 + 240 + 240 + + + + + + + + + 255 + 255 + 255 + + + + + + + + Qt::NoFocus + + + true + + + + + + + + + + 120 + 70 + + + + 清空当前状态 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 历史状态 + + + + + + true + + + + + + + + 240 + 240 + 240 + + + + + + + + + 240 + 240 + 240 + + + + + + + + + 255 + 255 + 255 + + + + + + + + Qt::NoFocus + + + true + + + + + + + + + TextLabel + + + + + + + + 0 + 70 + + + + 删除历史文件 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 70 + + + + 打开历史文件 + + + + + + + + 0 + 70 + + + + 导出日志到U盘 + + + + + + + + + + 版本信息 + + + + + + true + + + + + + + + 240 + 240 + 240 + + + + + + + + + 240 + 240 + 240 + + + + + + + + + 255 + 255 + 255 + + + + + + + + Qt::NoFocus + + + true + + + + + + + + + + + + + + diff --git a/logo_form.cpp b/logo_form.cpp new file mode 100644 index 0000000..1d00112 --- /dev/null +++ b/logo_form.cpp @@ -0,0 +1,30 @@ +#include "logo_form.h" +#include "ui_logo_form.h" +#include "InkJetPrinter.h" + +logo_Form::logo_Form(QWidget *parent) : + QWidget(parent), + ui(new Ui::logo_Form) +{ + ui->setupUi(this); + +#ifdef TURKEY_LOGO + ui->logo_label->setPixmap(QPixmap(QString::fromUtf8(":/image/Turkey_logo.png"))); + + show_timer = new QTimer(this); + connect(show_timer, SIGNAL(timeout()), this, SLOT(logo_timer_fun())); + show_timer->start(5000); +#endif +} + +logo_Form::~logo_Form() +{ + delete ui; +} +extern InkJetPrinter *pInkJectPrinter; + +void logo_Form::logo_timer_fun() +{ + show_timer->stop(); + pInkJectPrinter->show(); +} diff --git a/logo_form.h b/logo_form.h new file mode 100644 index 0000000..c8c8999 --- /dev/null +++ b/logo_form.h @@ -0,0 +1,26 @@ +#ifndef LOGO_FORM_H +#define LOGO_FORM_H + +#include + +namespace Ui { +class logo_Form; +} + +class logo_Form : public QWidget +{ + Q_OBJECT + +public: + + explicit logo_Form(QWidget *parent = 0); + ~logo_Form(); +private slots: + void logo_timer_fun(); +private: + + QTimer *show_timer; + Ui::logo_Form *ui; +}; + +#endif // LOGO_FORM_H diff --git a/logo_form.ui b/logo_form.ui new file mode 100644 index 0000000..8870667 --- /dev/null +++ b/logo_form.ui @@ -0,0 +1,32 @@ + + + logo_Form + + + + 0 + 0 + 640 + 480 + + + + Form + + + + + 0 + 0 + 640 + 480 + + + + + + + + + + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..c97fd2f --- /dev/null +++ b/main.cpp @@ -0,0 +1,278 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "InkJetPrinter.h" +#include "logo_form.h" +#include "MyInputMethod.h" +#include "mainwindow.h" +#include +#include +#include +#include +#include "myinclude.h" +#include "Public.h" +#include "Log/filelogger.h" +//#define SYS_CN + +/* +1. WenQuanYiMH_12_50.qpf2 是由 Zfull-GB_12_50(Zpix.ttf)在PCMAKEQPF软件下生成的,它包含较完整的字体库 nono 20160302 + +2. 基于WenQuanYiCN编越南语,中文通用字库 +3. 基于WenQuanYiMicroHei编 普通版本字库 +#git commit -am "测试提交新数据" +#git push +#git clone xiongnie@119.23.201.56:/var/repo_dir/QtUI.git +#git pull xiongnie@119.23.201.56:/var/repo_dir/QtUI.git +#git remote add origin git@github.com:username/Hello-World.git +#git push origin master 将本地项目给提交到服务器中 +#----------------------------------------------------------- +#git pull 本地与服务器端同步 +#----------------------------------------------------------------- +#git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。 +#git push origin serverfix:awesomebranch + + +git remote add origin xiongnie@119.23.201.56:/var/repo_dir/QRUIV53.git + + +### + + + */ + + + +InkJetPrinter *pInkJectPrinter; +MyInputMethod *myInputMethod; + +//#include +//#include +//#include + +int main(int argc, char *argv[]) +{ +// QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +// QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);//控制图片缩放质量 +// // Open a display. +// Display *d = XOpenDisplay(NULL); +// // Get width and height of the display +// //int windowHeight = XDisplayHeight (d, 0); +// qreal windowWidth = XDisplayWidth(d, 0); +// qreal windowWidth = 800; +// qreal scale = windowWidth / 640; +// //qputenv("QT_SCALE_FACTOR", QString::number(scale).toLatin1()); + //qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1.5"); +// qputenv("QT_SCALE_FACTOR", QByteArray("1.25")); +// qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); +// QByteArray byte = qgetenv("QT_SCALE_FACTOR"); +// qDebug() << "qgutenv byte=============================" << byte; +// QByteArray byteModule = qgetenv("QT_IM_MODULE"); +// qDebug() << "qgutenv byteModule=============================" << byteModule; +// QLocale::setDefault(QLocale(QLocale::Vietnamese, QLocale::VietNam)); + + QApplication a(argc, argv,QApplication::GuiServer); +// QDesktopWidget *desktop = a.desktop(); +// int screen_number = desktop->primaryScreen(); +// QRect rect = desktop->screenGeometry(screen_number); + //qDebug() << QStyleFactory::keys(); + QApplication::setStyle(QStyleFactory::create("Windows")); + QFont f = a.font(); + QString langurageFile; + QFile file(SYS_ROOT_DIR"UseEn"); + + if(file.exists()) + { +#ifdef VNLG + QString langurageType = Public::ReadLanguageName();//"";// + //qDebug()<<"La:"<load(langurageFile)==false){ + translator->deleteLater(); + QMessageBox::critical(0,("错误"),("无法加载中文翻译文件") + langurageFile); + } + else { + QApplication::installTranslator(translator); + } + + +#ifndef Q_OS_WIN32 + //QWSServer::setCurrentInputMethod(new MyInputMethod()); + myInputMethod = new MyInputMethod(); + QWSServer::setCurrentInputMethod(myInputMethod); +#endif + + // 配置日志 + //QString configFileName = QCoreApplication::applicationDirPath() + "/config.ini"; + QString configFileName = ":/conf/config.ini"; + QSettings* logSettings = new QSettings(configFileName, QSettings::IniFormat, &a); + logSettings->beginGroup("logging"); + FileLogger* logger = new FileLogger(logSettings, 10000, &a); + logger->installMsgHandler(); + + InkJetPrinter w; +#ifndef Q_OS_WIN32 + w.setWindowTitle(("比洋喷码")); +#if 0 + w.setStyleSheet("QTabBar::tab {height:70px;} QTabBar::scroller{ width:40px;} QRadioButton::indicator{ width: 50px; height: 50px; } \ + QCheckBox::indicator { width: 18px; height: 18px; } "); +#endif + //edit@11-28 + const QString style_main2="QTabBar::tab {height:65px;border-top-left-radius: 6px;border-top-right-radius: 6px;padding-left: 11px;padding-right: 11px;border: 2px solid #C4C4C3;} \ + QTabBar::tab:selected {background-color: rgb(255, 170, 127);height:70px;}\ + QTabBar::tab:!selected {margin-top: 5px;}\ + QTabBar::scroller{ width:40px;} \ + QRadioButton::indicator{ width: 50px; height: 50px; } \ + QCheckBox::indicator { width: 18px; height: 18px; } "; + w.setStyleSheet(style_main2); + + w.showFullScreen(); /*保证全屏,看不到系统标题*/ +#endif + + + w.show(); + + pInkJectPrinter = &w; + + return a.exec(); +} + diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..b361d6b --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,5460 @@ +/* +* +* +*2013-9-15高压报警停止充电 +*/ + +/* + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否初始化产品计数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + updateTotalCnt(0); + sysPara->devOp->clearProductCnt(1); + sysPara->saveParaToFile(); + + } + */ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "InputMethod.h" +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef Q_OS_WIN +#include +#else +#define reboot(a,...) (0 == 0) +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "DevOp.h" +#include "Public.h" +#include "LogInfo.h" +#include "QBarCode.h" +#include "scene/picscene.h" +#include +#include "MyInputMethod.h" +#include +#include "VerBVersion.h" +//#define SAVEWHENPREVIEW // 预览时先保存 +#include +#include + +#define MDTFLAG 0xff00FF10 +#define QRFLAG 0xff00FF20 +#define BARFLAG 0xff00FF30 +#define MMVAR 1 +#define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 + +#define EXPIRY_VARI_RECONISE 0x0000FF +#define RECICLARNUMBER 22 + +static int weekendPowerOff = 0; +unsigned char test_flag,open_close; +extern QFile PrintDatafile; +extern MyInputMethod *myInputMethod; + +MainWindow::MainWindow(QWidget *parent) : + QWidget(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); //不使用布局 + + //ui->textEdit->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); + QFont font = ui->textEdit->font(); + font.setPixelSize(12); + ui->textEdit->setFont(font); + previewFlag =0; + ui->textEditOption->bindText(ui->textEdit); + ui->textEditOption->bindPicWidget(ui->PicWidgetDisp); + ui->textEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); + //ui->textEditOption->setl +#ifdef _2DCODE_ + dlgqrcode = new dlgQrCode();//ui->textEditOption->dlgQrcode ;// + //barcode = ui->textEditOption->barcode;//new QBarCode(); + barcode = new QBarCode(); +#endif + //ui->pushButtonEditBarCode->hide(); + + connect(ui->labelFaultResume,SIGNAL(pressed()),this,SLOT(onLabelFaultRusumePressed())); + #ifdef EnableArabic + connect(ui->textEditOption,SIGNAL(fontSizeArabicSelect(bool)),myInputMethod,SLOT(getArabicFlag(bool))); + connect(myInputMethod,SIGNAL(selectArabicPage(int)),ui->textEditOption,SLOT(changeArabicPage(int))); + connect(myInputMethod,SIGNAL(switchEnglishOrArabic(bool)),ui->textEditOption,SLOT(swithchEnglisOrArabic(bool))); + connect(ui->textEditOption,SIGNAL(EnableSwitchArabicFlag(bool)),myInputMethod,SLOT(switchArabicFlag(bool))); +#endif + connect(ui->labelStatusHighVoltageFault,SIGNAL(pressed()),this,SLOT(onStatusHighVoltageFault())); + connect(ui->labelStatusInkLeak,SIGNAL(pressed()),this,SLOT(onStatusInkLeak())); + connect(ui->labelStatusInkSwint,SIGNAL(pressed()),this,SLOT(onStatusInkSwint())); + connect(ui->labelStatusInkWaterLevel,SIGNAL(pressed()),this,SLOT(onStatusInkWaterLevel())); + connect(ui->labelStatusRecycleWarn,SIGNAL(pressed()),this,SLOT(onStatusRecycleWarn())); + connect(ui->labelStatusSolvLevelWarn,SIGNAL(pressed()),this,SLOT(onStatusSolvLevelWarn())); + connect(ui->labelStatusViscosityWarn,SIGNAL(pressed()),this,SLOT(onStatusViscosityWarn())); + connect(ui->labelStatusChargefault,SIGNAL(pressed()),this,SLOT(onStatusChargefault())); + //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); labelStatusChargefault + //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); + + + connect(ui->textEdit,SIGNAL(textChanged ()),this,SLOT(ontextEdittextChanged())); + connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(onTextEditCursorPositionChanged())); + connect(ui->textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), ui->textEditOption, SLOT(currentCharFormatChanged(QTextCharFormat))); + + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(displayTime())); + timer->start(1000); + airPushTimer = new QTimer(this); + connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess())); + timerShowItem = new QTimer(this); + connect(timerShowItem, SIGNAL(timeout()), this, SLOT(onShowAndHideItem())); + + printintFlag = false; + startPrintingFlag = false; + + connect(ui->labelProductCnt,SIGNAL(pressed()),this,SLOT(onLabelProductCntPressed())); + connect(ui->labelTotalProductCnt,SIGNAL(pressed()),this,SLOT(onLabelTotalProductCntPressed())); + connect(ui->textEditOption->getPushButtonPreview(),SIGNAL(pressed()),this,SLOT(onPushButtonPreviewPressed())); +#ifndef EnableArabic + connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); +#else + connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(setOpenFileName(QString))); +#endif + connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); + connect(ui->textEditOption,SIGNAL(switchBengalLanguage(bool)),myInputMethod,SLOT(switchBangalInput(bool))); + + connect(ui->textEditOption,SIGNAL(PicfileNameOpen(QString,bool)),this,SLOT(openPicFIleOpen(QString,bool))); // 由TEXTOPTION界面按键触发 + connect(ui->pushButtonTXTOpen,SIGNAL(clicked()),ui->textEditOption,SLOT( showDlg())); + connect(ui->pushButtonCNTResetNow,SIGNAL(pressed()),this,SLOT(onPushButtonCNTResetNowPressed())); +#ifdef _2DCODE_ + connect(ui->pushButtonEditBarCode,SIGNAL(pressed()),this,SLOT(onEditBarCode())); + connect(ui->pushButtonQREnCode,SIGNAL(pressed()),this,SLOT(onEditQRCode())); + + connect(ui->textEditOption, SIGNAL(fontSizeChange(int)), barcode, SLOT(setFontSize(int))); + connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); + connect(dlgqrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); +#endif + connect(this,SIGNAL(ShowWarnningText(QString,QString)),this,SLOT(ShowWarnningText1(QString,QString))); + + msgtest = new QMessageBox(this); + connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); + + //QFile file(SYS_ROOT_DIR"UseEn"); + if( Public::ReadLanguageName()!="Chinese") + { + ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); + //ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); + ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); + if(Public::ReadLanguageName()=="Thai"){ + ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint3.png")); + ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint3.png")); + } + } + // 立即清零 +#ifdef ENGLISH + ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); + ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); + ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); +#endif + +#ifndef CLEARCNTNOW + ui->pushButtonCNTResetNow->hide(); +#endif + fileChange=true; + pushButtonFlag = true; + + if(sysPara) + { + sysPara->status.FileChangeRestCntFlag=0; + } + + Public::derivePixelSizeFromHeight(12); +#if 1 + pPicScene = new PicScene(this); + //pPicScene->setSceneRect(QRectF(0,0, 3999, MAX_PRINT_ROW_NUM)); + //edit@12-09 + pPicScene->setSceneRect(QRectF(0,0, 3999, 220)); + //ui->fileSceneViewer->pView->setScene((QGraphicsScene *)pPicScene); + ui->graphicsView->setScene(pPicScene); + ui->graphicsView->centerOn(0,0); + + ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit); + ui->senceEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); + //connect(ui->senceEditOption,SIGNAL(addPicTextItem()),this,SLOT(onAddPicTextItem())); + //connect(ui->senceEditOption,SIGNAL(importFile(QString)),this,SLOT(onSceneImport(QString))); + //connect(ui->senceEditOption,SIGNAL(delItem()),this,SLOT(onDeleteItem())); + //connect(ui->senceEditOption,SIGNAL(saveScene(QString)),this,SLOT(onSaveScene(QString))); + //connect(ui->senceEditOption,SIGNAL(openSceneFile(QString)),this,SLOT(onOpenSceneFile(QString))); + connect(ui->senceEditOption,SIGNAL(generateQRCode(QString)),this,SLOT(onGenerateQRCode(QString))); + connect(ui->senceEditOption,SIGNAL(previewScene()),this,SLOT(onPreviewScene())); + //connect(ui->senceEditOption,SIGNAL(editItem()),this,SLOT(onEditItem())); + //connect(ui->textEditOption,SIGNAL(scenefileOpen(QString)),this,SLOT(onOpenSceneFile(QString))); + connect(ui->textEditOption,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); + connect(this,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); + connect(ui->senceEditOption,SIGNAL(editItemMode()),ui->textEditOption,SLOT(onEditItemMode())); + //connect(ui->textEditOption,SIGNAL(editItemDone()),this,SLOT(onEditItemDone())); + connect(ui->textEditOption,SIGNAL(editItemDone()),ui->senceEditOption,SLOT(onEditItemDone())); + + connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); + connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); + + //edit@12-14 + // connect(ui->scrollArea->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(update_scroll())); + //ui->graphicsView->setSizePolicy(QSizePolicy::Fixed); +#endif + + // ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp"); + +#if 0 + qDebug()<<"edit size heigh:"<stackedWidgetText->size().height()<<"edit size width:"<stackedWidgetText->size().width(); + qDebug()<<"edit geometry bottomLeft:"<stackedWidgetText->geometry().bottomLeft(); + qDebug()<<"edit geometry height:"<stackedWidgetText->geometry().height(); + qDebug()<<"edit geometry x:"<stackedWidgetText->geometry().x(); + qDebug()<<"edit geometry y:"<stackedWidgetText->mapToGlobal(ui->stackedWidgetText->pos()); +#endif + m_2sFlag = false; + moveToThread(&ShowThead); + //connect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem()),Qt::QueuedConnection); + ShowThead.start(); + ui->pushButtonStart->setHidden(true);//屏蔽紧急停机按钮 + // if(PrintDatafile.exists()) PrintDatafile.remove(); + // if(!PrintDatafile.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 + // //QMessageBox::warning(0,"警告",QString("无法打开文件:mac.bin") ); + // } + + timeoutOperate_launch=0; + timerPrinter_operate_launch=new QTimer(this); +} + +MainWindow::~MainWindow() +{ + disconnect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem())); + if (ShowThead.isRunning()) { + ShowThead.quit(); + ShowThead.wait(); + } + + delete ui; + delete timer; + delete pPicScene; + +} + +/*显示当前系统时间 */ +void MainWindow::displayTime() +{ + if(sysPara){ + // sysPara->status.productCnt = 123; + // sysPara->status.lastProductCnt = sysPara->status.productCnt ; //这会让产品计数显示出来 + // qDebug()<<"sysPara->status.productCnt="<status.productCnt; +#ifdef BOART_TEMP_DEVICE + if(1) + { + if(sysPara->devOp->GetTemp(BOART_TEMP_DEVICE, (quint8 *)&sysPara->status.boardTemp) !=-1) + { + ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.boardTemp)+"°C"); // 主板温度 + } + } + else +#endif + { + ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.AD_FIXED/4)+"°C"); // 机箱温度 + } + ui->labDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); + //UpdateDateTimeQRCode(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); + // ui->pushButtonCNTResetNow->setEnabled( sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME ); + + static bool CleanUPEn=1,preCleanUP=0; + if(!sysPara->para.isCheckMagnet) + { + CleanUPEn = (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT); + } + else + { + CleanUPEn = (sysPara->status.currReclaimTankPos<70) ; + } + if(CleanUPEn != preCleanUP){ + ui->pushButtonCleanUP->setEnabled(CleanUPEn); + } + preCleanUP=CleanUPEn; + + //static int delayCount2 = 0; + if(m_2sFlag) + { + //++delayCount2; + //if(delayCount2 %10 ==5) + { + + sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关 + sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); //控制供墨阀开关 + //setRunStatus(tr("我已关闭供墨阀")); + } + + } + + if(sysPara->status.boardTemp >= sysPara->para.FanTemperature) + { + //sysPara->devOp->controlFan1(1); + //sysPara->devOp->controlFan2(1); + } + else + { + //sysPara->devOp->controlFan1(0); + //sysPara->devOp->controlFan2(0); + } + ///////自动设置喷头温度 + // if(sysPara->status.boardTemp <= 20) + // { + // sysPara->para.temperature = 38; + // } + // else if(sysPara->status.boardTemp > 20 && sysPara->status.boardTemp <26 ) + // { + // sysPara->para.temperature = 35; + // } + // else if(sysPara->status.boardTemp >= 26 && sysPara->status.boardTemp < 30 ) + // { + // sysPara->para.temperature = 32; + // } + // else if(sysPara->status.boardTemp >= 30 ) + // { + // sysPara->para.temperature = 20; + // } + QFile file("/dev/input/event1"); + if(!file.exists()) + { + QWSServer::setCursorVisible(false); + } + else + { + QWSServer::setCursorVisible(true); + } + } +} + +void MainWindow::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; + ui->textEditOption->bindSysPara(sysPara); + ui->widgetPrintTextDisplay->bindSysPara(sysPara); +#ifdef _2DCODE_ + barcode->bindSysPara(sysPara); + dlgqrcode->setSysPara(sysPara); + dlgqrcode->barCodeFlag = this->sysPara->para.qrOption.barCodeFlag; + dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); +#endif +#ifdef PICSCENE + ui->senceEditOption->bindSysPara(sysPara); +#endif +} + +void MainWindow::updateSysParaToUI(){ + if(sysPara){ + //nothing here + ui->textEditOption->updateSysParaToUI(); + } +} + +void MainWindow::applyUIPara(){ + if(sysPara){ + + } +} + +void MainWindow::CheckStatus(int Flag){ + if(sysPara){ + static unsigned int lastProductCnt=0; + int AutoCount=0; + int bcAutoCount=0; + static int lastMinutes = 0; + //QDate curDate=QDate::currentDate(); + int currMinutes = QDateTime::currentDateTime().time().minute(); + int usbDate = sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum ||sysPara->status.classVariNum; + if(usbDate) + { + //qDebug()<<"CheckStatus"; + bool needSendPrintData=false; + //if(sysPara->print.CurDateVar.endRowPos && (sysPara->print.CurDateVar.day != curDate.day())) + if (sysPara->status.ExpiryVarNum && (lastMinutes != currMinutes)) + { + ExpiryDotUpdate(1); + needSendPrintData = true; + } + //if(sysPara->print.ExpiryVar.endRowPos && (sysPara->para.ExpiryDay != r_ExpiryDay)) + if(sysPara->status.CurrDateVariNum && (lastMinutes != currMinutes)) + { + std::cout<<"CurrDateVariNum:"<status.CurrDateVariNum<(sysPara->print.CurDateVar.splitMode)<status.classVariNum && (lastMinutes != currMinutes)) + { + ExpiryDotUpdate(3); + needSendPrintData = true; + } + lastMinutes = currMinutes; + //sysPara->print.CurDateVar.day = curDate.day(); + if(needSendPrintData) + { + sysPara->status.ExpiryDispUpdate=10; + SendPrintDataToFpga(0); + } + //if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) + // ui->widgetPrintTextDisplay->update(); + //sysPara->status.ExpiryDispUpdate=1; + + } + if(sysPara->status.productCnt != lastProductCnt) + //if( sysPara->para.calandar_and_dat.cnt1CurrValue != sysPara->para.qrOption.counter ) + { + lastProductCnt = sysPara->status.productCnt; + //sysPara->para.qrOption.counter = sysPara->status.productCnt ; + //sysPara->para.qrOption.counter ++;//= sysPara->para.calandar_and_dat.cnt1CurrValue; + sysPara->para.qrOption.counter +=sysPara->para.qrOption.CntInc; + //if(sysPara->para.qrOption.counter% 60) sysPara->para.qrOption.counter+=40; + + AutoCount = (sysPara->status.QRvariNum?1:0); + //bcAutoCount = (sysPara->status.BCvariNum?1:0); +#ifdef MYARMTEST + qDebug()<<"CheckStatus:"<para.qrOption.counter<status.productCnt<para.qrOption.counter <status.QRvariNum; + } + //else qDebug()<<"P:"<status.productCnt; + + if( sysPara->para.qrOption.RecFromHost || AutoCount ) + { + sysPara->para.qrOption.RecFromHost=0; + sysPara->para.qrOption.type = sysPara->print.QRvars[0].type; + sysPara->para.qrOption.height = sysPara->print.QRvars[0].height; + sysPara->para.qrOption.width = sysPara->print.QRvars[0].width; + + if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) + { + onUpdateDispQRCode(1); // 更新二维码显示 + //qDebug()<<"PN:"<status.LightUpCnt ++ ; + if((sysPara->status.LightUpCnt%3) == 0){ + if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag){ + //if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag){ //打印状态指示灯 + sysPara->status.GreenLightOnFlag = true; + } + else{ + sysPara->status.GreenLightOnFlag = false; + sysPara->devOp->controlGreenLight(false); + //sysPara->devOp->controlGreenLight(true); + } + if(sysPara->status.GreenLightOnFlag){ //报警会时有时无 + if(!sysPara->para.isCheckPrintLight) + { + sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); + } + else + { + sysPara->devOp->controlGreenLight(true); + } + } + } + Test_Start_Stop(); + if(sysPara->status.circleProductCnt && (sysPara->status.productCnt >= sysPara->para.cnt1EndValue)) + { + if(sysPara) + { + sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + } + } + } + + } +} + + +void MainWindow::RefreshStatusLight(){ + if(sysPara){ + +#ifdef DEBUG1 + sysPara->status.statWarn =0| WARN_STATUS_HDINT;//sysPara->status.statWarn; + enablePrintButton(true); +#endif +#ifndef SYS_LINUX + sysPara->status.statWarn =0;//sysPara->status.statWarn; + enablePrintButton(true); +#endif + + + //ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT)); // sysPara->status.currReclaimTankPos +#ifdef __HV_FOR_WANG_DEBUG__ /* 盖上喷头盖,启动高压 */ + static int hdint = 0; + static int reclainTankReachEnd = 0; + //int curr_swit = !(sysPara->status.statWarn & WARN_STATUS_INK_SWINT);// curr_swit墨线开关 1->开, 0->关 + if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关 + if (sysPara->status.reclainTankReachEnd) { +#if 0 + int actHvAmp = sysPara->para.HighVoltageAmplitude; + float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73; + if(sysPara->para.HighVoltageAmplitude == 0) { + tempHvAmp = 0; + } + else if(sysPara->para.HighVoltageAmplitude == 1) { + tempHvAmp = 63.5; + } + else { + tempHvAmp = 63.5 + (sysPara->para.HighVoltageAmplitude - 1) * 0.51; + } + sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp; +#endif + sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); +#if 0 + sysPara->para.HighVoltageAmplitude = actHvAmp; +#endif + } + } + hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT); + + if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底 + if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态 +#if 0 + int actHvAmp = sysPara->para.HighVoltageAmplitude; + float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73; + if(sysPara->para.HighVoltageAmplitude == 0) { + tempHvAmp = 0; + } + else if(sysPara->para.HighVoltageAmplitude == 1) { + tempHvAmp = 63.5; + } + else { + tempHvAmp = 63.5 + (sysPara->para.HighVoltageAmplitude - 1) * 0.51; + } + sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp; +#endif + sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); +#if 0 + sysPara->para.HighVoltageAmplitude = actHvAmp; +#endif + } + } + reclainTankReachEnd = sysPara->status.reclainTankReachEnd; +#endif + + if(sysPara->status.lastStatWarn != sysPara->status.statWarn){ + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关 + ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + } + + if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){//喷头盖 + ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + + if(printintFlag && startPrintingFlag) + setRunStatus(tr("正在喷印...............")); + } + else { + ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + if(printintFlag && startPrintingFlag) + setRunStatus(tr("喷头盖开, 喷印无法正常进行!!!")); + } + + + if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告 + ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + strTitle = tr("墨水缸满报警"); + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); //关掉混合阀 + } + } + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){ + ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + strTitle = tr("墨水液位报警"); + + + } + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){ + ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + strTitle = tr("溶剂液位报警"); + + } + + if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){ + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + + } + else { + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + + } + + //static int HVfaultCnt=0; + if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ + if(!sysPara->status.lastHighVoltageFault) + { + ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + // HVfaultCnt=0; + //sysPara->status.HVFaultCloseEn=0; + } + else { + ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); +#ifndef DEBUG1 + if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 + on_pushButtonPausePrint_pressed(); + LogInfo::setRunStatusText(tr("高压故障,暂停打印")); + setRunStatus(tr("高压故障,暂停打印")); + + strTitle = tr("高压故障,暂停打印."); + + sysPara->status.lastHighVoltageFault = true; + } + + +#endif + //if(HVfaultCnt<9)HVfaultCnt++; + //else{ + if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn ) + { + //HVfaultCnt++; + // 高压故障关回收槽 + if(sysPara->status.HVFaultCloseEn==0){ + sysPara->status.reclaimTankBlockedAppending=0; + sysPara->status.reclaimCloseCnt=100; + on_pushButtonReclaimTankClose_pressed(); + sysPara->status.reclaimTankBlockedAppending=1; + LogInfo::setRunStatusText(tr("高压故障,关回收槽")); + setRunStatus(tr("高压故障,关回收槽和墨线")); + } + sysPara->status.HVFaultCloseEn=1; + } + //} + } + + } + + + //if(sysPara->status.viscosityDelayCnt) + //ui->label_3->setText( QString::number(sysPara->status.viscosityDelayCnt/100,10) );//labViscoCnt + + /*-----------------------------------------------------------------------------------*/ + sysPara->status.lastStatWarn = sysPara->status.statWarn; + if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){ + if(sysPara->status.viscosityFault==0){ + ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + if(sysPara->status.viscosityFault==1){ + + ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + + } + else if(sysPara->status.viscosityFault==2) { + ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); + + } + } + } + sysPara->status.lastViscosityFault = sysPara->status.viscosityFault; + /*-----------------------------------------------------------------------------------*/ + //updatePhaseIndicatorLight(); //此部分工作交给InkJetPrinter的来做了 + + + if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie + if(sysPara->status.RecycleWarnCnt) + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + sysPara->status.RecycleWarnCnt = 0; + sysPara->status.lastRecycleWarn = 0; + } +#ifdef RETANKACK + else { + if(sysPara->status.RecycleWarnCnt==0) ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + if(( sysPara->status.currReclaimTankPos/10 < sysPara->para.reclaimTankTime*0.85 ) | (sysPara->status.statWarn & WARN_STATUS_HDINT) ) + sysPara->status.RecycleWarnCnt=0; + if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone){ + if(sysPara->para.RecycleWarnAction && startPrintingFlag && printintFlag ) + on_pushButtonStopPrint_pressed(); + if(sysPara->status.RecycleWarnCnt > 10) + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + + if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY){ + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + if(sysPara->para.RecycleWarnAction){ + sysPara->status.lastRecycleWarn = 1; + if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){ + on_pushButtonReclaimTankClose_pressed(); + LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线")); + setRunStatus(tr("回收故障,关闭回收槽,关墨线")); + //ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + + } + } + } + else{ + sysPara->status.RecycleWarnCnt ++ ; + } + // + } + else { + //sysPara->status.RecycleWarnCnt=0; + } + } +#else + else { + if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone) + { + if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY) + { + sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY; + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + sysPara->status.reclaimCloseCnt=100; + if(sysPara->para.RecycleWarnAction) + { + if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){ + on_pushButtonStopPrint_pressed(); + on_pushButtonReclaimTankClose_pressed(); + LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线")); + setRunStatus(tr("回收故障,关闭回收槽,关墨线")); + //ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + + + } + } + else setRunStatus(tr("回收故障.")); + + } + else + { + sysPara->status.RecycleWarnCnt ++ ; + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); + if(sysPara->status.RecycleWarnCnt%10==9) + LogInfo::setRunStatusText(tr("回收异常,墨线可能偏离.(%1)").arg(sysPara->status.RecycleWarnCnt)); + } + } + else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--; + } +#endif + +#ifdef MIMA + if(sysPara->status.WorkTimeOut) { + + if( printintFlag) on_pushButtonStopPrint_pressed(); + else sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + setRunStatus(tr("维护时间已到,喷码机停止工作!")); + } +#endif + //ui->labelCurrentTime->setText( QString().sprintf("c:%d,s:%d",sysPara->status.RecycleWarnCnt,sysPara->status.reclaimTankstatus) ); + /*-----------------------------------------------------------------------------------*/ + + // sysPara->status.LightUpCnt ++ ; + // if((sysPara->status.LightUpCnt%3) == 0){ + // if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag){ //打印状态指示灯 + // sysPara->status.GreenLightOnFlag = true; + // } + // else{ + // sysPara->status.GreenLightOnFlag = false; + // sysPara->devOp->controlGreenLight(false); + // } + // if(sysPara->status.GreenLightOnFlag){ //报警会时有时无 + // sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); + // } + // } + + + if(ui->labelRunStatus->text().length()<4){ + if(startPrintingFlag ){ + if(printintFlag) + setRunStatus(tr("正在喷印...............")); + else + setRunStatus(tr("暂停喷印...............")); + } + } + + // 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位 + + + //ui->labPress->setText(QString("%1").arg(sysPara->status.PRESSURE)); + //ui->labViso->setText(QString("%1").arg(sysPara->status.viscosity) ); + //ui->labPosition->setText(QString("%1").arg(sysPara->status.SEPTAL_POSITION)); + //ui->labOscVol->setText(QString("%1").arg(sysPara->para.oscillatorVoltage) ); + + ui->labPress->setText(QString("%1/%2").arg(sysPara->status.PRESSURE).arg(sysPara->para.pressure)); + ui->labViso->setText(QString("%1/%2").arg(sysPara->status.viscosity).arg(sysPara->para.viscosity) ); + if(sysPara->para.gearPumpEnable) + { + ui->labPosition->setText(QString("%1").arg(sysPara->status.gearPumpRunSpeed)); + } + else + { + ui->labPosition->setText(QString("%1/%2").arg(sysPara->status.SEPTAL_POSITION).arg(sysPara->para.septalPostion) ); + } + //ui->labOscVol->setText(QString("%1").arg(sysPara->para.oscillatorVoltage) ); + ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); + //ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + "600"); + unsigned int sizeOfCache; + if(sysPara->status.flagOfWeiDaLiTCP && sysPara->status.isPrinting) + sizeOfCache = printDatasQueue.size() + 1; + else + sizeOfCache = printDatasQueue.size(); + QString cache = QString("缓存:%1个").arg(sizeOfCache); + ui->pushButton_Number->setText(cache); + } +} + + +bool MainWindow::updatePhaseIndicatorLight(){ + + if(sysPara<0) return 0; + + if(dlgMyWarringShowDlyCnt)dlgMyWarringShowDlyCnt--; + if(dlgMyWarringShowDlyCnt==1) dlgMyWarring.hide(); + + /*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/ + if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){ + //故障后必须等手动按故障恢复才会继续 + if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){ + if(sysPara->status.lastPhaseFault){ + sysPara->status.lastPhaseFault = 0; + ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + } + sysPara->status.phaseErrorCnt = 0; + } + else { + if(sysPara->status.phaseErrorCnt < 10) + sysPara->status.phaseErrorCnt ++ ; + else { + if(!sysPara->status.lastPhaseFault){ + ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + sysPara->status.lastPhaseFault = 1; + if(sysPara->status.flight_tm_error) + { + LogInfo::setRunStatusText(tr("相位故障:飞行时间错误!")); + } + if(sysPara->status.detect_phase_error) + { + LogInfo::setRunStatusText(tr("相位故障:相位检测错误!")); + } + + } + if(sysPara->para.powerOffAfterPhaseFault ){ + if(!sysPara->status.powerOffAfterPhaseFaultAppending){ + sysPara->status.powerOffAfterPhaseFaultAppending = 1; + _on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("相位故障,准备关机")); + setRunStatus(tr("相位故障,准备关机")); + strTitle = tr("相位故障,准备关机"); + + + } + } + else if(sysPara->para.suspendAfterPhaseFault){ + if(sysPara->para.stopCounterMeterAfterFault){ + if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 + on_pushButtonPausePrint_pressed(); + LogInfo::setRunStatusText(tr("相位故障,暂停打印")); + setRunStatus(tr("相位故障,暂停打印")); + strTitle = tr("相位故障,暂停打印"); + + } + } + else if(!sysPara->status.DACDisable){ + sysPara->devOp->printCtrl(PRINT_CTRL_DAC_DISABLE); + sysPara->status.DACDisable = true; + LogInfo::setRunStatusText(tr("相位故障,屏蔽DAC输出")); + setRunStatus(tr("相位故障,屏蔽充电")); + strTitle = tr("相位故障,屏蔽充电"); + + } + + } + } + } + + + return sysPara->status.lastPhaseFault; +} + +int MainWindow::getMaxSpeedCalcPara(){ + sysPara->para.printRowDelay = sysPara->para.currPrintMode; + if(sysPara->status.isPrinting == false) + sysPara->status.pixNumPerCol = sysPara->status.currPrintRow; + else + sysPara->status.currPrintRow = sysPara->status.pixNumPerCol; + sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol; + + sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100; + int dotNumPerCol = (sysPara->para.pixNumPerCol- sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.printRowDelay + 1) + + (sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.lineEndAdjustPointDelay + 1); + dotNumPerCol = sysPara->para.pixNumPerCol? + ((dotNumPerCol*(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum))/sysPara->para.pixNumPerCol):1; +// sysPara->para.dotNumPerCol += sysPara->para.printColDelay; + dotNumPerCol =( sysPara->para.alterPrint.enable)? dotNumPerCol/2:dotNumPerCol; + + int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) + int colNum = dotNumPerCol?dotNum/dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 + int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 + + return pulseNum; +} + +void MainWindow::updateSysStatusToUI(){ + + if(sysPara){ + if(sysPara->para.gearPumpEnable) + { + ui->label_11->setText(tr("齿轮泵转速")); + } + else + { + ui->label_11->setText(tr("隔膜位置")); + } + RefreshStatusLight(); + if(sysPara->status.lastProductCnt != sysPara->status.productCnt){ //产品计数 + ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); + updateTotalCnt(0); + /* qDebug()<<"total_syn_pulse_num" //<status.productCnt) + << QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16) + << (unsigned int)(sysPara->status.total_syn_pulse_num) + << (unsigned int)(sysPara->status.volGap_pulse_num); */ + + + } + if(sysPara->status.ExpiryDispUpdate >0 ) + { + sysPara->status.ExpiryDispUpdate--; + ui->widgetPrintTextDisplay->update();// 2018.5.25 + } + if(sysPara->para.alterPrint.enable==1) ui->labelXFileName->setText (tr("交替打印")); + else if(sysPara->para.alterPrint.enable==2) ui->labelXFileName->setText (tr("电眼交替")); + else ui->labelXFileName->setText (""); + /*--------------------------------------------------------------------------*/ + //if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && printintFlag){ //同步器速度 + if(( + (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + ||(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) + ||(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + )&& sysPara->para.eleEyeTriggerSynPrintEn) + ) + )//&&printintFlag + { + if(sysPara->para.synPulseNumPerMm) { + + unsigned int tmp = ((unsigned int) sysPara->status.synPulseCntPer1s ) & 0xffffff; + unsigned int mm = tmp /sysPara->para.synPulseNumPerMm * 60; // 1min总脉冲/毫米脉冲数 = 1min走过的距离mm数 + int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) + int colNum = sysPara->para.dotNumPerCol?dotNum/sysPara->para.dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 + int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 + + int maxMM = 0; + if(!sysPara->para.charWidthSetEnable) + { + if( (sysPara->status.currPrintRow != 0) + && (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + /*&& (sysPara->para.currPrintMode == FAST_PRINT || sysPara->para.currPrintMode == STANDARD_PRINT) */){ + maxMM = calculateMaxSpeed(pulseNum); + maxMM = maxMM *60; + if(sysPara->para.alterPrint.enable) + { + maxMM = maxMM * 2; + } + } + else + { + maxMM = (pulseNum/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距 + // qDebug()<< "[Info] OLD COUNT mm" << maxMM; + } + } + else + { + int pulsePS = getMaxSpeedCalcPara();//No67 + maxMM = (pulsePS/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距 + } + +#ifdef DEBUG2 + qDebug()<<"mm"<<"dotNum"<<"colNum"<<"pulseNum"<<"maxMM"<<"synNPCol"<<"divFre"; + qDebug()<para.synNumPerCol<para.divideRatio<para.dotNumPerCol; +#endif + ui->labelSynRate->setText(tr("%1.%2[%3.%4]米/分").arg(mm/1000).arg(mm%1000,3,10,QLatin1Char('0')) + .arg(maxMM/1000).arg(maxMM%1000,3,10,QLatin1Char('0'))); + } + else + ui->labelSynRate->setText(""); + sysPara->status.lastSynPulseCntPer1s = sysPara->status.synPulseCntPer1s; + } + else + ui->labelSynRate->setText(""); + + /*--------------------------------------------------------------------------*/ + if(sysPara->status.lastSynColDelay != sysPara->status.synColDelay){ + // if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + ui->labelSynColDelay->setText(tr("列延时:%1点").arg(sysPara->status.synColDelay)); + sysPara->status.lastSynColDelay = sysPara->status.synColDelay; + } + /*--------------------------------------------------------------------------*/ + if(!sysPara->status.fpgaVersionNum && !sysPara->status.lostCommuFlag){ //因为进入系统就会进主界面,马上就会将版本号读出 + sysPara->devOp->readFpgaVersionNum(); + if(sysPara->status.fpgaVersionNum){ + sysPara->devOp->writeFpgaPrintPara(true); + } + ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(SOFTWARE_VER_NUM).arg(0).arg(0).arg(0) ); + } + else{ + QString ARM_Version; + ARM_Version.sprintf("%d.%d.%02d_%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION); + ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12) + .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) ); + } + bool found_CNT1 = false; + bool found_CNT2 = false; + bool found_CNT3 = false; + bool found_CNT4 = false; + /*--------------------------------------------------------------------------*/ + if(sysPara->status.variNum && (ui->stackedWidgetText->currentWidget() == ui->pagePrintTextDisplay)){ + + bool updatePrintTextDisplayFlag = false; + + for(int i = 0; i < sysPara->status.variNum; i++){ + int val = 0; + switch( Public::getType(sysPara->status.vars[i].type)) + { + case CALANDAR_YEAR:val = sysPara->status.calandar_and_dat.year;break; + case CALANDAR_MONTH:val = sysPara->status.calandar_and_dat.month;break; + case CALANDAR_DAY:val = sysPara->status.calandar_and_dat.day;break; + //case CALANDAR_WEEK:val = sysPara->status.calandar_and_dat.week;break; + + case CALANDAR_WEEK:val = sysPara->status.calandar_and_dat.week;break; + case CALANDAR_HOUR:val = sysPara->status.calandar_and_dat.hour;break; + case CALANDAR_MINUTE:val = sysPara->status.calandar_and_dat.minute;break; + case CALANDAR_SECOND:val = sysPara->status.calandar_and_dat.second;break; + +#ifdef DEBUG_CNT + case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,10).toInt();break; + case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,10).toInt();break; +#else + case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();found_CNT1=true;break; + case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();found_CNT2=true;break; +#endif + case CALANDAR_CNT3:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();found_CNT3=true;break; + case CALANDAR_CNT4:val = QString::number(sysPara->para.cnt4CurrValue,10).toInt();found_CNT4=true;break; + + case RANDOMNUM : val = QString::number( sysPara->status.calandar_and_dat.RandomValue1, 16).toInt(); break; + //val = QString::number( sysPara->status.calandar_and_dat.RandomValue2 ,16).toInt(); + case CALANDAR_XDAY:val = sysPara->status.XXXDay;break; + case EXPIRYDATE: break; + default:qDebug() << "error,unknown variable type:" << sysPara->status.vars[i].type; + } + + if(sysPara->status.vars[i].currVal != val) + //{ + updatePrintTextDisplayFlag = true; + sysPara->status.vars[i].currVal = val; + //} + + } + if(updatePrintTextDisplayFlag) //减少不必要的刷新动作 + { + ui->widgetPrintTextDisplay->updateSysStatusToUI(); + } + } + emit setCNT1Select(found_CNT1); + emit setCNT2Select(found_CNT2); + emit setCNT3Select(found_CNT3); + if(sysPara->para.isEnableGetDataButton) + { + ui->pushButtonGetData->setEnabled(true); + } + else + { + ui->pushButtonGetData->setEnabled(false); + } + if(SIMULATE_PRINTING_MODE) + enablePrintButton(true); + ui->label_EditMode->setText(QString::number(sysPara->para.EditMode)); + } +} + +/*void MainWindow::showPrintBitImage(){ + if(sysPara){ + unsigned char *dat; + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + for(int j = sysPara->status.currPrintCol - 1; j >= 0 ; j --){ + for(int i = 0; i < sysPara->status.currPrintRow; i++){ + if(dat[j*MAX_PRINT_ROW_BYTE_NUM + i/8] & (1<<(i%8))) + printf("1"); + else + printf(" "); + } + printf("\n"); + } + } +}*/ + +//void MainWindow::on_pushButtonTXTOpen_pressed(){ + +//} + +void MainWindow::openPicFIleOpen(QString filePath,bool insertFlag) { + fileChange=true; +#ifdef TXTEDIT + ui->textEditOption->onFileOpenN(filePath,insertFlag); + emit setMainTabNow(0); +#else + Q_UNUSED(insertFlag); + + if(sysPara) { + + + + if(//filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || + //filePath.endsWith(".jpg") || + // ||filePath.endsWith(".bmp") + filePath.endsWith(".png")) + { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + return ; + } + else { + + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)) + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + file.close (); + ui->PicWidgetDisp->loadImage (filePath,false); + ui->labelOpenedFileName->setText (QFileInfo(filePath).fileName()); + LogInfo::setRunStatusText(tr("打开文件:")+(QString)(QFileInfo(filePath).fileName())); + if(sysPara){ + //QString str1 =QFileInfo( filePath).fileName (); + sysPara->sysFile= PARA_ROOT_DIR+QFileInfo( filePath).baseName()+".dpn"; + sysPara->loadParaFromFile ();// 从磁盘读取参数文件 + emit openFileChange(); + // emit openFileChange(); + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toAscii().constData()); + } + /* other action */ + PreviewPressed(); + + + if(sysPara->status.addSpace) + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->widgetPrintTextDisplay->setScaleRatio(3); + //ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); + } + } + } +#endif + +} + +void MainWindow::on_pushButtonGetData_pressed() +{ + emit getJSONData(); +} + +void MainWindow::onPushButtonPreviewPressed(){ + if(sysPara) + { + sysPara->para.EditMode = TXTFILE; + if(previewFlag==0) { +#ifdef SAVEWHENPREVIEW + if(ui->textEditOption->fileName.isEmpty()){ + QMessageBox::StandardButton ret = QMessageBox::Ok; + ret = QMessageBox::warning(this, tr("提示"), + tr("文件未保存,是否先保存文件!"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok) + { + ui->textEditOption->on_bottonSave_clicked(); + } + } + else + ui->textEditOption->on_bottonSave_clicked(); +#else + +#endif + PreviewPressed(); + } + } +} + + +int MainWindow::getVarStarRow(int x,int y,int h,int w,char *dat) +{ + int t_x_start_pos = x; + int t_x_end_pos = t_x_start_pos + w; + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); + int t_y_start_pos = y - h/2; + //int t_y_end_pos = y ; + if(t_y_start_pos < 0) + t_y_start_pos = 0; + + for(int j=y - h/2;j>0;j--) + { + char startRowFound=0; + for(int i = t_x_start_pos; i < t_x_end_pos; i++) + { + if( (dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8)))) + { + startRowFound=1; + dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] &=~ (1 << (j%8));//将画点取消掉 + } + } + if(startRowFound)continue; + t_y_start_pos=j+1; + // qDebug()<<"F:"<status.currPrintRow = 0; + sysPara->status.variNum = 0; + sysPara->status.QRvariNum = 0; + sysPara->status.ExpiryVarNum=0; + unsigned char *dat; + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + memset(dat,0,sizeof(sysPara->status.printDat_Normal)); + }else{ + dat =sysPara->status.printDat; + memset(dat,0,sizeof(sysPara->status.printDat)); + } + + //qDebug()<<"Preview:"; + //////////////////////////////////////////////////////在这里清变量参数 + sysPara->status.ExpiryVarNum=0; + sysPara->status.CurrDateVariNum = 0; + sysPara->status.classVariNum = 0; + sysPara->print.ExpiryVar.startColPos = 0; + sysPara->print.ExpiryVar.endRowPos = 0; + sysPara->print.ExpiryVar.letterSpace =0; + sysPara->print.CurDateVar.startColPos = 0; + sysPara->print.CurDateVar.endRowPos = 0; + sysPara->print.CurDateVar.letterSpace = 0; + ///////////////////////////////////////////////////////////////// + if(sysPara->para.EditMode==PICFILE) + { + + ui->PicWidgetDisp->getPrintDat (dat,0,sysPara); + ui->PicWidgetDisp->readVar (sysPara,0); + + // qDebug ()<<"v-n1:"<status.variNum<<"v-nLeter1:"<status.vars[0].letterSpace<<"v-nLeter2:"<status.vars[1].letterSpace<<"v-nLeter3:"<status.vars[2].letterSpace; + sysPara->status.variNum=ui->PicWidgetDisp->getVarNum (); + sysPara->status.currPrintCol=ui->PicWidgetDisp->getWidth (); + sysPara->status.currPrintRow=ui->PicWidgetDisp->getPicRealHeight(); + + ui->PicWidgetDisp->getCharRamData(sysPara); + + //qDebug()<<"H0:"<PicWidgetDisp->getHeight()<PicWidgetDisp->getPicRealHeight(); + + } + // end of PICFILE + else if(sysPara->para.EditMode==TXTFILE)// TXTFLE + { + sysPara->status.addSpace = sysPara->para.checkSpace; + ontextEdittextChanged(); + coldot = (int)ui->textEdit->document()->size().width(); + if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + { + coldot = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); + QMessageBox::warning(this, tr("警告"), + tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); + } + int maxPicHeight = MAX_PRINT_ROW_NUM + 12; + QSize size(coldot,maxPicHeight); + + sysPara->status.currPrintRow =0; + sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace + + + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.fill(0x00f0f000);//填充白色 + QPainter painter(&image); + //image.save("./printImage.jpg"); + ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + + image.save("./printImage.bmp"); + //ui->widgetPrintTextDisplay + int firstRow = maxPicHeight; + /*--------------------------------------------------------------------------*/ + for(int j = 0; j < maxPicHeight; j++){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + QRgb rgb = image.pixel(i,j); + if(rgb !=0x00ffffff )//& 0xff000000) + { + //qDebug()<maxPicHeight)?maxPicHeight:lastRow; + sysPara->status.ExpiryVarNum=0; + sysPara->status.CurrDateVariNum = 0; + sysPara->status.classVariNum = 0; + sysPara->print.ExpiryVar.startColPos = 0; + sysPara->print.ExpiryVar.endRowPos = 0; + sysPara->print.ExpiryVar.letterSpace =0; + sysPara->print.CurDateVar.startColPos = 0; + sysPara->print.CurDateVar.endRowPos = 0; + sysPara->print.CurDateVar.letterSpace = 0; + + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + for(int j = 0; j < lastRow - firstRow; j++){ // Y + for(int i = 0; i < coldot; i++){ // + QRgb rgb = image.pixel(i,j + firstRow); + if(rgb&0x80000000) { //判断alpha,rgb<0xFFE0E0E0->过滤偏白背景 + //if((rgb & 0xffffff) == 0xff0000) {j=40; break;} + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + + bool foundvar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} + //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; + } + if(foundvar){ + if(sysPara->status.variNum < MAX_VARI_NUM){ + sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->status.vars[sysPara->status.variNum].endRowPos = j; + if(varLastRowstatus.variNum ++;TempVarNum++; + i+=5; + //qDebug()<<"VARr:"<status.QRvariNum>=4)continue; + if((rgb & 0x00ffff0) == 0x00ff10) { //MDT + sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; + if(varLastRowstatus.QRvariNum++; + } + else if((rgb & 0x00ffff0) == 0x00ff20) { //QR + //qDebug()<<"FLAG:"<print.QRvars[sysPara->status.QRvariNum].type=QR; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; + //qDebug()<<"qr start row:"<print.QRvars[sysPara->status.QRvariNum].startColPos; + //qDebug()<<"qr end row:"<print.QRvars[sysPara->status.QRvariNum].endRowPos; + + if(varLastRowstatus.QRvariNum++; + } + else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR + sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); + + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; + + if(varLastRowstatus.QRvariNum++; + + } + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + + } + //else if((rgb & 0xfffff0)==0xff00f0) + else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;} + } + if(foundExVar) + { + qDebug()<<"expiryVar:"; + //if(sysPara->status.ExpiryVarNum <3) + { + sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->print.ExpiryVar.endRowPos = j; + if(varLastRowstatus.ExpiryVarNum == 0) + sysPara->status.ExpiryVarNum ++; + i+=10; + } + //else TempVarNum++; + //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + } + else if((rgb & 0xfffff0)==0xff0cf0) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + //qDebug()<<"before found CurDateVar:"<0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} + } + if(foundExVar) + { + // qDebug()<<"found CurDateVar:"; + //if(sysPara->status.ExpiryVarNum <2) + { + sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->print.CurDateVar.endRowPos = j; + if(varLastRowstatus.CurrDateVariNum == 0) + sysPara->status.CurrDateVariNum ++; + i+=10; + } + + //else TempVarNum++; + //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + } + //else if((rgb & 0xffffff)==0x0032c8) + else if((rgb & 0x0000ff)>0x0000c0 && (rgb & 0x00ff00)>0x002F00 && (rgb & 0x00ff0000)==0x00000000) + { + //qDebug()<<"before found class:"<status.classVariNum <3) + { + EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ; + currCLass->startColPos = i+(sysPara->status.addSpace?i:0); + if (currCLass->startColPos>1) + currCLass->startColPos = currCLass->startColPos - 1; + currCLass->endRowPos = j; + if(varLastRowstatus.classVariNum == 0) + sysPara->status.classVariNum ++; + i+=5; + } + } + } + else { //Y = 0.299*R' + 0.587*G' + 0.114*B + int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; + if(y < 125 ) { + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 + + if((j+1) > sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+1; + //qDebug()<<"dddd currPrintRow:"<< sysPara->status.currPrintRow; + } + + } + } + }/*判断alpha end*/ + } + } + + // var + //qDebug() <<"VarNum"<8){ + setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); + strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); + strTitle.append("\r\n"); + strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); + QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); + } + + //qDebug()<status.vars[0].startRowPos<status.vars[0].endRowPos<< sysPara->status.currPrintRow; + // ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM + //qDebug()<<"qrvar"<status.QRvariNum; + searchQrVar(); + //if(sysPara->status.ExpiryVarNum) + searchExpiryVar(); + //ui->widgetPrintTextDisplay->update(); + //=============== + if(sysPara->status.variNum){ + // + /*--------------------------------提取变量------------------------------------------*/ + QString pattern = ""; + + QRegExp rx(pattern); + QString textHtml = ui->textEdit->toHtml(); + int from = 0; + int varNum = 0; + // 正常变量 + while(from < textHtml.size() && from != -1) { + from = textHtml.indexOf(rx,from);//返回匹配到到起始地址 + bool ok; + if(from != -1){//找到匹配的 + from ++; + if(varNum < sysPara->status.variNum){ + sysPara->status.vars[varNum].digitalNum = rx.cap(3).toInt(&ok);//第二个匹配,数字到个数 + sysPara->status.vars[varNum].bold = (sysPara->status.vars[varNum].digitalNum%100) == 75; + if(sysPara->status.vars[varNum].bold) + sysPara->status.vars[varNum].digitalNum = sysPara->status.vars[varNum].digitalNum/100; + + sysPara->status.vars[varNum].type = rx.cap(2).toInt(&ok);//第一个匹配 + sysPara->status.vars[varNum].width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); + sysPara->status.vars[varNum].height = rx.cap(5).toInt(&ok); + + //qDebug() <status.vars[varNum].startRowPos + // << "endRowPos" << sysPara->status.vars[varNum].endRowPos + // <<"Height"<status.vars[varNum].height; + //sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].startRowPos + sysPara->status.vars[varNum].height-1; + sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+1; + if(sysPara->status.vars[varNum].startRowPos<0)sysPara->status.vars[varNum].startRowPos=0; + //sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+(sysPara->status.vars[varNum].height==15||sysPara->status.vars[varNum].height==16?0:1); + // qDebug()<<"Hei:"<status.vars[varNum].height; + /*-----------------------------------------------------------------------------------------*/ + int t_x_start_pos = sysPara->status.vars[varNum].startColPos; + int t_x_end_pos = t_x_start_pos + sysPara->status.vars[varNum].width ; + if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); + int t_y_start_pos = sysPara->status.vars[varNum].startRowPos; + int t_y_end_pos = sysPara->status.vars[varNum].endRowPos+1 ; + if(t_y_start_pos < 0) + t_y_start_pos = 0; + for(int i = t_x_start_pos; i < t_x_end_pos; i++){ + for(int j = t_y_start_pos; j < t_y_end_pos; j++){ + + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 + + } + } + + sysPara->status.vars[varNum].height = rx.cap(5).toInt(&ok)-1; + if(sysPara->status.vars[varNum].height>16 ){ + if(sysPara->status.vars[varNum].height==24) + ; + else { + if(sysPara->status.vars[varNum].startRowPos) + { + sysPara->status.vars[varNum].endRowPos--; + sysPara->status.vars[varNum].startRowPos--; + } + + } + + } + + if(sysPara->status.vars[varNum].type == RANDOMNUM) + { + //qDebug()<<"RAND:"<status.vars[varNum].type<< sysPara->status.vars[varNum].digitalNum; + sysPara->status.RandomDigitNum = sysPara->status.vars[varNum].digitalNum; + + + } + + if(sysPara->status.vars[varNum].type >59 && sysPara->status.vars[varNum].type<70) + { + sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].endRowPos-3; + sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].startRowPos-3; + } + /*-----------------------------------------------------------------------------------------*/ + int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[varNum].height); + + //qDebug()<<"MainWindows"<status.vars[varNum].height<status.vars[varNum].letterSpace = 0; + if(sysPara->status.vars[varNum].digitalNum){ //算出letterspace + QFont font; + //font.setFamily(Public::getFontFamily(pixelSize)); + font.setFamily(Public::getFontFamily(pixelSize,sysPara->status.vars[varNum].type )); // 20160812 + //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); + font.setPixelSize(pixelSize); + font.setWeight(sysPara->status.vars[varNum].bold?QFont::Bold:QFont::Normal); + //font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + int charWidth = (fontMetrics.width("0123456789"))/10 ; + sysPara->status.vars[varNum].letterSpace = sysPara->para.textEditCharSpace; + //sysPara->status.vars[varNum].width/sysPara->status.vars[varNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth; + } + + if(varNum<7) varNum ++; + } + else + { + qDebug() << tr("warning,界面上有变量未显示完全"); + } + } + } + } + + //if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<status.vars[0].endRowPos ; + + /*--------------------------------------------------------------------------*/ + generateCharRamData(); + + /*---------------------------------------------------------------------------*/ + //sysPara->status.currPrintRow ++;//总的行数,从1~n,而不是从0~n, + //if(sysPara->status.currPrintRow>39)sysPara->status.currPrintRow=39; + if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1) sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; + bool found=0; + + lastRow = sysPara->status.currPrintRow; + //qDebug()<<"lastRow:"<status.currPrintRow; j >2 ; j--){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ + lastRow = j+1; + found=1;//qDebug()<<"fOUND:"<status.currPrintRow; + break; + } + } + if(found) + break; + } + if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow =MAX_PRINT_ROW_NUM-1; + if(lastRow20 &&lastRow<=25) lastRow =24; + + sysPara->status.currPrintRow =lastRow; + //sysPara->status.currPrintRow = (lastRow > varLastRow) ? lastRow : varLastRow; //配合賴工省点打印少行問题 + //qDebug()<<"lastRow:"<status.currPrintRow; + if(sysPara->status.specialVarPrint.SpecialVarEnable) + { + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 20240716 + } + } + // end of TxtMode + + //qDebug() << "varnum:"<status.variNum; + // 交替打印 + // sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; + + +#ifdef _2DCODE_ + if(sysPara->status.QRvariNum) { + onUpdateDispQRCode(1); + } +#endif + //if(sysPara->status.currPrintRow==11) sysPara->status.currPrintRow=12; + int wmax = sysPara->status.currPrintRow; + sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; + if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; + else { + if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1; + wmax = sysPara->status.currAlterPrintRow; + } + /*-------------------------------切换到显示窗口-----------------------------------*/ + if(sysPara->status.addSpace) + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); + else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); + + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); + ui->widgetPrintTextDisplay->update(); + //qDebug()<<"3"<status.currPrintRow; + } + previewFlag=0; +} + +void MainWindow::showDat(unsigned char * Dat) +{ +#ifdef DEBUG1 + int i,j,x=MAX_PRINT_ROW_BYTE_NUM*sysPara->status.currPrintCol; + for(j=0;j<2;j++){ + for(i=0;iwidgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + //sysPara->devOp->writeFpgaPrintPara(); /*务必放在最后一步*/ + //sysPara->devOp->writeFpgaVariCtrl(); + //SendPrintDataToFpga (m); + emit ui->widgetPrintTextDisplay->update(); + + } +} + +/* + 000 000 000 0000 0 000000 000 0000000 000 000 + 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 000 0 000 0 000 0 0 + 0 0 0 0 000 0 0 00 0 00 0 0 0 0 0 00 + 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 + 0 0 0 0 0 00000000 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 000 00000 0000000 0000 0 0000 000 0 000 0000 + + */ +//#define DEBUG4 + +void MainWindow::generateCharRamData(){/* 生成字模数据 */ + if(sysPara->status.variNum){ + QTextEdit textEdit; + textEdit.document()->setDocumentMargin(0); + textEdit.setLineWrapMode(QTextEdit::NoWrap); + int ramAddress = 0; + int i; + qDebug()<<"sysPara->status.variNum:"<status.variNum; + for( i = 0; i < sysPara->status.variNum; i++){ + vars_t *p_var = &sysPara->status.vars[i]; + p_var->bassAddr = -1; + if(p_var->original){ //清除原来的记录 + if(p_var->dat){ + free(p_var->dat); + } + p_var->original = false; + } + + int j; +#if 0 //同一个点陣的变量有BUG + qDebug()<<"p_var->height:"<height; + if(p_var->height>6) + { + for( j = 0; j < i; j ++){ //重复检测是否有重复大小的字存在 + + if(p_var->height == sysPara->status.vars[j].height){ + p_var->bassAddr = sysPara->status.vars[j].bassAddr; + p_var->datHeight = sysPara->status.vars[j].datHeight; + p_var->datWidth = sysPara->status.vars[j].datWidth; + p_var->rowByteNum = sysPara->status.vars[j].rowByteNum; + p_var->dat = sysPara->status.vars[j].dat; + break; + } + } + } +#endif + int width; + if(p_var->bassAddr == -1){ + if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide) + width = (p_var->digitalNum)?(13*(p_var->width/p_var->digitalNum)):12; + else + width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12; + int width2 = width;//+(sysPara->status.addSpace?width:0); + int height = Public::derivePixelSizeFromHeight(p_var->height); + textEdit.clear(); + int DPI = textEdit.logicalDpiX(); + DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 + + if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + textEdit.insertHtml(QString("0123456789.m ") + .arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*72/DPI).arg(p_var->bold?600:400)); //600表示加粗,400表示普通 + }else{ + textEdit.insertHtml(QString("0123456789") + .arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*72/DPI).arg(p_var->bold?600:400)); //600表示加粗,400表示普通 + } + QFont font = textEdit.font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,p_var->letterSpace); + textEdit.setFont(font); + + // qDebug() << "height:" << height << "fontFamily:" << Public::getFontFamily(height); + // qDebug() << "width2:" << width2 << "fontFamily:" << Public::getFontFamily(height); + + + int imgHeight = height + 12; + QSize size(width,imgHeight); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff); + QPainter painter(&image); + textEdit.show(); //如果不显示,似乎不会绘制 + + textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + textEdit.hide(); + image.save(QString::number(i) + "varRam.png"); +#ifdef DEBUG4 + //image.save("./var.png"); +#endif + // 找到最下面的行 + int lastValidRow = 0; + for(int k = imgHeight - 1; k >= 0 ; k--){ + for(int j = 0; j < width; j ++){ + QRgb rgb = image.pixel(j,k); + if(rgb&0xff000000){ + lastValidRow = k + 1; + break; + } + } + if(lastValidRow != 0) + break; + } + + qDebug()<<"lastValidRow"<endRowPos<< p_var->startRowPos; + int rowDiff = p_var->endRowPos - p_var->startRowPos; + int firstValidRow = 0; // 变量的第一行所处的行地址 + int firstValidRowDiff;// 看起来和上面的参数一样 + qDebug()<<"rowDiff"<=0) + break; + } + rowDiff = lastValidRow-firstValidRow; + firstValidRowDiff = firstValidRow/2; +*/ + + if(lastValidRow >= rowDiff){ + firstValidRow = lastValidRow - rowDiff; + firstValidRowDiff = firstValidRow; + } + else { + firstValidRow = 0; + firstValidRowDiff = lastValidRow > rowDiff; + } + + + firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 + + int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 一列占用字节数 + unsigned char *dat = (unsigned char *)calloc(width2,rowByteNum); +#ifdef DEBUG4 + s2.sprintf ("firstValidRow:%d,lastValidRow:%d,rowByteNum:%d,width:%d ,rowDiff:%d\n\r",firstValidRow,lastValidRow,rowByteNum,width,rowDiff) ; + qDebug()<> 24)&0xff) > 0x80){ // 判断是否有效的像素点 + dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); +#ifdef DEBUG4 + s2.sprintf("%02X",rowByteNum*j + currRow/8); + str+=s2; +#endif + } + else{ +#ifdef DEBUG4 + s2.sprintf(" -"); + str+=s2; +#endif + } + } +#ifdef DEBUG4 + qDebug()<startRowPos,p_var->endRowPos,p_var->height); + //qDebug()<bassAddr = ramAddress; + p_var->datHeight = height; + + p_var->datWidth = width2; + p_var->rowByteNum = rowByteNum; + p_var->dat = dat; + p_var->original = true; + p_var->currVal = -1; //相当于初始化 + ramAddress += rowByteNum * width2; + + } + } + } +} +void MainWindow::updateTotalCnt(int en) +{ + // No50 USEING + //sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt: + // (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0; + //if(en) sysPara->para.totalProductCnt=0; + + //sysPara->para.totalProductCnt = sysPara->status.totalProductCnt; // No51版本改进 + sysPara->status.lastProductCnt = sysPara->status.productCnt; + ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); + ui->labelTotalProductCnt->setText(QString::number( sysPara->para.totalProductCnt+sysPara->status.totalProductCnt)); + +} +static int numOfTextChange = 0; +void MainWindow::on_pushButtonStartPrint_pressed() +{ + if(sysPara->status.flagOfSolventMaxNum || sysPara->status.flagOfInkMaxDot) + return; + + if(sysPara->status.flagOfWeiDaLiTCP){ + if(printDatasQueue.size() == 0){ + sysPara->status.flagOfWeiDaLiTCP = 0; + return; + } + } + LogInfo::setRunStatusText(tr("reclaimTankstatus: %1").arg(sysPara->status.reclaimTankstatus)); + if(sysPara->status.isPrinting){ + qDebug("Mainwindow: Printing 开始打印"); + }else{ + qDebug("Mainwindow: Non printing 开始打印"); + } + static int fileCount = 0; + fileCount++; + if(fileCount > 5) + { + fileCount = 1; + } + + if(sysPara){ + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; +#ifdef X86TEST + //sysPara->status.statWarn |=WARN_STATUS_HDINT; +#endif +#ifndef SYS_LINUX + sysPara->status.statWarn =0; +#endif +#ifdef MYTEST + +#else +#ifdef AM335TEST + +#else +#ifdef MIMA + static int xxxm=0; + if(xxxm==0){ + QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); + if(!file.exists()) + { + LogInfo::setRunStatusText(QString("missing libQtssl.o")); + return; + } + } + xxxm=1; + if(sysPara->status.WorkTimeOut) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); + return; + } +#endif +#endif +#endif + test_flag = 0; + /******2020/2/29*****/ + // qDebug()<<"sysPara->para.printTriggerMode "<< sysPara->para.printTriggerMode; + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) //同步模式下,判断喷印间隔是否设置合理 + { + QSizeF size = ui->textEdit->document()->size(); + float stroke,print_len_min; + stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; + print_len_min = stroke * size.width(); + if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) + { + QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); + return; + } + } + /******2020/2/29 end*****/ + if(!SIMULATE_PRINTING_MODE){ + if (!sysPara->status.reclainTankReachEnd) { + return; + } + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ + QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!")); + return ; + } + } + //if(printintFlag && !sysPara->status.FileChangeRestCntFlag) return; + // 发送数据到 外接屏 2017-07-25 + sysPara->devOp->DatToDisp(sysPara->para.lastOpenedFileName,0); +#ifdef __HV_FOR_WANG_DEBUG__ /* 盖上喷头盖,启动高压 */ + //sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); +#else + sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); +#endif + sysPara->status.waitHightVolOff = 0; + if(!printintFlag)setRunStatus(tr("正在加高压...")); + // 复位计数器 + if(sysPara->status.FileChangeRestCntFlag){ + if(sysPara->para.ResetAllProductCntEn) + { + sysPara->devOp->clearProductCnt(3 | 0x10); // [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt=0; + } + else if(sysPara->para.ResetProductCntEn) + { + sysPara->devOp->clearProductCnt(3); + } + sysPara->status.FileChangeRestCntFlag=0; + sysPara->saveParaToFile(); + } + if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) + PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 + else if(sysPara->para.EditMode == SCENE) + onPreviewScene(); + if(numOfTextChange >= 5){ + numOfTextChange = 0; + emit autoUpdateFontWidthByMainWindow((const unsigned int)sysPara->status.currPrintCol); + } + + if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ + QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); + return ; + } + // LogInfo::setRunStatusText(tr("有效打印区域 %1行 x %2 列").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); + //if(sysPara->para.printTriggerMode != PRINT_TRIGGER_SYNCHRONIZER) + if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + ) + { + int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay; + long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000); + if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs) + && (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD) + && (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME ) + ) // 在电眼方式下,是否需要判呢? + { + QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs)); + return ; + } + } + sysPara->status.isPrinting=false; + sysPara->status.TextInkDots = showPrintBitImage(); + + setRunStatus(tr("开始打印1")); + qDebug()<textEdit->toPlainText()); + SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, + if(sysPara->para.isCheckInsertTime) + { + if(!startPrintingFlag) + { + LogInfo::setRunStatusText(tr("开始打印")); + } + } + else + { + LogInfo::setRunStatusText(tr("开始打印")); + } + /*-------------------------------------------------------------------*/ + ui->labelSynColDelay->setText(""); + sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据 + /*--------------------------------暂停按钮------------------------------*/ + ui->pushButtonPausePrint->setEnabled(true); + // ui->pushButtonPausePrint->setText(tr("暂停打印")); + /*---------------------------------开关回收槽------------------------------*/ + enableReclaimCtrlButton(false); + updatePrintDisplayLabel(); + // 20170717 移动此,以观察条形码打印异常问题。 + if(!startPrintingFlag) + { + sysPara->devOp->printCtrl(PRINT_CTRL_START); + printintFlag = true; + } + else + { + //如果已经在打印,则不要在发送start命令,只要更新相应的数据即可 + if(!printintFlag) //如果在暂停,重复取消暂停 + on_pushButtonPausePrint_pressed(); + } + startPrintingFlag = true;sysPara->status.isPrinting=true; + } +} + +unsigned int MainWindow::showPrintBitImage(){ + if(sysPara){ + unsigned char *dat = sysPara->status.printDat; + unsigned int InkDots = 0; + for(int j = sysPara->status.currPrintCol - 1; j >= 0 ; j --){ + for(int i = 0; i < sysPara->status.currPrintRow; i++){ + if(dat[j*MAX_PRINT_ROW_BYTE_NUM + i/8] & (1<<(i%8))) + InkDots++; + } + } + return InkDots; + } +} + +void MainWindow::SendPrintDataToFpga(unsigned char alterEnable) +{ + if(!sysPara) return ; + fileChange=false; + sysPara->devOp->writeFpgaPrintPara(1); /*务必放在最后一步*/ + sysPara->devOp->writeFpgaVariCtrl(); + + unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; + memset(blankDat,0,sizeof(blankDat)); + sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址 + // 交替打印处理 +#ifdef FXCHG + unsigned char *dat; + size_t sizeofdat; + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + sizeofdat = sizeof(sysPara->status.printDat_Normal); + }else{ + dat =sysPara->status.printDat; + sizeofdat = sizeof(sysPara->status.printDat); + } +// if(sysPara->para.printOnce) +// { +// if(sysPara->status.oneCodePrintOnce) +// { +// sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); +// } +// sysPara->status.oneCodePrintOnce = false; +// } +// else +// { + //sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); + sysPara->devOp->fpgaWr(sizeof(blankDat),dat,sizeofdat-sizeof(blankDat)); +// } + +#else + if(sysPara->para.alterPrint.enable) + { + int len=MAX_PRINT_ROW_BYTE_NUM*(sysPara->status.currPrintCol); + if(alterEnable==1) sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat1,len ); // alter1 + else if(alterEnable==2) sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat2, len); // alter2 + else sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat1, sizeof(sysPara->status.printAlterDat1)-sizeof(blankDat)); // alter2 + } + else + + sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat)); //将要打印的数据发送到fpga +#endif + +#if 0 + int printDataIndex=0; + char xor_value; + QFile xor_record_file("xor_record.txt"); + + for (int i = 0; i< sizeof(blankDat);) { + xor_value = 0; + xor_value ^= blankDat[i]; + xor_value ^= blankDat[i+1]; + xor_value ^= blankDat[i+2]; + xor_value ^= blankDat[i+3]; + xor_value ^= blankDat[i+4]; + sysPara->devOp->fpgaWr(i,blankDat + i,5); + + //sysPara->devOp->readPrintDataXor(); + sysPara->devOp->readbuilDat(); + if (((sysPara->status.build_dat.builTime & 0xFF00)>>8) != xor_value) { + //out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7; + qDebug()<<"sequence "<status.build_dat.builTime & 0xFF00)>>8)<<"xor_value "<status.build_dat.builTime).arg(xor_value)); + } + i = i+5; + printDataIndex = i; + } + + for (int i = 0; i< sizeof(sysPara->status.printDat) - sizeof(blankDat);) { + xor_value = 0; + xor_value ^= sysPara->status.printDat[i]; + xor_value ^= sysPara->status.printDat[i+1]; + xor_value ^= sysPara->status.printDat[i+2]; + xor_value ^= sysPara->status.printDat[i+3]; + xor_value ^= sysPara->status.printDat[i+4]; + sysPara->devOp->fpgaWr(printDataIndex + i, (unsigned char*)sysPara->status.printDat + i, 5); + + //sysPara->devOp->readPrintDataXor(); + sysPara->devOp->readbuilDat(); + if (((sysPara->status.build_dat.builTime & 0xFF00)>>8) != xor_value) { + qDebug()<<"sequence "<status.build_dat.builTime & 0xFF00)>>8)<<"xor_value "<status.reclainTankReachEnd){ + setRunStatus(tr("回收槽未到底!!!!!!")); + } + else if(startPrintingFlag ){ + if(printintFlag) + setRunStatus(tr("正在喷印...............")); + else + setRunStatus(tr("暂停喷印...............")); + } + else + setRunStatus(""); +} + +void MainWindow::on_pushButtonStopPrint_pressed() +{ + if(sysPara->status.isPrinting){ + qDebug("Mainwindow: Printing 停止打印"); + }else{ + qDebug("Mainwindow: Non printing 停止打印"); + } + + if(sysPara){ + if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { + return; + } + sysPara->status.isPrinting=false; + sysPara->devOp->printCtrl2(1); + sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT + LogInfo::setRunStatusText(tr("停止打印")); + if(sysPara->para.EditMode != SCENE) + ui->pushButtonStartPrint->setEnabled(true); + + ui->pushButtonPausePrint->setEnabled(false); + enableReclaimCtrlButton(true); + printintFlag = false; + startPrintingFlag = false; + updatePrintDisplayLabel(); + sysPara->status. waitHightVolOff = 1; +#ifndef __HV_FOR_WANG_DEBUG__ + sysPara->status.waitHightVolOff = 3; +#endif + + sysPara->saveParaToFile(); // 将相关配置保存 + +#ifdef RANDDEBUG + if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) + { + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文本将展出到U盘,请插入U盘"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); + sysPara->devOp->RandTxtBakup(0); //备份到U盘 + LogInfo::setRunStatusText("随机码文件导出完成."); + + } + } +#endif + + } +} + +void MainWindow::on_pushButtonPausePrint_pressed() +{ + if(sysPara){ +#ifdef MIMA + if(sysPara->status.WorkTimeOut && !SIMULATE_PRINTING_MODE) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); + return; + } +#endif + if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { + return; + } + sysPara->devOp->printCtrl(PRINT_CTRL_PAUSE); + LogInfo::setRunStatusText(printintFlag?tr("暂停打印"):tr("继续打印")); + ui->pushButtonStartPrint->setEnabled(true); + printintFlag = !printintFlag; + if(printintFlag) + { + ui->pushButtonPausePrint->setText(tr("继续打印\n保持高压")); + ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(0, 255, 0)}"); + sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); + } + else + { + ui->pushButtonPausePrint->setText(tr("暂停打印\n停止高压")); + ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(255, 0, 0)}"); + } + updatePrintDisplayLabel(); + sysPara->saveParaToFile(); // 将相关配置保存 +#ifdef RANDDEBUG + if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) + { + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文本将展出到U盘,请插入U盘"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); + sysPara->devOp->RandTxtBakup(0); //备份到U盘 + LogInfo::setRunStatusText("随机码文件导出完成."); + } + } +#endif + + } +} + +void MainWindow::resetReclaimCtrlButtonText(){ + ui->pushButtonReclaimTanOpen->setText(tr("开")); + ui->pushButtonReclaimTankClose->setText(tr("关")); +} + +void MainWindow::enableReclaimCtrlButton(bool enable){ + ui->pushButtonReclaimTanOpen->setEnabled(enable); + ui->pushButtonReclaimTankClose->setEnabled(enable); + +} + +void MainWindow::enablePushButtonStart(bool enable) +{ + ui->pushButtonStart->setEnabled(enable); +} + +void MainWindow::enablePrintButton(bool enable){ + ui->pushButtonPausePrint->setEnabled(false); + ui->pushButtonStartPrint->setEnabled(enable); + ui->pushButtonStopPrint->setEnabled(enable); + if(enable && sysPara->para.EditMode == SCENE){ + ui->pushButtonStartPrint->setEnabled(false); + } +} + +static int mainInkPumpCtrlStatus = 0; +static int mainInkPumpCtrlCnt = 0; +//100ms 为单位 +void MainWindow::airPushingProcess() +{ + if(sysPara){ + if (sysPara->status.airPushing) { + //qDebug()<< "start airPushingProcess "<status.airPushingOnTime; + // 执行排气 7 秒 + setRunStatus(tr("正在排气 ...............")); + ++sysPara->status.airPushingOnTime; + if(sysPara->status.airPushingOnTime >= 50) { + static int delayCount = 0; + ++delayCount; + m_2sFlag = true; + //sysPara->devOp->controlInkValve(false); //关供墨阀 + if(delayCount >= 40) + { + m_2sFlag = false; + } + + if(delayCount >= 60) + { + delayCount = 0; + airPushTimer->stop(); + sysPara->devOp->controlViscosityPump(false); + reclaimTanOpen(); + //qDebug()<< "start stop"; + sysPara->status.airPushingDone = 1; + sysPara->status.airPushing = 0; + sysPara->status.airPushingOnTime = 0; + } + + + return; + } + + if (sysPara->status.airPushingOnTime%10 >= 5) { + sysPara->devOp->controlCycleValve(true); + } + else { + sysPara->devOp->controlCycleValve(false); + } + if (mainInkPumpCtrlStatus == 0) { + if(++mainInkPumpCtrlCnt > 15) { //100ms 为单位, 时间到关闭 + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 1; + mainInkPumpCtrlCnt = 0; + } + } + else if (mainInkPumpCtrlStatus == 1) { //100ms 为单位, 时间到开启 + sysPara->devOp->controlMainInkPump(true); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 2; + } + else if (mainInkPumpCtrlStatus == 2) { + if(++mainInkPumpCtrlCnt>7) { + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 3; + mainInkPumpCtrlCnt = 0; + } + } + else if (mainInkPumpCtrlStatus == 3) { + if(++mainInkPumpCtrlCnt>8) { + sysPara->devOp->controlMainInkPump(true); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 4; + mainInkPumpCtrlCnt = 0; + } + } + else if (mainInkPumpCtrlStatus == 4) { + if(++mainInkPumpCtrlCnt>8) { + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->mainInkCtrl(); + mainInkPumpCtrlStatus = 3; + mainInkPumpCtrlCnt = 0; + } + } + } + } +} + +void MainWindow::reclaimTanOpen() +{ + // 还原当前模式 + if (sysPara->status.airPushing) { + sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore; + } + sysPara->status.isPumpValveControledByHand = false; + sysPara->status.canRunAirPushing = 0; + sysPara->devOp->mainInkCtrl(); + sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 + MySleep(1000); + sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); + ui->pushButtonReclaimTanOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("停止"):tr("开")); + ui->pushButtonReclaimTankClose->setText(tr("关")); + enablePrintButton(SIMULATE_PRINTING_MODE); + sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/ + //LogInfo::setRunStatusText(sysPara->devOp->isReclaimTankOpenEnable()?tr("打开回收槽"):tr("停止打开")); + setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开")); + if (!sysPara->para.reclaimTankTime) { + LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); + } + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + sysPara->status.reclainOpenAppending = true; + sysPara->status.reclainCloseAppending = false; + sysPara->status.reclaimBlockedCnt = 0; +} + +void MainWindow::on_pushButtonReclaimTanOpen_pressed() +{ + if(sysPara){ + if(sysPara->status.flagOfSolventMaxNum || sysPara->status.flagOfInkMaxDot) + return; + + if (!sysPara->status.reclaimTankBlockedAppending) { + if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { // 回收槽关闭的情况下才可以执行排气;//2019/10/24 当回收槽未在顶的位置,不需要排气 + if (!sysPara->status.airPushing) { // 先执行排气后开回收槽 + sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand; + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + sysPara->devOp->controlCycleValve(true); +#ifdef __AIR_RELEASE_OLD__ + // 粘度泵跟随循环阀动作 + sysPara->devOp->controlViscosityPump(true); +#else + sysPara->devOp->controlViscosityPump(false);//关粘度泵 +#endif + sysPara->devOp->controlMainInkPump(true);//主墨泵敞开 + sysPara->devOp->mainInkCtrl(); + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + sysPara->devOp->controlInkValve(true); //墨水阀 + sysPara->devOp->controlInkValvePWM(true); //墨水阀 + //qDebug()<< "start airpushings"; + + sysPara->status.airPushing = 1; + sysPara->status.airPushingDone = 0; + sysPara->status.airPushingOnTime = 0; + airPushTimer->start(100); // 100ms + } + } + else + reclaimTanOpen(); + } + if(sysPara->status.reclaimTankBlockedAppending) { + sysPara->status.reclaimTankBlockedAppending = false; + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10; + onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10); + } + } + } +} + +void MainWindow::on_pushButtonReclaimTankClose_pressed() +{ + if(sysPara){ + if(sysPara->status.reclaimTankBlockedAppending){ + sysPara->status.reclaimTankBlockedAppending = false; + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->status.currReclaimTankPos = 0; + onReclainTankPositionChanged(0); + } + } + + sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); + ui->pushButtonReclaimTanOpen->setText(tr("开")); + ui->pushButtonReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("停止"):tr("关")); + enablePrintButton(SIMULATE_PRINTING_MODE); + sysPara->devOp->highVoltageCtrl(0); + //LogInfo::setRunStatusText(sysPara->devOp->isReclaimTankCloseEnable()?tr("关闭回收槽"):tr("停止关闭")); + setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭")); + if(!sysPara->para.reclaimTankTime){ + LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); + } + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + sysPara->status.reclainOpenAppending = false; + sysPara->status.reclainCloseAppending = true; + sysPara->status.reclaimBlockedCnt = 0; + + } +} + +void MySleep(unsigned int msec); +/* + * 关机前务必保存参数 + * */ +void MainWindow::checkForPowerOff(){ + if(sysPara->status.powerOffAppending){ + if(!sysPara->status.selfCheckDone) + sysPara->status.selfCheckDone = true; + this->setDisabled(true); + emit setDisableAll(); +////////关机时提高转速和回收泵压力,粘度泵和循环阀延迟15s打开时间///// + quint16 gearPumpValue_backup = sysPara->para.gearPumpValue; + int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;; + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) + { + sysPara->status.isPumpValveControledByHand = true; //停止自动 + if(sysPara->para.gearPumpEnable ){ + if(!sysPara->para.flagOfReclaimPumEnable){ + sysPara->para.gearPumpValue = 420; + sysPara->devOp->WriteMoterPump(); + } + else{ + sysPara->devOp->controlReclaimPump(true,false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + } + else{ + sysPara->para.reclaimPumpPWMWidth = 95; + sysPara->devOp->controlReclaimPump(true,true); + } + + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlInkValve(false); //关供墨 + sysPara->devOp->controlInkValvePWM(false); //关供墨 + if(!TEST_MODE){ + for(int i=14;i>10;i--) + { + this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*5)); + MySleep(5000); + } + } + if(!sysPara->status.lostCommuFlag){ + sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); + + updateTotalCnt(0); + sysPara->saveParaToFile(); // 关机前将相关配置保存 + } + sysPara->status.powerOffAppending = false; + sysPara->status.isPumpValveControledByHand = true; //停止自动 + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlCycleValve(false); + if(!TEST_MODE){ + for(int i=10;i>0;i--) + { + this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*5)); + MySleep(5000); + } + } + } + system("touch /home/plg/runFlag"); //表示是正常关机 + emit CloseJd(); + sysPara->para.gearPumpValue=gearPumpValue_backup; + sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup; + sysPara->devOp->controlCompressPump(false); + setRunStatus(tr("准备关机......")); + qDebug()<<"准备关机"; + sysPara->para.totalProductCnt +=sysPara->status.totalProductCnt; + sysPara->devOp->clearProductCnt(3 | 0x10);//总产器计数器立即清零 + sysPara->para.ReadFileErrorCnt=0; + sysPara->para.PowerOnErrorCnt=0; + if(sysPara->para.isCntSaveStateValue) + { + sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->para.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); + } + updateTotalCnt(0); + sysPara->saveParaToFile(); // 关机前将相关配置保存 + +#ifdef SYS_LINUX +#ifdef __STC_POWER__ + sysPara->devOp->Heartbeat(0); //发送关机命令 + MySleep(200); + //QProcess process; + //process.startDetached("poweroff"); + //qApp->exit(0); +#endif + system("sync");//缓存同步 + sleep(5); + sysPara->devOp->powerOff(); + QProcess process; + process.startDetached("shutdown -h now"); + //qDebug()<<"run shutdown -h now"; + qApp->exit(0); + //qDebug()<<"qApp->exit(0)"; +#endif + } +} + +void MainWindow::on_pushButtonStart_pressed() +{ + //QFont font; + //font.setPointSize(30); + // ui->pushButtonStart->setFont(font); + QMessageBox::StandardButton ret; + if(pushButtonFlag) + ret = QMessageBox::information(this, tr("提示"), + tr("是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动!"), + QMessageBox::Ok | QMessageBox::Cancel); + else + ret = QMessageBox::information(this, tr("提示"), + tr("是否启动齿轮泵?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + pushButtonFlag = !pushButtonFlag; + if(pushButtonFlag) + { + ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(0, 255, 0)}"); + ui->pushButtonStart->setText(tr("泵启动")); + } + else + { + ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(255, 0, 0)}"); + ui->pushButtonStart->setText(tr("泵停止")); + } + //ui->pushButtonStart->setEnabled(false); + emit pushButtonStartPressed(pushButtonFlag); + } +} + +void MainWindow::_on_pushButtonPowerOff_pressed(bool notice){ + if(sysPara){ + if(sysPara->status.currReclaimTankPos != 0) + { + QMessageBox::StandardButton ret = QMessageBox::Ok; + if(notice) + ret = QMessageBox::warning(this, tr("警告"), + tr("回收槽未关,是否关闭回收槽后关机!"), + QMessageBox::Ok | QMessageBox::Cancel); + if (!notice || ret == QMessageBox::Ok){ + + system((char *)((QString("mkdir %1").arg(TESTDIR)).toAscii().data())); + system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toAscii().data())); //先备份UP* + sysPara->status.reclaimCloseCnt=10; + on_pushButtonStopPrint_pressed(); + on_pushButtonReclaimTankClose_pressed(); + sysPara->status.powerOffAppending = true; + enableReclaimCtrlButton(false); //所有的按钮全部屏蔽 + } + } + else { + QMessageBox::StandardButton ret = QMessageBox::Ok; + if(notice) + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认关机?"), + QMessageBox::Ok | QMessageBox::Cancel); + + if (!notice || ret == QMessageBox::Ok){ + sysPara->status.powerOffAppending = true; + //system((char *)((QString("mkdir %1").arg(TESTDIR)).toAscii().data())); + //system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toAscii().data())); //先备份UP* + checkForPowerOff(); + } + } + } +} +void MainWindow::on_pushButtonPowerOff_pressed() +{ + _on_pushButtonPowerOff_pressed(true); +} + +void MySleep(unsigned int msec) +{ + + QTime dieTime = QTime::currentTime().addMSecs(msec); + + while( QTime::currentTime() < dieTime ) + + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); + +} + +//extern MyInputMethod *myInputMethod; + +void MainWindow::ontextEdittextChanged() +{ + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + QSizeF size = ui->textEdit->document()->size(); + sysPara->status.textEditTotalCol = size.width(); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(size.height()).arg(size.width())); + if(size.width() > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ + myInputMethod->getInputMethod()->on_Key_Backspace_released(); + MySleep(300); + } + if(size.width() == 0) + { //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件 + onTextEditCursorPositionChanged(); + } + + if(0 10) + { + numOfTextChange = 0; + emit autoUpdateFontWidthByMainWindow((const unsigned int)size.width()); + } +} +QPoint QTextCursorPos(const QTextEdit * myTextEdit) +{ + QPoint pt; + QTextCursor tc=myTextEdit->textCursor(); + QTextLayout *pLayout=tc.block().layout(); + pt.setY(tc.position()-tc.block().position()); + pt.setX(pLayout->lineForTextPosition(pt.y()).lineNumber()+tc.block().firstLineNumber()); + return pt; +} + +void MainWindow::onTextEditCursorPositionChanged(){ + for(int i = 0; i < 2; i++){ + QTextCharFormat fmt = ui->textEdit->currentCharFormat (); + QString s = ui->textEdit->document()->toPlainText(); + QFont font = fmt.font(); + QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); + QLabel *labelFontFamily = ui->textEditOption->getLabelFontFamily(); + QCheckBox *checkBoxBold = ui->textEditOption->getCheckBoxBold(); + bool ok; + //qDebug()<<"onTextEditCursorPositionChanged"<< font.family()<text().toInt(&ok,10)<logicalDpiX(); + DPI = DPI?DPI:1; + int pixeSize = font.pointSizeF()*DPI/72; + if(pixeSize >= Public::getMinFontPixelSize()){ + labelFontSize->setText(QString::number(Public::getAdjustedPixelSize(pixeSize))); + checkBoxBold->setChecked(font.weight() == QFont::Bold); + labelFontFamily->setText(font.family()); + barcode->setFontSize(Public::getAdjustedPixelSize(pixeSize)); + break; + } + else { + if(s.length()<=1) { + ui->textEdit->selectAll(); + font.setFamily(Public::getFontFamily(labelFontSize->text().toInt(&ok,10) )); + ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 + ui->textEdit->moveCursor(QTextCursor::End); + } else + ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 + } + } + } +} + +void MainWindow::onLabelFaultRusumePressed(){ + if(sysPara){ + sysPara->status.flagOfSpeedAlarm = false; + sysPara->status.mainInkPumpError = false; + sysPara->status.mainInkPumpRunTmCnt = 0; + sysPara->status.compressPumpError = false; + sysPara->status.compressPumpRunTmCnt = 0; + sysPara->devOp->resumeFault(); + ui->labelRunStatus->clear(); + sysPara->status.beeperOnFlag = false; + sysPara->devOp->controlBeeper(false); + sysPara->status.heaterONTimeCnt = 0; //加热块计数清零 + ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + sysPara->status.DACDisable = false; + sysPara->status.lastPhaseFault = 0; + sysPara->status.phaseErrorCnt = 0; + sysPara->status.lastHighVoltageFault = false; + + if(sysPara->status.gearPumpRunStopFlag && pushButtonFlag) + { + emit repeatInitedPid(); + sysPara->status.gearPumpRunStopFlag = false;//齿轮泵报警恢复 + } + if((sysPara->devOp->color_flag == 2) ||(sysPara->devOp->color_flag == 1)) + { + sysPara->devOp->color_flag = 3; + sysPara->devOp->controlYellowLight(false); + sysPara->devOp->controlRedLight(false); + } + sysPara->status.visocityValueOverflowNum = 0; + + if(sysPara->status.visocityValueOverflowNum>=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM) // + sysPara->status.viscosityFault = 0; + + sysPara->status.powerOffAfterPhaseFaultAppending = 0; + sysPara->status.lastwarmInkPump = 0; + sysPara->status.RecycleWarnCnt =0; + sysPara->status.lastRecycleWarn =0 ; + sysPara->status.powerOffAfterInkOrSOLVEmptyAppending=0; + //sysPara->status.lastStatWarn=0; // 机器报故障后,点击故障恢复按钮,再点击打印按钮,“正在喷印中…”字符未立即显示出来,需等待大约10秒才会出现。 + //LogInfo::setRunStatusText(tr("故障恢复")); + sysPara->status.RecycleWarnCnt=0; + sysPara->status.HVFaultCloseEn=0; + + if(sysPara->status.flagOfPressureFault){ + sysPara->status.flagOfPressureFault = false; + sysPara->status.isPumpValveControledByHand = false; + sysPara->devOp->mainInkCtrl(); + emit clearPressureFault(); + } + + if(printintFlag) { + //#ifdef __HV_FOR_WANG_DEBUG__ + sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); + } + } +} + +void MainWindow::onModbusPrintReceivedContent(int num) +{ + QTextEdit textEdit; + QString str1 = QString::number(num)+"-"; + if(str1.size()==2) + str1 = " "+str1; + QString str2 = ""; + int len = str1.length(); + for (int i = 0; i < len; i++) { + str2[i] = str1[len-1-i]; + } + QString fileName = "/home/plg/doc/serif7dots.html"; + textEdit.insertHtml(QString("" + "%3 %6") + .arg("SerifL").arg(5).arg(str1) + .arg("SerifR").arg(5).arg(str2)); + + QTextDocumentWriter writer(fileName); + if(!writer.write(textEdit.document())) + LogInfo::setRunStatusText(tr("保存html文件失败!")); + ui->textEditOption->onFileOpen(fileName,false); + on_pushButtonStartPrint_pressed(); +} + +void MainWindow::onEnableReclaimCtrlButton(bool flag) +{ + enableReclaimCtrlButton(flag); +} + +void MainWindow::onInkJetPrinterCurrentChanged(int index) +{ + ui->senceEditOption->onInkJetPrinterCurrentChanged(index); +} + +void MainWindow::onLabelProductCntPressed(){ + if(sysPara){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否初始化产品计数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + updateTotalCnt(0); + sysPara->devOp->clearProductCnt(1); + sysPara->saveParaToFile(); + + } + } +} + +void MainWindow::onLabelTotalProductCntPressed(){ + if(sysPara){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否清除总产品计数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->clearProductCnt(1 | 0x10 );// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + + } + } +} + +void MainWindow::onPushButtonCNTResetNowPressed(){ + if(sysPara){ + + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否立即重新计米?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + } + + } + + + +} + +void MainWindow::on_bottonEditText_pressed() +{ + //qDebug()<<"EditMode"<para.EditMode; + if(sysPara->para.EditMode==TXTFILE){ + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + ontextEdittextChanged(); //显示大小 + int coldot = (int)ui->textEdit->document()->size().width(); + if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + { + coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + QMessageBox::warning(this, tr("警告"), + tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); + } + } + else if(sysPara->para.EditMode==PICFILE){ + emit openCurrFile(sysPara->para.lastOpenedFileName); + } + else if(sysPara->para.EditMode==SCENE){ + //qDebug()<<"SCENE"; + //emit openCurrFile(sysPara->para.lastOpenedFileName); + ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); + ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); + } + +} + +void MainWindow::on_pushButtonReduceTextDisplay_pressed() +{ + ui->widgetPrintTextDisplay->reduceDisplay(); +} + +void MainWindow::on_pushButtonEnlargeTextDisplay_pressed() +{ + + ui->widgetPrintTextDisplay->enlargeDisplay(); + //update(); +} + +/* + * value以100ms为单位 + * */ +void MainWindow::onReclainTankPositionChanged(int value){ + static bool init = false; + static int totalCharNum = 0; + if(!init){ + int w = ui->labelReclaimStatus->geometry().width() - 1; //预留几个像素 + QFontMetrics fontMetrics = QApplication::fontMetrics(); + w -= fontMetrics.width(QString(" |>|")); + int t = fontMetrics.width(QChar('-')); + if(fontMetrics.width(QChar('-')) != fontMetrics.width(QChar(' '))){ + LogInfo::setRunStatusText(tr("警告:‘-’和空格的宽度不一样")); //可能有的字体两者宽度不同 + } + totalCharNum = t?w/t:w; //t永远都不应该为零,保险起见 + init = true; + } + if(sysPara){ + int reclaimTime = sysPara->para.reclaimTankTime?sysPara->para.reclaimTankTime:15; + int charNum = value*totalCharNum/(reclaimTime*10); + charNum = (charNum > totalCharNum)?totalCharNum:charNum; + QString str = " |"; + for(int i = 0; i <= totalCharNum; i++){ //多加”>|“ + if(i < charNum) + str.append(QChar('-')); + else if(i == charNum) + str.append(QChar('>')); + else + str.append(QChar(' ')); + } + str.append(QChar('|')); + ui->labelReclaimStatus->setText(str); + } +} + + +void MainWindow::setRunStatus(QString str){ + switch(sysPara->devOp->color_flag){ + case 1: + ui->labelRunStatus->setStyleSheet("color:yellow"); + break; + case 2: + ui->labelRunStatus->setStyleSheet("color:red"); + break; + default: + ui->labelRunStatus->setStyleSheet("color:black"); + break; + } + ui->labelRunStatus->setText(str); +} + + +void MainWindow::changeTxtMode(QString str){ + if(sysPara){ + fileChange=true; + sysPara->status.FileChangeRestCntFlag = true; + emit openFileChange(); + unsigned char SpecialVarEnable = 0; + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); + } +} + +void MainWindow::update_scroll() +{ + ui->widgetPrintTextDisplay->scroll_update(); +} + +void MainWindow::changeEditMode(int editMode) +{ + if(sysPara){ + //qDebug()<<"changeEditMode"<para.EditMode; + if(sysPara->para.EditMode==PICFILE){ + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->widgetPrintTextDisplay->update(); + ui->pushButtonTXTOpen->show(); + ui->textEditOption->editMode=sysPara->para.EditMode; + } + else if(sysPara->para.EditMode==TXTFILE) + { + // ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + // ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + sysPara->para.EditMode=TXTFILE; + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + ui->widgetPrintTextDisplay->update(); + ui->pushButtonTXTOpen->hide(); + ui->textEditOption->editMode=sysPara->para.EditMode; + ui->textEditOption->editItemModeDone(); + } + else if(sysPara->para.EditMode==SCENE) + { + //qDebug()<<"CCCCCENE"; + sysPara->para.EditMode=SCENE; + ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); + ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); + ui->widgetPrintTextDisplay->update(); + ui->pushButtonTXTOpen->hide(); + ui->textEditOption->editMode=sysPara->para.EditMode; + //edit@12-12 + ui->senceEditOption->show_scene_new_dlg(); + } + //ontextEdittextChanged(); //显示大小 20140831 + if(sysPara->para.EditMode==SCENE) + { + onSwitchTimerShowItem(true); + } + else + { + onSwitchTimerShowItem(false); + } + } +} + +TextEditOption* MainWindow::getTexteditOption() +{ + return ui->textEditOption; +} + +void MainWindow::SetEditMode(int mode) +{ + ui->textEditOption->editMode = sysPara->para.EditMode; + // if(sysPara->para.EditMode==SCENE) + // { + // timerShowItem->start(10); + // } +} + +void MainWindow::setRunStatus(QPixmap pixMap){ + ui->labelRunStatus->setPixmap(pixMap); +} +void MainWindow::SetMainTabEdit(int n){ + +} + +void MainWindow::testPrint(){ + //on_pushButtonStartPrint_pressed(); +} + + +void MainWindow::onEditBarCode(){ +#ifdef _2DCODE_ + if(sysPara) { + dlgqrcode->move( 0,10); + barcode->setWindowTitle(tr("条形码信息编辑")); + //qDebug()<<"bcOption->height"<para.bcOption.height; + barcode->SetOption((bcOption_t*)&sysPara->para.bcOption); + barcode->show(); + //barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + } +#endif + +} +void MainWindow::onBarCodeClose(){ +#ifdef _2DCODE_ + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + unsigned char *dat; + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + if(barcode->flagCount) + { + barcode->getDat(dat,0); + barcode->flagCount=0; + ui->widgetPrintTextDisplay->update(); + } + if(barcode->flagInsert ) + { + barcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE) + { + + } + else + { + //ui->textEditOption->InsertBarCodeToEdit(barcode->pictureName,barcode->imgBar.width(),barcode->imgBar.height()); + QString html = ""; + QTextCharFormat fmt = ui->textEditOption->textEdit->currentCharFormat (); + ui->textEditOption->textEdit->insertHtml (html); + ui->textEditOption->textEdit->mergeCurrentCharFormat(fmt); + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + } + } + sysPara->saveParaToFile(); +#endif +} + +void MainWindow::onEditQRCode(){ +#ifdef _2DCODE_ + if(sysPara) { + dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); + dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); + dlgqrcode->setWindowTitle(tr("二维码信息编辑")); + + dlgqrcode->setCntCheckBoxHide(1); + + dlgqrcode->show(); + } +#endif +} +void MainWindow::onInitQRCode(){ +#ifdef _2DCODE_ + if(sysPara) { + dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); + dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); + dlgqrcode->setWindowTitle(tr("二维码信息编辑")); + //dlgqrcode->show(); + } +#endif +} +void MainWindow::onQRCodeClose(){ +#ifdef _2DCODE_ + dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + if(dlgqrcode->flagInsert ) { + //dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + dlgqrcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + + } + else { + // qDebug()<<"flagInsert2"<flagInsert<bcWidth<bcHeight; + ui->textEditOption->InsertBarCodeToEdit(dlgqrcode->pictureName,dlgqrcode->bcWidth,dlgqrcode->bcHeight); + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + + } + } + if( sysPara->para.qrOption.barCodeFlag != dlgqrcode->barCodeFlag) + { + sysPara->para.qrOption.barCodeFlag = dlgqrcode->barCodeFlag; + ui->textEditOption->textEdit->setHtml(QApplication::translate("MainWindow", "\n" + "\n" + "


      ", 0, QApplication::UnicodeUTF8)); + } + sysPara->saveParaToFile(); +#endif +} + +void MainWindow::onGenerateQRCode(QString strData) +{ + dlgqrcode->extSetText(strData); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); +} + +void MainWindow::onShowAndHideItem() +{ + /////////特殊条件 + //while(1) + { + static bool startFlag= false, lastStarFlag = false; + + QList items = pPicScene->items(); + foreach (QGraphicsItem *item, items) + { + PicTextItem *picText = qgraphicsitem_cast(item); + if(picText->SpecialConditions) + { + //setRunStatus(tr("六个内容(%1,%2)").arg(picText->CatchCnt1CurrValue).arg(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt())); + if(picText->CatchCnt1StartValue <= QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() && + QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() <= picText->CatchCnt1CurrValue) + { + picText->show(); + startFlag = true; + } + else + { + picText->hide(); + startFlag = false; + } + if(startFlag != lastStarFlag) + { + lastStarFlag = startFlag; + //on_pushButtonStartPrint_pressed(); + if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) + PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 + else if(sysPara->para.EditMode == SCENE) + onPreviewScene(); + // unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; + // memset(blankDat,0,sizeof(blankDat)); + // sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址 + // sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat)); + } + } + } + //QApplication::processEvents(); + } + ////////////// +} + +void MainWindow::onSwitchTimerShowItem(bool flag) +{ + if(flag) + { + // timerShowItem->start(10); + } + else + { + timerShowItem->stop(); + unsigned char SpecialVarEnable = 0; + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); + } +} + +void MainWindow::JSON_UpdateDATA(){ + + QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); + bool ok; + int font_size = labelFontSize->text().toInt(&ok,10); + QString font_family = Public::getFontFamily(font_size); + static int save_uniCode = 33; //数据码固定33位 + ui->textEditOption->textEdit->clear();//宴令需要屏蔽 + + QString strContentPrint(sysPara->Get_JSON_DATA.PrintingContent); + strContentPrint.replace(' '," "); + QString strContent = sysPara->Get_JSON_DATA.QRCodeContent; + int left_int = strContent.indexOf("https://dwz.cn/"); + if(left_int == 0) + { + strContent = strContent.mid(8, strContent.size()); + strContent = "www." + strContent; + } + if(sysPara->para.isRemoveCode) + { + QSize size(2,5); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.fill(0x00f0f000);//填充白色 + // QPainter painter(&image); + // //image.save("./printImage.jpg"); + // ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + image.save("/home/plg/doc/modbusQR.bmp"); + } + else + { + if(dlgqrcode->barCodeFlag == 1) + { + barcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str())); + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + } + else + { + dlgqrcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str()), true); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + } + } + QString save_text = ui->textEditOption->textEdit->toHtml(); + + if(save_text.contains("", Qt::CaseSensitive)){ + int left_int = save_text.indexOf(""); + QString str_html = save_text.left(left_int); //get the QRcode pic left html + QString right_str_html = save_text.mid(left_int, save_text.size()); + + + // qDebug()<<"right_str_html="<").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + //str_html += QString::fromUtf8(sysPara->Get_JSON_DATA.PrintingContent); + str_html += strContentPrint.toUtf8(); + str_html += ""; +#endif + + if(!sysPara->para.isRemoveDigitCode) + { + str_html += ""; + + // qDebug()<<"str_html="< + 201289985295612398451182413082479asd + + asdasdasdasd

      + */ + + left_int = right_str_html.indexOf(";\">") + 1; + int index_size = QString(";\">").size(); + QString right_html = right_str_html.mid(left_int+index_size+save_uniCode, right_str_html.size()); + save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); + // qDebug()<<"right_html="< ").arg(font_family) + .arg(font_size).arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); + + if(!right_html.startsWith("<")){ //situation: "$ProductUniqueCodexxxx" + QString crash_word = right_html.left(right_html.indexOf("<")); + txt_fomart += crash_word; + // qDebug()<<"crash_word="<"); + index_size = QString("").size(); + QString final_str = right_html.mid(left_int +index_size, right_html.size()); + + str_html += final_str; + } + else + { + str_html += right_str_html; + } + // QMessageBox::StandardButton ret; + // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); + // if (ret == QMessageBox::Ok) + { + ui->textEditOption->textEdit->setHtml(str_html); + ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + } + }else{ + QString txt_fomart = ""; +#if 1//宴令需要屏蔽 + txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += strContentPrint.toUtf8(); + txt_fomart += ""; +#endif + //ui->textEditOption->textEdit->insertHtml(txt_fomart); + + //ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp"); + //QString html = ""; + txt_fomart += ""; + + if(!sysPara->para.isRemoveDigitCode) + { + txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); + save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); + txt_fomart += ""; + } + else + { + txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size); + } + // QMessageBox::StandardButton ret; + // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); + // if (ret == QMessageBox::Ok) + { + ui->textEditOption->textEdit->insertHtml(txt_fomart); + } + // QString refresh_text = ui->textEditOption->textEdit->toHtml(); + // ui->textEditOption->textEdit->setHtml(refresh_text); + // ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + } + + if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) + PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 + else if(sysPara->para.EditMode == SCENE) + onPreviewScene(); + //on_pushButtonStartPrint_pressed(); + + ui->label_24->setFocus(); //prevent keyboard pop up +} + +QStringList stringListRecive; + +// mdOpenFile(QString("/home/plg/doc/%1").arg(fileName)); +void MainWindow::modbusUpdateQRCode(){ + // QString temp = QString(); + sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 + sysPara->status.printDoneFlag = false; + static QString lastReceiveContent = ""; + char temp[120] = {0}; + int i,j = 0; + for(i=0; i<110; i+=2) + { + //if(sysPara->modbusParas.QRcode_buf[i] == 0) break; + temp[j] = sysPara->modbusParas.QRcode_buf[i]; + j++; + } + if(strlen(&temp[1]) == 0) + { + LogInfo::setRunStatusText(tr("获取DM码内容为空!")); + return; + } + + if(sysPara->para.EditMode == TXTFILE) + { + QString receiveContent = QString::fromUtf8(&temp[1]); + dlgqrcode->extSetText(receiveContent); + LogInfo::setRunStatusText(tr("获取DM码内容:")); + LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); + + // dlgqrcode->extSetText("asbasb"); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + + // ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp"); + ui->textEditOption->textEdit->clear();//插入之前先清空 + //ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp"); + QString html = ""; + ui->textEditOption->textEdit->setHtml(html); + ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + //sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 + if(receiveContent == lastReceiveContent) + { + LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); + //sysPara->modbusStatus.printFinishFlag = 1;//置打印标志 + MySleep(200); + sysPara->status.printDoneFlag = true; + return; + } + lastReceiveContent = receiveContent; + sysPara->status.oneCodePrintOnce = true; + on_pushButtonStartPrint_pressed();//开始打印 + } + else if(sysPara->para.EditMode == SCENE) + { + QString receiveContent = QString::fromUtf8(&temp[1]); + LogInfo::setRunStatusText(tr("获取DM码内容:")); + LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); + if(receiveContent == lastReceiveContent) + { + LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); + MySleep(200); + sysPara->status.printDoneFlag = true; + return; + } + lastReceiveContent = receiveContent; + + stringListRecive = receiveContent.split(";"); + + QString lastopenedFileName = sysPara->para.lastOpenedFileName; + lastopenedFileName = QFileInfo(lastopenedFileName).baseName(); + int left_int = lastopenedFileName.indexOf('@'); + if(left_int == 0) + { + sysPara->status.forTemplateUse = true; + emit scenefileOpen(sysPara->para.lastOpenedFileName,false);//sceneeditoption 接收这个信号然后打开文件 + //emit fileNameChanged(QFileInfo(filePath).fileName()); + sysPara->status.forTemplateUse = false; + sysPara->status.oneCodePrintOnce = true; + on_pushButtonStartPrint_pressed();//开始打印 + } + } + + +} + +void MainWindow::onUpdateDispQRCode(int type){ +#ifdef _2DCODE_ + int varNum; + + qDebug()<<"onUpdateDispQRCode"; + //QRcode string test + // static int cc = 0; + for(varNum=0;varNumstatus.QRvariNum;varNum++){ + + + if(sysPara->print.QRvars[varNum].type<2) + { + sysPara->print.QRvars[varNum].Counter = sysPara->para.qrOption.counter; + sysPara->print.QRvars[varNum].cntNum = sysPara->para.qrOption.cntNum; + + //QRcode string test + // qDebug()<<"QRcode string test"; + // ++cc; + // QString text = "12345679801234567980123456798012345679801234567980"; + // text+=QString::number(cc%100); + // dlgqrcode->extSetText(text); + // dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + + + dlgqrcode->TextToQRImg((qrOption_t *)&sysPara->para.qrOption); // + dlgqrcode->getDat(sysPara,varNum); + }else if(sysPara->print.QRvars[varNum].type==2) + { + QString txt,txt2,txt3,txt4,txtVar1,txtVar2; + //char fmt[]="%08d%04d"; + txt2=sysPara->para.bcOption.TxtModule; + txt3=sysPara->para.bcOption.TxtLine; + txt4=sysPara->para.bcOption.TxtLine1; + sysPara->para.bcOption.var1Type =1; + sysPara->para.bcOption.var2Type =2; + txtVar1=barcode->getVarTxt(sysPara->para.bcOption.var1En,sysPara->para.bcOption.var1Type); + txtVar2=barcode->getVarTxt(sysPara->para.bcOption.var2En,sysPara->para.bcOption.var2Type); + //txt.sprintf(fmt,sysPara->status.calandar_and_dat.cnt1CurrValue,sysPara->status.calandar_and_dat.cnt2CurrValue); + txt = txt2.trimmed()+txtVar1+txt3.trimmed()+txtVar2+txt4.trimmed(); + barcode->TextToBCImg((bcOption_t *)&sysPara->para.bcOption,txt); // + barcode->getDat2(sysPara,varNum); + //qDebug()<<"update BAR"<status.calandar_and_dat.cnt1CurrValue<status.calandar_and_dat.cnt2CurrValue; + //qDebug()<print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; + if(sysPara->status.currPrintCol < (sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)) { + sysPara->status.currPrintCol = sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width; + } + if (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos) { + sysPara->status.currPrintRow = sysPara->print.QRvars[varNum].endRowPos; + } + //sysPara->status.currPrintCol = (sysPara->status.currPrintColprint.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)? + // sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width:sysPara->status.currPrintCol; + //sysPara->status.currPrintRow = (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos)?sysPara->print.QRvars[varNum].endRowPos:sysPara->status.currPrintRow; + + // qDebug()<<"onUpdate:"<< sysPara->print.QRvars[varNum].startColPos + // <print.QRvars[varNum].endRowPos <print.QRvars[varNum].width + // <print.QRvars[varNum].height <print.QRvars[varNum].type; + } + + if(type) + { + + sysPara->para.qrOption.DisplayUpdate=1; + // ui->widgetPrintTextDisplay->updateSysStatusToUI(); + if(sysPara->status.addSpace) + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); + else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow ).arg(sysPara->status.currPrintCol)); + ui->widgetPrintTextDisplay->update(); + //qDebug()<<"update BAR ??"; + } +#endif +} + +int MainWindow::searchExpiryVar() +{ + int varNum = 0; + if( sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum || sysPara->status.classVariNum) + { + QString pattern = ""; + // 1 type ,2 name,3 width,4 height + //

      < + // + QRegExp rx(pattern); + QString textHtml = ui->textEdit->toHtml(); + int from = 0; + // int xx =textHtml.size(); + sysPara->print.ExpiryVar.type = 0; + sysPara->print.CurDateVar.type = 0; + //sysPara->print.CurDateVar[1].type = 0; + sysPara->print.ClassVari.type = 0; + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(rx,from); + bool ok; + //qDebug()<print.ExpiryVar.type = type; + sysPara->print.ExpiryVar.width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->print.ExpiryVar.height = rx.cap(4).toInt(&ok); + //sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-sysPara->print.ExpiryVar.height; + sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-(sysPara->print.ExpiryVar.height-1); + if(sysPara->print.ExpiryVar.startRowPos < 0) + { + sysPara->print.ExpiryVar.startRowPos = 0; + } + if(rx.cap(2).contains("75")) + { + sysPara->print.ExpiryVar.bold = 1; + } + else + { + sysPara->print.ExpiryVar.bold = 0; + } + // 直接更新有效期,并退出? + ExpiryDotUpdate(1); + varNum++; + } + else if(type == CURDATE || type==CURDATE + 10 || type==CURDATE + 20 || type==CURDATE + 30) + { //currDate + //qDebug()<<"CurDateVar:"<print.CurDateVar[0].type == 0) { + qDebug()<<"1st CurDateVar:"; + currDate = &sysPara->print.CurDateVar[0]; + searchIndex = 2; + } + else { + qDebug()<<"2nd CurDateVar:"; + currDate = &sysPara->print.CurDateVar[1]; + searchIndex = 3; + } + currDate->type = type; + currDate->width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + currDate->height = rx.cap(4).toInt(&ok); + currDate->startRowPos = currDate->endRowPos-currDate->height; + if(rx.cap(2).contains("875")) { + //qDebug()<<"bold"; + currDate->bold = 1; + } + else { + //qDebug()<<"normal"; + currDate->bold = 0; + } +#else + sysPara->print.CurDateVar.type = type; + sysPara->print.CurDateVar.width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->print.CurDateVar.height = rx.cap(4).toInt(&ok); + //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-sysPara->print.CurDateVar.height; + sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); + if(sysPara->print.CurDateVar.startRowPos < 0) + { + sysPara->print.CurDateVar.startRowPos = 0; + } + if(rx.cap(2).contains("875")) + { + //qDebug()<<"bold"; + sysPara->print.CurDateVar.bold = 1; + } + else + { + //qDebug()<<"normal"; + sysPara->print.CurDateVar.bold = 0; + } +#endif + //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); + //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; + // 生产日期即当前日期 + ExpiryDotUpdate(2); + varNum++; + } + else if(type == CURCLASS) + { + //qDebug()<<"CURCLASS:"<print.ClassVari ; + currClass->type = type; + currClass->width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + currClass->height = rx.cap(4).toInt(&ok); + currClass->startRowPos = currClass->endRowPos-currClass->height-1; + if(rx.cap(2).contains("875")) { + //qDebug()<<"bold"; + currClass->bold = 1; + } + else { + //qDebug()<<"normal"; + currClass->bold = 0; + } + + //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); + //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; + // 生产日期即当前日期 + ExpiryDotUpdate(3); + varNum++; + } + } + else if(varNum>=3) break; + } + //break; + //if(varNum>sysPara->status.ExpiryVarNum)break; + } + } + return varNum; +} +void MainWindow::ExpiryDotUpdate(char Mode) +{ //更新有效期 + QTextEdit textEdit; + //textEdit.document()->setDocumentMargin(0); + textEdit.setLineWrapMode(QTextEdit::NoWrap); + int height,width; + //QDate curDate=QDate::currentDate(); + EXPIRYVAR_t *p_var;//=(Mode==1)?&sysPara->print.ExpiryVar:&sysPara->print.CurDateVar; + + if(sysPara->status.flagOfAdjustWidth_1){ + sysPara->print.ExpiryVar.splitMode = sysPara->status.splitMode_Adjust_1; + sysPara->status.flagOfAdjustWidth_1 = false; + } + if(sysPara->status.flagOfAdjustWidth_2){ + sysPara->print.CurDateVar.splitMode = sysPara->status.splitMode_Adjust_2; + sysPara->status.flagOfAdjustWidth_2 = false; + } + if(Mode==1) + { + qDebug()<<"Mode==1"; + if(sysPara->status.ExpiryVarNum == 0) { + return; + } + p_var = &sysPara->print.ExpiryVar; + QDate expiryDate=QDate::currentDate().addDays(sysPara->para.ExpiryDay); + sysPara->print.ExpiryVar.year = expiryDate.year(); + sysPara->print.ExpiryVar.month = expiryDate.month(); + sysPara->print.ExpiryVar.day = expiryDate.day(); + r_ExpiryDay = sysPara->para.ExpiryDay; + } + else if(Mode==2) + { + p_var = &sysPara->print.CurDateVar; + // qDebug()<<"Mode==2"; + if(sysPara->status.CurrDateVariNum == 0) { + return; + } +#if 1 + // EXPIRYVAR_t *currDateVar; + // for (int i = 0; i <2; ++i) { + // if (sysPara->print.CurDateVar[i].type) { + // currDateVar = &sysPara->print.CurDateVar[i]; + // currDateVar->year = curDate.year(); + // currDateVar->month = curDate.month(); + // currDateVar->day = curDate.day(); + // } + // } +#else + sysPara->print.CurDateVar.year = curDate.year(); + sysPara->print.CurDateVar.month = curDate.month(); + sysPara->print.CurDateVar.day = curDate.day(); +#endif + } + else if(Mode==3) + { + p_var = &sysPara->print.ClassVari; + qDebug()<<"Mode==3"; + if(sysPara->status.classVariNum == 0) { + return; + } +#if 1 + // EXPIRYVAR_t *currDateVar; + // for (int i = 0; i <2; ++i) { + // if (sysPara->print.CurDateVar[i].type) { + // currDateVar = &sysPara->print.CurDateVar[i]; + // currDateVar->year = curDate.year(); + // currDateVar->month = curDate.month(); + // currDateVar->day = curDate.day(); + // } + // } +#else + sysPara->print.CurDateVar.year = curDate.year(); + sysPara->print.CurDateVar.month = curDate.month(); + sysPara->print.CurDateVar.day = curDate.day(); +#endif + } + else return; + //qDebug()<<"sysPara->status.ExpiryVarNum:"<status.ExpiryVarNum; + //if(sysPara->status.ExpiryVarNum) + { + textEdit.clear(); + height = p_var->height; + width = p_var->width; + + //qDebug()<<"height"<para.ExpirySplitMode) + // { + // case 0: str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day());break; + // case 1: str.sprintf("%04d/%02d/%02d",curDate.year(),curDate.month(),curDate.day());break; + // case 2: str.sprintf("%04d%02d%02d",curDate.year(),curDate.month(),curDate.day());break; + // case 3: str.sprintf("%04d年%02d月%02d日",curDate.year(),curDate.month(),curDate.day());break; + // default:str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day());break; + // } + + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + //dateFormat.insert(10,"x"); + + /*****轮班变量功能 start******/ + /*00:00-08:00 + 08:00-16:00 + 16:00-00:00 + */ + QTime current_time =QTime::currentTime(); + int hour = current_time.hour(); + //qDebug()<<"current_hour="<para.ExpiryDay).toString(dateFormat.value(sysPara->print.ExpiryVar.splitMode)); + } + else if(Mode==2 ) { + DateTime = QDateTime::currentDateTime().toString(dateFormat.value(p_var->splitMode)); + std::cout<<"p_var splitModeP:"<(p_var->splitMode)<= 0 && hour <8) + { + dateFormat.insert(15,"A"); + DateTime = "A"; + } + else if(hour >= 8 && hour < 16) + { + dateFormat.insert(15,"B"); + DateTime = "B"; + } + else if(hour >= 16) + { + dateFormat.insert(15,"C"); + DateTime = "C"; + } + } + + /*****轮班变量功能 end******/ + //qDebug()<<"splitMode:"<splitMode; + //qDebug()<<"update DateTime:"<height); + //qDebug()<<"height"<bold:"<bold; + if(p_var->bold) { + textEdit.insertHtml(QString("%4") + .arg(Public::getFontFamily(height-1,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*72/DPI-1) + .arg(600) + .arg(DateTime) + ); //600表示加粗,400表示普通 + } + else { + textEdit.insertHtml(QString("%4") + .arg(Public::getFontFamily(height-1,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*72/DPI-1) + .arg(400) + .arg(DateTime) + // .arg("x") + ); //600表示加粗,400表示普通 + } + + //qDebug()<bold?QFont::Bold:QFont::Normal); + //QFontMetrics fontMetrics(font); + //int charWidth = (fontMetrics.width("0123456789"))/10 ; + //p_var->letterSpace = p_var->width/10/(sysPara->status.addSpace?2:1) - charWidth; + //font.setLetterSpacing(QFont::AbsoluteSpacing,p_var->letterSpace); + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace ); + textEdit.setFont(font); + //textEdit.document()->setDocumentMargin(0); + //qDebug()<para.ExpirySplitMode; + + int imgHeight = height + 12; + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + if(imgHeight> MAX_PRINT_ROW_NUM+12) + imgHeight = MAX_PRINT_ROW_NUM+12; + if(width> (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + width = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + QSize size(width+2,imgHeight); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff); + QPainter painter(&image); + textEdit.show(); //如果不显示,似乎不会绘制 + textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + textEdit.hide(); + //qDebug()<<"/Expiry.bmp"; + image.save("./Expiry.bmp"); +#ifdef DEBUG4 + image.save("./Expiry.bmp"); +#endif + int lastValidRow = 0; + for(int k = imgHeight - 1; k >= 0 ; k--){ + for(int j = 0; j < width+1; j ++){ + QRgb rgb = image.pixel(j,k); + if(rgb&0xff000000){ + lastValidRow = k + 1; + break; + } + } + if(lastValidRow != 0) + { + //qDebug()<<"lastValidRow"<status.ExpiryVarNum:"<status.ExpiryVarNum; + //qDebug()<<"GetData row:"<endRowPos<<" start:"<< p_var->startRowPos; + //qDebug()<<"GetData col:"<startColPos<<" start:"<< p_var->width; + int rowDiff = p_var->endRowPos - p_var->startRowPos; + int firstValidRow=0; + int firstValidRowDiff; + if(lastValidRow >= rowDiff) + { + firstValidRow = lastValidRow - rowDiff; + firstValidRowDiff = firstValidRow; + } + else + { + firstValidRow = 0; + firstValidRowDiff = lastValidRow > rowDiff; + } + + firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 + //firstValidRow = 0; + //int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); + //unsigned char *dat = (unsigned char *)calloc(width,rowByteNum); +#ifdef DEBUG4 + QString s2; + s2.sprintf ("firstValidRow:%d,lastValidRow:%d,rowByteNum:%d,width:%d ,rowDiff:%d\n\r",firstValidRow,lastValidRow,rowByteNum,width,rowDiff) ; + qDebug()<startColPos; + int hStart= p_var->startRowPos; + //int i = 0 ; + unsigned char *dat; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + for(int j = 2; j < width+1; j ++) + { + unsigned char c=0; + hStart= p_var->startRowPos; + c=dat[(wStart)*5+(hStart)/8]; + for(int k = firstValidRow; k <= lastValidRow; k++) + { + QRgb rgb = image.pixel(j,k); + //int currRow = k - firstValidRowDiff; + if(((rgb >> 24)&0xff) > 0x80) + { + c |= (1 << (hStart%8)); + //dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); + //str+="#"; + } + else + { + //str+="-"; + c &= ~(1 << (hStart%8)); + } + if(hStart%8==7) { + dat[(wStart)*5+(hStart)/8]=c; + c=dat[(wStart)*5+(hStart+1)/8]; + } + hStart++; + } + //str+="\n"; + dat[(wStart)*5+(hStart)/8]=c; + wStart++; + //if(sysPara->status.addSpace ) wStart++; //&& sysPara->print.QRvars[varNum].type==0 + } + //qDebug()<status.QRvariNum){ + QString pattern = ""; + // 1 type ,2 name,3 width,4 height + //

      < + // + QRegExp rx(pattern); + //QString textHtml = ui->textEdit->toHtml(); + ///////////// + QTextEdit textEdit ; + for(int i=0;istatus.QRvariNum;i++) + { + + if(sysPara->print.QRvars[i].type==0){ + textEdit.insertHtml(QString("") + .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->print.QRvars[i].type==1){ + textEdit.insertHtml(QString("") + .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->print.QRvars[i].type==2){ + textEdit.insertHtml(QString("") + .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + } + QString textHtml = textEdit.toHtml(); + //////////// + int from = 0; + // int xx =textHtml.size(); + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(rx,from); + bool ok; + //qDebug()<=9 && (sysPara->print.QRvars[varNum].type ==type-9)) + { + //sysPara->print.QRvars[varNum].type = type-9; + sysPara->para.qrOption.type = type-9; + sysPara->para.qrOption.width=sysPara->print.QRvars[varNum].width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->para.qrOption.height =sysPara->print.QRvars[varNum].height = rx.cap(4).toInt(&ok); + sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; + + //qDebug()<<"type:"<print.QRvars[varNum].type<status.QRvariNum + // <print.QRvars[varNum].startColPos<print.QRvars[varNum].startRowPos<print.QRvars[varNum].endRowPos + // <print.QRvars[varNum].width<print.QRvars[varNum].height + // <status.statWarn & WARN_STATUS_POWER_MON)) return; +#endif + strTitle = tr("高压故障,暂停打印."); + + strWarring = tr("高压故障:两高压偏转板间的电压检测异常");strWarring.append("\r\n"); + strWarring.append(tr("1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座;"));strWarring.append("\r\n"); + strWarring.append( tr("2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); + //strWarring.append( tr("字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); + strWarring.append( tr("3.高压线路漏电,请更换高压线路;"));strWarring.append("\r\n"); + strWarring.append( tr("4.高压底座漏电,请更换高压底座。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + +} +void MainWindow::onStatusInkLeak(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)) return; +#endif + strTitle = tr("墨水缸满报警"); + + strWarring = tr("墨水过多:墨水溢出");strWarring.append("\r\n"); + strWarring.append(tr("1. 请停止添加墨水;"));strWarring.append("\r\n"); + strWarring.append(tr("2. 请排出多余墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusInkSwint(){ + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)) return; + +} +void MainWindow::onStatusInkWaterLevel(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) return; +#endif + strTitle = tr("墨水液位报警"); + + strWarring = tr("墨水液位:墨水即将耗尽");strWarring.append("\r\n"); + strWarring.append(tr("1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusRecycleWarn(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)) return; +#endif + strTitle = tr("回收故障,关闭回收槽,关墨线"); + strWarring = tr("回收故障:未检测到有墨水回收");strWarring.append("\r\n"); + strWarring.append( tr("1. 墨水未射入回收管,请修正墨线方向;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 墨水粘度太低,请更换新墨水;"));strWarring.append("\r\n"); + strWarring.append( tr("3. 回收管堵塞,请清通或者更换回收管;"));strWarring.append("\r\n"); + strWarring.append(tr("4. 回收泵故障,请清洗或者更换回收泵;"));strWarring.append("\r\n"); + strWarring.append( tr("5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); + //strWarring.append( tr(" 退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusSolvLevelWarn(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) return; +#endif + + strTitle = tr("溶剂液位报警"); + + strWarring = tr("溶剂液位:溶剂即将耗尽");strWarring.append("\r\n"); + strWarring .append(tr("1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusViscosityWarn(){ +#ifdef X86TEST + +#else + if(sysPara->status.viscosityFault==1) +#endif + { + strTitle = tr("粘度故障报警"); + strWarring = tr("粘度故障:墨水粘度无法自动调整");strWarring.append("\r\n"); + strWarring.append( tr("1. 混合阀失灵,请冲洗或者更换混合阀;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 墨水罐内的墨水异常,请更换新墨水;"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +#ifdef X86TEST + +#else + } + else if(sysPara->status.viscosityFault==2) + { + +#endif + strTitle = tr("粘度故障报警"); + strWarring= tr("粘度计异常:");strWarring.append("\r\n"); + strWarring.append(tr("1. 泵前过滤网堵塞,请更换泵前滤网;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 粘度泵异常,请清洗或更换粘度泵;"));strWarring.append("\r\n"); + strWarring.append(tr("3. 粘度传感器异常,请检查传感器线路或者更换传感器."));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + } + +} +void MainWindow::onStatusChargefault(){ +#ifdef X86TEST + +#else + if(sysPara->status.lastPhaseFault) +#endif + { + + strTitle = tr("相位故障报警"); + strWarring = tr("相位故障:相位信号检测异常");strWarring.append("\r\n"); + strWarring.append(tr("1. 墨水分裂不正常,请调整墨水分裂;"));strWarring.append("\r\n"); + strWarring.append(tr("2. 充电槽或者相检头脏污,请清洗充电槽和相检头;"));strWarring.append("\r\n"); + strWarring.append(tr("3. 放大板功能性异常,请更换放大板;"));strWarring.append("\r\n"); + strWarring.append( tr("4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离;"));strWarring.append("\r\n"); + strWarring.append( tr("5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰;"));strWarring.append("\r\n"); + strWarring.append( tr("6. 墨水质量异常,请更换新墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + + } +} + +void MainWindow::OnFinished(int event){ + //msgtest->setText("孔一:60分钟灌浆结束条件!请点击\"结束\"按钮!"); + //msgtest->show(); + msgtest->hide(); + +} + + + + + + +void MainWindow::onPreviewScene() +{ +#if 1 + if(sysPara->status.flagOfWeiDaLiTCP){ + if(printDatasQueue.size() == 0){ + sysPara->status.flagOfWeiDaLiTCP = 0; + on_pushButtonStopPrint_pressed(); + return; + } + + QString openedFileName = ui->labelOpenedFileName->text(); + QString fileName = "/home/plg/doc/WeiDaLiTCP.xml"; + if(openedFileName != "WeiDaLiTCP.xml"){ + ui->textEditOption->onFileOpen(fileName,false); + } + QString str = printDatasQueue.first(); + printDatasQueue.dequeue(); + generateDrwingQRCode(str); + } + + pPicScene->clearSelection(); + QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.save("./printScene.jpg");//图片 + QPainter painter(&image); + pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect()); + //qDebug()<<"scene rect:"<itemsBoundingRect(); + //image.save("./printSceneDone.jpg");//图片 + +#endif + + int coldot=0; + if(sysPara){ + bool MaxCol4000; + if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) + MaxCol4000 = false; + else + MaxCol4000 = true; + previewFlag=1; + sysPara->status.currPrintRow = 0; + sysPara->status.variNum = 0; + sysPara->status.QRvariNum = 0; + unsigned char *dat; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + memset(dat,0,sizeof(sysPara->status.printDat_Normal)); + }else{ + dat =sysPara->status.printDat; + memset(dat,0,sizeof(sysPara->status.printDat)); + } + //qDebug()<<"Preview:"; + { + sysPara->status.addSpace = sysPara->para.checkSpace; + + coldot = (int)ui->textEdit->document()->size().width(); + coldot = pPicScene->itemsBoundingRect().width(); + if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int maxPicHeight = MAX_PRINT_ROW_NUM + 12; + QSize size(coldot,maxPicHeight); + + sysPara->status.currPrintRow =0; +#ifdef SPACEFLAG + sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace +#else + sysPara->status.currPrintCol = coldot; +#endif + +#ifdef VARCOLOR + + +#else +#if 0 + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.fill(0x00f0f000);//填充白色 + QPainter painter(&image); + image.save("./printImage.jpg"); + ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ +#else + //QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.save("./printScene.jpg");//图片 + QPainter painter(&image); + QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight); + pPicScene->render(&painter,QRectF(),validRectF); + //qDebug()<<"items bound:"<itemsBoundingRect(); +#endif +#ifndef DEBUG1 + //image.save("/opt/printImage.jpg"); +#endif + //image.save("./printImageScene.bmp");//图片 + //image.save("./printImagenn.jpg");//图片 + + //ui->widgetPrintTextDisplay + // int firstRow = maxPicHeight; + int firstRow = 0; + /*--------------------------------------------------------------------------*/ + for(int j = 0; j < maxPicHeight; j++){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + QRgb rgb = image.pixel(i,j); + if(rgb !=0x00ffffff )//& 0xff000000) + { + //qDebug()<maxPicHeight)?maxPicHeight:lastRow; + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + for(int j = 0; j < lastRow - firstRow; j++){ // Y + for(int i = 0; i < coldot; i++){ // + QRgb rgb = image.pixel(i,j + firstRow); + if(rgb&0x80000000){ //判断alpha + //if((rgb & 0xffffff) == 0xff0000) {j=40; break;} +#ifdef MMVAR + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + + bool foundvar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} + //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; + } + if(foundvar){ + if(sysPara->status.variNum < MAX_VARI_NUM){ + sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->status.vars[sysPara->status.variNum].endRowPos = j; + //if(varLastRowstatus.variNum ++;TempVarNum++; + //i+=5;//scene 每一行可能都包含变量 + //qDebug()<<"VARr:"< 0)?(dat[MAX_PRINT_ROW_BYTE_NUM*(i - 1) + j/8] & (1 << (j%8))):0; + int downPointValue = (j < (lastRow - firstRow - 1))?(image.pixel(i,j + firstRow + 1) != 0x00ffffff):0; + if(!leftPointValue && !downPointValue){ //找左下脚的位置 + if(sysPara->status.variNum < MAX_VARI_NUM){ + sysPara->status.vars[sysPara->status.variNum].startColPos = i; + sysPara->status.vars[sysPara->status.variNum].endRowPos = j; + sysPara->status.variNum ++;TempVarNum++; + } + else TempVarNum++; + } + dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + +#endif + + else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){ + // 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR) + //qDebug()<<"FLAG:"<status.QRvariNum>=4)continue; + if((rgb & 0x00ffff0) == 0x00ff10) { //MDT + sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; + if(varLastRowstatus.QRvariNum++; + } + else if((rgb & 0x00ffff0) == 0x00ff20) { //QR + sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; + if(varLastRowstatus.QRvariNum++; + } + else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR + sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); + + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; + + if(varLastRowstatus.QRvariNum++; + + } + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + + } + //else if((rgb & 0xfffff0)==0xff00f0) + else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;} + } + if(foundExVar) + { + if(sysPara->status.ExpiryVarNum <2) + { + sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->print.ExpiryVar.endRowPos = j; + if(varLastRowstatus.ExpiryVarNum ++; + i+=5; + } + //else TempVarNum++; + //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + } + else if((rgb & 0xfffff0)==0xff0cf0) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} + } + if(foundExVar) + { + if(sysPara->status.ExpiryVarNum <2) + { + sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->print.CurDateVar.endRowPos = j; + if(varLastRowstatus.CurrDateVariNum ++; + i+=5; + } + //else TempVarNum++; + //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + } + else if((rgb & 0xffffff)==0xff00ff) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + { + if(sysPara->status.classVariNum <3) { + EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ; + currCLass->day = QDateTime::currentDateTime().date().day(); + currCLass->startColPos = i+(sysPara->status.addSpace?i:0); + currCLass->endRowPos = j; + if(varLastRowstatus.classVariNum ++; + i+=5; + } + } + } + else + { //Y = 0.299*R' + 0.587*G' + 0.114*B //非变量 + int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; + //qDebug()<<"y:"<status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 +#else + dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 +#endif + // if(j > sysPara->status.currPrintRow) + // sysPara->status.currPrintRow = j; + if((j+1) > sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+1; + //qDebug()<<"dddd currPrintRow:"<< sysPara->status.currPrintRow; + } + } + } + + }/*判断alpha end*/ + } + } + + // var + //qDebug() <<"VarNum"<MAX_VARI_NUM){ + setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); + strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); + strTitle.append("\r\n"); + strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); + QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); + } +#endif + //qDebug()<status.vars[0].startRowPos<status.vars[0].endRowPos<< sysPara->status.currPrintRow; + // ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM + //qDebug()<<"qrvar"<status.QRvariNum; + searchQrVar(); +#if 1 + sysPara->status.variNum = 0; + sysPara->status.ExpiryVarNum = 0; + sysPara->print.ExpiryVar.startColPos = 0; + sysPara->print.ExpiryVar.endRowPos = 0; + sysPara->print.ExpiryVar.letterSpace =0; + sysPara->print.CurDateVar.startColPos = 0; + sysPara->print.CurDateVar.endRowPos = 0; + sysPara->print.CurDateVar.letterSpace = 0; + sysPara->status.CurrDateVariNum = 0; + sysPara->status.QRvariNum=0;//lch add + int myvariNum=0; + int expiryVarNum = 0; + + QList items = pPicScene->items(); + foreach (QGraphicsItem *item, items) { + PicTextItem *picText = qgraphicsitem_cast(item); + //qDebug()<<"item position: "<< picText->pos(); + //qDebug()<<"item bound: "<< picText->boundingRect(); + //int varNum = 0; + bool ok; + int textvariNum=0; + + int textColdot=0; + //textColdot = (int)picText->document()->size().width(); + textColdot = picText->boundingRect().width(); + //qDebug()<<"textColdot:"< (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + textColdot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int maxTextHeight = MAX_PRINT_ROW_NUM + 12; + //int maxTextHeight = picText->document()->size().height(); + if(maxTextHeight > MAX_PRINT_ROW_NUM + 12) + { + //maxTextHeight = MAX_PRINT_ROW_NUM + 12; + } + QSize textSize(textColdot, maxTextHeight); + QImage textImage(textSize,QImage::Format_ARGB32); + textImage.fill(0x00ffffff);//填充白色 + //image.fill(0x00f0f000);//填充白色 + QPainter textPainter(&textImage); + //textImage.save("./textImage.jpg"); + + //QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,maxTextHeight); + QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height()); + pPicScene->render(&textPainter,QRectF(),validtextRectF); + //qDebug()<<"validtextRectF:"<pos().x() - pPicScene->itemsBoundingRect().x(); + textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); + + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + for(int j = 0; j < textLastRow - textFirstRow; j++){ // Y + for(int i = 0; i < textColdot; i++){ // + QRgb rgb = textImage.pixel(i,j + textFirstRow); + if((rgb&0x80000000)){ //判断alpha +#ifdef MMVAR + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + + bool textfoundvar = 0; + if(j>0){ + QRgb r_rgb = textImage.pixel(i,j + textFirstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ) + { + textfoundvar =1; + } + + } + if(textfoundvar){ + //qDebug()<<"general variable"; + if(sysPara->status.variNum < MAX_VARI_NUM){ + sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX; + sysPara->status.vars[sysPara->status.variNum].endRowPos = j+textItemPosY; + //qDebug()<<"sysPara->status.variNum:"<status.variNum; + //qDebug()<<"startColPos:"<status.vars[sysPara->status.variNum].startColPos; + //qDebug()<<"endRowPos:"<status.vars[sysPara->status.variNum].endRowPos; + if(varLastRowstatus.variNum ++; + textvariNum++; + i+=5;//scene 每一行可能都包含变量 + //qDebug()<<"VARr:"<itemAt(i,j+firstRow); + //picText_var[i]= (PicTextItem*) gItem; + //picText_var_hash.insert(picText_var[i],i); + } + else + { + textvariNum++; + } + } + } +#endif + else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){ + // 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR) + //qDebug()<<"FLAG:"<status.QRvariNum>=4)continue; + if((rgb & 0x00ffff0) == 0x00ff10) { //MDT + sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX; + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY; + if(varLastRowstatus.QRvariNum++; + } + else if((rgb & 0x00ffff0) == 0x00ff20) { //QR + sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX; + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY; + if(varLastRowstatus.QRvariNum++; + } + else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR + sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR; + sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; + sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; + + sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX; + + sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY; + + if(varLastRowstatus.QRvariNum++; + + } + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + + } + //else if((rgb & 0xfffff0)==0xff00f0) + else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + //qDebug()<<"found EXPIRY_VARI_RECONISE"; + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if(((r_rgb & 0x0000ffff) != EXPIRY_VARI_RECONISE )){foundExVar =1;} + } + if(foundExVar) + { + //if(sysPara->status.ExpiryVarNum <2) + { + //if(sysPara->print.ExpiryVar.endRowPos==0) + if(sysPara->status.ExpiryVarNum == 0) + { + sysPara->status.ExpiryVarNum ++; + } + sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX; + sysPara->print.ExpiryVar.endRowPos = j+textItemPosY; + if(varLastRowprint.ExpiryVar.endRowPos:"<print.ExpiryVar.endRowPos; + } + //else TempVarNum++; + //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + } + else if((rgb & 0xfffff0)==0xff0cf0) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} + } + if(foundExVar) + { + //qDebug()<<"found CurDateVar"; + //if(sysPara->status.ExpiryVarNum <2) + { + //if(sysPara->print.CurDateVar.endRowPos==0) + if(sysPara->status.CurrDateVariNum == 0) + { + sysPara->status.CurrDateVariNum ++; + //setRunStatus(QString("CurrDateVariNum(%1)").arg(sysPara->status.CurrDateVariNum)); + } + sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX; + sysPara->print.CurDateVar.endRowPos = j + textItemPosY; + //qDebug()<<"CurDateVar ixj:"<print.CurDateVar.endRowPos:"<print.CurDateVar.endRowPos; + if(varLastRow>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; + //qDebug()<<"y:"<status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 +#else + dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 +#endif + } +#endif + } + + if(j > sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+textItemPosY; + qDebug()<<"sysPara->status.currPrintRow:"<status.currPrintRow; + } + }/*判断alpha end*/ + } + } + //qDebug()<<"ExpiryVarNum:"<status.ExpiryVarNum; + //===================一般变量===================== + //myvariNum = 0; + QString textVariPattern = ""; + QRegExp textrx(textVariPattern); + QString textHtml = picText->toHtml(); + int from = 0; + //int myvariNum=0; + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(textrx,from); + + if(from != -1){//找到匹配的 + //qDebug()<<"found variable"; + from ++; + //if(myvariNum < textvariNum) + if(myvariNum < sysPara->status.variNum) + { + sysPara->status.vars[myvariNum].digitalNum = textrx.cap(3).toInt(&ok);//第二个匹配,数字到个数 + sysPara->status.vars[myvariNum].bold = (sysPara->status.vars[myvariNum].digitalNum%100) == 75; + if(sysPara->status.vars[myvariNum].bold) + sysPara->status.vars[myvariNum].digitalNum = sysPara->status.vars[myvariNum].digitalNum/100; + + sysPara->status.vars[myvariNum].type = textrx.cap(2).toInt(&ok);//第一个匹配 + + sysPara->status.vars[myvariNum].width = textrx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); + sysPara->status.vars[myvariNum].height = textrx.cap(5).toInt(&ok); + //qDebug()<<"myvariNum endRowPos:"<status.vars[myvariNum].endRowPos; + //qDebug()<<"myvariNum height:"<status.vars[myvariNum].height; + sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1; + //sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height; + //qDebug()<<"start row:"<status.vars[myvariNum].startRowPos; + if(sysPara->status.vars[myvariNum].startRowPos<0) + sysPara->status.vars[myvariNum].startRowPos=0; + + int item_x_start_pos = sysPara->status.vars[myvariNum].startColPos; + int item_x_end_pos = item_x_start_pos + sysPara->status.vars[myvariNum].width ; + if(item_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + item_x_end_pos = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int item_y_start_pos = sysPara->status.vars[myvariNum].startRowPos; + int item_y_end_pos = sysPara->status.vars[myvariNum].endRowPos+1 ; + if(item_y_start_pos < 0) + item_y_start_pos = 0; + for(int i = item_x_start_pos; i < item_x_end_pos; i++){ + for(int j = item_y_start_pos; j < item_y_end_pos; j++){ + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 + } + } + sysPara->status.vars[myvariNum].height = textrx.cap(5).toInt(&ok)-1; + if(sysPara->status.vars[myvariNum].height>16 ){ + if(sysPara->status.vars[myvariNum].height==24) + ; + else { + if(sysPara->status.vars[myvariNum].startRowPos) + { + sysPara->status.vars[myvariNum].endRowPos--; + sysPara->status.vars[myvariNum].startRowPos--; + } + + } + + } + + if(sysPara->status.vars[myvariNum].type == RANDOMNUM) + { + //qDebug()<<"RAND:"<status.vars[myvariNum].type<< sysPara->status.vars[myvariNum].digitalNum; + sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum; + } + int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[myvariNum].height); + + //qDebug()<<"MainWindows"<status.vars[myvariNum].height<status.vars[myvariNum].letterSpace = 0; + if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace + QFont font; + //font.setFamily(Public::getFontFamily(pixelSize)); + font.setFamily(Public::getFontFamily(pixelSize,sysPara->status.vars[myvariNum].type )); // 20160812 + //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); + font.setPixelSize(pixelSize); + font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal); + //font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + int charWidth = (fontMetrics.width("0123456789"))/10 ; + sysPara->status.vars[myvariNum].letterSpace = sysPara->para.textEditCharSpace; + //sysPara->status.vars[myvariNum].letterSpace = + //sysPara->status.vars[myvariNum].width/sysPara->status.vars[myvariNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth; + } + myvariNum++; + } + } + } + //==========================一般变量结束======================= + + //=========================有效期/生产日期变量 开始================== + //qDebug()<<"sysPara->status.ExpiryVarNum"; + if(sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum) + { + QString expiryPattern = ""; + // 1 type ,2 name,3 width,4 height + //

      + QRegExp expiryRx(expiryPattern); + QString expiryHtml = picText->toHtml(); + int from = 0; + + while(from < expiryHtml.size() && from != -1){ + from = expiryHtml.indexOf(expiryRx,from); + bool ok; + //qDebug()<print.ExpiryVar.endRowPos:"<print.ExpiryVar.endRowPos; + sysPara->print.ExpiryVar.type = type; + sysPara->print.ExpiryVar.width = expiryRx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->print.ExpiryVar.height = expiryRx.cap(4).toInt(&ok); + //sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-sysPara->print.ExpiryVar.height; + sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-(sysPara->print.ExpiryVar.height-1); + qDebug()<<"endRow:"<print.ExpiryVar.endRowPos; + qDebug()<<"startRow:"<print.ExpiryVar.startRowPos; + qDebug()<<"height:"<print.ExpiryVar.height; + if(expiryRx.cap(2).contains("875")) + { + //qDebug()<<"ExpiryVar:Bold"; + sysPara->print.ExpiryVar.bold = 1; + } + else + { + //qDebug()<<"ExpiryVar:normal"; + sysPara->print.ExpiryVar.bold = 0; + } + // 直接更新有效期,并退出? + ExpiryDotUpdate(1); + expiryVarNum++; + } + else if(type==CURDATE || type==CURDATE + 10 || type==CURDATE + 20) + { //currDate + //qDebug()<<"CurDateVar:"<print.CurDateVar.type = type; + sysPara->print.CurDateVar.width = expiryRx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->print.CurDateVar.height = expiryRx.cap(4).toInt(&ok); + //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-sysPara->print.CurDateVar.height; + sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); + //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; + // 生产日期即当前日期 + if(expiryRx.cap(2).contains("875")) + { + //qDebug()<<"CurDateVar:Bold"; + sysPara->print.CurDateVar.bold = 1; + } + else + { + //qDebug()<<"CurDateVar:normal"; + sysPara->print.CurDateVar.bold = 0; + } + ExpiryDotUpdate(2); + expiryVarNum++; + } + + } + else break; + } + } + } + //=========================有效期/生产日期变量 结束================== + + } + + + + +#endif + + //if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<status.vars[0].endRowPos ; + + /*--------------------------------------------------------------------------*/ + generateCharRamData(); + + //qDebug()<<"1"<status.currPrintRow; + /*---------------------------------------------------------------------------*/ + //sysPara->status.currPrintRow ++;//总的行数,从1~n,而不是从0~n, + //if(sysPara->status.currPrintRow>39)sysPara->status.currPrintRow=39; + if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; + bool found=0; + + lastRow = sysPara->status.currPrintRow; + //qDebug()<<"lastRow:"<status.currPrintRow; j >2 ; j--){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ + lastRow = j+1; + found=1;//qDebug()<<"fOUND:"<status.currPrintRow; + break; + } + } + if(found) + break; + } + if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow = MAX_PRINT_ROW_NUM-1; + if(lastRow20 &&lastRow<=25) lastRow =24; + + sysPara->status.currPrintRow =lastRow; + //sysPara->status.currPrintRow =(lastRow > varLastRow) ? lastRow : varLastRow; //配合賴工省点打印少行問题 + //qDebug()<<"lastRow:"<status.currPrintRow; +#endif + + } + +#ifdef SPACEFLAG + //sysPara->status.currPrintCol +#else + +#endif + +#ifdef _2DCODE_ + if(sysPara->status.QRvariNum) { + onUpdateDispQRCode(1); + } +#endif + //if(sysPara->status.currPrintRow==11) sysPara->status.currPrintRow=12; + int wmax = sysPara->status.currPrintRow; + sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; + if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; + else { + if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1; + wmax = sysPara->status.currAlterPrintRow; + } + /*-------------------------------切换到显示窗口-----------------------------------*/ + if(sysPara->status.addSpace) + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); + else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); + + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); + ui->widgetPrintTextDisplay->update(); + //qDebug()<<"3"<status.currPrintRow; + } + previewFlag=0; +} + + +int MainWindow::calculateMaxSpeed(int backup) +{ + float stroke; + int valid_array; + int rongdian = 0; + int mm; + int oscfreq = 0; + + // QSizeF size = ui->textEdit->document()->size(); + + switch (sysPara->para.oscillatoFreq) { + case CRYS_64K: + oscfreq = 64000; + break; + case CRYS_76K: + oscfreq = 76000; + break; + case CRYS_96K: + oscfreq = 96000; + break; + case CRYS_128K: + oscfreq = 128000; + break; + default: + break; + } + stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; + + rongdian = sysPara->status.currPrintRow * (float)sysPara->para.reducedPixelNumRatio/100; + valid_array = sysPara->status.currPrintRow - rongdian; + + switch (sysPara->para.currPrintMode) { + case FAST_PRINT: + mm = (float)(stroke * oscfreq /(sysPara->status.currPrintRow +1)); + break; + case STANDARD_PRINT: + mm = (float)( (stroke * oscfreq) / (valid_array * 2)); + break; + case SLOW_PRINT_ONE: + mm = (float)( (stroke * oscfreq) / (valid_array * 3)); + break; + case SLOW_PRINT_TWO: + mm = (float)( (stroke * oscfreq) / (valid_array * 4)); + break; + case SLOW_PRINT_THR: + mm = (float)( (stroke * oscfreq) / (valid_array * 5)); + break; + case SLOW_PRINT_FOR: + mm = (float)( (stroke * oscfreq) / (valid_array * 6)); + break; + case SLOW_PRINT_FIV: + mm = (float)( (stroke * oscfreq) / (valid_array * 7)); + break; + case SLOW_PRINT_SIX: + mm = (float)( (stroke * oscfreq) / (valid_array * 8)); + break; + case SLOW_PRINT_SEV: + mm = (float)( (stroke * oscfreq) / (valid_array * 9)); + break; + case SLOW_PRINT_EIG: + mm = (float)( (stroke * oscfreq) / (valid_array * 10)); + break; + case SLOW_PRINT_NIE: + mm = (float)( (stroke * oscfreq) / (valid_array * 11)); + break; + default: + mm = backup/sysPara->para.synPulseNumPerMm; + break; + } + + return mm; + +} + +void MainWindow::Test_Start_Stop() +{ + if(test_flag <=0) return; + if(test_flag >= RECICLARNUMBER){ + LogInfo::setRunStatusText(tr("回收槽开关检测完成!")); + test_flag = 0; + return; + } + if((test_flag%2) == 0){ + if(!open_close){ + on_pushButtonReclaimTanOpen_pressed(); + open_close = 1; + } + } + else if(test_flag%2 == 1){ + if(open_close){ + on_pushButtonReclaimTankClose_pressed(); + open_close = 0; + } + } +} + +void MainWindow::UpdateDateTimeQRCode(QString strContent) +{ + if(!printintFlag || !sysPara->para.isCheckInsertTime) + { + return ; + } + + QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); + bool ok; + int font_size = labelFontSize->text().toInt(&ok,10); + QString font_family = Public::getFontFamily(font_size); + if(sysPara->para.EditMode == TXTFILE) + { + QFile file("/home/plg/doc/modbusQR.bmp"); + if(file.exists()) + { + file.remove(); + } + if(dlgqrcode->barCodeFlag == 1) + { + barcode->extSetText(""); + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + } + else + { + QString receiveContent = QString::fromUtf8(strContent.toStdString().c_str()); + dlgqrcode->extSetText(receiveContent,sysPara->para.qrOption.type); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + } + + QString txt_fomart = ""; + txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += barcode->getLabe_TxtString().toUtf8(); + txt_fomart += " "; + txt_fomart += ""; + ui->textEditOption->textEdit->setHtml(txt_fomart); + ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + on_pushButtonStartPrint_pressed();//开始打印 + } + +} +QSizeF MainWindow::getDocSize()const +{ + QSizeF size = ui->textEdit->document()->size(); + return size; +} + +#ifdef EnableArabic +void MainWindow::setOpenFileName(QString fileName){ + qDebug()<<"set open fileName"<%1%2").arg(subname).arg(subsuffix2); + ui->labelOpenedFileName->setText(stringhtml); + }else{ + font.setFamily("biyang"); + ui->labelOpenedFileName->setFont(font); + ui->labelOpenedFileName->setText(fileName); + } + }else{ + font.setFamily("biyang"); + ui->labelOpenedFileName->setFont(font); + ui->labelOpenedFileName->setText(fileName); + } + }else{ + ui->labelOpenedFileName->setText(fileName); + } +} +#endif + +void MainWindow::printer_operate_launch() +{ + int status=0; + if(!timerPrinter_operate_launch->isActive()) + { + connect(timerPrinter_operate_launch, SIGNAL(timeout()), this, SLOT(printer_operate_launch())); + timerPrinter_operate_launch->start(1000); + } + //sysPara->status.selfCheckDone=1; + if(sysPara->status.selfCheckDone) + { + if(sysPara->status.reclaimTankstatus == 5) + { + timeoutOperate_launch=1000; + status=1; + } + else + { + //打开回收槽 + if(!sysPara->devOp->isReclaimTankOpenEnable() && timeoutOperate_launch==0) + { + timeoutOperate_launch++; + qDebug()<<"点击回收槽按钮"; + on_pushButtonReclaimTanOpen_pressed(); + } + else + { + //qDebug()<<"正在打开回收槽..."; + } + } + } + else + { + timeoutOperate_launch=1000; + qDebug()<<"未完成自检"; + LogInfo::setRunStatusText(tr("未完成自检")); + status=0; + } + if(timeoutOperate_launch%10 == 0) + qDebug()<<"检测回收槽状态="<status.reclaimTankstatus; + if(timeoutOperate_launch++>40) + { + timeoutOperate_launch=0; + disconnect(timerPrinter_operate_launch, SIGNAL(timeout()), this, SLOT(printer_operate_launch())); + timerPrinter_operate_launch->stop(); + emit printer_operate_launch_result(status); + } +} +//喷码指令-5A A5 03 00 00 00 02 61 62 C7 A5 5A +void MainWindow::print_data_comein(QString text) +{ + printDatasQueue.enqueue(text); + sysPara->status.flagOfWeiDaLiTCP = 1; + qDebug()<<"new text="<status.isPrinting) + on_pushButtonStopPrint_pressed(); + printDatasQueue.clear(); + ui->textEditOption->onFileOpen(fileName,false); +} + +void MainWindow::drop_NextSignalHandler(){ + sysPara->status.flagOfDropNextSignal = true; +} + +//获取缓存指令-5A A5 04 00 00 00 02 01 02 08 A5 5A +void MainWindow::query_print_queue(){ + int size=printDatasQueue.length(); + + if(sysPara->status.isPrinting) + size=size+1; + + QByteArray queryQueue; + queryQueue.append(size); + emit WriteInstructionCodeAck(4,queryQueue); +} + +void MainWindow::generateDrwingQRCode(QString str){ + dlgqrcode->drawingVersionQRCode(str); + QString data = "0"; + ui->senceEditOption->updatePrintData(data); +} + +void MainWindow::on_pushButton_Number_clicked() +{ + QString strT=""; + QString strC=""; + strT = tr("缓存内容如下:"); + for(int i=0;i +#include "ParaSettingUI.h" +#include "PrintSetting.h" +#include +#include "QBarCode.h" +#include "dlgQrCode.h" +#include "dlgmywarring.h" +//#define RETANKACK // 改回收 +#include +#ifdef PICSCENE +#include "scene/picscene.h" +#include "VerBVersion.h" +#include "myinclude.h" +#include +class PicScene; +QT_BEGIN_NAMESPACE +class QAction; +class QToolBox; +class QSpinBox; +class QComboBox; +class QFontComboBox; +class QButtonGroup; +class QLineEdit; +class QGraphicsTextItem; +class QFont; +class QToolButton; +class QAbstractButton; +class QGraphicsView; +QT_END_NAMESPACE +#endif +#define CLEARCNTNOW + + + +#include +#include +#include +namespace Ui { + class MainWindow; +} + +class MainWindow : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + + void bindSysPara(SysPara *SysPara);//重载 + void updateSysParaToUI(); //重载 + void updateSysStatusToUI(); //重载 + void applyUIPara(); //重载 + bool updatePhaseIndicatorLight(); +// void showPrintBitImage(); + int calculateMaxSpeed(int backup); + unsigned int showPrintBitImage(); + + void enablePrintButton(bool enable); + void enableReclaimCtrlButton(bool enable); + void resetReclaimCtrlButtonText(); + void enablePushButtonStart(bool enable); + int getMaxSpeedCalcPara(); + + void generateDrwingQRCode(QString); + + void PreviewPressed(); + int getCurrPrintStatus(); + TextEditOption* getTexteditOption(); + + void SetEditMode(int mode); + bool fileChange; + bool pushButtonFlag; + + int getVarStarRow(int x, int y, int h, int w,char *dat); + + void testPrint(); + int searchQrVar(); + PicScene* getPicScene(); + //void pushOnlyCNT1Clear_Hide(); + + DlgMyWarring dlgMyWarring; + QString strWarring,strTitle; + QMessageBox *msgtest; + void updateTotalCnt(int en); + bool m_2sFlag; + QTimer *timerShowItem; + void UpdateDateTimeQRCode(QString strContent); + + //返回文档打印大小 + QSizeF getDocSize()const ; + + int timeoutOperate_launch; + QTimer *timerPrinter_operate_launch; + QQueue printDatasQueue; + void print_complete(); + +public slots: + void OnFinished(int event); + void onQRCodeClose(); + void onEditQRCode(); + void onEditBarCode(); + void onBarCodeClose(); + void on_pushButtonCleanUP_pressed(); + //void on_pushOnlyCNT1Clear_pressed(); + void onPushButtonCNTResetNowPressed(); + void changeEditMode(int editMode); + void SetMainTabEdit(int n); + void changeTxtMode(QString str); + // void openPngFile(QString filePath); + void openPicFIleOpen(QString filePath, bool insertFlag); + void onReclainTankPositionChanged(int value); + void checkForPowerOff(); + void on_pushButtonStart_pressed(); + + void setRunStatus(QString str); + + void setRunStatus(QPixmap pixMap); + + void _on_pushButtonPowerOff_pressed(bool notice); + + void on_pushButtonReclaimTankClose_pressed(); + + void alterDataPrint(unsigned char); + void showDat(unsigned char * Dat); + void SendPrintDataToFpga(unsigned char alterEnable); + void on_pushButtonStopPrint_pressed(); + void on_pushButtonPausePrint_pressed(); + void RefreshStatusLight(); + void onInitQRCode(); + void onUpdateDispQRCode(int type); // 更新二维码显示 + void modbusUpdateQRCode(); + //void onUpdateDispBcCode(int type); // 更新条形码显示 + void CheckStatus(int Flag); + void ShowWarnningText1(QString strTitle, QString strWarring); + void onStatusHighVoltageFault(); + void onStatusInkLeak(); + void onStatusInkSwint(); + void onStatusInkWaterLevel(); + void onStatusRecycleWarn(); + void onStatusSolvLevelWarn(); + void onStatusViscosityWarn(); + void onStatusChargefault(); + + void onPreviewScene(); + + void update_scroll(); + + void JSON_UpdateDATA(); + void on_pushButtonStartPrint_pressed(); + void onGenerateQRCode(QString strData); + void onShowAndHideItem(); + void onSwitchTimerShowItem(bool flag); + void onLabelFaultRusumePressed(); + void onModbusPrintReceivedContent(int num); + void onEnableReclaimCtrlButton(bool flag); + void onInkJetPrinterCurrentChanged(int); +#ifdef EnableArabic + void setOpenFileName(QString); +#endif +private slots: + // void on_pushButtonTXTOpen_pressed(); + void on_pushButtonGetData_pressed(); + void onPushButtonPreviewPressed(); + + void on_pushButtonReclaimTanOpen_pressed(); + void on_pushButtonPowerOff_pressed(); + void ontextEdittextChanged(); + void onTextEditCursorPositionChanged(); + //void onLabelFaultRusumePressed(); + + + void onLabelProductCntPressed(); + void onLabelTotalProductCntPressed(); + void displayTime(); + void airPushingProcess(); + + void on_bottonEditText_pressed(); + + void on_pushButtonReduceTextDisplay_pressed(); + void on_pushButtonEnlargeTextDisplay_pressed(); + void printer_operate_launch(); + void print_data_comein(QString text); + void query_print_queue(); + void on_pushButton_Number_clicked(); + void clearPrintDataQueue(); + void drop_NextSignalHandler(); + +Q_SIGNALS: + void openFileChange(); + void openCurrFile(QString); + void saveJmFile(); + void setMainTabNow(int); // 切换到主窗口 + void InkjetCleanUP(); + void ShowWarnningText(QString , QString ); + void editItemMode(); + void CloseJd(); + void pushButtonStartPressed(bool); + void repeatInitedPid(); + void setCNT1Select(bool); + void setCNT2Select(bool); + void setCNT3Select(bool); + void getJSONData(); + void scenefileOpen(QString,bool); + void setDisableAll(); + void clearPressureFault(); + +//修改字体宽度 +void autoUpdateFontWidthByMainWindow(const unsigned int); + + void printer_operate_launch_result(int); + void WriteInstructionCodeAck(int InstructionCode,QByteArray data); + void clearQueueFinished(); +private: + Ui::MainWindow *ui; + + int dlgMyWarringShowDlyCnt; + void generateCharRamData(); + void updatePrintDisplayLabel(); + void reclaimTanOpen(); + + QBarCode *barcode; + dlgQrCode *dlgqrcode; + + QThread ShowThead; + QTimer *timer; + QTimer *airPushTimer; + bool printintFlag; //判断当前是否在打印 + bool startPrintingFlag; + bool previewFlag; + + int searchExpiryVar();//检索有效期变量 + void ExpiryDotUpdate(char Mode); + int r_ExpiryDay; + void Test_Start_Stop(); +#ifdef PICSCENE + PicScene *pPicScene; + QGraphicsView *view; + QHBoxLayout *pSceneHBoxLayout; + QWidget *pSceneEditOptional; + + QPushButton *pOpenSceneButton; + QPushButton *pNewSceneButton; + QPushButton *pImportSceneButton; + QPushButton *pSaveSceneButton; + QPushButton *pSaveAsSceneButton; + QPushButton *pEditSceneButton; + PicTextItem *textItem; +#endif + +#if 0 +private slots: + void deleteItem(); + void bringToFront(); + void sendToBack(); + void itemInserted(DiagramItem *item); + void textInserted(QGraphicsTextItem *item); + void currentFontChanged(const QFont &font); + void fontSizeChanged(const QString &size); + void sceneScaleChanged(const QString &scale); + void textColorChanged(); + void itemColorChanged(); + void lineColorChanged(); + void textButtonTriggered(); + void fillButtonTriggered(); + void lineButtonTriggered(); + void handleFontChange(); + void itemSelected(QGraphicsItem *item); + void about(); + + private: + void createToolBox(); + void createActions(); + void createMenus(); + void createToolbars(); + QWidget *createBackgroundCellWidget(const QString &text, + const QString &image); + QWidget *createCellWidget(const QString &text, + DiagramItem::DiagramType type); + QMenu *createColorMenu(const char *slot, QColor defaultColor); + QIcon createColorToolButtonIcon(const QString &image, QColor color); + QIcon createColorIcon(QColor color); + + DiagramScene *scene; + QGraphicsView *view; + + QAction *exitAction; + QAction *addAction; + QAction *deleteAction; + + QAction *toFrontAction; + QAction *sendBackAction; + + QMenu *fileMenu; + QMenu *itemMenu; + + QToolBar *textToolBar; + QToolBar *editToolBar; + QToolBar *colorToolBar; + QToolBar *pointerToolbar; + + QComboBox *sceneScaleCombo; + QComboBox *itemColorCombo; + QComboBox *textColorCombo; + QComboBox *fontSizeCombo; + QFontComboBox *fontCombo; + + QToolBox *toolBox; + QButtonGroup *buttonGroup; + QButtonGroup *pointerTypeGroup; + QToolButton *fontColorToolButton; + QToolButton *fillColorToolButton; + QToolButton *lineColorToolButton; + QAction *boldAction; + QAction *underlineAction; + QAction *italicAction; + QAction *textAction; + QAction *fillAction; + QAction *lineAction; +#endif +}; + +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..3b44b75 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,3977 @@ + + + MainWindow + + + true + + + + 0 + 0 + 800 + 600 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 5 + 5 + + + + Qt::StrongFocus + + + InkJet + + + + 0 + + + + + 0 + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + 2 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + + + + 0 + 50 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 0 + 45 + + + + 编辑 + + + + :/icon/edit.png:/icon/edit.png + + + + + + + + 0 + 45 + + + + 打开文件 + + + + :/icon/fileopen.png:/icon/fileopen.png + + + + + + + + 0 + 45 + + + + 二维码 + + + + :/icon/bypm.png:/icon/bypm.png + + + + + + + + 0 + 45 + + + + 条形码 + + + + :/icon/BarCode1.png:/icon/BarCode1.png + + + + + + + + 0 + 45 + + + + 缩小 + + + + :/icon/zoomout.png:/icon/zoomout.png + + + + + + + + 0 + 45 + + + + 放大 + + + + :/icon/zoomin.png:/icon/zoomin.png + + + + + + + true + + + + 0 + 45 + + + + 获取数据 + + + + + + + 交替打印文件名 + + + + + + + + + + + + + QLayout::SetDefaultConstraint + + + 0 + + + + + + 0 + 18 + + + + + 16777215 + 18 + + + + 最大:[40行x 2048列] + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 140 + 18 + + + + + 140 + 18 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 20 + 20 + + + + + + + + + + + + 0 + 18 + + + + + 16777215 + 18 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 0 + 18 + + + + + 16777215 + 18 + + + + 同步器速度 + + + QFrame::NoFrame + + + QFrame::Sunken + + + + + + + + + + + 16777215 + 18 + + + + Qt::Vertical + + + + + + + + 0 + 18 + + + + + 100 + 18 + + + + 当前时间 + + + + + + + + + + + + + 800 + 150 + + + + 1 + + + + + + + + 610 + 95 + + + + + 800 + 120 + + + + + Monospace + 9 + 50 + false + false + + + + BlankCursor + + + QFrame::StyledPanel + + + 0 + + + false + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt; vertical-align:bottom;"><br /></p></body></html> + + + + + + + + + + 5 + 5 + 781 + 120 + + + + + 0 + 0 + + + + + 620 + 100 + + + + + 16777215 + 120 + + + + false + + + + + 0 + 0 + 500 + 53 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + + + 0 + 10 + 791 + 141 + + + + + 0 + 0 + + + + + + + + + + 0 + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + + + + :/image/ALARMGreen.PNG + + + + + + + + 0 + 60 + + + + + 60 + 16777215 + + + + + + + :/image/reset.png + + + + + + + + + 0 + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨线开关 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 喷头盖开 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨水缸满 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 墨水液位 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 溶剂液位 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 回收故障 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 粘度故障 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 相位故障 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 高压故障 + + + + + + + + 60 + 0 + + + + + 70 + 16777215 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + 0 + 0 + 255 + + + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + + 故障恢复 + + + + + + + + + 0 + + + 4 + + + + + + 0 + 0 + + + + + 120 + 16777215 + + + + + 2 + + + 1 + + + 1 + + + 2 + + + + + + 110 + 0 + + + + + 110 + 16777215 + + + + 立即重新计米 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + 产品计数 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::WinPanel + + + QFrame::Sunken + + + + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + 产品总计数 + + + + + + + + 110 + 20 + + + + + 110 + 16777215 + + + + QFrame::WinPanel + + + QFrame::Sunken + + + + + + + + + + + 110 + 63 + + + + + 110 + 16777215 + + + + Qt::LeftToRight + + + false + + + 关机 + + + + :/icon/poweroff.png:/icon/poweroff.png + + + + + + + + + + 3 + + + 5 + + + 0 + + + + + 0 + + + 3 + + + 0 + + + 0 + + + 0 + + + + + 3 + + + 3 + + + 3 + + + 3 + + + 1 + + + + + 3 + + + + + + 300 + 0 + + + + + 300 + 16777215 + + + + + + + true + + + + + + + + 160 + 0 + + + + + 180 + 20 + + + + 2014-08-23 + + + Qt::AlignCenter + + + + + + + + + + + 0 + + + 4 + + + + + + 150 + 20 + + + + 粘度 + + + + + + + + 150 + 20 + + + + 高压包 + + + + + + + + 88 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 150 + 20 + + + + 隔膜位置 + + + + + + + + 70 + 0 + + + + + 64 + 20 + + + + + + + + + + + + 64 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 110 + 20 + + + + + 500 + 16777215 + + + + QFrame::NoFrame + + + + + + + + + + + 88 + 0 + + + + + 16777215 + 20 + + + + + + + + + + + + 150 + 20 + + + + 压力 + + + + + + + PushButton + + + + + + + + + + 0 + 55 + + + + + 80 + 16777215 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 147 + 146 + 146 + + + + + + + + 开 + + + + :/icon/openreclaimtanl.png:/icon/openreclaimtanl.png + + + + + + + + 60 + 0 + + + + + 70 + 60 + + + + + + + + + + + + 0 + 55 + + + + + 80 + 16777215 + + + + 关 + + + + :/icon/closereclaimtanl.png:/icon/closereclaimtanl.png + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 1 + + + 0 + + + + + + 0 + 50 + + + + + 98 + 63 + + + + + + + + + 0 + 170 + 0 + + + + + + + 85 + 170 + 127 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 127 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 127 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 186 + 188 + 185 + + + + + + + 242 + 241 + 240 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 186 + 188 + 185 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 170 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/startprint2.png + :/icon/startprint1.png + :/icon/startprint1.png + :/icon/startprint.png:/icon/startprint2.png + + + + 92 + 60 + + + + false + + + + + + + + 0 + 50 + + + + + 98 + 63 + + + + + + + + + 170 + 0 + 0 + + + + + + + 193 + 121 + 121 + + + + + + + 170 + 0 + 0 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 241 + 176 + 165 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 193 + 121 + 121 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 241 + 176 + 165 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 209 + 199 + 189 + + + + + + + 242 + 241 + 240 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 227 + 97 + 75 + + + + + + + 227 + 97 + 75 + + + + + + + 0 + 0 + 0 + + + + + + + 227 + 97 + 75 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + :/icon/stopprint2.png + :/icon/stopprint1.png + :/icon/stopprint1.png + :/icon/stopprint.png:/icon/stopprint2.png + + + + 92 + 60 + + + + + + + + + 0 + 50 + + + + + 98 + 63 + + + + + + + + + 255 + 170 + 0 + + + + + + + 206 + 186 + 124 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 206 + 186 + 124 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 212 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 209 + 206 + 203 + + + + + + + 242 + 241 + 240 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 209 + 199 + 189 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 147 + 146 + 146 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 170 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + background-image:url(:/icon/pauseprint2.png) + + + 暂停打印 +停止高压 + + + + 92 + 60 + + + + + + + + + 0 + 50 + + + + + 98 + 63 + + + + 喷嘴逆清洗 + + + + 92 + 16 + + + + + + + + + 0 + 50 + + + + + 98 + 63 + + + + background-color: rgb(0, 255, 0); + + + 紧急停机 + + + + + + + + + + + + + + + + + ClickLabel + QLabel +
      ClickLabel.h
      +
      + + PicWidget + QWidget +
      PicWidget.h
      + 1 +
      + + TextEditOption + QWidget +
      TextEditOption.h
      + 1 +
      + + PrintTextDisplay + QWidget +
      PrintTextDisplay.h
      + 1 +
      + + MyTextEdit + QTextEdit +
      MyTextEdit.h
      +
      + + SceneEditOption + QWidget +
      scene/SceneEditOption.h
      + 1 +
      + + SceneViewWidget + QWidget +
      scene/sceneviewwidget.h
      + 1 +
      + + MyView + QGraphicsView +
      scene/myview.h
      +
      +
      + + + + +
      diff --git a/memdisplayandedit.ui b/memdisplayandedit.ui new file mode 100644 index 0000000..804785c --- /dev/null +++ b/memdisplayandedit.ui @@ -0,0 +1,430 @@ + + + MemDisplayAndEdit + + + + 0 + 0 + 605 + 140 + + + + Qt::StrongFocus + + + Form + + + + + 10 + 0 + 597 + 131 + + + + + 6 + + + + + 0 + + + 1 + + + + + + 40 + 0 + + + + + + + + + + + 07 + + + + + + + 02 + + + + + + + + 40 + 0 + + + + + + + + + + + 06 + + + + + + + 0D + + + + + + + 09 + + + + + + + 03 + + + + + + + 01 + + + + + + + 04 + + + + + + + 0C + + + + + + + 0A + + + + + + + 0F + + + + + + + + 40 + 0 + + + + + + + + + + + 05 + + + + + + + 00 + + + + + + + 08 + + + + + + + 0B + + + + + + + + 40 + 0 + + + + + + + + + + + 0E + + + + + + + + 40 + 0 + + + + + + + + + + + + 40 + 0 + + + + + + + + + + + + + 3 + + + + + 3 + + + + + + 45 + 16777215 + + + + 基地址: + + + + + + + + 90 + 16777215 + + + + true + + + true + + + + 0x0000 + + + + + 0xb100 + + + + + 0xb200 + + + + + 0xa400 + + + + + 0xe000 + + + + + + + + + + 3 + + + + + + 70 + 16777215 + + + + 读空间 + + + + + + + + 70 + 16777215 + + + + 写空间 + + + + + + + + + 3 + + + + + + 50 + 16777215 + + + + + + + + + + + + 60 + 16777215 + + + + 进制转换 + + + + + + + + 50 + 16777215 + + + + + + + + + + + + + 3 + + + + + + 50 + 16777215 + + + + 编辑 + + + + + + + + 50 + 16777215 + + + + 上一页 + + + + + + + + 50 + 16777215 + + + + 下一页 + + + + + + + + + + + + + diff --git a/modbus/demo.c b/modbus/demo.c new file mode 100644 index 0000000..bae6fde --- /dev/null +++ b/modbus/demo.c @@ -0,0 +1,284 @@ +/* + * FreeModbus Libary: Linux Demo Application + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: demo.c,v 1.2 2006/10/12 08:12:06 wolti Exp $ + */ + +/* ----------------------- Standard includes --------------------------------*/ +#include +#include +#include +#include +#include +#include +#include + +#include "demo.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define PROG "freemodbus" + +#define REG_INPUT_START 1000 +#define REG_INPUT_NREGS 10 +#define REG_HOLDING_START 2000 +#define REG_HOLDING_NREGS 130 + +/* ----------------------- Static variables ---------------------------------*/ +static USHORT usRegInputStart = REG_INPUT_START; +USHORT* usRegInputBuf; +static USHORT usRegHoldingStart = REG_HOLDING_START; +USHORT* usRegHoldingBuf; + +static pthread_mutex_t xLock = PTHREAD_MUTEX_INITIALIZER; +static BOOL bDoExit; + +/* ----------------------- Static functions ---------------------------------*/ +static BOOL bCreatePollingThread( void ); +//static enum ThreadState eGetPollingThreadState( void ); +//static void vSetPollingThreadState( enum ThreadState eNewState ); +static void *pvPollingThread( void *pvParameter ); + +/* ----------------------- Start implementation -----------------------------*/ +BOOL +bSetSignal( int iSignalNr, void ( *pSigHandler ) ( int ) ) +{ + BOOL bResult; + struct sigaction xNewSig, xOldSig; + + xNewSig.sa_handler = pSigHandler; + sigemptyset( &xNewSig.sa_mask ); + xNewSig.sa_flags = 0; + if( sigaction( iSignalNr, &xNewSig, &xOldSig ) != 0 ) + { + bResult = FALSE; + } + else + { + bResult = TRUE; + } + return bResult; +} + +void +vSigShutdown( int xSigNr ) +{ + switch ( xSigNr ) + { + case SIGQUIT: + case SIGINT: + case SIGTERM: + vSetPollingThreadState( SHUTDOWN ); + bDoExit = TRUE; + } +} + +BOOL +active_modbus( USHORT* mPara, USHORT* mStatus, USHORT port_num) +{ + int iExitCode = EXIT_SUCCESS; +// CHAR cCh; + + const UCHAR ucSlaveID[] = { 0xAA, 0xBB, 0xCC }; + usRegHoldingBuf = mPara; + usRegInputBuf = mStatus; + if( !bSetSignal( SIGQUIT, vSigShutdown ) || + !bSetSignal( SIGINT, vSigShutdown ) || !bSetSignal( SIGTERM, vSigShutdown ) ) + { + fprintf( stderr, "%s: can't install signal handlers: %s!\n", PROG, strerror( errno ) ); + iExitCode = EXIT_FAILURE; + } + else if( eMBInit( MB_RTU, 0x0A, port_num, 38400, MB_PAR_EVEN ) != MB_ENOERR ) + { + fprintf( stderr, "%s: can't initialize modbus stack!\n", PROG ); + iExitCode = EXIT_FAILURE; + } + else if( eMBSetSlaveID( 0x34, TRUE, ucSlaveID, 3 ) != MB_ENOERR ) + { + fprintf( stderr, "%s: can't set slave id!\n", PROG ); + iExitCode = EXIT_FAILURE; + } + else + { + vSetPollingThreadState( STOPPED ); + + if( bCreatePollingThread( ) != TRUE ) + { + iExitCode = EXIT_FAILURE; + vMBPortLog( MB_LOG_DEBUG, "active_modbus", "Can't start protocol stack! Already running?\n"); + } + } + + return iExitCode; +} + +BOOL +bCreatePollingThread( void ) +{ + BOOL bResult; + pthread_t xThread; + + if( eGetPollingThreadState( ) == STOPPED ) + { + if( pthread_create( &xThread, NULL, pvPollingThread, NULL ) != 0 ) + { + bResult = FALSE; + } + else + { + bResult = TRUE; + } + } + else + { + bResult = FALSE; + } + + return bResult; +} + +void * +pvPollingThread( void *pvParameter ) +{ + vSetPollingThreadState( RUNNING ); + + if( eMBEnable( ) == MB_ENOERR ) + { + do + { +// vMBPortLog( MB_LOG_DEBUG, "usRegInputBuf[0]", "%d\n", usRegInputBuf[0]); + if( eMBPoll( ) != MB_ENOERR ) + break; +// usRegInputBuf[0] = ( USHORT ) rand( ); + } + while( eGetPollingThreadState( ) != SHUTDOWN ); + } + + ( void )eMBDisable( ); + + vSetPollingThreadState( STOPPED ); + + return 0; +} + +enum ThreadState +eGetPollingThreadState( ) +{ + enum ThreadState eCurState; + + ( void )pthread_mutex_lock( &xLock ); + eCurState = ePollThreadState; + ( void )pthread_mutex_unlock( &xLock ); + + return eCurState; +} + +void +vSetPollingThreadState( enum ThreadState eNewState ) +{ + ( void )pthread_mutex_lock( &xLock ); + ePollThreadState = eNewState; + ( void )pthread_mutex_unlock( &xLock ); +} + +eMBErrorCode +eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs ) +{ + eMBErrorCode eStatus = MB_ENOERR; + int iRegIndex; + + vMBPortLog( MB_LOG_DEBUG, "eMBRegInputCB", "exe\n"); + if( ( usAddress >= REG_INPUT_START ) + && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) ) + { + iRegIndex = ( int )( usAddress - usRegInputStart ); + while( usNRegs > 0 ) + { + *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] >> 8 ); + *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF ); + iRegIndex++; + usNRegs--; + } + } + else + { + eStatus = MB_ENOREG; + } + + return eStatus; +} + +void CallProcessCommands(int index); + +eMBErrorCode +eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode ) +{ + eMBErrorCode eStatus = MB_ENOERR; + int iRegIndex; + + vMBPortLog( MB_LOG_DEBUG, "eMBRegHoldingCB", "exe\n"); + if( ( usAddress >= REG_HOLDING_START ) && + ( usAddress + usNRegs <= REG_HOLDING_START + REG_HOLDING_NREGS ) ) + { + iRegIndex = ( int )( usAddress - usRegHoldingStart ); + switch ( eMode ) + { + /* Pass current register values to the protocol stack. */ + case MB_REG_READ: + while( usNRegs > 0 ) + { + *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] >> 8 ); + *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] & 0xFF ); + iRegIndex++; + usNRegs--; + } + break; + + /* Update current register values with new values from the + * protocol stack. */ + case MB_REG_WRITE: + while( usNRegs > 0 ) + { + usRegHoldingBuf[iRegIndex - 1] = *pucRegBuffer++ << 8; + usRegHoldingBuf[iRegIndex - 1] |= *pucRegBuffer++; + vMBPortLog( MB_LOG_DEBUG, "eMBRegHoldingCB", "usRegHoldingBuf[%d] %d\n",iRegIndex - 1, usRegHoldingBuf[iRegIndex - 1]); + CallProcessCommands(iRegIndex); + iRegIndex++; + usNRegs--; + + } + } + } + else + { + eStatus = MB_ENOREG; + } + return eStatus; +} + + +eMBErrorCode +eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode ) +{ + return MB_ENOREG; +} + +eMBErrorCode +eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ) +{ + return MB_ENOREG; +} diff --git a/modbus/demo.h b/modbus/demo.h new file mode 100644 index 0000000..87edf02 --- /dev/null +++ b/modbus/demo.h @@ -0,0 +1,27 @@ +#ifndef _DEMO_H +#define _DEMO_H + + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +static enum ThreadState +{ + STOPPED, + RUNNING, + SHUTDOWN +} ePollThreadState; + +BOOL active_modbus( USHORT* mPara, USHORT* mStatus,USHORT port_num); +void vSetPollingThreadState( enum ThreadState eNewState ); +enum ThreadState eGetPollingThreadState( void ); +#ifdef __cplusplus +PR_END_EXTERN_C +#endif + +#endif diff --git a/modbus/modbus/ascii/mbascii.c b/modbus/modbus/ascii/mbascii.c new file mode 100644 index 0000000..c513457 --- /dev/null +++ b/modbus/modbus/ascii/mbascii.c @@ -0,0 +1,486 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbascii.c,v 1.17 2010/06/06 13:47:07 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbconfig.h" +#include "mbascii.h" +#include "mbframe.h" + +#include "mbcrc.h" +#include "mbport.h" + +#if MB_ASCII_ENABLED > 0 + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_ASCII_DEFAULT_CR '\r' /*!< Default CR character for Modbus ASCII. */ +#define MB_ASCII_DEFAULT_LF '\n' /*!< Default LF character for Modbus ASCII. */ +#define MB_SER_PDU_SIZE_MIN 3 /*!< Minimum size of a Modbus ASCII frame. */ +#define MB_SER_PDU_SIZE_MAX 256 /*!< Maximum size of a Modbus ASCII frame. */ +#define MB_SER_PDU_SIZE_LRC 1 /*!< Size of LRC field in PDU. */ +#define MB_SER_PDU_ADDR_OFF 0 /*!< Offset of slave address in Ser-PDU. */ +#define MB_SER_PDU_PDU_OFF 1 /*!< Offset of Modbus-PDU in Ser-PDU. */ + +/* ----------------------- Type definitions ---------------------------------*/ +typedef enum +{ + STATE_RX_IDLE, /*!< Receiver is in idle state. */ + STATE_RX_RCV, /*!< Frame is beeing received. */ + STATE_RX_WAIT_EOF /*!< Wait for End of Frame. */ +} eMBRcvState; + +typedef enum +{ + STATE_TX_IDLE, /*!< Transmitter is in idle state. */ + STATE_TX_START, /*!< Starting transmission (':' sent). */ + STATE_TX_DATA, /*!< Sending of data (Address, Data, LRC). */ + STATE_TX_END, /*!< End of transmission. */ + STATE_TX_NOTIFY /*!< Notify sender that the frame has been sent. */ +} eMBSndState; + +typedef enum +{ + BYTE_HIGH_NIBBLE, /*!< Character for high nibble of byte. */ + BYTE_LOW_NIBBLE /*!< Character for low nibble of byte. */ +} eMBBytePos; + +/* ----------------------- Static functions ---------------------------------*/ +static UCHAR prvucMBCHAR2BIN( UCHAR ucCharacter ); + +static UCHAR prvucMBBIN2CHAR( UCHAR ucByte ); + +static UCHAR prvucMBLRC( UCHAR * pucFrame, USHORT usLen ); + +/* ----------------------- Static variables ---------------------------------*/ +static volatile eMBSndState eSndState; +static volatile eMBRcvState eRcvState; + +/* We reuse the Modbus RTU buffer because only one buffer is needed and the + * RTU buffer is bigger. */ +extern volatile UCHAR ucRTUBuf[]; +static volatile UCHAR *ucASCIIBuf = ucRTUBuf; + +static volatile USHORT usRcvBufferPos; +static volatile eMBBytePos eBytePos; + +static volatile UCHAR *pucSndBufferCur; +static volatile USHORT usSndBufferCount; + +static volatile UCHAR ucLRC; +static volatile UCHAR ucMBLFCharacter; + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBASCIIInit( UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ) +{ + eMBErrorCode eStatus = MB_ENOERR; + ( void )ucSlaveAddress; + + ENTER_CRITICAL_SECTION( ); + ucMBLFCharacter = MB_ASCII_DEFAULT_LF; + + if( xMBPortSerialInit( ucPort, ulBaudRate, 7, eParity ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + else if( xMBPortTimersInit( MB_ASCII_TIMEOUT_SEC * 20000UL ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + + EXIT_CRITICAL_SECTION( ); + + return eStatus; +} + +void +eMBASCIIStart( void ) +{ + ENTER_CRITICAL_SECTION( ); + vMBPortSerialEnable( TRUE, FALSE ); + eRcvState = STATE_RX_IDLE; + EXIT_CRITICAL_SECTION( ); + + /* No special startup required for ASCII. */ + ( void )xMBPortEventPost( EV_READY ); +} + +void +eMBASCIIStop( void ) +{ + ENTER_CRITICAL_SECTION( ); + vMBPortSerialEnable( FALSE, FALSE ); + vMBPortTimersDisable( ); + EXIT_CRITICAL_SECTION( ); +} + +eMBErrorCode +eMBASCIIReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + ENTER_CRITICAL_SECTION( ); + assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ); + + /* Length and CRC check */ + if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN ) + && ( prvucMBLRC( ( UCHAR * ) ucASCIIBuf, usRcvBufferPos ) == 0 ) ) + { + /* Save the address field. All frames are passed to the upper layed + * and the decision if a frame is used is done there. + */ + *pucRcvAddress = ucASCIIBuf[MB_SER_PDU_ADDR_OFF]; + + /* Total length of Modbus-PDU is Modbus-Serial-Line-PDU minus + * size of address field and CRC checksum. + */ + *pusLength = ( USHORT )( usRcvBufferPos - MB_SER_PDU_PDU_OFF - MB_SER_PDU_SIZE_LRC ); + + /* Return the start of the Modbus PDU to the caller. */ + *pucFrame = ( UCHAR * ) & ucASCIIBuf[MB_SER_PDU_PDU_OFF]; + } + else + { + eStatus = MB_EIO; + } + EXIT_CRITICAL_SECTION( ); + return eStatus; +} + +eMBErrorCode +eMBASCIISend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + UCHAR usLRC; + + ENTER_CRITICAL_SECTION( ); + /* Check if the receiver is still in idle state. If not we where too + * slow with processing the received frame and the master sent another + * frame on the network. We have to abort sending the frame. + */ + if( eRcvState == STATE_RX_IDLE ) + { + /* First byte before the Modbus-PDU is the slave address. */ + pucSndBufferCur = ( UCHAR * ) pucFrame - 1; + usSndBufferCount = 1; + + /* Now copy the Modbus-PDU into the Modbus-Serial-Line-PDU. */ + pucSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress; + usSndBufferCount += usLength; + + /* Calculate LRC checksum for Modbus-Serial-Line-PDU. */ + usLRC = prvucMBLRC( ( UCHAR * ) pucSndBufferCur, usSndBufferCount ); + ucASCIIBuf[usSndBufferCount++] = usLRC; + + /* Activate the transmitter. */ + eSndState = STATE_TX_START; + vMBPortSerialEnable( FALSE, TRUE ); + } + else + { + eStatus = MB_EIO; + } + EXIT_CRITICAL_SECTION( ); + return eStatus; +} + +BOOL +xMBASCIIReceiveFSM( void ) +{ + BOOL xNeedPoll = FALSE; + UCHAR ucByte; + UCHAR ucResult; + + assert( eSndState == STATE_TX_IDLE ); + + ( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte ); + switch ( eRcvState ) + { + /* A new character is received. If the character is a ':' the input + * buffer is cleared. A CR-character signals the end of the data + * block. Other characters are part of the data block and their + * ASCII value is converted back to a binary representation. + */ + case STATE_RX_RCV: + /* Enable timer for character timeout. */ + vMBPortTimersEnable( ); + if( ucByte == ':' ) + { + /* Empty receive buffer. */ + eBytePos = BYTE_HIGH_NIBBLE; + usRcvBufferPos = 0; + } + else if( ucByte == MB_ASCII_DEFAULT_CR ) + { + eRcvState = STATE_RX_WAIT_EOF; + } + else + { + ucResult = prvucMBCHAR2BIN( ucByte ); + switch ( eBytePos ) + { + /* High nibble of the byte comes first. We check for + * a buffer overflow here. */ + case BYTE_HIGH_NIBBLE: + if( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ) + { + ucASCIIBuf[usRcvBufferPos] = ( UCHAR )( ucResult << 4 ); + eBytePos = BYTE_LOW_NIBBLE; + break; + } + else + { + /* not handled in Modbus specification but seems + * a resonable implementation. */ + eRcvState = STATE_RX_IDLE; + /* Disable previously activated timer because of error state. */ + vMBPortTimersDisable( ); + } + break; + + case BYTE_LOW_NIBBLE: + ucASCIIBuf[usRcvBufferPos] |= ucResult; + usRcvBufferPos++; + eBytePos = BYTE_HIGH_NIBBLE; + break; + } + } + break; + + case STATE_RX_WAIT_EOF: + if( ucByte == ucMBLFCharacter ) + { + /* Disable character timeout timer because all characters are + * received. */ + vMBPortTimersDisable( ); + /* Receiver is again in idle state. */ + eRcvState = STATE_RX_IDLE; + + /* Notify the caller of eMBASCIIReceive that a new frame + * was received. */ + xNeedPoll = xMBPortEventPost( EV_FRAME_RECEIVED ); + } + else if( ucByte == ':' ) + { + /* Empty receive buffer and back to receive state. */ + eBytePos = BYTE_HIGH_NIBBLE; + usRcvBufferPos = 0; + eRcvState = STATE_RX_RCV; + + /* Enable timer for character timeout. */ + vMBPortTimersEnable( ); + } + else + { + /* Frame is not okay. Delete entire frame. */ + eRcvState = STATE_RX_IDLE; + } + break; + + case STATE_RX_IDLE: + if( ucByte == ':' ) + { + /* Enable timer for character timeout. */ + vMBPortTimersEnable( ); + /* Reset the input buffers to store the frame. */ + usRcvBufferPos = 0;; + eBytePos = BYTE_HIGH_NIBBLE; + eRcvState = STATE_RX_RCV; + } + break; + } + + return xNeedPoll; +} + +BOOL +xMBASCIITransmitFSM( void ) +{ + BOOL xNeedPoll = FALSE; + UCHAR ucByte; + + assert( eRcvState == STATE_RX_IDLE ); + switch ( eSndState ) + { + /* Start of transmission. The start of a frame is defined by sending + * the character ':'. */ + case STATE_TX_START: + ucByte = ':'; + xMBPortSerialPutByte( ( CHAR )ucByte ); + eSndState = STATE_TX_DATA; + eBytePos = BYTE_HIGH_NIBBLE; + break; + + /* Send the data block. Each data byte is encoded as a character hex + * stream with the high nibble sent first and the low nibble sent + * last. If all data bytes are exhausted we send a '\r' character + * to end the transmission. */ + case STATE_TX_DATA: + if( usSndBufferCount > 0 ) + { + switch ( eBytePos ) + { + case BYTE_HIGH_NIBBLE: + ucByte = prvucMBBIN2CHAR( ( UCHAR )( *pucSndBufferCur >> 4 ) ); + xMBPortSerialPutByte( ( CHAR ) ucByte ); + eBytePos = BYTE_LOW_NIBBLE; + break; + + case BYTE_LOW_NIBBLE: + ucByte = prvucMBBIN2CHAR( ( UCHAR )( *pucSndBufferCur & 0x0F ) ); + xMBPortSerialPutByte( ( CHAR )ucByte ); + pucSndBufferCur++; + eBytePos = BYTE_HIGH_NIBBLE; + usSndBufferCount--; + break; + } + } + else + { + xMBPortSerialPutByte( MB_ASCII_DEFAULT_CR ); + eSndState = STATE_TX_END; + } + break; + + /* Finish the frame by sending a LF character. */ + case STATE_TX_END: + xMBPortSerialPutByte( ( CHAR )ucMBLFCharacter ); + /* We need another state to make sure that the CR character has + * been sent. */ + eSndState = STATE_TX_NOTIFY; + break; + + /* Notify the task which called eMBASCIISend that the frame has + * been sent. */ + case STATE_TX_NOTIFY: + eSndState = STATE_TX_IDLE; + xNeedPoll = xMBPortEventPost( EV_FRAME_SENT ); + + /* Disable transmitter. This prevents another transmit buffer + * empty interrupt. */ + vMBPortSerialEnable( TRUE, FALSE ); + eSndState = STATE_TX_IDLE; + break; + + /* We should not get a transmitter event if the transmitter is in + * idle state. */ + case STATE_TX_IDLE: + /* enable receiver/disable transmitter. */ + vMBPortSerialEnable( TRUE, FALSE ); + break; + } + + return xNeedPoll; +} + +BOOL +xMBASCIITimerT1SExpired( void ) +{ + switch ( eRcvState ) + { + /* If we have a timeout we go back to the idle state and wait for + * the next frame. + */ + case STATE_RX_RCV: + case STATE_RX_WAIT_EOF: + eRcvState = STATE_RX_IDLE; + break; + + default: + assert( ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_WAIT_EOF ) ); + break; + } + vMBPortTimersDisable( ); + + /* no context switch required. */ + return FALSE; +} + + +static UCHAR +prvucMBCHAR2BIN( UCHAR ucCharacter ) +{ + if( ( ucCharacter >= '0' ) && ( ucCharacter <= '9' ) ) + { + return ( UCHAR )( ucCharacter - '0' ); + } + else if( ( ucCharacter >= 'A' ) && ( ucCharacter <= 'F' ) ) + { + return ( UCHAR )( ucCharacter - 'A' + 0x0A ); + } + else + { + return 0xFF; + } +} + +static UCHAR +prvucMBBIN2CHAR( UCHAR ucByte ) +{ + if( ucByte <= 0x09 ) + { + return ( UCHAR )( '0' + ucByte ); + } + else if( ( ucByte >= 0x0A ) && ( ucByte <= 0x0F ) ) + { + return ( UCHAR )( ucByte - 0x0A + 'A' ); + } + else + { + /* Programming error. */ + assert( 0 ); + } + return '0'; +} + + +static UCHAR +prvucMBLRC( UCHAR * pucFrame, USHORT usLen ) +{ + UCHAR ucLRC = 0; /* LRC char initialized */ + + while( usLen-- ) + { + ucLRC += *pucFrame++; /* Add buffer byte without carry */ + } + + /* Return twos complement */ + ucLRC = ( UCHAR ) ( -( ( CHAR ) ucLRC ) ); + return ucLRC; +} + +#endif diff --git a/modbus/modbus/ascii/mbascii.h b/modbus/modbus/ascii/mbascii.h new file mode 100644 index 0000000..47846dd --- /dev/null +++ b/modbus/modbus/ascii/mbascii.h @@ -0,0 +1,56 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbascii.h,v 1.8 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_ASCII_H +#define _MB_ASCII_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +#if MB_ASCII_ENABLED > 0 +eMBErrorCode eMBASCIIInit( UCHAR slaveAddress, UCHAR ucPort, + ULONG ulBaudRate, eMBParity eParity ); +void eMBASCIIStart( void ); +void eMBASCIIStop( void ); + +eMBErrorCode eMBASCIIReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, + USHORT * pusLength ); +eMBErrorCode eMBASCIISend( UCHAR slaveAddress, const UCHAR * pucFrame, + USHORT usLength ); +BOOL xMBASCIIReceiveFSM( void ); +BOOL xMBASCIITransmitFSM( void ); +BOOL xMBASCIITimerT1SExpired( void ); +#endif + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/functions/mbfunccoils.c b/modbus/modbus/functions/mbfunccoils.c new file mode 100644 index 0000000..54227b3 --- /dev/null +++ b/modbus/modbus/functions/mbfunccoils.c @@ -0,0 +1,270 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfunccoils.c,v 1.8 2007/02/18 23:47:16 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_READ_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_COILCNT_MAX ( 0x07D0 ) + +#define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_SIZE ( 4 ) + +#define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 ) +#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 ) +#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 ) +#define MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ( 0x07B0 ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ + +#if MB_FUNC_READ_COILS_ENABLED > 0 + +eMBException +eMBFuncReadCoils( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usCoilCount; + UCHAR ucNBytes; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usCoilCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_COILCNT_OFF] << 8 ); + usCoilCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_COILCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usCoilCount >= 1 ) && + ( usCoilCount < MB_PDU_FUNC_READ_COILCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_COILS; + *usLen += 1; + + /* Test if the quantity of coils is a multiple of 8. If not last + * byte is only partially field with unused coils set to zero. */ + if( ( usCoilCount & 0x0007 ) != 0 ) + { + ucNBytes = ( UCHAR )( usCoilCount / 8 + 1 ); + } + else + { + ucNBytes = ( UCHAR )( usCoilCount / 8 ); + } + *pucFrameCur++ = ucNBytes; + *usLen += 1; + + eRegStatus = + eMBRegCoilsCB( pucFrameCur, usRegAddress, usCoilCount, + MB_REG_READ ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting address + * and the quantity of registers. We reuse the old values in the + * buffer because they are still valid. */ + *usLen += ucNBytes;; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid read coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#if MB_FUNC_WRITE_COIL_ENABLED > 0 +eMBException +eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + UCHAR ucBuf[2]; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF + 1] ); + usRegAddress++; + + if( ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF + 1] == 0x00 ) && + ( ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0xFF ) || + ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0x00 ) ) ) + { + ucBuf[1] = 0; + if( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0xFF ) + { + ucBuf[0] = 1; + } + else + { + ucBuf[0] = 0; + } + eRegStatus = + eMBRegCoilsCB( &ucBuf[0], usRegAddress, 1, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid write coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif + +#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0 +eMBException +eMBFuncWriteMultipleCoils( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usCoilCnt; + UCHAR ucByteCount; + UCHAR ucByteCountVerify; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen > ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF + 1] ); + usRegAddress++; + + usCoilCnt = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF] << 8 ); + usCoilCnt |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF + 1] ); + + ucByteCount = pucFrame[MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF]; + + /* Compute the number of expected bytes in the request. */ + if( ( usCoilCnt & 0x0007 ) != 0 ) + { + ucByteCountVerify = ( UCHAR )( usCoilCnt / 8 + 1 ); + } + else + { + ucByteCountVerify = ( UCHAR )( usCoilCnt / 8 ); + } + + if( ( usCoilCnt >= 1 ) && + ( usCoilCnt <= MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ) && + ( ucByteCountVerify == ucByteCount ) ) + { + eRegStatus = + eMBRegCoilsCB( &pucFrame[MB_PDU_FUNC_WRITE_MUL_VALUES_OFF], + usRegAddress, usCoilCnt, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting address + * and the quantity of registers. We reuse the old values in the + * buffer because they are still valid. */ + *usLen = MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid write coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif + +#endif diff --git a/modbus/modbus/functions/mbfuncdiag.c b/modbus/modbus/functions/mbfuncdiag.c new file mode 100644 index 0000000..d75ffc0 --- /dev/null +++ b/modbus/modbus/functions/mbfuncdiag.c @@ -0,0 +1,29 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncdiag.c,v 1.3 2006/12/07 22:10:34 wolti Exp $ + */ diff --git a/modbus/modbus/functions/mbfuncdisc.c b/modbus/modbus/functions/mbfuncdisc.c new file mode 100644 index 0000000..fb37844 --- /dev/null +++ b/modbus/modbus/functions/mbfuncdisc.c @@ -0,0 +1,125 @@ + /* + * FreeRTOS Modbus Libary: A Modbus serial implementation for FreeRTOS + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_READ_DISCCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_DISCCNT_MAX ( 0x07D0 ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ + +#if MB_FUNC_READ_COILS_ENABLED > 0 + +eMBException +eMBFuncReadDiscreteInputs( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usDiscreteCnt; + UCHAR ucNBytes; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usDiscreteCnt = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF] << 8 ); + usDiscreteCnt |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usDiscreteCnt >= 1 ) && + ( usDiscreteCnt < MB_PDU_FUNC_READ_DISCCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_DISCRETE_INPUTS; + *usLen += 1; + + /* Test if the quantity of coils is a multiple of 8. If not last + * byte is only partially field with unused coils set to zero. */ + if( ( usDiscreteCnt & 0x0007 ) != 0 ) + { + ucNBytes = ( UCHAR ) ( usDiscreteCnt / 8 + 1 ); + } + else + { + ucNBytes = ( UCHAR ) ( usDiscreteCnt / 8 ); + } + *pucFrameCur++ = ucNBytes; + *usLen += 1; + + eRegStatus = + eMBRegDiscreteCB( pucFrameCur, usRegAddress, usDiscreteCnt ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting address + * and the quantity of registers. We reuse the old values in the + * buffer because they are still valid. */ + *usLen += ucNBytes;; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid read coil register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif diff --git a/modbus/modbus/functions/mbfuncholding.c b/modbus/modbus/functions/mbfuncholding.c new file mode 100644 index 0000000..e74a062 --- /dev/null +++ b/modbus/modbus/functions/mbfuncholding.c @@ -0,0 +1,308 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncholding.c,v 1.12 2007/02/18 23:48:22 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF + 0) +#define MB_PDU_FUNC_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_REGCNT_MAX ( 0x007D ) + +#define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF + 0) +#define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_SIZE ( 4 ) + +#define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF + 0 ) +#define MB_PDU_FUNC_WRITE_MUL_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 ) +#define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 ) +#define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 ) +#define MB_PDU_FUNC_WRITE_MUL_REGCNT_MAX ( 0x0078 ) + +#define MB_PDU_FUNC_READWRITE_READ_ADDR_OFF ( MB_PDU_DATA_OFF + 0 ) +#define MB_PDU_FUNC_READWRITE_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READWRITE_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF + 4 ) +#define MB_PDU_FUNC_READWRITE_WRITE_REGCNT_OFF ( MB_PDU_DATA_OFF + 6 ) +#define MB_PDU_FUNC_READWRITE_BYTECNT_OFF ( MB_PDU_DATA_OFF + 8 ) +#define MB_PDU_FUNC_READWRITE_WRITE_VALUES_OFF ( MB_PDU_DATA_OFF + 9 ) +#define MB_PDU_FUNC_READWRITE_SIZE_MIN ( 9 ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ + +#if MB_FUNC_WRITE_HOLDING_ENABLED > 0 + +eMBException +eMBFuncWriteHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF + 1] ); + usRegAddress++; + + /* Make callback to update the value. */ + eRegStatus = eMBRegHoldingCB( &pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF], + usRegAddress, 1, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + } + else + { + /* Can't be a valid request because the length is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} +#endif + +#if MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED > 0 +eMBException +eMBFuncWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usRegCount; + UCHAR ucRegByteCount; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen >= ( MB_PDU_FUNC_WRITE_MUL_SIZE_MIN + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF + 1] ); + usRegAddress++; + + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_REGCNT_OFF] << 8 ); + usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_REGCNT_OFF + 1] ); + + ucRegByteCount = pucFrame[MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF]; + + if( ( usRegCount >= 1 ) && + ( usRegCount <= MB_PDU_FUNC_WRITE_MUL_REGCNT_MAX ) && + ( ucRegByteCount == ( UCHAR ) ( 2 * usRegCount ) ) ) + { + /* Make callback to update the register values. */ + eRegStatus = + eMBRegHoldingCB( &pucFrame[MB_PDU_FUNC_WRITE_MUL_VALUES_OFF], + usRegAddress, usRegCount, MB_REG_WRITE ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + /* The response contains the function code, the starting + * address and the quantity of registers. We reuse the + * old values in the buffer because they are still valid. + */ + *usLen = MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid request because the length is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} +#endif + +#if MB_FUNC_READ_HOLDING_ENABLED > 0 + +eMBException +eMBFuncReadHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usRegCount; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8 ); + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usRegCount >= 1 ) && ( usRegCount <= MB_PDU_FUNC_READ_REGCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_HOLDING_REGISTER; + *usLen += 1; + + /* Second byte in the response contain the number of bytes. */ + *pucFrameCur++ = ( UCHAR ) ( usRegCount * 2 ); + *usLen += 1; + + /* Make callback to fill the buffer. */ + eRegStatus = eMBRegHoldingCB( pucFrameCur, usRegAddress, usRegCount, MB_REG_READ ); + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + *usLen += usRegCount * 2; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid request because the length is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif + +#if MB_FUNC_READWRITE_HOLDING_ENABLED > 0 + +eMBException +eMBFuncReadWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegReadAddress; + USHORT usRegReadCount; + USHORT usRegWriteAddress; + USHORT usRegWriteCount; + UCHAR ucRegWriteByteCount; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen >= ( MB_PDU_FUNC_READWRITE_SIZE_MIN + MB_PDU_SIZE_MIN ) ) + { + usRegReadAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_ADDR_OFF] << 8U ); + usRegReadAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_ADDR_OFF + 1] ); + usRegReadAddress++; + + usRegReadCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_REGCNT_OFF] << 8U ); + usRegReadCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_READ_REGCNT_OFF + 1] ); + + usRegWriteAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_ADDR_OFF] << 8U ); + usRegWriteAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_ADDR_OFF + 1] ); + usRegWriteAddress++; + + usRegWriteCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_REGCNT_OFF] << 8U ); + usRegWriteCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READWRITE_WRITE_REGCNT_OFF + 1] ); + + ucRegWriteByteCount = pucFrame[MB_PDU_FUNC_READWRITE_BYTECNT_OFF]; + + if( ( usRegReadCount >= 1 ) && ( usRegReadCount <= 0x7D ) && + ( usRegWriteCount >= 1 ) && ( usRegWriteCount <= 0x79 ) && + ( ( 2 * usRegWriteCount ) == ucRegWriteByteCount ) ) + { + /* Make callback to update the register values. */ + eRegStatus = eMBRegHoldingCB( &pucFrame[MB_PDU_FUNC_READWRITE_WRITE_VALUES_OFF], + usRegWriteAddress, usRegWriteCount, MB_REG_WRITE ); + + if( eRegStatus == MB_ENOERR ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READWRITE_MULTIPLE_REGISTERS; + *usLen += 1; + + /* Second byte in the response contain the number of bytes. */ + *pucFrameCur++ = ( UCHAR ) ( usRegReadCount * 2 ); + *usLen += 1; + + /* Make the read callback. */ + eRegStatus = + eMBRegHoldingCB( pucFrameCur, usRegReadAddress, usRegReadCount, MB_REG_READ ); + if( eRegStatus == MB_ENOERR ) + { + *usLen += 2 * usRegReadCount; + } + } + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + return eStatus; +} + +#endif diff --git a/modbus/modbus/functions/mbfuncinput.c b/modbus/modbus/functions/mbfuncinput.c new file mode 100644 index 0000000..cceedba --- /dev/null +++ b/modbus/modbus/functions/mbfuncinput.c @@ -0,0 +1,122 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncinput.c,v 1.10 2007/09/12 10:15:56 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF ) +#define MB_PDU_FUNC_READ_REGCNT_OFF ( MB_PDU_DATA_OFF + 2 ) +#define MB_PDU_FUNC_READ_SIZE ( 4 ) +#define MB_PDU_FUNC_READ_REGCNT_MAX ( 0x007D ) + +#define MB_PDU_FUNC_READ_RSP_BYTECNT_OFF ( MB_PDU_DATA_OFF ) + +/* ----------------------- Static functions ---------------------------------*/ +eMBException prveMBError2Exception( eMBErrorCode eErrorCode ); + +/* ----------------------- Start implementation -----------------------------*/ +#if MB_FUNC_READ_INPUT_ENABLED > 0 + +eMBException +eMBFuncReadInputRegister( UCHAR * pucFrame, USHORT * usLen ) +{ + USHORT usRegAddress; + USHORT usRegCount; + UCHAR *pucFrameCur; + + eMBException eStatus = MB_EX_NONE; + eMBErrorCode eRegStatus; + + if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ) + { + usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 ); + usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] ); + usRegAddress++; + + usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8 ); + usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] ); + + /* Check if the number of registers to read is valid. If not + * return Modbus illegal data value exception. + */ + if( ( usRegCount >= 1 ) + && ( usRegCount < MB_PDU_FUNC_READ_REGCNT_MAX ) ) + { + /* Set the current PDU data pointer to the beginning. */ + pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF]; + *usLen = MB_PDU_FUNC_OFF; + + /* First byte contains the function code. */ + *pucFrameCur++ = MB_FUNC_READ_INPUT_REGISTER; + *usLen += 1; + + /* Second byte in the response contain the number of bytes. */ + *pucFrameCur++ = ( UCHAR )( usRegCount * 2 ); + *usLen += 1; + + eRegStatus = + eMBRegInputCB( pucFrameCur, usRegAddress, usRegCount ); + + /* If an error occured convert it into a Modbus exception. */ + if( eRegStatus != MB_ENOERR ) + { + eStatus = prveMBError2Exception( eRegStatus ); + } + else + { + *usLen += usRegCount * 2; + } + } + else + { + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + } + else + { + /* Can't be a valid read input register request because the length + * is incorrect. */ + eStatus = MB_EX_ILLEGAL_DATA_VALUE; + } + return eStatus; +} + +#endif diff --git a/modbus/modbus/functions/mbfuncother.c b/modbus/modbus/functions/mbfuncother.c new file mode 100644 index 0000000..fcee972 --- /dev/null +++ b/modbus/modbus/functions/mbfuncother.c @@ -0,0 +1,88 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfuncother.c,v 1.8 2006/12/07 22:10:34 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbconfig.h" + +#if MB_FUNC_OTHER_REP_SLAVEID_ENABLED > 0 + +/* ----------------------- Static variables ---------------------------------*/ +static UCHAR ucMBSlaveID[MB_FUNC_OTHER_REP_SLAVEID_BUF]; +static USHORT usMBSlaveIDLen; + +/* ----------------------- Start implementation -----------------------------*/ + +eMBErrorCode +eMBSetSlaveID( UCHAR ucSlaveID, BOOL xIsRunning, + UCHAR const *pucAdditional, USHORT usAdditionalLen ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + /* the first byte and second byte in the buffer is reserved for + * the parameter ucSlaveID and the running flag. The rest of + * the buffer is available for additional data. */ + if( usAdditionalLen + 2 < MB_FUNC_OTHER_REP_SLAVEID_BUF ) + { + usMBSlaveIDLen = 0; + ucMBSlaveID[usMBSlaveIDLen++] = ucSlaveID; + ucMBSlaveID[usMBSlaveIDLen++] = ( UCHAR )( xIsRunning ? 0xFF : 0x00 ); + if( usAdditionalLen > 0 ) + { + memcpy( &ucMBSlaveID[usMBSlaveIDLen], pucAdditional, + ( size_t )usAdditionalLen ); + usMBSlaveIDLen += usAdditionalLen; + } + } + else + { + eStatus = MB_ENORES; + } + return eStatus; +} + +eMBException +eMBFuncReportSlaveID( UCHAR * pucFrame, USHORT * usLen ) +{ + memcpy( &pucFrame[MB_PDU_DATA_OFF], &ucMBSlaveID[0], ( size_t )usMBSlaveIDLen ); + *usLen = ( USHORT )( MB_PDU_DATA_OFF + usMBSlaveIDLen ); + return MB_EX_NONE; +} + +#endif diff --git a/modbus/modbus/functions/mbutils.c b/modbus/modbus/functions/mbutils.c new file mode 100644 index 0000000..6a72570 --- /dev/null +++ b/modbus/modbus/functions/mbutils.c @@ -0,0 +1,141 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbutils.c,v 1.6 2007/02/18 23:49:07 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbproto.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define BITS_UCHAR 8U + +/* ----------------------- Start implementation -----------------------------*/ +void +xMBUtilSetBits( UCHAR * ucByteBuf, USHORT usBitOffset, UCHAR ucNBits, + UCHAR ucValue ) +{ + USHORT usWordBuf; + USHORT usMask; + USHORT usByteOffset; + USHORT usNPreBits; + USHORT usValue = ucValue; + + assert( ucNBits <= 8 ); + assert( ( size_t )BITS_UCHAR == sizeof( UCHAR ) * 8 ); + + /* Calculate byte offset for first byte containing the bit values starting + * at usBitOffset. */ + usByteOffset = ( USHORT )( ( usBitOffset ) / BITS_UCHAR ); + + /* How many bits precede our bits to set. */ + usNPreBits = ( USHORT )( usBitOffset - usByteOffset * BITS_UCHAR ); + + /* Move bit field into position over bits to set */ + usValue <<= usNPreBits; + + /* Prepare a mask for setting the new bits. */ + usMask = ( USHORT )( ( 1 << ( USHORT ) ucNBits ) - 1 ); + usMask <<= usBitOffset - usByteOffset * BITS_UCHAR; + + /* copy bits into temporary storage. */ + usWordBuf = ucByteBuf[usByteOffset]; + usWordBuf |= ucByteBuf[usByteOffset + 1] << BITS_UCHAR; + + /* Zero out bit field bits and then or value bits into them. */ + usWordBuf = ( USHORT )( ( usWordBuf & ( ~usMask ) ) | usValue ); + + /* move bits back into storage */ + ucByteBuf[usByteOffset] = ( UCHAR )( usWordBuf & 0xFF ); + ucByteBuf[usByteOffset + 1] = ( UCHAR )( usWordBuf >> BITS_UCHAR ); +} + +UCHAR +xMBUtilGetBits( UCHAR * ucByteBuf, USHORT usBitOffset, UCHAR ucNBits ) +{ + USHORT usWordBuf; + USHORT usMask; + USHORT usByteOffset; + USHORT usNPreBits; + + /* Calculate byte offset for first byte containing the bit values starting + * at usBitOffset. */ + usByteOffset = ( USHORT )( ( usBitOffset ) / BITS_UCHAR ); + + /* How many bits precede our bits to set. */ + usNPreBits = ( USHORT )( usBitOffset - usByteOffset * BITS_UCHAR ); + + /* Prepare a mask for setting the new bits. */ + usMask = ( USHORT )( ( 1 << ( USHORT ) ucNBits ) - 1 ); + + /* copy bits into temporary storage. */ + usWordBuf = ucByteBuf[usByteOffset]; + usWordBuf |= ucByteBuf[usByteOffset + 1] << BITS_UCHAR; + + /* throw away unneeded bits. */ + usWordBuf >>= usNPreBits; + + /* mask away bits above the requested bitfield. */ + usWordBuf &= usMask; + + return ( UCHAR ) usWordBuf; +} + +eMBException +prveMBError2Exception( eMBErrorCode eErrorCode ) +{ + eMBException eStatus; + + switch ( eErrorCode ) + { + case MB_ENOERR: + eStatus = MB_EX_NONE; + break; + + case MB_ENOREG: + eStatus = MB_EX_ILLEGAL_DATA_ADDRESS; + break; + + case MB_ETIMEDOUT: + eStatus = MB_EX_SLAVE_BUSY; + break; + + default: + eStatus = MB_EX_SLAVE_DEVICE_FAILURE; + break; + } + + return eStatus; +} diff --git a/modbus/modbus/include/mb.h b/modbus/modbus/include/mb.h new file mode 100644 index 0000000..4c75de5 --- /dev/null +++ b/modbus/modbus/include/mb.h @@ -0,0 +1,417 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mb.h,v 1.17 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_H +#define _MB_H + +#include "port.h" + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +#include "mbport.h" +#include "mbproto.h" + +/*! \defgroup modbus Modbus + * \code #include "mb.h" \endcode + * + * This module defines the interface for the application. It contains + * the basic functions and types required to use the Modbus protocol stack. + * A typical application will want to call eMBInit() first. If the device + * is ready to answer network requests it must then call eMBEnable() to activate + * the protocol stack. In the main loop the function eMBPoll() must be called + * periodically. The time interval between pooling depends on the configured + * Modbus timeout. If an RTOS is available a separate task should be created + * and the task should always call the function eMBPoll(). + * + * \code + * // Initialize protocol stack in RTU mode for a slave with address 10 = 0x0A + * eMBInit( MB_RTU, 0x0A, 38400, MB_PAR_EVEN ); + * // Enable the Modbus Protocol Stack. + * eMBEnable( ); + * for( ;; ) + * { + * // Call the main polling loop of the Modbus protocol stack. + * eMBPoll( ); + * ... + * } + * \endcode + */ + +/* ----------------------- Defines ------------------------------------------*/ + +/*! \ingroup modbus + * \brief Use the default Modbus TCP port (502) + */ +#define MB_TCP_PORT_USE_DEFAULT 0 + +/* ----------------------- Type definitions ---------------------------------*/ + +/*! \ingroup modbus + * \brief Modbus serial transmission modes (RTU/ASCII). + * + * Modbus serial supports two transmission modes. Either ASCII or RTU. RTU + * is faster but has more hardware requirements and requires a network with + * a low jitter. ASCII is slower and more reliable on slower links (E.g. modems) + */ + typedef enum +{ + MB_RTU, /*!< RTU transmission mode. */ + MB_ASCII, /*!< ASCII transmission mode. */ + MB_TCP /*!< TCP mode. */ +} eMBMode; + +/*! \ingroup modbus + * \brief If register should be written or read. + * + * This value is passed to the callback functions which support either + * reading or writing register values. Writing means that the application + * registers should be updated and reading means that the modbus protocol + * stack needs to know the current register values. + * + * \see eMBRegHoldingCB( ), eMBRegCoilsCB( ), eMBRegDiscreteCB( ) and + * eMBRegInputCB( ). + */ +typedef enum +{ + MB_REG_READ, /*!< Read register values and pass to protocol stack. */ + MB_REG_WRITE /*!< Update register values. */ +} eMBRegisterMode; + +/*! \ingroup modbus + * \brief Errorcodes used by all function in the protocol stack. + */ +typedef enum +{ + MB_ENOERR, /*!< no error. */ + MB_ENOREG, /*!< illegal register address. */ + MB_EINVAL, /*!< illegal argument. */ + MB_EPORTERR, /*!< porting layer error. */ + MB_ENORES, /*!< insufficient resources. */ + MB_EIO, /*!< I/O error. */ + MB_EILLSTATE, /*!< protocol stack in illegal state. */ + MB_ETIMEDOUT /*!< timeout error occurred. */ +} eMBErrorCode; + + +/* ----------------------- Function prototypes ------------------------------*/ +/*! \ingroup modbus + * \brief Initialize the Modbus protocol stack. + * + * This functions initializes the ASCII or RTU module and calls the + * init functions of the porting layer to prepare the hardware. Please + * note that the receiver is still disabled and no Modbus frames are + * processed until eMBEnable( ) has been called. + * + * \param eMode If ASCII or RTU mode should be used. + * \param ucSlaveAddress The slave address. Only frames sent to this + * address or to the broadcast address are processed. + * \param ucPort The port to use. E.g. 1 for COM1 on windows. This value + * is platform dependent and some ports simply choose to ignore it. + * \param ulBaudRate The baudrate. E.g. 19200. Supported baudrates depend + * on the porting layer. + * \param eParity Parity used for serial transmission. + * + * \return If no error occurs the function returns eMBErrorCode::MB_ENOERR. + * The protocol is then in the disabled state and ready for activation + * by calling eMBEnable( ). Otherwise one of the following error codes + * is returned: + * - eMBErrorCode::MB_EINVAL If the slave address was not valid. Valid + * slave addresses are in the range 1 - 247. + * - eMBErrorCode::MB_EPORTERR IF the porting layer returned an error. + */ +extern eMBErrorCode eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, + UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ); + +/*! \ingroup modbus + * \brief Initialize the Modbus protocol stack for Modbus TCP. + * + * This function initializes the Modbus TCP Module. Please note that + * frame processing is still disabled until eMBEnable( ) is called. + * + * \param usTCPPort The TCP port to listen on. + * \return If the protocol stack has been initialized correctly the function + * returns eMBErrorCode::MB_ENOERR. Otherwise one of the following error + * codes is returned: + * - eMBErrorCode::MB_EINVAL If the slave address was not valid. Valid + * slave addresses are in the range 1 - 247. + * - eMBErrorCode::MB_EPORTERR IF the porting layer returned an error. + */ +extern eMBErrorCode eMBTCPInit( USHORT usTCPPort ); + +/*! \ingroup modbus + * \brief Release resources used by the protocol stack. + * + * This function disables the Modbus protocol stack and release all + * hardware resources. It must only be called when the protocol stack + * is disabled. + * + * \note Note all ports implement this function. A port which wants to + * get an callback must define the macro MB_PORT_HAS_CLOSE to 1. + * + * \return If the resources where released it return eMBErrorCode::MB_ENOERR. + * If the protocol stack is not in the disabled state it returns + * eMBErrorCode::MB_EILLSTATE. + */ +extern eMBErrorCode eMBClose( void ); + +/*! \ingroup modbus + * \brief Enable the Modbus protocol stack. + * + * This function enables processing of Modbus frames. Enabling the protocol + * stack is only possible if it is in the disabled state. + * + * \return If the protocol stack is now in the state enabled it returns + * eMBErrorCode::MB_ENOERR. If it was not in the disabled state it + * return eMBErrorCode::MB_EILLSTATE. + */ +eMBErrorCode eMBEnable( void ); + +/*! \ingroup modbus + * \brief Disable the Modbus protocol stack. + * + * This function disables processing of Modbus frames. + * + * \return If the protocol stack has been disabled it returns + * eMBErrorCode::MB_ENOERR. If it was not in the enabled state it returns + * eMBErrorCode::MB_EILLSTATE. + */ +extern eMBErrorCode eMBDisable( void ); + +/*! \ingroup modbus + * \brief The main pooling loop of the Modbus protocol stack. + * + * This function must be called periodically. The timer interval required + * is given by the application dependent Modbus slave timeout. Internally the + * function calls xMBPortEventGet() and waits for an event from the receiver or + * transmitter state machines. + * + * \return If the protocol stack is not in the enabled state the function + * returns eMBErrorCode::MB_EILLSTATE. Otherwise it returns + * eMBErrorCode::MB_ENOERR. + */ +extern eMBErrorCode eMBPoll( void ); + +/*! \ingroup modbus + * \brief Configure the slave id of the device. + * + * This function should be called when the Modbus function Report Slave ID + * is enabled ( By defining MB_FUNC_OTHER_REP_SLAVEID_ENABLED in mbconfig.h ). + * + * \param ucSlaveID Values is returned in the Slave ID byte of the + * Report Slave ID response. + * \param xIsRunning If TRUE the Run Indicator Status byte is set to 0xFF. + * otherwise the Run Indicator Status is 0x00. + * \param pucAdditional Values which should be returned in the Additional + * bytes of the Report Slave ID response. + * \param usAdditionalLen Length of the buffer pucAdditonal. + * + * \return If the static buffer defined by MB_FUNC_OTHER_REP_SLAVEID_BUF in + * mbconfig.h is to small it returns eMBErrorCode::MB_ENORES. Otherwise + * it returns eMBErrorCode::MB_ENOERR. + */ +extern eMBErrorCode eMBSetSlaveID( UCHAR ucSlaveID, BOOL xIsRunning, + UCHAR const *pucAdditional, + USHORT usAdditionalLen ); + +/*! \ingroup modbus + * \brief Registers a callback handler for a given function code. + * + * This function registers a new callback handler for a given function code. + * The callback handler supplied is responsible for interpreting the Modbus PDU and + * the creation of an appropriate response. In case of an error it should return + * one of the possible Modbus exceptions which results in a Modbus exception frame + * sent by the protocol stack. + * + * \param ucFunctionCode The Modbus function code for which this handler should + * be registers. Valid function codes are in the range 1 to 127. + * \param pxHandler The function handler which should be called in case + * such a frame is received. If \c NULL a previously registered function handler + * for this function code is removed. + * + * \return eMBErrorCode::MB_ENOERR if the handler has been installed. If no + * more resources are available it returns eMBErrorCode::MB_ENORES. In this + * case the values in mbconfig.h should be adjusted. If the argument was not + * valid it returns eMBErrorCode::MB_EINVAL. + */ +extern eMBErrorCode eMBRegisterCB( UCHAR ucFunctionCode, + pxMBFunctionHandler pxHandler ); + +/* ----------------------- Callback -----------------------------------------*/ + +/*! \defgroup modbus_registers Modbus Registers + * \code #include "mb.h" \endcode + * The protocol stack does not internally allocate any memory for the + * registers. This makes the protocol stack very small and also usable on + * low end targets. In addition the values don't have to be in the memory + * and could for example be stored in a flash.
      + * Whenever the protocol stack requires a value it calls one of the callback + * function with the register address and the number of registers to read + * as an argument. The application should then read the actual register values + * (for example the ADC voltage) and should store the result in the supplied + * buffer.
      + * If the protocol stack wants to update a register value because a write + * register function was received a buffer with the new register values is + * passed to the callback function. The function should then use these values + * to update the application register values. + */ + +/*! \ingroup modbus_registers + * \brief Callback function used if the value of a Input Register + * is required by the protocol stack. The starting register address is given + * by \c usAddress and the last register is given by usAddress + + * usNRegs - 1. + * + * \param pucRegBuffer A buffer where the callback function should write + * the current value of the modbus registers to. + * \param usAddress The starting address of the register. Input registers + * are in the range 1 - 65535. + * \param usNRegs Number of registers the callback function must supply. + * + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If the application can not supply values + * for registers within this range. In this case a + * ILLEGAL DATA ADDRESS exception frame is sent as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +extern eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNRegs ); + +/*! \ingroup modbus_registers + * \brief Callback function used if a Holding Register value is + * read or written by the protocol stack. The starting register address + * is given by \c usAddress and the last register is given by + * usAddress + usNRegs - 1. + * + * \param pucRegBuffer If the application registers values should be updated the + * buffer points to the new registers values. If the protocol stack needs + * to now the current values the callback function should write them into + * this buffer. + * \param usAddress The starting address of the register. + * \param usNRegs Number of registers to read or write. + * \param eMode If eMBRegisterMode::MB_REG_WRITE the application register + * values should be updated from the values in the buffer. For example + * this would be the case when the Modbus master has issued an + * WRITE SINGLE REGISTER command. + * If the value eMBRegisterMode::MB_REG_READ the application should copy + * the current values into the buffer \c pucRegBuffer. + * + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If the application can not supply values + * for registers within this range. In this case a + * ILLEGAL DATA ADDRESS exception frame is sent as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +extern eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNRegs, eMBRegisterMode eMode ); + +/*! \ingroup modbus_registers + * \brief Callback function used if a Coil Register value is + * read or written by the protocol stack. If you are going to use + * this function you might use the functions xMBUtilSetBits( ) and + * xMBUtilGetBits( ) for working with bitfields. + * + * \param pucRegBuffer The bits are packed in bytes where the first coil + * starting at address \c usAddress is stored in the LSB of the + * first byte in the buffer pucRegBuffer. + * If the buffer should be written by the callback function unused + * coil values (I.e. if not a multiple of eight coils is used) should be set + * to zero. + * \param usAddress The first coil number. + * \param usNCoils Number of coil values requested. + * \param eMode If eMBRegisterMode::MB_REG_WRITE the application values should + * be updated from the values supplied in the buffer \c pucRegBuffer. + * If eMBRegisterMode::MB_REG_READ the application should store the current + * values in the buffer \c pucRegBuffer. + * + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If the application does not map an coils + * within the requested address range. In this case a + * ILLEGAL DATA ADDRESS is sent as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +extern eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNCoils, eMBRegisterMode eMode ); + +/*! \ingroup modbus_registers + * \brief Callback function used if a Input Discrete Register value is + * read by the protocol stack. + * + * If you are going to use his function you might use the functions + * xMBUtilSetBits( ) and xMBUtilGetBits( ) for working with bitfields. + * + * \param pucRegBuffer The buffer should be updated with the current + * coil values. The first discrete input starting at \c usAddress must be + * stored at the LSB of the first byte in the buffer. If the requested number + * is not a multiple of eight the remaining bits should be set to zero. + * \param usAddress The starting address of the first discrete input. + * \param usNDiscrete Number of discrete input values. + * \return The function must return one of the following error codes: + * - eMBErrorCode::MB_ENOERR If no error occurred. In this case a normal + * Modbus response is sent. + * - eMBErrorCode::MB_ENOREG If no such discrete inputs exists. + * In this case a ILLEGAL DATA ADDRESS exception frame is sent + * as a response. + * - eMBErrorCode::MB_ETIMEDOUT If the requested register block is + * currently not available and the application dependent response + * timeout would be violated. In this case a SLAVE DEVICE BUSY + * exception is sent as a response. + * - eMBErrorCode::MB_EIO If an unrecoverable error occurred. In this case + * a SLAVE DEVICE FAILURE exception is sent as a response. + */ +extern eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, + USHORT usNDiscrete ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/include/mbconfig.h b/modbus/modbus/include/mbconfig.h new file mode 100644 index 0000000..7912143 --- /dev/null +++ b/modbus/modbus/include/mbconfig.h @@ -0,0 +1,132 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbconfig.h,v 1.15 2010/06/06 13:54:40 wolti Exp $ + */ + +#ifndef _MB_CONFIG_H +#define _MB_CONFIG_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +/* ----------------------- Defines ------------------------------------------*/ +/*! \defgroup modbus_cfg Modbus Configuration + * + * Most modules in the protocol stack are completly optional and can be + * excluded. This is specially important if target resources are very small + * and program memory space should be saved.
      + * + * All of these settings are available in the file mbconfig.h + */ +/*! \addtogroup modbus_cfg + * @{ + */ +/*! \brief If Modbus ASCII support is enabled. */ +#define MB_ASCII_ENABLED ( 0 ) + +/*! \brief If Modbus RTU support is enabled. */ +#define MB_RTU_ENABLED ( 0 ) + +/*! \brief If Modbus TCP support is enabled. */ +#define MB_TCP_ENABLED ( 1 ) + +/*! \brief The character timeout value for Modbus ASCII. + * + * The character timeout value is not fixed for Modbus ASCII and is therefore + * a configuration option. It should be set to the maximum expected delay + * time of the network. + */ +#define MB_ASCII_TIMEOUT_SEC ( 1 ) + +/*! \brief Timeout to wait in ASCII prior to enabling transmitter. + * + * If defined the function calls vMBPortSerialDelay with the argument + * MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS to allow for a delay before + * the serial transmitter is enabled. This is required because some + * targets are so fast that there is no time between receiving and + * transmitting the frame. If the master is to slow with enabling its + * receiver then he will not receive the response correctly. + */ +#ifndef MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS +#define MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS ( 0 ) +#endif + +/*! \brief Maximum number of Modbus functions codes the protocol stack + * should support. + * + * The maximum number of supported Modbus functions must be greater than + * the sum of all enabled functions in this file and custom function + * handlers. If set to small adding more functions will fail. + */ +#define MB_FUNC_HANDLERS_MAX ( 16 ) + +/*! \brief Number of bytes which should be allocated for the Report Slave ID + * command. + * + * This number limits the maximum size of the additional segment in the + * report slave id function. See eMBSetSlaveID( ) for more information on + * how to set this value. It is only used if MB_FUNC_OTHER_REP_SLAVEID_ENABLED + * is set to 1. + */ +#define MB_FUNC_OTHER_REP_SLAVEID_BUF ( 32 ) + +/*! \brief If the Report Slave ID function should be enabled. */ +#define MB_FUNC_OTHER_REP_SLAVEID_ENABLED ( 1 ) + +/*! \brief If the Read Input Registers function should be enabled. */ +#define MB_FUNC_READ_INPUT_ENABLED ( 1 ) + +/*! \brief If the Read Holding Registers function should be enabled. */ +#define MB_FUNC_READ_HOLDING_ENABLED ( 1 ) + +/*! \brief If the Write Single Register function should be enabled. */ +#define MB_FUNC_WRITE_HOLDING_ENABLED ( 1 ) + +/*! \brief If the Write Multiple registers function should be enabled. */ +#define MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED ( 1 ) + +/*! \brief If the Read Coils function should be enabled. */ +#define MB_FUNC_READ_COILS_ENABLED ( 0 ) + +/*! \brief If the Write Coils function should be enabled. */ +#define MB_FUNC_WRITE_COIL_ENABLED ( 0 ) + +/*! \brief If the Write Multiple Coils function should be enabled. */ +#define MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED ( 0 ) + +/*! \brief If the Read Discrete Inputs function should be enabled. */ +#define MB_FUNC_READ_DISCRETE_INPUTS_ENABLED ( 0 ) + +/*! \brief If the Read/Write Multiple Registers function should be enabled. */ +#define MB_FUNC_READWRITE_HOLDING_ENABLED ( 1 ) + +/*! @} */ +#ifdef __cplusplus + PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/include/mbframe.h b/modbus/modbus/include/mbframe.h new file mode 100644 index 0000000..99d59c6 --- /dev/null +++ b/modbus/modbus/include/mbframe.h @@ -0,0 +1,87 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbframe.h,v 1.9 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_FRAME_H +#define _MB_FRAME_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +/*! + * Constants which defines the format of a modbus frame. The example is + * shown for a Modbus RTU/ASCII frame. Note that the Modbus PDU is not + * dependent on the underlying transport. + * + * + * <------------------------ MODBUS SERIAL LINE PDU (1) -------------------> + * <----------- MODBUS PDU (1') ----------------> + * +-----------+---------------+----------------------------+-------------+ + * | Address | Function Code | Data | CRC/LRC | + * +-----------+---------------+----------------------------+-------------+ + * | | | | + * (2) (3/2') (3') (4) + * + * (1) ... MB_SER_PDU_SIZE_MAX = 256 + * (2) ... MB_SER_PDU_ADDR_OFF = 0 + * (3) ... MB_SER_PDU_PDU_OFF = 1 + * (4) ... MB_SER_PDU_SIZE_CRC = 2 + * + * (1') ... MB_PDU_SIZE_MAX = 253 + * (2') ... MB_PDU_FUNC_OFF = 0 + * (3') ... MB_PDU_DATA_OFF = 1 + * + */ + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_PDU_SIZE_MAX 253 /*!< Maximum size of a PDU. */ +#define MB_PDU_SIZE_MIN 1 /*!< Function Code */ +#define MB_PDU_FUNC_OFF 0 /*!< Offset of function code in PDU. */ +#define MB_PDU_DATA_OFF 1 /*!< Offset for response data in PDU. */ + +/* ----------------------- Prototypes 0-------------------------------------*/ +typedef void ( *pvMBFrameStart ) ( void ); + +typedef void ( *pvMBFrameStop ) ( void ); + +typedef eMBErrorCode( *peMBFrameReceive ) ( UCHAR * pucRcvAddress, + UCHAR ** pucFrame, + USHORT * pusLength ); + +typedef eMBErrorCode( *peMBFrameSend ) ( UCHAR slaveAddress, + const UCHAR * pucFrame, + USHORT usLength ); + +typedef void( *pvMBFrameClose ) ( void ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/include/mbfunc.h b/modbus/modbus/include/mbfunc.h new file mode 100644 index 0000000..aea14f7 --- /dev/null +++ b/modbus/modbus/include/mbfunc.h @@ -0,0 +1,80 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbfunc.h,v 1.12 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_FUNC_H +#define _MB_FUNC_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +#if MB_FUNC_OTHER_REP_SLAVEID_BUF > 0 + eMBException eMBFuncReportSlaveID( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_INPUT_ENABLED > 0 +eMBException eMBFuncReadInputRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_HOLDING_ENABLED > 0 +eMBException eMBFuncReadHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_HOLDING_ENABLED > 0 +eMBException eMBFuncWriteHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED > 0 +eMBException eMBFuncWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_COILS_ENABLED > 0 +eMBException eMBFuncReadCoils( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_COIL_ENABLED > 0 +eMBException eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0 +eMBException eMBFuncWriteMultipleCoils( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READ_DISCRETE_INPUTS_ENABLED > 0 +eMBException eMBFuncReadDiscreteInputs( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#if MB_FUNC_READWRITE_HOLDING_ENABLED > 0 +eMBException eMBFuncReadWriteMultipleHoldingRegister( UCHAR * pucFrame, USHORT * usLen ); +#endif + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/include/mbport.h b/modbus/modbus/include/mbport.h new file mode 100644 index 0000000..4f25a96 --- /dev/null +++ b/modbus/modbus/include/mbport.h @@ -0,0 +1,129 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbport.h,v 1.19 2010/06/06 13:54:40 wolti Exp $ + */ + +#ifndef _MB_PORT_H +#define _MB_PORT_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +/* ----------------------- Type definitions ---------------------------------*/ + +typedef enum +{ + EV_READY, /*!< Startup finished. */ + EV_FRAME_RECEIVED, /*!< Frame received. */ + EV_EXECUTE, /*!< Execute function. */ + EV_FRAME_SENT /*!< Frame sent. */ +} eMBEventType; + +/*! \ingroup modbus + * \brief Parity used for characters in serial mode. + * + * The parity which should be applied to the characters sent over the serial + * link. Please note that this values are actually passed to the porting + * layer and therefore not all parity modes might be available. + */ +typedef enum +{ + MB_PAR_NONE, /*!< No parity. */ + MB_PAR_ODD, /*!< Odd parity. */ + MB_PAR_EVEN /*!< Even parity. */ +} eMBParity; + +/* ----------------------- Supporting functions -----------------------------*/ +BOOL xMBPortEventInit( void ); + +BOOL xMBPortEventPost( eMBEventType eEvent ); + +BOOL xMBPortEventGet( /*@out@ */ eMBEventType * eEvent ); + +/* ----------------------- Serial port functions ----------------------------*/ + +BOOL xMBPortSerialInit( UCHAR ucPort, ULONG ulBaudRate, + UCHAR ucDataBits, eMBParity eParity ); + +void vMBPortClose( void ); + +void xMBPortSerialClose( void ); + +void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable ); + +BOOL xMBPortSerialGetByte( CHAR * pucByte ); + +BOOL xMBPortSerialPutByte( CHAR ucByte ); + +/* ----------------------- Timers functions ---------------------------------*/ +BOOL xMBPortTimersInit( USHORT usTimeOut50us ); + +void xMBPortTimersClose( void ); + +void vMBPortTimersEnable( void ); + +void vMBPortTimersDisable( void ); + +void vMBPortTimersDelay( USHORT usTimeOutMS ); + +/* ----------------------- Callback for the protocol stack ------------------*/ + +/*! + * \brief Callback function for the porting layer when a new byte is + * available. + * + * Depending upon the mode this callback function is used by the RTU or + * ASCII transmission layers. In any case a call to xMBPortSerialGetByte() + * must immediately return a new character. + * + * \return TRUE if a event was posted to the queue because + * a new byte was received. The port implementation should wake up the + * tasks which are currently blocked on the eventqueue. + */ +extern BOOL( *pxMBFrameCBByteReceived ) ( void ); + +extern BOOL( *pxMBFrameCBTransmitterEmpty ) ( void ); + +extern BOOL( *pxMBPortCBTimerExpired ) ( void ); + +/* ----------------------- TCP port functions -------------------------------*/ +BOOL xMBTCPPortInit( USHORT usTCPPort ); + +void vMBTCPPortClose( void ); + +void vMBTCPPortDisable( void ); + +BOOL xMBTCPPortGetRequest( UCHAR **ppucMBTCPFrame, USHORT * usTCPLength ); + +BOOL xMBTCPPortSendResponse( const UCHAR *pucMBTCPFrame, USHORT usTCPLength ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/include/mbproto.h b/modbus/modbus/include/mbproto.h new file mode 100644 index 0000000..786aaf4 --- /dev/null +++ b/modbus/modbus/include/mbproto.h @@ -0,0 +1,83 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbproto.h,v 1.14 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_PROTO_H +#define _MB_PROTO_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +/* ----------------------- Defines ------------------------------------------*/ +#define MB_ADDRESS_BROADCAST ( 0 ) /*! Modbus broadcast address. */ +#define MB_ADDRESS_MIN ( 1 ) /*! Smallest possible slave address. */ +#define MB_ADDRESS_MAX ( 247 ) /*! Biggest possible slave address. */ +#define MB_FUNC_NONE ( 0 ) +#define MB_FUNC_READ_COILS ( 1 ) +#define MB_FUNC_READ_DISCRETE_INPUTS ( 2 ) +#define MB_FUNC_WRITE_SINGLE_COIL ( 5 ) +#define MB_FUNC_WRITE_MULTIPLE_COILS ( 15 ) +#define MB_FUNC_READ_HOLDING_REGISTER ( 3 ) +#define MB_FUNC_READ_INPUT_REGISTER ( 4 ) +#define MB_FUNC_WRITE_REGISTER ( 6 ) +#define MB_FUNC_WRITE_MULTIPLE_REGISTERS ( 16 ) +#define MB_FUNC_READWRITE_MULTIPLE_REGISTERS ( 23 ) +#define MB_FUNC_DIAG_READ_EXCEPTION ( 7 ) +#define MB_FUNC_DIAG_DIAGNOSTIC ( 8 ) +#define MB_FUNC_DIAG_GET_COM_EVENT_CNT ( 11 ) +#define MB_FUNC_DIAG_GET_COM_EVENT_LOG ( 12 ) +#define MB_FUNC_OTHER_REPORT_SLAVEID ( 17 ) +#define MB_FUNC_ERROR ( 128 ) +/* ----------------------- Type definitions ---------------------------------*/ + typedef enum +{ + MB_EX_NONE = 0x00, + MB_EX_ILLEGAL_FUNCTION = 0x01, + MB_EX_ILLEGAL_DATA_ADDRESS = 0x02, + MB_EX_ILLEGAL_DATA_VALUE = 0x03, + MB_EX_SLAVE_DEVICE_FAILURE = 0x04, + MB_EX_ACKNOWLEDGE = 0x05, + MB_EX_SLAVE_BUSY = 0x06, + MB_EX_MEMORY_PARITY_ERROR = 0x08, + MB_EX_GATEWAY_PATH_FAILED = 0x0A, + MB_EX_GATEWAY_TGT_FAILED = 0x0B +} eMBException; + +typedef eMBException( *pxMBFunctionHandler ) ( UCHAR * pucFrame, USHORT * pusLength ); + +typedef struct +{ + UCHAR ucFunctionCode; + pxMBFunctionHandler pxHandler; +} xMBFunctionHandler; + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/include/mbutils.h b/modbus/modbus/include/mbutils.h new file mode 100644 index 0000000..6149575 --- /dev/null +++ b/modbus/modbus/include/mbutils.h @@ -0,0 +1,108 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbutils.h,v 1.5 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_UTILS_H +#define _MB_UTILS_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +/*! \defgroup modbus_utils Utilities + * + * This module contains some utility functions which can be used by + * the application. It includes some special functions for working with + * bitfields backed by a character array buffer. + * + */ +/*! \addtogroup modbus_utils + * @{ + */ +/*! \brief Function to set bits in a byte buffer. + * + * This function allows the efficient use of an array to implement bitfields. + * The array used for storing the bits must always be a multiple of two + * bytes. Up to eight bits can be set or cleared in one operation. + * + * \param ucByteBuf A buffer where the bit values are stored. Must be a + * multiple of 2 bytes. No length checking is performed and if + * usBitOffset / 8 is greater than the size of the buffer memory contents + * is overwritten. + * \param usBitOffset The starting address of the bits to set. The first + * bit has the offset 0. + * \param ucNBits Number of bits to modify. The value must always be smaller + * than 8. + * \param ucValues Thew new values for the bits. The value for the first bit + * starting at usBitOffset is the LSB of the value + * ucValues + * + * \code + * ucBits[2] = {0, 0}; + * + * // Set bit 4 to 1 (read: set 1 bit starting at bit offset 4 to value 1) + * xMBUtilSetBits( ucBits, 4, 1, 1 ); + * + * // Set bit 7 to 1 and bit 8 to 0. + * xMBUtilSetBits( ucBits, 7, 2, 0x01 ); + * + * // Set bits 8 - 11 to 0x05 and bits 12 - 15 to 0x0A; + * xMBUtilSetBits( ucBits, 8, 8, 0x5A); + * \endcode + */ +void xMBUtilSetBits( UCHAR * ucByteBuf, USHORT usBitOffset, + UCHAR ucNBits, UCHAR ucValues ); + +/*! \brief Function to read bits in a byte buffer. + * + * This function is used to extract up bit values from an array. Up to eight + * bit values can be extracted in one step. + * + * \param ucByteBuf A buffer where the bit values are stored. + * \param usBitOffset The starting address of the bits to set. The first + * bit has the offset 0. + * \param ucNBits Number of bits to modify. The value must always be smaller + * than 8. + * + * \code + * UCHAR ucBits[2] = {0, 0}; + * UCHAR ucResult; + * + * // Extract the bits 3 - 10. + * ucResult = xMBUtilGetBits( ucBits, 3, 8 ); + * \endcode + */ +UCHAR xMBUtilGetBits( UCHAR * ucByteBuf, USHORT usBitOffset, + UCHAR ucNBits ); + +/*! @} */ + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/mb.c b/modbus/modbus/mb.c new file mode 100644 index 0000000..ea06ddb --- /dev/null +++ b/modbus/modbus/mb.c @@ -0,0 +1,413 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mb.c,v 1.28 2010/06/06 13:54:40 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbconfig.h" +#include "mbframe.h" +#include "mbproto.h" +#include "mbfunc.h" + +#include "mbport.h" +#if MB_RTU_ENABLED == 1 +#include "mbrtu.h" +#endif +#if MB_ASCII_ENABLED == 1 +#include "mbascii.h" +#endif +#if MB_TCP_ENABLED == 1 +#include "mbtcp.h" +#endif + +#ifndef MB_PORT_HAS_CLOSE +#define MB_PORT_HAS_CLOSE 0 +#endif + +/* ----------------------- Static variables ---------------------------------*/ + +static UCHAR ucMBAddress; +static eMBMode eMBCurrentMode; + +static enum +{ + STATE_ENABLED, + STATE_DISABLED, + STATE_NOT_INITIALIZED +} eMBState = STATE_NOT_INITIALIZED; + +/* Functions pointer which are initialized in eMBInit( ). Depending on the + * mode (RTU or ASCII) the are set to the correct implementations. + */ +static peMBFrameSend peMBFrameSendCur; +static pvMBFrameStart pvMBFrameStartCur; +static pvMBFrameStop pvMBFrameStopCur; +static peMBFrameReceive peMBFrameReceiveCur; +static pvMBFrameClose pvMBFrameCloseCur; + +/* Callback functions required by the porting layer. They are called when + * an external event has happend which includes a timeout or the reception + * or transmission of a character. + */ +BOOL( *pxMBFrameCBByteReceived ) ( void ); +BOOL( *pxMBFrameCBTransmitterEmpty ) ( void ); +BOOL( *pxMBPortCBTimerExpired ) ( void ); + +BOOL( *pxMBFrameCBReceiveFSMCur ) ( void ); +BOOL( *pxMBFrameCBTransmitFSMCur ) ( void ); + +/* An array of Modbus functions handlers which associates Modbus function + * codes with implementing functions. + */ +static xMBFunctionHandler xFuncHandlers[MB_FUNC_HANDLERS_MAX] = { +#if MB_FUNC_OTHER_REP_SLAVEID_ENABLED > 0 + {MB_FUNC_OTHER_REPORT_SLAVEID, eMBFuncReportSlaveID}, +#endif +#if MB_FUNC_READ_INPUT_ENABLED > 0 + {MB_FUNC_READ_INPUT_REGISTER, eMBFuncReadInputRegister}, +#endif +#if MB_FUNC_READ_HOLDING_ENABLED > 0 + {MB_FUNC_READ_HOLDING_REGISTER, eMBFuncReadHoldingRegister}, +#endif +#if MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED > 0 + {MB_FUNC_WRITE_MULTIPLE_REGISTERS, eMBFuncWriteMultipleHoldingRegister}, +#endif +#if MB_FUNC_WRITE_HOLDING_ENABLED > 0 + {MB_FUNC_WRITE_REGISTER, eMBFuncWriteHoldingRegister}, +#endif +#if MB_FUNC_READWRITE_HOLDING_ENABLED > 0 + {MB_FUNC_READWRITE_MULTIPLE_REGISTERS, eMBFuncReadWriteMultipleHoldingRegister}, +#endif +#if MB_FUNC_READ_COILS_ENABLED > 0 + {MB_FUNC_READ_COILS, eMBFuncReadCoils}, +#endif +#if MB_FUNC_WRITE_COIL_ENABLED > 0 + {MB_FUNC_WRITE_SINGLE_COIL, eMBFuncWriteCoil}, +#endif +#if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0 + {MB_FUNC_WRITE_MULTIPLE_COILS, eMBFuncWriteMultipleCoils}, +#endif +#if MB_FUNC_READ_DISCRETE_INPUTS_ENABLED > 0 + {MB_FUNC_READ_DISCRETE_INPUTS, eMBFuncReadDiscreteInputs}, +#endif +}; + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + /* check preconditions */ + if( ( ucSlaveAddress == MB_ADDRESS_BROADCAST ) || + ( ucSlaveAddress < MB_ADDRESS_MIN ) || ( ucSlaveAddress > MB_ADDRESS_MAX ) ) + { + eStatus = MB_EINVAL; + } + else + { + ucMBAddress = ucSlaveAddress; + + switch ( eMode ) + { +#if MB_RTU_ENABLED > 0 + case MB_RTU: + pvMBFrameStartCur = eMBRTUStart; + pvMBFrameStopCur = eMBRTUStop; + peMBFrameSendCur = eMBRTUSend; + peMBFrameReceiveCur = eMBRTUReceive; + pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL; + pxMBFrameCBByteReceived = xMBRTUReceiveFSM; + pxMBFrameCBTransmitterEmpty = xMBRTUTransmitFSM; + pxMBPortCBTimerExpired = xMBRTUTimerT35Expired; + + eStatus = eMBRTUInit( ucMBAddress, ucPort, ulBaudRate, eParity ); + break; +#endif +#if MB_ASCII_ENABLED > 0 + case MB_ASCII: + pvMBFrameStartCur = eMBASCIIStart; + pvMBFrameStopCur = eMBASCIIStop; + peMBFrameSendCur = eMBASCIISend; + peMBFrameReceiveCur = eMBASCIIReceive; + pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL; + pxMBFrameCBByteReceived = xMBASCIIReceiveFSM; + pxMBFrameCBTransmitterEmpty = xMBASCIITransmitFSM; + pxMBPortCBTimerExpired = xMBASCIITimerT1SExpired; + + eStatus = eMBASCIIInit( ucMBAddress, ucPort, ulBaudRate, eParity ); + break; +#endif + default: + eStatus = MB_EINVAL; + } + + if( eStatus == MB_ENOERR ) + { + if( !xMBPortEventInit( ) ) + { + /* port dependent event module initalization failed. */ + eStatus = MB_EPORTERR; + } + else + { + eMBCurrentMode = eMode; + eMBState = STATE_DISABLED; + } + } + } + return eStatus; +} + +#if MB_TCP_ENABLED > 0 +eMBErrorCode +eMBTCPInit( USHORT ucTCPPort ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( ( eStatus = eMBTCPDoInit( ucTCPPort ) ) != MB_ENOERR ) + { + eMBState = STATE_DISABLED; + } + else if( !xMBPortEventInit( ) ) + { + + /* Port dependent event module initalization failed. */ + eStatus = MB_EPORTERR; + } + else + { + pvMBFrameStartCur = eMBTCPStart; + pvMBFrameStopCur = eMBTCPStop; + peMBFrameReceiveCur = eMBTCPReceive; + peMBFrameSendCur = eMBTCPSend; + pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBTCPPortClose : NULL; + ucMBAddress = MB_TCP_PSEUDO_ADDRESS; + eMBCurrentMode = MB_TCP; + eMBState = STATE_DISABLED; + } + return eStatus; +} +#endif + +eMBErrorCode +eMBRegisterCB( UCHAR ucFunctionCode, pxMBFunctionHandler pxHandler ) +{ + int i; + eMBErrorCode eStatus; + + if( ( 0 < ucFunctionCode ) && ( ucFunctionCode <= 127 ) ) + { + ENTER_CRITICAL_SECTION( ); + if( pxHandler != NULL ) + { + for( i = 0; i < MB_FUNC_HANDLERS_MAX; i++ ) + { + if( ( xFuncHandlers[i].pxHandler == NULL ) || + ( xFuncHandlers[i].pxHandler == pxHandler ) ) + { + xFuncHandlers[i].ucFunctionCode = ucFunctionCode; + xFuncHandlers[i].pxHandler = pxHandler; + break; + } + } + eStatus = ( i != MB_FUNC_HANDLERS_MAX ) ? MB_ENOERR : MB_ENORES; + } + else + { + for( i = 0; i < MB_FUNC_HANDLERS_MAX; i++ ) + { + if( xFuncHandlers[i].ucFunctionCode == ucFunctionCode ) + { + xFuncHandlers[i].ucFunctionCode = 0; + xFuncHandlers[i].pxHandler = NULL; + break; + } + } + /* Remove can't fail. */ + eStatus = MB_ENOERR; + } + EXIT_CRITICAL_SECTION( ); + } + else + { + eStatus = MB_EINVAL; + } + return eStatus; +} + + +eMBErrorCode +eMBClose( void ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( eMBState == STATE_DISABLED ) + { + if( pvMBFrameCloseCur != NULL ) + { + pvMBFrameCloseCur( ); + } + } + else + { + eStatus = MB_EILLSTATE; + } + return eStatus; +} + +eMBErrorCode +eMBEnable( void ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( eMBState == STATE_DISABLED ) + { + /* Activate the protocol stack. */ + pvMBFrameStartCur( ); + eMBState = STATE_ENABLED; + } + else + { + eStatus = MB_EILLSTATE; + } + return eStatus; +} + +eMBErrorCode +eMBDisable( void ) +{ + eMBErrorCode eStatus; + + if( eMBState == STATE_ENABLED ) + { + pvMBFrameStopCur( ); + eMBState = STATE_DISABLED; + eStatus = MB_ENOERR; + } + else if( eMBState == STATE_DISABLED ) + { + eStatus = MB_ENOERR; + } + else + { + eStatus = MB_EILLSTATE; + } + return eStatus; +} + +eMBErrorCode +eMBPoll( void ) +{ + static UCHAR *ucMBFrame; + static UCHAR ucRcvAddress; + static UCHAR ucFunctionCode; + static USHORT usLength; + static eMBException eException; + + int i; + eMBErrorCode eStatus = MB_ENOERR; + eMBEventType eEvent; + + /* Check if the protocol stack is ready. */ + if( eMBState != STATE_ENABLED ) + { + return MB_EILLSTATE; + } + + /* Check if there is a event available. If not return control to caller. + * Otherwise we will handle the event. */ + if( xMBPortEventGet( &eEvent ) == TRUE ) + { + switch ( eEvent ) + { + case EV_READY: + break; + + case EV_FRAME_RECEIVED: + eStatus = peMBFrameReceiveCur( &ucRcvAddress, &ucMBFrame, &usLength ); + if( eStatus == MB_ENOERR ) + { + /* Check if the frame is for us. If not ignore the frame. */ + if( ( ucRcvAddress == ucMBAddress ) || ( ucRcvAddress == MB_ADDRESS_BROADCAST ) ) + { + ( void )xMBPortEventPost( EV_EXECUTE ); + } + } + break; + + case EV_EXECUTE: + ucFunctionCode = ucMBFrame[MB_PDU_FUNC_OFF]; + eException = MB_EX_ILLEGAL_FUNCTION; + for( i = 0; i < MB_FUNC_HANDLERS_MAX; i++ ) + { + /* No more function handlers registered. Abort. */ + if( xFuncHandlers[i].ucFunctionCode == 0 ) + { + break; + } + else if( xFuncHandlers[i].ucFunctionCode == ucFunctionCode ) + { + eException = xFuncHandlers[i].pxHandler( ucMBFrame, &usLength ); + break; + } + } + + /* If the request was not sent to the broadcast address we + * return a reply. */ + if( ucRcvAddress != MB_ADDRESS_BROADCAST ) + { + if( eException != MB_EX_NONE ) + { + /* An exception occured. Build an error frame. */ + usLength = 0; + ucMBFrame[usLength++] = ( UCHAR )( ucFunctionCode | MB_FUNC_ERROR ); + ucMBFrame[usLength++] = eException; + } + if( ( eMBCurrentMode == MB_ASCII ) && MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS ) + { + vMBPortTimersDelay( MB_ASCII_TIMEOUT_WAIT_BEFORE_SEND_MS ); + } + eStatus = peMBFrameSendCur( ucMBAddress, ucMBFrame, usLength ); + } + break; + + case EV_FRAME_SENT: + break; + } + } + return MB_ENOERR; +} diff --git a/modbus/modbus/rtu/mbcrc.c b/modbus/modbus/rtu/mbcrc.c new file mode 100644 index 0000000..29b9ea7 --- /dev/null +++ b/modbus/modbus/rtu/mbcrc.c @@ -0,0 +1,98 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbcrc.c,v 1.7 2007/02/18 23:50:27 wolti Exp $ + */ + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +static const UCHAR aucCRCHi[] = { + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40 +}; + +static const UCHAR aucCRCLo[] = { + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, + 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, + 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, + 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, + 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, + 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, + 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, + 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, + 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, + 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, + 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, + 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, + 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, + 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, + 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, + 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, + 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, + 0x41, 0x81, 0x80, 0x40 +}; + +USHORT +usMBCRC16( UCHAR * pucFrame, USHORT usLen ) +{ + UCHAR ucCRCHi = 0xFF; + UCHAR ucCRCLo = 0xFF; + int iIndex; + + while( usLen-- ) + { + iIndex = ucCRCLo ^ *( pucFrame++ ); + ucCRCLo = ( UCHAR )( ucCRCHi ^ aucCRCHi[iIndex] ); + ucCRCHi = aucCRCLo[iIndex]; + } + return ( USHORT )( ucCRCHi << 8 | ucCRCLo ); +} diff --git a/modbus/modbus/rtu/mbcrc.h b/modbus/modbus/rtu/mbcrc.h new file mode 100644 index 0000000..db22776 --- /dev/null +++ b/modbus/modbus/rtu/mbcrc.h @@ -0,0 +1,36 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbcrc.h,v 1.5 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_CRC_H +#define _MB_CRC_H + +USHORT usMBCRC16( UCHAR * pucFrame, USHORT usLen ); + +#endif diff --git a/modbus/modbus/rtu/mbrtu.c b/modbus/modbus/rtu/mbrtu.c new file mode 100644 index 0000000..fc9b854 --- /dev/null +++ b/modbus/modbus/rtu/mbrtu.c @@ -0,0 +1,355 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbrtu.c,v 1.18 2007/09/12 10:15:56 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbrtu.h" +#include "mbframe.h" + +#include "mbcrc.h" +#include "mbport.h" + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_SER_PDU_SIZE_MIN 4 /*!< Minimum size of a Modbus RTU frame. */ +#define MB_SER_PDU_SIZE_MAX 256 /*!< Maximum size of a Modbus RTU frame. */ +#define MB_SER_PDU_SIZE_CRC 2 /*!< Size of CRC field in PDU. */ +#define MB_SER_PDU_ADDR_OFF 0 /*!< Offset of slave address in Ser-PDU. */ +#define MB_SER_PDU_PDU_OFF 1 /*!< Offset of Modbus-PDU in Ser-PDU. */ + +/* ----------------------- Type definitions ---------------------------------*/ +typedef enum +{ + STATE_RX_INIT, /*!< Receiver is in initial state. */ + STATE_RX_IDLE, /*!< Receiver is in idle state. */ + STATE_RX_RCV, /*!< Frame is beeing received. */ + STATE_RX_ERROR /*!< If the frame is invalid. */ +} eMBRcvState; + +typedef enum +{ + STATE_TX_IDLE, /*!< Transmitter is in idle state. */ + STATE_TX_XMIT /*!< Transmitter is in transfer state. */ +} eMBSndState; + +/* ----------------------- Static variables ---------------------------------*/ +static volatile eMBSndState eSndState; +static volatile eMBRcvState eRcvState; + +volatile UCHAR ucRTUBuf[MB_SER_PDU_SIZE_MAX]; + +static volatile UCHAR *pucSndBufferCur; +static volatile USHORT usSndBufferCount; + +static volatile USHORT usRcvBufferPos; + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBRTUInit( UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity ) +{ + eMBErrorCode eStatus = MB_ENOERR; + ULONG usTimerT35_50us; + + ( void )ucSlaveAddress; + ENTER_CRITICAL_SECTION( ); + + /* Modbus RTU uses 8 Databits. */ + if( xMBPortSerialInit( ucPort, ulBaudRate, 8, eParity ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + else + { + /* If baudrate > 19200 then we should use the fixed timer values + * t35 = 1750us. Otherwise t35 must be 3.5 times the character time. + */ + if( ulBaudRate > 19200 ) + { + usTimerT35_50us = 35; /* 1800us. */ + } + else + { + /* The timer reload value for a character is given by: + * + * ChTimeValue = Ticks_per_1s / ( Baudrate / 11 ) + * = 11 * Ticks_per_1s / Baudrate + * = 220000 / Baudrate + * The reload for t3.5 is 1.5 times this value and similary + * for t3.5. + */ + usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate ); + } + if( xMBPortTimersInit( ( USHORT ) usTimerT35_50us ) != TRUE ) + { + eStatus = MB_EPORTERR; + } + } + EXIT_CRITICAL_SECTION( ); + + return eStatus; +} + +void +eMBRTUStart( void ) +{ + ENTER_CRITICAL_SECTION( ); + /* Initially the receiver is in the state STATE_RX_INIT. we start + * the timer and if no character is received within t3.5 we change + * to STATE_RX_IDLE. This makes sure that we delay startup of the + * modbus protocol stack until the bus is free. + */ + eRcvState = STATE_RX_INIT; + vMBPortSerialEnable( TRUE, FALSE ); + vMBPortTimersEnable( ); + + EXIT_CRITICAL_SECTION( ); +} + +void +eMBRTUStop( void ) +{ + ENTER_CRITICAL_SECTION( ); + vMBPortSerialEnable( FALSE, FALSE ); + vMBPortTimersDisable( ); + EXIT_CRITICAL_SECTION( ); +} + +eMBErrorCode +eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ) +{ + BOOL xFrameReceived = FALSE; + eMBErrorCode eStatus = MB_ENOERR; + + ENTER_CRITICAL_SECTION( ); + assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ); + + /* Length and CRC check */ + if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN ) + && ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) ) + { + /* Save the address field. All frames are passed to the upper layed + * and the decision if a frame is used is done there. + */ + *pucRcvAddress = ucRTUBuf[MB_SER_PDU_ADDR_OFF]; + + /* Total length of Modbus-PDU is Modbus-Serial-Line-PDU minus + * size of address field and CRC checksum. + */ + *pusLength = ( USHORT )( usRcvBufferPos - MB_SER_PDU_PDU_OFF - MB_SER_PDU_SIZE_CRC ); + + /* Return the start of the Modbus PDU to the caller. */ + *pucFrame = ( UCHAR * ) & ucRTUBuf[MB_SER_PDU_PDU_OFF]; + xFrameReceived = TRUE; + } + else + { + eStatus = MB_EIO; + } + + EXIT_CRITICAL_SECTION( ); + return eStatus; +} + +eMBErrorCode +eMBRTUSend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + USHORT usCRC16; + + ENTER_CRITICAL_SECTION( ); + + /* Check if the receiver is still in idle state. If not we where to + * slow with processing the received frame and the master sent another + * frame on the network. We have to abort sending the frame. + */ + if( eRcvState == STATE_RX_IDLE ) + { + /* First byte before the Modbus-PDU is the slave address. */ + pucSndBufferCur = ( UCHAR * ) pucFrame - 1; + usSndBufferCount = 1; + + /* Now copy the Modbus-PDU into the Modbus-Serial-Line-PDU. */ + pucSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress; + usSndBufferCount += usLength; + + /* Calculate CRC16 checksum for Modbus-Serial-Line-PDU. */ + usCRC16 = usMBCRC16( ( UCHAR * ) pucSndBufferCur, usSndBufferCount ); + ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 & 0xFF ); + ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 >> 8 ); + + /* Activate the transmitter. */ + eSndState = STATE_TX_XMIT; + vMBPortSerialEnable( FALSE, TRUE ); + } + else + { + eStatus = MB_EIO; + } + EXIT_CRITICAL_SECTION( ); + return eStatus; +} + +BOOL +xMBRTUReceiveFSM( void ) +{ + BOOL xTaskNeedSwitch = FALSE; + UCHAR ucByte; + + assert( eSndState == STATE_TX_IDLE ); + + /* Always read the character. */ + ( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte ); + + switch ( eRcvState ) + { + /* If we have received a character in the init state we have to + * wait until the frame is finished. + */ + case STATE_RX_INIT: + vMBPortTimersEnable( ); + break; + + /* In the error state we wait until all characters in the + * damaged frame are transmitted. + */ + case STATE_RX_ERROR: + vMBPortTimersEnable( ); + break; + + /* In the idle state we wait for a new character. If a character + * is received the t1.5 and t3.5 timers are started and the + * receiver is in the state STATE_RX_RECEIVCE. + */ + case STATE_RX_IDLE: + usRcvBufferPos = 0; + ucRTUBuf[usRcvBufferPos++] = ucByte; + eRcvState = STATE_RX_RCV; + + /* Enable t3.5 timers. */ + vMBPortTimersEnable( ); + break; + + /* We are currently receiving a frame. Reset the timer after + * every character received. If more than the maximum possible + * number of bytes in a modbus frame is received the frame is + * ignored. + */ + case STATE_RX_RCV: + if( usRcvBufferPos < MB_SER_PDU_SIZE_MAX ) + { + ucRTUBuf[usRcvBufferPos++] = ucByte; + } + else + { + eRcvState = STATE_RX_ERROR; + } + vMBPortTimersEnable( ); + break; + } + return xTaskNeedSwitch; +} + +BOOL +xMBRTUTransmitFSM( void ) +{ + BOOL xNeedPoll = FALSE; + + assert( eRcvState == STATE_RX_IDLE ); + + switch ( eSndState ) + { + /* We should not get a transmitter event if the transmitter is in + * idle state. */ + case STATE_TX_IDLE: + /* enable receiver/disable transmitter. */ + vMBPortSerialEnable( TRUE, FALSE ); + break; + + case STATE_TX_XMIT: + /* check if we are finished. */ + if( usSndBufferCount != 0 ) + { + xMBPortSerialPutByte( ( CHAR )*pucSndBufferCur ); + pucSndBufferCur++; /* next byte in sendbuffer. */ + usSndBufferCount--; + } + else + { + xNeedPoll = xMBPortEventPost( EV_FRAME_SENT ); + /* Disable transmitter. This prevents another transmit buffer + * empty interrupt. */ + vMBPortSerialEnable( TRUE, FALSE ); + eSndState = STATE_TX_IDLE; + } + break; + } + + return xNeedPoll; +} + +BOOL +xMBRTUTimerT35Expired( void ) +{ + BOOL xNeedPoll = FALSE; + + switch ( eRcvState ) + { + /* Timer t35 expired. Startup phase is finished. */ + case STATE_RX_INIT: + xNeedPoll = xMBPortEventPost( EV_READY ); + break; + + /* A frame was received and t35 expired. Notify the listener that + * a new frame was received. */ + case STATE_RX_RCV: + xNeedPoll = xMBPortEventPost( EV_FRAME_RECEIVED ); + break; + + /* An error occured while receiving the frame. */ + case STATE_RX_ERROR: + break; + + /* Function called in an illegal state. */ + default: + assert( ( eRcvState == STATE_RX_INIT ) || + ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) ); + } + + vMBPortTimersDisable( ); + eRcvState = STATE_RX_IDLE; + + return xNeedPoll; +} diff --git a/modbus/modbus/rtu/mbrtu.h b/modbus/modbus/rtu/mbrtu.h new file mode 100644 index 0000000..8d8bd1f --- /dev/null +++ b/modbus/modbus/rtu/mbrtu.h @@ -0,0 +1,51 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbrtu.h,v 1.9 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_RTU_H +#define _MB_RTU_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + eMBErrorCode eMBRTUInit( UCHAR slaveAddress, UCHAR ucPort, ULONG ulBaudRate, + eMBParity eParity ); +void eMBRTUStart( void ); +void eMBRTUStop( void ); +eMBErrorCode eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ); +eMBErrorCode eMBRTUSend( UCHAR slaveAddress, const UCHAR * pucFrame, USHORT usLength ); +BOOL xMBRTUReceiveFSM( void ); +BOOL xMBRTUTransmitFSM( void ); +BOOL xMBRTUTimerT15Expired( void ); +BOOL xMBRTUTimerT35Expired( void ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbus/tcp/mbtcp.c b/modbus/modbus/tcp/mbtcp.c new file mode 100644 index 0000000..fb06144 --- /dev/null +++ b/modbus/modbus/tcp/mbtcp.c @@ -0,0 +1,158 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbtcp.c,v 1.3 2006/12/07 22:10:34 wolti Exp $ + */ + +/* ----------------------- System includes ----------------------------------*/ +#include "stdlib.h" +#include "string.h" + +/* ----------------------- Platform includes --------------------------------*/ +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbconfig.h" +#include "mbtcp.h" +#include "mbframe.h" +#include "mbport.h" + +#if MB_TCP_ENABLED > 0 + +/* ----------------------- Defines ------------------------------------------*/ + +/* ----------------------- MBAP Header --------------------------------------*/ +/* + * + * <------------------------ MODBUS TCP/IP ADU(1) -------------------------> + * <----------- MODBUS PDU (1') ----------------> + * +-----------+---------------+------------------------------------------+ + * | TID | PID | Length | UID |Code | Data | + * +-----------+---------------+------------------------------------------+ + * | | | | | + * (2) (3) (4) (5) (6) + * + * (2) ... MB_TCP_TID = 0 (Transaction Identifier - 2 Byte) + * (3) ... MB_TCP_PID = 2 (Protocol Identifier - 2 Byte) + * (4) ... MB_TCP_LEN = 4 (Number of bytes - 2 Byte) + * (5) ... MB_TCP_UID = 6 (Unit Identifier - 1 Byte) + * (6) ... MB_TCP_FUNC = 7 (Modbus Function Code) + * + * (1) ... Modbus TCP/IP Application Data Unit + * (1') ... Modbus Protocol Data Unit + */ + +#define MB_TCP_TID 0 +#define MB_TCP_PID 2 +#define MB_TCP_LEN 4 +#define MB_TCP_UID 6 +#define MB_TCP_FUNC 7 + +#define MB_TCP_PROTOCOL_ID 0 /* 0 = Modbus Protocol */ + + +/* ----------------------- Start implementation -----------------------------*/ +eMBErrorCode +eMBTCPDoInit( USHORT ucTCPPort ) +{ + eMBErrorCode eStatus = MB_ENOERR; + + if( xMBTCPPortInit( ucTCPPort ) == FALSE ) + { + eStatus = MB_EPORTERR; + } + return eStatus; +} + +void +eMBTCPStart( void ) +{ +} + +void +eMBTCPStop( void ) +{ + /* Make sure that no more clients are connected. */ + vMBTCPPortDisable( ); +} + +eMBErrorCode +eMBTCPReceive( UCHAR * pucRcvAddress, UCHAR ** ppucFrame, USHORT * pusLength ) +{ + eMBErrorCode eStatus = MB_EIO; + UCHAR *pucMBTCPFrame; + USHORT usLength; + USHORT usPID; + + if( xMBTCPPortGetRequest( &pucMBTCPFrame, &usLength ) != FALSE ) + { + usPID = pucMBTCPFrame[MB_TCP_PID] << 8U; + usPID |= pucMBTCPFrame[MB_TCP_PID + 1]; + + if( usPID == MB_TCP_PROTOCOL_ID ) + { + *ppucFrame = &pucMBTCPFrame[MB_TCP_FUNC]; + *pusLength = usLength - MB_TCP_FUNC; + eStatus = MB_ENOERR; + + /* Modbus TCP does not use any addresses. Fake the source address such + * that the processing part deals with this frame. + */ + *pucRcvAddress = MB_TCP_PSEUDO_ADDRESS; + } + } + else + { + eStatus = MB_EIO; + } + return eStatus; +} + +eMBErrorCode +eMBTCPSend( UCHAR _unused, const UCHAR * pucFrame, USHORT usLength ) +{ + eMBErrorCode eStatus = MB_ENOERR; + UCHAR *pucMBTCPFrame = ( UCHAR * ) pucFrame - MB_TCP_FUNC; + USHORT usTCPLength = usLength + MB_TCP_FUNC; + + /* The MBAP header is already initialized because the caller calls this + * function with the buffer returned by the previous call. Therefore we + * only have to update the length in the header. Note that the length + * header includes the size of the Modbus PDU and the UID Byte. Therefore + * the length is usLength plus one. + */ + pucMBTCPFrame[MB_TCP_LEN] = ( usLength + 1 ) >> 8U; + pucMBTCPFrame[MB_TCP_LEN + 1] = ( usLength + 1 ) & 0xFF; + if( xMBTCPPortSendResponse( pucMBTCPFrame, usTCPLength ) == FALSE ) + { + eStatus = MB_EIO; + } + return eStatus; +} + +#endif diff --git a/modbus/modbus/tcp/mbtcp.h b/modbus/modbus/tcp/mbtcp.h new file mode 100644 index 0000000..905d113 --- /dev/null +++ b/modbus/modbus/tcp/mbtcp.h @@ -0,0 +1,53 @@ +/* + * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU. + * Copyright (c) 2006 Christian Walter + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * File: $Id: mbtcp.h,v 1.2 2006/12/07 22:10:34 wolti Exp $ + */ + +#ifndef _MB_TCP_H +#define _MB_TCP_H + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif + +/* ----------------------- Defines ------------------------------------------*/ +#define MB_TCP_PSEUDO_ADDRESS 255 + +/* ----------------------- Function prototypes ------------------------------*/ + eMBErrorCode eMBTCPDoInit( USHORT ucTCPPort ); +void eMBTCPStart( void ); +void eMBTCPStop( void ); +eMBErrorCode eMBTCPReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, + USHORT * pusLength ); +eMBErrorCode eMBTCPSend( UCHAR _unused, const UCHAR * pucFrame, + USHORT usLength ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/modbusserial.cpp b/modbus/modbusserial.cpp new file mode 100644 index 0000000..4475be3 --- /dev/null +++ b/modbus/modbusserial.cpp @@ -0,0 +1,469 @@ +#include "modbusserial.h" +#include "InkJetPrinter.h" +#include +#include +#include "LogInfo.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" +#include "demo.h" + +/* ----------------------- Defines ------------------------------------------*/ + +//#define REG_INPUT_START 1 +//#define REG_INPUT_NREGS 400 +//#define REG_HOLDING_START 40001 +//#define REG_HOLDING_NREGS 400 +//#define REG_INPUT_START 1000 +//#define REG_INPUT_NREGS 4 +//#define REG_HOLDING_START 2000 +//#define REG_HOLDING_NREGS 130 + +/* ----------------------- Static variables ---------------------------------*/ +//static USHORT usRegInputStart = REG_INPUT_START; +//USHORT* usRegInputBuf; +//static USHORT usRegHoldingStart = REG_HOLDING_START; +//USHORT* usRegHoldingBuf; +void *uart_receive_thread(void *arg); + +ModbusSerial::ModbusSerial(ModbusPrintParas *mPara, const ModbusPrintStatus* mStatus) +{ +#ifdef MODBUS +// const UCHAR ucSlaveID[] = { 0xAA, 0xBB, 0xCC }; +// qDebug()<< "modbusserial class\r\n"; + modbus_status = 0; + modbus_up_QRCODE = 0; + port_num = 0; + input_registers = (uint16_t*) mStatus; + holding_registers = (uint16_t*) mPara; + + QProcess process; + process.start("find /dev -name ttyUSB*"); + process.waitForFinished(); + QByteArray output = process.readAllStandardOutput(); + QString str_output = output; + + QString str_tmp; + for(int j = 0; j < str_output.length(); j++) + { + if(str_output[j] > '0' && str_output[j] < '9') + str_tmp.append(str_output[j]); + } + + port_num = str_tmp.toInt(false, 10); + qDebug()<<"port_num="<start(100); +#endif +} + +ModbusSerial::~ModbusSerial(void) +{ +//#ifdef MODBUS +// disconnect(&serial_thread, SIGNAL(started()), this, SLOT(vPollingThread())); +// if (serial_thread.isRunning()) { +// serial_thread.quit(); +// serial_thread.wait(); +// } + ( void )eMBDisable( ); + vSetPollingThreadState( STOPPED ); + ( void )eMBClose(); +//#endif + if(modbus_timer) + { + delete modbus_timer; + } +} + +extern InkJetPrinter *pInkJectPrinter; + +//void ModbusSerial::vPollingThread() +//{ +// Serial_SetPollingThreadState( RUNNING ); +// +// if (modbus_status != 1) { +//// char fileName[100]; +//// memset(fileName, 0, 100); +//// snprintf(fileName, 100, "/home/plg/doc/104.html"); +//// qDebug()<<"fileName:"< '0' && str_output[j] < '9') + str_tmp.append(str_output[j]); + } + port_num = str_tmp.toInt(false, 10); + + if(0 == active_modbus(holding_registers, input_registers, port_num)) + { +// qDebug() << "updateQRcode"; +// modbus_up_QRCODE = true; +// emit updateQRcode(); + qDebug()<< "active_modbus success!\r\n"; + modbus_status = 1; + }else + { + modbus_status = 0; +// qDebug()<< "active_modbus ENOERR!\r\n"; + } + } +// qDebug()<<"ModbusStatus: "<< modbus_status; +// qDebug()<<"PollingThreadState:"<< eGetPollingThreadState( ); + + if(modbus_status == 1) + { + if(holding_registers[0] == PRINT_START_COMMAND) { + holding_registers[0] = NULL_COMMAND; + LogInfo::setRunStatusText(tr("接收到开始打印命令")); + emit startPrint(); + } + else if(holding_registers[0] == PRINT_PAUSE_COMMAND) { + holding_registers[0] = NULL_COMMAND; + LogInfo::setRunStatusText(tr("接收到暂停打印命令")); + emit pausePrint(); + } + else if(holding_registers[0] == PRINT_STOP_COMMAND) { + holding_registers[0] = NULL_COMMAND; + LogInfo::setRunStatusText(tr("接收到停止打印命令")); + emit stopPrint(); + }else if(holding_registers[0] == UPDATE_QRCODE) { + //else if(holding_registers[0] == 34) { + holding_registers[0] = NULL_COMMAND; + input_registers[0] = 0;//sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 + LogInfo::setRunStatusText(tr("接收到DM码数据命令")); + qDebug() << "updateQRcode"; + modbus_up_QRCODE = true; + emit updateQRcode(); + } + } + +} +#endif + +#ifdef __com_485_ +class DevOp; +UCHAR revdata[100]; + +void ModbusSerial::processCommands() +{ + if(revdata[0] == 10) + { + if(revdata[5] == PRINT_START_COMMAND) { + revdata[5] = NULL_COMMAND; + emit startPrint(); + } + else if(revdata[5] == PRINT_PAUSE_COMMAND) { + revdata[5] = NULL_COMMAND; + emit pausePrint(); + } + else if(revdata[5] == PRINT_STOP_COMMAND) { + revdata[5] = NULL_COMMAND; + emit stopPrint(); + }else if(revdata[5] == UPDATE_QRCODE) { + //else if(holding_registers[0] == 34) { + revdata[5] = NULL_COMMAND; + qDebug() << "updateQRcode"; + modbus_up_QRCODE = true; + emit updateQRcode(); + } + } +} + + +void *uart_receive_thread(void *arg) +{ + QByteArray temp; + QByteArray recResponse; + while(1) + { + if(DevOp::comForRFID->isOpen()) + { + //int n = DevOp::comForRFID->write(temp); + //qDebug()<<"power com send "<bytesAvailable(); + if(n>0) + { + //recResponse.append(DevOp::comForRFID->read(n)); + recResponse.clear(); + recResponse = DevOp::comForRFID->read(n); + QString str; + str.sprintf("%d - %d - %d- %d", recResponse.at(0),recResponse.at(1),recResponse.at(2),recResponse.at(5)); + qDebug()<write(temp); + qDebug()<<"write response data"; + } + } + } + //return n; + +} + +#endif + +qint32 ModbusSerial::processCommands(qint32 index) +{ + qint32 rc = 0; + // 打印机指令 + if(index == ((offsetof(ModbusPrintParas, printCommand) + sizeof(uint16_t))/2 - 1)) { // 打印控制 + if(holding_registers[index] == PRINT_START_COMMAND) { + emit startPrint(); + } + else if(holding_registers[index] == PRINT_PAUSE_COMMAND) { + emit pausePrint(); + } + else if(holding_registers[index] == PRINT_STOP_COMMAND) { + emit stopPrint(); + } + } + else if(index == ((offsetof(ModbusPrintParas, QRcode_buf) + 110)/2 - 1)) { // 传送DM码数据 + qDebug() << "updateQRcode"; + modbus_up_QRCODE = true; + emit updateQRcode(); + } + else if(index == ((offsetof(ModbusPrintParas, selectFileName) + 100)/2 - 1)) { // 打开文件 + char fileName[100]; + int fileIndex = offsetof(ModbusPrintParas, selectFileName)/2; + memcpy(fileName, &holding_registers[fileIndex], 100); + //qDebug()<<"oopen file: "<modbus->processCommands(index); +} + +// +//eMBErrorCode +//eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs ) +//{ +// eMBErrorCode eStatus = MB_ENOERR; +// int iRegIndex; +// +// if( ( usAddress >= REG_INPUT_START ) +// && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) ) +// { +// usRegInputBuf = (USHORT*) pInkJectPrinter->modbus->input_registers; +// iRegIndex = ( int )( usAddress - usRegInputStart ); +// while( usNRegs > 0 ) +// { +// *pucRegBuffer++ = ( unsigned char )(( usRegInputBuf[iRegIndex] >> 8 )& 0xFF); +// *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF ); +// iRegIndex++; +// usNRegs--; +// } +// } +// else +// { +// eStatus = MB_ENOREG; +// } +// +// return eStatus; +//} +// +//eMBErrorCode +//eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode ) +//{ +// eMBErrorCode eStatus = MB_ENOERR; +// int iRegIndex; +// +// if( ( usAddress >= REG_HOLDING_START ) && +// ( usAddress + usNRegs <= REG_HOLDING_START + REG_HOLDING_NREGS ) ) +// { +// +// usRegHoldingBuf = (USHORT*) pInkJectPrinter->modbus->holding_registers; +// iRegIndex = ( int )( usAddress - usRegHoldingStart ); +// switch ( eMode ) +// { +// /* Pass current register values to the protocol stack. */ +// case MB_REG_READ: +// while( usNRegs > 0 ) +// { +// *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] >> 8 ); +// *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] & 0xFF ); +// iRegIndex++; +// usNRegs--; +// } +// break; +// +// /* Update current register values with new values from the +// * protocol stack. */ +// case MB_REG_WRITE: +// while( usNRegs > 0 ) +// { +// usRegHoldingBuf[iRegIndex] = *pucRegBuffer++ << 8; +// usRegHoldingBuf[iRegIndex] |= *pucRegBuffer++; +// pInkJectPrinter->modbus->processCommands(iRegIndex); +// iRegIndex++; +// usNRegs--; +// } +// } +// } +// else +// { +// eStatus = MB_ENOREG; +// } +// return eStatus; +//} +// +// +//eMBErrorCode +//eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode ) +//{ +// Q_UNUSED(pucRegBuffer); +// Q_UNUSED(usAddress); +// Q_UNUSED(usNCoils); +// Q_UNUSED(eMode); +// return MB_ENOREG; +//} +// +//eMBErrorCode +//eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ) +//{ +// Q_UNUSED(pucRegBuffer); +// Q_UNUSED(usAddress); +// Q_UNUSED(usNDiscrete); +// return MB_ENOREG; +//} + + + diff --git a/modbus/modbusserial.h b/modbus/modbusserial.h new file mode 100644 index 0000000..ba10057 --- /dev/null +++ b/modbus/modbusserial.h @@ -0,0 +1,69 @@ +#ifndef MODBUSSERIAL_H +#define MODBUSSERIAL_H +#include +//#include +#include "../SysPara.h" +#include +#include +#include +//#include + +#define PRINT_START_COMMAND 0x01 +#define PRINT_PAUSE_COMMAND 0x02 +#define PRINT_STOP_COMMAND 0x03 +#define UPDATE_QRCODE 0x04 +#define NULL_COMMAND 0x00 +//enum { +// TCP, +// TCP_PI, +// RTU +//}; +//enum ThreadState +//{ +// STOPPED, +// RUNNING, +// SHUTDOWN +//}; + +class ModbusSerial:public QObject +{ + Q_OBJECT +public: + ModbusSerial(ModbusPrintParas *mPara, const ModbusPrintStatus* mStatus); + ~ModbusSerial(); + + uint16_t* input_registers; + uint16_t* holding_registers; + uint8_t modbus_up_QRCODE; +// QThread serial_thread; + +// enum ThreadState Serial_PollThreadState; +// enum ThreadState Serial_GetPollingThreadState(); +// void Serial_SetPollingThreadState( enum ThreadState eNewState ); + qint32 getModbusStatus(); + + +Q_SIGNALS: + void updateQRcode(); + void startPrint(); + void pausePrint(); + void stopPrint(); + void openFile(QString,bool); + void faultResume(); + void writeCalendar(); + void mbLineAndCharSpace(int lineSpace, int charSpace); + +public slots: + //void processCommands(); + qint32 processCommands(qint32 index); +// void vPollingThread(); + +private: + QTimer* modbus_timer; + qint32 modbus_status; + uint16_t port_num; +// QMutex modbusThreadMutex; + +}; +#endif + diff --git a/modbus/modbustcp.cpp b/modbus/modbustcp.cpp new file mode 100644 index 0000000..b8ea3dc --- /dev/null +++ b/modbus/modbustcp.cpp @@ -0,0 +1,290 @@ +#include "modbustcp.h" +#include "InkJetPrinter.h" +#include +#include +#include "../../LogInfo.h" +#include +#include +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" + +/* ----------------------- Defines ------------------------------------------*/ + + +#define REG_INPUT_START 1 +#define REG_INPUT_NREGS 400 +#define REG_HOLDING_START 1//40001 //40001 +#define REG_HOLDING_NREGS 400 + +/* ----------------------- Static variables ---------------------------------*/ +static USHORT usRegInputStart = REG_INPUT_START; +//static USHORT usRegInputBuf[REG_INPUT_NREGS]; +static USHORT usRegHoldingStart = REG_HOLDING_START; +//static USHORT usRegHoldingBuf[REG_HOLDING_NREGS]; +USHORT* usRegInputBuf; +USHORT* usRegHoldingBuf; + + +ModbusTcp::ModbusTcp(ModbusPrintParas *mPara, const ModbusPrintStatus* mStatus) +{ +#ifdef MODBUS + modbus_status = 0; + modbus_up_QRCODE = 0; + if( eMBTCPInit( MB_TCP_PORT_USE_DEFAULT ) != MB_ENOERR ) + { + qDebug()<< "can't initialize modbus stack!\r\n"; + modbus_status = -1; + } + else + { + eSetPollingThreadState( STOPPED ); + /* CLI interface. */ + //bDoExit = FALSE; + } + input_registers = (uint16_t*) mStatus; + holding_registers = (uint16_t*) mPara; + moveToThread(&m_thread); + m_thread.start(); + if (modbus_status != -1) { + connect(&m_thread, SIGNAL(started()), this, SLOT(pvPollingThread())); + modbus_status = 1; + } +#endif +} + +ModbusTcp::~ModbusTcp(void) +{ +#ifdef MODBUS + disconnect(&m_thread, SIGNAL(started()), this, SLOT(pvPollingThread())); + if (m_thread.isRunning()) { + m_thread.quit(); + m_thread.wait(); + } + ( void )eMBClose( ); +#endif +} + +extern InkJetPrinter *pInkJectPrinter; +void ModbusTcp::pvPollingThread() +{ +#ifdef MODBUS + eSetPollingThreadState( RUNNING ); + if (modbus_status != 1) { + return; + } + if( eMBEnable( ) == MB_ENOERR ) + { + do + { + if( eMBPoll( ) != MB_ENOERR ) { + qDebug()<<"modbus poll error"; + break; + } + } + while( eGetPollingThreadState( ) != SHUTDOWN ); + } + if( eMBEnable( ) == MB_ENOERR ) + ( void )eMBDisable( ); + + eSetPollingThreadState( STOPPED ); +#endif + return; +} + +enum ThreadState +ModbusTcp::eGetPollingThreadState( ) +{ + enum ThreadState eCurState; + + modbusThreadMutex.lock(); + eCurState = ePollThreadState; + modbusThreadMutex.unlock(); + + return eCurState; +} + +void +ModbusTcp::eSetPollingThreadState( enum ThreadState eNewState ) +{ + modbusThreadMutex.lock(); + ePollThreadState = eNewState; + modbusThreadMutex.unlock(); +} + +qint32 ModbusTcp::getModbusStatus() +{ + return modbus_status; +} + +qint32 ModbusTcp::processCommands(qint32 index) +{ + qint32 rc = 0; + // 打印机指令 + if(index == ((offsetof(ModbusPrintParas, printCommand) + sizeof(uint16_t))/2 - 1)) { // 打印控制 + if(holding_registers[index] == PRINT_START_COMMAND) { + emit startPrint(); + } + else if(holding_registers[index] == PRINT_PAUSE_COMMAND) { + emit pausePrint(); + } + else if(holding_registers[index] == PRINT_STOP_COMMAND) { + emit stopPrint(); + } + } + else if(index == ((offsetof(ModbusPrintParas, QRcode_buf) + 240)/2 - 1)) { // 传送DM码数据 + qDebug() << "updateQRcode"; + modbus_up_QRCODE = true; + + emit updateQRcode(); + } + else if(index == ((offsetof(ModbusPrintParas, selectFileName) + 100)/2 - 1)) { // 打开文件 + char fileName[100]; + int fileIndex = offsetof(ModbusPrintParas, selectFileName)/2; + memcpy(fileName, &holding_registers[fileIndex], 100); + //qDebug()<<"oopen file: "<= REG_INPUT_START ) + && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) ) + { + usRegInputBuf = (USHORT*) pInkJectPrinter->modbus->input_registers; + iRegIndex = ( int )( usAddress - usRegInputStart ); + while( usNRegs > 0 ) + { + *pucRegBuffer++ = ( unsigned char )(( usRegInputBuf[iRegIndex] >> 8 )& 0xFF); + *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF ); + iRegIndex++; + usNRegs--; + } + } + else + { + eStatus = MB_ENOREG; + } + + return eStatus; +} + +eMBErrorCode +eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode ) +{ + eMBErrorCode eStatus = MB_ENOERR; + int iRegIndex; + + if( ( usAddress >= REG_HOLDING_START ) && + ( usAddress + usNRegs <= REG_HOLDING_START + REG_HOLDING_NREGS ) ) + { + + usRegHoldingBuf = (USHORT*) pInkJectPrinter->modbus->holding_registers; + iRegIndex = ( int )( usAddress - usRegHoldingStart ); + + switch ( eMode ) + { + /* Pass current register values to the protocol stack. */ + case MB_REG_READ: + while( usNRegs > 0 ) + { + *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] >> 8 ); + *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] & 0xFF ); + iRegIndex++; + usNRegs--; + } + break; + + /* Update current register values with new values from the + * protocol stack. */ + case MB_REG_WRITE: + while( usNRegs > 0 ) + { + usRegHoldingBuf[iRegIndex] = *pucRegBuffer++ << 8; + usRegHoldingBuf[iRegIndex] |= *pucRegBuffer++; + pInkJectPrinter->modbus->processCommands(iRegIndex); + iRegIndex++; + usNRegs--; + } + + } + } + else + { + eStatus = MB_ENOREG; + } + return eStatus; +} + + +eMBErrorCode +eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode ) +{ + Q_UNUSED(pucRegBuffer); + Q_UNUSED(usAddress); + Q_UNUSED(usNCoils); + Q_UNUSED(eMode); + return MB_ENOREG; +} + +eMBErrorCode +eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ) +{ + Q_UNUSED(pucRegBuffer); + Q_UNUSED(usAddress); + Q_UNUSED(usNDiscrete); + return MB_ENOREG; +} diff --git a/modbus/modbustcp.h b/modbus/modbustcp.h new file mode 100644 index 0000000..b39234a --- /dev/null +++ b/modbus/modbustcp.h @@ -0,0 +1,67 @@ +#ifndef MODBUSTCP_H +#define MODBUSTCP_H +#include +//#include +#include "../SysPara.h" +#include +#include +#include +#include "myinclude.h" + +#define PRINT_START_COMMAND 0x01 +#define PRINT_PAUSE_COMMAND 0x02 +#define PRINT_STOP_COMMAND 0x03 +enum { + TCP, + TCP_PI, + RTU +}; +enum ThreadState +{ + STOPPED, + RUNNING, + SHUTDOWN +}; +class ModbusTcp:public QObject +{ + Q_OBJECT +public: + ModbusTcp(ModbusPrintParas *mPara, const ModbusPrintStatus* mStatus); + ~ModbusTcp(); + + uint16_t* input_registers; + uint16_t* holding_registers; + uint8_t modbus_up_QRCODE; + QThread m_thread; + enum ThreadState ePollThreadState; + enum ThreadState eGetPollingThreadState(); + void eSetPollingThreadState( enum ThreadState eNewState ); + qint32 getModbusStatus(); + qint32 processCommands(qint32 index); + +Q_SIGNALS: + void startPrint(); + void pausePrint(); + void stopPrint(); + void openFile(QString,bool); + void receivedPrintContent(int); + void faultResume(); + void writeCalendar(); + void mbLineAndCharSpace(int lineSpace, int charSpace); + void updateQRcode(); + void writeCalendar1(); + void writeCalendar1EndValue(); + void writeCalendar2EndValue(); + void writeCalendar2RepeatValue(); + void writeCalendar2InitValue(); + void CNTResetNow(); + +public slots: + void pvPollingThread(); + +private: + qint32 modbus_status; + QMutex modbusThreadMutex; +}; + +#endif // MODBUSTCP_H diff --git a/modbus/port/port.h b/modbus/port/port.h new file mode 100644 index 0000000..9eca4c4 --- /dev/null +++ b/modbus/port/port.h @@ -0,0 +1,81 @@ +/* + * FreeModbus Libary: BSD Socket Library Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: port.h,v 1.1 2007/09/12 10:15:56 wolti Exp $ + */ + + /********************************************************** + * Linux TCP support. + * Based on Walter's project. + * Modified by Steven Guo + ***********************************************************/ + +#ifndef _PORT_H +#define _PORT_H + + +#include + +#define INLINE +#define PR_BEGIN_EXTERN_C extern "C" { +#define PR_END_EXTERN_C } + +#ifdef __cplusplus +PR_BEGIN_EXTERN_C +#endif +/* ----------------------- Defines ------------------------------------------*/ +#define ENTER_CRITICAL_SECTION( ) +#define EXIT_CRITICAL_SECTION( ) +#define MB_PORT_HAS_CLOSE 1 +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif +/* ----------------------- Type definitions ---------------------------------*/ +typedef int SOCKET; + +#define SOCKET_ERROR (-1) +#define INVALID_SOCKET (~0) +typedef char BOOL; +typedef unsigned char UCHAR; +typedef unsigned char BYTE; +typedef char CHAR; +typedef unsigned short USHORT; +typedef short SHORT; + +typedef unsigned long ULONG; +typedef long LONG; +typedef enum +{ + MB_LOG_DEBUG, + MB_LOG_INFO, + MB_LOG_WARN, + MB_LOG_ERROR +} eMBPortLogLevel; + +/* ----------------------- Function prototypes ------------------------------*/ + +void TcpvMBPortLog( eMBPortLogLevel eLevel, const CHAR * szModule, const CHAR * szFmt, + ... ); + +#ifdef __cplusplus +PR_END_EXTERN_C +#endif +#endif diff --git a/modbus/port/portevent.c b/modbus/port/portevent.c new file mode 100644 index 0000000..ea1acfc --- /dev/null +++ b/modbus/port/portevent.c @@ -0,0 +1,72 @@ +/* + * FreeModbus Libary: Win32 Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: portevent.c,v 1.1 2007/09/12 10:15:56 wolti Exp $ + */ + + /********************************************************** + * Linux TCP support. + * Based on Walter's project. + * Modified by Steven Guo + ***********************************************************/ + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" + +/* ----------------------- Variables ----------------------------------------*/ +static eMBEventType eQueuedEvent; +static BOOL xEventInQueue; + +/* ----------------------- Function prototypes ------------------------------*/ +BOOL xMBPortTCPPool( void ); + +/* ----------------------- Start implementation -----------------------------*/ +BOOL +xMBPortEventInit( void ) +{ + xEventInQueue = FALSE; + return TRUE; +} + +BOOL +xMBPortEventPost( eMBEventType eEvent ) +{ + xEventInQueue = TRUE; + eQueuedEvent = eEvent; + return TRUE; +} + +BOOL +xMBPortEventGet( eMBEventType * eEvent ) +{ + BOOL xEventHappened = FALSE; + + if( xEventInQueue ) + { + *eEvent = eQueuedEvent; + xEventInQueue = FALSE; + xEventHappened = TRUE; + } + else + { + /* We can't do anything with errors from the pooling module. */ + ( void )xMBPortTCPPool( ); + } + return xEventHappened; +} diff --git a/modbus/port/portother.c b/modbus/port/portother.c new file mode 100644 index 0000000..94898e8 --- /dev/null +++ b/modbus/port/portother.c @@ -0,0 +1,69 @@ +/* + * FreeModbus Libary: Win32 Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: portother.c,v 1.1 2007/09/12 10:15:56 wolti Exp $ + */ + + /********************************************************** + * Linux TCP support. + * Based on Walter's project. + * Modified by Steven Guo + ***********************************************************/ + +#include +#include +#include + +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" +#include "mbconfig.h" + + +BOOL +prvMBTCPPortAddressToString( SOCKET xSocket, CHAR * szAddr, USHORT usBufSize ) +{ + return TRUE; +} + +CHAR * +prvMBTCPPortFrameToString( UCHAR * pucFrame, USHORT usFrameLen ) +{ + return NULL; +} + +CHAR * +WsaError2String( int iError ) +{ + return NULL; +} + +void +vMBPortLog( eMBPortLogLevel eLevel, const CHAR * szModule, const CHAR * szFmt, ... ) +{ + va_list args; + static const CHAR *arszLevel2Str[] = { "DEBUG", "INFO", "WARN", "ERROR" }; + + fprintf( stderr, "%s: %s: ", arszLevel2Str[eLevel], szModule ); + + va_start( args, szFmt ); + fprintf( stderr, szFmt, args ); + va_end( args ); +} diff --git a/modbus/port/portserial.c b/modbus/port/portserial.c new file mode 100644 index 0000000..2c2399d --- /dev/null +++ b/modbus/port/portserial.c @@ -0,0 +1,364 @@ +/* + * FreeModbus Libary: Linux Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: portserial.c,v 1.3 2006/10/12 08:35:34 wolti Exp $ + */ + +/* ----------------------- Standard includes --------------------------------*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" +#include "mbconfig.h" + +/* ----------------------- Defines -----------------------------------------*/ +#if MB_ASCII_ENABLED == 1 +#define BUF_SIZE 513 /* must hold a complete ASCII frame. */ +#else +#define BUF_SIZE 256 /* must hold a complete RTU frame. */ +#endif + +/* ----------------------- Static variables ---------------------------------*/ +static int iSerialFd = -1; +static BOOL bRxEnabled; +static BOOL bTxEnabled; + +static ULONG ulTimeoutMs; +static UCHAR ucBuffer[BUF_SIZE]; +static int uiRxBufferPos; +static int uiTxBufferPos; + +static struct termios xOldTIO; + +/* ----------------------- Function prototypes ------------------------------*/ +static BOOL prvbMBPortSerialRead( UCHAR * pucBuffer, USHORT usNBytes, USHORT * usNBytesRead ); +static BOOL prvbMBPortSerialWrite( UCHAR * pucBuffer, USHORT usNBytes ); + +/* ----------------------- Begin implementation -----------------------------*/ +void +vMBPortSerialEnable( BOOL bEnableRx, BOOL bEnableTx ) +{ + /* it is not allowed that both receiver and transmitter are enabled. */ + assert( !bEnableRx || !bEnableTx ); + + if( bEnableRx ) + { + ( void )tcflush( iSerialFd, TCIFLUSH ); + uiRxBufferPos = 0; + bRxEnabled = TRUE; + } + else + { + bRxEnabled = FALSE; + } + if( bEnableTx ) + { + bTxEnabled = TRUE; + uiTxBufferPos = 0; + } + else + { + bTxEnabled = FALSE; + } +} + +BOOL +xMBPortSerialInit( UCHAR ucPort, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity ) +{ + CHAR szDevice[16]; + BOOL bStatus = TRUE; + + struct termios xNewTIO; + speed_t xNewSpeed; + + //snprintf( szDevice, 16, "/dev/ttyUSB%d", ucPort ); + snprintf( szDevice, 16, "/dev/ttyO1"); + + if( ( iSerialFd = open( szDevice, O_RDWR | O_NOCTTY ) ) < 0 ) + { + vMBPortLog( MB_LOG_ERROR, "SER-INIT", "Can't open serial port %s: %s\n", szDevice, + strerror( errno ) ); + bStatus = FALSE; + return bStatus; + } + else if( tcgetattr( iSerialFd, &xOldTIO ) != 0 ) + { + vMBPortLog( MB_LOG_ERROR, "SER-INIT", "Can't get settings from port %s: %s\n", szDevice, + strerror( errno ) ); + } + else + { + bzero( &xNewTIO, sizeof( struct termios ) ); + + xNewTIO.c_iflag |= IGNBRK | INPCK; + xNewTIO.c_cflag |= CREAD | CLOCAL; + switch ( eParity ) + { + case MB_PAR_NONE: + break; + case MB_PAR_EVEN: + xNewTIO.c_cflag |= PARENB; + break; + case MB_PAR_ODD: + xNewTIO.c_cflag |= PARENB | PARODD; + break; + default: + bStatus = FALSE; + } + switch ( ucDataBits ) + { + case 8: + xNewTIO.c_cflag |= CS8; + break; + case 7: + xNewTIO.c_cflag |= CS7; + break; + default: + bStatus = FALSE; + } + switch ( ulBaudRate ) + { + case 9600: + xNewSpeed = B9600; + break; + case 19200: + xNewSpeed = B19200; + break; + case 38400: + xNewSpeed = B38400; + break; + case 57600: + xNewSpeed = B57600; + break; + case 115200: + xNewSpeed = B115200; + break; + default: + bStatus = FALSE; + } + /*设置等待时间和最小接收字符*/ + xNewTIO.c_cc[VTIME] = 0; + xNewTIO.c_cc[VMIN] = 0; + /*处理未接收字符*/ + tcflush(iSerialFd,TCIFLUSH); //lch add + if( bStatus ) + { + if( cfsetispeed( &xNewTIO, xNewSpeed ) != 0 ) + { + vMBPortLog( MB_LOG_ERROR, "SER-INIT", "Can't set baud rate %ld for port %s: %s\n", + ulBaudRate, strerror( errno ) ); + } + else if( cfsetospeed( &xNewTIO, xNewSpeed ) != 0 ) + { + vMBPortLog( MB_LOG_ERROR, "SER-INIT", "Can't set baud rate %ld for port %s: %s\n", + ulBaudRate, szDevice, strerror( errno ) ); + } + else if( tcsetattr( iSerialFd, TCSANOW, &xNewTIO ) != 0 ) + //else if( tcsetattr( iSerialFd, TCSAFLUSH, &xNewTIO ) != 0 ) //lch fix + { + vMBPortLog( MB_LOG_ERROR, "SER-INIT", "Can't set settings for port %s: %s\n", + szDevice, strerror( errno ) ); + } + else + { + vMBPortSerialEnable( FALSE, FALSE ); + bStatus = TRUE; + } + } + } + return bStatus; +} + +BOOL +xMBPortSerialSetTimeout( ULONG ulNewTimeoutMs ) +{ + if( ulNewTimeoutMs > 0 ) + { + ulTimeoutMs = ulNewTimeoutMs; + } + else + { + ulTimeoutMs = 1; + } + return TRUE; +} + +void +vMBPortClose( void ) +{ + if( iSerialFd != -1 ) + { + ( void )tcsetattr( iSerialFd, TCSANOW, &xOldTIO ); + ( void )close( iSerialFd ); + iSerialFd = -1; + } +} + +BOOL +prvbMBPortSerialRead( UCHAR * pucBuffer, USHORT usNBytes, USHORT * usNBytesRead ) +{ + BOOL bResult = TRUE; + ssize_t res; + fd_set rfds; + struct timeval tv; + +// tv.tv_sec = 1; +// tv.tv_usec = 60000; + tv.tv_sec = 0; + tv.tv_usec = 10000; //lch fix + + FD_ZERO( &rfds ); + FD_SET( iSerialFd, &rfds ); + + /* Wait until character received or timeout. Recover in case of an + * interrupted read system call. */ + do + { + if( select( iSerialFd + 1, &rfds, NULL, NULL, &tv ) == -1 ) + { + if( errno != EINTR ) + { + bResult = FALSE; + } + } + else if( FD_ISSET( iSerialFd, &rfds ) ) + { + if( ( res = read( iSerialFd, pucBuffer, usNBytes ) ) == -1 ) + { + bResult = FALSE; + } + else + { + *usNBytesRead = ( USHORT ) res; + break; + } + } + else + { + *usNBytesRead = 0; + break; + } + } + while( bResult == TRUE ); + return bResult; +} + +BOOL +prvbMBPortSerialWrite( UCHAR * pucBuffer, USHORT usNBytes ) +{ + ssize_t res; + size_t left = ( size_t ) usNBytes; + size_t done = 0; + + while( left > 0 ) + { + if( ( res = write( iSerialFd, pucBuffer + done, left ) ) == -1 ) + { + if( errno != EINTR ) + { + break; + } + /* call write again because of interrupted system call. */ + continue; + } + done += res; + left -= res; + } + return left == 0 ? TRUE : FALSE; +} + +BOOL +xMBPortSerialPoll( ) +{ + BOOL bStatus = TRUE; + USHORT usBytesRead; + int i; + + while( bRxEnabled ) + { + if( prvbMBPortSerialRead( &ucBuffer[0], BUF_SIZE, &usBytesRead ) ) + { + if( usBytesRead == 0 ) + { + /* timeout with no bytes. */ + break; + } + else if( usBytesRead > 0 ) + { + for( i = 0; i < usBytesRead; i++ ) + { + /* Call the modbus stack and let him fill the buffers. */ + ( void )pxMBFrameCBByteReceived( ); + } + uiRxBufferPos = 0; + } + } + else + { + vMBPortLog( MB_LOG_ERROR, "SER-POLL", "read failed on serial device: %s\n", + strerror( errno ) ); + bStatus = FALSE; + } + } + if( bTxEnabled ) + { + while( bTxEnabled ) + { + ( void )pxMBFrameCBTransmitterEmpty( ); + /* Call the modbus stack to let him fill the buffer. */ + } + if( !prvbMBPortSerialWrite( &ucBuffer[0], uiTxBufferPos ) ) + { + vMBPortLog( MB_LOG_ERROR, "SER-POLL", "write failed on serial device: %s\n", + strerror( errno ) ); + bStatus = FALSE; + } + } + + return bStatus; +} + +BOOL +xMBPortSerialPutByte( CHAR ucByte ) +{ + assert( uiTxBufferPos < BUF_SIZE ); + ucBuffer[uiTxBufferPos] = ucByte; + uiTxBufferPos++; + return TRUE; +} + +BOOL +xMBPortSerialGetByte( CHAR * pucByte ) +{ + assert( uiRxBufferPos < BUF_SIZE ); + *pucByte = ucBuffer[uiRxBufferPos]; + uiRxBufferPos++; + return TRUE; +} diff --git a/modbus/port/porttcp.c b/modbus/port/porttcp.c new file mode 100644 index 0000000..c193e07 --- /dev/null +++ b/modbus/port/porttcp.c @@ -0,0 +1,385 @@ +/* + * FreeModbus Libary: Win32 Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: porttcp.c,v 1.1 2007/09/12 10:15:56 wolti Exp $ + */ + +/* + * Design Notes: + * + * The xMBPortTCPInit function allocates a socket and binds the socket to + * all available interfaces ( bind with INADDR_ANY ). In addition it + * creates an array of event objects which is used to check the state of + * the clients. On event object is used to handle new connections or + * closed ones. The other objects are used on a per client basis for + * processing. + */ + + /********************************************************** + * Linux TCP support. + * Based on Walter's project. + * Modified by Steven Guo + ***********************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" + +//#include + +/* ----------------------- MBAP Header --------------------------------------*/ +#define MB_TCP_UID 6 +#define MB_TCP_LEN 4 +#define MB_TCP_FUNC 7 + +/* ----------------------- Defines -----------------------------------------*/ +#define MB_TCP_DEFAULT_PORT 5022//5022 /* TCP listening port. */ +#define MB_TCP_POOL_TIMEOUT 50 /* pool timeout for event waiting. */ +#define MB_TCP_READ_TIMEOUT 1000 /* Maximum timeout to wait for packets. */ +#define MB_TCP_READ_CYCLE 100 /* Time between checking for new data. */ + +#define MB_TCP_DEBUG 1 /* Set to 1 for additional debug output. */ + +#define MB_TCP_BUF_SIZE ( 256 + 7 ) /* Must hold a complete Modbus TCP frame. */ + +#define EV_CONNECTION 0 +#define EV_CLIENT 1 +#define EV_NEVENTS EV_CLIENT + 1 + +/* ----------------------- Static variables ---------------------------------*/ +SOCKET xListenSocket; +SOCKET xClientSocket = INVALID_SOCKET; +static fd_set allset; + +static UCHAR aucTCPBuf[MB_TCP_BUF_SIZE]; +static USHORT usTCPBufPos; +static USHORT usTCPFrameBytesLeft; + +/* ----------------------- External functions -------------------------------*/ +CHAR *WsaError2String( int dwError ); + +/* ----------------------- Static functions ---------------------------------*/ +BOOL prvMBTCPPortAddressToString( SOCKET xSocket, CHAR * szAddr, USHORT usBufSize ); +CHAR *prvMBTCPPortFrameToString( UCHAR * pucFrame, USHORT usFrameLen ); +static BOOL prvbMBPortAcceptClient( void ); +static void prvvMBPortReleaseClient( void ); +//static QTcpServer qListenSocket; + +/* ----------------------- Begin implementation -----------------------------*/ + +BOOL +xMBTCPPortInit( USHORT usTCPPort ) +{ + USHORT usPort; + struct sockaddr_in serveraddr; + int tmp = 1; + + if( usTCPPort == 0 ) + { + usPort = MB_TCP_DEFAULT_PORT; + } + else + { + usPort = ( USHORT ) usTCPPort; + } + memset( &serveraddr, 0, sizeof( serveraddr ) ); + serveraddr.sin_family = AF_INET; + serveraddr.sin_addr.s_addr = htonl( INADDR_ANY ); + serveraddr.sin_port = htons( usPort ); + if( ( xListenSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ) == -1 ) + { + fprintf( stderr, "Create socket failed.\r\n" ); + return FALSE; + } + if(setsockopt(xListenSocket, SOL_SOCKET, SO_REUSEADDR, &tmp, sizeof(int))<0) + { + fprintf( stderr, "setsockopt socket failed.\r\n" ); + return FALSE; + } + if( bind( xListenSocket, ( struct sockaddr * )&serveraddr, sizeof( serveraddr ) ) == -1 ) + { + fprintf( stderr, "Bind socket failed.\r\n" ); + return FALSE; + } + else if( listen( xListenSocket, 1 ) == -1 ) + { + fprintf( stderr, "Listen socket failed.\r\n" ); + return FALSE; + } + FD_ZERO( &allset ); + FD_SET( xListenSocket, &allset ); + return TRUE; +} + +void +vMBTCPPortClose( ) +{ + // Close all client sockets. + if( xClientSocket != SOCKET_ERROR ) + { + prvvMBPortReleaseClient( ); + } + // Close the listener socket. + if( xListenSocket != SOCKET_ERROR ) + { + close( xListenSocket ); + } +} + +void +vMBTCPPortDisable( void ) +{ + /* Close all client sockets. */ + if( xClientSocket != SOCKET_ERROR ) + { + prvvMBPortReleaseClient( ); + } +} + +/*! \ingroup port_win32tcp + * + * \brief Pool the listening socket and currently connected Modbus TCP clients + * for new events. + * \internal + * + * This function checks if new clients want to connect or if already connected + * clients are sending requests. If a new client is connected and there are + * still client slots left (The current implementation supports only one) + * then the connection is accepted and an event object for the new client + * socket is activated (See prvbMBPortAcceptClient() ). + * Events for already existing clients in \c FD_READ and \c FD_CLOSE. In case of + * an \c FD_CLOSE the client connection is released (See prvvMBPortReleaseClient() ). + * In case of an \c FD_READ command the existing data is read from the client + * and if a complete frame has been received the Modbus Stack is notified. + * + * \return FALSE in case of an internal I/O error. For example if the internal + * event objects are in an invalid state. Note that this does not include any + * client errors. In all other cases returns TRUE. + */ +int errorCount = 0; + +BOOL +xMBPortTCPPool( void ) +{ + int n; + fd_set fread; + struct timeval tval; + + tval.tv_sec = 1; + tval.tv_usec = 60000; + int ret; + USHORT usLength; + + if( xClientSocket == INVALID_SOCKET ) + { + /* Accept to client */ + if( ( n = select( xListenSocket + 1, &allset, NULL, NULL, NULL ) ) < 0 ) + { + if( errno == EINTR ) + { + ; + } + else + { + ; + } + } + if( FD_ISSET( xListenSocket, &allset ) ) + { + ( void )prvbMBPortAcceptClient( ); + } + } + + while( TRUE ) + { + FD_ZERO( &fread ); + FD_SET( xClientSocket, &fread ); + if( ( ( ret = select( xClientSocket + 1, &fread, NULL, NULL, &tval ) ) == SOCKET_ERROR ) + || !ret ) + { + sleep(1); + errorCount++; + if(errorCount > 10) + { + errorCount = 0; + close( xClientSocket ); + xClientSocket = INVALID_SOCKET; + return TRUE; + } + continue; + } + if( ret > 0 ) + { + if( FD_ISSET( xClientSocket, &fread ) ) + { + if( ( ( ret = + recv( xClientSocket, &aucTCPBuf[usTCPBufPos], usTCPFrameBytesLeft, + 0 ) ) == SOCKET_ERROR ) || ( !ret ) ) + { + close( xClientSocket ); + xClientSocket = INVALID_SOCKET; + return TRUE; + } + usTCPBufPos += ret; + usTCPFrameBytesLeft -= ret; + if( usTCPBufPos >= MB_TCP_FUNC ) + { + /* Length is a byte count of Modbus PDU (function code + data) and the + * unit identifier. */ + usLength = aucTCPBuf[MB_TCP_LEN] << 8U; + usLength |= aucTCPBuf[MB_TCP_LEN + 1]; + + /* Is the frame already complete. */ + if( usTCPBufPos < ( MB_TCP_UID + usLength ) ) + { + usTCPFrameBytesLeft = usLength + MB_TCP_UID - usTCPBufPos; + } + /* The frame is complete. */ + else if( usTCPBufPos == ( MB_TCP_UID + usLength ) ) + { + ( void )xMBPortEventPost( EV_FRAME_RECEIVED ); + return TRUE; + } + /* This can not happend because we always calculate the number of bytes + * to receive. */ + else + { + assert( usTCPBufPos <= ( MB_TCP_UID + usLength ) ); + } + } + } + } + } + return TRUE; +} + +/*! + * \ingroup port_win32tcp + * \brief Receives parts of a Modbus TCP frame and if complete notifies + * the protocol stack. + * \internal + * + * This function reads a complete Modbus TCP frame from the protocol stack. + * It starts by reading the header with an initial request size for + * usTCPFrameBytesLeft = MB_TCP_FUNC. If the header is complete the + * number of bytes left can be calculated from it (See Length in MBAP header). + * Further read calls are issued until the frame is complete. + * + * \return \c TRUE if part of a Modbus TCP frame could be processed. In case + * of a communication error the function returns \c FALSE. + */ + +BOOL +xMBTCPPortGetRequest( UCHAR ** ppucMBTCPFrame, USHORT * usTCPLength ) +{ + *ppucMBTCPFrame = &aucTCPBuf[0]; + *usTCPLength = usTCPBufPos; + + /* Reset the buffer. */ + usTCPBufPos = 0; + usTCPFrameBytesLeft = MB_TCP_FUNC; + return TRUE; +} + +BOOL +xMBTCPPortSendResponse( const UCHAR * pucMBTCPFrame, USHORT usTCPLength ) +{ + BOOL bFrameSent = FALSE; + BOOL bAbort = FALSE; + int res; + int iBytesSent = 0; + int iTimeOut = MB_TCP_READ_TIMEOUT; + + do + { + res = send( xClientSocket, &pucMBTCPFrame[iBytesSent], usTCPLength - iBytesSent, 0 ); + switch ( res ) + { + case -1: + if( iTimeOut > 0 ) + { + iTimeOut -= MB_TCP_READ_CYCLE; + usleep( MB_TCP_READ_CYCLE ); + } + else + { + bAbort = TRUE; + } + break; + case 0: + prvvMBPortReleaseClient( ); + bAbort = TRUE; + break; + default: + iBytesSent += res; + break; + } + } + while( ( iBytesSent != usTCPLength ) && !bAbort ); + + bFrameSent = iBytesSent == usTCPLength ? TRUE : FALSE; + + return bFrameSent; +} + +void +prvvMBPortReleaseClient( ) +{ + ( void )recv( xClientSocket, &aucTCPBuf[0], MB_TCP_BUF_SIZE, 0 ); + + ( void )close( xClientSocket ); + xClientSocket = INVALID_SOCKET; +} + +BOOL +prvbMBPortAcceptClient( ) +{ + SOCKET xNewSocket; + BOOL bOkay; + + /* Check if we can handle a new connection. */ + + if( xClientSocket != INVALID_SOCKET ) + { + fprintf( stderr, "can't accept new client. all connections in use.\n" ); + bOkay = FALSE; + } + else if( ( xNewSocket = accept( xListenSocket, NULL, NULL ) ) == INVALID_SOCKET ) + { + bOkay = FALSE; + } + else + { + xClientSocket = xNewSocket; + usTCPBufPos = 0; + usTCPFrameBytesLeft = MB_TCP_FUNC; + bOkay = TRUE; + } + return bOkay; +} diff --git a/modbus/port/porttimer.c b/modbus/port/porttimer.c new file mode 100644 index 0000000..c2cf0f2 --- /dev/null +++ b/modbus/port/porttimer.c @@ -0,0 +1,97 @@ +/* + * FreeModbus Libary: Linux Port + * Copyright (C) 2006 Christian Walter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * File: $Id: porttimer.c,v 1.1 2006/08/01 20:58:50 wolti Exp $ + */ + +/* ----------------------- Standard includes --------------------------------*/ +#include +#include + +#include "port.h" + +/* ----------------------- Modbus includes ----------------------------------*/ +#include "mb.h" +#include "mbport.h" + +/* ----------------------- Defines ------------------------------------------*/ + +/* ----------------------- Static variables ---------------------------------*/ +ULONG ulTimeOut; +BOOL bTimeoutEnable; + +static struct timeval xTimeLast; + +/* ----------------------- Start implementation -----------------------------*/ +BOOL +xMBPortTimersInit( USHORT usTim1Timerout50us ) +{ + ulTimeOut = usTim1Timerout50us / 20U; + if( ulTimeOut == 0 ) + ulTimeOut = 1; + + return xMBPortSerialSetTimeout( ulTimeOut ); +} + +void +xMBPortTimersClose( ) +{ + /* Does not use any hardware resources. */ +} + +void +vMBPortTimerPoll( ) +{ + ULONG ulDeltaMS; + struct timeval xTimeCur; + + /* Timers are called from the serial layer because we have no high + * res timer in Win32. */ + if( bTimeoutEnable ) + { + if( gettimeofday( &xTimeCur, NULL ) != 0 ) + { + /* gettimeofday failed - retry next time. */ + } + else + { + ulDeltaMS = ( xTimeCur.tv_sec - xTimeLast.tv_sec ) * 1000L + + ( xTimeCur.tv_usec - xTimeLast.tv_usec ) * 1000L; + if( ulDeltaMS > ulTimeOut ) + { + bTimeoutEnable = FALSE; + ( void )pxMBPortCBTimerExpired( ); + } + } + } +} + +void +vMBPortTimersEnable( ) +{ + int res = gettimeofday( &xTimeLast, NULL ); + + assert( res == 0 ); + bTimeoutEnable = TRUE; +} + +void +vMBPortTimersDisable( ) +{ + bTimeoutEnable = FALSE; +} diff --git a/moveinput.cpp b/moveinput.cpp new file mode 100644 index 0000000..15e7ca9 --- /dev/null +++ b/moveinput.cpp @@ -0,0 +1,43 @@ +#include "moveinput.h" +#include "ui_moveinput.h" +#include + +MoveInput::MoveInput(QWidget *parent) : + QWidget(parent,(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool)), + ui(new Ui::MoveInput) +{ + ui->setupUi(this); + + connect(ui->Key_left,SIGNAL(pressed()),this,SLOT(onKeyLeftPressed())); + connect(ui->Key_right,SIGNAL(pressed()),this,SLOT(onKeyRightPressed())); + connect(ui->Key_up,SIGNAL(pressed()),this,SLOT(onKeyUpPressed())); + connect(ui->Key_down,SIGNAL(pressed()),this,SLOT(onKeyDownPressed())); +} + +MoveInput::~MoveInput() +{ + delete ui; +} + + +void MoveInput::onKeyLeftPressed(){ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Left,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} + +void MoveInput::onKeyRightPressed(){ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Right,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} +void MoveInput::onKeyUpPressed(){ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Up,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} +void MoveInput::onKeyDownPressed(){ +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Down,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +} diff --git a/moveinput.h b/moveinput.h new file mode 100644 index 0000000..0361e9a --- /dev/null +++ b/moveinput.h @@ -0,0 +1,28 @@ +#ifndef MOVEINPUT_H +#define MOVEINPUT_H + +#include + +namespace Ui { +class MoveInput; +} + +class MoveInput : public QWidget +{ + Q_OBJECT + +public: + explicit MoveInput(QWidget *parent = 0); + ~MoveInput(); + +private slots: + void onKeyLeftPressed(); + void onKeyRightPressed(); + void onKeyUpPressed(); + void onKeyDownPressed(); + +private: + Ui::MoveInput *ui; +}; + +#endif // MOVEINPUT_H diff --git a/moveinput.ui b/moveinput.ui new file mode 100644 index 0000000..3eee85e --- /dev/null +++ b/moveinput.ui @@ -0,0 +1,181 @@ + + + MoveInput + + + + 0 + 0 + 323 + 230 + + + + + + + + + 255 + 255 + 255 + + + + + + + 202 + 201 + 201 + + + + + + + + + 255 + 255 + 255 + + + + + + + 202 + 201 + 201 + + + + + + + + + 202 + 201 + 201 + + + + + + + 202 + 201 + 201 + + + + + + + + + + + + + 19 + 9 + 290 + 211 + + + + + + + + 0 + 50 + + + + + + + + :/icon/keyleft.png:/icon/keyleft.png + + + + + + + + 0 + 50 + + + + + + + + :/icon/keyup.png:/icon/keyup.png + + + + + + + false + + + + 0 + 50 + + + + + + + + + + + + 0 + 50 + + + + + + + + :/icon/keydown.png:/icon/keydown.png + + + + + + + + 0 + 50 + + + + + + + + :/icon/keyright.png:/icon/keyright.png + + + + + + + + + + + diff --git a/mycom.cpp b/mycom.cpp new file mode 100644 index 0000000..45d8b3e --- /dev/null +++ b/mycom.cpp @@ -0,0 +1,198 @@ +#include "mycom.h" +#define TTY_DEV "/dev/ttyUSB" //端口路径 如果是在电脑端选择ttyUSB,在mini2440端则选择ttySAC +//#define TTY_DEV "/dev/ttySAC" +#define TIMEOUT_SEC(buflen,baud) (buflen*20/baud+2)//接收超时 +#define TIMEOUT_USEC 0 +/************************************************* +fuction: char *get_ptty(pportinfo_t pportinfo) +description: get thd uart name +return: ptty +**************************************************/ +static char *get_ptty(pportinfo_t pportinfo) +{ + char *ptty=NULL; + switch(pportinfo->tty) + { + case '0': + ptty=TTY_DEV"0"; + break; + case '1': + ptty=TTY_DEV"1"; + break; + case '2': + ptty=TTY_DEV"2"; + break; + } + return ptty; +} +/************************************************* +fuction: convbaud(unsigned long int baudrate) +description: baud change +return: ptty +**************************************************/ +static int convbaud(unsigned long int baudrate) +{ + switch(baudrate){ + case 2400: + return B2400; + case 4800: + return B4800; + case 9600: + return B9600; + case 19200: + return B19200; + case 38400: + return B38400; + case 57600: + return B57600; + case 115200: + return B115200; + default: + return B9600; + } +} +/**************************************************************** +fuction: convbaud(unsigned long int baudrate) +description: set the uart +parameters: fdcom: 串口文件描述符, + pportinfo: 待设置的串口信息 +return: tmp +******************************************************************/ +int PortSet(int fdcom, const pportinfo_t pportinfo) +{ + struct termios termios_old, termios_new; + int baudrate, tmp; + char databit, stopbit, parity, fctl; + bzero(&termios_old, sizeof(termios_old));//置字符串前sizeof个字节为零 + bzero(&termios_new, sizeof(termios_new)); + cfmakeraw(&termios_new);//设置终端属性 + tcgetattr(fdcom, &termios_old);//get the serial port attributions + /*------------设置端口属性----------------*/ + //baudrates + baudrate = convbaud(pportinfo -> baudrate);//得到波特率 + cfsetospeed(&termios_new, baudrate);//填入串口输出端的波特率 + termios_new.c_cflag |= CLOCAL;//控制模式,保证程序不会成为端口的占有者 + // 控制模式,flow control + fctl = pportinfo-> fctl; + switch(fctl){ + case '0':{ + termios_new.c_cflag &= ~CRTSCTS;//no flow control + }break; + case '1':{ + termios_new.c_cflag |= CRTSCTS;//hardware flow control + }break; + case '2':{ + termios_new.c_iflag |= IXON | IXOFF |IXANY; //software flow control + }break; + } + //控制模式,data bits + termios_new.c_cflag &= ~CSIZE;//控制模式,屏蔽字符大小位 + databit = pportinfo -> databit; + switch(databit){ + case '5': + termios_new.c_cflag |= CS5; + case '6': + termios_new.c_cflag |= CS6; + case '7': + termios_new.c_cflag |= CS7; + default: + termios_new.c_cflag |= CS8; + } + //控制模式 parity check + parity = pportinfo -> parity; + switch(parity){ + case '0':{ + termios_new.c_cflag &= ~PARENB;//no parity check + }break; + case '1':{ + termios_new.c_cflag |= PARENB;//odd check + termios_new.c_cflag &= ~PARODD; + }break; + case '2':{ + termios_new.c_cflag |= PARENB;//even check + termios_new.c_cflag |= PARODD; + }break; + } + //控制模式,stop bits + stopbit = pportinfo -> stopbit; + if(stopbit == '2'){ + termios_new.c_cflag |= CSTOPB;//2 stop bits + } + else{ + termios_new.c_cflag &= ~CSTOPB;//1 stop bits + } + //other attributions default + termios_new.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);//输入模式,原始数据输入 + tcflush(fdcom, TCIFLUSH);//溢出的数据可以接收,但不读 + tmp = tcsetattr(fdcom, TCSANOW, &termios_new);//设置新属性,TCSANOW:所有改变立即生效 tcgetattr(fdcom, &termios_old); + return(tmp); +} +/**************************************************************** +fuction: PortOpen(pportinfo_t pportinfo) +description: open serial port +parameters: pportinfo: 待设置的串口信息 +return: fdcom:文件描述符 +******************************************************************/ +int PortOpen(pportinfo_t pportinfo) +{ + int fdcom; //串口文件描述符 + char *ptty; + ptty = get_ptty(pportinfo); + //fdcom = open(ptty, O_RDWR | O_NOCTTY | O_NONBLOCK | O_NDELAY); + fdcom = open(ptty, O_RDWR | O_NOCTTY | O_NONBLOCK); + return (fdcom); +} +/**************************************************************** +fuction: PortClose(int fdcom) +description: close serial port +parameters: fdcom:文件描述符 +return: NONE +******************************************************************/ +void PortClose(int fdcom) +{ + close(fdcom); +} +/**************************************************************** +fuction: PortSend(int fdcom, char *data, int datalen) +description: close serial port +parameters: fdcom: 串口描述符,data: 待发送数据,datalen: 数据长度 +return: len:实际长度 +******************************************************************/ +int PortSend(int fdcom, char *data, int datalen) +{ + int len = 0; + len = write(fdcom, data, datalen);//实际写入的长度 + if(len == datalen){ + return (len); + } + else{ + tcflush(fdcom, TCOFLUSH); + return -1; + } +} +/**************************************************************** +fuction: PortRecv(int fdcom, char *data, int datalen, int baudrate) +description: receive the datas +parameters: fdcom:串口描述符, data:接收缓冲区, datalen:接收长度, + baudrate:波特率 +return: readlen:实际读入的字节数 +******************************************************************/ +int PortRecv(int fdcom, char *data, int datalen, int baudrate) +{ + int readlen, fs_sel; + fd_set fs_read; + struct timeval tv_timeout; + FD_ZERO(&fs_read); + FD_SET(fdcom, &fs_read); + tv_timeout.tv_sec = TIMEOUT_SEC(datalen, baudrate); + tv_timeout.tv_usec = TIMEOUT_USEC; + fs_sel = select(fdcom+1, &fs_read, NULL, NULL, &tv_timeout); + if(fs_sel){ + readlen = read(fdcom, data, datalen); + return(readlen); + } + else{ + return(-1); + } + return (readlen); +} diff --git a/mycom.h b/mycom.h new file mode 100644 index 0000000..857bc31 --- /dev/null +++ b/mycom.h @@ -0,0 +1,33 @@ +#ifndef MYCOM_H +#define MYCOM_H +#include //printf等用到 +#include //file control +#include //bzero等用到 +#include //exit(0)等用到 +#include //sleep等用到 +#include //串口应用程序必须添加的头文件 +#include //定义pid_t,size等 +#include //read,write,getpid等等 +#include //ioctl +typedef struct //define the uart value struct +{ + char prompt; //prompt after reciving data + int baudrate; //baudrate + char databit; //data bits, 5, 6, 7, 8 + char debug; //debug mode, 0: none, 1: debug + char echo; //echo mode, 0: none, 1: echo + char fctl; //flow control, 0: none, 1: hardware, 2: software + char tty; //tty: 0, 1, 2, 3, 4, 5, 6, 7 + char parity; //parity 0: none, 1: odd, 2: even + char stopbit; //stop bits, 1, 2 + //const int reserved; //reserved, must be zero + int reserved; //reserved, must be zero +}portinfo_t; +typedef portinfo_t *pportinfo_t; //redefine the portinfo_t +/**************** declaration the fuction to set the uart *******************/ +int PortOpen(pportinfo_t pportinfo); //open the uart +int PortSet(int fdcom, const pportinfo_t pportinfo); //set the uart +void PortClose(int fdcom); //close the uart +int PortSend(int fdcom, char *data, int datalen); //send the datas +int PortRecv(int fdcom, char *data, int datalen, int baudrate);//receive the datas +#endif // MYCOM_H diff --git a/myinclude.h b/myinclude.h new file mode 100644 index 0000000..27fc6b4 --- /dev/null +++ b/myinclude.h @@ -0,0 +1,121 @@ + +#ifndef MYINCLUDE_H +#define MYINCLUDE_H +#define FXCHG // FPGA 交替打印 +#define VARBOLD // 变量加粗 +#define SYS_LINUX 1 +#define TXTFILE 0 +#define PICFILE 1 +#define SCENE 2 +//#define _VX_ 1 + +#ifdef SYS_LINUX +#define SYS_ROOT_DIR "/home/plg/" +#else +#define SYS_ROOT_DIR "./" +#endif +#include "qnamespace.h" + +#define RANDDEBUG // 随机码导出功能 +#define SYNLENFLOAT // 支持小数喷印间隔 + +#define MIMA // 使用密码功能 +// #define VARCOLOR // 设置变量为字符型 +// +#define CABLEUSER // 20140426 电缆用户 + +//#define UART1 // 手持机see namespace.h + +//#define UART2 // 手持机see namespace.h + +#ifdef UART2 + #define SOFTWARE_VER_NUM "R3.09" //支持16位ALT , 支持 UART2 +#else + #define SOFTWARE_VER_NUM "A3.09" +#endif + +#ifdef CABLEUSER + #define TST " Cables" + #define FPAG_INIT_MAGIC_NUM 0x58 //用来判断是否读fpga成功 +#else + #define TST " 管材行业" + #define FPAG_INIT_MAGIC_NUM 0x53 //用来判断是否读fpga成功 +#endif + +//#define DEBUG1 +//#define DEBUG2 // show maxMM +#define MYSAVEFILEDLG // 定义自己的保存文件对话框,解决系统对话框按键不弹起问题 + +#ifdef __VX__ +#define __STC_POWER__ //使用STC 单片机当作电源管理 +#define __ADC_INPUT__ //使用AIN接口检测机箱温度/墨水温度 +#define __NETWORKMANAGER__ //使用网络功能 +#define __VX_OSC_VOL__ //使用网络功能 +#define LANINTERFACE_NAME "eth0" +#define __RFID_CARD +//#define __com_485_ +//#define EnableArabic //界面语言切换为英文生效 +//#define EnableBangla + +#endif +#define TEST_MODE 0 //测试模式 +#define SIMULATE_PRINTING_MODE 0 //模拟打印模式 + +//按客户区分项目代号宏 +//#define PROJECT_PLC1 //成都周君的项目,PLC发送2位数字打印内容,转换7点左横和右横进行打印,项目代号PLC1 + +#ifdef __CONVERTERWIFI__ +#define __NETWORKMANAGER__ //使用网络功能 +#define LANINTERFACE_NAME "eth0" +#endif + +#ifdef __2451WIFI__ +#define LANINTERFACE_NAME "eth0" +#endif +#define __HV_FOR_WANG_DEBUG__ + +#define __FPGA_DEBUG__ // FPGA调试界面 +// 打开:使用的是旧管路 关闭:使用新管路 +//#define __AIR_RELEASE_OLD__ + +#define __DAC_ADJ_FUNCTION__ // 使用电压调整功能 +//#define __DAC_FOR_5DOT__ // 确定5点阵的电压 +//#define __DAC_FOR_7DOT__ // 确定7点阵的电压,机器一致性不解决,确定固定的电压无意义 +//#define __2_LINE_DAC_ // 使用2行 7x5 点阵,总共16点阵 +#define __2_LINE_DAC_FOR_DENG // 等总两行, 怡宝, 说第二行的第一个点电压降低 + +//#define ENCRYPT_VOL +enum CRYS_FREQ{ + CRYS_64K, + CRYS_76K, + CRYS_96K, + CRYS_128K +}; + +//#define CRYS_64K 0 +//#define CRYS_76K 1 +//#define CRYS_83K 2 +//#define CRYS_96K 3 +//#define CRYS_128K 4 +enum PRINT_MODE{ + FAST_PRINT, + STANDARD_PRINT, + SLOW_PRINT_ONE, + SLOW_PRINT_TWO, + SLOW_PRINT_THR, + SLOW_PRINT_FOR, + SLOW_PRINT_FIV, + SLOW_PRINT_SIX, + SLOW_PRINT_SEV, + SLOW_PRINT_EIG, + SLOW_PRINT_NIE +}; + +#endif +// MYINCLUDE_H +/* +20140627: + 再改这功能,同步器状态下,不打印走米打钩时一直计米,取消打钩时按停止打印按钮不计米,按打印按钮一直计米与故障无关。 + 目前1-都计米,2-高压故障时不计米,其它计米。 + */ + diff --git a/otherinfo.ui b/otherinfo.ui new file mode 100644 index 0000000..3836ee9 --- /dev/null +++ b/otherinfo.ui @@ -0,0 +1,478 @@ + + + OtherInfo + + + + 0 + 0 + 800 + 600 + + + + Qt::StrongFocus + + + Form + + + + + + 2 + + + + + 2 + + + + + + + + + + + + 相位位置: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + 0 + 37 + + + + true + + + 1 + + + 100 + + + 40 + + + + + + + 相位偏移: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + -1560 + + + 1560 + + + 0 + + + + + + + true + + + + 0 + 37 + + + + 1 + + + 64000 + + + 7 + + + + + + + + 16777215 + 30 + + + + + + + + + + + + 16777215 + 30 + + + + 飞行时间: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 20 + + + + DetectDelay + + + + + + + true + + + + 0 + 0 + + + + 30 + + + 100 + + + 5 + + + 55 + + + + + + + Qt::LeftToRight + + + 相检: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 20 + + + + FullTimeEn + + + + + + + + 16777215 + 20 + + + + DetectVol + + + + + + + + 16777215 + 20 + + + + HighLowRatio + + + + + + + Qt::LeftToRight + + + 充电占空比100% + + + + + + + + 16777215 + 37 + + + + detect_num + + + + + + + false + + + 锁定相位 + + + + :/icon/lockphase.png:/icon/lockphase.png + + + + + + + 相位检测电压: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 频闪灯周期: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 检测墨点数量: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + 0 + 37 + + + + + + + + 检测延时: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + 0 + 0 + + + + 1000 + + + + + + + + + + 605 + 120 + + + + + 16777215 + 16777215 + + + + + + + + + 605 + 140 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 70 + + + + + 250 + 16777215 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + Qt::LeftToRight + + + 应用当前配置 + + + + :/icon/apply.png:/icon/apply.png + + + + + + + + + + + + PhaseGraphic + QWidget +
      PhaseGraphic.h
      + 1 +
      + + MemDisplayAndEdit + QWidget +
      MemDisplayAndEdit.h
      + 1 +
      +
      + + + + +
      diff --git a/picedit.ui b/picedit.ui new file mode 100644 index 0000000..b56a019 --- /dev/null +++ b/picedit.ui @@ -0,0 +1,832 @@ + + + PicEdit + + + + 0 + 0 + 642 + 442 + + + + Qt::StrongFocus + + + Form + + + + + + + + + + + 0 + 40 + + + + + 72 + 16777215 + + + + 开启软键盘 + + + + + + + + 63 + 40 + + + + 插入变量 + + + + :/icon/vari.png:/icon/vari.png + + + + + + + + 50 + 40 + + + + 保存/打印 + + + + :/icon/filesave.png:/icon/filesave.png + + + + + + + + 55 + 40 + + + + 缩小 + + + + :/icon/zoomout.png:/icon/zoomout.png + + + + + + + + 55 + 40 + + + + 放大 + + + + :/icon/zoomin.png:/icon/zoomin.png + + + + + + + + 74 + 40 + + + + + 74 + 16777215 + + + + Qt::ImhNone + + + 0 + + + + 5点阵 + + + + + 7点阵 + + + + + 9点阵 + + + + + 12点阵宋体 + + + + + 16点阵宋体 + + + + + 16点阵黑体 + + + + + 24点阵宋体 + + + + + 24点阵黑体 + + + + + + + + + 16777215 + 20 + + + + 列高 + + + Qt::AlignCenter + + + + + + + + 40 + 40 + + + + + 40 + 16777215 + + + + + 0 + 0 + + + + 1 + + + 256 + + + 40 + + + + + + + + 0 + 40 + + + + + 62 + 16777215 + + + + + 无加粗 + + + + + 加粗1倍 + + + + + 加粗2倍 + + + + + + + + + 10 + 25 + + + + + true + + + + false + + + Qt::StrongFocus + + + false + + + Qt::ImhDigitsOnly|Qt::ImhHiddenText|Qt::ImhNoAutoUppercase|Qt::ImhNoPredictiveText|Qt::ImhPreferLowercase + + + + + + + + + + + + 0 + 145 + + + + + 16777215 + 145 + + + + Qt::ImhNone + + + false + + + Qt::AlignCenter + + + + + 159 + 21 + 300 + 100 + + + + Qt::RightToLeft + + + Qt::ImhDigitsOnly + + + + + + + + + + 0 + + + 6 + + + + + + 80 + 0 + + + + + 130 + 16777215 + + + + 光栅[X:Y] + + + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + 放大比例 + + + Qt::AlignCenter + + + + + + + + 52 + 16777215 + + + + 插入模式 + + + Qt::AlignCenter + + + + + + + + 0 + 16 + + + + + 200 + 16777215 + + + + 文件名 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 80 + 0 + + + + + 130 + 16777215 + + + + CURR[X,Y] + + + + + + + + + Qt::Horizontal + + + + + + + 5 + + + + + + 90 + 50 + + + + 新建信息 + + + + :/icon/filenew.png:/icon/filenew.png + + + + + + + + 90 + 50 + + + + 打开文件 + + + + :/icon/fileopen.png:/icon/fileopen.png + + + + + + + + 90 + 50 + + + + 字符间距 + + + + :/icon/linespace.png:/icon/linespace.png + + + + + + + + 90 + 50 + + + + 插入/修改 + + + + + + + + 90 + 50 + + + + 删除字符 + + + + :/icon/keydelete.png:/icon/keydelete.png + + + + + + + true + + + + 90 + 50 + + + + 插入图片 + + + + :/icon/insert.png:/icon/insert.png + + + + + + + + 90 + 50 + + + + 保存为 + + + + :/icon/filesaveas.png:/icon/filesaveas.png + + + + + + + true + + + + 90 + 50 + + + + 字库编辑 + + + + + + + 网格 + + + true + + + + + + + Qt::NoFocus + + + Qt::LeftToRight + + + 粗体 + + + + + + + 显示控制符 + + + + + + + + 50 + 50 + + + + + 70 + 50 + + + + 行首 + + + + + + + + 50 + 50 + + + + + 70 + 50 + + + + + + + + :/icon/arrowleft.png:/icon/arrowleft.png + + + + + + + + 50 + 50 + + + + + 70 + 50 + + + + + + + + :/icon/arrowup.png:/icon/arrowup.png + + + + + + + + 50 + 50 + + + + + 70 + 50 + + + + + + + + :/icon/arrowdown.png:/icon/arrowdown.png + + + + + + + + 50 + 50 + + + + + 70 + 50 + + + + + + + + :/icon/arrowright.png:/icon/arrowright.png + + + + + + + + 50 + 50 + + + + + 70 + 50 + + + + 行尾 + + + + + + + 字符光标 + + + + + + + 像素光标 + + + + + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + + + + + + 编辑现有的多字体 + + + + + + + + 300 + 16777215 + + + + 点击光栅可打开键盘,点击空白处关闭 + + + Qt::AlignCenter + + + + + + + + + + + + PicWidget + QWidget +
      PicWidget.h
      + 1 +
      +
      + + + + +
      diff --git a/posix_qextserialport.cpp b/posix_qextserialport.cpp new file mode 100644 index 0000000..4f53abc --- /dev/null +++ b/posix_qextserialport.cpp @@ -0,0 +1,1128 @@ + +/*! +\class Posix_QextSerialPort +\version 1.0.0 +\author Stefan Sander +\author Michal Policht + +A cross-platform serial port class. +This class encapsulates the POSIX portion of QextSerialPort. The user will be notified of errors +and possible portability conflicts at run-time by default - this behavior can be turned off by +defining _TTY_NOWARN_ (to turn off all warnings) or _TTY_NOWARN_PORT_ (to turn off portability +warnings) in the project. Note that _TTY_NOWARN_ will also turn off portability warnings. +*/ + +#include +#include "posix_qextserialport.h" + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort() +Default constructor. Note that the name of the device used by a QextSerialPort constructed with +this constructor will be determined by #defined constants, or lack thereof - the default behavior +is the same as _TTY_LINUX_. Possible naming conventions and their associated constants are: + +\verbatim + +Constant Used By Naming Convention +---------- ------------- ------------------------ +_TTY_WIN_ Windows COM1, COM2 +_TTY_IRIX_ SGI/IRIX /dev/ttyf1, /dev/ttyf2 +_TTY_HPUX_ HP-UX /dev/tty1p0, /dev/tty2p0 +_TTY_SUN_ SunOS/Solaris /dev/ttya, /dev/ttyb +_TTY_DIGITAL_ Digital UNIX /dev/tty01, /dev/tty02 +_TTY_FREEBSD_ FreeBSD /dev/ttyd0, /dev/ttyd1 +_TTY_LINUX_ Linux /dev/ttySAC0, /dev/ttySAC1 + Linux /dev/ttyS0, /dev/ttyS1 +\endverbatim + +This constructor assigns the device name to the name of the first port on the specified system. +See the other constructors if you need to open a different port. +*/ +Posix_QextSerialPort::Posix_QextSerialPort() +: QextSerialBase() +{ + Posix_File=new QFile(); +} + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort(const Posix_QextSerialPort&) +Copy constructor. +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const Posix_QextSerialPort& s) + : QextSerialBase(s.port) +{ + setOpenMode(s.openMode()); + port = s.port; + Settings.BaudRate=s.Settings.BaudRate; + Settings.DataBits=s.Settings.DataBits; + Settings.Parity=s.Settings.Parity; + Settings.StopBits=s.Settings.StopBits; + Settings.FlowControl=s.Settings.FlowControl; + lastErr=s.lastErr; + + Posix_File=new QFile(); + Posix_File=s.Posix_File; + memcpy(&Posix_Timeout, &s.Posix_Timeout, sizeof(struct timeval)); + memcpy(&Posix_Copy_Timeout, &s.Posix_Copy_Timeout, sizeof(struct timeval)); + memcpy(&Posix_CommConfig, &s.Posix_CommConfig, sizeof(struct termios)); +} + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort(const QString & name) +Constructs a serial port attached to the port specified by name. +name is the name of the device, which is windowsystem-specific, +e.g."COM1" or "/dev/ttyS0". +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, QextSerialBase::QueryMode mode) + : QextSerialBase(name) +{ + Posix_File=new QFile(); + setQueryMode(mode); + init(); +} + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort(const PortSettings& settings) +Constructs a port with default name and specified settings. +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const PortSettings& settings, QextSerialBase::QueryMode mode) + : QextSerialBase() +{ + setBaudRate(settings.BaudRate); + setDataBits(settings.DataBits); + setParity(settings.Parity); + setStopBits(settings.StopBits); + setFlowControl(settings.FlowControl); + + Posix_File=new QFile(); + setTimeout(settings.Timeout_Millisec); + setQueryMode(mode); + init(); +} + +/*! +\fn Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, const PortSettings& settings) +Constructs a port with specified name and settings. +*/ +Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode) + : QextSerialBase(name) +{ + setBaudRate(settings.BaudRate); + setDataBits(settings.DataBits); + setParity(settings.Parity); + setStopBits(settings.StopBits); + setFlowControl(settings.FlowControl); + + Posix_File=new QFile(); + setTimeout(settings.Timeout_Millisec); + setQueryMode(mode); + init(); +} + +/*! +\fn Posix_QextSerialPort& Posix_QextSerialPort::operator=(const Posix_QextSerialPort& s) +Override the = operator. +*/ +Posix_QextSerialPort& Posix_QextSerialPort::operator=(const Posix_QextSerialPort& s) +{ + setOpenMode(s.openMode()); + port = s.port; + Settings.BaudRate=s.Settings.BaudRate; + Settings.DataBits=s.Settings.DataBits; + Settings.Parity=s.Settings.Parity; + Settings.StopBits=s.Settings.StopBits; + Settings.FlowControl=s.Settings.FlowControl; + lastErr=s.lastErr; + + Posix_File=s.Posix_File; + memcpy(&Posix_Timeout, &(s.Posix_Timeout), sizeof(struct timeval)); + memcpy(&Posix_Copy_Timeout, &(s.Posix_Copy_Timeout), sizeof(struct timeval)); + memcpy(&Posix_CommConfig, &(s.Posix_CommConfig), sizeof(struct termios)); + return *this; +} + +void Posix_QextSerialPort::init() +{ + if (queryMode() == QextSerialBase::EventDriven) + qWarning("POSIX doesn't have event driven mechanism implemented yet"); +} + +/*! +\fn Posix_QextSerialPort::~Posix_QextSerialPort() +Standard destructor. +*/ +Posix_QextSerialPort::~Posix_QextSerialPort() +{ + if (isOpen()) { + close(); + } + Posix_File->close(); + delete Posix_File; +} + +/*! +\fn void Posix_QextSerialPort::setBaudRate(BaudRateType baudRate) +Sets the baud rate of the serial port. Note that not all rates are applicable on +all platforms. The following table shows translations of the various baud rate +constants on Windows(including NT/2000) and POSIX platforms. Speeds marked with an * +are speeds that are usable on both Windows and POSIX. + +\note +BAUD76800 may not be supported on all POSIX systems. SGI/IRIX systems do not support +BAUD1800. + +\verbatim + + RATE Windows Speed POSIX Speed + ----------- ------------- ----------- + BAUD50 110 50 + BAUD75 110 75 + *BAUD110 110 110 + BAUD134 110 134.5 + BAUD150 110 150 + BAUD200 110 200 + *BAUD300 300 300 + *BAUD600 600 600 + *BAUD1200 1200 1200 + BAUD1800 1200 1800 + *BAUD2400 2400 2400 + *BAUD4800 4800 4800 + *BAUD9600 9600 9600 + BAUD14400 14400 9600 + *BAUD19200 19200 19200 + *BAUD38400 38400 38400 + BAUD56000 56000 38400 + *BAUD57600 57600 57600 + BAUD76800 57600 76800 + *BAUD115200 115200 115200 + BAUD128000 128000 115200 + BAUD256000 256000 115200 +\endverbatim +*/ +void Posix_QextSerialPort::setBaudRate(BaudRateType baudRate) +{ + LOCK_MUTEX(); + if (Settings.BaudRate!=baudRate) { + switch (baudRate) { + case BAUD14400: + Settings.BaudRate=BAUD9600; + break; + + case BAUD56000: + Settings.BaudRate=BAUD38400; + break; + + case BAUD76800: + +#ifndef B76800 + Settings.BaudRate=BAUD57600; +#else + Settings.BaudRate=baudRate; +#endif + break; + + case BAUD128000: + case BAUD256000: + Settings.BaudRate=BAUD115200; + break; + + default: + Settings.BaudRate=baudRate; + break; + } + } + if (isOpen()) { + switch (baudRate) { + + /*50 baud*/ + case BAUD50: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 50 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B50; +#else + cfsetispeed(&Posix_CommConfig, B50); + cfsetospeed(&Posix_CommConfig, B50); +#endif + break; + + /*75 baud*/ + case BAUD75: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 75 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B75; +#else + cfsetispeed(&Posix_CommConfig, B75); + cfsetospeed(&Posix_CommConfig, B75); +#endif + break; + + /*110 baud*/ + case BAUD110: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B110; +#else + cfsetispeed(&Posix_CommConfig, B110); + cfsetospeed(&Posix_CommConfig, B110); +#endif + break; + + /*134.5 baud*/ + case BAUD134: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 134.5 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B134; +#else + cfsetispeed(&Posix_CommConfig, B134); + cfsetospeed(&Posix_CommConfig, B134); +#endif + break; + + /*150 baud*/ + case BAUD150: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 150 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B150; +#else + cfsetispeed(&Posix_CommConfig, B150); + cfsetospeed(&Posix_CommConfig, B150); +#endif + break; + + /*200 baud*/ + case BAUD200: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 200 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B200; +#else + cfsetispeed(&Posix_CommConfig, B200); + cfsetospeed(&Posix_CommConfig, B200); +#endif + break; + + /*300 baud*/ + case BAUD300: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B300; +#else + cfsetispeed(&Posix_CommConfig, B300); + cfsetospeed(&Posix_CommConfig, B300); +#endif + break; + + /*600 baud*/ + case BAUD600: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B600; +#else + cfsetispeed(&Posix_CommConfig, B600); + cfsetospeed(&Posix_CommConfig, B600); +#endif + break; + + /*1200 baud*/ + case BAUD1200: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B1200; +#else + cfsetispeed(&Posix_CommConfig, B1200); + cfsetospeed(&Posix_CommConfig, B1200); +#endif + break; + + /*1800 baud*/ + case BAUD1800: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and IRIX do not support 1800 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B1800; +#else + cfsetispeed(&Posix_CommConfig, B1800); + cfsetospeed(&Posix_CommConfig, B1800); +#endif + break; + + /*2400 baud*/ + case BAUD2400: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B2400; +#else + cfsetispeed(&Posix_CommConfig, B2400); + cfsetospeed(&Posix_CommConfig, B2400); +#endif + break; + + /*4800 baud*/ + case BAUD4800: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B4800; +#else + cfsetispeed(&Posix_CommConfig, B4800); + cfsetospeed(&Posix_CommConfig, B4800); +#endif + break; + + /*9600 baud*/ + case BAUD9600: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B9600; +#else + cfsetispeed(&Posix_CommConfig, B9600); + cfsetospeed(&Posix_CommConfig, B9600); +#endif + break; + + /*14400 baud*/ + case BAUD14400: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 14400 baud operation. Switching to 9600 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B9600; +#else + cfsetispeed(&Posix_CommConfig, B9600); + cfsetospeed(&Posix_CommConfig, B9600); +#endif + break; + + /*19200 baud*/ + case BAUD19200: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B19200; +#else + cfsetispeed(&Posix_CommConfig, B19200); + cfsetospeed(&Posix_CommConfig, B19200); +#endif + break; + + /*38400 baud*/ + case BAUD38400: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B38400; +#else + cfsetispeed(&Posix_CommConfig, B38400); + cfsetospeed(&Posix_CommConfig, B38400); +#endif + break; + + /*56000 baud*/ + case BAUD56000: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 56000 baud operation. Switching to 38400 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B38400; +#else + cfsetispeed(&Posix_CommConfig, B38400); + cfsetospeed(&Posix_CommConfig, B38400); +#endif + break; + + /*57600 baud*/ + case BAUD57600: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B57600; +#else + cfsetispeed(&Posix_CommConfig, B57600); + cfsetospeed(&Posix_CommConfig, B57600); +#endif + break; + + /*76800 baud*/ + case BAUD76800: + TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and some POSIX systems do not support 76800 baud operation."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + +#ifdef B76800 + Posix_CommConfig.c_cflag|=B76800; +#else + TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support. Switching to 57600 baud."); + Posix_CommConfig.c_cflag|=B57600; +#endif //B76800 +#else //CBAUD +#ifdef B76800 + cfsetispeed(&Posix_CommConfig, B76800); + cfsetospeed(&Posix_CommConfig, B76800); +#else + TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support. Switching to 57600 baud."); + cfsetispeed(&Posix_CommConfig, B57600); + cfsetospeed(&Posix_CommConfig, B57600); +#endif //B76800 +#endif //CBAUD + break; + + /*115200 baud*/ + case BAUD115200: +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B115200; +#else + cfsetispeed(&Posix_CommConfig, B115200); + cfsetospeed(&Posix_CommConfig, B115200); +#endif + break; + + /*128000 baud*/ + case BAUD128000: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 128000 baud operation. Switching to 115200 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B115200; +#else + cfsetispeed(&Posix_CommConfig, B115200); + cfsetospeed(&Posix_CommConfig, B115200); +#endif + break; + + /*256000 baud*/ + case BAUD256000: + TTY_WARNING("Posix_QextSerialPort: POSIX does not support 256000 baud operation. Switching to 115200 baud."); +#ifdef CBAUD + Posix_CommConfig.c_cflag&=(~CBAUD); + Posix_CommConfig.c_cflag|=B115200; +#else + cfsetispeed(&Posix_CommConfig, B115200); + cfsetospeed(&Posix_CommConfig, B115200); +#endif + break; + } + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::setDataBits(DataBitsType dataBits) +Sets the number of data bits used by the serial port. Possible values of dataBits are: +\verbatim + DATA_5 5 data bits + DATA_6 6 data bits + DATA_7 7 data bits + DATA_8 8 data bits +\endverbatim + +\note +This function is subject to the following restrictions: +\par + 5 data bits cannot be used with 2 stop bits. +\par + 8 data bits cannot be used with space parity on POSIX systems. + +*/ +void Posix_QextSerialPort::setDataBits(DataBitsType dataBits) +{ + LOCK_MUTEX(); + if (Settings.DataBits!=dataBits) { + if ((Settings.StopBits==STOP_2 && dataBits==DATA_5) || + (Settings.StopBits==STOP_1_5 && dataBits!=DATA_5) || + (Settings.Parity==PAR_SPACE && dataBits==DATA_8)) { + } + else { + Settings.DataBits=dataBits; + } + } + if (isOpen()) { + switch(dataBits) { + + /*5 data bits*/ + case DATA_5: + if (Settings.StopBits==STOP_2) { + TTY_WARNING("Posix_QextSerialPort: 5 Data bits cannot be used with 2 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS5; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*6 data bits*/ + case DATA_6: + if (Settings.StopBits==STOP_1_5) { + TTY_WARNING("Posix_QextSerialPort: 6 Data bits cannot be used with 1.5 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS6; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*7 data bits*/ + case DATA_7: + if (Settings.StopBits==STOP_1_5) { + TTY_WARNING("Posix_QextSerialPort: 7 Data bits cannot be used with 1.5 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS7; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*8 data bits*/ + case DATA_8: + if (Settings.StopBits==STOP_1_5) { + TTY_WARNING("Posix_QextSerialPort: 8 Data bits cannot be used with 1.5 stop bits."); + } + else { + Settings.DataBits=dataBits; + Posix_CommConfig.c_cflag&=(~CSIZE); + Posix_CommConfig.c_cflag|=CS8; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::setParity(ParityType parity) +Sets the parity associated with the serial port. The possible values of parity are: +\verbatim + PAR_SPACE Space Parity + PAR_MARK Mark Parity + PAR_NONE No Parity + PAR_EVEN Even Parity + PAR_ODD Odd Parity +\endverbatim + +\note +This function is subject to the following limitations: +\par +POSIX systems do not support mark parity. +\par +POSIX systems support space parity only if tricked into doing so, and only with + fewer than 8 data bits. Use space parity very carefully with POSIX systems. + +*/ +void Posix_QextSerialPort::setParity(ParityType parity) +{ + LOCK_MUTEX(); + if (Settings.Parity!=parity) { + if (parity==PAR_MARK || (parity==PAR_SPACE && Settings.DataBits==DATA_8)) { + } + else { + Settings.Parity=parity; + } + } + if (isOpen()) { + switch (parity) { + + /*space parity*/ + case PAR_SPACE: + if (Settings.DataBits==DATA_8) { + TTY_PORTABILITY_WARNING("Posix_QextSerialPort: Space parity is only supported in POSIX with 7 or fewer data bits"); + } + else { + + /*space parity not directly supported - add an extra data bit to simulate it*/ + Posix_CommConfig.c_cflag&=~(PARENB|CSIZE); + switch(Settings.DataBits) { + case DATA_5: + Settings.DataBits=DATA_6; + Posix_CommConfig.c_cflag|=CS6; + break; + + case DATA_6: + Settings.DataBits=DATA_7; + Posix_CommConfig.c_cflag|=CS7; + break; + + case DATA_7: + Settings.DataBits=DATA_8; + Posix_CommConfig.c_cflag|=CS8; + break; + + case DATA_8: + break; + } + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + + /*mark parity - WINDOWS ONLY*/ + case PAR_MARK: + TTY_WARNING("Posix_QextSerialPort: Mark parity is not supported by POSIX."); + break; + + /*no parity*/ + case PAR_NONE: + Posix_CommConfig.c_cflag&=(~PARENB); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*even parity*/ + case PAR_EVEN: + Posix_CommConfig.c_cflag&=(~PARODD); + Posix_CommConfig.c_cflag|=PARENB; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*odd parity*/ + case PAR_ODD: + Posix_CommConfig.c_cflag|=(PARENB|PARODD); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::setStopBits(StopBitsType stopBits) +Sets the number of stop bits used by the serial port. Possible values of stopBits are: +\verbatim + STOP_1 1 stop bit + STOP_1_5 1.5 stop bits + STOP_2 2 stop bits +\endverbatim +\note +This function is subject to the following restrictions: +\par + 2 stop bits cannot be used with 5 data bits. +\par + POSIX does not support 1.5 stop bits. + +*/ +void Posix_QextSerialPort::setStopBits(StopBitsType stopBits) +{ + LOCK_MUTEX(); + if (Settings.StopBits!=stopBits) { + if ((Settings.DataBits==DATA_5 && stopBits==STOP_2) || stopBits==STOP_1_5) {} + else { + Settings.StopBits=stopBits; + } + } + if (isOpen()) { + switch (stopBits) { + + /*one stop bit*/ + case STOP_1: + Settings.StopBits=stopBits; + Posix_CommConfig.c_cflag&=(~CSTOPB); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*1.5 stop bits*/ + case STOP_1_5: + TTY_WARNING("Posix_QextSerialPort: 1.5 stop bit operation is not supported by POSIX."); + break; + + /*two stop bits*/ + case STOP_2: + if (Settings.DataBits==DATA_5) { + TTY_WARNING("Posix_QextSerialPort: 2 stop bits cannot be used with 5 data bits"); + } + else { + Settings.StopBits=stopBits; + Posix_CommConfig.c_cflag|=CSTOPB; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::setFlowControl(FlowType flow) +Sets the flow control used by the port. Possible values of flow are: +\verbatim + FLOW_OFF No flow control + FLOW_HARDWARE Hardware (RTS/CTS) flow control + FLOW_XONXOFF Software (XON/XOFF) flow control +\endverbatim +\note +FLOW_HARDWARE may not be supported on all versions of UNIX. In cases where it is +unsupported, FLOW_HARDWARE is the same as FLOW_OFF. + +*/ +void Posix_QextSerialPort::setFlowControl(FlowType flow) +{ + LOCK_MUTEX(); + if (Settings.FlowControl!=flow) { + Settings.FlowControl=flow; + } + if (isOpen()) { + switch(flow) { + + /*no flow control*/ + case FLOW_OFF: + Posix_CommConfig.c_cflag&=(~CRTSCTS); + Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY)); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + /*software (XON/XOFF) flow control*/ + case FLOW_XONXOFF: + Posix_CommConfig.c_cflag&=(~CRTSCTS); + Posix_CommConfig.c_iflag|=(IXON|IXOFF|IXANY); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + + case FLOW_HARDWARE: + Posix_CommConfig.c_cflag|=CRTSCTS; + Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY)); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + break; + } + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::setTimeout(ulong sec); +Sets the read and write timeouts for the port to millisec milliseconds. +Note that this is a per-character timeout, i.e. the port will wait this long for each +individual character, not for the whole read operation. This timeout also applies to the +bytesWaiting() function. + +\note +POSIX does not support millisecond-level control for I/O timeout values. Any +timeout set using this function will be set to the next lowest tenth of a second for +the purposes of detecting read or write timeouts. For example a timeout of 550 milliseconds +will be seen by the class as a timeout of 500 milliseconds for the purposes of reading and +writing the port. However millisecond-level control is allowed by the select() system call, +so for example a 550-millisecond timeout will be seen as 550 milliseconds on POSIX systems for +the purpose of detecting available bytes in the read buffer. + +*/ +void Posix_QextSerialPort::setTimeout(long millisec) +{ + LOCK_MUTEX(); + Settings.Timeout_Millisec = millisec; + Posix_Copy_Timeout.tv_sec = millisec / 1000; + Posix_Copy_Timeout.tv_usec = millisec % 1000; + if (isOpen()) { + tcgetattr(Posix_File->handle(), &Posix_CommConfig); + Posix_CommConfig.c_cc[VTIME] = millisec/100; + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } + UNLOCK_MUTEX(); +} + +/*! +\fn bool Posix_QextSerialPort::open(OpenMode mode) +Opens the serial port associated to this class. +This function has no effect if the port associated with the class is already open. +The port is also configured to the current settings, as stored in the Settings structure. +*/ +bool Posix_QextSerialPort::open(OpenMode mode) +{ + LOCK_MUTEX(); + if (mode == QIODevice::NotOpen) + return isOpen(); + if (!isOpen()) { + /*open the port*/ + Posix_File->setFileName(port); + // qDebug("Trying to open File"); + if (Posix_File->open(QIODevice::ReadWrite|QIODevice::Unbuffered)) { + // qDebug("Opened File succesfully"); + /*set open mode*/ + QIODevice::open(mode); + + /*configure port settings*/ + tcgetattr(Posix_File->handle(), &Posix_CommConfig); + + /*set up other port settings*/ + Posix_CommConfig.c_cflag|=CREAD|CLOCAL; + Posix_CommConfig.c_lflag&=(~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|ISIG)); + Posix_CommConfig.c_iflag&=(~(INPCK|IGNPAR|PARMRK|ISTRIP|ICRNL|IXANY)); + Posix_CommConfig.c_oflag&=(~OPOST); + Posix_CommConfig.c_cc[VMIN]=0; + Posix_CommConfig.c_cc[VINTR] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VQUIT] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VSTART] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VSTOP] = _POSIX_VDISABLE; + Posix_CommConfig.c_cc[VSUSP] = _POSIX_VDISABLE; + setBaudRate(Settings.BaudRate); + setDataBits(Settings.DataBits); + setParity(Settings.Parity); + setStopBits(Settings.StopBits); + setFlowControl(Settings.FlowControl); + setTimeout(Settings.Timeout_Millisec); + tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig); + } else { + qDebug("Could not open File! Error code : %d", Posix_File->error()); + } + } + UNLOCK_MUTEX(); + return isOpen(); +} + +/*! +\fn void Posix_QextSerialPort::close() +Closes a serial port. This function has no effect if the serial port associated with the class +is not currently open. +*/ +void Posix_QextSerialPort::close() +{ + LOCK_MUTEX(); + Posix_File->close(); + QIODevice::close(); + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::flush() +Flushes all pending I/O to the serial port. This function has no effect if the serial port +associated with the class is not currently open. +*/ +void Posix_QextSerialPort::flush() +{ + LOCK_MUTEX(); + if (isOpen()) { + Posix_File->flush(); + } + UNLOCK_MUTEX(); +} + +/*! +\fn qint64 Posix_QextSerialPort::size() const +This function will return the number of bytes waiting in the receive queue of the serial port. +It is included primarily to provide a complete QIODevice interface, and will not record errors +in the lastErr member (because it is const). This function is also not thread-safe - in +multithreading situations, use Posix_QextSerialPort::bytesWaiting() instead. +*/ +qint64 Posix_QextSerialPort::size() const +{ + int numBytes; + if (ioctl(Posix_File->handle(), FIONREAD, &numBytes)<0) { + numBytes=0; + } + return (qint64)numBytes; +} + +/*! +\fn qint64 Posix_QextSerialPort::bytesAvailable() +Returns the number of bytes waiting in the port's receive queue. This function will return 0 if +the port is not currently open, or -1 on error. Error information can be retrieved by calling +Posix_QextSerialPort::getLastError(). +*/ +qint64 Posix_QextSerialPort::bytesAvailable() +{ + LOCK_MUTEX(); + if (isOpen()) { + int bytesQueued; + fd_set fileSet; + FD_ZERO(&fileSet); + FD_SET(Posix_File->handle(), &fileSet); + + /*on Linux systems the Posix_Timeout structure will be altered by the select() call. + Make sure we use the right timeout values*/ + //memcpy(&Posix_Timeout, &Posix_Copy_Timeout, sizeof(struct timeval)); + Posix_Timeout = Posix_Copy_Timeout; + int n=select(Posix_File->handle()+1, &fileSet, NULL, &fileSet, &Posix_Timeout); + if (!n) { + lastErr=E_PORT_TIMEOUT; + UNLOCK_MUTEX(); + return -1; + } + if (n==-1 || ioctl(Posix_File->handle(), FIONREAD, &bytesQueued)==-1) { + translateError(errno); + UNLOCK_MUTEX(); + return -1; + } + lastErr=E_NO_ERROR; + UNLOCK_MUTEX(); + return bytesQueued + QIODevice::bytesAvailable(); + } + UNLOCK_MUTEX(); + return 0; +} + +/*! +\fn void Posix_QextSerialPort::ungetChar(char) +This function is included to implement the full QIODevice interface, and currently has no +purpose within this class. This function is meaningless on an unbuffered device and currently +only prints a warning message to that effect. +*/ +void Posix_QextSerialPort::ungetChar(char) +{ + /*meaningless on unbuffered sequential device - return error and print a warning*/ + TTY_WARNING("Posix_QextSerialPort: ungetChar() called on an unbuffered sequential device - operation is meaningless"); +} + +/*! +\fn void Posix_QextSerialPort::translateError(ulong error) +Translates a system-specific error code to a QextSerialPort error code. Used internally. +*/ +void Posix_QextSerialPort::translateError(ulong error) +{ + switch (error) { + case EBADF: + case ENOTTY: + lastErr=E_INVALID_FD; + break; + + case EINTR: + lastErr=E_CAUGHT_NON_BLOCKED_SIGNAL; + break; + + case ENOMEM: + lastErr=E_NO_MEMORY; + break; + } +} + +/*! +\fn void Posix_QextSerialPort::setDtr(bool set) +Sets DTR line to the requested state (high by default). This function will have no effect if +the port associated with the class is not currently open. +*/ +void Posix_QextSerialPort::setDtr(bool set) +{ + LOCK_MUTEX(); + if (isOpen()) { + int status; + ioctl(Posix_File->handle(), TIOCMGET, &status); + if (set) { + status|=TIOCM_DTR; + } + else { + status&=~TIOCM_DTR; + } + ioctl(Posix_File->handle(), TIOCMSET, &status); + } + UNLOCK_MUTEX(); +} + +/*! +\fn void Posix_QextSerialPort::setRts(bool set) +Sets RTS line to the requested state (high by default). This function will have no effect if +the port associated with the class is not currently open. +*/ +void Posix_QextSerialPort::setRts(bool set) +{ + LOCK_MUTEX(); + if (isOpen()) { + int status; + ioctl(Posix_File->handle(), TIOCMGET, &status); + if (set) { + status|=TIOCM_RTS; + } + else { + status&=~TIOCM_RTS; + } + ioctl(Posix_File->handle(), TIOCMSET, &status); + } + UNLOCK_MUTEX(); +} + +/*! +\fn unsigned long Posix_QextSerialPort::lineStatus() +returns the line status as stored by the port function. This function will retrieve the states +of the following lines: DCD, CTS, DSR, and RI. On POSIX systems, the following additional lines +can be monitored: DTR, RTS, Secondary TXD, and Secondary RXD. The value returned is an unsigned +long with specific bits indicating which lines are high. The following constants should be used +to examine the states of individual lines: + +\verbatim +Mask Line +------ ---- +LS_CTS CTS +LS_DSR DSR +LS_DCD DCD +LS_RI RI +LS_RTS RTS (POSIX only) +LS_DTR DTR (POSIX only) +LS_ST Secondary TXD (POSIX only) +LS_SR Secondary RXD (POSIX only) +\endverbatim + +This function will return 0 if the port associated with the class is not currently open. +*/ +unsigned long Posix_QextSerialPort::lineStatus() +{ + unsigned long Status=0, Temp=0; + LOCK_MUTEX(); + if (isOpen()) { + ioctl(Posix_File->handle(), TIOCMGET, &Temp); + if (Temp&TIOCM_CTS) { + Status|=LS_CTS; + } + if (Temp&TIOCM_DSR) { + Status|=LS_DSR; + } + if (Temp&TIOCM_RI) { + Status|=LS_RI; + } + if (Temp&TIOCM_CD) { + Status|=LS_DCD; + } + if (Temp&TIOCM_DTR) { + Status|=LS_DTR; + } + if (Temp&TIOCM_RTS) { + Status|=LS_RTS; + } + if (Temp&TIOCM_ST) { + Status|=LS_ST; + } + if (Temp&TIOCM_SR) { + Status|=LS_SR; + } + } + UNLOCK_MUTEX(); + return Status; +} + +/*! +\fn qint64 Posix_QextSerialPort::readData(char * data, qint64 maxSize) +Reads a block of data from the serial port. This function will read at most maxSize bytes from +the serial port and place them in the buffer pointed to by data. Return value is the number of +bytes actually read, or -1 on error. + +\warning before calling this function ensure that serial port associated with this class +is currently open (use isOpen() function to check if port is open). +*/ +qint64 Posix_QextSerialPort::readData(char * data, qint64 maxSize) +{ + LOCK_MUTEX(); + int retVal=0; + retVal=Posix_File->read(data, maxSize); + if (retVal==-1) + lastErr=E_READ_FAILED; + UNLOCK_MUTEX(); + + return retVal; +} + +/*! +\fn qint64 Posix_QextSerialPort::writeData(const char * data, qint64 maxSize) +Writes a block of data to the serial port. This function will write maxSize bytes +from the buffer pointed to by data to the serial port. Return value is the number +of bytes actually written, or -1 on error. + +\warning before calling this function ensure that serial port associated with this class +is currently open (use isOpen() function to check if port is open). +*/ +qint64 Posix_QextSerialPort::writeData(const char * data, qint64 maxSize) +{ + LOCK_MUTEX(); + int retVal=0; + retVal=Posix_File->write(data, maxSize); + if (retVal==-1) + lastErr=E_WRITE_FAILED; + UNLOCK_MUTEX(); + + return retVal; +} diff --git a/posix_qextserialport.h b/posix_qextserialport.h new file mode 100644 index 0000000..2c0ebe8 --- /dev/null +++ b/posix_qextserialport.h @@ -0,0 +1,63 @@ +#ifndef _POSIX_QEXTSERIALPORT_H_ +#define _POSIX_QEXTSERIALPORT_H_ + +#include +#include +#include +#include +#include +#include +#include +#include "qextserialbase.h" + +class Posix_QextSerialPort:public QextSerialBase +{ + private: + /*! + * This method is a part of constructor. + */ + void init(); + + protected: + QFile* Posix_File; + struct termios Posix_CommConfig; + struct timeval Posix_Timeout; + struct timeval Posix_Copy_Timeout; + + virtual qint64 readData(char * data, qint64 maxSize); + virtual qint64 writeData(const char * data, qint64 maxSize); + + public: + Posix_QextSerialPort(); + Posix_QextSerialPort(const Posix_QextSerialPort& s); + Posix_QextSerialPort(const QString & name, QextSerialBase::QueryMode mode = QextSerialBase::Polling); + Posix_QextSerialPort(const PortSettings& settings, QextSerialBase::QueryMode mode = QextSerialBase::Polling); + Posix_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode = QextSerialBase::Polling); + Posix_QextSerialPort& operator=(const Posix_QextSerialPort& s); + virtual ~Posix_QextSerialPort(); + + virtual void setBaudRate(BaudRateType); + virtual void setDataBits(DataBitsType); + virtual void setParity(ParityType); + virtual void setStopBits(StopBitsType); + virtual void setFlowControl(FlowType); + virtual void setTimeout(long); + + virtual bool open(OpenMode mode); + virtual void close(); + virtual void flush(); + + virtual qint64 size() const; + virtual qint64 bytesAvailable(); + + virtual void ungetChar(char c); + + virtual void translateError(ulong error); + + virtual void setDtr(bool set=true); + virtual void setRts(bool set=true); + virtual ulong lineStatus(); + +}; + +#endif diff --git a/printImage.bmp b/printImage.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e244442c808af97017c70c9cc696da7109eabe53 GIT binary patch literal 3798 zcmeH}K}y6x5Jlr!7z8&S!2=8)z`b|$R9+`j=1m@-N(V%7*UhBo_pAS_La*}v@pW0Y z^;Y|9JumfK>v`DJvV2zk`H`paw${1k4a^&uH!yEt-oU(pc?17^15fMztJmxqI&eC>9t?B{h#3Rvc96v{@>9IqD!_+Z8Bnh+akr&~|IEVUH2tDa< mutoA%nqx%}!=n(}w>6g86s7r<5l*5(OLA=nEn)ukzAiU2^=n4} literal 0 HcmV?d00001 diff --git a/printImageScene.bmp b/printImageScene.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b2b8ad2c639a7df5bcbaeed7cadf09369de203d GIT binary patch literal 29798 zcmeHOL6Q?e3>)^!kqb}Y$bsSk-1!DC;C+0H3$@^kD~e-zdV8Ey?S$1-GN@(A?Kq}M zfc^IU$IoTGzS{khJ%8Eri#^{hAML&@pDq63y+2pNZhv*D1Fa5dc3N$d$vU9f(HL|) zpxNnmPCm_!W}w>v%}%#-@@aN71Kkd2cDkLDPqU*L=ypJ})9svmnjOtRw*#7;Zs+9F z>}UqM9nkD_J13uJM>EjvfM%!LIr%g@nt^TyG&|kS$*0-T40Jo7+39vpKFyA1pxXh> zPPcRN*$+zm`F(mU&!@-J#A7-AC+GV<^gcXd2Q)j6_^utJ=F?AUttZa&(}Ks=>Ei-F zbGDA2cp^<}j?oKMv9AM~oqhe1`qF{Zv9q2y@vIp$ewy&3e*+|fIr**W?X6NYd&~fVvvtxgJ*;SV6 zA>5(a(z~FHCK5TB$1VU#13rP6({U2mGHQGoH8E-!p@_#Mq5!3LG76ai&cjS8bJE1D zcM^AO$4Z3OY*@J!O8`y)1_0s+%4j4bHe*~yjGQHjC;-b6!^_A->^Z>zU@rqD83ic` zhvt)%%CZ0^BeR85sZqvdpMO(91(4FP)tDqsnlcI!Ai6*Tl+j2s9(x;6Y%%siR)W$C z}^D`#n=m32}&=N<0xbXSjo&T znc35Y?TiOzum+PPE+d8;BmhDYlu?iXrDYtA7RF<5BZ@7?UdT#NdZ8RgAv3^AW^R#1 zZ2h+lUfrVD1CiOn zydyK_Ws;dv7D=;|F0XAP2nT@6VTvGWurvS+I~V|j41hEM3;{C;MX*}0ZZYaOhK)gH z0JcDuyrq&!&Kw!Xk->H;RnoYuBwsYXxW%|Ciw@5nP9OEa3}8eEi~+x5$e6fv%*@$3 z`Zc=Bjo2J55hpu`IMo(YdO;4rRzmRZMF!&&wk2Q5UM|h$JOkh59EaQKw8Z9#$I=B@ z8i*Tm)RjmJF?fJ2uM7B|QXvm3!6b|Ci2Ifd{0vB2xCJDD@xJd&PEIoL#w}8Ecd<8G z%IL)Gq^%CVjIS7_Mlxa(q$Mm2=9QD)M#6^0i)kDAwIJc!n;m=U)<|4iyqrFH2bUqa^nh`&#<4_>$aP;Vnr@Z%OX0>b3M%{2Q2^@-;SEeoG$qGSevO p6)jf(|2RAA%evg|)!?#MlgTgDoYAE5u(E1!4qL1WJ5&djs`n+2&QNhAZ;dMpH5L5@J{hh@M?-B}b+mZbqjyqOYELK0cDJ4+RuYWlCW(-u zcd$U}WI91M{MWCtfYlA!T9TqCEwJ=bGIL=v(H*KTx#lTkBUlTQBB~sRE!HFJeM_J9 zN*8Fc8Osc9{fM$EcIzvYB(fK0{NMGH<1s`(7G;n}n(WVa00000NkvXXu0mjfjZbv} literal 0 HcmV?d00001 diff --git a/print_net.cpp b/print_net.cpp new file mode 100644 index 0000000..a7a9d15 --- /dev/null +++ b/print_net.cpp @@ -0,0 +1,454 @@ +#include "print_net.h" +#include "QDebug" +#include +#include +#include "LogInfo.h" + +#define QT_NO_SSL + + +PrintNet::PrintNet() +{ + m_bShortNet = false; + // 创建网络管理器用于GET method + this->getManager = new QNetworkAccessManager(this); + connect(getManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); + // 创建网络管理器用于POST method + this->postManager = new QNetworkAccessManager(this); + connect(postManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(postPrintFinished(QNetworkReply *))); + + m_postmanager = new QNetworkAccessManager(this); + connect(m_postmanager, SIGNAL(finished(QNetworkReply *)), this, SLOT(postGetShortUrlFinished(QNetworkReply *))); +} + +PrintNet::~PrintNet() +{ + delete this->getManager; + delete this->postManager; +} + +// 初步实现 喷码机向服务器获取打印数据 以及 上报状态 接口 +// 未处理 网络条件不具备 / 访问超时 等异常 + +// 递归列出JSON所有层内容 +void PrintNet::traversJson(QJsonObject json_obj) +{ + foreach (const QString& key, json_obj.keys()) + { + QJsonValue value = json_obj.value(key); + if (!value.isObject()) + { +// qDebug()<<"[traversJson]key="<',">").replace('"',""").replace('\'',"'") + .replace('¥',"¥").replace('®',"®").replace('°',"°").replace('±',"±").replace('×',"x") + .replace('*',"*").replace('÷',"÷").replace('²',"²").replace('³',"³").replace('Ω',"Ω") + .replace('Φ',"Φ").replace('¥',"¥").replace('φ',"φ").replace('©',"©").replace('@',"@") + .replace('㎡',"㎡").replace('℃',"℃").replace('℉',"℉").replace('\r',' ').replace('\n',' ') ; +// const char *std_str = t_str.toStdString().data(); +// strcpy(Json_get_data.PrintingContent,std_str); + strncpy(Json_get_data.PrintingContent,t_str.toStdString().c_str(),sizeof(Json_get_data.PrintingContent)); + Json_get_data.PrintingContent[sizeof(Json_get_data.PrintingContent) -1] = '\0'; + }else + if(key == "ProductPlanQty"){ + Json_get_data.ProductPlanQty = value.toDouble(); + }else + if(key == "ProductUniqueCode"){ + QString t_str; + t_str = value.toString(); +// const char *std_str = t_str.toStdString().data(); +// strcpy(Json_get_data.ProductUniqueCode,std_str); + strncpy(Json_get_data.ProductUniqueCode,t_str.toStdString().c_str(),sizeof(Json_get_data.ProductUniqueCode)); + Json_get_data.ProductUniqueCode[sizeof(Json_get_data.ProductUniqueCode) -1] = '\0'; + }else + if(key == "ProductionTask"){ + Json_get_data.ProductionTask = value.toDouble(); + }else + if(key == "StartMetre"){ + Json_get_data.StartMetre = value.toDouble(); + }else + if(key == "TasdNeedConfirm"){ + Json_get_data.TasdNeedConfirm = value.toBool(); + }else + if(key == "TaskSwitchingMode"){ + Json_get_data.TaskSwitchingMode = value.toDouble(); + } + } + else + { + traversJson(value.toObject()); + } + } +} + +void PrintNet::postPrintFinished(QNetworkReply *reply) +{ + QNetworkReply::NetworkError error; + error = reply->error(); // 应答无错误时为QNetworkReply::NoError(0) + if (error) + { // 非0值表示有错误发生 + switch(error) + { + case QNetworkReply::ConnectionRefusedError: + save_messege = "远程主机拒绝连接"; + break; + + case QNetworkReply::RemoteHostClosedError: + save_messege = "远程主机关闭连接"; + break; + + case QNetworkReply::HostNotFoundError: + save_messege = "远程主机未找到"; + break; + + case QNetworkReply::TimeoutError: + save_messege = "连接到远程主机超时"; + break; + + case QNetworkReply::ContentAccessDenied: + save_messege = "远程主机拒绝访问"; + break; + + case QNetworkReply::ContentNotFoundError: + save_messege = "内容未找到"; + break; + default: + save_messege = "通信失败"; + } + emit json_server_error(); + return; + } + + //未出错时获取响应信息 + QByteArray rsp_data = reply->readAll(); + //以下对获取的JSON数据进行解析 + QJsonDocument json = QJsonDocument::fromJson(rsp_data); + + QJsonObject obj = json.object(); + + traversJson(obj); // 递归列出JSON所有层内容 +// qDebug() << "[postPrintFinished]ResultCode: " << obj["ResultCode"]; +// qDebug() << "[postPrintFinished]ResultMessage: " << obj["ResultMessage"]; +// qDebug() << "[postPrintFinished]ResultData: " << obj["ResultData"]; + + save_messege = obj["ResultMessage"].toString(); + + reply->deleteLater(); +} + +QString PrintNet::getMessege() +{ + return save_messege; +} +// 处理HTTP请求的应答 +void PrintNet::replyFinished(QNetworkReply *reply) +{ + QNetworkReply::NetworkError error; + error = reply->error(); // 应答无错误时为QNetworkReply::NoError(0) + if (error) + { // 非0值表示有错误发生 + switch(error) + { + case QNetworkReply::ConnectionRefusedError: + save_messege = "远程主机拒绝连接"; + break; + + case QNetworkReply::RemoteHostClosedError: + save_messege = "远程主机关闭连接"; + break; + + case QNetworkReply::HostNotFoundError: + save_messege = "远程主机未找到"; + break; + + case QNetworkReply::TimeoutError: + save_messege = "连接到远程主机超时"; + break; + + case QNetworkReply::ContentAccessDenied: + save_messege = "远程主机拒绝访问"; + break; + + case QNetworkReply::ContentNotFoundError: + save_messege = "内容未找到"; + break; + default: + save_messege = "通信失败"; + } + + emit json_server_error(); + return; + } + //未出错时获取响应信息 + QByteArray rsp_data = reply->readAll(); + //以下对获取的JSON数据进行解析 + QJsonDocument json = QJsonDocument::fromJson(rsp_data); + QJsonObject obj = json.object(); + traversJson(obj); // 递归列出JSON所有层内容 + +// qDebug() << "[replyFinished] ResultCode: " << obj["ResultCode"]; +// qDebug() << "[replyFinished] ResultMessage: " << obj["ResultMessage"]; +// qDebug() << "[replyFinished] ResultData: " << obj["ResultData"]; + + save_messege = obj["ResultMessage"].toString(); + + reply->deleteLater(); + save_messege = "JSON获取成功!"; + emit showMessege(); + if(m_bShortNet) + { + FromBaiDuGetShortUrl(Json_get_data.QRCodeContent); + } + else + { + emit receiveJSONDatafinish(); + } +} + +// 从服务器获取打印数据 +// url - 提供打印数据的服务器链接 +// equip_code - 喷码机编号 +void PrintNet::PrintNetGetData(QString url, const QString& equip_code) +{ + EquipmentCode = equip_code; + //设计本接口实现时,考虑输入的url为问号(?)之前那部分,不同的喷码机equip_code不同 + //QUrl qrl("http://47.111.170.144:8754/KLAPS/APSServer/ECode/GetProductUniqueCodeTest?EquipmentCode=1"); + QUrl qrl(url); + // 在访问服务器API的链接中添加喷码机编号 + //qrl.addQueryItem("EquipmentCode", QString::number(equip_code)); + qrl.addQueryItem("EquipmentCode", equip_code); + + //QUrlQuery query; + //query.addQueryItem("EquipmentCode", QString::number(equip_code)); + //qrl.setQuery(query); + + // 构造请求 + QNetworkRequest request; + request.setUrl(qrl); + + getManager->get(request); // HTTP GET +} + +// 向服务器上报打印完成状态 +// url - 上报打印完成状态的服务器链接 +void PrintNet::PrintNetPostFinish(QString url) +{ + QUrl qrl(url); + + + // 构造JSON对象数据 + QJsonObject json; + json.insert("ProductUniqueCode", QString(Json_get_data.ProductUniqueCode)); + json.insert("ProductionTask", QString::number(Json_get_data.ProductionTask)); + json.insert("PrintingContent", QString(Json_get_data.PrintingContent)); + //json.insert("EquipmentUniqueCode", QString::number(EquipmentCode) ); + json.insert("EquipmentUniqueCode", EquipmentCode ); + json.insert("StartingMeters", QString::number(Json_get_data.StartMetre)); + json.insert("ProductNumber", QString::number(Json_get_data.ProductPlanQty)); + json.insert("Coordinates", QString("北纬N31°51′15.36 东经E117°12′8.77")); +// qDebug() << json; + + QJsonDocument jsonDoc(json); +// qDebug() << jsonDoc; + + QByteArray jsonData = jsonDoc.toJson(); +// qDebug() << jsonData; + + QNetworkRequest request; + request.setUrl(qrl); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + + postManager->post(request, jsonData); // HTTP POST +} + +// 向服务器上报设备运行状态 +// url - 上报设备运行状态的服务器链接 + +void PrintNet::PrintNetPostState(QString url) +{ + QUrl qrl(url); + + // 构造JSON对象数据 + QJsonObject json; + //json.insert("EquipmentUniqueCode", QString::number(EquipmentCode)); + json.insert("EquipmentUniqueCode", EquipmentCode ); + json.insert("CurrentMeter", QString("13.3")); + json.insert("CurrentEcode", QString(Json_get_data.ProductUniqueCode)); + json.insert("CurrentPrintingContent", QString(Json_get_data.PrintingContent)); +// qDebug() << json; + + QJsonDocument jsonDoc(json); +// qDebug() << jsonDoc; + + QByteArray jsonData = jsonDoc.toJson(); +// qDebug() << jsonData; + + QNetworkRequest request; + request.setUrl(qrl); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + + postManager->post(request, jsonData); // HTTP POST +} + +// 向百度云获取转换的短网址 +//longUrl要转换的长url + +void PrintNet::FromBaiDuGetShortUrl(QString longUrl) +{ + QUrl qrl(QString("https://dwz.cn/api/v3/short-urls")); + + // 构造JSON对象数据 + QJsonObject json; + json.insert("LongUrl", longUrl); + json.insert("TermOfValidity", QString("long-term")); + //json.insert("CurrentEcode", QString(Json_get_data.ProductUniqueCode)); + //json.insert("CurrentPrintingContent", QString(Json_get_data.PrintingContent)); + //qDebug() << json; + + QJsonArray Arrjson; + Arrjson.append(json); + + QJsonDocument jsonDoc(Arrjson); + //qDebug() << jsonDoc; + + QByteArray jsonData = jsonDoc.toJson(); + //qDebug() << jsonData; + + + //LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): setSsl before")); + QNetworkRequest request; + request.setUrl(qrl); + //LogInfo::setRunStatusText(tr("defaultConfiguration new before")); + QSslConfiguration config = QSslConfiguration::defaultConfiguration(); + //LogInfo::setRunStatusText(tr("defaultConfiguration 1")); + config.setProtocol(QSsl::TlsV1); + //LogInfo::setRunStatusText(tr("defaultConfiguration 2")); + config.setPeerVerifyMode(QSslSocket::VerifyNone); + //LogInfo::setRunStatusText(tr("defaultConfiguration 3")); + request.setSslConfiguration(config); + //LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): setSsl after")); + + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8"); + request.setRawHeader("Dwz-Token" ,"708e8736a533df553a8898699280bcf9"); + + //LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): <1>")); + //QNetworkAccessManager *post_manager = new QNetworkAccessManager(this); + //connect(post_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(postGetShortUrlFinished(QNetworkReply *))); + m_postmanager->post(request, jsonData); // HTTP POST + //LogInfo::setRunStatusText(tr("FromBaiDuGetShortUrl(): <2>")); + //connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onNetReplyError(QNetworkReply::NetworkError))); + //connect(reply, SIGNAL(sslErrors(QList&)), this, SLOT(onNetReplySshErrors(QList&))); +#ifndef QT_NO_SSL + connect(post_manager, SIGNAL(sslErrors(QNetworkReply*,QList)), + this, SLOT(sslErrors(QNetworkReply*,QList))); +#endif + +} +#ifndef QT_NO_SSL +void PrintNet::sslErrors(QNetworkReply *reply,const QList &) +{ + reply->ignoreSslErrors(); +} +#endif + +void PrintNet::postGetShortUrlFinished(QNetworkReply *reply) +{ + //LogInfo::setRunStatusText(tr("postGetShortUrlFinished(): <3>")); + QNetworkReply::NetworkError error; + error = reply->error(); // 应答无错误时为QNetworkReply::NoError(0) + if (error) + { // 非0值表示有错误发生 + switch(error) + { + case QNetworkReply::ConnectionRefusedError: + save_messege = "远程主机拒绝连接"; + break; + + case QNetworkReply::RemoteHostClosedError: + save_messege = "远程主机关闭连接"; + break; + + case QNetworkReply::HostNotFoundError: + save_messege = "远程主机未找到"; + break; + + case QNetworkReply::TimeoutError: + save_messege = "连接到远程主机超时"; + break; + + case QNetworkReply::ContentAccessDenied: + save_messege = "远程主机拒绝访问"; + break; + + case QNetworkReply::ContentNotFoundError: + save_messege = "内容未找到"; + break; + default: + save_messege = "通信失败"; + } + //LogInfo::setRunStatusText(tr("postGetShortUrlFinished(): <4>")); + emit json_server_error(); + //emit receiveJSONDatafinish(); + return; + } + + //未出错时获取响应信息 + QByteArray rsp_data = reply->readAll(); + //以下对获取的JSON数据进行解析 + QJsonDocument json = QJsonDocument::fromJson(rsp_data); + //qDebug() << json; + + QJsonObject obj = json.object(); + // qDebug() << obj; + + QString strResultCode; + save_messege = strResultCode.number(obj["Code"].toDouble()); + if(save_messege != "0") + { + //LogInfo::setRunStatusText(tr("postGetShortUrlFinished(): <5>")); + //emit receiveJSONDatafinish(); + save_messege = "获取短网址出错,错误码:"+ save_messege; + return; + } + QJsonArray JsonArr = obj["ShortUrls"].toArray(); + QJsonValue value = JsonArr.at(0); + QJsonObject jsonObj = value.toObject(); +#if 1 + foreach (const QString& key, jsonObj.keys()) + { + QJsonValue value = jsonObj.value(key); + if (!value.isObject()) + { +// qDebug()<<"[traversJson]key="<")); + reply->deleteLater(); + emit receiveJSONDatafinish(); +} + + +void PrintNet::getJson_data(JSON_DATA *json_data) +{ + memcpy(json_data, &Json_get_data, sizeof(JSON_DATA)); +} diff --git a/print_net.h b/print_net.h new file mode 100644 index 0000000..d1fc790 --- /dev/null +++ b/print_net.h @@ -0,0 +1,56 @@ +#ifndef PRINT_NET_H +#define PRINT_NET_H + +#include + +#include +#include +#include +#include +#include + +#include "qjsonexport.h" +#include "qjsonobject.h" +#include "qjsonvalue.h" +#include "qjsondocument.h" +#include "qjsonarray.h" +#include "../SysPara.h" + + +class PrintNet : public QObject +{ +Q_OBJECT + QNetworkAccessManager *manager; +private slots: + void replyFinished(QNetworkReply *); + void postPrintFinished(QNetworkReply *); + void postGetShortUrlFinished(QNetworkReply *); + // void sslErrors(QNetworkReply *reply,const QList &); + +Q_SIGNALS: + void receiveJSONDatafinish(); + void json_server_error(); + void showMessege(); +public: + PrintNet(); + ~PrintNet(); + void PrintNetGetData(QString url, const QString& equip_code); + void PrintNetPostFinish(QString url); + void PrintNetPostState(QString url); + void traversJson(QJsonObject json_obj); + void getJson_data(JSON_DATA *json_data); + QString getMessege(); + void FromBaiDuGetShortUrl(QString longUrl); + + JSON_DATA Json_get_data; + bool m_bShortNet; +private: + QNetworkAccessManager *getManager; + QNetworkAccessManager *postManager; + QNetworkAccessManager *m_postmanager; + QString EquipmentCode; + QString save_messege; + +}; + +#endif // PRINT_NET_H diff --git a/printsetting.ui b/printsetting.ui new file mode 100644 index 0000000..d361dec --- /dev/null +++ b/printsetting.ui @@ -0,0 +1,3644 @@ + + + PrintSetting + + + true + + + + 0 + 0 + 800 + 470 + + + + + 0 + 90 + + + + Qt::ClickFocus + + + Form + + + + QLayout::SetDefaultConstraint + + + + + 6 + + + 0 + + + 0 + + + + + + 150 + 70 + + + + + 250 + 16777215 + + + + Qt::LeftToRight + + + 输入密码 + + + + + + + + 100 + 0 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 15 + 16777215 + + + + + false + + + + Qt::NoFocus + + + 墨线时间 + + + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 120 + 0 + + + + + 16777215 + 16 + + + + 0 + + + Qt::AlignCenter + + + + + + + 开机次数: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 墨线时间: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 16 + + + + 0 + + + Qt::AlignCenter + + + + + + + 维护时间: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0 + + + Qt::AlignCenter + + + + + + + + + + 0 + 70 + + + + + 250 + 16777215 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + Qt::LeftToRight + + + 应用当前配置 + + + + :/icon/apply.png:/icon/apply.png + + + + + + + + + + 0 + 0 + + + + + 0 + 370 + + + + + 16777215 + 16777215 + + + + 0 + + + + 常用设置 + + + + + + QLayout::SetDefaultConstraint + + + + + TextLabel + + + + + + + + 0 + 37 + + + + + 16777215 + 25 + + + + 打印模式: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 25 + + + + 字体宽度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 25 + + + + 首行电压(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 25 + + + + 字体加粗: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 5 + + + 50 + + + + + + + + 0 + 37 + + + + 0 + + + 100 + + + 75 + + + + + + + + 0 + 37 + + + + QComboBox QAbstractItemView::item +{ min-height: 25px;} + + + + 快速 + + + + + 标准 + + + + + 慢速 + + + + + + + + + 16777215 + 25 + + + + 字高设置(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 30 + + + 75 + + + + + + + + 0 + 37 + + + + 16777215 + + + + + + + + 16777215 + 25 + + + + 行末电压(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + Qt::ImhDigitsOnly + + + 0 + + + 20 + + + 1 + + + 0 + + + + + + + + 0 + 37 + + + + 修改授权 + + + + + + + + + 0 + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 回收故障处理 + + + false + + + false + + + false + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 超速暂停打印 + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 信息上下颠倒 + + + + :/icon/updown.png:/icon/updown.png + + + + + + + + 0 + 37 + + + + + 16777215 + 16777215 + + + + Qt::RightToLeft + + + 相位故障关机 + + + + + + + + 0 + 37 + + + + + 16777215 + 16777215 + + + + Qt::RightToLeft + + + 相位故障不打印 + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 信息左右颠倒 + + + + :/icon/leftright.png:/icon/leftright.png + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 不打印走米 + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 省点 + + + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 自然数计米 + + + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 高压故障关回收槽 + + + + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 字形优化 + + + + + + + + 0 + 37 + + + + + 16777215 + 16777215 + + + + Qt::RightToLeft + + + 故障停止走米 + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 电眼误触禁止 + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 调整电压 + + + + + + + + + + 高级设置 + + + + + 0 + 0 + 611 + 254 + + + + + + + false + + + + 0 + 37 + + + + 交替扫描隔点(默认为1): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + 冗点比例(默认为0%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + 点距调整值(默认为0): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + Qt::ImhDigitsOnly + + + 1 + + + 40 + + + 1 + + + 1 + + + + + + + false + + + + 0 + 37 + + + + 行末调整点模式: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 调整电压 + + + + + + + false + + + + 0 + 37 + + + + 行末调整点数(默认为0): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + + 快速 + + + + + 标准 + + + + + 慢速1 + + + + + 慢速2 + + + + + 慢速3 + + + + + 慢速4 + + + + + 慢速5 + + + + + 慢速6 + + + + + 慢速7 + + + + + 慢速8 + + + + + 慢速9 + + + + + + + + false + + + + 0 + 37 + + + + 行末点微调(‰): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + 点距调整电压位置: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + -2000 + + + 2000 + + + 0 + + + + + + + false + + + + 0 + 37 + + + + Qt::ImhDigitsOnly + + + 0 + + + 60 + + + 1 + + + 0 + + + + + + + false + + + + 0 + 37 + + + + Qt::RightToLeft + + + 扫描颠倒 + + + + + + + false + + + + 0 + 37 + + + + + 懒惰模式 + + + + + 贪婪模式 + + + + + 均衡模式 + + + + + + + + false + + + + 0 + 37 + + + + -200 + + + 200 + + + 0 + + + + + + + false + + + + 0 + 37 + + + + 去除冗点模式(默认懒惰): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + 0 + + + 50 + + + + + + + false + + + + 0 + 37 + + + + Qt::ImhDigitsOnly + + + 0 + + + 40 + + + 1 + + + 0 + + + + + + + + + 高级设置 + + + + + 9 + 128 + 760 + 16 + + + + Qt::Horizontal + + + + + + 9 + 430 + 760 + 41 + + + + Qt::Horizontal + + + + + + 9 + 9 + 761 + 82 + + + + + + + + 0 + 37 + + + + 使用推荐设置 + + + + + + + + 0 + 37 + + + + + 快 + + + + + 标准 + + + + + 慢速1 + + + + + 慢速2 + + + + + + + + true + + + 检测回收槽 + + + + + + + + 0 + 37 + + + + 锁定脉冲计数 + + + + + + + true + + + + 0 + 37 + + + + 每条信息只打印一次 + + + + + + + + 0 + 37 + + + + + 电线电缆 + + + + + 制药/食品/电子 + + + + + 建筑管材 + + + + + 其他 + + + + + + + + 新放大板 + + + + + + + + 185 + 25 + + + + 高速模式 + + + + + + + + + 10 + 143 + 761 + 211 + + + + + + + + 0 + 37 + + + + 不检测喷头盖 + + + + + + + + 0 + 37 + + + + 非字宽 + + + true + + + + + + + + 0 + 37 + + + + 交替扫描隔点(默认为1): + + + + + + + + 0 + 37 + + + + 导出随机码文本 + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 扫描颠倒 + + + + + + + + 0 + 37 + + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 使用齿轮泵 + + + + + + + + 0 + 37 + + + + 复位发送打印数据 + + + + + + + 高压阈值: + + + + + + + false + + + + 0 + 37 + + + + 300 + + + 5000 + + + 10 + + + + + + + + 0 + 37 + + + + 冗点比例(默认为0%): + + + + + + + + 0 + 37 + + + + + + + + + 0 + 37 + + + + Qt::RightToLeft + + + 打印时绿灯常亮 + + + + + + + Qt::RightToLeft + + + 使用回收泵 + + + + + + + 齿轮泵转速预警值 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 185 + 37 + + + + Qt::LeftToRight + + + 1000 + + + 2000 + + + 10 + + + 1000 + + + + + + + + 16777215 + 37 + + + + Qt::RightToLeft + + + 维达力自动打印 + + + + + + + false + + + + 0 + 37 + + + + Qt::RightToLeft + + + 5行5点阵 + + + + + + + + + 计数器设置 + + + + + 0 + 0 + 681 + 211 + + + + + 0 + 0 + + + + + 0 + 100 + + + + + 16777215 + 350 + + + + QRadioButton::indicator { +width: 25px; +height: 25px; +} + + + 0 + + + + 计数器1设置 + + + + + 0 + 0 + 582 + 131 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 清零 + + + + + + + false + + + + 0 + 37 + + + + 0 + + + 99999999 + + + 1 + + + + + + + + 0 + 37 + + + + 1 + + + 65535 + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + 重复数: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 9999999 + + + 1 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 重设值 + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + 结束值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + QRadioButton::indicator { +width: 25px; +height: 25px; +} + + + 增量值: + + + + + + + + 0 + 0 + + + + QRadioButton::indicator { +width: 25px; +height: 25px; +} + + + 当前值: + + + + + + + + 85 + 37 + + + + 99999999 + + + 9999 + + + + + + + + + + Qt::AlignCenter + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 起始值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + Qt::ImhDigitsOnly + + + -49999999 + + + 49999999 + + + 1 + + + + + + + + + + 0 + 0 + + + + 3 + + + + + + + + + + 0 + 0 + + + + + 64 + 37 + + + + 可变长度 + + + + + + + + 20 + 21 + + + + + + + + + + + 小数点位数 + + + + + + + + + 590 + 0 + 81 + 131 + + + + 注意:“其它设置”页下的"分段计米“勾选时,计数器1不可用。 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + 计数器2设置 + + + + + 0 + 0 + 563 + 125 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 起始值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 999999 + + + 1 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 结束值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 80 + 37 + + + + 9999999 + + + 9999 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 重复数: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 1 + + + 65535 + + + + + + + + 0 + 37 + + + + 增量值: + + + + + + + + 0 + 37 + + + + -49999999 + + + 49999999 + + + 1 + + + + + + + + 0 + 37 + + + + QRadioButton::indicator { +width: 25px; +height: 25px; +} + + + 当前值: + + + + + + + false + + + + 0 + 37 + + + + 0 + + + 999999999 + + + 1 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 重设值 + + + + + + + + 0 + 37 + + + + 清零 + + + + + + + true + + + + 11 + + + + Qt::LeftToRight + + + + + + Qt::AlignCenter + + + + + + + + + 计数器3设置 + + + + + 0 + 0 + 563 + 125 + + + + + + + + 0 + 37 + + + + QRadioButton::indicator { +width: 25px; +height: 25px; +} + + + 当前值: + + + + + + + Qt::LeftToRight + + + 重复数: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::LeftToRight + + + 结束值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + QRadioButton::indicator { +width: 25px; +height: 25px; +} + + + 增量值: + + + + + + + false + + + + 0 + 37 + + + + 0 + + + 999999999 + + + 1 + + + + + + + + 0 + 33 + + + + Qt::LeftToRight + + + + + + 重设值 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + -49999999 + + + 49999999 + + + 1 + + + + + + + + 0 + 37 + + + + 1 + + + 65535 + + + + + + + + 0 + 37 + + + + 999999 + + + 1 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 起始值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 80 + 37 + + + + 9999999 + + + 9999 + + + + + + + + 0 + 37 + + + + 清零 + + + + + + + true + + + + 11 + + + + Qt::LeftToRight + + + + + + Qt::AlignCenter + + + + + + + + + 跳米设置 + + + + + 10 + 10 + 561 + 82 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 起始值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 95 + 37 + + + + 65535 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 结束值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 95 + 37 + + + + 65535 + + + 999 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 增量值: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 95 + 37 + + + + 0 + + + 65535 + + + 1 + + + + + + + true + + + + 0 + 37 + + + + Qt::LeftToRight + + + 跳米数: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + 95 + 37 + + + + 0 + + + 999999999 + + + 1 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 跳米打印 + + + + + + + + + + + 0 + 204 + 531 + 168 + + + + + + + + 0 + 37 + + + + QComboBox QAbstractItemView::item +{ min-height: 25px;} + + + QComboBox::AdjustToContents + + + + yyyy-MM-dd + + + + + yyyy/MM/dd + + + + + yyyyMMdd + + + + + yyyy年MM月dd日 + + + + + yyyy-MM-dd hh:mm + + + + + yyyy/MM/dd hh:mm + + + + + yyyyMMddhhmm + + + + + yyyy年MM月dd日hh:mm + + + + + hh:mm + + + + + ddhhmm + + + + + dd MM yy + + + + + dd/MM/yy + + + + + dd/MM/yyyy + + + + + dd-MM-yy + + + + + dd-MM-yyyy + + + + + + + + + 0 + 0 + + + + 复位到起始值 + + + + + + + Qt::LeftToRight + + + 有效期(天): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 9999 + + + 0 + + + + + + + + 0 + 0 + + + + 计数器保存关机值 + + + + + + + true + + + + 100 + 0 + + + + 计数器3 + + + false + + + + + + + true + + + + 100 + 37 + + + + 计数器1 + + + false + + + + + + + 生产日期: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + 100 + 0 + + + + 计数器2 + + + false + + + + + + + + 0 + 37 + + + + 循环产品计数 + + + + + + + + + 交替打印设置 + + + + + 11 + 56 + 551 + 211 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 重复次数: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 2 + + + 65535 + + + 100 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 起始位置: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + 1 + + + 65535 + + + 1 + + + + + + + 距离尾部(mm): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::LeftToRight + + + 隐藏值米标: + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 0 + + + + Qt::RightToLeft + + + 隐藏打印值 + + + + + + + + 0 + 37 + + + + + 无交替 + + + + + 普通交替 + + + + + 电眼触发交替 + + + + + 首尾交替 + + + + + + + + + 0 + 37 + + + + 1 + + + 65535 + + + 50 + + + + + + + + 0 + 37 + + + + Qt::LeftToRight + + + 交替间隔: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 37 + + + + 1 + + + 255 + + + + + + + 打印条件倍数值: + + + + + + + false + + + + 0 + 0 + + + + + 0 + 37 + + + + 9999999 + + + + + + + false + + + + 0 + 0 + + + + + 0 + 37 + + + + 99999 + + + + + + + false + + + + 0 + 0 + + + + + 0 + 37 + + + + 1 + + + + + + + + + 576 + 170 + 91 + 91 + + + + 使用隐藏功能时必须使用计数器1 + + + true + + + + + + 其它设置 + + + + + 322 + 10 + 16 + 16 + + + + + + + + + + 170 + 10 + 16 + 16 + + + + + + + + + + 10 + 10 + 199 + 90 + + + + + + + 更换信息文件时执行的动作: + + + + + + + Qt::LeftToRight + + + 产品计数器自动清0 + + + + + + + Qt::LeftToRight + + + 总产品计数器自动清0 + + + + + + + + + 10 + 100 + 218 + 71 + + + + + + + 外接显示屏: + + + + + + + + 无 + + + + + 小屏 + + + + + 大屏 + + + + + + + + + 总产品计数值 + + + + + 计数器1 + + + + + 计数器2 + + + + + + + + 显示屏显示: + + + + + + + + + 270 + 0 + 121 + 22 + + + + 分段计米 + + + + + + 230 + 50 + 431 + 164 + + + + true + + + 0 + + + 4 + + + false + + + 80 + + + true + + + 18 + + + true + + + 30 + + + + + + + + + + 10 + 170 + 201 + 51 + + + + 米标显示 + + + + + + 670 + 80 + 51 + 51 + + + + 上移 + + + + + + 670 + 160 + 51 + 51 + + + + 下移 + + + + + + 230 + 20 + 360 + 32 + + + + + + + 添 加 + + + + + + + 插 入 + + + + + + + 删 除 + + + + + + + 全部删除 + + + + + + + + + 打印电压缩放 + + + + + 20 + 30 + 165 + 39 + + + + + + + + 0 + 37 + + + + 整体缩放(%) : + + + + + + + + 0 + 37 + + + + 40 + + + 150 + + + 100 + + + + + + + + + + + + + + + diff --git a/pulsenumfix.ui b/pulsenumfix.ui new file mode 100644 index 0000000..17045f9 --- /dev/null +++ b/pulsenumfix.ui @@ -0,0 +1,231 @@ + + + PulseNumFix + + + + 0 + 0 + 481 + 228 + + + + Qt::StrongFocus + + + Dialog + + + + + 240 + 180 + 221 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 461 + 177 + + + + + 4 + + + 4 + + + 4 + + + + + + + 根据速度 + + + + + + + 根据喷印 + + + true + + + + + + + 根据脉冲数 + + + + + + + 根据同步器参数 + + + + + + + + + + + + + 实际皮带速度(毫米/秒): + + + + + + + Qt::ImhNone + + + + + + + + + + + 实际喷印间隔长度(毫米): + + + + + + + Qt::ImhNone + + + + + + + + + + + 长度(毫米): + + + + + + + Qt::ImhNone + + + + + + + 同步脉冲数 + + + + + + + Qt::ImhNone + + + + + + + + + + + 同步器直径(毫米): + + + + + + + Qt::ImhNone + + + + + + + 脉冲数/转: + + + + + + + Qt::ImhNone + + + + + + + + + + + + + + buttonBox + accepted() + PulseNumFix + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + PulseNumFix + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/qextserialbase.cpp b/qextserialbase.cpp new file mode 100644 index 0000000..4c77fb7 --- /dev/null +++ b/qextserialbase.cpp @@ -0,0 +1,226 @@ +#include "qextserialbase.h" + +/*! +\fn QextSerialBase::QextSerialBase() +Default constructor. +*/ +QextSerialBase::QextSerialBase() + : QIODevice() +{ + +#ifdef _TTY_WIN_ + setPortName("COM1"); + +#elif defined(_TTY_IRIX_) + setPortName("/dev/ttyf1"); + +#elif defined(_TTY_HPUX_) + setPortName("/dev/tty1p0"); + +#elif defined(_TTY_SUN_) + setPortName("/dev/ttya"); + +#elif defined(_TTY_DIGITAL_) + setPortName("/dev/tty01"); + +#elif defined(_TTY_FREEBSD_) + setPortName("/dev/ttyd1"); + +#else + setPortName("/dev/ttyS0"); +#endif + + construct(); +} + +/*! +\fn QextSerialBase::QextSerialBase(const QString & name) +Construct a port and assign it to the device specified by the name parameter. +*/ +QextSerialBase::QextSerialBase(const QString & name) + : QIODevice() +{ + setPortName(name); + construct(); +} + +/*! +\fn QextSerialBase::~QextSerialBase() +Standard destructor. +*/ +QextSerialBase::~QextSerialBase() +{ + delete mutex; +} + +/*! +\fn void QextSerialBase::construct() +Common constructor function for setting up default port settings. +(115200 Baud, 8N1, Hardware flow control where supported, otherwise no flow control, and 0 ms timeout). +*/ +void QextSerialBase::construct() +{ + Settings.BaudRate=BAUD115200; + Settings.DataBits=DATA_8; + Settings.Parity=PAR_NONE; + Settings.StopBits=STOP_1; + Settings.FlowControl=FLOW_HARDWARE; + Settings.Timeout_Millisec=500; + mutex = new QMutex( QMutex::Recursive ); + setOpenMode(QIODevice::NotOpen); +} + +void QextSerialBase::setQueryMode(QueryMode mechanism) +{ + _queryMode = mechanism; +} + +/*! +\fn void QextSerialBase::setPortName(const QString & name) +Sets the name of the device associated with the object, e.g. "COM1", or "/dev/ttyS0". +*/ +void QextSerialBase::setPortName(const QString & name) +{ + port = name; +} + +/*! +\fn QString QextSerialBase::portName() const +Returns the name set by setPortName(). +*/ +QString QextSerialBase::portName() const +{ + return port; +} + +/*! +\fn BaudRateType QextSerialBase::baudRate(void) const +Returns the baud rate of the serial port. For a list of possible return values see +the definition of the enum BaudRateType. +*/ +BaudRateType QextSerialBase::baudRate(void) const +{ + return Settings.BaudRate; +} + +/*! +\fn DataBitsType QextSerialBase::dataBits() const +Returns the number of data bits used by the port. For a list of possible values returned by +this function, see the definition of the enum DataBitsType. +*/ +DataBitsType QextSerialBase::dataBits() const +{ + return Settings.DataBits; +} + +/*! +\fn ParityType QextSerialBase::parity() const +Returns the type of parity used by the port. For a list of possible values returned by +this function, see the definition of the enum ParityType. +*/ +ParityType QextSerialBase::parity() const +{ + return Settings.Parity; +} + +/*! +\fn StopBitsType QextSerialBase::stopBits() const +Returns the number of stop bits used by the port. For a list of possible return values, see +the definition of the enum StopBitsType. +*/ +StopBitsType QextSerialBase::stopBits() const +{ + return Settings.StopBits; +} + +/*! +\fn FlowType QextSerialBase::flowControl() const +Returns the type of flow control used by the port. For a list of possible values returned +by this function, see the definition of the enum FlowType. +*/ +FlowType QextSerialBase::flowControl() const +{ + return Settings.FlowControl; +} + +/*! +\fn bool QextSerialBase::isSequential() const +Returns true if device is sequential, otherwise returns false. Serial port is sequential device +so this function always returns true. Check QIODevice::isSequential() documentation for more +information. +*/ +bool QextSerialBase::isSequential() const +{ + return true; +} + +/*! +\fn bool QextSerialBase::atEnd() const +This function will return true if the input buffer is empty (or on error), and false otherwise. +Call QextSerialBase::lastError() for error information. +*/ +bool QextSerialBase::atEnd() const +{ + if (size()) { + return true; + } + return false; +} + +/*! +\fn qint64 QextSerialBase::readLine(char * data, qint64 maxSize) +This function will read a line of buffered input from the port, stopping when either maxSize bytes +have been read, the port has no more data available, or a newline is encountered. +The value returned is the length of the string that was read. +*/ +qint64 QextSerialBase::readLine(char * data, qint64 maxSize) +{ + qint64 numBytes = bytesAvailable(); + char* pData = data; + + if (maxSize < 2) //maxSize must be larger than 1 + return -1; + + /*read a byte at a time for MIN(bytesAvail, maxSize - 1) iterations, or until a newline*/ + while (pData<(data+numBytes) && --maxSize) { + readData(pData, 1); + if (*pData++ == '\n') { + break; + } + } + *pData='\0'; + + /*return size of data read*/ + return (pData-data); +} + +/*! +\fn ulong QextSerialBase::lastError() const +Returns the code for the last error encountered by the port, or E_NO_ERROR if the last port +operation was successful. Possible error codes are: + +\verbatim +Error Explanation +--------------------------- ------------------------------------------------------------- +E_NO_ERROR No Error has occured +E_INVALID_FD Invalid file descriptor (port was not opened correctly) +E_NO_MEMORY Unable to allocate memory tables (POSIX) +E_CAUGHT_NON_BLOCKED_SIGNAL Caught a non-blocked signal (POSIX) +E_PORT_TIMEOUT Operation timed out (POSIX) +E_INVALID_DEVICE The file opened by the port is not a character device (POSIX) +E_BREAK_CONDITION The port detected a break condition +E_FRAMING_ERROR The port detected a framing error + (usually caused by incorrect baud rate settings) +E_IO_ERROR There was an I/O error while communicating with the port +E_BUFFER_OVERRUN Character buffer overrun +E_RECEIVE_OVERFLOW Receive buffer overflow +E_RECEIVE_PARITY_ERROR The port detected a parity error in the received data +E_TRANSMIT_OVERFLOW Transmit buffer overflow +E_READ_FAILED General read operation failure +E_WRITE_FAILED General write operation failure +\endverbatim +*/ +ulong QextSerialBase::lastError() const +{ + return lastErr; +} diff --git a/qextserialbase.h b/qextserialbase.h new file mode 100644 index 0000000..e1474e4 --- /dev/null +++ b/qextserialbase.h @@ -0,0 +1,258 @@ +#ifndef _QEXTSERIALBASE_H_ +#define _QEXTSERIALBASE_H_ + +#include +#include +#include +#include + +/*if all warning messages are turned off, flag portability warnings to be turned off as well*/ +#ifdef _TTY_NOWARN_ +#define _TTY_NOWARN_PORT_ +#endif + +/*macros for thread support*/ +#define LOCK_MUTEX() mutex->lock() +#define UNLOCK_MUTEX() mutex->unlock() + +/*macros for warning and debug messages*/ +#ifdef _TTY_NOWARN_PORT_ +#define TTY_PORTABILITY_WARNING(s) +#else +#define TTY_PORTABILITY_WARNING(s) qWarning(s) +#endif /*_TTY_NOWARN_PORT_*/ +#ifdef _TTY_NOWARN_ +#define TTY_WARNING(s) +#else +#define TTY_WARNING(s) qWarning(s) +#endif /*_TTY_NOWARN_*/ + + +/*line status constants*/ +#define LS_CTS 0x01 +#define LS_DSR 0x02 +#define LS_DCD 0x04 +#define LS_RI 0x08 +#define LS_RTS 0x10 +#define LS_DTR 0x20 +#define LS_ST 0x40 +#define LS_SR 0x80 + +/*error constants*/ +#define E_NO_ERROR 0 +#define E_INVALID_FD 1 +#define E_NO_MEMORY 2 +#define E_CAUGHT_NON_BLOCKED_SIGNAL 3 +#define E_PORT_TIMEOUT 4 +#define E_INVALID_DEVICE 5 +#define E_BREAK_CONDITION 6 +#define E_FRAMING_ERROR 7 +#define E_IO_ERROR 8 +#define E_BUFFER_OVERRUN 9 +#define E_RECEIVE_OVERFLOW 10 +#define E_RECEIVE_PARITY_ERROR 11 +#define E_TRANSMIT_OVERFLOW 12 +#define E_READ_FAILED 13 +#define E_WRITE_FAILED 14 + +/*! + * Enums for port settings. + */ +enum NamingConvention +{ + WIN_NAMES, + IRIX_NAMES, + HPUX_NAMES, + SUN_NAMES, + DIGITAL_NAMES, + FREEBSD_NAMES, + LINUX_NAMES +}; + +enum BaudRateType +{ + BAUD50, //POSIX ONLY + BAUD75, //POSIX ONLY + BAUD110, + BAUD134, //POSIX ONLY + BAUD150, //POSIX ONLY + BAUD200, //POSIX ONLY + BAUD300, + BAUD600, + BAUD1200, + BAUD1800, //POSIX ONLY + BAUD2400, + BAUD4800, + BAUD9600, + BAUD14400, //WINDOWS ONLY + BAUD19200, + BAUD38400, + BAUD56000, //WINDOWS ONLY + BAUD57600, + BAUD76800, //POSIX ONLY + BAUD115200, + BAUD128000, //WINDOWS ONLY + BAUD256000 //WINDOWS ONLY +}; + +enum DataBitsType +{ + DATA_5, + DATA_6, + DATA_7, + DATA_8 +}; + +enum ParityType +{ + PAR_NONE, + PAR_ODD, + PAR_EVEN, + PAR_MARK, //WINDOWS ONLY + PAR_SPACE +}; + +enum StopBitsType +{ + STOP_1, + STOP_1_5, //WINDOWS ONLY + STOP_2 +}; + +enum FlowType +{ + FLOW_OFF, + FLOW_HARDWARE, + FLOW_XONXOFF +}; + +/** + * structure to contain port settings + */ +struct PortSettings +{ + BaudRateType BaudRate; + DataBitsType DataBits; + ParityType Parity; + StopBitsType StopBits; + FlowType FlowControl; + long Timeout_Millisec; +}; + +/*! + * \author Stefan Sander + * \author Michal Policht + * + * A common base class for Win_QextSerialBase, Posix_QextSerialBase and QextSerialPort. + */ +class QextSerialBase : public QIODevice +{ + Q_OBJECT + + public: + enum QueryMode { + Polling, + EventDriven + }; + + protected: + QMutex* mutex; + QString port; + PortSettings Settings; + ulong lastErr; + QextSerialBase::QueryMode _queryMode; + + virtual qint64 readData(char * data, qint64 maxSize)=0; + virtual qint64 writeData(const char * data, qint64 maxSize)=0; + + public: + QextSerialBase(); + QextSerialBase(const QString & name); + virtual ~QextSerialBase(); + virtual void construct(); + virtual void setPortName(const QString & name); + virtual QString portName() const; + + /**! + * Get query mode. + * \return query mode. + */ + inline QextSerialBase::QueryMode queryMode() const { return _queryMode; }; + + /*! + * Set desired serial communication handling style. You may choose from polling + * or event driven approach. This function does nothing when port is open; to + * apply changes port must be reopened. + * + * In event driven approach read() and write() functions are acting + * asynchronously. They return immediately and the operation is performed in + * the background, so they doesn't freeze the calling thread. + * To determine when operation is finished, QextSerialPort runs separate thread + * and monitors serial port events. Whenever the event occurs, adequate signal + * is emitted. + * + * When polling is set, read() and write() are acting synchronously. Signals are + * not working in this mode and some functions may not be available. The advantage + * of polling is that it generates less overhead due to lack of signals emissions + * and it doesn't start separate thread to monitor events. + * + * Generally event driven approach is more capable and friendly, although some + * applications may need as low overhead as possible and then polling comes. + * + * \param mode query mode. + */ + virtual void setQueryMode(QueryMode mode); + +// virtual void setBlockingRead(bool block) = 0; ///< @todo implement. + + virtual void setBaudRate(BaudRateType)=0; + virtual BaudRateType baudRate() const; + virtual void setDataBits(DataBitsType)=0; + virtual DataBitsType dataBits() const; + virtual void setParity(ParityType)=0; + virtual ParityType parity() const; + virtual void setStopBits(StopBitsType)=0; + virtual StopBitsType stopBits() const; + virtual void setFlowControl(FlowType)=0; + virtual FlowType flowControl() const; + virtual void setTimeout(long)=0; + + virtual bool open(OpenMode mode)=0; + virtual bool isSequential() const; + virtual void close()=0; + virtual void flush()=0; + + virtual qint64 size() const=0; + virtual qint64 bytesAvailable()=0; + virtual bool atEnd() const; + + virtual void ungetChar(char c)=0; + virtual qint64 readLine(char * data, qint64 maxSize); + + virtual ulong lastError() const; + virtual void translateError(ulong error)=0; + + virtual void setDtr(bool set=true)=0; + virtual void setRts(bool set=true)=0; + virtual ulong lineStatus()=0; + + signals: + /** + * This signal is emitted whenever port settings are updated. + * \param valid \p true if settings are valid, \p false otherwise. + * + * @todo implement. + */ +// void validSettings(bool valid); + + /*! + * This signal is emitted whenever dsr line has changed its state. You may + * use this signal to check if device is connected. + * \param status \p true when DSR signal is on, \p false otherwise. + * + * \see lineStatus(). + */ + void dsrChanged(bool status); +}; + +#endif diff --git a/qjson/qjson-backport_global.h b/qjson/qjson-backport_global.h new file mode 100644 index 0000000..dcc7866 --- /dev/null +++ b/qjson/qjson-backport_global.h @@ -0,0 +1,12 @@ +#ifndef QJSONBACKPORT_GLOBAL_H +#define QJSONBACKPORT_GLOBAL_H + +#include + +#if defined(QJSONBACKPORT_LIBRARY) +# define QJSONBACKPORTSHARED_EXPORT Q_DECL_EXPORT +#else +# define QJSONBACKPORTSHARED_EXPORT Q_DECL_IMPORT +#endif + +#endif // QJSONBACKPORT_GLOBAL_H diff --git a/qjson/qjson.cpp b/qjson/qjson.cpp new file mode 100644 index 0000000..4f7372a --- /dev/null +++ b/qjson/qjson.cpp @@ -0,0 +1,427 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qjson_p.h" +#include + +QT_BEGIN_NAMESPACE + +namespace QJsonPrivate +{ + +#ifdef Q_LITTLE_ENDIAN +#define Q_TO_LITTLE_ENDIAN(x) (x) +#else +#define Q_TO_LITTLE_ENDIAN(x) ( ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x & 0xff000000) >> 24) ) +#endif + +static const Base emptyArray = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } }; +static const Base emptyObject = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } }; + + +void Data::compact() +{ + Q_ASSERT(sizeof(Value) == sizeof(offset)); + + if (!compactionCounter) + return; + + Base *base = header->root(); + int reserve = 0; + if (base->is_object) { + Object *o = static_cast(base); + for (int i = 0; i < (int)o->length; ++i) + reserve += o->entryAt(i)->usedStorage(o); + } else { + Array *a = static_cast(base); + for (int i = 0; i < (int)a->length; ++i) + reserve += (*a)[i].usedStorage(a); + } + + int size = sizeof(Base) + reserve + base->length*sizeof(offset); + int alloc = sizeof(Header) + size; + Header *h = (Header *) malloc(alloc); + h->tag = QJsonDocument::BinaryFormatTag; + h->version = 1; + Base *b = h->root(); + b->size = size; + b->is_object = header->root()->is_object; + b->length = base->length; + b->tableOffset = reserve + sizeof(Array); + + int offset = sizeof(Base); + if (b->is_object) { + Object *o = static_cast(base); + Object *no = static_cast(b); + + for (int i = 0; i < (int)o->length; ++i) { + no->table()[i] = offset; + + const Entry *e = o->entryAt(i); + Entry *ne = no->entryAt(i); + int s = e->size(); + memcpy(ne, e, s); + offset += s; + int dataSize = e->value.usedStorage(o); + if (dataSize) { + memcpy((char *)no + offset, e->value.data(o), dataSize); + ne->value.value = offset; + offset += dataSize; + } + } + } else { + Array *a = static_cast(base); + Array *na = static_cast(b); + + for (int i = 0; i < (int)a->length; ++i) { + const Value &v = (*a)[i]; + Value &nv = (*na)[i]; + nv = v; + int dataSize = v.usedStorage(a); + if (dataSize) { + memcpy((char *)na + offset, v.data(a), dataSize); + nv.value = offset; + offset += dataSize; + } + } + } + Q_ASSERT(offset == (int)b->tableOffset); + + free(header); + header = h; + this->alloc = alloc; + compactionCounter = 0; +} + +bool Data::valid() const +{ + if (header->tag != QJsonDocument::BinaryFormatTag || header->version != 1u) + return false; + + bool res = false; + if (header->root()->is_object) + res = static_cast(header->root())->isValid(); + else + res = static_cast(header->root())->isValid(); + + return res; +} + + +int Base::reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace) +{ + Q_ASSERT(posInTable >= 0 && posInTable <= (int)length); + + offset off = tableOffset; + // move table to new position + if (replace) { + memmove((char *)(table()) + dataSize, table(), length*sizeof(offset)); + } else { + memmove((char *)(table() + posInTable + numItems) + dataSize, table() + posInTable, (length - posInTable)*sizeof(offset)); + memmove((char *)(table()) + dataSize, table(), posInTable*sizeof(offset)); + } + tableOffset += dataSize; + for (int i = 0; i < (int)numItems; ++i) + table()[posInTable + i] = off; + size += dataSize; + if (!replace) { + length += numItems; + size += numItems * sizeof(offset); + } + return off; +} + +void Base::removeItems(int pos, int numItems) +{ + Q_ASSERT(pos >= 0 && pos <= (int)length); + if (pos + numItems < (int)length) + memmove(table() + pos, table() + pos + numItems, (length - pos - numItems)*sizeof(offset)); + length -= numItems; +} + +int Object::indexOf(const QString &key, bool *exists) +{ + int min = 0; + int n = length; + while (n > 0) { + int half = n >> 1; + int middle = min + half; + if (*entryAt(middle) >= key) { + n = half; + } else { + min = middle + 1; + n -= half + 1; + } + } + if (min < (int)length && *entryAt(min) == key) { + *exists = true; + return min; + } + *exists = false; + return min; +} + +bool Object::isValid() const +{ + if (tableOffset + length*sizeof(offset) > size) + return false; + + for (uint i = 0; i < length; ++i) { + offset entryOffset = table()[i]; + if (entryOffset + sizeof(Entry) >= tableOffset) + return false; + Entry *e = entryAt(i); + int s = e->size(); + if (table()[i] + s > tableOffset) + return false; + if (!e->value.isValid(this)) + return false; + } + return true; +} + + + +bool Array::isValid() const +{ + if (tableOffset + length*sizeof(offset) > size) + return false; + + for (uint i = 0; i < length; ++i) { + if (!at(i).isValid(this)) + return false; + } + return true; +} + + +bool Entry::operator ==(const QString &key) const +{ + if (value.latinKey) + return (shallowLatin1Key() == key); + else + return (shallowKey() == key); +} + +bool Entry::operator >=(const QString &key) const +{ + if (value.latinKey) + return (shallowLatin1Key() >= key); + else + return (shallowKey() >= key); +} + +bool Entry::operator ==(const Entry &other) const +{ + if (value.latinKey) { + if (other.value.latinKey) + return shallowLatin1Key() == other.shallowLatin1Key(); + return shallowLatin1Key() == other.shallowKey(); + } else if (other.value.latinKey) { + return shallowKey() == other.shallowLatin1Key(); + } + return shallowKey() == other.shallowKey(); +} + +bool Entry::operator >=(const Entry &other) const +{ + if (value.latinKey) { + if (other.value.latinKey) + return shallowLatin1Key() >= other.shallowLatin1Key(); + return shallowLatin1Key() >= other.shallowKey(); + } else if (other.value.latinKey) { + return shallowKey() >= other.shallowLatin1Key(); + } + return shallowKey() >= other.shallowKey(); +} + + +int Value::usedStorage(const Base *b) const +{ + int s = 0; + switch (type) { + case QJsonValue::Double: + if (latinOrIntValue) + break; + s = sizeof(double); + break; + case QJsonValue::String: { + char *d = data(b); + if (latinOrIntValue) + s = sizeof(ushort) + *(ushort *)d; + else + s = sizeof(int) + sizeof(ushort)*(*(int *)d); + break; + } + case QJsonValue::Array: + case QJsonValue::Object: + s = base(b)->size; + break; + case QJsonValue::Null: + case QJsonValue::Bool: + default: + break; + } + return alignedSize(s); +} + +bool Value::isValid(const Base *b) const +{ + int offset = 0; + switch (type) { + case QJsonValue::Double: + if (latinOrIntValue) + break; + // fall through + case QJsonValue::String: + case QJsonValue::Array: + case QJsonValue::Object: + offset = value; + break; + case QJsonValue::Null: + case QJsonValue::Bool: + default: + break; + } + + if (!offset) + return true; + if (offset + sizeof(uint) > b->tableOffset) + return false; + + int s = usedStorage(b); + if (!s) + return true; + if (s < 0 || offset + s > (int)b->tableOffset) + return false; + if (type == QJsonValue::Array) + return static_cast(base(b))->isValid(); + if (type == QJsonValue::Object) + return static_cast(base(b))->isValid(); + return true; +} + +/*! + \internal + */ +int Value::requiredStorage(const QJsonValue &v, bool *compressed) +{ + *compressed = false; + switch (v.t) { + case QJsonValue::Double: + if (QJsonPrivate::compressedNumber(v.dbl) != INT_MAX) { + *compressed = true; + return 0; + } + return sizeof(double); + case QJsonValue::String: { + QString s = v.toString(); + *compressed = QJsonPrivate::useCompressed(s); + return QJsonPrivate::qStringSize(s, *compressed); + } + case QJsonValue::Array: + case QJsonValue::Object: + return v.base ? v.base->size : sizeof(QJsonPrivate::Base); + case QJsonValue::Undefined: + case QJsonValue::Null: + case QJsonValue::Bool: + break; + } + return 0; +} + +/*! + \internal + */ +uint Value::valueToStore(const QJsonValue &v, uint offset) +{ + switch (v.t) { + case QJsonValue::Undefined: + case QJsonValue::Null: + break; + case QJsonValue::Bool: + return v.b; + case QJsonValue::Double: { + int c = QJsonPrivate::compressedNumber(v.dbl); + if (c != INT_MAX) + return c; + } + // fall through + case QJsonValue::String: + case QJsonValue::Array: + case QJsonValue::Object: + return offset; + } + return 0; +} + +/*! + \internal + */ +void Value::copyData(const QJsonValue &v, char *dest, bool compressed) +{ + switch (v.t) { + case QJsonValue::Double: + if (!compressed) { + qToLittleEndian(v.ui, (uchar *)dest); + } + break; + case QJsonValue::String: { + QString str = v.toString(); + QJsonPrivate::copyString(dest, str, compressed); + break; + } + case QJsonValue::Array: + case QJsonValue::Object: { + const QJsonPrivate::Base *b = v.base; + if (!b) + b = (v.t == QJsonValue::Array ? &emptyArray : &emptyObject); + memcpy(dest, b, b->size); + break; + } + default: + break; + } +} + +} // namespace QJsonPrivate + +QT_END_NAMESPACE diff --git a/qjson/qjson_p.h b/qjson/qjson_p.h new file mode 100644 index 0000000..d83db7e --- /dev/null +++ b/qjson/qjson_p.h @@ -0,0 +1,765 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSON_P_H +#define QJSON_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qjsonexport.h" +#include "qjsonobject.h" +#include "qjsonvalue.h" +#include "qjsondocument.h" +#include "qjsonarray.h" + +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +/* + This defines a binary data structure for Json data. The data structure is optimised for fast reading + and minimum allocations. The whole data structure can be mmap'ed and used directly. + + In most cases the binary structure is not as space efficient as a utf8 encoded text representation, but + much faster to access. + + The size requirements are: + + String: + Latin1 data: 2 bytes header + string.length() + Full Unicode: 4 bytes header + 2*(string.length()) + + Values: 4 bytes + size of data (size can be 0 for some data) + bool: 0 bytes + double: 8 bytes (0 if integer with less than 27bits) + string: see above + array: size of array + object: size of object + Array: 12 bytes + 4*length + size of Value data + Object: 12 bytes + 8*length + size of Key Strings + size of Value data + + For an example such as + + { // object: 12 + 5*8 = 52 + "firstName": "John", // key 12, value 8 = 20 + "lastName" : "Smith", // key 12, value 8 = 20 + "age" : 25, // key 8, value 0 = 8 + "address" : // key 12, object below = 140 + { // object: 12 + 4*8 + "streetAddress": "21 2nd Street", // key 16, value 16 + "city" : "New York", // key 8, value 12 + "state" : "NY", // key 8, value 4 + "postalCode" : "10021" // key 12, value 8 + }, // object total: 128 + "phoneNumber": // key: 16, value array below = 172 + [ // array: 12 + 2*4 + values below: 156 + { // object 12 + 2*8 + "type" : "home", // key 8, value 8 + "number": "212 555-1234" // key 8, value 16 + }, // object total: 68 + { // object 12 + 2*8 + "type" : "fax", // key 8, value 8 + "number": "646 555-4567" // key 8, value 16 + } // object total: 68 + ] // array total: 156 + } // great total: 412 bytes + + The uncompressed text file used roughly 500 bytes, so in this case we end up using about + the same space as the text representation. + + Other measurements have shown a slightly bigger binary size than a compact text + representation where all possible whitespace was stripped out. +*/ +namespace QJsonPrivate { + +class Array; +class Object; +class Value; +class Entry; + +template +class q_littleendian +{ +public: + T val; + + q_littleendian &operator =(T i) { val = qToLittleEndian(i); return *this; } + operator T() const { return qFromLittleEndian(val); } + + bool operator ==(T i) { return qFromLittleEndian(val) == i; } + bool operator !=(T i) { return qFromLittleEndian(val) != i; } + bool operator ==(q_littleendian i) { return val == i.val; } + bool operator !=(q_littleendian i) { return val != i.val; } + bool operator <(T i) { return qFromLittleEndian(val) < i; } + bool operator >(T i) { return qFromLittleEndian(val) > i; } + bool operator <=(T i) { return qFromLittleEndian(val) <= i; } + bool operator >=(T i) { return qFromLittleEndian(val) >= i; } + q_littleendian &operator +=(T i) { + val = qToLittleEndian(qFromLittleEndian(val) + i); + return *this; + } +}; + +typedef q_littleendian qle_short; +typedef q_littleendian qle_ushort; +typedef q_littleendian qle_int; +typedef q_littleendian qle_uint; + +template +class qle_bitfield +{ +public: + uint val; + + enum { + mask = ((1u << width) - 1) << pos + }; + + void operator =(uint t) { + uint i = qFromLittleEndian(val); + i &= ~mask; + i |= t << pos; + val = qToLittleEndian(i); + } + operator uint() const { + uint t = qFromLittleEndian(val); + t &= mask; + t >>= pos; + return t; + } + bool operator !() const { + return !operator uint(); + } + + bool operator ==(uint t) { return uint(*this) == t; } + bool operator !=(uint t) { return uint(*this) != t; } + bool operator <(uint t) { return uint(*this) < t; } + bool operator >(uint t) { return uint(*this) > t; } + bool operator <=(uint t) { return uint(*this) <= t; } + bool operator >=(uint t) { return uint(*this) >= t; } + qle_bitfield &operator +=(uint i) { + *this = (uint(*this) + i); + return *this; + } + qle_bitfield &operator -=(uint i) { + *this = (uint(*this) - i); + return *this; + } +}; + +template +class qle_signedbitfield +{ +public: + uint val; + + enum { + mask = ((1u << width) - 1) << pos + }; + + void operator =(int t) { + uint i = qFromLittleEndian(val); + i &= ~mask; + i |= t << pos; + val = qToLittleEndian(i); + } + operator int() const { + uint i = qFromLittleEndian(val); + i <<= 32 - width - pos; + int t = (int) i; + t >>= pos; + return t; + } + bool operator !() const { + return !operator int(); + } + + bool operator ==(int t) { return int(*this) == t; } + bool operator !=(int t) { return int(*this) != t; } + bool operator <(int t) { return int(*this) < t; } + bool operator >(int t) { return int(*this) > t; } + bool operator <=(int t) { return int(*this) <= t; } + bool operator >=(int t) { return int(*this) >= t; } + qle_signedbitfield &operator +=(int i) { + *this = (int(*this) + i); + return *this; + } + qle_signedbitfield &operator -=(int i) { + *this = (int(*this) - i); + return *this; + } +}; + +typedef qle_uint offset; + +// round the size up to the next 4 byte boundary +inline int alignedSize(int size) { return (size + 3) & ~3; } + +static inline bool useCompressed(const QString &s) +{ + if (s.length() >= 0x8000) + return false; + const ushort *uc = (const ushort *)s.constData(); + const ushort *e = uc + s.length(); + while (uc < e) { + if (*uc > 0xff) + return false; + ++uc; + } + return true; +} + +static inline int qStringSize(const QString &string, bool compress) +{ + int l = 2 + string.length(); + if (!compress) + l *= 2; + return alignedSize(l); +} + +// returns INT_MAX if it can't compress it into 28 bits +static inline int compressedNumber(double d) +{ + // this relies on details of how ieee floats are represented + const int exponent_off = 52; + const quint64 fraction_mask = 0x000fffffffffffffull; + const quint64 exponent_mask = 0x7ff0000000000000ull; + + quint64 val; + memcpy (&val, &d, sizeof(double)); + int exp = (int)((val & exponent_mask) >> exponent_off) - 1023; + if (exp < 0 || exp > 25) + return INT_MAX; + + quint64 non_int = val & (fraction_mask >> exp); + if (non_int) + return INT_MAX; + + bool neg = (val >> 63); + val &= fraction_mask; + val |= ((quint64)1 << 52); + int res = (int)(val >> (52 - exp)); + return neg ? -res : res; +} + +class Latin1String; + +class String +{ +public: + String(const char *data) { d = (Data *)data; } + + struct Data { + qle_int length; + qle_ushort utf16[1]; + }; + + Data *d; + + inline String &operator=(const QString &str) + { + d->length = str.length(); +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + for (int i = 0; i < str.length(); ++i) + d->utf16[i] = uc[i]; +#else + memcpy(d->utf16, str.unicode(), str.length()*sizeof(ushort)); +#endif + if (str.length() & 1) + d->utf16[str.length()] = 0; + return *this; + } + + inline bool operator ==(const QString &str) const { + int slen = str.length(); + int l = d->length; + if (slen != l) + return false; + const ushort *s = (const ushort *)str.constData(); + const qle_ushort *a = d->utf16; + const ushort *b = s; + while (l-- && *a == *b) + a++,b++; + return (l == -1); + } + inline bool operator !=(const QString &str) const { + return !operator ==(str); + } + inline bool operator >=(const QString &str) const { + // ### + return toString() >= str; + } + + inline bool operator<(const Latin1String &str) const; + inline bool operator>=(const Latin1String &str) const { return !operator <(str); } + inline bool operator ==(const Latin1String &str) const; + + inline bool operator ==(const String &str) const { + if (d->length != str.d->length) + return false; + return !memcmp(d->utf16, str.d->utf16, d->length*sizeof(ushort)); + } + inline bool operator<(const String &other) const; + inline bool operator >=(const String &other) const { return other < *this; } + + inline QString toString() const { +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + return QString((QChar *)d->utf16, d->length); +#else + int l = d->length; + QString str(l, Qt::Uninitialized); + QChar *ch = str.data(); + for (int i = 0; i < l; ++i) + ch[i] = d->utf16[i]; + return str; +#endif + } + +}; + +class Latin1String +{ +public: + Latin1String(const char *data) { d = (Data *)data; } + + struct Data { + qle_short length; + char latin1[1]; + }; + Data *d; + + inline Latin1String &operator=(const QString &str) + { + d->length = str.length(); + uchar *l = (uchar *)d->latin1; + const ushort *uc = (const ushort *)str.unicode(); + for (int i = 0; i < str.length(); ++i) + *l++ = uc[i]; + while ((quintptr)l & 0x3) + *l++ = 0; + return *this; + } + + inline bool operator ==(const QString &str) const { +// return QLatin1String(d->latin1, d->length) == str; + return QString::fromLatin1(d->latin1, d->length) == str; + } + inline bool operator !=(const QString &str) const { + return !operator ==(str); + } + inline bool operator >=(const QString &str) const { +// return QLatin1String(d->latin1, d->length) >= str; + return QString::fromLatin1(d->latin1, d->length) >= str; + } + + inline bool operator ==(const Latin1String &str) const { + return d->length == str.d->length && !strcmp(d->latin1, str.d->latin1); + } + inline bool operator >=(const Latin1String &str) const { + int l = qMin(d->length, str.d->length); + int val = strncmp(d->latin1, str.d->latin1, l); + if (!val) + val = d->length - str.d->length; + return val >= 0; + } + + inline bool operator ==(const String &str) const { + return (str == *this); + } + inline bool operator >=(const String &str) const { + return (str < *this); + } + + inline QString toString() const { + return QString::fromLatin1(d->latin1, d->length); + } +}; + +inline bool String::operator ==(const Latin1String &str) const +{ + if ((int)d->length != (int)str.d->length) + return false; + const qle_ushort *uc = d->utf16; + const qle_ushort *e = uc + d->length; + const uchar *c = (uchar *)str.d->latin1; + + while (uc < e) { + if (*uc != *c) + return false; + ++uc; + ++c; + } + return true; +} + +inline bool String::operator <(const String &other) const +{ + int alen = d->length; + int blen = other.d->length; + int l = qMin(alen, blen); + qle_ushort *a = d->utf16; + qle_ushort *b = other.d->utf16; + + while (l-- && *a == *b) + a++,b++; + if (l==-1) + return (alen < blen); + return (ushort)*a - (ushort)*b; +} + +inline bool String::operator<(const Latin1String &str) const +{ + const uchar *c = (uchar *) str.d->latin1; + if (!c || *c == 0) + return false; + + const qle_ushort *uc = d->utf16; + const qle_ushort *e = uc + qMin((int)d->length, (int)str.d->length); + + while (uc < e) { + if (*uc != *c) + break; + ++uc; + ++c; + } + return (uc == e ? (int)d->length < (int)str.d->length : (ushort)*uc < *c); + +} + +static inline void copyString(char *dest, const QString &str, bool compress) +{ + if (compress) { + Latin1String string(dest); + string = str; + } else { + String string(dest); + string = str; + } +} + + +/* + Base is the base class for both Object and Array. Both classe work more or less the same way. + The class starts with a header (defined by the struct below), then followed by data (the data for + values in the Array case and Entry's (see below) for objects. + + After the data a table follows (tableOffset points to it) containing Value objects for Arrays, and + offsets from the beginning of the object to Entry's in the case of Object. + + Entry's in the Object's table are lexicographically sorted by key in the table(). This allows the usage + of a binary search over the keys in an Object. + */ +class Base +{ +public: + qle_uint size; + union { + uint _dummy; + qle_bitfield<0, 1> is_object; + qle_bitfield<1, 31> length; + }; + offset tableOffset; + // content follows here + + inline bool isObject() const { return is_object; } + inline bool isArray() const { return !isObject(); } + + inline offset *table() const { return (offset *) (((char *) this) + tableOffset); } + + int reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace); + void removeItems(int pos, int numItems); +}; + +class Object : public Base +{ +public: + Entry *entryAt(int i) const { + return reinterpret_cast(((char *)this) + table()[i]); + } + int indexOf(const QString &key, bool *exists); + + bool isValid() const; +}; + + +class Array : public Base +{ +public: + inline Value at(int i) const; + inline Value &operator [](int i); + + bool isValid() const; +}; + + +class Value +{ +public: + union { + uint _dummy; + qle_bitfield<0, 3> type; + qle_bitfield<3, 1> latinOrIntValue; + qle_bitfield<4, 1> latinKey; + qle_bitfield<5, 27> value; + qle_signedbitfield<5, 27> int_value; + }; + + inline char *data(const Base *b) const { return ((char *)b) + value; } + int usedStorage(const Base *b) const; + + bool toBoolean() const; + double toDouble(const Base *b) const; + QString toString(const Base *b) const; + String asString(const Base *b) const; + Latin1String asLatin1String(const Base *b) const; + Base *base(const Base *b) const; + + bool isValid(const Base *b) const; + + static int requiredStorage(const QJsonValue &v, bool *compressed); + static uint valueToStore(const QJsonValue &v, uint offset); + static void copyData(const QJsonValue &v, char *dest, bool compressed); +}; + +inline Value Array::at(int i) const +{ + return *(Value *) (table() + i); +} + +inline Value &Array::operator [](int i) +{ + return *(Value *) (table() + i); +} + + + +class Entry { +public: + Value value; + // key + // value data follows key + + int size() const { + int s = sizeof(Entry); + if (value.latinKey) + s += sizeof(ushort) + *(ushort *) ((const char *)this + sizeof(Entry)); + else + s += sizeof(uint) + *(int *) ((const char *)this + sizeof(Entry)); + return alignedSize(s); + } + + int usedStorage(Base *b) const { + return size() + value.usedStorage(b); + } + + String shallowKey() const + { + Q_ASSERT(!value.latinKey); + return String((const char *)this + sizeof(Entry)); + } + Latin1String shallowLatin1Key() const + { + Q_ASSERT(value.latinKey); + return Latin1String((const char *)this + sizeof(Entry)); + } + QString key() const + { + if (value.latinKey) { + return shallowLatin1Key().toString(); + } + return shallowKey().toString(); + } + + bool operator ==(const QString &key) const; + inline bool operator !=(const QString &key) const { return !operator ==(key); } + bool operator >=(const QString &key) const; + + bool operator ==(const Entry &other) const; + bool operator >=(const Entry &other) const; +}; + +inline bool operator <(const QString &key, const Entry &e) +{ return e >= key; } + +class Header { +public: + qle_uint tag; // 'qbjs' + qle_uint version; // 1 + Base *root() { return (Base *)(this + 1); } +}; + + +inline bool Value::toBoolean() const +{ + Q_ASSERT(type == QJsonValue::Bool); + return value != 0; +} + +inline double Value::toDouble(const Base *b) const +{ + Q_ASSERT(type == QJsonValue::Double); + if (latinOrIntValue) + return int_value; + + quint64 i = qFromLittleEndian((const uchar *)b + value); + double d; + memcpy(&d, &i, sizeof(double)); + return d; +} + +inline String Value::asString(const Base *b) const +{ + Q_ASSERT(type == QJsonValue::String && !latinOrIntValue); + return String(data(b)); +} + +inline Latin1String Value::asLatin1String(const Base *b) const +{ + Q_ASSERT(type == QJsonValue::String && latinOrIntValue); + return Latin1String(data(b)); +} + +inline QString Value::toString(const Base *b) const +{ + if (latinOrIntValue) + return asLatin1String(b).toString(); + else + return asString(b).toString(); +} + +inline Base *Value::base(const Base *b) const +{ + Q_ASSERT(type == QJsonValue::Array || type == QJsonValue::Object); + return reinterpret_cast(data(b)); +} + +class Data { +public: + enum Validation { + Unchecked, + Validated, + Invalid + }; + + QAtomicInt ref; + int alloc; + union { + char *rawData; + Header *header; + }; + uint compactionCounter : 31; + uint ownsData : 1; + + inline Data(char *raw, int a) + : alloc(a), rawData(raw), compactionCounter(0), ownsData(true) + { + } + inline Data(int reserved, QJsonValue::Type valueType) + : rawData(0), compactionCounter(0), ownsData(true) + { + Q_ASSERT(valueType == QJsonValue::Array || valueType == QJsonValue::Object); + + alloc = sizeof(Header) + sizeof(Base) + reserved + sizeof(offset); + header = (Header *)malloc(alloc); + Q_CHECK_PTR(header); + header->tag = QJsonDocument::BinaryFormatTag; + header->version = 1; + Base *b = header->root(); + b->size = sizeof(Base); + b->is_object = (valueType == QJsonValue::Object); + b->tableOffset = sizeof(Base); + b->length = 0; + } + inline ~Data() + { if (ownsData) free(rawData); } + + uint offsetOf(const void *ptr) const { return (uint)(((char *)ptr - rawData)); } + + QJsonObject toObject(Object *o) const + { + return QJsonObject(const_cast(this), o); + } + + QJsonArray toArray(Array *a) const + { + return QJsonArray(const_cast(this), a); + } + + Data *clone(Base *b, int reserve = 0) + { + int size = sizeof(Header) + b->size + reserve; + char *raw = (char *)malloc(size); + Q_CHECK_PTR(raw); + memcpy(raw + sizeof(Header), b, b->size); + Header *h = (Header *)raw; + h->tag = QJsonDocument::BinaryFormatTag; + h->version = 1; + Data *d = new Data(raw, size); + d->compactionCounter = (b == header->root()) ? compactionCounter : 0; + return d; + } + + void compact(); + bool valid() const; + +private: + Q_DISABLE_COPY(Data) +}; + +} + +QT_END_NAMESPACE + +#endif // QJSON_P_H diff --git a/qjson/qjsonarray.cpp b/qjson/qjsonarray.cpp new file mode 100644 index 0000000..1b6f968 --- /dev/null +++ b/qjson/qjsonarray.cpp @@ -0,0 +1,1017 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qjsonobject.h" +#include "qjsonvalue.h" +#include "qjsonarray.h" +#include +#include + +#include "qjsonwriter_p.h" +#include "qjson_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QJsonArray + \ingroup json + \reentrant + \since 5.0 + + \brief The QJsonArray class encapsulates a JSON array. + + A JSON array is a list of values. The list can be manipulated by inserting and + removing QJsonValue's from the array. + + A QJsonArray can be converted to and from a QVariantList. You can query the + number of entries with size(), insert(), and remove() entries from it + and iterate over its content using the standard C++ iterator pattern. + + QJsonArray is an implicitly shared class and shares the data with the document + it has been created from as long as it is not being modified. + + You can convert the array to and from text based JSON through QJsonDocument. +*/ + +/*! + Creates an empty array. + */ +QJsonArray::QJsonArray() + : d(0), a(0) +{ +} + +/*! + \internal + */ +QJsonArray::QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array) + : d(data), a(array) +{ + d->ref.ref(); +} + +/*! + Deletes the array. + */ +QJsonArray::~QJsonArray() +{ + if (d && !d->ref.deref()) + delete d; +} + +/*! + Creates a copy of \a other. + + Since QJsonArray is implicitly shared, the copy is shallow + as long as the object doesn't get modified. + */ +QJsonArray::QJsonArray(const QJsonArray &other) +{ + d = other.d; + a = other.a; + if (d) + d->ref.ref(); +} + +/*! + Assigns \a other to this array. + */ +QJsonArray &QJsonArray::operator =(const QJsonArray &other) +{ + if (d != other.d) { + if (d && !d->ref.deref()) + delete d; + d = other.d; + if (d) + d->ref.ref(); + } + a = other.a; + + return *this; +} + +/*! + Converts the string list \a list to a QJsonArray. + + The values in \a list will be converted to JSON values. + + \sa toVariantList, QJsonValue::fromString + */ +QJsonArray QJsonArray::fromStringList(const QStringList &list) +{ + QJsonArray array; + for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) + array.append(QJsonValue(*it)); + return array; +} + +/*! + Converts the variant list \a list to a QJsonArray. + + The QVariant values in \a list will be converted to JSON values. + + \sa toVariantList, QJsonValue::fromVariant + */ +QJsonArray QJsonArray::fromVariantList(const QVariantList &list) +{ + QJsonArray array; + for (QVariantList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) + array.append(QJsonValue::fromVariant(*it)); + return array; +} + +/*! + Converts this object to a QVariantList. + + Returns the created map. + */ +QVariantList QJsonArray::toVariantList() const +{ + QVariantList list; + + if (a) { + for (int i = 0; i < (int)a->length; ++i) + list.append(QJsonValue(d, a, a->at(i)).toVariant()); + } + return list; +} + + +/*! + Returns the number of values stored in the array. + */ +int QJsonArray::size() const +{ + if (!d) + return 0; + + return (int)a->length; +} + +/*! + Returns \c true if the object is empty. This is the same as size() == 0. + + \sa size + */ +bool QJsonArray::isEmpty() const +{ + if (!d) + return true; + + return !a->length; +} + +/*! + Returns a QJsonValue representing the value for index \a i. + + The returned QJsonValue is \c Undefined, if \a i is out of bounds. + + */ +QJsonValue QJsonArray::at(int i) const +{ + if (!a || i < 0 || i >= (int)a->length) + return QJsonValue(QJsonValue::Undefined); + + return QJsonValue(d, a, a->at(i)); +} + +/*! + Returns the first value stored in the array. + + Same as \c at(0). + + \sa at + */ +QJsonValue QJsonArray::first() const +{ + return at(0); +} + +/*! + Returns the last value stored in the array. + + Same as \c{at(size() - 1)}. + + \sa at + */ +QJsonValue QJsonArray::last() const +{ + return at(a ? (a->length - 1) : 0); +} + +/*! + Inserts \a value at the beginning of the array. + + This is the same as \c{insert(0, \a value)}. + + \sa append(), insert() + */ +void QJsonArray::prepend(const QJsonValue &value) +{ + insert(0, value); +} + +/*! + Inserts \a value at the end of the array. + + \sa prepend(), insert() + */ +void QJsonArray::append(const QJsonValue &value) +{ + insert(a ? (int)a->length : 0, value); +} + +/*! + Removes the value at index position \a i. \a i must be a valid + index position in the array (i.e., \c{0 <= \a i < size()}). + + \sa insert(), replace() + */ +void QJsonArray::removeAt(int i) +{ + if (!a || i < 0 || i >= (int)a->length) + return; + + detach(); + a->removeItems(i, 1); + ++d->compactionCounter; + if (d->compactionCounter > 32 && d->compactionCounter >= (int)a->length/2) + compact(); +} + +/*! \fn void QJsonArray::removeFirst() + + Removes the first item in the array. Calling this function is + equivalent to calling \c{removeAt(0)}. The array must not be empty. If + the array can be empty, call isEmpty() before calling this + function. + + \sa removeAt(), takeFirst() +*/ + +/*! \fn void QJsonArray::removeLast() + + Removes the last item in the array. Calling this function is + equivalent to calling \c{removeAt(size() - 1)}. The array must not be + empty. If the array can be empty, call isEmpty() before calling + this function. + + \sa removeAt(), takeLast() +*/ + +/*! + Removes the item at index position \a i and returns it. \a i must + be a valid index position in the array (i.e., \c{0 <= \a i < size()}). + + If you don't use the return value, removeAt() is more efficient. + + \sa removeAt() + */ +QJsonValue QJsonArray::takeAt(int i) +{ + if (!a || i < 0 || i >= (int)a->length) + return QJsonValue(QJsonValue::Undefined); + + detach(); + + QJsonValue v(d, a, a->at(i)); + v.detach(); + + removeAt(i); + + return v; +} + +/*! + Inserts \a value at index position \a i in the array. If \a i + is \c 0, the value is prepended to the array. If \a i is size(), the + value is appended to the array. + + \sa append(), prepend(), replace(), removeAt() + */ +void QJsonArray::insert(int i, const QJsonValue &value) +{ + Q_ASSERT (i >= 0 && i <= (a ? (int)a->length : 0)); + + bool compressed; + int valueSize = QJsonPrivate::Value::requiredStorage(value, &compressed); + + detach(valueSize + sizeof(QJsonPrivate::Value)); + + if (!a->length) + a->tableOffset = sizeof(QJsonPrivate::Array); + + int valueOffset = a->reserveSpace(valueSize, i, 1, false); + QJsonPrivate::Value &v = (*a)[i]; + v.type = (value.t == QJsonValue::Undefined ? QJsonValue::Null : value.t); + v.latinOrIntValue = compressed; + v.latinKey = false; + v.value = QJsonPrivate::Value::valueToStore(value, valueOffset); + if (valueSize) + QJsonPrivate::Value::copyData(value, (char *)a + valueOffset, compressed); +} + +/*! + Replaces the item at index position \a i with \a value. \a i must + be a valid index position in the array (i.e., \c{0 <= \a i < size()}). + + \sa operator[](), removeAt() + */ +void QJsonArray::replace(int i, const QJsonValue &value) +{ + Q_ASSERT (a && i >= 0 && i < (int)(a->length)); + + bool compressed; + int valueSize = QJsonPrivate::Value::requiredStorage(value, &compressed); + + detach(valueSize); + + if (!a->length) + a->tableOffset = sizeof(QJsonPrivate::Array); + + int valueOffset = a->reserveSpace(valueSize, i, 1, true); + QJsonPrivate::Value &v = (*a)[i]; + v.type = (value.t == QJsonValue::Undefined ? QJsonValue::Null : value.t); + v.latinOrIntValue = compressed; + v.latinKey = false; + v.value = QJsonPrivate::Value::valueToStore(value, valueOffset); + if (valueSize) + QJsonPrivate::Value::copyData(value, (char *)a + valueOffset, compressed); + + ++d->compactionCounter; + if (d->compactionCounter > 32 && d->compactionCounter >= (int)a->length/2) + compact(); +} + +/*! + Returns \c true if the array contains an occurrence of \a value, otherwise \c false. + + \sa count() + */ +bool QJsonArray::contains(const QJsonValue &value) const +{ + for (int i = 0; i < size(); i++) { + if (at(i) == value) + return true; + } + return false; +} + +/*! + Returns the value at index position \a i as a modifiable reference. + \a i must be a valid index position in the array (i.e., \c{0 <= \a i < + size()}). + + The return value is of type QJsonValueRef, a helper class for QJsonArray + and QJsonObject. When you get an object of type QJsonValueRef, you can + use it as if it were a reference to a QJsonValue. If you assign to it, + the assignment will apply to the character in the QJsonArray of QJsonObject + from which you got the reference. + + \sa at(), value() + */ +QJsonValueRef QJsonArray::operator [](int i) +{ + Q_ASSERT(a && i >= 0 && i < (int)a->length); + return QJsonValueRef(this, i); +} + +/*! + \overload + + Same as at(). + */ +QJsonValue QJsonArray::operator[](int i) const +{ + return at(i); +} + +/*! + Returns \c true if this array is equal to \a other. + */ +bool QJsonArray::operator==(const QJsonArray &other) const +{ + if (a == other.a) + return true; + + if (!a) + return !other.a->length; + if (!other.a) + return !a->length; + if (a->length != other.a->length) + return false; + + for (int i = 0; i < (int)a->length; ++i) { + if (QJsonValue(d, a, a->at(i)) != QJsonValue(other.d, other.a, other.a->at(i))) + return false; + } + return true; +} + +/*! + Returns \c true if this array is not equal to \a other. + */ +bool QJsonArray::operator!=(const QJsonArray &other) const +{ + return !(*this == other); +} + +/*! \fn QJsonArray::iterator QJsonArray::begin() + + Returns an \l{STL-style iterator} pointing to the first item in + the array. + + \sa constBegin(), end() +*/ + +/*! \fn QJsonArray::const_iterator QJsonArray::begin() const + + \overload +*/ + +/*! \fn QJsonArray::const_iterator QJsonArray::constBegin() const + + Returns a const \l{STL-style iterator} pointing to the first item + in the array. + + \sa begin(), constEnd() +*/ + +/*! \fn QJsonArray::iterator QJsonArray::end() + + Returns an \l{STL-style iterator} pointing to the imaginary item + after the last item in the array. + + \sa begin(), constEnd() +*/ + +/*! \fn const_iterator QJsonArray::end() const + + \overload +*/ + +/*! \fn QJsonArray::const_iterator QJsonArray::constEnd() const + + Returns a const \l{STL-style iterator} pointing to the imaginary + item after the last item in the array. + + \sa constBegin(), end() +*/ + +/*! \fn void QJsonArray::push_back(const T &value) + + This function is provided for STL compatibility. It is equivalent + to \l{QJsonArray::append()}{append(\a value)}. +*/ + +/*! \fn void QJsonArray::push_front(const T &value) + + This function is provided for STL compatibility. It is equivalent + to \l{QJsonArray::prepend()}{prepend(\a value)}. +*/ + +/*! \fn void QJsonArray::pop_front() + + This function is provided for STL compatibility. It is equivalent + to removeFirst(). The array must not be empty. If the array can be + empty, call isEmpty() before calling this function. +*/ + +/*! \fn void QJsonArray::pop_back() + + This function is provided for STL compatibility. It is equivalent + to removeLast(). The array must not be empty. If the array can be + empty, call isEmpty() before calling this function. +*/ + +/*! \fn bool QJsonArray::empty() const + + This function is provided for STL compatibility. It is equivalent + to isEmpty() and returns \c true if the array is empty. +*/ + +/*! \class QJsonArray::iterator + \brief The QJsonArray::iterator class provides an STL-style non-const iterator for QJsonArray. + + QJsonArray::iterator allows you to iterate over a QJsonArray + and to modify the array item associated with the + iterator. If you want to iterate over a const QJsonArray, use + QJsonArray::const_iterator instead. It is generally a good practice to + use QJsonArray::const_iterator on a non-const QJsonArray as well, unless + you need to change the QJsonArray through the iterator. Const + iterators are slightly faster and improves code readability. + + The default QJsonArray::iterator constructor creates an uninitialized + iterator. You must initialize it using a QJsonArray function like + QJsonArray::begin(), QJsonArray::end(), or QJsonArray::insert() before you can + start iterating. + + Most QJsonArray functions accept an integer index rather than an + iterator. For that reason, iterators are rarely useful in + connection with QJsonArray. One place where STL-style iterators do + make sense is as arguments to \l{generic algorithms}. + + Multiple iterators can be used on the same array. However, be + aware that any non-const function call performed on the QJsonArray + will render all existing iterators undefined. + + \sa QJsonArray::const_iterator +*/ + +/*! \typedef QJsonArray::iterator::iterator_category + + A synonym for \i {std::random_access_iterator_tag} indicating + this iterator is a random access iterator. +*/ + +/*! \typedef QJsonArray::iterator::difference_type + + \internal +*/ + +/*! \typedef QJsonArray::iterator::value_type + + \internal +*/ + +/*! \typedef QJsonArray::iterator::reference + + \internal +*/ + +/*! \fn QJsonArray::iterator::iterator() + + Constructs an uninitialized iterator. + + Functions like operator*() and operator++() should not be called + on an uninitialized iterator. Use operator=() to assign a value + to it before using it. + + \sa QJsonArray::begin() QJsonArray::end() +*/ + +/*! \fn QJsonArray::iterator::iterator(const iterator &other) + + Constructs a copy of \a other. +*/ + +/*! \fn QJsonValueRef QJsonArray::iterator::operator*() const + + Returns a modifiable reference to the current item. + + You can change the value of an item by using operator*() on the + left side of an assignment. + + The return value is of type QJsonValueRef, a helper class for QJsonArray + and QJsonObject. When you get an object of type QJsonValueRef, you can + use it as if it were a reference to a QJsonValue. If you assign to it, + the assignment will apply to the character in the QJsonArray of QJsonObject + from which you got the reference. +*/ + +/*! \fn QJsonValueRef QJsonArray::iterator::operator[](int j) const + + Returns a modifiable reference to the item at position \c{*this + j}. + + This function is provided to make QJsonArray iterators behave like C++ + pointers. + + The return value is of type QJsonValueRef, a helper class for QJsonArray + and QJsonObject. When you get an object of type QJsonValueRef, you can + use it as if it were a reference to a QJsonValue. If you assign to it, + the assignment will apply to the character in the QJsonArray of QJsonObject + from which you got the reference. + + \sa operator+() +*/ + +/*! + \fn bool QJsonArray::iterator::operator==(const iterator &other) const + \fn bool QJsonArray::iterator::operator==(const const_iterator &other) const + + Returns \c true if \a other points to the same item as this + iterator; otherwise returns \c false. + + \sa operator!=() +*/ + +/*! + \fn bool QJsonArray::iterator::operator!=(const iterator &other) const + \fn bool QJsonArray::iterator::operator!=(const const_iterator &other) const + + Returns \c true if \a other points to a different item than this + iterator; otherwise returns \c false. + + \sa operator==() +*/ + +/*! + \fn bool QJsonArray::iterator::operator<(const iterator& other) const + \fn bool QJsonArray::iterator::operator<(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is less than + the item pointed to by the \a other iterator. +*/ + +/*! + \fn bool QJsonArray::iterator::operator<=(const iterator& other) const + \fn bool QJsonArray::iterator::operator<=(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is less than + or equal to the item pointed to by the \a other iterator. +*/ + +/*! + \fn bool QJsonArray::iterator::operator>(const iterator& other) const + \fn bool QJsonArray::iterator::operator>(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is greater + than the item pointed to by the \a other iterator. +*/ + +/*! + \fn bool QJsonArray::iterator::operator>=(const iterator& other) const + \fn bool QJsonArray::iterator::operator>=(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is greater + than or equal to the item pointed to by the \a other iterator. +*/ + +/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator++() + + The prefix ++ operator, \c{++it}, advances the iterator to the + next item in the array and returns an iterator to the new current + item. + + Calling this function on QJsonArray::end() leads to undefined results. + + \sa operator--() +*/ + +/*! \fn QJsonArray::iterator QJsonArray::iterator::operator++(int) + + \overload + + The postfix ++ operator, \c{it++}, advances the iterator to the + next item in the array and returns an iterator to the previously + current item. +*/ + +/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator--() + + The prefix -- operator, \c{--it}, makes the preceding item + current and returns an iterator to the new current item. + + Calling this function on QJsonArray::begin() leads to undefined results. + + \sa operator++() +*/ + +/*! \fn QJsonArray::iterator QJsonArray::iterator::operator--(int) + + \overload + + The postfix -- operator, \c{it--}, makes the preceding item + current and returns an iterator to the previously current item. +*/ + +/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator+=(int j) + + Advances the iterator by \a j items. If \a j is negative, the + iterator goes backward. + + \sa operator-=(), operator+() +*/ + +/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator-=(int j) + + Makes the iterator go back by \a j items. If \a j is negative, + the iterator goes forward. + + \sa operator+=(), operator-() +*/ + +/*! \fn QJsonArray::iterator QJsonArray::iterator::operator+(int j) const + + Returns an iterator to the item at \a j positions forward from + this iterator. If \a j is negative, the iterator goes backward. + + \sa operator-(), operator+=() +*/ + +/*! \fn QJsonArray::iterator QJsonArray::iterator::operator-(int j) const + + Returns an iterator to the item at \a j positions backward from + this iterator. If \a j is negative, the iterator goes forward. + + \sa operator+(), operator-=() +*/ + +/*! \fn int QJsonArray::iterator::operator-(iterator other) const + + Returns the number of items between the item pointed to by \a + other and the item pointed to by this iterator. +*/ + +/*! \class QJsonArray::const_iterator + \brief The QJsonArray::const_iterator class provides an STL-style const iterator for QJsonArray. + + QJsonArray::const_iterator allows you to iterate over a + QJsonArray. If you want to modify the QJsonArray as + you iterate over it, use QJsonArray::iterator instead. It is generally a + good practice to use QJsonArray::const_iterator on a non-const QJsonArray + as well, unless you need to change the QJsonArray through the + iterator. Const iterators are slightly faster and improves + code readability. + + The default QJsonArray::const_iterator constructor creates an + uninitialized iterator. You must initialize it using a QJsonArray + function like QJsonArray::constBegin(), QJsonArray::constEnd(), or + QJsonArray::insert() before you can start iterating. + + Most QJsonArray functions accept an integer index rather than an + iterator. For that reason, iterators are rarely useful in + connection with QJsonArray. One place where STL-style iterators do + make sense is as arguments to \l{generic algorithms}. + + Multiple iterators can be used on the same array. However, be + aware that any non-const function call performed on the QJsonArray + will render all existing iterators undefined. + + \sa QJsonArray::iterator, QJsonArrayIterator +*/ + +/*! \fn QJsonArray::const_iterator::const_iterator() + + Constructs an uninitialized iterator. + + Functions like operator*() and operator++() should not be called + on an uninitialized iterator. Use operator=() to assign a value + to it before using it. + + \sa QJsonArray::constBegin() QJsonArray::constEnd() +*/ + +/*! \typedef QJsonArray::const_iterator::iterator_category + + A synonym for \i {std::random_access_iterator_tag} indicating + this iterator is a random access iterator. +*/ + +/*! \typedef QJsonArray::const_iterator::difference_type + + \internal +*/ + +/*! \typedef QJsonArray::const_iterator::value_type + + \internal +*/ + +/*! \typedef QJsonArray::const_iterator::reference + + \internal +*/ + +/*! \fn QJsonArray::const_iterator::const_iterator(const const_iterator &other) + + Constructs a copy of \a other. +*/ + +/*! \fn QJsonArray::const_iterator::const_iterator(const iterator &other) + + Constructs a copy of \a other. +*/ + +/*! \fn QJsonValue QJsonArray::const_iterator::operator*() const + + Returns the current item. +*/ + +/*! \fn QJsonValue QJsonArray::const_iterator::operator[](int j) const + + Returns the item at position \c{*this + j}. + + This function is provided to make QJsonArray iterators behave like C++ + pointers. + + \sa operator+() +*/ + +/*! \fn bool QJsonArray::const_iterator::operator==(const const_iterator &other) const + + Returns \c true if \a other points to the same item as this + iterator; otherwise returns \c false. + + \sa operator!=() +*/ + +/*! \fn bool QJsonArray::const_iterator::operator!=(const const_iterator &other) const + + Returns \c true if \a other points to a different item than this + iterator; otherwise returns \c false. + + \sa operator==() +*/ + +/*! + \fn bool QJsonArray::const_iterator::operator<(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is less than + the item pointed to by the \a other iterator. +*/ + +/*! + \fn bool QJsonArray::const_iterator::operator<=(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is less than + or equal to the item pointed to by the \a other iterator. +*/ + +/*! + \fn bool QJsonArray::const_iterator::operator>(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is greater + than the item pointed to by the \a other iterator. +*/ + +/*! + \fn bool QJsonArray::const_iterator::operator>=(const const_iterator& other) const + + Returns \c true if the item pointed to by this iterator is greater + than or equal to the item pointed to by the \a other iterator. +*/ + +/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator++() + + The prefix ++ operator, \c{++it}, advances the iterator to the + next item in the array and returns an iterator to the new current + item. + + Calling this function on QJsonArray::end() leads to undefined results. + + \sa operator--() +*/ + +/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator++(int) + + \overload + + The postfix ++ operator, \c{it++}, advances the iterator to the + next item in the array and returns an iterator to the previously + current item. +*/ + +/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator--() + + The prefix -- operator, \c{--it}, makes the preceding item + current and returns an iterator to the new current item. + + Calling this function on QJsonArray::begin() leads to undefined results. + + \sa operator++() +*/ + +/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator--(int) + + \overload + + The postfix -- operator, \c{it--}, makes the preceding item + current and returns an iterator to the previously current item. +*/ + +/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator+=(int j) + + Advances the iterator by \a j items. If \a j is negative, the + iterator goes backward. + + \sa operator-=(), operator+() +*/ + +/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator-=(int j) + + Makes the iterator go back by \a j items. If \a j is negative, + the iterator goes forward. + + \sa operator+=(), operator-() +*/ + +/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator+(int j) const + + Returns an iterator to the item at \a j positions forward from + this iterator. If \a j is negative, the iterator goes backward. + + \sa operator-(), operator+=() +*/ + +/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator-(int j) const + + Returns an iterator to the item at \a j positions backward from + this iterator. If \a j is negative, the iterator goes forward. + + \sa operator+(), operator-=() +*/ + +/*! \fn int QJsonArray::const_iterator::operator-(const_iterator other) const + + Returns the number of items between the item pointed to by \a + other and the item pointed to by this iterator. +*/ + + +/*! + \internal + */ +void QJsonArray::detach(uint reserve) +{ + if (!d) { + d = new QJsonPrivate::Data(reserve, QJsonValue::Array); + a = static_cast(d->header->root()); + d->ref.ref(); + return; + } + /* + if (reserve == 0 && d->ref.load() == 1) + return; + */ + if (reserve == 0 && int(d->ref) == 1) + return; + + QJsonPrivate::Data *x = d->clone(a, reserve); + x->ref.ref(); + if (!d->ref.deref()) + delete d; + d = x; + a = static_cast(d->header->root()); +} + +/*! + \internal + */ +void QJsonArray::compact() +{ + if (!d || !d->compactionCounter) + return; + + detach(); + d->compact(); + a = static_cast(d->header->root()); +} + + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QJsonArray &a) +{ + if (!a.a) { + dbg << "QJsonArray()"; + return dbg; + } + QByteArray json; + QJsonPrivate::Writer::arrayToJson(a.a, json, 0, true); + dbg.nospace() << "QJsonArray(" + << json.constData() // print as utf-8 string without extra quotation marks + << ")"; + return dbg.space(); +} +#endif + +QT_END_NAMESPACE + diff --git a/qjson/qjsonarray.h b/qjson/qjsonarray.h new file mode 100644 index 0000000..9ed64e4 --- /dev/null +++ b/qjson/qjsonarray.h @@ -0,0 +1,224 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSONARRAY_H +#define QJSONARRAY_H + +#include "qjsonvalue.h" +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QDebug; +class QStringList; +template class QList; +typedef QList QVariantList; + +class Q_JSONRPC_EXPORT QJsonArray +{ +public: + QJsonArray(); + ~QJsonArray(); + + QJsonArray(const QJsonArray &other); + QJsonArray &operator =(const QJsonArray &other); + + static QJsonArray fromStringList(const QStringList &list); + static QJsonArray fromVariantList(const QVariantList &list); + QVariantList toVariantList() const; + + int size() const; + inline int count() const { return size(); } + + bool isEmpty() const; + QJsonValue at(int i) const; + QJsonValue first() const; + QJsonValue last() const; + + void prepend(const QJsonValue &value); + void append(const QJsonValue &value); + void removeAt(int i); + QJsonValue takeAt(int i); + inline void removeFirst() { removeAt(0); } + inline void removeLast() { removeAt(size() - 1); } + + void insert(int i, const QJsonValue &value); + void replace(int i, const QJsonValue &value); + + bool contains(const QJsonValue &element) const; + QJsonValueRef operator[](int i); + QJsonValue operator[](int i) const; + + bool operator==(const QJsonArray &other) const; + bool operator!=(const QJsonArray &other) const; + + class const_iterator; + + class iterator { + public: + QJsonArray *a; + int i; + typedef std::random_access_iterator_tag iterator_category; + typedef int difference_type; + typedef QJsonValue value_type; + //typedef T *pointer; + typedef QJsonValueRef reference; + + inline iterator() : a(0), i(0) { } + explicit inline iterator(QJsonArray *array, int index) : a(array), i(index) { } + + inline QJsonValueRef operator*() const { return QJsonValueRef(a, i); } + //inline T *operator->() const { return &concrete(i)->value; } + inline QJsonValueRef operator[](int j) const { return QJsonValueRef(a, i + j); } + + inline bool operator==(const iterator &o) const { return i == o.i; } + inline bool operator!=(const iterator &o) const { return i != o.i; } + inline bool operator<(const iterator& other) const { return i < other.i; } + inline bool operator<=(const iterator& other) const { return i <= other.i; } + inline bool operator>(const iterator& other) const { return i > other.i; } + inline bool operator>=(const iterator& other) const { return i >= other.i; } + inline bool operator==(const const_iterator &o) const { return i == o.i; } + inline bool operator!=(const const_iterator &o) const { return i != o.i; } + inline bool operator<(const const_iterator& other) const { return i < other.i; } + inline bool operator<=(const const_iterator& other) const { return i <= other.i; } + inline bool operator>(const const_iterator& other) const { return i > other.i; } + inline bool operator>=(const const_iterator& other) const { return i >= other.i; } + inline iterator &operator++() { ++i; return *this; } + inline iterator operator++(int) { iterator n = *this; ++i; return n; } + inline iterator &operator--() { i--; return *this; } + inline iterator operator--(int) { iterator n = *this; i--; return n; } + inline iterator &operator+=(int j) { i+=j; return *this; } + inline iterator &operator-=(int j) { i-=j; return *this; } + inline iterator operator+(int j) const { return iterator(a, i+j); } + inline iterator operator-(int j) const { return iterator(a, i-j); } + inline int operator-(iterator j) const { return i - j.i; } + }; + friend class iterator; + + class const_iterator { + public: + const QJsonArray *a; + int i; + typedef std::random_access_iterator_tag iterator_category; + typedef qptrdiff difference_type; + typedef QJsonValue value_type; + //typedef const T *pointer; + typedef QJsonValue reference; + + inline const_iterator() : a(0), i(0) { } + explicit inline const_iterator(const QJsonArray *array, int index) : a(array), i(index) { } + inline const_iterator(const const_iterator &o) : a(o.a), i(o.i) {} + inline const_iterator(const iterator &o) : a(o.a), i(o.i) {} + + inline QJsonValue operator*() const { return a->at(i); } + //inline T *operator->() const { return &concrete(i)->value; } + inline QJsonValue operator[](int j) const { return a->at(i+j); } + inline bool operator==(const const_iterator &o) const { return i == o.i; } + inline bool operator!=(const const_iterator &o) const { return i != o.i; } + inline bool operator<(const const_iterator& other) const { return i < other.i; } + inline bool operator<=(const const_iterator& other) const { return i <= other.i; } + inline bool operator>(const const_iterator& other) const { return i > other.i; } + inline bool operator>=(const const_iterator& other) const { return i >= other.i; } + inline const_iterator &operator++() { ++i; return *this; } + inline const_iterator operator++(int) { const_iterator n = *this; ++i; return n; } + inline const_iterator &operator--() { i--; return *this; } + inline const_iterator operator--(int) { const_iterator n = *this; i--; return n; } + inline const_iterator &operator+=(int j) { i+=j; return *this; } + inline const_iterator &operator-=(int j) { i-=j; return *this; } + inline const_iterator operator+(int j) const { return const_iterator(a, i+j); } + inline const_iterator operator-(int j) const { return const_iterator(a, i-j); } + inline int operator-(const_iterator j) const { return i - j.i; } + }; + friend class const_iterator; + + // stl style + inline iterator begin() { detach(); return iterator(this, 0); } + inline const_iterator begin() const { return const_iterator(this, 0); } + inline const_iterator constBegin() const { return const_iterator(this, 0); } + inline iterator end() { detach(); return iterator(this, size()); } + inline const_iterator end() const { return const_iterator(this, size()); } + inline const_iterator constEnd() const { return const_iterator(this, size()); } + iterator insert(iterator before, const QJsonValue &value) { insert(before.i, value); return before; } + iterator erase(iterator pos) { removeAt(pos.i); return pos; } + + // more Qt + typedef iterator Iterator; + typedef const_iterator ConstIterator; + + // stl compatibility + inline void push_back(const QJsonValue &t) { append(t); } + inline void push_front(const QJsonValue &t) { prepend(t); } + inline void pop_front() { removeFirst(); } + inline void pop_back() { removeLast(); } + inline bool empty() const { return isEmpty(); } + typedef int size_type; + typedef QJsonValue value_type; + typedef value_type *pointer; + typedef const value_type *const_pointer; + typedef QJsonValueRef reference; + typedef QJsonValue const_reference; + typedef int difference_type; + +private: + friend class QJsonPrivate::Data; + friend class QJsonValue; + friend class QJsonDocument; + friend Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonArray &); + + QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array); + void compact(); + void detach(uint reserve = 0); + + QJsonPrivate::Data *d; + QJsonPrivate::Array *a; +}; + +#ifndef QT_NO_DEBUG_STREAM +Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonArray &); +#endif + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QJSONARRAY_H diff --git a/qjson/qjsondocument.cpp b/qjson/qjsondocument.cpp new file mode 100644 index 0000000..28f63e4 --- /dev/null +++ b/qjson/qjsondocument.cpp @@ -0,0 +1,537 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qjsondocument.h" +#include "qjsonobject.h" +#include "qjsonvalue.h" +#include "qjsonarray.h" +#include +#include +#include +#include "qjsonwriter_p.h" +#include "qjsonparser_p.h" +#include "qjson_p.h" + +QT_BEGIN_NAMESPACE + +/*! \class QJsonDocument + \ingroup json + \reentrant + \since 5.0 + + \brief The QJsonDocument class provides a way to read and write JSON documents. + + QJsonDocument is a class that wraps a complete JSON document and can read and + write this document both from a UTF-8 encoded text based representation as well + as Qt's own binary format. + + A JSON document can be converted from its text-based representation to a QJsonDocument + using QJsonDocument::fromJson(). toJson() converts it back to text. The parser is very + fast and efficient and converts the JSON to the binary representation used by Qt. + + Validity of the parsed document can be queried with !isNull() + + A document can be queried as to whether it contains an array or an object using isArray() + and isObject(). The array or object contained in the document can be retrieved using + array() or object() and then read or manipulated. + + A document can also be created from a stored binary representation using fromBinaryData() or + fromRawData(). +*/ + +/*! + * Constructs an empty and invalid document. + */ +QJsonDocument::QJsonDocument() + : d(0) +{ +} + +/*! + * Creates a QJsonDocument from \a object. + */ +QJsonDocument::QJsonDocument(const QJsonObject &object) + : d(0) +{ + setObject(object); +} + +/*! + * Constructs a QJsonDocument from \a array. + */ +QJsonDocument::QJsonDocument(const QJsonArray &array) + : d(0) +{ + setArray(array); +} + +/*! \internal + */ +QJsonDocument::QJsonDocument(QJsonPrivate::Data *data) + : d(data) +{ + Q_ASSERT(d); + d->ref.ref(); +} + +/*! + Deletes the document. + + Binary data set with fromRawData is not freed. + */ +QJsonDocument::~QJsonDocument() +{ + if (d && !d->ref.deref()) + delete d; +} + +/*! + * Creates a copy of the \a other document. + */ +QJsonDocument::QJsonDocument(const QJsonDocument &other) +{ + d = other.d; + if (d) + d->ref.ref(); +} + +/*! + * Assigns the \a other document to this QJsonDocument. + * Returns a reference to this object. + */ +QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other) +{ + if (d != other.d) { + if (d && !d->ref.deref()) + delete d; + d = other.d; + if (d) + d->ref.ref(); + } + + return *this; +} + +/*! \enum QJsonDocument::DataValidation + + This value is used to tell QJsonDocument whether to validate the binary data + when converting to a QJsonDocument using fromBinaryData() or fromRawData(). + + \value Validate Validate the data before using it. This is the default. + \value BypassValidation Bypasses data validation. Only use if you received the + data from a trusted place and know it's valid, as using of invalid data can crash + the application. + */ + +/*! + Creates a QJsonDocument that uses the first \a size bytes from + \a data. It assumes \a data contains a binary encoded JSON document. + The created document does not take ownership of \a data and the caller + has to guarantee that \a data will not be deleted or modified as long as + any QJsonDocument, QJsonObject or QJsonArray still references the data. + + \a data has to be aligned to a 4 byte boundary. + + \a validation decides whether the data is checked for validity before being used. + By default the data is validated. If the \a data is not valid, the method returns + a null document. + + Returns a QJsonDocument representing the data. + + \sa rawData fromBinaryData isNull DataValidation + */ +QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation) +{ + if (quintptr(data) & 3) { + qWarning() <<"QJsonDocument::fromRawData: data has to have 4 byte alignment"; + return QJsonDocument(); + } + + QJsonPrivate::Data *d = new QJsonPrivate::Data((char *)data, size); + d->ownsData = false; + + if (validation != BypassValidation && !d->valid()) { + delete d; + return QJsonDocument(); + } + + return QJsonDocument(d); +} + +/*! + Returns the raw binary representation of the data + \a size will contain the size of the \a data. + + This method is useful to e.g. stream the JSON document + in it's binary form to a file. + */ +const char *QJsonDocument::rawData(int *size) const +{ + if (!d) { + *size = 0; + return 0; + } + *size = d->alloc; + return d->rawData; +} + +/*! + Creates a QJsonDocument from \a data. + + \a validation decides whether the data is checked for validity before being used. + By default the data is validated. If the \a data is not valid, the method returns + a null document. + + \sa toBinaryData fromRawData isNull DataValidation + */ +QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation) +{ + QJsonPrivate::Header h; + memcpy(&h, data.constData(), sizeof(QJsonPrivate::Header)); + QJsonPrivate::Base root; + memcpy(&root, data.constData() + sizeof(QJsonPrivate::Header), sizeof(QJsonPrivate::Base)); + + // do basic checks here, so we don't try to allocate more memory than we can. + if (data.size() < (int)(sizeof(QJsonPrivate::Header) + sizeof(QJsonPrivate::Base)) || + h.tag != QJsonDocument::BinaryFormatTag || h.version != 1u || + sizeof(QJsonPrivate::Header) + root.size > (uint)data.size()) + return QJsonDocument(); + + char *raw = (char *)malloc(data.size()); + if (!raw) + return QJsonDocument(); + + memcpy(raw, data.constData(), data.size()); + QJsonPrivate::Data *d = new QJsonPrivate::Data(raw, data.size()); + + if (validation != BypassValidation && !d->valid()) { + delete d; + return QJsonDocument(); + } + + return QJsonDocument(d); +} + +/*! + Creates a QJsonDocument from the QVariant \a variant. + + If the \a variant contains any other type than a QVariant::Map, + QVariant::List or QVariant::StringList, the returned document + document is invalid. + + \sa toVariant + */ +QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) +{ + QJsonDocument doc; + if (variant.type() == QVariant::Map) { + doc.setObject(QJsonObject::fromVariantMap(variant.toMap())); + } else if (variant.type() == QVariant::List) { + doc.setArray(QJsonArray::fromVariantList(variant.toList())); + } else if (variant.type() == QVariant::StringList) { + doc.setArray(QJsonArray::fromStringList(variant.toStringList())); + } + return doc; +} + +/*! + Returns a QVariant representing the Json document. + + The returned variant will be a QVariantList if the document is + a QJsonArray and a QVariantMap if the document is a QJsonObject. + + \sa fromVariant, QJsonValue::toVariant() + */ +QVariant QJsonDocument::toVariant() const +{ + if (!d) + return QVariant(); + + if (d->header->root()->isArray()) + return QJsonArray(d, static_cast(d->header->root())).toVariantList(); + else + return QJsonObject(d, static_cast(d->header->root())).toVariantMap(); +} + +/*! + Converts the QJsonDocument to a UTF-8 encoded JSON document. + + \sa fromJson + */ +QByteArray QJsonDocument::toJson() const +{ + if (!d) + return QByteArray(); + + QByteArray json; + + if (d->header->root()->isArray()) + QJsonPrivate::Writer::arrayToJson(static_cast(d->header->root()), json, 0); + else + QJsonPrivate::Writer::objectToJson(static_cast(d->header->root()), json, 0); + + return json; +} + +/*! + Parses a UTF-8 encoded JSON document and creates a QJsonDocument + from it. isNull() will return \c false if no error was encountered during + parsing. + + \sa toJson + */ +QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error) +{ + QJsonPrivate::Parser parser(json.constData(), json.length()); + return parser.parse(error); +} + +/*! + Returns true if the document doesn't contain any data. + */ +bool QJsonDocument::isEmpty() const +{ + if (!d) + return true; + + return false; +} + +/*! + Returns a binary representation of the document. + + The binary representation is also the native format used internally in Qt, + and is very efficient and fast to convert to and from. + + The binary format can be stored on disk and interchanged with other applications + or computers. fromBinaryData() can be used to convert it back into a + JSON document. + + \sa fromBinaryData + */ +QByteArray QJsonDocument::toBinaryData() const +{ + if (!d || !d->rawData) + return QByteArray(); + + return QByteArray(d->rawData, d->header->root()->size + sizeof(QJsonPrivate::Header)); +} + +/*! + Returns true if the document contains an array. + + \sa array() isObject() + */ +bool QJsonDocument::isArray() const +{ + if (!d) + return false; + + QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData; + return h->root()->isArray(); +} + +/*! + Returns true if the document contains an object. + + \sa object() isArray() + */ +bool QJsonDocument::isObject() const +{ + if (!d) + return false; + + QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData; + return h->root()->isObject(); +} + +/*! + Returns the QJsonObject contained in the document. + + Returns an empty object if the document contains an + array. + + \sa isObject array setObject + */ +QJsonObject QJsonDocument::object() const +{ + if (d) { + QJsonPrivate::Base *b = d->header->root(); + if (b->isObject()) + return QJsonObject(d, static_cast(b)); + } + return QJsonObject(); +} + +/*! + Returns the QJsonArray contained in the document. + + Returns an empty array if the document contains an + object. + + \sa isArray object setArray + */ +QJsonArray QJsonDocument::array() const +{ + if (d) { + QJsonPrivate::Base *b = d->header->root(); + if (b->isArray()) + return QJsonArray(d, static_cast(b)); + } + return QJsonArray(); +} + +/*! + Sets \a object as the main object of this document. + + \sa setArray object + */ +void QJsonDocument::setObject(const QJsonObject &object) +{ + if (d && !d->ref.deref()) + delete d; + + d = object.d; + + if (!d) { + d = new QJsonPrivate::Data(0, QJsonValue::Object); + } else if (d->compactionCounter || object.o != d->header->root()) { + QJsonObject o(object); + if (d->compactionCounter) + o.compact(); + else + o.detach(); + d = o.d; + d->ref.ref(); + return; + } + d->ref.ref(); +} + +/*! + Sets \a array as the main object of this document. + + \sa setObject array + */ +void QJsonDocument::setArray(const QJsonArray &array) +{ + if (d && !d->ref.deref()) + delete d; + + d = array.d; + + if (!d) { + d = new QJsonPrivate::Data(0, QJsonValue::Array); + } else if (d->compactionCounter || array.a != d->header->root()) { + QJsonArray a(array); + if (d->compactionCounter) + a.compact(); + else + a.detach(); + d = a.d; + d->ref.ref(); + return; + } + d->ref.ref(); +} + +/*! + Returns \c true if the \a other document is equal to this document. + */ +bool QJsonDocument::operator==(const QJsonDocument &other) const +{ + if (d == other.d) + return true; + + if (!d || !other.d) + return false; + + if (d->header->root()->isArray() != other.d->header->root()->isArray()) + return false; + + if (d->header->root()->isObject()) + return QJsonObject(d, static_cast(d->header->root())) + == QJsonObject(other.d, static_cast(other.d->header->root())); + else + return QJsonArray(d, static_cast(d->header->root())) + == QJsonArray(other.d, static_cast(other.d->header->root())); +} + +/*! + \fn bool QJsonDocument::operator!=(const QJsonDocument &other) const + + returns \c true if \a other is not equal to this document + */ + +/*! + returns true if this document is null. + + Null documents are documents created through the default constructor. + + Documents created from UTF-8 encoded text or the binary format are + validated during parsing. If validation fails, the returned document + will also be null. + */ +bool QJsonDocument::isNull() const +{ + return (d == 0); +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QJsonDocument &o) +{ + if (!o.d) { + dbg << "QJsonDocument()"; + return dbg; + } + QByteArray json; + if (o.d->header->root()->isArray()) + QJsonPrivate::Writer::arrayToJson(static_cast(o.d->header->root()), json, 0, true); + else + QJsonPrivate::Writer::objectToJson(static_cast(o.d->header->root()), json, 0, true); + dbg.nospace() << "QJsonDocument(" + << json.constData() // print as utf-8 string without extra quotation marks + << ")"; + return dbg.space(); +} +#endif + +QT_END_NAMESPACE diff --git a/qjson/qjsondocument.h b/qjson/qjsondocument.h new file mode 100644 index 0000000..cc14490 --- /dev/null +++ b/qjson/qjsondocument.h @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSONDOCUMENT_H +#define QJSONDOCUMENT_H + +#include "qjsonvalue.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QDebug; + +namespace QJsonPrivate { + class Parser; +} + +struct Q_JSONRPC_EXPORT QJsonParseError +{ + enum ParseError { + NoError = 0, + UnterminatedObject, + MissingNameSeparator, + UnterminatedArray, + MissingValueSeparator, + IllegalValue, + EndOfNumber, + IllegalNumber, + StringEscapeSequence, + StringUTF8Scan, + EndOfString, + MissingObject + }; + + int offset; + ParseError error; +}; + +class Q_JSONRPC_EXPORT QJsonDocument +{ +public: +#ifdef Q_LITTLE_ENDIAN + static const uint BinaryFormatTag = ('q') | ('b' << 8) | ('j' << 16) | ('s' << 24); +#else + static const uint BinaryFormatTag = ('q' << 24) | ('b' << 16) | ('j' << 8) | ('s'); +#endif + + QJsonDocument(); + explicit QJsonDocument(const QJsonObject &object); + explicit QJsonDocument(const QJsonArray &array); + ~QJsonDocument(); + + QJsonDocument(const QJsonDocument &other); + QJsonDocument &operator =(const QJsonDocument &other); + + enum DataValidation { + Validate, + BypassValidation + }; + + static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate); + const char *rawData(int *size) const; + + static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate); + QByteArray toBinaryData() const; + + static QJsonDocument fromVariant(const QVariant &variant); + QVariant toVariant() const; + + static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); + QByteArray toJson() const; + + bool isEmpty() const; + bool isArray() const; + bool isObject() const; + + QJsonObject object() const; + QJsonArray array() const; + + void setObject(const QJsonObject &object); + void setArray(const QJsonArray &array); + + bool operator==(const QJsonDocument &other) const; + bool operator!=(const QJsonDocument &other) const { return !(*this == other); } + + bool isNull() const; + +private: + friend class QJsonValue; + friend class QJsonPrivate::Data; + friend class QJsonPrivate::Parser; + friend Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); + + QJsonDocument(QJsonPrivate::Data *data); + + QJsonPrivate::Data *d; +}; + +#ifndef QT_NO_DEBUG_STREAM +Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); +#endif + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QJSONDOCUMENT_H diff --git a/qjson/qjsonexport.h b/qjson/qjsonexport.h new file mode 100644 index 0000000..f7e3c42 --- /dev/null +++ b/qjson/qjsonexport.h @@ -0,0 +1,16 @@ + +#ifndef QJSONEXPORT_H +#define QJSONEXPORT_H + + +#ifdef Q_JSONRPC_DLL +# ifdef Q_BUILD_JSONRPC // build qjsonrpc Dll +# define Q_JSONRPC_EXPORT Q_DECL_EXPORT +# else // use qjsonrpc as Dll +# define Q_JSONRPC_EXPORT Q_DECL_IMPORT +# endif +#else +# define Q_JSONRPC_EXPORT +#endif + +#endif diff --git a/qjson/qjsonobject.cpp b/qjson/qjsonobject.cpp new file mode 100644 index 0000000..a96195d --- /dev/null +++ b/qjson/qjsonobject.cpp @@ -0,0 +1,1022 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qjsonobject.h" +#include "qjsonvalue.h" +#include "qjsonarray.h" +#include +#include +#include +#include "qjson_p.h" +#include "qjsonwriter_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QJsonObject + \ingroup json + \reentrant + \since 5.0 + + \brief The QJsonObject class encapsulates a JSON object. + + A JSON object is a list of key value pairs, where the keys are unique strings + and the values are represented by a QJsonValue. + + A QJsonObject can be converted to and from a QVariantMap. You can query the + number of (key, value) pairs with size(), insert(), and remove() entries from it + and iterate over its content using the standard C++ iterator pattern. + + QJsonObject is an implicitly shared class, and shares the data with the document + it has been created from as long as it is not being modified. + + You can convert the array to and from text based JSON through QJsonDocument. +*/ + +/*! + Constructs an empty JSON object + + \sa isEmpty + */ +QJsonObject::QJsonObject() + : d(0), o(0) +{ +} + +/*! + \internal + */ +QJsonObject::QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object) + : d(data), o(object) +{ + Q_ASSERT(d); + Q_ASSERT(o); + d->ref.ref(); +} + + +/*! + Destroys the object. + */ +QJsonObject::~QJsonObject() +{ + if (d && !d->ref.deref()) + delete d; +} + +/*! + Creates a copy of \a other. + + Since QJsonObject is implicitly shared, the copy is shallow + as long as the object does not get modified. + */ +QJsonObject::QJsonObject(const QJsonObject &other) +{ + d = other.d; + o = other.o; + if (d) + d->ref.ref(); +} + +/*! + Assigns \a other to this object. + */ +QJsonObject &QJsonObject::operator =(const QJsonObject &other) +{ + if (d != other.d) { + if (d && !d->ref.deref()) + delete d; + d = other.d; + if (d) + d->ref.ref(); + } + o = other.o; + + return *this; +} + +/*! + Converts the variant map \a map to a QJsonObject. + + The keys in \a map will be used as the keys in the JSON object, + and the QVariant values will be converted to JSON values. + + \sa toVariantMap, QJsonValue::fromVariant + */ +QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map) +{ + // ### this is implemented the trivial way, not the most efficient way + + QJsonObject object; + for (QVariantMap::const_iterator it = map.constBegin(); it != map.constEnd(); ++it) + object.insert(it.key(), QJsonValue::fromVariant(it.value())); + return object; +} + +/*! + Converts this object to a QVariantMap. + + Returns the created map. + */ +QVariantMap QJsonObject::toVariantMap() const +{ + QVariantMap map; + if (o) { + for (uint i = 0; i < o->length; ++i) { + QJsonPrivate::Entry *e = o->entryAt(i); + map.insert(e->key(), QJsonValue(d, o, e->value).toVariant()); + } + } + return map; +} + +/*! + Returns a list of all keys in this object. + */ +QStringList QJsonObject::keys() const +{ + if (!d) + return QStringList(); + + QStringList keys; + + for (uint i = 0; i < o->length; ++i) { + QJsonPrivate::Entry *e = o->entryAt(i); + keys.append(e->key()); + } + + return keys; +} + +/*! + Returns the the number of (key, value) pairs stored in the object. + */ +int QJsonObject::size() const +{ + if (!d) + return 0; + + return o->length; +} + +/*! + Returns \c true if the object is empty. This is the same as size() == 0. + + \sa size + */ +bool QJsonObject::isEmpty() const +{ + if (!d) + return true; + + return !o->length; +} + +/*! + Returns a QJsonValue representing the value for the key \a key. + + The returned QJsonValue is \c Undefined, if the key does not exist. + + \sa setValue, QJsonValue, QJsonValue::isUndefined + */ +QJsonValue QJsonObject::value(const QString &key) const +{ + if (!d) + return QJsonValue(); + + bool keyExists; + int i = o->indexOf(key, &keyExists); + if (!keyExists) + return QJsonValue(QJsonValue::Undefined); + return QJsonValue(d, o, o->entryAt(i)->value); +} + +/*! + Returns a QJsonValue representing the value for the key \a key. + + This does the same as value(). + + The returned QJsonValue is \c Undefined, if the key does not exist. + + \sa value, setValue, QJsonValue, QJsonValue::isUndefined + */ +QJsonValue QJsonObject::operator [](const QString &key) const +{ + return value(key); +} + +/*! + Returns a reference to the value for \a key. + + The return value is of type QJsonValueRef, a helper class for QJsonArray + and QJsonObject. When you get an object of type QJsonValueRef, you can + use it as if it were a reference to a QJsonValue. If you assign to it, + the assignment will apply to the character in the QJsonArray of QJsonObject + from which you got the reference. + + \sa setValue, value + */ +QJsonValueRef QJsonObject::operator [](const QString &key) +{ + // ### somewhat inefficient, as we lookup the key twice if it doesn't yet exist + bool keyExists = false; + int index = o ? o->indexOf(key, &keyExists) : -1; + if (!keyExists) { + iterator i = insert(key, QJsonValue()); + index = i.i; + } + return QJsonValueRef(this, index); +} + +/*! + Inserts a new item with the key \a key and a value of \a value. + + If there is already an item with the key \a key then that item's value + is replaced with \a value. + + Returns an iterator pointing to the inserted item. + + If the value is QJsonValue::Undefined, it will cause the key to get removed + from the object. The returned iterator will then point to end() + + \sa remove, take, QJsonObject::iterator, end + */ +QJsonObject::iterator QJsonObject::insert(const QString &key, const QJsonValue &value) +{ + if (value.t == QJsonValue::Undefined) { + remove(key); + return end(); + } + + bool latinOrIntValue; + int valueSize = QJsonPrivate::Value::requiredStorage(value, &latinOrIntValue); + + bool latinKey = QJsonPrivate::useCompressed(key); + int valueOffset = sizeof(QJsonPrivate::Entry) + QJsonPrivate::qStringSize(key, latinKey); + int requiredSize = valueOffset + valueSize; + + detach(requiredSize + sizeof(QJsonPrivate::offset)); // offset for the new index entry + + if (!o->length) + o->tableOffset = sizeof(QJsonPrivate::Object); + + bool keyExists = false; + int pos = o->indexOf(key, &keyExists); + if (keyExists) + ++d->compactionCounter; + + o->reserveSpace(requiredSize, pos, 1, keyExists); + + QJsonPrivate::Entry *e = o->entryAt(pos); + e->value.type = value.t; + e->value.latinKey = latinKey; + e->value.latinOrIntValue = latinOrIntValue; + e->value.value = QJsonPrivate::Value::valueToStore(value, (char *)e - (char *)o + valueOffset); + QJsonPrivate::copyString((char *)(e + 1), key, latinKey); + if (valueSize) + QJsonPrivate::Value::copyData(value, (char *)e + valueOffset, latinOrIntValue); + + return iterator(this, pos); +} + +/*! + Removes \a key from the object. + + \sa insert, take + */ +void QJsonObject::remove(const QString &key) +{ + if (!d) + return; + + bool keyExists; + int index = o->indexOf(key, &keyExists); + if (!keyExists) + return; + + detach(); + o->removeItems(index, 1); + ++d->compactionCounter; + if (d->compactionCounter > 32 && d->compactionCounter >= (int)o->length/2) + compact(); +} + +/*! + Removes \a key from the object. + + Returns a QJsonValue containing the value referenced by \a key. + If \a key was not contained in the object, the returned QJsonValue + is Undefined. + + \sa insert, remove, QJsonValue + */ +QJsonValue QJsonObject::take(const QString &key) +{ + if (!o) + return QJsonValue(QJsonValue::Undefined); + + bool keyExists; + int index = o->indexOf(key, &keyExists); + if (!keyExists) + return QJsonValue(QJsonValue::Undefined); + + QJsonPrivate::Entry *e = o->entryAt(index); + o->removeItems(index, 1); + ++d->compactionCounter; + if (d->compactionCounter > 32 && d->compactionCounter >= (int)o->length/2) + compact(); + + return QJsonValue(d, o, e->value); +} + +/*! + Returns \c true if the object contains key \a key. + + \sa insert, remove, take + */ +bool QJsonObject::contains(const QString &key) const +{ + if (!o) + return false; + + bool keyExists; + o->indexOf(key, &keyExists); + return keyExists; +} + +/*! + Returns \c true if \a other is equal to this object + */ +bool QJsonObject::operator==(const QJsonObject &other) const +{ + if (o == other.o) + return true; + + if (!o) + return !other.o->length; + if (!other.o) + return !o->length; + if (o->length != other.o->length) + return false; + + for (uint i = 0; i < o->length; ++i) { + QJsonPrivate::Entry *e = o->entryAt(i); + QJsonValue v(d, o, e->value); + if (other.value(e->key()) != v) + return false; + } + + return true; +} + +/*! + Returns \c true if \a other is not equal to this object + */ +bool QJsonObject::operator!=(const QJsonObject &other) const +{ + return !(*this == other); +} + +/*! + Removes the (key, value) pair pointed to by the iterator \a it + from the map, and returns an iterator to the next item in the + map. + + \sa remove() + */ +QJsonObject::iterator QJsonObject::erase(QJsonObject::iterator it) +{ +// Q_ASSERT(d && d->ref.load() == 1); + Q_ASSERT(d && int(d->ref) == 1); + if (it.o != this || it.i < 0 || it.i >= (int)o->length) + return iterator(this, o->length); + + int index = it.i; + + o->removeItems(index, 1); + ++d->compactionCounter; + if (d->compactionCounter > 32 && d->compactionCounter >= (int)o->length/2) + compact(); + + // iterator hasn't changed + return it; +} + +/*! + Returns an iterator pointing to the item with key \a key in the + map. + + If the map contains no item with key \a key, the function + returns end(). + */ +QJsonObject::iterator QJsonObject::find(const QString &key) +{ + bool keyExists = false; + int index = o ? o->indexOf(key, &keyExists) : 0; + if (!keyExists) + return end(); + return iterator(this, index); +} + +/*! \fn QJsonObject::const_iterator QJsonObject::find(const Key &key) const + + \overload +*/ + +/*! + Returns an const iterator pointing to the item with key \a key in the + map. + + If the map contains no item with key \a key, the function + returns constEnd(). + */ +QJsonObject::const_iterator QJsonObject::constFind(const QString &key) const +{ + bool keyExists = false; + int index = o ? o->indexOf(key, &keyExists) : 0; + if (!keyExists) + return end(); + return const_iterator(this, index); +} + +/*! \fn int QJsonObject::count() const + + \overload + + Same as size(). +*/ + +/*! \fn int QJsonObject::length() const + + \overload + + Same as size(). +*/ + +/*! \fn QJsonObject::iterator QJsonObject::begin() + + Returns an \l{STL-style iterator} pointing to the first item in + the object. + + \sa constBegin(), end() +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::begin() const + + \overload +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::constBegin() const + + Returns a const \l{STL-style iterator} pointing to the first item + in the object. + + \sa begin(), constEnd() +*/ + +/*! \fn QJsonObject::iterator QJsonObject::end() + + Returns an \l{STL-style iterator} pointing to the imaginary item + after the last item in the object. + + \sa begin(), constEnd() +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::end() const + + \overload +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::constEnd() const + + Returns a const \l{STL-style iterator} pointing to the imaginary + item after the last item in the object. + + \sa constBegin(), end() +*/ + +/*! + \fn bool QJsonObject::empty() const + + This function is provided for STL compatibility. It is equivalent + to isEmpty(), returning \c true if the object is empty; otherwise + returning \c false. +*/ + +/*! \class QJsonObject::iterator + \brief The QJsonObject::iterator class provides an STL-style non-const iterator for QJsonObject. + + QJsonObject::iterator allows you to iterate over a QJsonObject + and to modify the value (but not the key) stored under + a particular key. If you want to iterate over a const QJsonObject, you + should use QJsonObject::const_iterator. It is generally good practice to + use QJsonObject::const_iterator on a non-const QJsonObject as well, unless you + need to change the QJsonObject through the iterator. Const iterators are + slightly faster, and improves code readability. + + The default QJsonObject::iterator constructor creates an uninitialized + iterator. You must initialize it using a QJsonObject function like + QJsonObject::begin(), QJsonObject::end(), or QJsonObject::find() before you can + start iterating. + + Multiple iterators can be used on the same object. Existing iterators will however + become dangling once the object gets modified. + + \sa QJsonObject::const_iterator +*/ + +/*! \typedef QJsonObject::iterator::difference_type + + \internal +*/ + +/*! \typedef QJsonObject::iterator::iterator_category + + A synonym for \i {std::bidirectional_iterator_tag} indicating + this iterator is a bidirectional iterator. +*/ + +/*! \typedef QJsonObject::iterator::reference + + \internal +*/ + +/*! \typedef QJsonObject::iterator::value_type + + \internal +*/ + +/*! \fn QJsonObject::iterator::iterator() + + Constructs an uninitialized iterator. + + Functions like key(), value(), and operator++() must not be + called on an uninitialized iterator. Use operator=() to assign a + value to it before using it. + + \sa QJsonObject::begin() QJsonObject::end() +*/ + +/*! \fn QString QJsonObject::iterator::key() const + + Returns the current item's key. + + There is no direct way of changing an item's key through an + iterator, although it can be done by calling QJsonObject::erase() + followed by QJsonObject::insert(). + + \sa value() +*/ + +/*! \fn QJsonValueRef QJsonObject::iterator::value() const + + Returns a modifiable reference to the current item's value. + + You can change the value of an item by using value() on + the left side of an assignment. + + The return value is of type QJsonValueRef, a helper class for QJsonArray + and QJsonObject. When you get an object of type QJsonValueRef, you can + use it as if it were a reference to a QJsonValue. If you assign to it, + the assignment will apply to the character in the QJsonArray of QJsonObject + from which you got the reference. + + \sa key(), operator*() +*/ + +/*! \fn QJsonValueRef QJsonObject::iterator::operator*() const + + Returns a modifiable reference to the current item's value. + + Same as value(). + + The return value is of type QJsonValueRef, a helper class for QJsonArray + and QJsonObject. When you get an object of type QJsonValueRef, you can + use it as if it were a reference to a QJsonValue. If you assign to it, + the assignment will apply to the character in the QJsonArray of QJsonObject + from which you got the reference. + + \sa key() +*/ + +/*! + \fn bool QJsonObject::iterator::operator==(const iterator &other) const + \fn bool QJsonObject::iterator::operator==(const const_iterator &other) const + + Returns \c true if \a other points to the same item as this + iterator; otherwise returns \c false. + + \sa operator!=() +*/ + +/*! + \fn bool QJsonObject::iterator::operator!=(const iterator &other) const + \fn bool QJsonObject::iterator::operator!=(const const_iterator &other) const + + Returns \c true if \a other points to a different item than this + iterator; otherwise returns \c false. + + \sa operator==() +*/ + +/*! \fn QJsonObject::iterator QJsonObject::iterator::operator++() + + The prefix ++ operator, \c{++i}, advances the iterator to the + next item in the object and returns an iterator to the new current + item. + + Calling this function on QJsonObject::end() leads to undefined results. + + \sa operator--() +*/ + +/*! \fn QJsonObject::iterator QJsonObject::iterator::operator++(int) + + \overload + + The postfix ++ operator, \c{i++}, advances the iterator to the + next item in the object and returns an iterator to the previously + current item. +*/ + +/*! \fn QJsonObject::iterator QJsonObject::iterator::operator--() + + The prefix -- operator, \c{--i}, makes the preceding item + current and returns an iterator pointing to the new current item. + + Calling this function on QJsonObject::begin() leads to undefined + results. + + \sa operator++() +*/ + +/*! \fn QJsonObject::iterator QJsonObject::iterator::operator--(int) + + \overload + + The postfix -- operator, \c{i--}, makes the preceding item + current and returns an iterator pointing to the previously + current item. +*/ + +/*! \fn QJsonObject::iterator QJsonObject::iterator::operator+(int j) const + + Returns an iterator to the item at \a j positions forward from + this iterator. If \a j is negative, the iterator goes backward. + + \sa operator-() + +*/ + +/*! \fn QJsonObject::iterator QJsonObject::iterator::operator-(int j) const + + Returns an iterator to the item at \a j positions backward from + this iterator. If \a j is negative, the iterator goes forward. + + \sa operator+() +*/ + +/*! \fn QJsonObject::iterator &QJsonObject::iterator::operator+=(int j) + + Advances the iterator by \a j items. If \a j is negative, the + iterator goes backward. + + \sa operator-=(), operator+() +*/ + +/*! \fn QJsonObject::iterator &QJsonObject::iterator::operator-=(int j) + + Makes the iterator go back by \a j items. If \a j is negative, + the iterator goes forward. + + \sa operator+=(), operator-() +*/ + +/*! \class QJsonObject::const_iterator + \brief The QJsonObject::const_iterator class provides an STL-style const iterator for QJsonObject. + + QJsonObject::const_iterator allows you to iterate over a QJsonObject. + If you want to modify the QJsonObject as you iterate + over it, you must use QJsonObject::iterator instead. It is generally + good practice to use QJsonObject::const_iterator on a non-const QJsonObject as + well, unless you need to change the QJsonObject through the iterator. + Const iterators are slightly faster and improves code + readability. + + The default QJsonObject::const_iterator constructor creates an + uninitialized iterator. You must initialize it using a QJsonObject + function like QJsonObject::constBegin(), QJsonObject::constEnd(), or + QJsonObject::find() before you can start iterating. + + Multiple iterators can be used on the same object. Existing iterators + will however become dangling if the object gets modified. + + \sa QJsonObject::iterator, QJsonObjectIterator +*/ + +/*! \typedef QJsonObject::const_iterator::difference_type + + \internal +*/ + +/*! \typedef QJsonObject::const_iterator::iterator_category + + A synonym for \i {std::bidirectional_iterator_tag} indicating + this iterator is a bidirectional iterator. +*/ + +/*! \typedef QJsonObject::const_iterator::reference + + \internal +*/ + +/*! \typedef QJsonObject::const_iterator::value_type + + \internal +*/ + +/*! \fn QJsonObject::const_iterator::const_iterator() + + Constructs an uninitialized iterator. + + Functions like key(), value(), and operator++() must not be + called on an uninitialized iterator. Use operator=() to assign a + value to it before using it. + + \sa QJsonObject::constBegin() QJsonObject::constEnd() +*/ + +/*! \fn QJsonObject::const_iterator::const_iterator(const iterator &other) + + Constructs a copy of \a other. +*/ + +/*! \fn QString QJsonObject::const_iterator::key() const + + Returns the current item's key. + + \sa value() +*/ + +/*! \fn QJsonValue QJsonObject::const_iterator::value() const + + Returns the current item's value. + + \sa key(), operator*() +*/ + +/*! \fn QJsonValue QJsonObject::const_iterator::operator*() const + + Returns the current item's value. + + Same as value(). + + \sa key() +*/ + +/*! \fn bool QJsonObject::const_iterator::operator==(const const_iterator &other) const + + Returns \c true if \a other points to the same item as this + iterator; otherwise returns \c false. + + \sa operator!=() +*/ + +/*! \fn bool QJsonObject::const_iterator::operator!=(const const_iterator &other) const + + Returns \c true if \a other points to a different item than this + iterator; otherwise returns \c false. + + \sa operator==() +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator++() + + The prefix ++ operator, \c{++i}, advances the iterator to the + next item in the object and returns an iterator to the new current + item. + + Calling this function on QJsonObject::end() leads to undefined results. + + \sa operator--() +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator++(int) + + \overload + + The postfix ++ operator, \c{i++}, advances the iterator to the + next item in the object and returns an iterator to the previously + current item. +*/ + +/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator--() + + The prefix -- operator, \c{--i}, makes the preceding item + current and returns an iterator pointing to the new current item. + + Calling this function on QJsonObject::begin() leads to undefined + results. + + \sa operator++() +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator--(int) + + \overload + + The postfix -- operator, \c{i--}, makes the preceding item + current and returns an iterator pointing to the previously + current item. +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator+(int j) const + + Returns an iterator to the item at \a j positions forward from + this iterator. If \a j is negative, the iterator goes backward. + + This operation can be slow for large \a j values. + + \sa operator-() +*/ + +/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator-(int j) const + + Returns an iterator to the item at \a j positions backward from + this iterator. If \a j is negative, the iterator goes forward. + + This operation can be slow for large \a j values. + + \sa operator+() +*/ + +/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator+=(int j) + + Advances the iterator by \a j items. If \a j is negative, the + iterator goes backward. + + This operation can be slow for large \a j values. + + \sa operator-=(), operator+() +*/ + +/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator-=(int j) + + Makes the iterator go back by \a j items. If \a j is negative, + the iterator goes forward. + + This operation can be slow for large \a j values. + + \sa operator+=(), operator-() +*/ + + +/*! + \internal + */ +void QJsonObject::detach(uint reserve) +{ + if (!d) { + d = new QJsonPrivate::Data(reserve, QJsonValue::Object); + o = static_cast(d->header->root()); + d->ref.ref(); + return; + } + /* + if (reserve == 0 && d->ref.load() == 1) + return; + */ + if (reserve == 0 && int(d->ref) == 1) + return; + + QJsonPrivate::Data *x = d->clone(o, reserve); + x->ref.ref(); + if (!d->ref.deref()) + delete d; + d = x; + o = static_cast(d->header->root()); +} + +/*! + \internal + */ +void QJsonObject::compact() +{ + if (!d || !d->compactionCounter) + return; + + detach(); + d->compact(); + o = static_cast(d->header->root()); +} + +/*! + \internal + */ +QString QJsonObject::keyAt(int i) const +{ + Q_ASSERT(o && i >= 0 && i < (int)o->length); + + QJsonPrivate::Entry *e = o->entryAt(i); + return e->key(); +} + +/*! + \internal + */ +QJsonValue QJsonObject::valueAt(int i) const +{ + if (!o || i < 0 || i >= (int)o->length) + return QJsonValue(QJsonValue::Undefined); + + QJsonPrivate::Entry *e = o->entryAt(i); + return QJsonValue(d, o, e->value); +} + +/*! + \internal + */ +void QJsonObject::setValueAt(int i, const QJsonValue &val) +{ + Q_ASSERT(o && i >= 0 && i < (int)o->length); + + QJsonPrivate::Entry *e = o->entryAt(i); + insert(e->key(), val); +} + +/*! \typedef QJsonObject::Iterator + + Qt-style synonym for QJsonObject::iterator. +*/ + +/*! \typedef QJsonObject::ConstIterator + + Qt-style synonym for QJsonObject::const_iterator. +*/ + + +/*! \class QJsonObject::iterator + \ingroup json + \reentrant + \since 5.0 + + \brief The QJsonDocument::iterator class provides a way to iterate over q QJsonObject + + + */ + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QJsonObject &o) +{ + if (!o.o) { + dbg << "QJsonObject()"; + return dbg; + } + QByteArray json; + QJsonPrivate::Writer::objectToJson(o.o, json, 0, true); + dbg.nospace() << "QJsonObject(" + << json.constData() // print as utf-8 string without extra quotation marks + << ")"; + return dbg.space(); +} +#endif + +QT_END_NAMESPACE diff --git a/qjson/qjsonobject.h b/qjson/qjsonobject.h new file mode 100644 index 0000000..c52e617 --- /dev/null +++ b/qjson/qjsonobject.h @@ -0,0 +1,219 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSONOBJECT_H +#define QJSONOBJECT_H + +#include "qjsonvalue.h" +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QDebug; +template class QMap; +typedef QMap QVariantMap; + +class Q_JSONRPC_EXPORT QJsonObject +{ +public: + QJsonObject(); + ~QJsonObject(); + + QJsonObject(const QJsonObject &other); + QJsonObject &operator =(const QJsonObject &other); + + static QJsonObject fromVariantMap(const QVariantMap &map); + QVariantMap toVariantMap() const; + + QStringList keys() const; + int size() const; + inline int count() const { return size(); } + inline int length() const { return size(); } + bool isEmpty() const; + + QJsonValue value(const QString &key) const; + QJsonValue operator[] (const QString &key) const; + QJsonValueRef operator[] (const QString &key); + + void remove(const QString &key); + QJsonValue take(const QString &key); + bool contains(const QString &key) const; + + bool operator==(const QJsonObject &other) const; + bool operator!=(const QJsonObject &other) const; + + class const_iterator; + + class iterator + { + friend class const_iterator; + friend class QJsonObject; + QJsonObject *o; + int i; + + public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef int difference_type; + typedef QJsonValue value_type; +// typedef T *pointer; + typedef QJsonValueRef reference; + + inline iterator() : o(0), i(0) {} + inline iterator(QJsonObject *obj, int index) : o(obj), i(index) {} + + inline QString key() const { return o->keyAt(i); } + inline QJsonValueRef value() const { return QJsonValueRef(o, i); } + inline QJsonValueRef operator*() const { return QJsonValueRef(o, i); } + //inline T *operator->() const { return &concrete(i)->value; } + inline bool operator==(const iterator &other) const { return i == other.i; } + inline bool operator!=(const iterator &other) const { return i != other.i; } + + inline iterator &operator++() { ++i; return *this; } + inline iterator operator++(int) { iterator r = *this; ++i; return r; } + inline iterator &operator--() { --i; return *this; } + inline iterator operator--(int) { iterator r = *this; --i; return r; } + inline iterator operator+(int j) const + { iterator r = *this; r.i += j; return r; } + inline iterator operator-(int j) const { return operator+(-j); } + inline iterator &operator+=(int j) { i += j; return *this; } + inline iterator &operator-=(int j) { i -= j; return *this; } + + public: + inline bool operator==(const const_iterator &other) const { return i == other.i; } + inline bool operator!=(const const_iterator &other) const { return i != other.i; } + }; + friend class iterator; + + class const_iterator + { + friend class iterator; + const QJsonObject *o; + int i; + + public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef int difference_type; + typedef QJsonValue value_type; + typedef QJsonValue reference; + + inline const_iterator() : o(0), i(0) {} + inline const_iterator(const QJsonObject *obj, int index) + : o(obj), i(index) {} + inline const_iterator(const iterator &other) + : o(other.o), i(other.i) {} + + inline QString key() const { return o->keyAt(i); } + inline QJsonValue value() const { return o->valueAt(i); } + inline QJsonValue operator*() const { return o->valueAt(i); } + //inline const T *operator->() const { return &concrete(i)->value; } + inline bool operator==(const const_iterator &other) const { return i == other.i; } + inline bool operator!=(const const_iterator &other) const { return i != other.i; } + + inline const_iterator &operator++() { ++i; return *this; } + inline const_iterator operator++(int) { const_iterator r = *this; ++i; return r; } + inline const_iterator &operator--() { --i; return *this; } + inline const_iterator operator--(int) { const_iterator r = *this; --i; return r; } + inline const_iterator operator+(int j) const + { const_iterator r = *this; r.i += j; return r; } + inline const_iterator operator-(int j) const { return operator+(-j); } + inline const_iterator &operator+=(int j) { i += j; return *this; } + inline const_iterator &operator-=(int j) { i -= j; return *this; } + + inline bool operator==(const iterator &other) const { return i == other.i; } + inline bool operator!=(const iterator &other) const { return i != other.i; } + }; + friend class const_iterator; + + // STL style + inline iterator begin() { detach(); return iterator(this, 0); } + inline const_iterator begin() const { return const_iterator(this, 0); } + inline const_iterator constBegin() const { return const_iterator(this, 0); } + inline iterator end() { detach(); return iterator(this, size()); } + inline const_iterator end() const { return const_iterator(this, size()); } + inline const_iterator constEnd() const { return const_iterator(this, size()); } + iterator erase(iterator it); + + // more Qt + typedef iterator Iterator; + typedef const_iterator ConstIterator; + iterator find(const QString &key); + const_iterator find(const QString &key) const { return constFind(key); } + const_iterator constFind(const QString &key) const; + iterator insert(const QString &key, const QJsonValue &value); + + // STL compatibility + typedef QJsonValue mapped_type; + typedef QString key_type; + typedef int size_type; + + inline bool empty() const { return isEmpty(); } + +private: + friend class QJsonPrivate::Data; + friend class QJsonValue; + friend class QJsonDocument; + friend class QJsonValueRef; + + friend Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonObject &); + + QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object); + void detach(uint reserve = 0); + void compact(); + + QString keyAt(int i) const; + QJsonValue valueAt(int i) const; + void setValueAt(int i, const QJsonValue &val); + + QJsonPrivate::Data *d; + QJsonPrivate::Object *o; +}; + +#ifndef QT_NO_DEBUG_STREAM +Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonObject &); +#endif + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QJSONOBJECT_H diff --git a/qjson/qjsonparser.cpp b/qjson/qjsonparser.cpp new file mode 100644 index 0000000..b1e6a5a --- /dev/null +++ b/qjson/qjsonparser.cpp @@ -0,0 +1,801 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qjsonparser_p.h" +#include "qjson_p.h" + +//#define PARSER_DEBUG +#ifdef PARSER_DEBUG +static int indent = 0; +#define BEGIN qDebug() << QByteArray(4*indent++, ' ').constData() << "pos=" << current +#define END --indent +#define DEBUG qDebug() << QByteArray(4*indent, ' ').constData() +#else +#define BEGIN if (1) ; else qDebug() +#define END do {} while (0) +#define DEBUG if (1) ; else qDebug() +#endif + +QT_BEGIN_NAMESPACE + +using namespace QJsonPrivate; + +Parser::Parser(const char *json, int length) + : head(json), json(json), data(0), dataLength(0), current(0), lastError(QJsonParseError::NoError) +{ + end = json + length; +} + + + +/* + +begin-array = ws %x5B ws ; [ left square bracket + +begin-object = ws %x7B ws ; { left curly bracket + +end-array = ws %x5D ws ; ] right square bracket + +end-object = ws %x7D ws ; } right curly bracket + +name-separator = ws %x3A ws ; : colon + +value-separator = ws %x2C ws ; , comma + +Insignificant whitespace is allowed before or after any of the six +structural characters. + +ws = *( + %x20 / ; Space + %x09 / ; Horizontal tab + %x0A / ; Line feed or New line + %x0D ; Carriage return + ) + +*/ + +enum { + Space = 0x20, + Tab = 0x09, + LineFeed = 0x0a, + Return = 0x0d, + BeginArray = 0x5b, + BeginObject = 0x7b, + EndArray = 0x5d, + EndObject = 0x7d, + NameSeparator = 0x3a, + ValueSeparator = 0x2c, + Quote = 0x22 +}; + + + +bool Parser::eatSpace() +{ + while (json < end) { + if (*json > Space) + break; + if (*json != Space && + *json != Tab && + *json != LineFeed && + *json != Return) + break; + ++json; + } + return (json < end); +} + +char Parser::nextToken() +{ + if (!eatSpace()) + return 0; + char token = *json++; + switch (token) { + case BeginArray: + case BeginObject: + case NameSeparator: + case ValueSeparator: + case EndArray: + case EndObject: + eatSpace(); + case Quote: + break; + default: + token = 0; + break; + } + return token; +} + +/* + JSON-text = object / array +*/ +QJsonDocument Parser::parse(QJsonParseError *error) +{ +#ifdef PARSER_DEBUG + indent = 0; + qDebug() << ">>>>> parser begin"; +#endif + // allocate some space + dataLength = qMax(end - json, (ptrdiff_t) 256); + data = (char *)malloc(dataLength); + + // fill in Header data + QJsonPrivate::Header *h = (QJsonPrivate::Header *)data; + h->tag = QJsonDocument::BinaryFormatTag; + h->version = 1u; + + current = sizeof(QJsonPrivate::Header); + + char token = nextToken(); + DEBUG << token; + if (token == BeginArray) { + if (!parseArray()) + goto error; + } else if (token == BeginObject) { + if (!parseObject()) + goto error; + } else { + goto error; + } + + END; + { + if (error) { + error->offset = 0; + error->error = QJsonParseError::NoError; + } + QJsonPrivate::Data *d = new QJsonPrivate::Data(data, current); + return QJsonDocument(d); + } + +error: +#ifdef PARSER_DEBUG + qDebug() << ">>>>> parser error"; +#endif + if (error) { + error->offset = json - head; + error->error = lastError; + } + free(data); + return QJsonDocument(); +} + + +void Parser::ParsedObject::insert(uint offset) { + const QJsonPrivate::Entry *newEntry = reinterpret_cast(parser->data + objectPosition + offset); + int min = 0; + int n = offsets.size(); + while (n > 0) { + int half = n >> 1; + int middle = min + half; + if (*entryAt(middle) >= *newEntry) { + n = half; + } else { + min = middle + 1; + n -= half + 1; + } + } + if (min < offsets.size() && *entryAt(min) == *newEntry) { + offsets[min] = offset; + } else { + offsets.insert(min, offset); + } +} + +/* + object = begin-object [ member *( value-separator member ) ] + end-object +*/ + +bool Parser::parseObject() +{ + int objectOffset = reserveSpace(sizeof(QJsonPrivate::Object)); + BEGIN << "parseObject pos=" << objectOffset << current << json; + + ParsedObject parsedObject(this, objectOffset); + + char token = nextToken(); + while (token == Quote) { + int off = current - objectOffset; + if (!parseMember(objectOffset)) + return false; + parsedObject.insert(off); + token = nextToken(); + if (token != ValueSeparator) + break; + token = nextToken(); + if (token == EndObject) { + lastError = QJsonParseError::MissingObject; + return false; + } + } + + DEBUG << "end token=" << token; + if (token != EndObject) { + lastError = QJsonParseError::UnterminatedObject; + return false; + } + + DEBUG << "numEntries" << parsedObject.offsets.size(); + int table = objectOffset; + // finalize the object + if (parsedObject.offsets.size()) { + int tableSize = parsedObject.offsets.size()*sizeof(uint); + table = reserveSpace(tableSize); +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + memcpy(data + table, parsedObject.offsets.constData(), tableSize); +#else + offset *o = (offset *)(data + table); + for (int i = 0; i < tableSize; ++i) + o[i] = parsedObject.offsets[i]; + +#endif + } + + QJsonPrivate::Object *o = (QJsonPrivate::Object *)(data + objectOffset); + o->tableOffset = table - objectOffset; + o->size = current - objectOffset; + o->is_object = true; + o->length = parsedObject.offsets.size(); + + DEBUG << "current=" << current; + END; + return true; +} + +/* + member = string name-separator value +*/ +bool Parser::parseMember(int baseOffset) +{ + int entryOffset = reserveSpace(sizeof(QJsonPrivate::Entry)); + BEGIN << "parseMember pos=" << entryOffset; + + bool latin1; + if (!parseString(&latin1)) + return false; + char token = nextToken(); + if (token != NameSeparator) { + lastError = QJsonParseError::MissingNameSeparator; + return false; + } + QJsonPrivate::Value val; + if (!parseValue(&val, baseOffset)) + return false; + + // finalize the entry + QJsonPrivate::Entry *e = (QJsonPrivate::Entry *)(data + entryOffset); + e->value = val; + e->value.latinKey = latin1; + + END; + return true; +} + +/* + array = begin-array [ value *( value-separator value ) ] end-array +*/ +bool Parser::parseArray() +{ + BEGIN << "parseArray"; + int arrayOffset = reserveSpace(sizeof(QJsonPrivate::Array)); + + QVarLengthArray values; + + if (!eatSpace()) { + lastError = QJsonParseError::UnterminatedArray; + return false; + } + if (*json == EndArray) { + nextToken(); + } else { + while (1) { + QJsonPrivate::Value val; + if (!parseValue(&val, arrayOffset)) + return false; + values.append(val); + char token = nextToken(); + if (token == EndArray) + break; + else if (token != ValueSeparator) { + if (!eatSpace()) + lastError = QJsonParseError::UnterminatedArray; + else + lastError = QJsonParseError::MissingValueSeparator; + return false; + } + } + } + + DEBUG << "size =" << values.size(); + int table = arrayOffset; + // finalize the object + if (values.size()) { + int tableSize = values.size()*sizeof(QJsonPrivate::Value); + table = reserveSpace(tableSize); + memcpy(data + table, values.constData(), tableSize); + } + + QJsonPrivate::Array *a = (QJsonPrivate::Array *)(data + arrayOffset); + a->tableOffset = table - arrayOffset; + a->size = current - arrayOffset; + a->is_object = false; + a->length = values.size(); + + DEBUG << "current=" << current; + END; + return true; +} + +/* +value = false / null / true / object / array / number / string + +*/ + +bool Parser::parseValue(QJsonPrivate::Value *val, int baseOffset) +{ + BEGIN << "parse Value" << json; + val->_dummy = 0; + + switch (*json++) { + case 'n': + if (end - json < 4) { + lastError = QJsonParseError::IllegalValue; + return false; + } + if (*json++ == 'u' && + *json++ == 'l' && + *json++ == 'l') { + val->type = QJsonValue::Null; + DEBUG << "value: null"; + END; + return true; + } + lastError = QJsonParseError::IllegalValue; + return false; + case 't': + if (end - json < 4) { + lastError = QJsonParseError::IllegalValue; + return false; + } + if (*json++ == 'r' && + *json++ == 'u' && + *json++ == 'e') { + val->type = QJsonValue::Bool; + val->value = true; + DEBUG << "value: true"; + END; + return true; + } + lastError = QJsonParseError::IllegalValue; + return false; + case 'f': + if (end - json < 5) { + lastError = QJsonParseError::IllegalValue; + return false; + } + if (*json++ == 'a' && + *json++ == 'l' && + *json++ == 's' && + *json++ == 'e') { + val->type = QJsonValue::Bool; + val->value = false; + DEBUG << "value: false"; + END; + return true; + } + lastError = QJsonParseError::IllegalValue; + return false; + case Quote: { + val->type = QJsonValue::String; + val->value = current - baseOffset; + bool latin1; + if (!parseString(&latin1)) + return false; + val->latinOrIntValue = latin1; + DEBUG << "value: string"; + END; + return true; + } + case BeginArray: + val->type = QJsonValue::Array; + val->value = current - baseOffset; + if (!parseArray()) + return false; + DEBUG << "value: array"; + END; + return true; + case BeginObject: + val->type = QJsonValue::Object; + val->value = current - baseOffset; + if (!parseObject()) + return false; + DEBUG << "value: object"; + END; + return true; + case EndArray: + lastError = QJsonParseError::MissingObject; + return false; + default: + --json; + if (!parseNumber(val, baseOffset)) + return false; + DEBUG << "value: number"; + END; + } + + return true; +} + + + + + +/* + number = [ minus ] int [ frac ] [ exp ] + decimal-point = %x2E ; . + digit1-9 = %x31-39 ; 1-9 + e = %x65 / %x45 ; e E + exp = e [ minus / plus ] 1*DIGIT + frac = decimal-point 1*DIGIT + int = zero / ( digit1-9 *DIGIT ) + minus = %x2D ; - + plus = %x2B ; + + zero = %x30 ; 0 + +*/ + +bool Parser::parseNumber(QJsonPrivate::Value *val, int baseOffset) +{ + BEGIN << "parseNumber" << json; + val->type = QJsonValue::Double; + + const char *start = json; + bool isInt = true; + + // minus + if (json < end && *json == '-') + ++json; + + // int = zero / ( digit1-9 *DIGIT ) + if (json < end && *json == '0') { + ++json; + } else { + while (json < end && *json >= '0' && *json <= '9') + ++json; + } + + // frac = decimal-point 1*DIGIT + if (json < end && *json == '.') { + isInt = false; + ++json; + while (json < end && *json >= '0' && *json <= '9') + ++json; + } + + // exp = e [ minus / plus ] 1*DIGIT + if (json < end && (*json == 'e' || *json == 'E')) { + isInt = false; + ++json; + if (json < end && (*json == '-' || *json == '+')) + ++json; + while (json < end && *json >= '0' && *json <= '9') + ++json; + } + + if (json >= end) { + lastError = QJsonParseError::EndOfNumber; + return false; + } + + QByteArray number(start, json - start); + DEBUG << "numberstring" << number; + + if (isInt) { + bool ok; + int n = number.toInt(&ok); + if (ok && n < (1<<25) && n > -(1<<25)) { + val->int_value = n; + val->latinOrIntValue = true; + END; + return true; + } + } + + bool ok; + union { + quint64 ui; + double d; + }; + d = number.toDouble(&ok); + + if (!ok) { + lastError = QJsonParseError::IllegalNumber; + return false; + } + + int pos = reserveSpace(sizeof(double)); + *(quint64 *)(data + pos) = qToLittleEndian(ui); + val->value = pos - baseOffset; + val->latinOrIntValue = false; + + END; + return true; +} + +/* + + string = quotation-mark *char quotation-mark + + char = unescaped / + escape ( + %x22 / ; " quotation mark U+0022 + %x5C / ; \ reverse solidus U+005C + %x2F / ; / solidus U+002F + %x62 / ; b backspace U+0008 + %x66 / ; f form feed U+000C + %x6E / ; n line feed U+000A + %x72 / ; r carriage return U+000D + %x74 / ; t tab U+0009 + %x75 4HEXDIG ) ; uXXXX U+XXXX + + escape = %x5C ; \ + + quotation-mark = %x22 ; " + + unescaped = %x20-21 / %x23-5B / %x5D-10FFFF + */ +static inline bool addHexDigit(char digit, uint *result) +{ + *result <<= 4; + if (digit >= '0' && digit <= '9') + *result |= (digit - '0'); + else if (digit >= 'a' && digit <= 'f') + *result |= (digit - 'a') + 10; + else if (digit >= 'A' && digit <= 'F') + *result |= (digit - 'A') + 10; + else + return false; + return true; +} + +static inline bool scanEscapeSequence(const char *&json, const char *end, uint *ch) +{ + ++json; + if (json >= end) + return false; + + DEBUG << "scan escape" << (char)*json; + uint escaped = *json++; + switch (escaped) { + case '"': + *ch = '"'; break; + case '\\': + *ch = '\\'; break; + case '/': + *ch = '/'; break; + case 'b': + *ch = 0x8; break; + case 'f': + *ch = 0xc; break; + case 'n': + *ch = 0xa; break; + case 'r': + *ch = 0xd; break; + case 't': + *ch = 0x9; break; + case 'u': { + *ch = 0; + if (json > end - 4) + return false; + for (int i = 0; i < 4; ++i) { + if (!addHexDigit(*json, ch)) + return false; + ++json; + } + return true; + } + default: + // this is not as strict as one could be, but allows for more Json files + // to be parsed correctly. + *ch = escaped; + return true; + } + return true; +} + +static inline bool isUnicodeNonCharacter(uint ucs4) +{ + // Unicode has a couple of "non-characters" that one can use internally, + // but are not allowed to be used for text interchange. + // + // Those are the last two entries each Unicode Plane (U+FFFE, U+FFFF, + // U+1FFFE, U+1FFFF, etc.) as well as the entries between U+FDD0 and + // U+FDEF (inclusive) + + return (ucs4 & 0xfffe) == 0xfffe + || (ucs4 - 0xfdd0U) < 16; +} + +static inline bool scanUtf8Char(const char *&json, const char *end, uint *result) +{ + int need; + uint min_uc; + uint uc; + uchar ch = *json++; + if (ch < 128) { + *result = ch; + return true; + } else if ((ch & 0xe0) == 0xc0) { + uc = ch & 0x1f; + need = 1; + min_uc = 0x80; + } else if ((ch & 0xf0) == 0xe0) { + uc = ch & 0x0f; + need = 2; + min_uc = 0x800; + } else if ((ch&0xf8) == 0xf0) { + uc = ch & 0x07; + need = 3; + min_uc = 0x10000; + } else { + return false; + } + + if (json >= end - need) + return false; + + for (int i = 0; i < need; ++i) { + ch = *json++; + if ((ch&0xc0) != 0x80) + return false; + uc = (uc << 6) | (ch & 0x3f); + } + + if (isUnicodeNonCharacter(uc) || uc >= 0x110000 || + (uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff)) + return false; + + *result = uc; + return true; +} + +bool Parser::parseString(bool *latin1) +{ + *latin1 = true; + + const char *start = json; + int outStart = current; + + // try to write out a latin1 string + + int stringPos = reserveSpace(2); + BEGIN << "parse string stringPos=" << stringPos << json; + while (json < end) { + uint ch = 0; + if (*json == '"') + break; + else if (*json == '\\') { + if (!scanEscapeSequence(json, end, &ch)) { + lastError = QJsonParseError::StringEscapeSequence; + return false; + } + } else { + if (!scanUtf8Char(json, end, &ch)) { + lastError = QJsonParseError::StringUTF8Scan; + return false; + } + } + if (ch > 0xff) { + *latin1 = false; + break; + } + int pos = reserveSpace(1); + DEBUG << " " << ch << (char)ch; + data[pos] = (uchar)ch; + } + ++json; + DEBUG << "end of string"; + if (json >= end) { + lastError = QJsonParseError::EndOfString; + return false; + } + + // no unicode string, we are done + if (*latin1) { + // write string length + *(QJsonPrivate::qle_ushort *)(data + stringPos) = current - outStart - sizeof(ushort); + int pos = reserveSpace((4 - current) & 3); + while (pos & 3) + data[pos++] = 0; + END; + return true; + } + + *latin1 = false; + DEBUG << "not latin"; + + json = start; + current = outStart + sizeof(int); + + while (json < end) { + uint ch = 0; + if (*json == '"') + break; + else if (*json == '\\') { + if (!scanEscapeSequence(json, end, &ch)) { + lastError = QJsonParseError::StringEscapeSequence; + return false; + } + } else { + if (!scanUtf8Char(json, end, &ch)) { + lastError = QJsonParseError::StringUTF8Scan; + return false; + } + } + if (ch > 0xffff) { + int pos = reserveSpace(4); + *(QJsonPrivate::qle_ushort *)(data + pos) = QChar::highSurrogate(ch); + *(QJsonPrivate::qle_ushort *)(data + pos + 2) = QChar::lowSurrogate(ch); + } else { + int pos = reserveSpace(2); + *(QJsonPrivate::qle_ushort *)(data + pos) = (ushort)ch; + } + } + ++json; + + if (json >= end) { + lastError = QJsonParseError::EndOfString; + return false; + } + + // write string length + *(QJsonPrivate::qle_int *)(data + stringPos) = (current - outStart - sizeof(int))/2; + int pos = reserveSpace((4 - current) & 3); + while (pos & 3) + data[pos++] = 0; + END; + return true; +} + +QT_END_NAMESPACE diff --git a/qjson/qjsonparser_p.h b/qjson/qjsonparser_p.h new file mode 100644 index 0000000..05e870e --- /dev/null +++ b/qjson/qjsonparser_p.h @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSONPARSER_P_H +#define QJSONPARSER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qjsondocument.h" +#include + +QT_BEGIN_NAMESPACE + +namespace QJsonPrivate { + +class Parser +{ +public: + Parser(const char *json, int length); + + QJsonDocument parse(QJsonParseError *error); + + class ParsedObject + { + public: + ParsedObject(Parser *p, int pos) : parser(p), objectPosition(pos) {} + void insert(uint offset); + + Parser *parser; + int objectPosition; + QVector offsets; + + inline QJsonPrivate::Entry *entryAt(int i) const { + return reinterpret_cast(parser->data + objectPosition + offsets[i]); + } + }; + + +private: + inline bool eatSpace(); + inline char nextToken(); + + bool parseObject(); + bool parseArray(); + bool parseMember(int baseOffset); + bool parseString(bool *latin1); + bool parseValue(QJsonPrivate::Value *val, int baseOffset); + bool parseNumber(QJsonPrivate::Value *val, int baseOffset); + const char *head; + const char *json; + const char *end; + + char *data; + int dataLength; + int current; + QJsonParseError::ParseError lastError; + + inline int reserveSpace(int space) { + if (current + space >= dataLength) { + dataLength = 2*dataLength + space; + data = (char *)realloc(data, dataLength); + } + int pos = current; + current += space; + return pos; + } +}; + +} + +QT_END_NAMESPACE + +#endif diff --git a/qjson/qjsonvalue.cpp b/qjson/qjsonvalue.cpp new file mode 100644 index 0000000..a0f7cea --- /dev/null +++ b/qjson/qjsonvalue.cpp @@ -0,0 +1,592 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qjsonobject.h" +#include "qjsonvalue.h" +#include "qjsonarray.h" +#include +#include +#include + +#include "qjson_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QJsonValue + \ingroup json + \reentrant + \since 5.0 + + \brief The QJsonValue class encapsulates a value in JSON. + + A value in JSON can be one of 6 basic types: + + JSON is a format to store structured data. It has 6 basic data types: + + \list + \o bool QJsonValue::Bool + \o double QJsonValue::Double + \o string QJsonValue::String + \o array QJsonValue::Array + \o object QJsonValue::Object + \o null QJsonValue::Null + \endlist + + A value can represent any of the above data types. In addition, QJsonValue has one special + flag to represent undefined values. This can be queried with isUndefined(). + + The type of the value can be queried with type() or accessors like isBool(), isString(), and so on. + Likewise, the value can be converted to the type stored in it using the toBool(), toString() and so on. + + Values are strictly typed internally and contrary to QVariant will not attempt to do any implicit type + conversions. This implies that converting to a type that is not stored in the value will return a default + constructed return value. +*/ + +/*! + Creates a QJsonValue of type \a type. + + The default is to create a Null value. + */ +QJsonValue::QJsonValue(Type type) + : ui(0), d(0), t(type) +{ +} + +/*! + \internal + */ +QJsonValue::QJsonValue(QJsonPrivate::Data *data, QJsonPrivate::Base *base, const QJsonPrivate::Value &v) + : d(0) +{ + t = (Type)(uint)v.type; + switch (t) { + case Undefined: + case Null: + dbl = 0; + break; + case Bool: + b = v.toBoolean(); + break; + case Double: + dbl = v.toDouble(base); + break; + case String: { + /* + QString s = v.toString(base); + stringData = s.data_ptr(); + stringData->ref.ref(); + */ + stringValue = v.toString(base); + break; + } + case Array: + case Object: + d = data; + this->base = v.base(base); + break; + } + if (d) + d->ref.ref(); +} + +/*! + Creates a value of type Bool, with value \a b. + */ +QJsonValue::QJsonValue(bool b) + : d(0), t(Bool) +{ + this->b = b; +} + +/*! + Creates a value of type Double, with value \a n. + */ +QJsonValue::QJsonValue(double n) + : d(0), t(Double) +{ + this->dbl = n; +} + +/*! + \overload + Creates a value of type Double, with value \a n. + */ +QJsonValue::QJsonValue(int n) + : d(0), t(Double) +{ + this->dbl = n; +} + +/*! + Creates a value of type String, with value \a s. + */ +QJsonValue::QJsonValue(const QString &s) + : d(0), t(String) +{ + /* + stringData = *(QStringData **)(&s); + stringData->ref.ref(); + */ + stringValue = s; +} + +/*! + Creates a value of type String, with value \a s. + */ +QJsonValue::QJsonValue(const QLatin1String &s) + : d(0), t(String) +{ + // ### FIXME: Avoid creating the temp QString below + /* + QString str(s); + stringData = *(QStringData **)(&str); + stringData->ref.ref(); + */ + stringValue = s; +} + +/*! + Creates a value of type Array, with value \a a. + */ +QJsonValue::QJsonValue(const QJsonArray &a) + : d(a.d), t(Array) +{ + base = a.a; + if (d) + d->ref.ref(); +} + +/*! + Creates a value of type Object, with value \a o. + */ +QJsonValue::QJsonValue(const QJsonObject &o) + : d(o.d), t(Object) +{ + base = o.o; + if (d) + d->ref.ref(); +} + + +/*! + Destroys the value. + */ +QJsonValue::~QJsonValue() +{ + /* + if (t == String && stringData && !stringData->ref.deref()) + free(stringData); + */ + + if (d && !d->ref.deref()) + delete d; +} + +/*! + Creates a copy of \a other. + */ +QJsonValue::QJsonValue(const QJsonValue &other) +{ + t = other.t; + d = other.d; + ui = other.ui; + stringValue = other.stringValue; + + if (d) + d->ref.ref(); + + /* + if (t == String && stringData) + stringData->ref.ref(); + */ +} + +/*! + Assigns the value stored in \a other to this object. + */ +QJsonValue &QJsonValue::operator =(const QJsonValue &other) +{ + /* + if (t == String && stringData && !stringData->ref.deref()) + free(stringData); + */ + + t = other.t; + dbl = other.dbl; + stringValue = other.stringValue; + + if (d != other.d) { + + if (d && !d->ref.deref()) + delete d; + d = other.d; + if (d) + d->ref.ref(); + + } + + /* + if (t == String && stringData) + stringData->ref.ref(); + */ + + return *this; +} + +/*! + Converts \a variant to a QJsonValue and returns it. + + The conversion will convert QVariant types as follows: + + \list + \o QVariant::Bool to Bool + \o QVariant::Int + \o QVariant::Double + \o QVariant::LongLong + \o QVariant::ULongLong + \o QVariant::UInt to Double + \o QVariant::String to String + \o QVariant::StringList + \o QVariant::VariantList to Array + \o QVariant::VariantMap to Object + \endlist + + For all other QVariant types a conversion to a QString will be attempted. If the returned string + is empty, a Null QJsonValue will be stored, otherwise a String value using the returned QString. + + \sa toVariant() + */ +QJsonValue QJsonValue::fromVariant(const QVariant &variant) +{ + switch (variant.type()) { + case QVariant::Bool: + return QJsonValue(variant.toBool()); + case QVariant::Int: + case QVariant::Double: + case QVariant::LongLong: + case QVariant::ULongLong: + case QVariant::UInt: + return QJsonValue(variant.toDouble()); + case QVariant::String: + return QJsonValue(variant.toString()); + case QVariant::StringList: + return QJsonValue(QJsonArray::fromStringList(variant.toStringList())); + case QVariant::List: + return QJsonValue(QJsonArray::fromVariantList(variant.toList())); + case QVariant::Map: + return QJsonValue(QJsonObject::fromVariantMap(variant.toMap())); + default: + break; + } + QString string = variant.toString(); + if (string.isEmpty()) + return QJsonValue(); + return QJsonValue(string); +} + +/*! + Converts the value to a QVariant. + + The QJsonValue types will be converted as follows: + + \value Null QVariant() + \value Bool QVariant::Bool + \value Double QVariant::Double + \value String QVariant::String + \value Array QVariantList + \value Object QVariantMap + \value Undefined QVariant() + + \sa fromVariant() + */ +QVariant QJsonValue::toVariant() const +{ + switch (t) { + case Bool: + return b; + case Double: + return dbl; + case String: + return toString(); + case Array: + return QJsonArray(d, static_cast(base)).toVariantList(); + case Object: + return QJsonObject(d, static_cast(base)).toVariantMap(); + case Null: + case Undefined: + break; + } + return QVariant(); +} + +/*! + \enum QJsonValue::Type + + This enum describes the type of the JSON value. + + \value Null A Null value + \value Bool A boolean value. Use toBool() to convert to a bool. + \value Double A double. Use toDouble() to convert to a double. + \value String A string. Use toString() to convert to a QString. + \value Array An array. Use toArray() to convert to a QJsonArray. + \value Object An object. Use toObject() to convert to a QJsonObject. + \value Undefined The value is undefined. This is usually returned as an + error condition, when trying to read an out of bounds value + in an array or a non existant key in an object. +*/ + +/*! + Returns the type of the value. + + \sa QJsonValue::Type + */ +QJsonValue::Type QJsonValue::type() const +{ + return t; +} + +/*! + Converts the value to a bool and returns it. + + If type() is not bool, false will be returned. + */ +bool QJsonValue::toBool() const +{ + if (t != Bool) + return false; + return b; +} + +/*! + Converts the value to a double and returns it. + + If type() is not Double, 0. will be returned. + */ +double QJsonValue::toDouble() const +{ + if (t != Double) + return 0; + return dbl; +} + +/*! + Converts the value to a QString and returns it. + + If type() is not String, a QString() will be returned. + */ +QString QJsonValue::toString() const +{ + if (t != String) + return QString(); + + /* + stringData->ref.ref(); // the constructor below doesn't add a ref. + return QString(*(const QConstStringData<1> *)stringData); + */ + return stringValue; +} + +/*! + Converts the value to an array and returns it. + + If type() is not Array, a QJsonArray() will be returned. + */ +QJsonArray QJsonValue::toArray() const +{ + if (!d || t != Array) + return QJsonArray(); + + return QJsonArray(d, static_cast(base)); +} + +/*! + Converts the value to an object and returns it. + + If type() is not Object, a QJsonObject() will be returned. + */ +QJsonObject QJsonValue::toObject() const +{ + if (!d || t != Object) + return QJsonObject(); + + return QJsonObject(d, static_cast(base)); +} + +/*! + Returns true if the value is equal to \a other. + */ +bool QJsonValue::operator==(const QJsonValue &other) const +{ + if (t != other.t) + return false; + + switch (t) { + case Undefined: + case Null: + break; + case Bool: + return b == other.b; + case Double: + return dbl == other.dbl; + case String: + return toString() == other.toString(); + case Array: + return QJsonArray(d, static_cast(base)) + == QJsonArray(other.d, static_cast(other.base)); + case Object: + return QJsonObject(d, static_cast(base)) + == QJsonObject(other.d, static_cast(other.base)); + } + return true; +} + +/*! + Returns true if the value is not equal to \a other. + */ +bool QJsonValue::operator!=(const QJsonValue &other) const +{ + return !(*this == other); +} + +/*! + \internal + */ +void QJsonValue::detach() +{ + if (!d) + return; + + QJsonPrivate::Data *x = d->clone(base); + x->ref.ref(); + if (!d->ref.deref()) + delete d; + d = x; + base = static_cast(d->header->root()); +} + + +/*! + \class QJsonValueRef + \reentrant + \brief The QJsonValueRef class is a helper class for QJsonValue. + + \internal + + \ingroup json + + When you get an object of type QJsonValueRef, if you can assign to it, + the assignment will apply to the character in the string from + which you got the reference. That is its whole purpose in life. + + You can use it exactly in the same way as a reference to a QJsonValue. + + The QJsonValueRef becomes invalid once modifications are made to the + string: if you want to keep the character, copy it into a QJsonValue. + + Most of the QJsonValue member functions also exist in QJsonValueRef. + However, they are not explicitly documented here. +*/ + + +QJsonValueRef &QJsonValueRef::operator =(const QJsonValue &val) +{ + if (is_object) + o->setValueAt(index, val); + else + a->replace(index, val); + + return *this; +} + +QJsonArray QJsonValueRef::toArray() const +{ + return toValue().toArray(); +} + +QJsonObject QJsonValueRef::toObject() const +{ + return toValue().toObject(); +} + +QJsonValue QJsonValueRef::toValue() const +{ + if (!is_object) + return a->at(index); + return o->valueAt(index); +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QJsonValue &o) +{ + switch (o.t) { + case QJsonValue::Undefined: + dbg.nospace() << "QJsonValue(undefined)"; + break; + case QJsonValue::Null: + dbg.nospace() << "QJsonValue(null)"; + break; + case QJsonValue::Bool: + dbg.nospace() << "QJsonValue(bool, " << o.toBool() << ")"; + break; + case QJsonValue::Double: + dbg.nospace() << "QJsonValue(double, " << o.toDouble() << ")"; + break; + case QJsonValue::String: + dbg.nospace() << "QJsonValue(string, " << o.toString() << ")"; + break; + case QJsonValue::Array: + dbg.nospace() << "QJsonValue(array, "; + dbg.nospace() << o.toArray(); + dbg.nospace() << ")"; + break; + case QJsonValue::Object: + dbg.nospace() << "QJsonValue(object, "; + dbg.nospace() << o.toObject(); + dbg.nospace() << ")"; + break; + } + return dbg.space(); +} +#endif + +QT_END_NAMESPACE diff --git a/qjson/qjsonvalue.h b/qjson/qjsonvalue.h new file mode 100644 index 0000000..313386b --- /dev/null +++ b/qjson/qjsonvalue.h @@ -0,0 +1,192 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSONVALUE_H +#define QJSONVALUE_H + +#include +#include +#include + +#include "qjsonexport.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QDebug; +class QVariant; +class QJsonArray; +class QJsonObject; + +namespace QJsonPrivate { + class Data; + class Base; + class Object; + class Header; + class Array; + class Value; + class Entry; +} + +class Q_JSONRPC_EXPORT QJsonValue +{ +public: + enum Type { + Null = 0x0, + Bool = 0x1, + Double = 0x2, + String = 0x3, + Array = 0x4, + Object = 0x5, + Undefined = 0x80 + }; + + QJsonValue(Type = Null); + QJsonValue(bool b); + QJsonValue(double n); + QJsonValue(int n); + QJsonValue(const QString &s); + QJsonValue(const QLatin1String &s); + QJsonValue(const QJsonArray &a); + QJsonValue(const QJsonObject &o); + + ~QJsonValue(); + + QJsonValue(const QJsonValue &other); + QJsonValue &operator =(const QJsonValue &other); + + static QJsonValue fromVariant(const QVariant &variant); + QVariant toVariant() const; + + Type type() const; + inline bool isNull() const { return type() == Null; } + inline bool isBool() const { return type() == Bool; } + inline bool isDouble() const { return type() == Double; } + inline bool isString() const { return type() == String; } + inline bool isArray() const { return type() == Array; } + inline bool isObject() const { return type() == Object; } + inline bool isUndefined() const { return type() == Undefined; } + + bool toBool() const; + double toDouble() const; + QString toString() const; + QJsonArray toArray() const; + QJsonObject toObject() const; + + bool operator==(const QJsonValue &other) const; + bool operator!=(const QJsonValue &other) const; + inline QJsonValue(const void *) {} +private: + // avoid implicit conversions from char * to bool + + friend class QJsonPrivate::Value; + friend class QJsonArray; + friend class QJsonObject; + friend Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonValue &); + + QJsonValue(QJsonPrivate::Data *d, QJsonPrivate::Base *b, const QJsonPrivate::Value& v); + + void detach(); + + union { + quint64 ui; + bool b; + double dbl; +// QStringData *stringData; + QJsonPrivate::Base *base; + }; + + QString stringValue; + + QJsonPrivate::Data *d; // needed for Objects and Arrays + Type t; +}; + +class Q_JSONRPC_EXPORT QJsonValueRef +{ +public: + QJsonValueRef(QJsonArray *array, int idx) + : a(array), is_object(false), index(idx) {} + QJsonValueRef(QJsonObject *object, int idx) + : o(object), is_object(true), index(idx) {} + + inline operator QJsonValue() const { return toValue(); } + QJsonValueRef &operator = (const QJsonValue &val); + + inline QJsonValue::Type type() const { return toValue().type(); } + inline bool isNull() const { return type() == QJsonValue::Null; } + inline bool isBool() const { return type() == QJsonValue::Bool; } + inline bool isDouble() const { return type() == QJsonValue::Double; } + inline bool isString() const { return type() == QJsonValue::String; } + inline bool isArray() const { return type() == QJsonValue::Array; } + inline bool isObject() const { return type() == QJsonValue::Object; } + inline bool isUndefined() const { return type() == QJsonValue::Undefined; } + + inline bool toBool() const { return toValue().toBool(); } + inline double toDouble() const { return toValue().toDouble(); } + inline QString toString() const { return toValue().toString(); } + QJsonArray toArray() const; + QJsonObject toObject() const; + + inline bool operator==(const QJsonValue &other) const { return toValue() == other; } + inline bool operator!=(const QJsonValue &other) const { return toValue() != other; } + +private: + QJsonValue toValue() const; + + union { + QJsonArray *a; + QJsonObject *o; + }; + uint is_object : 1; + uint index : 31; +}; + +#ifndef QT_NO_DEBUG_STREAM +Q_JSONRPC_EXPORT QDebug operator<<(QDebug, const QJsonValue &); +#endif + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QJSONVALUE_H diff --git a/qjson/qjsonwriter.cpp b/qjson/qjsonwriter.cpp new file mode 100644 index 0000000..d544e61 --- /dev/null +++ b/qjson/qjsonwriter.cpp @@ -0,0 +1,280 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qjsonwriter_p.h" +#include "qjson_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QJsonPrivate; + +static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact); +static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact); + +// some code from qutfcodec.cpp, inlined here for performance reasons +// to allow fast escaping of strings +static inline bool isUnicodeNonCharacter(uint ucs4) +{ + // Unicode has a couple of "non-characters" that one can use internally, + // but are not allowed to be used for text interchange. + // + // Those are the last two entries each Unicode Plane (U+FFFE, U+FFFF, + // U+1FFFE, U+1FFFF, etc.) as well as the entries between U+FDD0 and + // U+FDEF (inclusive) + + return (ucs4 & 0xfffe) == 0xfffe + || (ucs4 - 0xfdd0U) < 16; +} + +static inline uchar hexdig(uint u) +{ + return (u < 0xa ? '0' + u : 'a' + u - 0xa); +} + +static QByteArray escapedString(const QString &s) +{ + const uchar replacement = '?'; + QByteArray ba(s.length(), Qt::Uninitialized); + + uchar *cursor = (uchar *)ba.data(); + const uchar *ba_end = cursor + ba.length(); + + const QChar *ch = (const QChar *)s.constData(); + const QChar *end = ch + s.length(); + + int surrogate_high = -1; + + while (ch < end) { + if (cursor >= ba_end - 6) { + // ensure we have enough space + int pos = cursor - (const uchar *)ba.constData(); + ba.resize(ba.size()*2); + cursor = (uchar *)ba.data() + pos; + ba_end = (const uchar *)ba.constData() + ba.length(); + } + + uint u = ch->unicode(); + if (surrogate_high >= 0) { + if (ch->isLowSurrogate()) { + u = QChar::surrogateToUcs4(surrogate_high, u); + surrogate_high = -1; + } else { + // high surrogate without low + *cursor = replacement; + ++ch; + surrogate_high = -1; + continue; + } + } else if (ch->isLowSurrogate()) { + // low surrogate without high + *cursor = replacement; + ++ch; + continue; + } else if (ch->isHighSurrogate()) { + surrogate_high = u; + ++ch; + continue; + } + + if (u < 0x80) { + if (u < 0x20 || u == 0x22 || u == 0x5c) { + *cursor++ = '\\'; + switch (u) { + case 0x22: + *cursor++ = '"'; + break; + case 0x5c: + *cursor++ = '\\'; + break; + case 0x8: + *cursor++ = 'b'; + break; + case 0xc: + *cursor++ = 'f'; + break; + case 0xa: + *cursor++ = 'n'; + break; + case 0xd: + *cursor++ = 'r'; + break; + case 0x9: + *cursor++ = 't'; + break; + default: + *cursor++ = 'u'; + *cursor++ = '0'; + *cursor++ = '0'; + *cursor++ = hexdig(u>>4); + *cursor++ = hexdig(u & 0xf); + } + } else { + *cursor++ = (uchar)u; + } + } else { + if (u < 0x0800) { + *cursor++ = 0xc0 | ((uchar) (u >> 6)); + } else { + // is it one of the Unicode non-characters? + if (isUnicodeNonCharacter(u)) { + *cursor++ = replacement; + ++ch; + continue; + } + + if (u > 0xffff) { + *cursor++ = 0xf0 | ((uchar) (u >> 18)); + *cursor++ = 0x80 | (((uchar) (u >> 12)) & 0x3f); + } else { + *cursor++ = 0xe0 | (((uchar) (u >> 12)) & 0x3f); + } + *cursor++ = 0x80 | (((uchar) (u >> 6)) & 0x3f); + } + *cursor++ = 0x80 | ((uchar) (u&0x3f)); + } + ++ch; + } + + ba.resize(cursor - (const uchar *)ba.constData()); + return ba; +} + +static void valueToJson(const QJsonPrivate::Base *b, const QJsonPrivate::Value &v, QByteArray &json, int indent, bool compact) +{ + QJsonValue::Type type = (QJsonValue::Type)(uint)v.type; + switch (type) { + case QJsonValue::Bool: + json += v.toBoolean() ? "true" : "false"; + break; + case QJsonValue::Double: + json += QByteArray::number(v.toDouble(b)); + break; + case QJsonValue::String: + json += '"'; + json += escapedString(v.toString(b)); + json += '"'; + break; + case QJsonValue::Array: + json += compact ? "[" : "[\n"; + arrayContentToJson(static_cast(v.base(b)), json, indent + (compact ? 0 : 1), compact); + json += QByteArray(4*indent, ' '); + json += "]"; + break; + case QJsonValue::Object: + json += compact ? "{" : "{\n"; + objectContentToJson(static_cast(v.base(b)), json, indent + (compact ? 0 : 1), compact); + json += QByteArray(4*indent, ' '); + json += "}"; + break; + case QJsonValue::Null: + default: + json += "null"; + } +} + +static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact) +{ + if (!a || !a->length) + return; + + QByteArray indentString(4*indent, ' '); + + uint i = 0; + while (1) { + json += indentString; + valueToJson(a, a->at(i), json, indent, compact); + + if (++i == a->length) { + if (!compact) + json += '\n'; + break; + } + + json += compact ? "," : ",\n"; + } +} + + +static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact) +{ + if (!o || !o->length) + return; + + QByteArray indentString(4*indent, ' '); + + uint i = 0; + while (1) { + QJsonPrivate::Entry *e = o->entryAt(i); + json += indentString; + json += '"'; + json += escapedString(e->key()); + json += "\": "; + valueToJson(o, e->value, json, indent, compact); + + if (++i == o->length) { + if (!compact) + json += '\n'; + break; + } + + json += compact ? "," : ",\n"; + } +} + +void Writer::objectToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact) +{ + json.reserve(json.size() + (o ? (int)o->size : 16)); + json += compact ? "{" : "{\n"; + objectContentToJson(o, json, indent + (compact ? 0 : 1), compact); + json += QByteArray(4*indent, ' '); + json += compact ? "}" : "}\n"; +} + +void Writer::arrayToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact) +{ + json.reserve(json.size() + (a ? (int)a->size : 16)); + json += compact ? "[" : "[\n"; + arrayContentToJson(a, json, indent + (compact ? 0 : 1), compact); + json += QByteArray(4*indent, ' '); + json += compact ? "]" : "]\n"; +} + +QT_END_NAMESPACE diff --git a/qjson/qjsonwriter_p.h b/qjson/qjsonwriter_p.h new file mode 100644 index 0000000..14dfe6b --- /dev/null +++ b/qjson/qjsonwriter_p.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSONWRITER_P_H +#define QJSONWRITER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// +#include "qjsonvalue.h" + +QT_BEGIN_NAMESPACE + +namespace QJsonPrivate +{ + +class Writer +{ +public: + static void objectToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact = false); + static void arrayToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact = false); +}; + +} + +QT_END_NAMESPACE + +#endif diff --git a/qjson/upQJson.pri b/qjson/upQJson.pri new file mode 100644 index 0000000..79df2ab --- /dev/null +++ b/qjson/upQJson.pri @@ -0,0 +1,24 @@ +!greaterThan(QT_MAJOR_VERSION, 4): { + + INCLUDEPATH += \ + $$PWD + + SOURCES += \ + $$PWD/qjson.cpp \ + $$PWD/qjsonarray.cpp \ + $$PWD/qjsondocument.cpp \ + $$PWD/qjsonobject.cpp \ + $$PWD/qjsonparser.cpp \ + $$PWD/qjsonvalue.cpp \ + $$PWD/qjsonwriter.cpp + + HEADERS += \ + $$PWD/qjson_p.h \ + $$PWD/qjsonarray.h \ + $$PWD/qjsondocument.h \ + $$PWD/qjsonobject.h \ + $$PWD/qjsonparser_p.h \ + $$PWD/qjsonvalue.h \ + $$PWD/qjsonwriter_p.h + +} \ No newline at end of file diff --git a/qt_zh_CN.qm b/qt_zh_CN.qm new file mode 100644 index 0000000..be651ee --- /dev/null +++ b/qt_zh_CN.qm @@ -0,0 +1 @@ +<¸dÊÍ!¿`¡½Ý \ No newline at end of file diff --git a/rcS b/rcS new file mode 100644 index 0000000..1b5b1c5 --- /dev/null +++ b/rcS @@ -0,0 +1,60 @@ +#! /bin/sh + +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin: +runlevel=S +prevlevel=N +umask 022 +export PATH runlevel prevlevel + +# +# Trap CTRL-C &c only in this shell so we can interrupt subprocesses. +# +trap ":" INT QUIT TSTP +/bin/hostname FriendlyARM + +/bin/mount -n -t proc none /proc +/bin/mount -n -t sysfs none /sys +/bin/mount -n -t usbfs none /proc/bus/usb +/bin/mount -t ramfs none /dev + +echo /sbin/mdev > /proc/sys/kernel/hotplug +/sbin/mdev -s +/bin/hotplug +# mounting file system specified in /etc/fstab +mkdir -p /dev/pts +mkdir -p /dev/shm +/bin/mount -n -t devpts none /dev/pts -o mode=0622 +/bin/mount -n -t tmpfs tmpfs /dev/shm +/bin/mount -n -t ramfs none /tmp +/bin/mount -n -t ramfs none /var +mkdir -p /var/empty +mkdir -p /var/log +mkdir -p /var/lock +mkdir -p /var/run +mkdir -p /var/tmp + +/sbin/hwclock -s + +syslogd +/etc/rc.d/init.d/netd start +echo " " > /dev/tty1 +echo "Starting networking..." > /dev/tty1 +sleep 1 +/etc/rc.d/init.d/httpd start +echo " " > /dev/tty1 +echo "Starting web server..." > /dev/tty1 +sleep 1 +/etc/rc.d/init.d/leds start +echo " " > /dev/tty1 +echo "Starting leds service..." > /dev/tty1 +echo " " +sleep 1 + +/sbin/ifconfig lo 127.0.0.1 +/etc/init.d/ifconfig-eth0 + +#/bin/qt4 & +/home/plg/qt4 +echo " " > /dev/tty1 +echo "Starting Qtopia, please waiting..." > /dev/tty1 + diff --git a/rfid/rfidfunction.cpp b/rfid/rfidfunction.cpp new file mode 100644 index 0000000..234ad13 --- /dev/null +++ b/rfid/rfidfunction.cpp @@ -0,0 +1,639 @@ +#include "rfidfunction.h" +#include "sm3.h" +#include "sm4.h" +#include +#include + + +// 计算校验和并输出 +void RFIDFunction::CheckSumOut(unsigned char* buf, unsigned char len) +{ + unsigned char i; + unsigned char checksum; + checksum = 0; + for (i = 0; i < (len - 1); i++) + { + checksum ^= buf[i]; // 逐位异或计算校验和 + } + buf[len - 1] = (unsigned char)~checksum; // 取反作为校验和 +} + +// 检查输入的校验和是否正确 +bool RFIDFunction::CheckSumIn(unsigned char* buf, unsigned char len) +{ + unsigned char i; + unsigned char checksum; + checksum = 0; + for (i = 0; i < (len - 1); i++) + { + checksum ^= buf[i]; // 逐位异或计算校验和 + } + if (buf[len - 1] == (unsigned char)~checksum) // 比较校验和 + { + return true; // 校验和正确 + } + return false; // 校验和错误 +} + +// 将十六进制字符串转换为字节数组 +void hexStrToByte(const QByteArray& hexIn, unsigned char* dest) +{ + int sourceLen = hexIn.size(); + unsigned char* source = (unsigned char*)hexIn.constData(); + short i; + unsigned char highByte, lowByte; + + for (i = 0; i < sourceLen; i += 2) + { + highByte = toupper(source[i]); // 高位 + lowByte = toupper(source[i + 1]); // 低位 + + if (highByte > 0x39) + { + highByte -= 0x37; // A-F转换 + } + else + { + highByte -= 0x30; // 0-9转换 + } + + if (lowByte > 0x39) + { + lowByte -= 0x37; // A-F转换 + } + else + { + lowByte -= 0x30; // 0-9转换 + } + dest[i / 2] = (highByte << 4) | lowByte; // 合并高低位 + } + return; +} + +// 检测输入的字符是否是有效的16进制字符 +bool isValidHex(const QByteArray& input) +{ + int length = input.size(); // 获取输入的长度 + for (int i = 0; i < length; ++i) // 使用传统的for循环 + { + char c = input[i]; // 获取当前字符 + // 检查字符是否在0-9, A-F, a-f范围内 + if (!((c >= '0' && c <= '9') || + (c >= 'A' && c <= 'F') || + (c >= 'a' && c <= 'f'))) + { + return false; // 如果有无效字符,返回false + } + } + return true; // 所有字符均有效,返回true +} + + +void sleepMs(unsigned int msec) +{ + QTime dieTime = QTime::currentTime().addMSecs(msec); + + while( QTime::currentTime() < dieTime ) + + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); +} + + +RFIDFunction::RFIDFunction(QObject *parent) + : QObject(parent),m_SerialPort(NULL) +{ + m_SerialSate = initSerialPortAndOpen("COM3"); // 初始化串口 +} + +RFIDFunction::~RFIDFunction() +{ + m_SerialPort->deleteLater(); +} + +/*** + * @描述 : 创建读写卡的密码(Key_A和Key_B) + * @入参 : info 生成密码的数据 + * @输出 : 无 + * @返回 : 密钥的原始数据 + */ +const QByteArray RFIDFunction::createPassword(const QByteArray& info) +{ + if (info.isEmpty()) + { + return ""; // 如果输入为空,返回空 + } + int inputSize = info.size(); + if (inputSize > 8192) + { + return ""; // 如果输入大小超过限制,返回空 + } + //先用SM3对原始数据进行哈希生成 + unsigned char hashDataOrigin[32] = { 0 }; + SM3::sm3Hash((unsigned char*)info.data(), inputSize, hashDataOrigin); // 生成哈希 + + //接着使用哈希生成SM4加密密钥 + unsigned char sm4Key[16] = { 0 }; + unsigned char sm4IV[16] = { 0 }; + int index_1 = 0; + int index_2 = 0; + for (int i = 0; i < 32; i++) + { + if (i % 2 == 0) + { + sm4Key[index_1++] = hashDataOrigin[i]; // 偶数位作为SM4密钥 + } + else + { + sm4IV[index_2++] = hashDataOrigin[i]; // 奇数位作为SM4初始向量 + } + } + + //再用SM4对原始数据进行加密 + unsigned char out[8192] = {0}; + sm4_context sm4Ctx; + SM4::sm4_setkey_enc(&sm4Ctx, sm4Key); // 设置SM4加密密钥 + SM4::sm4_crypt_cbc(&sm4Ctx, SM4_ENCRYPT, inputSize, sm4IV, (unsigned char*)info.data(), out); // 执行SM4加密 + + //最后再用SM3对加密后的数据取哈希 + unsigned char hashEncrypted[32] = { 0 }; + SM3::sm3Hash(out, inputSize, hashEncrypted); // 生成加密数据的哈希 + index_1 = 0; + char key[16] = { 0 }; + for (int i = 0; i < 32; i++) + { + if (i % 2 != 0)//取哈希的奇数位作为最终的密码 + { + key[index_1++] = hashEncrypted[i]; + } + } + return QByteArray(key,16).toHex(); // 返回最终的密码 +} + + +bool RFIDFunction::getSerialState() +{ + return m_SerialSate; // 返回串口状态 +} + +RFIDFunction::ErrorCode RFIDFunction::initSerialPortAndOpen(const QString& portName, + BaudRateType baudRate, + DataBitsType setDataBits, + StopBitsType stopBits, + ParityType parity) +{ + m_SerialPort = new Posix_QextSerialPort("/dev/ttyO3",QextSerialBase::Polling); // 创建串口对象 + m_SerialPort->setPortName(portName); // 设置串口名称 + m_SerialPort->setBaudRate((BaudRateType)baudRate); // 设置波特率 + m_SerialPort->setDataBits(setDataBits); // 设置数据位 + m_SerialPort->setStopBits(stopBits); // 设置停止位 + m_SerialPort->setParity(parity); // 设置校验位 + m_SerialPort->setFlowControl(FLOW_OFF); + if (m_SerialPort->open(QIODevice::ReadWrite)) // 打开串口 + { + return Serial_Error; // 打开失败,返回串口错误 + } + + return No_Error; // 打开成功,返回无错误 +} + +RFIDFunction::ErrorCode RFIDFunction::setOriginPassword(const QByteArray& psw) +{ + unsigned char com[32] = { 0 }; // 命令数组 + com[0] = 0x03; // 命令头 + com[1] = 0x0B; // 数据长度 + com[2] = 0xC4; // 命令类型 + com[3] = 0x20; // 额外数据 + unsigned char hexOut[32] = { 0 }; // 存储转换后的十六进制数据 + hexStrToByte(psw, hexOut); // 将密码转换为字节数组 + memcpy(com + 4, hexOut, 6); // 将密码添加到命令中 + CheckSumOut(com, com[1]); // 计算校验和 + + //QByteArray AAA = QByteArray((char*)com, com[1]).toHex(); // 转换为十六进制字符串 + if (m_SerialPort->isOpen()) // 检查串口是否打开 + { + qint64 len = m_SerialPort->write(QByteArray((char*)com, com[1])); // 发送命令 + if (len != com[1]) // 检查发送长度 + { + return Send_Data_Error; // 发送错误 + } + // 等待请求完成 + sleepMs(200); + + QByteArray readData = m_SerialPort->readAll(); // 读取返回数据 + unsigned char revData[32] = { 0 }; // 存储返回数据 + memcpy(revData, readData.data(), readData.size()); // 复制返回数据 + if ((revData[0] == 0x03) && (revData[1] == 0x08) && (revData[2] == 0xC4) && (revData[3] == 0x20)) //判断是否为写数据返回的数据包 + { + bool status = CheckSumIn(revData, revData[1]); //计算校验和 + if (status) + { + if (revData[4] == 0x00) //写数据块成功 + { + return No_Error; // 返回无错误 + } + } + else + { + return Received_Data_Check_Error; // 校验和错误 + } + } + else + { + return Received_Data_Error; // 返回数据错误 + } + } + return Serial_Error; // 串口错误 +} + +RFIDFunction::ErrorCode RFIDFunction::setWriteAndReadPassword(const QByteArray& writePassword, const QByteArray& readPassword, KeyFunction keyFunc) +{ + if (writePassword.isEmpty() || readPassword.isEmpty()) + { + return Data_Is_Empty_Error; // 如果密码为空,返回错误 + } + unsigned char com[32] = { 0 }; // 命令数组 + com[0] = 0x03; // 命令头 + com[1] = 0x15; // 数据长度 + com[2] = 0xC3; // 命令类型 + com[3] = 0x20; // 额外数据 + unsigned char hexOut[32] = { 0 }; // 存储转换后的十六进制数据 + hexStrToByte(writePassword.toHex(), hexOut); // 将写密码转换为字节数组 + memcpy(com + 4, hexOut, 6); // 将写密码添加到命令中 + switch (keyFunc) // 根据密钥功能设置命令 + { + case RFIDFunction::KeyA_Same_KeyB: + /* + * 控制如下:KEYA,KEYB 可以用来读 、写 、增值 、减值 、更改扇区密钥 + */ + com[10] = 0xFF; // 设置KEYA和KEYB相同 + com[11] = 0x07; // 设置权限 + com[12] = 0x80; // 设置操作 + com[13] = 0x69; // 设置结束标志 + break; + case RFIDFunction::KeyB_Control_KeyA: + /* + 控制如下:KEYA 可以读数据块 、减值 、查询余额 + KEYB 可以读写数据块 、增值 、减值 、查询余额 + KEYA 、KEYB 不可读,KEYA,KEYB 由 KEYB 修改 + */ + com[10] = 0x08; // 设置KEYB控制KEYA + com[11] = 0x77; // 设置权限 + com[12] = 0x8F; // 设置操作 + com[13] = 0x69; // 设置结束标志 + break; + default: + break; + } + memset(hexOut, 0, 32); // 清空hexOut + hexStrToByte(readPassword.toHex(), hexOut); // 将读密码转换为字节数组 + memcpy(com + 14, hexOut, 6); // 将读密码添加到命令中 + CheckSumOut(com, com[1]); // 计算校验和 + + QByteArray AAA = QByteArray((char*)com, com[1]).toHex(); // 转换为十六进制字符串 + + if (m_SerialPort->isOpen()) // 检查串口是否打开 + { + qint64 len = m_SerialPort->write(QByteArray((char*)com, com[1])); // 发送命令 + if (len != com[1]) // 检查发送长度 + { + return Send_Data_Error; // 发送错误 + } + // 等待请求完成 + sleepMs(200); + + QByteArray readData = m_SerialPort->readAll(); // 读取返回数据 + unsigned char revData[32] = { 0 }; // 存储返回数据 + memcpy(revData, readData.data(), readData.size()); // 复制返回数据 + if ((revData[0] == 0x03) && (revData[1] == 0x08) && (revData[2] == 0xC3) && (revData[3] == 0x20)) //判断是否为写数据返回的数据包 + { + bool status = CheckSumIn(revData, revData[1]); //计算校验和 + if (status) + { + if (revData[4] == 0x00) //写数据块成功 + { + return No_Error; // 返回无错误 + } + } + else + { + return Received_Data_Check_Error; // 校验和错误 + } + } + else + { + return Received_Data_Error; // 返回数据错误 + } + } + return Serial_Error; // 串口错误 +} + +RFIDFunction::ErrorCode RFIDFunction::setEncryptedBlock(KeyType type, ControlBlock block) +{ + unsigned char com[32] = { 0 }; // 命令数组 + com[0] = 0x01; // 命令头 + com[1] = 0x08; // 数据长度 + switch (type)//只有两种密码,A和B + { + case RFIDFunction::KEY_A: + com[2] = 0xA5; // 设置为KEY_A + break; + case RFIDFunction::KEY_B: + com[2] = 0x5A; // 设置为KEY_B + break; + default: + com[2] = 0xA5; // 默认设置为KEY_A + break; + } + com[3] = 0x20; // 额外数据 + memcpy(com + 4, &block, 1); // 将加密块添加到命令中 + + com[5] = 0x01;//蜂鸣器开 0x00不开 + com[6] = 0x00;//保留 + CheckSumOut(com, com[1]); // 计算校验和 + + QByteArray AAA = QByteArray((char*)com, com[1]).toHex(); // 转换为十六进制字符串 + + if (m_SerialPort->isOpen()) // 检查串口是否打开 + { + qint64 len = m_SerialPort->write(QByteArray((char*)com, com[1])); // 发送命令 + if (len != com[1]) // 检查发送长度 + { + return Send_Data_Error; // 发送错误 + } + // 等待请求完成 + sleepMs(200); + + QByteArray readData = m_SerialPort->readAll(); // 读取返回数据 + unsigned char revData[32] = { 0 }; // 存储返回数据 + memcpy(revData, readData.data(), readData.size()); // 复制返回数据 + if ((revData[0] == 0x01) && (revData[1] == 0x08) && (revData[2] == com[2]) && (revData[3] == 0x20)) //判断是否为写数据返回的数据包 + { + bool status = CheckSumIn(revData, revData[1]); //计算校验和 + if (status) + { + if (revData[4] == 0x00) //写数据块成功 + { + + return No_Error; // 返回无错误 + } + } + else + { + return Received_Data_Check_Error; // 校验和错误 + } + } + else + { + return Received_Data_Error; // 返回数据错误 + } + } + return Serial_Error; // 串口错误 +} + +RFIDFunction::ErrorCode RFIDFunction::writeDataToBlock(KeyType type, DataBlock block, const QByteArray& data) +{ + if (data.isEmpty()) + { + return Data_Is_Empty_Error; // 如果数据为空,返回错误 + } + + unsigned char com[32] = { 0 }; // 命令数组 + com[0] = 0x01; // 命令头 + com[1] = 0x17; // 数据长度 + switch (type)//只有两种密码,A和B + { + case RFIDFunction::KEY_A: + com[2] = 0xA4; // 设置为KEY_A + break; + case RFIDFunction::KEY_B: + com[2] = 0x5B; // 设置为KEY_B + break; + default: + com[2] = 0xA4; // 默认设置为KEY_A + break; + } + com[3] = 0x20; // 额外数据 + memcpy(com + 4, &block, 1); // 将数据块添加到命令中 + + com[5] = 0x01;//蜂鸣器开 0x00不开 + unsigned char hexOut[32] = { 0 }; // 存储转换后的十六进制数据 + memset(hexOut, 0, 32); // 清空hexOut + if (!isValidHex(data)) // 检查数据是否合法 + { + return Data_Is_Illegal_Error; // 数据非法 + } + hexStrToByte(data, hexOut); // 将数据转换为字节数组 + memcpy(com + 6, hexOut, 16); // 将数据添加到命令中 + + CheckSumOut(com, com[1]); // 计算校验和 + if (m_SerialPort->isOpen()) // 检查串口是否打开 + { + qint64 len = m_SerialPort->write(QByteArray((char*)com, com[1])); // 发送命令 + if (len != com[1]) // 检查发送长度 + { + return Send_Data_Error; // 发送错误 + } + // 等待请求完成 + sleepMs(200); + + QByteArray readData = m_SerialPort->readAll(); // 读取返回数据 + unsigned char revData[32] = { 0 }; // 存储返回数据 + memcpy(revData, readData.data(), readData.size()); // 复制返回数据 + if ((revData[0] == 0x01) && (revData[1] == 0x08) && (revData[2] == com[2]) && (revData[3] == 0x20)) //判断是否为写数据返回的数据包 + { + bool status = CheckSumIn(revData, revData[1]); //计算校验和 + if (status) + { + if (revData[4] == 0x00) //写数据块成功 + { + return No_Error; // 返回无错误 + } + } + else + { + return Received_Data_Check_Error; // 校验和错误 + } + } + else + { + return Received_Data_Error; // 返回数据错误 + } + } + return Serial_Error; // 串口错误 +} + +RFIDFunction::ErrorCode RFIDFunction::readDataFromBlock(KeyType type, DataBlock block, QByteArray& data) +{ + unsigned char com[32] = { 0 }; // 命令数组 + com[0] = 0x01; // 命令头 + com[1] = 0x08; // 数据长度 + switch (type)//只有两种密码,A和B + { + case RFIDFunction::KEY_A: + com[2] = 0xA3; // 设置为KEY_A + break; + case RFIDFunction::KEY_B: + com[2] = 0x5C; // 设置为KEY_B + break; + default: + com[2] = 0xA3; // 默认设置为KEY_A + break; + } + com[3] = 0x20; // 额外数据 + + memcpy(com + 4, &block, 1); // 将数据块添加到命令中 + + com[5] = 0x01;//蜂鸣器开 0x00不开 + com[6] = 0x00;//保留 + CheckSumOut(com, com[1]); // 计算校验和 + if (m_SerialPort->isOpen()) // 检查串口是否打开 + { + qint64 len = m_SerialPort->write(QByteArray((char*)com, com[1])); // 发送命令 + if (len != com[1]) // 检查发送长度 + { + return Send_Data_Error; // 发送错误 + } + // 等待请求完成 + sleepMs(200); + QByteArray readData = m_SerialPort->readAll(); // 读取返回数据 + //QByteArray AAA = readData.toHex(); // 转换为十六进制字符串 + unsigned char revData[32] = { 0 }; // 存储返回数据 + memcpy(revData, readData.data(), readData.size()); // 复制返回数据 + if ((revData[0] == 0x01) && (revData[1] == 0x16) && (revData[2] == com[2]) && (revData[3] == 0x20)) //判断是否为写数据返回的数据包 + { + bool status = CheckSumIn(revData, revData[1]); //计算校验和 + if (status) + { + if (revData[4] == 0x00) //写数据块成功 + { + data = QByteArray::fromHex(readData.mid(3,16)); + return No_Error; // 返回无错误 + } + } + else + { + return Received_Data_Check_Error; // 校验和错误 + } + } + else + { + return Received_Data_Error; // 返回数据错误 + } + } + return Serial_Error; // 串口错误 +} + + +RFIDFunction::ErrorCode RFIDFunction::setWorkMode(WorkMode mode, DataBlock block, UploadMode uploadMode) +{ + unsigned char com[32] = { 0 }; // 命令数组 + com[0] = 0x03; // 命令头 + com[1] = 0x08; // 数据长度 + com[2] = 0xC1; // 工作模式 + com[3] = 0x20; // 设备号数据 + + memcpy(com + 4, &mode, 1); // 将工作模式添加到命令中 + switch (mode) + { + case RFIDFunction::Command_Mode: + com[5] = 0x00; + com[6] = 0x00; + break; + case RFIDFunction::Auto_Read_Card_Num_Mode: + com[5] = 0x00; + com[6] = uploadMode; + break; + case RFIDFunction::Auto_Read_Data_Mode: + case RFIDFunction::Auto_Read_Card_Num_Data_Mode: + default: + com[5] = block; + com[6] = uploadMode; + break; + } + CheckSumOut(com, com[1]); // 计算校验和 + if (m_SerialPort->isOpen()) // 检查串口是否打开 + { + qint64 len = m_SerialPort->write(QByteArray((char*)com, com[1])); // 发送命令 + if (len != com[1]) // 检查发送长度 + { + return Send_Data_Error; // 发送错误 + } + // 等待请求完成 + sleepMs(200); + QByteArray readData = m_SerialPort->readAll(); // 读取返回数据 + QByteArray AAA = readData.toHex(); // 转换为十六进制字符串 + unsigned char revData[32] = { 0 }; // 存储返回数据 + memcpy(revData, readData.data(), readData.size()); // 复制返回数据 + if ((revData[0] == 0x03) && (revData[1] == 0x08) && (revData[2] == com[2]) && (revData[3] == 0x20)) //判断是否为写数据返回的数据包 + { + bool status = CheckSumIn(revData, revData[1]); //计算校验和 + if (status) + { + if (revData[4] == 0x00) //写数据块成功 + { + return No_Error; // 返回无错误 + } + } + else + { + return Received_Data_Check_Error; // 校验和错误 + } + } + else + { + return Received_Data_Error; // 返回数据错误 + } + } + return Serial_Error; // 串口错误 +} + +RFIDFunction::ErrorCode RFIDFunction::getReaderAddress(QByteArray& psw) +{ + unsigned char com[32] = { 0 }; // 命令数组 + com[0] = 0x02; // 命令头 + com[1] = 0x08; // 数据长度 + com[2] = 0xB0; // 命令类型 + com[3] = 0x00; // 额外数据 + com[4] = 0x00; // 额外数据 + com[5] = 0x00; // 额外数据 + com[6] = 0x00; // 额外数据 + + CheckSumOut(com, com[1]); // 计算校验和 + + QByteArray AAA = QByteArray((char*)com, com[1]).toHex(); // 转换为十六进制字符串 + if (m_SerialPort->isOpen()) // 检查串口是否打开 + { + qint64 len = m_SerialPort->write(QByteArray((char*)com, com[1])); // 发送命令 + if (len != com[1]) // 检查发送长度 + { + return Send_Data_Error; // 发送错误 + } + // 等待请求完成 + sleepMs(200); + + QByteArray readData = m_SerialPort->readAll(); // 读取返回数据 + unsigned char revData[32] = { 0 }; // 存储返回数据 + memcpy(revData, readData.data(), readData.size()); // 复制返回数据 + if ((revData[0] == 0x02) && (revData[1] == 0x08) && (revData[2] == com[2])) //判断是否为写数据返回的数据包 + { + bool status = CheckSumIn(revData, revData[1]); //计算校验和 + if (status) + { + if (revData[4] == 0x00) //写数据块成功 + { + psw = QByteArray::fromHex(QByteArray(revData[5], 1)); + return No_Error; // 返回无错误 + } + } + else + { + return Received_Data_Check_Error; // 校验和错误 + } + } + else + { + return Received_Data_Error; // 返回数据错误 + } + } + return Serial_Error; // 串口错误 +} diff --git a/rfid/rfidfunction.h b/rfid/rfidfunction.h new file mode 100644 index 0000000..81304c2 --- /dev/null +++ b/rfid/rfidfunction.h @@ -0,0 +1,171 @@ +#pragma once + +#include +#include +#include +#include "posix_qextserialport.h" + +class RFIDFunction:public QObject +{ + Q_OBJECT +public: + enum ControlBlock//加密块 + { + Sector_0_Block_3 = 3, + Sector_1_Block_3 = 7, + Sector_2_Block_3 = 11, + Sector_3_Block_3 = 15, + Sector_4_Block_3 = 19, + Sector_5_Block_3 = 23, + Sector_6_Block_3 = 27, + Sector_7_Block_3 = 31, + Sector_8_Block_3 = 35, + Sector_9_Block_3 = 39, + Sector_10_Block_3 = 43, + Sector_11_Block_3 = 47, + Sector_12_Block_3 = 51, + Sector_13_Block_3 = 55, + Sector_14_Block_3 = 59, + Sector_15_Block_3 = 63 + }; + + enum KeyType//密钥类型 + { + KEY_A = 0, // 密钥A + KEY_B // 密钥B + }; + + enum DataBlock //数据块 + { + Sector_0_Block_1 = 1, + Sector_0_Block_2 = 2, + + Sector_1_Block_0 = 4, + Sector_1_Block_1 = 5, + Sector_1_Block_2 = 6, + + Sector_2_Block_0 = 8, + Sector_2_Block_1 = 9, + Sector_2_Block_2 = 10, + + Sector_3_Block_0 = 12, + Sector_3_Block_1 = 13, + Sector_3_Block_2 = 14, + + Sector_4_Block_0 = 16, + Sector_4_Block_1 = 17, + Sector_4_Block_2 = 18, + + Sector_5_Block_0 = 20, + Sector_5_Block_1 = 21, + Sector_5_Block_2 = 22, + + Sector_6_Block_0 = 24, + Sector_6_Block_1 = 25, + Sector_6_Block_2 = 26, + + Sector_7_Block_0 = 28, + Sector_7_Block_1 = 29, + Sector_7_Block_2 = 30, + + Sector_8_Block_0 = 32, + Sector_8_Block_1 = 33, + Sector_8_Block_2 = 34, + + Sector_9_Block_0 = 36, + Sector_9_Block_1 = 37, + Sector_9_Block_2 = 38, + + Sector_10_Block_0 = 40, + Sector_10_Block_1 = 41, + Sector_10_Block_2 = 42, + + Sector_11_Block_0 = 44, + Sector_11_Block_1 = 45, + Sector_11_Block_2 = 46, + + Sector_12_Block_0 = 48, + Sector_12_Block_1 = 49, + Sector_12_Block_2 = 50, + + Sector_13_Block_0 = 52, + Sector_13_Block_1 = 53, + Sector_13_Block_2 = 54, + + Sector_14_Block_0 = 56, + Sector_14_Block_1 = 57, + Sector_14_Block_2 = 58, + + Sector_15_Block_0 = 60, + Sector_15_Block_1 = 61, + Sector_15_Block_2 = 62 + }; + + enum KeyFunction + { + KeyA_Same_KeyB = 0, // KEYA和KEYB相同 + KeyB_Control_KeyA // KEYB控制KEYA + }; + + + + enum WorkMode //工作模式 + { + Command_Mode = 0x01,//命令模式(关闭自动读卡),该模式会关闭自动读卡功能 + Auto_Read_Card_Num_Mode = 0x02,//自动读卡号 + Auto_Read_Data_Mode = 0x03,//自动读块数据,块号为要自动读的数据块编号 + Auto_Read_Card_Num_Data_Mode = 0x04//自动读卡号与指定块数据,块号为要自动读的数据块编号 + }; + + enum UploadMode//上传模式 + { + Auto_Upload = 0x00,//读卡后主动发送数据,主动将读到的数据发送给上位机 + Command_Upload = 0x01//读卡后被动发送数据,需要收到上位机获取数据的命令才将读到的数据发送给上位机 + }; + + + + enum ErrorCode + { + No_Error = 0, // 无错误 + Serial_Error, // 串口错误 + Send_Data_Error, // 发送数据错误 + Data_Is_Empty_Error, // 数据为空错误 + Data_Size_More_Than_8192_Error, // 数据大小超过8192错误 + Received_Data_Check_Error, // 接收数据校验错误 + Received_Data_Error, // 接收数据错误 + Data_Is_Illegal_Error // 数据非法错误 + }; + +public: + RFIDFunction(QObject* parent); // 构造函数 + ~RFIDFunction(); // 析构函数 + void CheckSumOut(unsigned char* buf, unsigned char len); + bool CheckSumIn(unsigned char* buf, unsigned char len); + + + ErrorCode initSerialPortAndOpen(const QString& portName, // 初始化串口并打开 + BaudRateType baudRate = BAUD9600, // 波特率 + DataBitsType setDataBits = DATA_8, // 数据位 + StopBitsType stopBits = STOP_1, // 停止位 + ParityType parity = PAR_NONE // 校验位 + ); + + static const QByteArray createPassword(const QByteArray& info); // 创建密码 + + bool getSerialState(); // 获取串口状态 + ErrorCode setOriginPassword(const QByteArray& psw); // 设置原始密码 + ErrorCode setWriteAndReadPassword(const QByteArray& writePassword, const QByteArray& readPassword, KeyFunction keyFunc); // 设置读写密码 + ErrorCode setEncryptedBlock(KeyType type, ControlBlock block); // 设置加密块 + ErrorCode writeDataToBlock(KeyType type, DataBlock block, const QByteArray& data); // 写数据到块 + ErrorCode readDataFromBlock(KeyType type, DataBlock block, QByteArray& data); // 从块读取数据 + ErrorCode setWorkMode(WorkMode mode, DataBlock block = Sector_1_Block_2, UploadMode uploadMode = Auto_Upload);//设置工作模式 + ErrorCode getReaderAddress(QByteArray& psw); // 获取读卡器地址 + + + +private: + bool m_SerialSate; // 串口状态 + Posix_QextSerialPort *m_SerialPort;; // 串口对象 + +}; diff --git a/rfid/sm3.cpp b/rfid/sm3.cpp new file mode 100644 index 0000000..13f662f --- /dev/null +++ b/rfid/sm3.cpp @@ -0,0 +1,310 @@ + +#include "sm3.h" +#include +#include +#ifndef GET_ULONG_BE +#define GET_ULONG_BE(n,b,i) \ +{ \ + (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ + | ( (uint32_t) (b)[(i) + 1] << 16 ) \ + | ( (uint32_t) (b)[(i) + 2] << 8 ) \ + | ( (uint32_t) (b)[(i) + 3] ); \ +} +#endif + +#ifndef PUT_ULONG_BE +#define PUT_ULONG_BE(n,b,i) \ +{ \ + (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ + (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ + (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ + (b)[(i) + 3] = (unsigned char) ( (n) ); \ +} +#endif + +void SM3::sm3_starts( sm3_context *ctx ) +{ + ctx->total[0] = 0; + ctx->total[1] = 0; + + ctx->state[0] = 0x7380166F; + ctx->state[1] = 0x4914B2B9; + ctx->state[2] = 0x172442D7; + ctx->state[3] = 0xDA8A0600; + ctx->state[4] = 0xA96F30BC; + ctx->state[5] = 0x163138AA; + ctx->state[6] = 0xE38DEE4D; + ctx->state[7] = 0xB0FB0E4E; + +} + +static void sm3_process( sm3_context *ctx, unsigned char data[64] ) +{ + uint32_t SS1, SS2, TT1, TT2, W[68],W1[64]; + uint32_t A, B, C, D, E, F, G, H; + uint32_t T[64]; + uint32_t Temp1,Temp2,Temp3,Temp4,Temp5; + int j; + for(j = 0; j < 16; j++) + T[j] = 0x79CC4519; + for(j =16; j < 64; j++) + T[j] = 0x7A879D8A; + + GET_ULONG_BE( W[ 0], data, 0 ); + GET_ULONG_BE( W[ 1], data, 4 ); + GET_ULONG_BE( W[ 2], data, 8 ); + GET_ULONG_BE( W[ 3], data, 12 ); + GET_ULONG_BE( W[ 4], data, 16 ); + GET_ULONG_BE( W[ 5], data, 20 ); + GET_ULONG_BE( W[ 6], data, 24 ); + GET_ULONG_BE( W[ 7], data, 28 ); + GET_ULONG_BE( W[ 8], data, 32 ); + GET_ULONG_BE( W[ 9], data, 36 ); + GET_ULONG_BE( W[10], data, 40 ); + GET_ULONG_BE( W[11], data, 44 ); + GET_ULONG_BE( W[12], data, 48 ); + GET_ULONG_BE( W[13], data, 52 ); + GET_ULONG_BE( W[14], data, 56 ); + GET_ULONG_BE( W[15], data, 60 ); + +#define FF0(x,y,z) ( (x) ^ (y) ^ (z)) +#define FF1(x,y,z) (((x) & (y)) | ( (x) & (z)) | ( (y) & (z))) + +#define GG0(x,y,z) ( (x) ^ (y) ^ (z)) +#define GG1(x,y,z) (((x) & (y)) | ( (~(x)) & (z)) ) + + +#define SHL(x,n) (((x) & 0xFFFFFFFF) << n) +#define ROTL(x,n) (SHL((x),n) | ((x) >> (32 - n))) + +#define P0(x) ((x) ^ ROTL((x),9) ^ ROTL((x),17)) +#define P1(x) ((x) ^ ROTL((x),15) ^ ROTL((x),23)) + + for(j = 16; j < 68; j++ ) + { + //W[j] = P1( W[j-16] ^ W[j-9] ^ ROTL(W[j-3],15)) ^ ROTL(W[j - 13],7 ) ^ W[j-6]; + //Why thd release's result is different with the debug's ? + //Below is okay. Interesting, Perhaps VC6 has a bug of Optimizaiton. + + Temp1 = W[j-16] ^ W[j-9]; + Temp2 = ROTL(W[j-3],15); + Temp3 = Temp1 ^ Temp2; + Temp4 = P1(Temp3); + Temp5 = ROTL(W[j - 13],7 ) ^ W[j-6]; + W[j] = Temp4 ^ Temp5; + } + + + for(j = 0; j < 64; j++) + { + W1[j] = W[j] ^ W[j+4]; + } + + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + F = ctx->state[5]; + G = ctx->state[6]; + H = ctx->state[7]; + + for(j =0; j < 16; j++) + { + SS1 = ROTL((ROTL(A,12) + E + ROTL(T[j],j)), 7); + SS2 = SS1 ^ ROTL(A,12); + TT1 = FF0(A,B,C) + D + SS2 + W1[j]; + TT2 = GG0(E,F,G) + H + SS1 + W[j]; + D = C; + C = ROTL(B,9); + B = A; + A = TT1; + H = G; + G = ROTL(F,19); + F = E; + E = P0(TT2); + } + + for(j =16; j < 64; j++) + { + SS1 = ROTL((ROTL(A,12) + E + ROTL(T[j],j)), 7); + SS2 = SS1 ^ ROTL(A,12); + TT1 = FF1(A,B,C) + D + SS2 + W1[j]; + TT2 = GG1(E,F,G) + H + SS1 + W[j]; + D = C; + C = ROTL(B,9); + B = A; + A = TT1; + H = G; + G = ROTL(F,19); + F = E; + E = P0(TT2); + } + + ctx->state[0] ^= A; + ctx->state[1] ^= B; + ctx->state[2] ^= C; + ctx->state[3] ^= D; + ctx->state[4] ^= E; + ctx->state[5] ^= F; + ctx->state[6] ^= G; + ctx->state[7] ^= H; + +} + + +void SM3::sm3_update( sm3_context *ctx, unsigned char *input, int ilen ) +{ + int fill; + uint32_t left; + + if( ilen <= 0 ) + return; + + left = ctx->total[0] & 0x3F; + fill = 64 - left; + + ctx->total[0] += ilen; + ctx->total[0] &= 0xFFFFFFFF; + + if( ctx->total[0] < (uint32_t) ilen ) + ctx->total[1]++; + + if( left && ilen >= fill ) + { + memcpy( (void *) (ctx->buffer + left), + (void *) input, fill ); + sm3_process( ctx, ctx->buffer ); + input += fill; + ilen -= fill; + left = 0; + } + + while( ilen >= 64 ) + { + sm3_process( ctx, input ); + input += 64; + ilen -= 64; + } + + if( ilen > 0 ) + { + memcpy( (void *) (ctx->buffer + left), + (void *) input, ilen ); + } +} + +static const unsigned char sm3_padding[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +void SM3::sm3_finish( sm3_context *ctx, unsigned char output[32] ) +{ + uint32_t last, padn; + uint32_t high, low; + unsigned char msglen[8]; + + high = ( ctx->total[0] >> 29 ) + | ( ctx->total[1] << 3 ); + low = ( ctx->total[0] << 3 ); + + PUT_ULONG_BE( high, msglen, 0 ); + PUT_ULONG_BE( low, msglen, 4 ); + + last = ctx->total[0] & 0x3F; + padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); + + sm3_update( ctx, (unsigned char *) sm3_padding, padn ); + sm3_update( ctx, msglen, 8 ); + + PUT_ULONG_BE( ctx->state[0], output, 0 ); + PUT_ULONG_BE( ctx->state[1], output, 4 ); + PUT_ULONG_BE( ctx->state[2], output, 8 ); + PUT_ULONG_BE( ctx->state[3], output, 12 ); + PUT_ULONG_BE( ctx->state[4], output, 16 ); + PUT_ULONG_BE( ctx->state[5], output, 20 ); + PUT_ULONG_BE( ctx->state[6], output, 24 ); + PUT_ULONG_BE( ctx->state[7], output, 28 ); +} + +void SM3::sm3Hash( unsigned char *input, int ilen, + unsigned char output[32] ) +{ + sm3_context ctx; + + sm3_starts( &ctx ); + sm3_update( &ctx, input, ilen ); + sm3_finish( &ctx, output ); + + memset( &ctx, 0, sizeof( sm3_context ) ); +} + +void SM3::sm3_hmac_starts( sm3_context *ctx, unsigned char *key, int keylen ) +{ + int i; + unsigned char sum[32]; + + if( keylen > 64 ) + { + sm3Hash( key, keylen, sum ); + keylen = 32; + key = sum; + } + + memset( ctx->ipad, 0x36, 64 ); + memset( ctx->opad, 0x5C, 64 ); + + for( i = 0; i < keylen; i++ ) + { + ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); + ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); + } + + sm3_starts( ctx); + sm3_update( ctx, ctx->ipad, 64 ); + + memset( sum, 0, sizeof( sum ) ); +} + +void SM3::sm3_hmac_update( sm3_context *ctx, unsigned char *input, int ilen ) +{ + sm3_update( ctx, input, ilen ); +} + +void SM3::sm3_hmac_finish( sm3_context *ctx, unsigned char output[32] ) +{ + int hlen; + unsigned char tmpbuf[32]; + hlen = 32; + sm3_finish( ctx, tmpbuf ); + sm3_starts( ctx ); + sm3_update( ctx, ctx->opad, 64 ); + sm3_update( ctx, tmpbuf, hlen ); + sm3_finish( ctx, output ); + memset( tmpbuf, 0, sizeof( tmpbuf ) ); +} + +void SM3::sm3_hmac( unsigned char *key, int keylen, + unsigned char *input, int ilen, + unsigned char output[32] ) +{ + sm3_context ctx; + + sm3_hmac_starts( &ctx, key, keylen); + sm3_hmac_update( &ctx, input, ilen ); + sm3_hmac_finish( &ctx, output ); + + memset( &ctx, 0, sizeof( sm3_context ) ); +} + + + + + + + diff --git a/rfid/sm3.h b/rfid/sm3.h new file mode 100644 index 0000000..934332b --- /dev/null +++ b/rfid/sm3.h @@ -0,0 +1,37 @@ + +#ifndef SM3_H +#define SM3_H +#include +#include + +typedef struct +{ + uint32_t total[2]; + uint32_t state[8]; + unsigned char buffer[64]; + + unsigned char ipad[64]; + unsigned char opad[64]; + +}sm3_context; +class SM3 +{ +public: + + + static void sm3_starts(sm3_context* ctx); + static void sm3_update(sm3_context* ctx, unsigned char* input, int ilen); + static void sm3_finish(sm3_context* ctx, unsigned char output[32]); + static void sm3Hash(unsigned char* input, int ilen, + unsigned char output[32]); + + static void sm3_hmac_starts(sm3_context* ctx, unsigned char* key, int keylen); + static void sm3_hmac_update(sm3_context* ctx, unsigned char* input, int ilen); + static void sm3_hmac_finish(sm3_context* ctx, unsigned char output[32]); + static void sm3_hmac(unsigned char* key, int keylen, + unsigned char* input, int ilen, + unsigned char output[32]); +}; + + +#endif /* sm3.h */ diff --git a/rfid/sm4.cpp b/rfid/sm4.cpp new file mode 100644 index 0000000..da723d4 --- /dev/null +++ b/rfid/sm4.cpp @@ -0,0 +1,231 @@ + +#include "sm4.h" +#include +#include + +#ifndef GET_ULONG_BE +#define GET_ULONG_BE(n,b,i) \ +{ \ + (n) = ( (unsigned long) (b)[(i) ] << 24 ) \ + | ( (unsigned long) (b)[(i) + 1] << 16 ) \ + | ( (unsigned long) (b)[(i) + 2] << 8 ) \ + | ( (unsigned long) (b)[(i) + 3] ); \ +} +#endif + +#ifndef PUT_ULONG_BE +#define PUT_ULONG_BE(n,b,i) \ +{ \ + (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ + (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ + (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ + (b)[(i) + 3] = (unsigned char) ( (n) ); \ +} +#endif + +#define SHL(x,n) (((x) & 0xFFFFFFFF) << n) +#define ROTL(x,n) (SHL((x),n) | ((x) >> (32 - n))) + +#define SWAP(a,b) { unsigned long t = a; a = b; b = t; t = 0; } + +static const unsigned char SboxTable[16][16] = +{ +{0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05}, +{0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99}, +{0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62}, +{0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6}, +{0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8}, +{0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35}, +{0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87}, +{0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e}, +{0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1}, +{0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3}, +{0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f}, +{0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51}, +{0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8}, +{0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0}, +{0x89,0x69,0x97,0x4a,0x0c,0x96,0x77,0x7e,0x65,0xb9,0xf1,0x09,0xc5,0x6e,0xc6,0x84}, +{0x18,0xf0,0x7d,0xec,0x3a,0xdc,0x4d,0x20,0x79,0xee,0x5f,0x3e,0xd7,0xcb,0x39,0x48} +}; + + +static const unsigned long FK[4] = {0xa3b1bac6,0x56aa3350,0x677d9197,0xb27022dc}; + +static const unsigned long CK[32] = +{ +0x00070e15,0x1c232a31,0x383f464d,0x545b6269, +0x70777e85,0x8c939aa1,0xa8afb6bd,0xc4cbd2d9, +0xe0e7eef5,0xfc030a11,0x181f262d,0x343b4249, +0x50575e65,0x6c737a81,0x888f969d,0xa4abb2b9, +0xc0c7ced5,0xdce3eaf1,0xf8ff060d,0x141b2229, +0x30373e45,0x4c535a61,0x686f767d,0x848b9299, +0xa0a7aeb5,0xbcc3cad1,0xd8dfe6ed,0xf4fb0209, +0x10171e25,0x2c333a41,0x484f565d,0x646b7279 +}; + + +static unsigned char sm4Sbox(unsigned char inch) +{ + unsigned char *pTable = (unsigned char *)SboxTable; + unsigned char retVal = (unsigned char)(pTable[inch]); + return retVal; +} + +static unsigned long sm4Lt(unsigned long ka) +{ + unsigned long bb = 0; + unsigned long c = 0; + unsigned char a[4]; + unsigned char b[4]; + PUT_ULONG_BE(ka,a,0) + b[0] = sm4Sbox(a[0]); + b[1] = sm4Sbox(a[1]); + b[2] = sm4Sbox(a[2]); + b[3] = sm4Sbox(a[3]); + GET_ULONG_BE(bb,b,0) + c =bb^(ROTL(bb, 2))^(ROTL(bb, 10))^(ROTL(bb, 18))^(ROTL(bb, 24)); + return c; +} + +static unsigned long sm4F(unsigned long x0, unsigned long x1, unsigned long x2, unsigned long x3, unsigned long rk) +{ + return (x0^sm4Lt(x1^x2^x3^rk)); +} + +static unsigned long sm4CalciRK(unsigned long ka) +{ + unsigned long bb = 0; + unsigned long rk = 0; + unsigned char a[4]; + unsigned char b[4]; + PUT_ULONG_BE(ka,a,0) + b[0] = sm4Sbox(a[0]); + b[1] = sm4Sbox(a[1]); + b[2] = sm4Sbox(a[2]); + b[3] = sm4Sbox(a[3]); + GET_ULONG_BE(bb,b,0) + rk = bb^(ROTL(bb, 13))^(ROTL(bb, 23)); + return rk; +} + +static void sm4_setkey( unsigned long SK[32], unsigned char key[16] ) +{ + unsigned long MK[4]; + unsigned long k[36]; + unsigned long i = 0; + + GET_ULONG_BE( MK[0], key, 0 ); + GET_ULONG_BE( MK[1], key, 4 ); + GET_ULONG_BE( MK[2], key, 8 ); + GET_ULONG_BE( MK[3], key, 12 ); + k[0] = MK[0]^FK[0]; + k[1] = MK[1]^FK[1]; + k[2] = MK[2]^FK[2]; + k[3] = MK[3]^FK[3]; + for(; i<32; i++) + { + k[i+4] = k[i] ^ (sm4CalciRK(k[i+1]^k[i+2]^k[i+3]^CK[i])); + SK[i] = k[i+4]; + } + +} + +static void sm4_one_round( unsigned long sk[32], + unsigned char input[16], + unsigned char output[16] ) +{ + unsigned long i = 0; + unsigned long ulbuf[36]; + + memset(ulbuf, 0, sizeof(ulbuf)); + GET_ULONG_BE( ulbuf[0], input, 0 ) + GET_ULONG_BE( ulbuf[1], input, 4 ) + GET_ULONG_BE( ulbuf[2], input, 8 ) + GET_ULONG_BE( ulbuf[3], input, 12 ) + while(i<32) + { + ulbuf[i+4] = sm4F(ulbuf[i], ulbuf[i+1], ulbuf[i+2], ulbuf[i+3], sk[i]); + i++; + } + PUT_ULONG_BE(ulbuf[35],output,0); + PUT_ULONG_BE(ulbuf[34],output,4); + PUT_ULONG_BE(ulbuf[33],output,8); + PUT_ULONG_BE(ulbuf[32],output,12); +} + +void SM4::sm4_setkey_enc( sm4_context *ctx, unsigned char key[16] ) +{ + ctx->mode = SM4_ENCRYPT; + sm4_setkey( ctx->sk, key ); +} + +void SM4::sm4_setkey_dec( sm4_context *ctx, unsigned char key[16] ) +{ + int i; + ctx->mode = SM4_ENCRYPT; + sm4_setkey( ctx->sk, key ); + for( i = 0; i < 16; i ++ ) + { + SWAP( ctx->sk[ i ], ctx->sk[ 31-i] ); + } +} + +void SM4::sm4_crypt_ecb( sm4_context *ctx, + int mode, + int length, + unsigned char *input, + unsigned char *output) +{ + while( length > 0 ) + { + sm4_one_round( ctx->sk, input, output ); + input += 16; + output += 16; + length -= 16; + } + +} + +void SM4::sm4_crypt_cbc( sm4_context *ctx, + int mode, + int length, + unsigned char iv[16], + unsigned char *input, + unsigned char *output ) +{ + int i; + unsigned char temp[16]; + + if( mode == SM4_ENCRYPT ) + { + while( length > 0 ) + { + for( i = 0; i < 16; i++ ) + output[i] = (unsigned char)( input[i] ^ iv[i] ); + + sm4_one_round( ctx->sk, output, output ); + memcpy( iv, output, 16 ); + + input += 16; + output += 16; + length -= 16; + } + } + else /* SM4_DECRYPT */ + { + while( length > 0 ) + { + memcpy( temp, input, 16 ); + sm4_one_round( ctx->sk, input, output ); + + for( i = 0; i < 16; i++ ) + output[i] = (unsigned char)( output[i] ^ iv[i] ); + + memcpy( iv, temp, 16 ); + + input += 16; + output += 16; + length -= 16; + } + } +} diff --git a/rfid/sm4.h b/rfid/sm4.h new file mode 100644 index 0000000..eb0a2ef --- /dev/null +++ b/rfid/sm4.h @@ -0,0 +1,34 @@ +#ifndef SM4_H +#define SM4_H + +#define SM4_ENCRYPT 1 +#define SM4_DECRYPT 0 + +typedef struct +{ + int mode; + unsigned long sk[32]; +} +sm4_context; + +class SM4 +{ +public: + static void sm4_setkey_enc(sm4_context* ctx, unsigned char key[16]); + + static void sm4_setkey_dec(sm4_context* ctx, unsigned char key[16]); + + static void sm4_crypt_ecb(sm4_context* ctx, + int mode, + int length, + unsigned char* input, + unsigned char* output); + static void sm4_crypt_cbc(sm4_context* ctx, + int mode, + int length, + unsigned char iv[16], + unsigned char* input, + unsigned char* output); +}; + +#endif /* sm4.h */ diff --git a/scene/SceneEditOption.cpp b/scene/SceneEditOption.cpp new file mode 100644 index 0000000..cdcbcbe --- /dev/null +++ b/scene/SceneEditOption.cpp @@ -0,0 +1,874 @@ +#include "SceneEditOption.h" +#include "pictextitem.h" +#include "ui_sceneEditOption.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "myview.h" +#include "LogInfo.h" +#include +#include +#include +#include +#include + +MoveInput* moveInput; +SceneEditOption::SceneEditOption(QWidget *parent) : + QWidget(parent), + ui(new Ui::SceneEditOption),newScene(0) +{ + ui->setupUi(this); + editMode = SCENE; + xmlfileName = ""; + dialogFileOperation = new DialogFileOperation(0); +#ifdef MYSAVEFILEDLG + dialogSaveFile =new DialogSaveFile(0); + //connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); +#endif + m_CreateImageFlag = false; + m_pSavePicScene = new QGraphicsScene(); + m_pSavePicScene->setSceneRect(QRectF(0, 0, 3200, MAX_PRINT_ROW_NUM)); //生成图片的场景 + moveInput = new MoveInput(parent); + doc_DMCode = new QTextDocument(); +} + +SceneEditOption::~SceneEditOption() +{ + if(m_pSavePicScene) + { + delete m_pSavePicScene; + } + if(moveInput) + { + delete moveInput; + } + delete doc_DMCode; + doc_DMCode = NULL; +} + +void SceneEditOption::bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText){ + this->stackedWidgetOption = stackedWidgetOption;// stackedWidgetOption + this->stackedWidgetText = stackedWidgetText; + connect(this->stackedWidgetOption,SIGNAL(currentChanged(int)),this,SLOT(onStackedWidgetOptionCurrentChanged(int))); +} + +void SceneEditOption::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; +} +void SceneEditOption::enableButtonSave(){ + if(!ui->saveButton->isEnabled()) + ui->saveButton->setEnabled(true); +} +void SceneEditOption::onStackedWidgetOptionCurrentChanged(int index) +{ + const QString objectName=this->stackedWidgetOption->currentWidget()->objectName(); +// const QString objectName=this->stackedWidgetOption->widget(index)->objectName(); + qDebug()<<"index="<para.EditMode) + { +// qDebug()<<"显示新场景--open"; + this->pPicScene->setIsdrawBackground(true); + this->stackedWidgetOption->hide(); +// //show_scene_new_dlg(); +// foreach (QLayout *lay, listQLayout) { +// newScene->showQLayout(lay,false); +// } + newScene->Layout_ToNew(); + newScene->show(); + } + else + { +// qDebug()<<"隐藏新场景--hide"; + this->pPicScene->setIsdrawBackground(false); + this->stackedWidgetOption->setVisible(true); + newScene->hide(); + newScene->Layout_ToDefault(); +// foreach (QLayout *lay, listQLayout) { +// newScene->showQLayout(lay,true); +// } + } + + + + + + + } +} + +void SceneEditOption::bindScene(PicScene *pPicScene, QGraphicsView *pGraphicViewer,QTextEdit *pTextEdit){ + this->pPicScene = pPicScene; + this->pViewer = pGraphicViewer; + this->textEdit = pTextEdit; + //connect(pPicScene,SIGNAL(xmlContentChanged ()),this,SLOT(enableButtonSave())); + connect(pPicScene,SIGNAL(selectionChanged()),this,SLOT(enableButtonSave())); + + ui->saveButton->setEnabled(false); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + connect(dialogFileOperation,SIGNAL(createSceneImage(QString)),this,SLOT(onCreateSceneImage(QString))); +#ifdef MYSAVEFILEDLG + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); +#endif + //edit@12-06 显示网格线 + this->pPicScene->setIsdrawBackground(true); +} + +void SceneEditOption::show_scene_new_dlg() +{ + QWidget *tabMainWindow=this->parentWidget()->parentWidget(); + + if(!newScene) + { + this->stackedWidgetOption->hide(); + newScene=new FormScenedlg(tabMainWindow); + newScene->setObjectName("newScene"); + + newScene->setAutoFillBackground(true); + newScene->setPalette(tabMainWindow->palette()); + + newScene->bindScene(this->pPicScene,this->pViewer,this->textEdit); + //edit@12-07另一种信号通信 + connect(newScene,SIGNAL(delButton()),this,SLOT(on_delButton_pressed())); + connect(newScene,SIGNAL(saveButton()),this,SLOT(on_saveButton_pressed())); + connect(newScene,SIGNAL(openfileButton()),this,SLOT(on_openfileButton_pressed())); + connect(newScene,SIGNAL(previewButton()),this,SLOT(on_previewButton_pressed())); + //connect(newScene,SIGNAL(previewButton()),this,SIGNAL(previewScene())); + + connect(newScene,SIGNAL(addButton()),this,SLOT(on_addButton_pressed())); + connect(newScene,SIGNAL(EditItemButton()),this,SLOT(on_EditItemButton_pressed())); + connect(newScene,SIGNAL(saveAsButton()),this,SLOT(on_saveAsButton_pressed())); + connect(newScene,SIGNAL(newfileButton()),this,SLOT(on_newfileButton_pressed())); + connect(newScene,SIGNAL(enlargeButton()),this,SLOT(on_enlargeButton_pressed())); + connect(newScene,SIGNAL(reduceButton()),this,SLOT(on_reduceButton_pressed())); + connect(newScene,SIGNAL(ZoomOrigin()),this,SLOT(on_test_pressed())); + connect(newScene,SIGNAL(btn_test2()),this,SLOT(on_btn_test2())); + connect(this->pPicScene,SIGNAL(showTextWidthHeight()),newScene,SLOT(reset_showTextWidthHeight())); + //connect(this->pPicScene,SIGNAL(adjustItemsPos()),newScene,SLOT(adjustItemsPosFalse())); + + newScene->move(0,270); + newScene->Layout_ToNew(); + } +} + +void SceneEditOption::on_previewButton_pressed() +{ + this->pPicScene->setIsdrawBackground(false); + emit previewScene(); +} + + +void SceneEditOption::on_addButton_pressed() +{ + pPicScene->clearSelection(); +#if 0 + emit addPicTextItem(); +#else + textItem = new PicTextItem(); + //textItem->setFont(myFont); + //textItem->setTextInteractionFlags(Qt::TextEditorInteraction); + pPicScene->addItem(textItem); + //textItem->setDefaultTextColor(myTextColor); + //QFont font = textItem->font(); + //font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + //textItem->setFont(font); + + QList items = pPicScene->items(); + if(pPicScene->items().count()>1){ + QRectF itemRect= items.at(1)->boundingRect(); + textItem->setPos( items.at(1)->scenePos().x()+itemRect.width()+20, items.at(1)->scenePos().y()); + } + //else textItem->setPos(0,0); + else textItem->setPos(this->pViewer->mapToScene(0,0));//edit@12-07 + + textItem->setPlainText("Vernon Bach Printer"); + ui->saveButton->setEnabled(true); + //qDebug()<<"sysPara->para.textEditCharSpace:"<para.textEditCharSpace; + + //edit@12-12 新的打开方式直接进入编辑模式 + textItem->setPlainText(""); + textItem->setSelected(true); + on_EditItemButton_pressed(); +#endif +} +bool SceneEditOption::maybeSave(){ + + if (xmlfileName.startsWith(QLatin1String(":/"))) + return true; + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("文档已经改变,是否保存?")); + QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == saveButton) { + on_saveButton_pressed(); + return false; + } else if (msgBox.clickedButton() == cancleSaveButton) { + return true; + } + else + return false; + + return true; +} +void SceneEditOption::on_newfileButton_pressed() +{ + if (maybeSave()) { + pPicScene->clear(); + pViewer->viewport()->update(); + unsigned char SpecialVarEnable = 0; + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); + xmlfileName = ""; + QFile file(xmlfileName); + emit fileNameChanged(QFileInfo(xmlfileName).fileName()); + } +#ifdef VARCOLOR + textEdit->insertHtml(QString("  ")); +#endif +} +void SceneEditOption::on_delButton_pressed() +{ +#if 0 + +#else + foreach (QGraphicsItem *item, pPicScene->selectedItems()) { + pPicScene->removeItem(item); + delete item; + ui->saveButton->setEnabled(true); + } +#endif +} +void SceneEditOption::on_saveAsButton_pressed() +{ + pPicScene->clearSelection(); +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); +#endif +} +void SceneEditOption::on_saveButton_pressed() +{ + pPicScene->clearSelection(); +#if 0 + +#else + if(xmlfileName.isEmpty()) + { + qDebug()<<"xml file null"; +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); + +#endif + } + else + { + pPicScene->update(); + saveFile(); + if(sysPara){ + sysPara->sysFile =xmlfileName; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); + } + //snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); + ui->saveButton->setEnabled(false); + emit fileNameChanged(QFileInfo(xmlfileName).fileName()); + } +#endif +} +void SceneEditOption::on_openfileButton_pressed() +{ + pPicScene->clearSelection(); +#if 0 + } +#else + dialogFileOperation->refreshListView(editMode); + dialogFileOperation->exec(); +#endif +} +void SceneEditOption::on_EditItemButton_pressed() +{ +#if 0 + +#else + foreach (QGraphicsItem *item, pPicScene->selectedItems()) + { + if(item) + { + PicTextItem *pTextItem = (PicTextItem *)item; + //qDebug()<<"edit Item"; + //ui->textEdit->setText(pTextItem->toHtml()); + textEdit->setHtml(pTextItem->toHtml()); + //切换到textedit的界面 + emit editItemMode(); + //stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + //stackedWidgetOption->setCurrentWidget(ui->textEditOption); + stackedWidgetText->setCurrentIndex(0); + stackedWidgetOption->setCurrentIndex(0); + ui->saveButton->setEnabled(true); + //edit@12-12 + pPicScene->clearSelection(); + item->setSelected(true); + break; + } + + } +#endif +} +void SceneEditOption::onEditItemDone() +{ +#if 1 + //stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); + //stackedWidgetOption->setCurrentWidget(ui->senceEditOption); + stackedWidgetText->setCurrentIndex(3); + stackedWidgetOption->setCurrentIndex(1); + foreach (QGraphicsItem *item, pPicScene->selectedItems()) + { + if(item) + { + PicTextItem *pTextItem = (PicTextItem *)item; + //qDebug()<<"edit Item done"; + QFont font = pTextItem->font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + pTextItem->setFont(font); + pTextItem->setHtml(textEdit->toHtml()); + onSceneAccepted(pTextItem); + } + + } +#endif +} +void SceneEditOption::onCreateSceneImage(QString filePath) +{ + m_CreateImageFlag = true; + m_pSavePicScene->clear(); + onFileOpen(filePath,false); +#if 1 + m_pSavePicScene->clearSelection(); + QSize size(m_pSavePicScene->itemsBoundingRect().width(),m_pSavePicScene->itemsBoundingRect().height()); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.save("./printScene.jpg");//图片 + QPainter painter(&image); + m_pSavePicScene->render(&painter,QRectF(),m_pSavePicScene->itemsBoundingRect()); + //qDebug()<<"scene rect:"<itemsBoundingRect(); + image.save("./printSceneView.png");//图片 + +#endif + m_CreateImageFlag = false; +} + +extern QStringList stringListRecive; + +void SceneEditOption::parseVbfile(QXmlStreamReader &reader) { + // int textItemPosX; + // int textItemPosY; + // textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x(); + // textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); + float pos_x,pos_y; + bool Condition= false ; + int CatchStartValue = -1; + int CatchValue = -1; + while (!reader.atEnd()) { + reader.readNext(); + if (reader.isStartElement()) { // 开始元素 + QString strElementName = reader.name().toString(); + if (QString::compare(strElementName, "VBfile") == 0) { + //qDebug() << QString::fromLocal8Bit("********** 开始元素 ********** "); + } else if (QString::compare(strElementName, QString("pointer_x")) == 0) { // 方式一 + reader.readNext(); + if (reader.isCharacters()) { + pos_x = reader.text().toString().toDouble(); + //qDebug() << QString("pointer_x:%1").arg(reader.text().toString()); + } + } else if (QString::compare(strElementName, QString("pointer_y")) == 0) { // 方式二 + pos_y = reader.readElementText().toDouble(); + //qDebug() << QString("pointer_y:%1").arg(reader.readElementText()); + } + else if (QString::compare(strElementName, QString("Condition")) == 0) { + Condition = reader.readElementText().toInt() ? true : false; + } + else if (QString::compare(strElementName, QString("CatchStartValue")) == 0) { + CatchStartValue = reader.readElementText().toInt(); + } + else if (QString::compare(strElementName, QString("CatchValue")) == 0) { + CatchValue = reader.readElementText().toInt(); + } + else if (QString::compare(strElementName, QString("html_src")) == 0) { + //qDebug() << QString("html_src:%1").arg(reader.readElementText()); + } + } else if (reader.isEntityReference()) { // 实体引用 + QString strName = reader.name().toString(); + QString strText = reader.text().toString(); + //qDebug() << QString("EntityReference : %1(%2)").arg(strName).arg(strText); + } else if (reader.isCDATA()) { // CDATA + QString strCDATA = reader.text().toString(); + //qDebug() << QString("CDATA : %1").arg(strCDATA); + PicTextItem *pPictText = new PicTextItem(); + if(m_CreateImageFlag) + { + m_pSavePicScene->addItem(pPictText); + } + else + { + pPicScene->addItem(pPictText); + } + QFont font = pPictText->font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + pPictText->setFont(font); + pPictText->setPos(pos_x,pos_y); + pPictText->SpecialConditions = Condition; + pPictText->CatchCnt1StartValue = CatchStartValue; + pPictText->CatchCnt1CurrValue = CatchValue; + // Condition= false ; + // CatchValue = -1; + //LogInfo::setRunStatusText(tr("接收文件解析::2")); + if(!sysPara->status.forTemplateUse || m_CreateImageFlag) + { + pPictText->setHtml(strCDATA); + } + else + { + //qDebug() << tr("接收文件解析:"); + //LogInfo::setRunStatusText(tr("接收文件解析::3")); + //stringListRecive << "aaaa" << "bbbb" << "cccc"; + if(strCDATA.contains("#1111") || strCDATA.contains("")) + { + if(stringListRecive.size() > 0) + { + if(strCDATA.contains("#1111")) + { + strCDATA.replace("#1111",stringListRecive.at(0).toStdString().c_str()); + } + else if(strCDATA.contains("")) + { + emit generateQRCode(stringListRecive.at(0)); + strCDATA.replace("modbusQR#01.bmp","modbusQR.bmp"); + } + } + + } + else if(strCDATA.contains("#2222") || strCDATA.contains("")) + { + if(stringListRecive.size() > 1) + { + if(strCDATA.contains("#2222")) + { + strCDATA.replace("#2222",stringListRecive.at(1).toStdString().c_str()); + } + else if(strCDATA.contains("")) + { + emit generateQRCode(stringListRecive.at(1)); + strCDATA.replace("modbusQR#02.bmp","modbusQR.bmp"); + } + } + } + else if(strCDATA.contains("#3333") || strCDATA.contains("")) + { + if(stringListRecive.size() > 2) + { + if(strCDATA.contains("#3333")) + { + strCDATA.replace("#3333",stringListRecive.at(2).toStdString().c_str()); + } + else if(strCDATA.contains("")) + { + emit generateQRCode(stringListRecive.at(2)); + strCDATA.replace("modbusQR#03.bmp","modbusQR.bmp"); + } + } + } + pPictText->setHtml(strCDATA); + } + // if(Condition) + // { + // SpecialVarPrint specialVarPrint; + // specialVarPrint.SpecialVarEnable = Condition; + // specialVarPrint.SpecialVarCountStart = CatchStartValue; + // specialVarPrint.SpecialVarCountEnd = CatchValue; + // specialVarPrint.SpecialVarColStart = 3 + pos_x- pPicScene->itemsBoundingRect().x(); + // specialVarPrint.SpecialVarColEnd = 3 + pos_x - pPicScene->itemsBoundingRect().x()+ pPictText->boundingRect().width(); + // specialVarPrint.SpecialVarRowStart = pos_y - pPicScene->itemsBoundingRect().y(); + // specialVarPrint.SpecialVarRowEnd = pos_y - pPicScene->itemsBoundingRect().y()+ pPictText->boundingRect().height(); + // sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 2022-8-6 + // LogInfo::setRunStatusText(tr("发送特殊变量内容:")); + // LogInfo::setRunStatusText(tr("SpecialVarEnable:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarEnable))); + // LogInfo::setRunStatusText(tr("SpecialVarCountStart:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarCountStart))); + // LogInfo::setRunStatusText(tr("SpecialVarCountEnd:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarCountEnd))); + // LogInfo::setRunStatusText(tr("SpecialVarColStart:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarColStart))); + // LogInfo::setRunStatusText(tr("SpecialVarColEnd:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarColEnd))); + // LogInfo::setRunStatusText(tr("SpecialVarRowStart:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarRowStart))); + // LogInfo::setRunStatusText(tr("SpecialVarRowEnd:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarRowEnd))); + // LogInfo::setRunStatusText(tr("itemsBoundingRect().y():%1").arg(QString().sprintf("%02X",pPicScene->itemsBoundingRect().y()))); + // LogInfo::setRunStatusText(tr("itemsBoundingRect().x():%1").arg(QString().sprintf("%02X",pPicScene->itemsBoundingRect().x()))); + // } + Condition= false ; + CatchValue = -1; + CatchStartValue = -1; + + reader.readNext(); + if (reader.isCharacters()) { + QString strCharacters = reader.text().toString(); + //qDebug() << QString("Characters : %1").arg(strCharacters); + } + } else if (reader.isEndElement()) { // 结束元素 + QString strElementName = reader.name().toString(); + if (QString::compare(strElementName, "Blogs") == 0) { + //qDebug() << QString::fromLocal8Bit("********** 结束元素 ********** "); + break; // 跳出循环(解析 QXmlStreamReader::EndDocument) + } else if (QString::compare(strElementName, "Blog") == 0) { + //qDebug() << QString::fromLocal8Bit("********** 结束元素 ********** "); + } + } + } +} +/* + * 和DialogFileOperation对接 + * */ +void SceneEditOption::onFileOpen(QString filePath,bool insertFlag){ + if(editMode==SCENE) { + if(filePath.endsWith(".xml")) + { + QFile file(filePath); + + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 以只写模式打开文件 + xmlfileName=filePath; + QXmlStreamReader reader(&file); + if(!m_CreateImageFlag) + { + pPicScene->clear(); + pViewer->viewport()->update(); + unsigned char SpecialVarEnable = 0; + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); + } + // 解析 XML,直到结束 + while (!reader.atEnd()) { + + // 读取下一个元素 + QXmlStreamReader::TokenType nType = reader.readNext(); + + switch (nType) { + case QXmlStreamReader::StartDocument: { // 开始文档 + //qDebug() << QString::fromLocal8Bit("********** 开始文档(XML 声明) ********** "); + // XML 声明 + QString strVersion = reader.documentVersion().toString(); + QString strEncoding = reader.documentEncoding().toString(); + bool bAlone = reader.isStandaloneDocument(); + //qDebug() << QString::fromLocal8Bit("版本:%1 编码:%2 Standalone:%3") + // .arg(strVersion).arg(strEncoding).arg(bAlone) << "\r\n"; + break; + } + case QXmlStreamReader::Comment: { // 注释 + //qDebug() << QString::fromLocal8Bit("********** 注释 ********** "); + QString strComment = reader.text().toString(); + //qDebug() << strComment << "\r\n"; + break; + } + case QXmlStreamReader::ProcessingInstruction: { // 处理指令 + //qDebug() << QString::fromLocal8Bit("********** 处理指令 ********** "); + QString strProcInstr = reader.processingInstructionData().toString(); + //qDebug() << strProcInstr << "\r\n"; + break; + } + case QXmlStreamReader::DTD: { // DTD + //qDebug() << QString::fromLocal8Bit("********** DTD ********** "); + QString strDTD = reader.text().toString(); + QXmlStreamNotationDeclarations notationDeclarations = reader.notationDeclarations(); // 符号声明 + QXmlStreamEntityDeclarations entityDeclarations = reader.entityDeclarations(); // 实体声明 + // DTD 声明 + QString strDTDName = reader.dtdName().toString(); + QString strDTDPublicId = reader.dtdPublicId().toString(); // DTD 公开标识符 + QString strDTDSystemId = reader.dtdSystemId().toString(); // DTD 系统标识符 + //qDebug() << QString::fromLocal8Bit("DTD : %1").arg(strDTD); + //qDebug() << QString::fromLocal8Bit("DTD 名称 : %1").arg(strDTDName); + //qDebug() << QString::fromLocal8Bit("DTD 公开标识符 : %1").arg(strDTDPublicId); + //qDebug() << QString::fromLocal8Bit("DTD 系统标识符 : %1").arg(strDTDSystemId); + //qDebug() << "\r\n"; + + break; + } + case QXmlStreamReader::StartElement: { // 开始元素 + QString strElementName = reader.name().toString(); + if (QString::compare(strElementName, "VBfiles") == 0) { // 根元素 + //qDebug() << QString::fromLocal8Bit("********** 开始元素 ********** "); + QXmlStreamAttributes attributes = reader.attributes(); + if (attributes.hasAttribute("Version")) { + QString strVersion = attributes.value("Version").toString(); + //qDebug() << QString::fromLocal8Bit("属性:Version(%1)").arg(strVersion); + } + + parseVbfile(reader); + } + break; + } + case QXmlStreamReader::EndDocument: { // 结束文档 + //qDebug() << QString::fromLocal8Bit("********** 结束文档 ********** "); + break; + } + } + } + + if (reader.hasError()) { // 解析出错 + //qDebug() << QString::fromLocal8Bit("错误信息:%1 行号:%2 列号:%3 字符位移:%4").arg(reader.errorString()).arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.characterOffset()); + } + //qDebug()<<"open done"; + file.close(); // 关闭文件 + //snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toAscii().constData()); + if(!m_CreateImageFlag)//生成图片显示 + { + if(sysPara) + { + sysPara->sysFile =filePath; + sysPara->loadParaFromFile(); + //qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toAscii().constData()); + } + + emit fileNameChanged(QFileInfo(xmlfileName).fileName()); + ui->saveButton->setEnabled(false); + QList items = pPicScene->items(); + foreach (QGraphicsItem *item, items) { + PicTextItem *picText = qgraphicsitem_cast(item); + onSceneAccepted(picText); + } + } + + } + } + } +} +void SceneEditOption::saveFile(){ +#if 1 + //qDebug()<<"SceneEditOption save scene start"; + //QList itemList = pPicScene->items(); + //qDebug()<<"xmlfileName:"<< xmlfileName; + + QFile file(xmlfileName); + if (!file.open(QFile::WriteOnly | QFile::Text)) { // 只写模式打开文件 + qDebug() << QString("Cannot write file %1(%2).").arg(xmlfileName).arg(file.errorString()); + return; + } + //qDebug()<<"open xmlfileName successfull"; + + QXmlStreamWriter writer(&file); + + // writer.setCodec("GBK"); // XML 编码 + writer.setAutoFormatting(true); // 自动格式化 + writer.writeStartDocument("1.0", true); // 开始文档(XML 声明) + writer.writeComment(QString::fromLocal8Bit("Vernon Bach graphic scene file")); // 注释 + //writer.writeProcessingInstruction("xml-stylesheet type=\"text/css\" href=\"style.css\""); // 处理指令 + + // DTD + writer.writeDTD(QString::fromLocal8Bit(" ]>")); + //writer.writeDTD(QString::fromLocal8Bit(" ]>")); + + writer.writeStartElement("VBfiles"); // 开始根元素 + writer.writeAttribute("Version", "1.0"); // 属性 + + QList items = pPicScene->items(); + foreach (QGraphicsItem *item, items) { + PicTextItem *picText = qgraphicsitem_cast(item); + //qDebug()<<"item position: "<< picText->pos(); + writer.writeStartElement("VBfile"); // 开始子元素 + writer.writeTextElement(QString::fromLocal8Bit("pointer_x"), QString::fromLocal8Bit("%1").arg(picText->pos().x())); + writer.writeTextElement(QString::fromLocal8Bit("pointer_y"), QString::fromLocal8Bit("%1").arg(picText->pos().y())); + writer.writeTextElement(QString::fromLocal8Bit("Condition"), QString::fromLocal8Bit("%1").arg(picText->SpecialConditions? 1:0)); + writer.writeTextElement(QString::fromLocal8Bit("CatchStartValue"), QString::fromLocal8Bit("%1").arg(picText->CatchCnt1StartValue)); + writer.writeTextElement(QString::fromLocal8Bit("CatchValue"), QString::fromLocal8Bit("%1").arg(picText->CatchCnt1CurrValue)); + //writer.writeEntityReference("Copyright"); + //writer.writeCDATA(QString::fromLocal8Bit("html code")); + writer.writeTextElement(QString::fromLocal8Bit("html_src"), QString::fromLocal8Bit("my_src")); + writer.writeCDATA((picText->toHtml())); + //qDebug()<<"tohtml"<toHtml(); + //writer.writeCharacters(">"); + //writer.writeEmptyElement(QString::fromLocal8Bit("Empty")); // 空元素 + writer.writeEndElement(); // 结束子元素 + } + + writer.writeEndElement(); // 结束根元素 + writer.writeEndDocument(); // 结束文档 + //qDebug()<<"sceneEditOption save done"; +//#if defined(__CONVERTERBOARD__)|| defined(__VX__) +#if 1 + fsync(file.handle()); +#endif + file.close(); // 关闭文件 + +#endif +} + +void SceneEditOption::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class + qDebug()<sysFile =xmlfileName; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); + } + //snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); + ui->saveButton->setEnabled(false); + emit fileNameChanged(QFileInfo(xmlfileName).fileName()); +} +void SceneEditOption::on_enlargeButton_pressed() +{ + ((MyView*)pViewer)->ZoomOut(); +} +void SceneEditOption::on_reduceButton_pressed() +{ + ((MyView*)pViewer)->ZoomIn(); +} + +void SceneEditOption::onSceneAccepted(PicTextItem *pTextItem){ + //dialogLineSpace->getValue(&sysPara->para.textEditLineSpace,&sysPara->para.textEditCharSpace); + for(QTextBlock textBlock = pTextItem->document()->begin();textBlock != pTextItem->document()->end(); textBlock = textBlock.next()){ + // textBlock.setVisible(false); + QTextBlockFormat textBlockFormat = textBlock.blockFormat(); + textBlockFormat.setAlignment(Qt::AlignTop); + textBlockFormat.setTopMargin(-1); + //textBlockFormat.setLineHeight(sysPara->para.fontPixelSize + sysPara->para.textEditLineSpace, QTextBlockFormat::FixedHeight); + //textBlockFormat.setLineHeight(0, QTextBlockFormat::LineDistanceHeight); + textBlockFormat.setBottomMargin(sysPara->para.textEditLineSpace-1); + //textBlockFormat.setBottomMargin(-1); + QTextCursor textCursor = pTextItem->textCursor(); + textCursor.setPosition(textBlock.position()); + textCursor.setBlockFormat(textBlockFormat); + pTextItem->setTextCursor(textCursor); + } + + // QTextCharFormat fmt; + // //fmt.setFontWordSpacing(sysPara->para.textEditCharSpace); + // fmt.setFontLetterSpacing(sysPara->para.textEditCharSpace); qDebug() << sysPara->para.textEditCharSpace; + // mergeFormatOnWordOrSelection(fmt); + QFont font = pTextItem->font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + pTextItem->setFont(font); + sysPara->saveParaToFile(); +} + +//edit@12-10 +void SceneEditOption::on_test_pressed() +{ + const QPoint originScene=pViewer->mapFromScene(0,0); + const QRectF sceneRect=pPicScene->sceneRect(); + const QRectF BoundingRect=pPicScene->itemsBoundingRect(); + qDebug()<setHtml(html); + pTextItem->setDocument(doc_DMCode); + } + else if(i==1) + { + font.setFamily("wenquanyi"); + font.setPixelSize(16); + font.setLetterSpacing(QFont::AbsoluteSpacing,0); + font.setBold(false); + PicTextItem *pTextItem = (PicTextItem *)pPicScene->items().at(i); + PicTextItem *lastpTextItem = (PicTextItem *)pPicScene->items().at(i-1); + QRectF rect= lastpTextItem->boundingRect(); + QPointF point=lastpTextItem->pos(); + pTextItem->setPos(point.x()+rect.width()+14,point.y()); + pTextItem->setPlainText(data); + pTextItem->setFont(font); + } + } +} diff --git a/scene/SceneEditOption.h b/scene/SceneEditOption.h new file mode 100644 index 0000000..6d90d0f --- /dev/null +++ b/scene/SceneEditOption.h @@ -0,0 +1,117 @@ +#ifndef SCENEEDITOPTION_H +#define SCENEEDITOPTION_H + +#include +#include +#include +#include +#include +#include +#include +#include "ParaSettingUI.h" +#include "MyFileDialog.h" +#include +#include +#include +#include "DialogFileOperation.h" +#include "DialogInsertVari.h" +#include "DialogFontSize.h" +#include "DialogLineSpace.h" +#include "PicWidget.h" +#include +#include "dlgQrCode.h" +#include "QBarCode.h" +#include "DialogSaveFile.h" +#include "SceneEditOption.h" +#include "pictextitem.h" +#include "picscene.h" +#include "moveinput.h" +#include "formscenedlg.h" +#include +#include "MyFileDialog.h" +namespace Ui { +class SceneEditOption; +} + +class SceneEditOption : public QWidget,public ParaSettingUI +{ + Q_OBJECT +public: + explicit SceneEditOption(QWidget *parent = 0); + ~SceneEditOption(); + + void bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText); + void bindSysPara(SysPara *sysPara); + void bindScene(PicScene *pPicScene, QGraphicsView *pGraphicViewer, QTextEdit *pTextEdit); + void updatePrintData(QString); +signals: + void previewScene(); + void addPicTextItem(); + void importFile(QString); + void delItem(); + void saveScene(QString); + void openSceneFile(QString); + void editItem(); + void editItemMode(); + void fileNameChanged(QString); + void generateQRCode(QString); +public slots: + void enableButtonSave(); + void onSaveASFile(QString filename,bool Flag); + void saveFile(); + void onFileOpen(QString filePath,bool insertFlag); + void onEditItemDone(); + void onCreateSceneImage(QString filePath);//生成场景图片 + void onStackedWidgetOptionCurrentChanged(int index); + //edit@12-07 + void show_scene_new_dlg(); + void on_btn_test2(); + void onInkJetPrinterCurrentChanged(int index); +private slots: + void on_delButton_pressed(); + + void on_saveButton_pressed(); + void on_openfileButton_pressed(); + + void on_previewButton_pressed(); + + void on_addButton_pressed(); + + void on_EditItemButton_pressed(); + + void on_saveAsButton_pressed(); + + void on_newfileButton_pressed(); + void on_enlargeButton_pressed(); + void on_reduceButton_pressed(); + void on_test_pressed(); + +private: + void parseVbfile(QXmlStreamReader &reader); + bool maybeSave(); + Ui::SceneEditOption *ui; + QStackedWidget *stackedWidgetOption; + QStackedWidget *stackedWidgetText; + PicScene *pPicScene; + QGraphicsView *pViewer; + QTextEdit *textEdit; + QGraphicsScene *m_pSavePicScene; + bool m_CreateImageFlag; + + DialogFileOperation *dialogFileOperation; +#ifdef MYSAVEFILEDLG + DialogSaveFile *dialogSaveFile; +#endif + MyFileDialog *fileDialog; + + PicTextItem *textItem; + //PicScene *scene; + QString currFileName; + void onSceneAccepted(PicTextItem *pTextItem); + int editMode;//保存当前的编辑模式 + QString xmlfileName; + FormScenedlg *newScene; + QTextDocument *doc_DMCode; +}; + +#endif // SCENEEDITOPTION_H diff --git a/scene/formscenedlg.cpp b/scene/formscenedlg.cpp new file mode 100644 index 0000000..13a8156 --- /dev/null +++ b/scene/formscenedlg.cpp @@ -0,0 +1,550 @@ +#include "formscenedlg.h" +#include "ui_formscenedlg.h" +#include +#include +#include +#include + + + +FormScenedlg::FormScenedlg(QWidget *parent) : + QWidget(parent), + ui(new Ui::FormScenedlg),pPicScene(0),tabMainWindow(0),dialogFileOperation(0),textEdit(0) +{ + ui->setupUi(this); + SWmaximumSize1={}; + SWgeometry1={}; + FVgeometry2={}; + GVgeometry3={}; + + + QPushButton *btnArray[]={ + // ui->KeyDown, + // ui->KeyLeft, + // ui->KeyRight, + // ui->KeyUp, + ui->itemLast, + ui->itemFirst, + ui->saveAsButton, + ui->saveButton, + ui->addButton, + //ui->itemPrev, + //ui->itemNext, + ui->previewButton, + ui->newfileButton, + ui->openfileButton, + ui->delButton, + ui->EditItemButton, + ui->insertImage, + ui->reduceButton, + ui->enlargeButton, + ui->ZoomOrigin + }; + + const QString sysfamily=qApp->font().family(); + + for(int i=0;iZoomOrigin->font(); // 获取当前字体 + const int defaultPointSize=30;//font.pointSize()<10?10:font.pointSize(); + + if(Public::ReadLanguageName()=="English"){ + font.setFamily("Arial"); + } +// font.setFamily("WenQuanYiMH"); + //font.setFamily("wenquanyi"); + font.setBold(true); + font.setPointSize(1*defaultPointSize); // 设置字体大小为12点 + font.setWeight(QFont::Black); + btnArray[i]->setFont(font); // 应用新字体到按钮 + } + + //不显示测试按钮 + ui->itemPrev->setVisible(false); + ui->itemNext->setVisible(false); + ui->ZoomOrigin->setVisible(false); + ui->btn_test2->setVisible(false); + +} + +FormScenedlg::~FormScenedlg() +{ + delete ui; + delete dialogFileOperation; + dialogFileOperation=0; +} +void FormScenedlg::horizontalScrollBar_valueChanged(int value) +{ + QTimer::singleShot(100,this,SLOT(sceneRectChanged_timerHandler())); +} + +void FormScenedlg::verticalScrollBar_valueChanged(int value) +{ + QTimer::singleShot(100,this,SLOT(sceneRectChanged_timerHandler())); +} + +void FormScenedlg::bindScene(PicScene *pPicScene, QGraphicsView *pGraphicViewer,QTextEdit *pTextEdit){ + this->pPicScene = pPicScene; + this->pViewer = pGraphicViewer; + this->textEdit = pTextEdit; + + QObject::connect(pViewer->verticalScrollBar(), SIGNAL(valueChanged(int)), this,SLOT(verticalScrollBar_valueChanged(int))); + QObject::connect(pViewer->horizontalScrollBar(), SIGNAL(valueChanged(int)), this,SLOT(horizontalScrollBar_valueChanged(int))); + + dialogFileOperation = new DialogFileOperation(0); + dialogFileOperation->setWindowTitle(tr("插入图片")); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + + + + //edit@12-12读取旧的布局信息 + const QStackedWidget* pStackedWidget= static_cast(this->pViewer->parentWidget()->parentWidget()); + const QWidget* fileSceneViewer = static_cast(this->pViewer->parentWidget()); + if(pStackedWidget && fileSceneViewer) + { + tabMainWindow=fileSceneViewer->parentWidget()->parentWidget(); + SWmaximumSize1=pStackedWidget->maximumSize(); + SWgeometry1=pStackedWidget->geometry(); + + //QSize FVmaximumSize=fileSceneViewer->maximumSize(); + FVgeometry2=fileSceneViewer->geometry(); + + //QSize GVmaximumSize=this->pViewer->maximumSize(); + GVgeometry3=this->pViewer->geometry(); + + //qDebug()<<"1-2-3-size="<pViewer && this->pPicScene) +// { +// const QPoint originScene=pViewer->mapFromScene(0,0); +// if(originScene!=lastOriginScene) +// { +// lastOriginScene=originScene; + this->pPicScene->update(); +// //qDebug()<<"sceneRectChanged-update="<setMaximumSize(SWmaximumSize1.width(),SWmaximumSize1.height()+150); + pStackedWidget->setGeometry(SWgeometry1.x(),SWgeometry1.y(),SWgeometry1.width(),SWgeometry1.height()+150); + fileSceneViewer->setGeometry(FVgeometry2.x(),FVgeometry2.y(),FVgeometry2.width(),FVgeometry2.height()+150); + this->pViewer->setGeometry(GVgeometry3.x(),GVgeometry3.y(),GVgeometry3.width(),GVgeometry3.height()+80); + } + +} +//edit@12-12 恢复布局 +void FormScenedlg::Layout_ToDefault() +{ + QStackedWidget* pStackedWidget= static_cast(this->pViewer->parentWidget()->parentWidget()); + QWidget* fileSceneViewer = static_cast(this->pViewer->parentWidget()); + + //QWidget *tabMainWindow=fileSceneViewer->parentWidget()->parentWidget(); + QHBoxLayout *horizontalLayout=dynamic_cast(FormScenedlg::findChildAll(tabMainWindow->layout(),"horizontalLayout"));//edit@12-14 信息提示栏 + FormScenedlg::showQLayout(horizontalLayout,true); + + if(pStackedWidget && fileSceneViewer) + { + pStackedWidget->setMaximumSize(SWmaximumSize1); + pStackedWidget->setGeometry(SWgeometry1); + fileSceneViewer->setGeometry(FVgeometry2); + this->pViewer->setGeometry(GVgeometry3); + } +} + +void FormScenedlg::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +void FormScenedlg::on_addButton_clicked() +{ + emit addButton(); +} + +void FormScenedlg::on_EditItemButton_clicked() +{ + emit EditItemButton(); +} + +void FormScenedlg::on_delButton_clicked() +{ + emit delButton(); +} + +void FormScenedlg::on_newfileButton_clicked() +{ +emit newfileButton(); +} + +void FormScenedlg::on_openfileButton_clicked() +{ +emit openfileButton(); +} + +void FormScenedlg::on_previewButton_clicked() +{ + pPicScene->clearSelection(); + foreach (QGraphicsItem *item, pPicScene->items()) { + item->clearFocus(); + item->setSelected(false); + } + //ui->previewButton->setFocus(); + emit previewButton(); +} + +void FormScenedlg::on_saveButton_clicked() +{ +emit saveButton(); +} + +void FormScenedlg::on_saveAsButton_clicked() +{ +emit saveAsButton(); +} +//edit@12-06 放大 +void FormScenedlg::on_enlargeButton_clicked() +{ + emit enlargeButton(); + adjustItemsPos(); + //QTimer::singleShot(100,this,SLOT(adjustItemsPos())); +} + +void FormScenedlg::on_reduceButton_clicked() +{ + emit reduceButton(); + adjustItemsPos(); + //QTimer::singleShot(100,this,SLOT(adjustItemsPos())); +} + +void FormScenedlg::on_KeyLeft_clicked() +{ + pViewer->setFocus(); +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Left,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif + //QTimer::singleShot(10,this,SLOT(adjustItemsPosFalse())); +} + +void FormScenedlg::on_KeyUp_clicked() +{ + pViewer->setFocus(); +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Up,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +//QTimer::singleShot(10,this,SLOT(adjustItemsPosFalse())); +} + +void FormScenedlg::on_KeyRight_clicked() +{ + pViewer->setFocus(); +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Right,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +//QTimer::singleShot(10,this,SLOT(adjustItemsPosFalse())); +} + +void FormScenedlg::on_KeyDown_clicked() +{ + pViewer->setFocus(); +#ifndef Q_OS_WIN32 + QWSServer::sendKeyEvent(0,Qt::Key_Down,Qt::NoModifier,true,false); //向系统发送键盘事件 +#endif +//QTimer::singleShot(10,this,SLOT(adjustItemsPosFalse())); +} + +void FormScenedlg::on_insertImage_clicked() +{ + if(dialogFileOperation) + { + dialogFileOperation->refreshListView(PICFILE); + dialogFileOperation->exec(); + } +} + +void FormScenedlg::on_ZoomOrigin_clicked() +{ + adjustItemsPos(false); +} + +void FormScenedlg::on_btn_test2_clicked() +{ + emit ZoomOrigin(); + +} + +//edit@12-11 选中下一个图元 +void FormScenedlg::on_itemNext_clicked() +{ + QList items=pPicScene->items(); + if(!items.empty()) + { + int index=0; + for(index=0;indexisSelected())break; + } + + pPicScene->clearSelection(); + if(index+1setSelected(true); + items.at(index)->setFocus(); + } + else + { + //edit@12-11 超范围,滚动到第一个 + index=0; + items.front()->setSelected(true); + items.front()->setFocus(); + } + //PrintselectedItemInfo(); + + } +} + +//edit@12-11选中上一个图元 +void FormScenedlg::on_itemPrev_clicked() +{ + QList items=pPicScene->items(); + if(!items.empty()) + { + int index=0; + for(index=0;indexisSelected())break; + } + + pPicScene->clearSelection(); + if(0<=index-1) + { + index-=1; + //edit@12-11选中前一个 + items.at(index)->setSelected(true); + items.at(index)->setFocus(); + } + else + { + //edit@12-11 超范围,滚动到最后位置 + index=items.size()-1; + items.back()->setSelected(true); + items.back()->setFocus(); + } + //PrintselectedItemInfo(); + } +} + +void FormScenedlg::PrintselectedItemInfo() +{ + foreach (QGraphicsItem *item, pPicScene->items()) { + if(item->isSelected()) + { + qDebug()<<"PrintselectedItemInfo-pos="<pos(); + //qDebug()<<"PrintselectedItemInfo-pos="<views().front()->mapFromScene(item->pos()); + break; + } + } +} +//edit@12-11 自动调整元素位置到原点 +void FormScenedlg::adjustItemsPos(bool bMoveScrollBar) +{ + if(bMoveScrollBar) + { + pViewer->verticalScrollBar()->setValue(0); + pViewer->horizontalScrollBar()->setValue(0); + } + + QPointF movePoint; + const QRectF sceneRect=pPicScene->sceneRect(); + qreal left=sceneRect.width(),top=sceneRect.width(); + foreach (const QGraphicsItem *item, pPicScene->items()) { + left=qMin(left,item->pos().x()); + top=qMin(top,item->pos().y()); + } + foreach (QGraphicsItem *item, pPicScene->items()) { + QPointF oldpos=item->pos(); + //oldpos=QPointF(qCeil(oldpos.x()-left-1),qCeil(oldpos.y()-(top-pViewer->mapToScene(0,0).y()+1))); + oldpos=QPointF(qCeil(oldpos.x()-left),qCeil(oldpos.y()-(top-pViewer->mapToScene(0,0).y()))); + item->setPos(oldpos); + if(item->isSelected())movePoint=oldpos; + } + + if(bMoveScrollBar) + { + //pViewer->verticalScrollBar()->setValue(0); + //pViewer->horizontalScrollBar()->setValue(0); + + if(0mapFromScene(movePoint.x(),movePoint.y()); + //pViewer->verticalScrollBar()->setValue(movePoint.y()); + pViewer->horizontalScrollBar()->setValue(movePoint.x()); + } + } + + if(!pPicScene->items().empty())pPicScene->update(); + + //qDebug()<<"adjustItemsPos="<count(); ++i) { + QLayoutItem *item = layout->itemAt(i); + if (QWidget *widget = item->widget()) { + visible?widget->show():widget->hide(); + } else if (QLayout *subLayout = item->layout()) { + showQLayout(subLayout,visible); + } + } +} + +QObject *FormScenedlg::findChildAll(const QLayout *layout,const QString &name) +{ + for (int i = 0; i < layout->count(); ++i) { + QLayoutItem *item = layout->itemAt(i); + if (QObject *widget = item->widget()) { + if(widget->objectName()==name)return widget; + } else if (QLayout *subLayout = item->layout()) { + if(subLayout->objectName()==name)return subLayout; + QObject *q= findChildAll(subLayout,name); + if(q)return q;continue; + } + } + return 0; +} +void FormScenedlg::onFileOpen(QString filePath,bool ){ + pPicScene->clearSelection(); + QString html = ""; + textEdit->setHtml (html); + textItem = new PicTextItem(); + pPicScene->addItem(textItem); + QList items = pPicScene->items(); + if(pPicScene->items().count()>1){ + QRectF itemRect= items.at(1)->boundingRect(); + textItem->setPos( items.at(1)->scenePos().x()+itemRect.width()+20, items.at(1)->scenePos().y()); + } + else textItem->setPos(this->pViewer->mapToScene(0,0));//edit@12-07 + textItem->setSelected(true); + textItem->setHtml(textEdit->toHtml()); +} + +void FormScenedlg::reset_showTextWidthHeight() +{ + const QRectF BoundingRect=pPicScene->itemsBoundingRect(); + QLabel *labelTextWidthHeight=dynamic_cast(FormScenedlg::findChildAll(tabMainWindow->layout(),"labelTextWidthHeight")); + if(labelTextWidthHeight && 1items()) { + if(item->x()<0)item->setX(0); + if(item->y()<0)item->setY(0); + //const int i=-1==((QGraphicsTextItem*)item)->toHtml().indexOf("img ",0,Qt::CaseInsensitive)?0:1; + const int i=-1==((QGraphicsTextItem*)item)->toHtml().indexOf("home/plg/doc/",0,Qt::CaseInsensitive)?0:1; + if(item->sceneBoundingRect().bottom()>bottomItem[i]) + { + bottomItem[i]=item->sceneBoundingRect().bottom(); + } + } + QString newText; + int HighlightedValue=0; + if(bottomItem[1]+1>=bottomItem[0]) + { + HighlightedValue=qCeil(bottomItem[1]-BoundingRect.y()); + newText=tr("[ %1行 x %2列 ]").arg(HighlightedValue).arg(qCeil(BoundingRect.width())); + } + else + { + HighlightedValue=qCeil(bottomItem[0]-BoundingRect.y()-2); + newText=tr("[ %1行 x %2列 ]").arg(HighlightedValue).arg(qCeil(BoundingRect.width())); + } + + const QString oldText=labelTextWidthHeight->text(); + if(32setText(tr("

      [ %1行 x %2列 ]

      ") + .arg(HighlightedValue).arg(qCeil(BoundingRect.width()))); + } + else + { + labelTextWidthHeight->setText(newText); + } + + if(oldText!=newText) + { + //QTimer::singleShot(10,this,SLOT(adjustItemsPos())); + QTimer::singleShot(10,this,SLOT(adjustItemsPosFalse())); + } + } +} + +void FormScenedlg::on_itemFirst_clicked() +{ + int index=-1; + const QRectF sceneRect=pPicScene->sceneRect(); + qreal left=sceneRect.width(); + QList allitems=pPicScene->items(); + for(int i =0;iclearFocus(); + allitems.at(i)->setSelected(false); + if(left>allitems.at(i)->pos().x()) + { + index=i; + left=allitems.at(i)->pos().x(); + } + } + if(-1!=index)pPicScene->items().at(index)->setSelected(true); + adjustItemsPos(); +} + +void FormScenedlg::on_itemLast_clicked() +{ + pPicScene->clearSelection(); + int index=-1; + const QRectF sceneRect=pPicScene->sceneRect(); + qreal left=0; + QList allitems=pPicScene->items(); + for(int i =0;iclearFocus(); + allitems.at(i)->setSelected(false); + if(leftpos().x()) + { + index=i; + left=allitems.at(i)->pos().x(); + } + } + if(-1!=index)pPicScene->items().at(index)->setSelected(true); + adjustItemsPos(); +} + +//void FormScenedlg::onSceneRectChanged(const QString &text) +//{ +// qDebug()<<"FormScenedlg::sceneRectChanged="; +//} diff --git a/scene/formscenedlg.h b/scene/formscenedlg.h new file mode 100644 index 0000000..fd6896b --- /dev/null +++ b/scene/formscenedlg.h @@ -0,0 +1,127 @@ +#ifndef FORMSCENEDLG_H +#define FORMSCENEDLG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "picscene.h" +#include "DialogFileOperation.h" +#include "pictextitem.h" +#include "myinclude.h" +#include "Public.h" +namespace Ui { +class FormScenedlg; +} + +class FormScenedlg : public QWidget +{ + Q_OBJECT + +public: + explicit FormScenedlg(QWidget *parent = 0); + ~FormScenedlg(); + void bindScene(PicScene *pPicScene, QGraphicsView *pGraphicViewer,QTextEdit *pTextEdit); + + + static void showQLayout(QLayout *layout, bool visible=true); + static QObject *findChildAll(const QLayout *layout, const QString &name); + void Layout_ToNew(); + void Layout_ToDefault(); +public slots: +//void onSceneRectChanged(const QString &text); +protected: + void changeEvent(QEvent *e); + +signals: + void delButton(); + void saveButton(); + void openfileButton(); + void previewButton(); + void addButton(); + void EditItemButton(); + void saveAsButton(); + void newfileButton(); + void enlargeButton(); + void reduceButton(); + void ZoomOrigin(); + void btn_test2(); +private slots: + void on_addButton_clicked(); + + void on_EditItemButton_clicked(); + + void on_delButton_clicked(); + + void on_newfileButton_clicked(); + + void on_openfileButton_clicked(); + + void on_previewButton_clicked(); + + void on_saveButton_clicked(); + + void on_saveAsButton_clicked(); + + void on_enlargeButton_clicked(); + + void on_reduceButton_clicked(); + + void on_KeyLeft_clicked(); + + void on_KeyUp_clicked(); + + void on_KeyRight_clicked(); + + void on_KeyDown_clicked(); + + void on_insertImage_clicked(); + + void on_ZoomOrigin_clicked(); + + void on_btn_test2_clicked(); + + void on_itemNext_clicked(); + + void on_itemPrev_clicked(); + + void PrintselectedItemInfo(); + void adjustItemsPos(bool bMoveScrollBar=true); + void adjustItemsPosFalse(){adjustItemsPos(false);} + void sceneRectChanged_timerHandler(); + void verticalScrollBar_valueChanged(int value); + void horizontalScrollBar_valueChanged(int value); + void onFileOpen(QString filePath, bool insertFlag); + void reset_showTextWidthHeight(); + void on_itemFirst_clicked(); + + void on_itemLast_clicked(); + + +private: + Ui::FormScenedlg *ui; + PicScene *pPicScene; + QGraphicsView *pViewer; + + QSize SWmaximumSize1; + QRect SWgeometry1; + QRect FVgeometry2; + QRect GVgeometry3; + QPoint lastOriginScene; + QWidget *tabMainWindow; + DialogFileOperation *dialogFileOperation; + QTextEdit *textEdit; + PicTextItem *textItem; + + + // QWidget interface +protected: +}; + +#endif // FORMSCENEDLG_H diff --git a/scene/formscenedlg.ui b/scene/formscenedlg.ui new file mode 100644 index 0000000..250c477 --- /dev/null +++ b/scene/formscenedlg.ui @@ -0,0 +1,866 @@ + + + FormScenedlg + + + + 0 + 0 + 800 + 258 + + + + Form + + + + + 510 + 90 + 281 + 161 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 10 + + + 18 + + + + + + 60 + 60 + + + + + + + + :/icon/keydown.png:/icon/keydown.png + + + + + + + + 60 + 60 + + + + + :/icon/keyleft.png:/icon/keyleft.png + + + + + + + + 60 + 60 + + + + + :/icon/keyright.png:/icon/keyright.png + + + + + + + + 60 + 60 + + + + + + + + :/icon/keyup.png:/icon/keyup.png + + + + + + + + 60 + 60 + + + + Qt::RightToLeft + + + QPushButton{spacing:0px;} + + + Last + + + + :/icon/keyend.png:/icon/keyend.png + + + + + + + + 60 + 60 + + + + First + + + + :/icon/keyhome.png:/icon/keyhome.png + + + + + + + + true + + + + 425 + 189 + 71 + 41 + + + + font: 800 16pt "wenquanyi"; + + + 重置位置 + + + + + + 430 + 50 + 61 + 101 + + + + Test2 + + + + + true + + + + 150 + 170 + 131 + 81 + + + + + 0 + 60 + + + + 另存为 + + + + + true + + + + 11 + 170 + 131 + 81 + + + + + 0 + 60 + + + + 保存 + + + + + + 11 + 0 + 131 + 81 + + + + + 60 + 60 + + + + + + + + + 0 + 0 + 0 + + + + + + + 85 + 170 + 127 + + + + + + + 127 + 255 + 191 + + + + + + + 106 + 212 + 159 + + + + + + + 42 + 85 + 63 + + + + + + + 56 + 113 + 84 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 170 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 170 + 212 + 191 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 85 + 170 + 127 + + + + + + + 127 + 255 + 191 + + + + + + + 106 + 212 + 159 + + + + + + + 42 + 85 + 63 + + + + + + + 56 + 113 + 84 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 85 + 170 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 170 + 212 + 191 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 42 + 85 + 63 + + + + + + + 85 + 170 + 127 + + + + + + + 127 + 255 + 191 + + + + + + + 106 + 212 + 159 + + + + + + + 42 + 85 + 63 + + + + + + + 56 + 113 + 84 + + + + + + + 42 + 85 + 63 + + + + + + + 255 + 255 + 255 + + + + + + + 42 + 85 + 63 + + + + + + + 85 + 170 + 127 + + + + + + + 85 + 170 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 85 + 170 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + 预览 + + + + + true + + + + 11 + 84 + 131 + 81 + + + + + 0 + 60 + + + + QPushButton#evilButton { + background-color: blue; + border-style: outset; + border-width: 2px; + border-radius: 10px; + border-color: beige; + font: bold 14px; + min-width: 10em; + padding: 6px; +} +QPushButton#evilButton:pressed { + background-color: rgb(224, 0, 0); + border-style: inset; +} + + + 新增图元 + + + + + + 480 + 230 + 16 + 16 + + + + Next-item + + + + + true + + + + 150 + 0 + 131 + 81 + + + + + 0 + 60 + + + + 新建 + + + + + true + + + + 290 + 0 + 131 + 81 + + + + + 0 + 60 + + + + 打开 + + + + + true + + + + 290 + 170 + 131 + 81 + + + + + 0 + 60 + + + + 删除图元 + + + + + true + + + + 290 + 84 + 131 + 81 + + + + + 0 + 60 + + + + 编辑图元 + + + + + true + + + + 150 + 84 + 131 + 81 + + + + + 0 + 60 + + + + 插入图像 + + + + + + 460 + 230 + 16 + 16 + + + + Prev-item + + + + + + 510 + 0 + 131 + 81 + + + + 场景缩小 + + + + + + 660 + 0 + 131 + 81 + + + + Qt::LeftToRight + + + 场景放大 + + + + + + + + diff --git a/scene/myview.cpp b/scene/myview.cpp new file mode 100644 index 0000000..50f29b5 --- /dev/null +++ b/scene/myview.cpp @@ -0,0 +1,64 @@ +#include "myview.h" +#include +#include "picscene.h" +#include +MyView::MyView(QWidget *parent) : + QGraphicsView(parent) +{ + zoomRatio = 1; + //setDragMode(QGraphicsView::ScrollHandDrag);//手型拖动 + //setAlignment(Qt::AlignLeft | Qt::AlignTop); + //setFocusPolicy( Qt::NoFocus ); +} +static float a = 1.61; +void MyView::ZoomOut(void) +{ + if(zoomRatio < 6) + { + zoomRatio++; +// scale(2,2); + scale(a,a); + } +} + +void MyView::ZoomIn(void) +{ + if(zoomRatio > 2) + { + zoomRatio--; + scale(1/a,1/a); + } +} + +//void MyView::wheelEvent(QWheelEvent*event) //滚轮事件 +//{ +//// if(event->delta() > 0) //如果鼠标滚轮远离使用者,则delta()返回正值 +//// scale(0.5,0.5); //视图缩放 +//// else scale(2,2); +//} + + +//void MyView::mousePressEvent(QMouseEvent*event) +//{ +//// rotate(90); //视图旋转顺时针90度 +//} + +void MyView::keyPressEvent(QKeyEvent *event) +{ + //event->accept(); + //parent()->event((QEvent*) event); + if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right || event->key() == Qt::Key_Up || event->key() == Qt::Key_Down) + { + // 处理上下键事件 + PicScene* picScene = dynamic_cast(this->scene()); + if(picScene) + { + picScene->keyPressEvent(event); + } + } + else + { + // 其他键事件交给父类处理 + QGraphicsView::keyPressEvent(event); + } +} diff --git a/scene/myview.h b/scene/myview.h new file mode 100644 index 0000000..c77f6f3 --- /dev/null +++ b/scene/myview.h @@ -0,0 +1,28 @@ +#ifndef MYVIEW_H +#define MYVIEW_H + +#include + +class MyView : public QGraphicsView +{ + Q_OBJECT +public: + explicit MyView(QWidget *parent = 0); + + void ZoomOut(void); + void ZoomIn(void); +private: + char zoomRatio; + +signals: + +public slots: + +protected : +// void wheelEvent(QWheelEvent *event); +// void mousePressEvent(QMouseEvent *event); + void keyPressEvent(QKeyEvent *event); + +}; + +#endif // MYVIEW_H diff --git a/scene/picscene.cpp b/scene/picscene.cpp new file mode 100644 index 0000000..875c17f --- /dev/null +++ b/scene/picscene.cpp @@ -0,0 +1,172 @@ +#if 1 +#include "picscene.h" +#include +#include +#include +#include +PicScene::PicScene(QObject *parent) : + QGraphicsScene(parent),IsdrawBackground(false) +{ +} + +void PicScene::setMode(Mode mode) +{ + myMode = mode; +} + +void PicScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) +{ + if (mouseEvent->button() != Qt::LeftButton) + return; + + QGraphicsScene::mousePressEvent(mouseEvent); +} + +//! [9] + +//! [10] +void PicScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) +{ + update();//edit@12-12 +#if 0 + if (myMode == InsertLine && line != 0) { + QLineF newLine(line->line().p1(), mouseEvent->scenePos()); + line->setLine(newLine); + } else if (myMode == MoveItem) { + QGraphicsScene::mouseMoveEvent(mouseEvent); + } +#else + QGraphicsScene::mouseMoveEvent(mouseEvent); + +#endif +} +//! [10] + +//! [11] +void PicScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) +{ +#if 0 //不需要这个功能 + if (line != 0 && myMode == InsertLine) { + QList startItems = items(line->line().p1()); + if (startItems.count() && startItems.first() == line) + startItems.removeFirst(); + QList endItems = items(line->line().p2()); + if (endItems.count() && endItems.first() == line) + endItems.removeFirst(); + + removeItem(line); + delete line; +//! [11] //! [12] + + if (startItems.count() > 0 && endItems.count() > 0 && + startItems.first()->type() == DiagramItem::Type && + endItems.first()->type() == DiagramItem::Type && + startItems.first() != endItems.first()) { + DiagramItem *startItem = + qgraphicsitem_cast(startItems.first()); + DiagramItem *endItem = + qgraphicsitem_cast(endItems.first()); + Arrow *arrow = new Arrow(startItem, endItem); + arrow->setColor(myLineColor); + startItem->addArrow(arrow); + endItem->addArrow(arrow); + arrow->setZValue(-1000.0); + addItem(arrow); + arrow->updatePosition(); + } + } +//! [12] //! [13] + line = 0; +#endif + QGraphicsScene::mouseReleaseEvent(mouseEvent); + //QRectF Rect=QGraphicsScene.itemsBoundingRect(); + //qDebug()<<"GraphicsScene itemsBoundingRect "<type() == type) + return true; + } + return false; +} +//! [14] + +void PicScene::keyPressEvent(QKeyEvent *event) +{ + QGraphicsScene::keyPressEvent(event); +} +//edit@12-09 +void PicScene::drawBackground(QPainter *painter, const QRectF &rect) +{ + QGraphicsScene::drawBackground(painter,rect); + + if(IsdrawBackground) + { + Q_UNUSED(rect); + QPen pen; + + const qreal left=rect.left(); + const qreal right=rect.right(); + const qreal top=rect.top(); + const qreal bottom=rect.bottom(); + + const int step=1; + //pen.setColor(QColor(60,60,60)); + pen.setColor(Qt::lightGray); + //pen.setColor(Qt::darkCyan); + pen.setWidth(0); + //pen.setStyle(Qt::DashLine); + painter->setPen(pen); + //绘制横线 + //绘制Y轴正半轴 + for(int i=0;i>=top;i-=step) + { + painter->drawLine(left,i,right,i); + } + + //绘制Y轴负半轴 + for(int i=0;i<=bottom;i+=step) + { + painter->drawLine(left,i,right,i); + } + + //绘制竖线 + //绘制X轴正半轴 + for(int i=0;i<=right;i+=step) + { + painter->drawLine(i,top,i,bottom); + } + //绘制X轴负半轴 + for(int i=0;i>=left;i-=step) + { + painter->drawLine(i,top,i,bottom); + } + + //edit@12-11 + pen.setColor(Qt::green); + painter->setPen(pen); + QRectF BoundingRect=this->itemsBoundingRect(); + BoundingRect.setHeight(32); + painter->drawRect(BoundingRect); + } + + emit showTextWidthHeight(); +} +//edit@12-09 +void PicScene::setIsdrawBackground(bool newIsdrawBackground) +{ + IsdrawBackground = newIsdrawBackground; +} +#endif diff --git a/scene/picscene.h b/scene/picscene.h new file mode 100644 index 0000000..83f4296 --- /dev/null +++ b/scene/picscene.h @@ -0,0 +1,76 @@ +#ifndef PICSCENE_H +#define PICSCENE_H +#if 1 +#include +#include "pictextitem.h" +#include + +QT_BEGIN_NAMESPACE +class QGraphicsSceneMouseEvent; +class QMenu; +class QPointF; +class QGraphicsLineItem; +class QFont; +class QGraphicsTextItem; +class QColor; +QT_END_NAMESPACE + +class PicScene : public QGraphicsScene +{ + Q_OBJECT +public: + enum Mode { InsertItem, InsertLine, InsertText, InsertPic, MoveItem }; + explicit PicScene(QObject *parent = 0); + + QFont font() const + { return myFont; } + QColor textColor() const + { return myTextColor; } + QColor itemColor() const + { return myItemColor; } + QColor lineColor() const + { return myLineColor; } + void setLineColor(const QColor &color); + void setTextColor(const QColor &color); + void setItemColor(const QColor &color); + void setFont(const QFont &font); + void keyPressEvent(QKeyEvent *event); + +public slots: + void setMode(Mode mode); + //void setItemType(DiagramItem::DiagramType type); + //void editorLostFocus(DiagramTextItem *item); + void setIsdrawBackground(bool newIsdrawBackground); +signals: + //void itemInserted(DiagramItem *item); + void textInserted(QGraphicsTextItem *item); + void itemSelected(QGraphicsItem *item); + void xmlContentChanged(); + //void sceneRectChanged(const QRectF &rect);//edit@12-12 + void showTextWidthHeight(); + void adjustItemsPos(); + +protected: + void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); + void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent); + void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent); + void drawBackground(QPainter *painter, const QRectF &rect); +private: + bool isItemChange(int type); + + //DiagramItem::DiagramType myItemType; + QMenu *myItemMenu; + Mode myMode; + bool leftButtonDown; + QPointF startPoint; + QGraphicsLineItem *line; + QFont myFont; + PicTextItem *textItem; + QColor myTextColor; + QColor myItemColor; + QColor myLineColor; +private: + bool IsdrawBackground; +}; +#endif +#endif // PICSCENE_H diff --git a/scene/pictextitem.cpp b/scene/pictextitem.cpp new file mode 100644 index 0000000..3094a0f --- /dev/null +++ b/scene/pictextitem.cpp @@ -0,0 +1,149 @@ +#if 1 +#include +#include "pictextitem.h" +#include "picscene.h" +#include "moveinput.h" + +extern MoveInput* moveInput; +PicTextItem::PicTextItem(QGraphicsItem *parent, QGraphicsScene *scene) : + QGraphicsTextItem(parent,scene) +{ + setFlag(QGraphicsItem::ItemIsMovable); + setFlag(QGraphicsItem::ItemIsSelectable); + //setFlag(QGraphicsItem::ItemIsFocusScope); + setFlag(QGraphicsItem::ItemIsFocusable); + //setTextInteractionFlags(Qt::NoTextInteraction); + QFont font; + font.setFamily("wenquanyi"); + font.setPixelSize(12); + //document()->setDefaultFont(font);//如果加上这句后,默认的都是wenquanyi 12点阵,看起来这个字体有问题,会黑屏,所以用界面的字体 WenQuanYiMH 代替 + document()->setDefaultStyleSheet("p { margin: 0; }"); + document()->setDocumentMargin(0); + SpecialConditions = false; + CatchCnt1CurrValue = -1; + CatchCnt1StartValue = -1; +} +//! [1] +QVariant PicTextItem::itemChange(GraphicsItemChange change, + const QVariant &value) +{ +#if 0 + if (change == QGraphicsItem::ItemSelectedHasChanged) + emit selectedChange(this); + return value; +#else + //qDebug()<<"item posi: "<< pos(); + if (change == ItemSceneChange && scene()) { + // value is the new position. + QPointF newPos = value.toPoint(); + QRectF rect = scene()->sceneRect(); + if (!rect.contains(newPos)) { + // Keep the item inside the scene rect. + newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left()))); + newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top()))); + //return newPos; + } + } +#if 0 + if (change == ItemSelectedChange && scene()) { + if(moveInput->isHidden() && value == 1){ + QRect rec = QApplication::desktop()->screenGeometry(); + //QPoint point = widget->mapToGlobal (QPoint(0,0)); //全局坐标 + QRect myRec = moveInput->geometry(); + moveInput->setGeometry(rec.width()/2,rec.height()/2 ,myRec.width(),myRec.height()); + + moveInput->show(); + } + if(value == 0) + { + moveInput->hide(); + } + } +#endif + + return QGraphicsItem::itemChange(change, value); +#endif +} +//! [1] + +//! [2] +void PicTextItem::focusOutEvent(QFocusEvent *event) +{ +// setTextInteractionFlags(Qt::NoTextInteraction); + moveInput->hide(); + emit lostFocus(this); + QGraphicsTextItem::focusOutEvent(event); + // +} +//! [2] + +//! [5] +void PicTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + //if (textInteractionFlags() == Qt::NoTextInteraction) + // setTextInteractionFlags(Qt::TextEditorInteraction); + //setTextInteractionFlags(Qt::TextBrowserInteraction); + QGraphicsTextItem::mouseDoubleClickEvent(event); + //emit itemEdit(toHtml()); +} +//! [5] + +//限制图元拖动范围 +void PicTextItem::mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) +{ + //edit@12-07 + QPointF newPos = this->pos(); + //qDebug()<<"mouseReleaseEvent-tem->pos="<setPos(qCeil(newPos.x()),qCeil(newPos.y())); + scene()->update(); + + +// QRectF rect = scene()->sceneRect(); +// if (!rect.contains(newPos)) { +// // Keep the item inside the scene rect. +// newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left()))); +// newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top()))); +// this->setPos(newPos); +// } + QGraphicsTextItem::mouseReleaseEvent(event); +} + +void PicTextItem::keyPressEvent(QKeyEvent *event) +{ + foreach (QGraphicsItem *item, scene()->selectedItems()) { + if(event->key() == Qt::Key_Left) + { + item->moveBy(-1, 0); + } + else if(event->key() == Qt::Key_Right) + { + item->moveBy(1, 0); + } + else if(event->key() == Qt::Key_Up) + { + item->moveBy(0, -1); + } + else if(event->key() == Qt::Key_Down) + { + item->moveBy(0, 1); + } + } + if(!scene()->selectedItems().empty()) + { + scene()->update(); + } + + //QPointF newPos = this->pos(); + //const QRectF rect = scene()->sceneRect(); +// if (!rect.contains(newPos)) { +// // Keep the item inside the scene rect. +// newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left()))); +// newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top()))); +// //this->setPos(newPos); +// //edit@12-09 +// this->setPos(view->mapToScene(newPos.x(),newPos.y())); +// } + QGraphicsTextItem::keyPressEvent(event); +} + +#endif diff --git a/scene/pictextitem.h b/scene/pictextitem.h new file mode 100644 index 0000000..4e86682 --- /dev/null +++ b/scene/pictextitem.h @@ -0,0 +1,44 @@ +#ifndef PICTEXTITEM_H +#define PICTEXTITEM_H + +#include +#include +#include +#if 1 +class QFocusEvent; +class QGraphicsItem; +class QGraphicsScene; +class QGraphicsSceneMouseEvent; + +class PicTextItem : public QGraphicsTextItem +{ + Q_OBJECT +public: + enum { Type = UserType + 3 }; + explicit PicTextItem(QGraphicsItem *parent = 0, QGraphicsScene *scene = 0); + + int type() const + { return Type; } + +signals: + void lostFocus(PicTextItem *item); + void selectedChange(QGraphicsItem *item); + void itemEdit(QString); + +protected: + QVariant itemChange(GraphicsItemChange change, const QVariant &value); + void focusOutEvent(QFocusEvent *event); + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent * event); + void keyPressEvent(QKeyEvent *event); + +public slots: + +public: + bool SpecialConditions; + int CatchCnt1StartValue; + int CatchCnt1CurrValue; + +}; +#endif +#endif // PICTEXTITEM_H diff --git a/scene/sceneEditOption.ui b/scene/sceneEditOption.ui new file mode 100644 index 0000000..85a09d9 --- /dev/null +++ b/scene/sceneEditOption.ui @@ -0,0 +1,186 @@ + + + SceneEditOption + + + + 0 + 0 + 924 + 58 + + + + Form + + + + + + + + + 0 + 40 + + + + 预览 + + + + + + + true + + + + 0 + 40 + + + + 新建 + + + + + + + true + + + + 0 + 40 + + + + 打开 + + + + + + + true + + + + 0 + 40 + + + + 保存 + + + + + + + true + + + + 0 + 40 + + + + 另存为 + + + + + + + true + + + + 0 + 40 + + + + 新增图元 + + + + + + + true + + + + 0 + 40 + + + + 编辑图元 + + + + + + + true + + + + 0 + 40 + + + + 删除图元 + + + + + + + + 0 + 40 + + + + 放大 + + + + :/icon/zoomin.png:/icon/zoomin.png + + + + + + + + 0 + 40 + + + + 缩小 + + + + :/icon/zoomout.png:/icon/zoomout.png + + + + + + + + + + + + diff --git a/scene/sceneviewwidget.cpp b/scene/sceneviewwidget.cpp new file mode 100644 index 0000000..336480d --- /dev/null +++ b/scene/sceneviewwidget.cpp @@ -0,0 +1,8 @@ +#include "sceneviewwidget.h" +#include + +SceneViewWidget::SceneViewWidget(QWidget *parent) : + QWidget(parent) +{ + +} diff --git a/scene/sceneviewwidget.h b/scene/sceneviewwidget.h new file mode 100644 index 0000000..66b7326 --- /dev/null +++ b/scene/sceneviewwidget.h @@ -0,0 +1,18 @@ +#ifndef SCENEVIEWWIDGET_H +#define SCENEVIEWWIDGET_H + +#include +#include +class SceneViewWidget : public QWidget +{ + Q_OBJECT +public: + explicit SceneViewWidget(QWidget *parent = 0); + QGraphicsView *pView; +signals: + +public slots: + +}; + +#endif // SCENEVIEWWIDGET_H diff --git a/serial.cpp b/serial.cpp new file mode 100644 index 0000000..5ac58a8 --- /dev/null +++ b/serial.cpp @@ -0,0 +1,126 @@ +//serial.h的具体实现,要注意的地方是数据类型的转换,QLineEdit的text().toASCII返回的是QByteArray,而PortSend要发送的是 +//char类型的数据,所以就需要转换,在Qt中使用.data()就可以实现转换。还有要注意的地方就是QSocketNotifier不要忘记添加了。 +#include "serial.h" +portinfo_t portinfo = { + '0', // print prompt after receiving + 115200, // baudrate: 115200 + '8', // databit 8 + '0', // debug: off + '0', // echo off + '0', // flow control: software + '0', // default tt: SAC0 + '0', // parity: none + '1', // stopbit: 1 + 0 // reserved +}; +/* +typedef struct //define the uart value struct +{ + char prompt; //prompt after reciving data + int baudrate; //baudrate + char databit; //data bits, 5, 6, 7, 8 + char debug; //debug mode, 0: none, 1: debug + char echo; //echo mode, 0: none, 1: echo + char fctl; //flow control, 0: none, 1: hardware, 2: software + char tty; //tty: 0, 1, 2, 3, 4, 5, 6, 7 + char parity; //parity 0: none, 1: odd, 2: even + char stopbit; //stop bits, 1, 2 + //const int reserved; //reserved, must be zero + int reserved; //reserved, must be zero +}portinfo_t; + */ +static int serial_fd; +char databuffer[20]; +int datalen; +serial::serial(QWidget *parent) + : QWidget(parent) +{ + +// layout();//lay out + +// open_button->setEnabled(true); +// close_button->setEnabled(false); +// send_button->setEnabled(false); + +// connect(open_button,SIGNAL(clicked()),this,SLOT(open_serial())); +// connect(close_button,SIGNAL(clicked()),this,SLOT(close_serial())); +// connect(send_button,SIGNAL(clicked()),this,SLOT(send_setial())); + + QSocketNotifier *notifier=new QSocketNotifier(serial_fd,QSocketNotifier::Read,this); + connect(notifier,SIGNAL(activated(int)),this,SLOT(read_serial())); + read_serial(); +} +serial::~serial() +{ + +} +void serial::init_serial( int baudrate, int portNumber,int stopbit ) +{ + portinfo.baudrate = baudrate; + portinfo.tty = portNumber+'0'; + portinfo.stopbit = stopbit+'0'; + portinfo.fctl = '0'; +} +void serial::open_serial() +{ + serial_fd=PortOpen(&portinfo); + if(serial_fd<0) + { + perror("Error:open serial port error"); + //exit(1); + } + PortSet(serial_fd,&portinfo); + QSocketNotifier *notifier=new QSocketNotifier(serial_fd,QSocketNotifier::Read,this); + connect(notifier,SIGNAL(activated(int)),this,SLOT(read_serial())); + read_serial(); +} +void serial::close_serial() +{ + PortClose(serial_fd); + +} +void serial::read_serial() +{ + datalen=PortRecv(serial_fd,databuffer,10,115200); + //textbrowser->insertPlainText(databuffer); + qDebug()<<"read:"<setText("123489"); +// QVBoxLayout *vlayout1=new QVBoxLayout; +// vlayout1->addWidget(label1); +// vlayout1->addWidget(textbrowser); +// vlayout1->addWidget(label2); +// QVBoxLayout *vlayout3=new QVBoxLayout; +// vlayout3->addWidget(open_button); +// vlayout3->addWidget(close_button); +// QHBoxLayout *hlayout2=new QHBoxLayout; +// hlayout2->addLayout(vlayout1); +// hlayout2->addLayout(vlayout3); +// QHBoxLayout *hlayout1=new QHBoxLayout; +// hlayout1->addWidget(lineedit); +// hlayout1->addWidget(send_button); +// QVBoxLayout *vlayout2=new QVBoxLayout; +// vlayout2->addLayout(hlayout2); +// vlayout2->addLayout(hlayout1); +// setLayout(vlayout2); +//} + +//总结:总算完成了,前后花了两天的时候,很高兴的是自己没有放弃。至于这个串口的QT有什么用,那作用老大了,以前我用VB写过环境 +//监控系统,在PC端实现的,低下用的是ADUC824,那代码,叫宏伟啊。Qt就简单多了(站在巨人的肩膀上)。有了UART的通信,一些 +//控制类的东西都可以实现了,而且界面还可以做得要多漂亮就有多漂亮(看个人的了)。 diff --git a/serial.h b/serial.h new file mode 100644 index 0000000..1308356 --- /dev/null +++ b/serial.h @@ -0,0 +1,19 @@ +#ifndef SERIAL_H +#define SERIAL_H +#include +#include "mycom.h" +class serial : public QWidget +{ + Q_OBJECT +public: + serial(QWidget *parent = 0); + ~serial(); + void init_serial( int baudrate, int portNumber,int stopbit ); + +public slots: + void open_serial(); + void close_serial(); + void read_serial(); + void send_serial(char *buf,int len); +}; +#endif // SERIAL_H diff --git a/spanish.qm b/spanish.qm new file mode 100644 index 0000000000000000000000000000000000000000..3311eb51f1999e29126c6dc8a3170d846ee02852 GIT binary patch literal 145660 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 literal 0 HcmV?d00001 diff --git a/spanish.ts b/spanish.ts new file mode 100644 index 0000000..02e015b --- /dev/null +++ b/spanish.ts @@ -0,0 +1,8185 @@ + + + +UTF-8 + + DevOp + + + + + + + 警告 + Advertencia + + + + 字高超出范围 + Altura de la palabra fuera del alcance + + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + La altura de la palabra es demasiado pequeña o los datos de paquetes de alto voltaje no se inicializan, su error actual ignorará todos los errores de alto voltaje + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + El intervalo de la impresión es demasiado corto para cumplir con el ajuste del ancho de la impresión síncrono, y ¡el ancho de la palabra se acortará automáticamente! + + + + + 错误 + Error + + + + 在同步计米的情况下无打印串或显示区域为零 + No hay cadena de impresión o el área de visualización es cero en el caso de la medición simultánea + + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Demasiados pulsos de sincronización de impresión en el caso de la medición simultánea, verifique su configuración + + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + La cadena de caracteres de la impresión es demasiado corta, aumente la longitud de la cadena o reduzca la longitud de impresión en la configuración de impresión + + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + La longitud de impresión es demasiado corta, reduzca la longitud de la cadena o aumente la longitud de impresión en la configuración de impresión + + + + readB6Req + + + + + readB6com + + + + + readB6suc + + + + + 设置读写器密码成功! + + + + + 设置读写器工作模式成功! + + + + Encoder pulse counter per MM parameter error! + Encoder pulse counter per MM parameter error! + + + + DialogAuthorization + + + Dialog + Dialog + + + + 授权密码: + Contrasena de autorizacion: + + + + 输入密码 + 提升授权 + Elevar la autorizacion + + + + DialogCycleprint + + + Dialog + Dialog + + + + 1循环范围:0- + Rango de 1 ciclo: 0- + + + + 1循环次数: + 1 tiempos de ciclo: + + + + 2循环范围:0- + Rango de 2 ciclo: 0- + + + + 2循环次数: + 2 tiempos de ciclo: + + + + 3循环范围:0- + Rango de 3 ciclo: 0- + + + + 3循环次数: + 3 tiempos de ciclo: + + + + 6循环次数: + 6 tiempos de ciclo: + + + + 6循环范围:0- + Rango de 6 ciclo: 0- + + + + 5循环范围:0- + Rango de 5 ciclo: 0- + + + + 5循环次数: + 5 tiempos de ciclo: + + + + 4循环范围:0- + Rango de 4 ciclo: 0- + + + + 4循环次数: + 4 tiempos de ciclo: + + + + DialogFileOperation + + + Dialog + Dialog + + + + 本地文件 + Archivos locales + + + + U盘文件 + Archivo de la memoria USB + + + + 删除文件 + Eliminar archivos + + + + 删除全部 + Eliminar todo + + + + 从U盘导入 + Importar desde una memoria USB + + + + 导出到U盘 + Exportar a la memoria USB + + + + 插入 + Insertar + + + + 打开文件 + Abrir archivo + + + + 上一个 + Anterior + + + + 下一个 + Siguiente + + + + 退出 + Salida + + + + 文件操作 + Operaciones de archivo + + + + + + 警告 + Advertencia + + + + 是否确认删除当前文件? + ¿Confirma la eliminación del archivo actual? + + + + 是否确认删除所有文件? + ¿Confirma que se eliminan todos los archivos? + + + + + + + 提示 + Consejos + + + + 是否确认从U盘导入所有文件? + ¿Está seguro de importar todos los archivos desde la memoria USB? + + + + mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/ + + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + ¿Importación exitosa desde una memoria USB? + + + + 是否确认将所有文件导出到U盘? + ¿Está seguro de exportar todos los archivos a una memoria USB? + + + + 成功导出到U盘? + ¿Se exporta correctamente a la memoria USB? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + ¡La memoria USB no está insertada o la carpeta doc. en la raíz de la memoria USB no existe! + + + + DialogFontSize + + + Dialog + Dialog + + + + 7点(左横) + 7 píxeles (Izquierda Horizontal) + + + + 5点(英) + 5 píxeles + + + + 7点(右横) + 7 píxeles(Derecha Horizontal) + + + + 12点(中/英) + 12 píxeles + + + + 9点(中/英) + 9点(英) + 9 píxeles + + + + 7点(英) + 7 píxeles + + + + 16点(中/英) + 16 píxeles + + + + 24点(中/英) + 24 píxeles + + + + 9点(左横) + 9 píxeles (Izquierda Horizontal) + + + + 9点(右横) + 9 píxeles(Derecha Horizontal) + + + + 7点(孟加拉) + 7 píxeles(Bangladesh) + + + + 32点 + 32píxeles + + + + 7点(rf7) + 7点(数字) + 7píxeles(rf7) + + + + 21点(rf21) + 7píxeles(rf21) + + + + 12点(新罗马) + 12 píxeles(Roma) + + + + 123456890ABCDEFGWXYZ + 123456890ABCDEFGWXYZ + + + + - + - + + + + 查字库标识 + Consulta la identificación de la biblioteca de palabras + + + + 选择字体大小 + Elija el tamano de fuente + + + + DialogInputTxt + + + Dialog + Dialog + + + + DialogInsertVari + + + Dialog + Dialog + + + + 变量类型 + Tipo de variable + + + + 日 + Dia + + + + 计数器1 + Contador 1 + + + + 月 + Mes + + + + 分 + Minuto + + + + 时 + Hora + + + + 年 + Ano + + + + 计数器2 + #Contador 2 + + + + 秒 + Segundo + + + + 周 + Semana + + + + BarCode128 + BarCode128 + + + + DataMatrix + DataMatrix + + + + QRCode + QRCode + + + + 随机码1 + Codigo aleatorio 1 + + + + 有效日期 + Fecha vigente + + + + 生产日期 + Fecha de produccion + + + + Class + Class + + + + 计数器3 + Contador 3 + + + + 第XXX天 + Día xxx + + + + 隐藏变量 + + + + + 数字个数 + Cantidad de numeros + + + + 9个 + 9 + + + + 11个 + 11 + + + + 10个 + 10 + + + + 2个 + 2 + + + + 1个 + 1 + + + + 3个 + 3 + + + + 4个 + 4 + + + + 5个 + 5 + + + + 6个 + 6 + + + + 7个 + 7 + + + + 8个 + 8 + + + + 12个 + 12 + + + + 13个 + 13 + + + + 14个 + 14 + + + + 15个 + 15 + + + + 变量插入 + Insercion de variable + + + + DialogLineSpace + + + Dialog + Dialog + + + + + 0个像素 + 0 pixel + + + + + 1个像素 + Un pixel + + + + + 2个像素 + 2 pixel + + + + + 3个像素 + 3 pixel + + + + + 4个像素 + 4 pixel + + + + + 5个像素 + 5 pixel + + + + 6个像素 + 6 pixel + + + + 7个像素 + 7 pixel + + + + 行间距: + Espaciado de linea: + + + + 字符间距: + Espaciado de fuente: + + + + 选择行间距和字符间距 + Seleccione el espaciado de línea y el espaciado de fuente + + + + DialogPointDistanceAdjust + + + Dialog + Dialog + + + + 列首: + Primer lugar: + + + + 列中: + En la columna: + + + + 列尾: + Fin de columna: + + + + 重置 + Restablecer + + + + 测试 + Prueba + + + + DialogSaveFile + + + Dialog + Dialog + + + + 本地文件 + Archivos locales + + + + U盘文件 + Archivo de la memoria USB + + + + 预览文件内容: + Vista previa del contenido del archivo: + + + + 上一个 + Anterior + + + + 下一个 + Siguiente + + + + 请输入文件名: + Introduzca el nombre del archivo: + + + + 取消 + Cancelar + + + + + 保存 + Guardar + + + + 警告 + Advertencia + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + ¡La memoria USB no está insertada o la carpeta doc. en la raíz de la memoria USB no existe! + + + + DialogShowCounter + + + Dialog + Dialog + + + + 米标显示: + Muestra el signo de metros: + + + + 目前循环范围: + Rango de ciclo actual: + + + + + + 米 + Metro + + + + 剩余米数: + Los metros restantes: + + + + 循环次数: + Número de ciclos: + + + + 立即重新计米 + Remedir ahora + + + + 起始: + Inicio: + + + + 结束: + Fin: + + + + Dialoginputpasswd + + + Dialog + Dialog + + + + 修改密码: + Cambie su contrasena: + + + + Dialogmodifypasswd + + + Dialog + Dialog + + + + 修改密码: + Cambie su contrasena: + + + + 密码授权 + Autorizacion de contrasena + + + + DigitalInput + + + Form + Form + + + + 9 + 9 + + + + 3 + 3 + + + + 8 + 8 + + + + - + - + + + + 退格 + Retorceso + + + + 1 + 1 + + + + 4 + 4 + + + + 0 + 0 + + + + 5 + 5 + + + + 7 + 7 + + + + 2 + 2 + + + + 6 + 6 + + + + 全选 + Selección completa + + + + DlgInputAddr + + + Dialog + Dialog + + + + 请输入6位机编号(前3位为经销商编号) + Introduzca el número de máquina de 6 dígitos (los primeros 3 son el número del distribuidor) + + + + PowerOnCnt + PowerOnCnt + + + + PrintDotCnt + PrintDotCnt + + + + PowerMax + PowerMax + + + + PrintMax + PrintMax + + + + 开始时间 + Hora de inicio + + + + 结束时间 + Hora de finalizacion + + + + SuperNodeIP: + SuperNodeIP: + + + + edgeIP: + edgeIP: + + + + + + + + + . + . + + + + 喷码机恢复工作! + ¡La máquina de la impresión vuelve a trabajar! + + + + Mac:%1维护时间剩余 + 维护时间剩余 + Mac:%1Tiempo de mantenimiento restante + + + + 小时,喷码机将停止工作.请与供应商联系! + ¡Hora: la máquina parará el trabajo, comunique con la fábrica! + + + + Mac:%1维护时间已到,喷码机停止工作!请与供应商联系 + 维护时间已到,喷码机停止工作!请与供应商联系 + Mac:%1¡Llega el tiempo del mantenimiento, la máquina parará el trabajo, comunique con la fábrica + + + + + 当前日期: + Fecha actual: + + + + + 正确? + ¿Es correcto? + + + + DlgMutiLanguage + + + 界面语言设置 + Configuración del idioma de la interfaz + + + + 中文 + Chino + + + + 泰语 + Tailandés + + + + 英语 + ingles + + + + 波斯语 + + + + + 土耳其语 + turco + + + + 越南语 + Vietnamita + + + + 西班牙语 + espanol + + + 汉语(Chinese) + Chino + + + 英语(English) + Ingles + + + 越南语(Vietnam) + Vietnamita + + + 俄罗斯语(Russian) + Ruso + + + 日语(Japanese) + Japones + + + 韩语(Korean) + Coreano + + + English + English + + + + (注意: 选择切换显示语言, 重启后才能生效) + (Nota: si elige cambiar el idioma de la pantalla, tendra efecto despues de reiniciar) + + + Turk + Turk + + + (Nota: Elija cambiar el idioma de visualización, reinicie para tener efecto) + (Nota: Elija cambiar el idioma de visualización, reinicie para tener efecto) + + + + DlgMyWarring + + + 警告 + Advertencia + + + + 确定 + Confirmar + + + + TextLabel + TextLabel + + + + DlgSelectInputLanguage + + + Dialog + Dialog + + + + 汉语(Chinese) + Chino + + + + 英语(English) + Ingles + + + + 越南语(Vietnam) + Vietnamita + + + + DlgShowMsg + + + 警告 + Advertencia + + + + 确定 + Confirmar + + + + DlgVarLength + + + 变长喷印参数 + Alargar parametro de impresion + + + + 头部长度(m) + Longitud de la cabeza(m) + + + + 尾部长度(m) + Longitud de la cola(m) + + + + 总长(m) + Longitud total(m) + + + + + 调整长度(mm) + Ajustar longitud(mm) + + + + 可变长度允许 + Longitud variable permitida + + + + 确定 + Confirmar + + + + FileLogger + + + The directory and all its contents have been removed + + + + + Failed to remove the directory + + + + + FormScenedlg + + + Form + Form + + + + Last + + + + + First + + + + + 重置位置 + + + + + 另存为 + Guardar como + + + + 保存 + Guardar + + + + 新增图元 + Nuevos elementos agregados + + + + 新建 + Nuevo + + + + 打开 + + + + + 删除图元 + Eliminar elementos + + + + 编辑图元 + Editar elementos + + + + 插入图像 + + + + + 场景缩小 + + + + + 场景放大 + + + + Save + Save + + + + Next-item + + + + + 预览 + Vista previa + + + + Prev-item + + + + + Test2 + + + + + 插入图片 + + + + + + [ %1行 x %2列 ] + [%1 fila x %2 columna] + + + + <html><head/><body><p>[<span style="color:red;font-size:12px;"> %1行 </span>x %2列 ]</p></body></html> + + + + + InkJetPrinter + + + TabWidget + TabWidget + + + + 主窗口 + 主窗口 + Ventana principal + + + + + + 信息编辑 + Editar informacion + + + + 图案编辑 + Editar Imagen + + + + 打印设置 + Configuracion de impresion + + + + 触发设置 + Configuracion del disparador + + + + + 系统设置 + Configuracion del sistema + + + + + 系统管理 + Gestion del sistema + + + + + 其他信息 + Otra Informacion + + + + + 日志信息 + Informacion de registro + + + + + 网络管理 + Administracion de redes + + + + 电压调整 + Ajuste de voltaje + + + + Save + Save + + + + 不连续电压 + Voltaje discontinuo + + + + + vol0 + vol0 + + + + + vol1 + vol1 + + + + + vol2 + vol2 + + + + + vol3 + vol3 + + + + + vol4 + vol4 + + + + + vol5 + vol5 + + + + + vol6 + vol6 + + + + + vol7 + vol7 + + + + + vol8 + vol8 + + + + + vol9 + vol9 + + + + + vol10 + vol10 + + + + + vol11 + vol11 + + + + + vol12 + vol12 + + + + + vol13 + vol13 + + + + + vol14 + vol14 + + + + + vol15 + vol15 + + + + + vol16 + vol16 + + + + + vol17 + vol17 + + + + + vol18 + vol18 + + + + + vol19 + vol19 + + + + + vol20 + vol20 + + + + + vol21 + vol21 + + + + + vol22 + vol22 + + + + + vol23 + vol23 + + + + + vol24 + vol24 + + + + + vol25 + vol25 + + + + + vol26 + vol26 + + + + + vol27 + vol27 + + + + + vol28 + vol28 + + + + + vol29 + vol29 + + + + + vol30 + vol30 + + + + + vol31 + vol31 + + + + + vol32 + vol32 + + + + + vol33 + vol33 + + + + + vol34 + vol34 + + + + + vol35 + vol35 + + + + + vol36 + vol36 + + + + + vol37 + vol37 + + + + + vol38 + vol38 + + + + + vol39 + vol39 + + + + 连续电压 + voltaje continuo + + + + 满列电压 + Voltaje completo + + + + fvol0 + fvol0 + + + + fvol1 + fvol1 + + + + fvol2 + fvol2 + + + + fvol3 + fvol3 + + + + fvol4 + fvol4 + + + + fvol5 + fvol5 + + + + fvol6 + fvol6 + + + + fvol7 + fvol7 + + + + fvol8 + fvol8 + + + + fvol9 + fvol9 + + + + fvol10 + fvol10 + + + + fvol11 + fvol11 + + + + fvol12 + fvol12 + + + + fvol13 + fvol13 + + + + fvol14 + fvol14 + + + + fvol15 + fvol15 + + + + fvol16 + fvol16 + + + + fvol17 + fvol17 + + + + fvol18 + fvol18 + + + + fvol19 + fvol19 + + + + fvol20 + fvol20 + + + + fvol21 + fvol21 + + + + fvol22 + fvol22 + + + + fvol23 + fvol23 + + + + fvol24 + fvol24 + + + + fvol25 + fvol25 + + + + fvol26 + fvol26 + + + + fvol27 + fvol27 + + + + fvol28 + fvol28 + + + + fvol29 + fvol29 + + + + fvol30 + fvol30 + + + + fvol31 + fvol31 + + + + fvol32 + fvol32 + + + + fvol33 + fvol33 + + + + fvol34 + fvol34 + + + + fvol35 + fvol35 + + + + fvol36 + fvol36 + + + + fvol37 + fvol37 + + + + fvol38 + fvol38 + + + + fvol39 + fvol39 + + + + 其他调整 + Otros ajustes + + + + 整体缩放(%) : + Reduccion integral: + + + + WriteByte + WriteByte + + + + ReadByte + ReadByte + + + + + + Address: + Address: + + + + + Value: + Value: + + + + WriteWord + WriteWord + + + + ReadWord + ReadWord + + + + ReadDword + ReadDword + + + + WriteDword + WriteDword + + + + ValueH: + ValueH: + + + + ValueL: + ValueL: + + + + 定时开机 + inicio cronometrado + + + + 读卡器故障! + + + + + 13.读卡器故障! + + + + + + 压力泄漏或压力传感器故障! + ¡Fuga de presion o fallo del sensor de presion! + + + + 运行中压力泄漏,停齿轮泵! + ¡Fuga de presion durante el funcionamiento, detenga la bomba de engranajes! + + + + + 测试时间结束,准备关机 + El tiempo de prueba ha terminado, listo para apagar + + + + 定时开机循环完成,准备关机 + El ciclo de encender cronometrado está completo, listo para apagarse + + + + 准备关机 + Listo para apagarse + + + + 与FPGA失去通信!!! + ¡¡¡Perder la comunicación con FPGA!!! + + + + 与FPGA通信恢复正常 + La comunicación con FPGA vuelve a la normalidad + + + + 开始自检,请等待60秒............... + Iniciar autoprueba, por favor espere 60 segundos... + + + + 开始自检,请等待%1秒............... + Iniciar autoprueba, por favor espere %1 segundo... + + + + + 自检完成!!! + Autoprueba completada!!! + + + + 缺少墨水,喷码机不能正常工作! + + + + 墨水或溶剂空,准备关机 + Tinta o disolvente vacío, listo para apagar + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + ¡¡¡ La velocidad de impresión por pulverización demasiado rápida!!! ¡¡¡No se puede imprimir por completo, pausar automáticamente!!! + + + + 喷印速度过快!无法喷印完全!!! + ¡¡¡ La velocidad de impresión por pulverización demasiado rápida!!! ¡¡¡No se puede imprimir por completo!!! + + + + 压力波动超过设定的5个值. + La fluctuación de presion supera los 5 valores establecidos. + + + + 停止打印,自动关闭高压. + Parar la impresión y apagarse automáticamente el alto voltaje. + + + + 压力异常:上次压力值%1,当前压力值%2 + Presión anormal: valor de última presión %1, valor de presión actual %2 + + + 高压异常:上次电流值%1,当前电流值%2 + Anomalía de alto voltaje: último valor de corriente %1, valor actual de corriente %2 + + + + + 齿轮泵转速过高,请立即停机并联系供应商! + iAlta velocidad, detengase y comuniquese con el proveedor! + + + + + 齿轮泵转速过高,请清理过滤器或者检查是否泄露! + Alta velocidad, limpie el filtro o compruebe si hay fugas! + + + 混合阀打开1: + Se abre la válvula de mezcla 1: + + + + 混合阀打开2: + Se abre la válvula de mezcla 2: + + + + 提示 + insinuacion + + + + 是否接收新的信息! + Ya sea para recibir nueva informacion! + + + 请立即检查过滤器是否堵塞或者漏气! + iCompruebe inmediatamente si el filtro está obstruido o tiene fugas! + + + 请清理过滤器或者检查是否泄露! + ¡Limpie el filtro o compruebe si hay fugas! + + + + + + 刷墨水卡成功! + + + + + + + 刷溶剂卡成功! + + + + + + MAC无效卡! + + + + + + 无效卡! + + + + + + 9.墨水空,机器自动关机 + + + + + + 10.溶剂空,机器自动关机 + + + + + + 11.墨水空,机器再次自动关机 + + + + + + 12.溶剂空,机器再次自动关机 + + + + + + 21.没有使用原厂墨水耗材,机器自动关机 + + + + + + 22.没有使用原厂溶剂耗材,机器自动关机 + + + + + + 23.没有使用原厂墨水耗材,机器再次自动关机 + + + + + + 24.没有使用原厂溶剂耗材,机器再次自动关机 + + + + + + 1.请添加墨水,否则机器将在24小时后自动关机! + + + + + + 2.请添加墨水,否则机器将在%1小时后自动关机! + + + + + + 3.请添加墨水,否则机器将在%1分钟后自动关机! + + + + + + 4.请添加墨水,否则机器将在2分钟后自动关机! + + + + + + 5.请添加溶剂,否则机器将在6小时后自动关机! + + + + + + 6.请添加溶剂,否则机器将在%1小时后自动关机! + + + + + + 7.请添加溶剂,否则机器将在%1分钟后自动关机! + + + + + + 8.请添加溶剂,否则机器将在2分钟后自动关机! + + + + + + + 13.请刷墨水卡,请使用原厂墨水耗材,否则机器将在24小时后自动关机! + + + + + + 14.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后自动关机! + + + + + + 15.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1分钟后自动关机! + + + + + + + 16.请刷墨水卡水,请使用原厂墨水耗材,否则机器将在2分钟后自动关机! + + + + + + + 17.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2小时后自动关机! + + + + + + 18.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后自动关机! + + + + + + 19.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1分钟后自动关机! + + + + + + + 20.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2分钟后自动关机! + + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + ¡El calentador no alcanza la temperatura esperada durante mucho tiempo, fallo o configuración incorrecta! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Error!Fallo de la bomba principal de la tinta + + + + + 主墨泵故障!!! + Fallo de la bomba principal de la tinta! + + + + 错误!!!!!!!!!!!压缩机故障 + Error!Fallo del compresor + + + + 压缩机故障!!! + Fallo del compresor! + + + + 错误!粘度计下位灯故障. + Error!Fallo de la lámpara inferior del viscosímetro. + + + + 错误!粘度计故障:检测不到上位灯. + Error!!!! No se detecta la lámpara superior del viscosímetro. + + + + 添加溶剂: + + + + + + 警告!!!!!!!!!!!粘度值偏低 + Advertencia!El valor de viscosidad es bajo + + + + + 错误!!!!!!!!!!!粘度偏大故障 + Error!La viscosidad es demasiado alta + + + + 粘度检测异常,粘度值太大!!! + ¡La detección de viscosidad es anormal, el valor de viscosidad es demasiado alta! + + + + + + 电机故障 + Fallo del motor + + + + 电机故障!!! + Fallo del motor! + + + + + 回收槽到头 + Caja de reciclaje llega al final + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + La caja de reciclaje está atascada o la configuración del tiempo de apaertura y cierre está incorrecta + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + ¡la velocidad de la impresión por pulverización demasiado rápida o el intervalo demasiado corto! ¡¡¡No se puede imprimir por completo, pausar automáticamente la impresión!!! + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + ¡la velocidad de la impresión por pulverización demasiado rápida o el intervalo demasiado corto! ¡¡¡No se puede imprimir por completo!!! + + + + InputMethod + + + Form + Form + + + + 1 书 + Libro + + + + 2 输 + Perder + + + + 3 数 + Contar + + + + 4 属 + Permanecer + + + + 5 熟 + Maduro + + + + 上一页 + Pagina Anterior + + + + 下一页 + Pagina Siguiente + + + + ` + ` + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + 6 + 6 + + + + 7 + 7 + + + + 8 + 8 + + + + 9 + 9 + + + + 0 + 0 + + + + - + Advertencia + + + + = + = + + + + 退格 + Retroceso + + + + + 英文 + Ingles + + + + q + 1 + + + + w + w + + + + e + e + + + + r + r + + + + t + t + + + + y + y + + + + u + u + + + + i + i + + + + o + o + + + + p + p + + + + [ + [ + + + + ] + ] + + + + \ + \ + + + + + 大写 + Mayuscula + + + + a + a + + + + s + s + + + + d + d + + + + f + f + + + + g + g + + + + h + h + + + + j + j + + + + k + k + + + + l + l + + + + ; + ; + + + + ' + ' + + + + Enter + Enter + + + + Shift + Shift + + + + z + z + + + + x + x + + + + c + c + + + + v + v + + + + b + b + + + + n + n + + + + m + m + + + + , + , + + + + . + . + + + + / + / + + + + 上 + Arriba + + + + 特殊字 + Palabra especial + + + + 隐藏 + Oculto + + + + Ctrl + Ctrl + + + + 删除 + Eliminar + + + + 行首 + Primera Linea + + + + 行尾 + Fin de linea + + + + 左 + Izquierda + + + + 下 + Abajo + + + + 右 + Derecha + + + + + 错误 + Error + + + + hanziDisplayLabels缺少初始化 + Hanzi DisplayLabels carece de inicialización + + + + warning + Advertencia + + + + myInputMethod is null + + Advertencia + + + + 找不到输入法初始化文件 + No se pudo encontrar el archivo de inicialización de + + + + 小写 + Minusculas + + + + Tiếng Việt + Tiếng Việt + + + + Russian + Russian + + + + Japanese + Japanese + + + + 全选 + Selección completa + + + + 复制 + Copiar + + + + 粘贴 + Pegar + + + + 剪切 + Cortar + + + + 后退 + Retroceso + + + + InsertSpaceNumDialog + + + 插入空格数 + Número de espacios Insertos + + + + 空格个数: + Número de Espacios: + + + + LogInfo + + + Form + Form + + + + 当前状态 + Estado actual + + + + 清空当前状态 + Vaciar el estado actual + + + + 历史状态 + Estado de la historia + + + + 删除历史文件 + Eliminar archivos históricos + + + + 打开历史文件 + Abrir archivo histórico + + + + TextLabel + TextLabel + + + + 导出日志到U盘 + Exportar registros a disco U + + + + 版本信息 + Información de la versión + + + + 请先打开历史状态文件! + ¡Abra primero el archivo histórico! + + + + + + + 警告 + Advertencia + + + + + + 无法打开文件 + El archivo no se puede abrir + + + + + + + 提示 + Consejos + + + + 是否确认将所有日志文件导出到U盘? + ¿Está seguro de exportar todos los archivos de registro a una memoria USB? + + + + U盘未插入或无法识别,请重新插拔设备! + + + + + 成功导出到U盘 + + + + 成功导出到U盘? + ¿Se exporta correctamente a la memoria USB? + + + + 选择历史记录文件 + Seleccione el archivo histórico + + + + 是否确认将历史日志文件全部清除? + Estas seguro de borrar todos los archivos de registro del historial? + + + + 是否确认将当前日志全部清除? + Estas seguro de borrar todos los registros actuales? + + + + MainWindow + + + InkJet + InkJet + + + + 编辑 + Editar + + + + 打开文件 + Abrir archivo + + + + 二维码 + Código QR + + + + 条形码 + Código de barras + + + + 缩小 + Reducir + + + + 放大 + Ampliar + + + + 获取数据 + recuperar datos + + + + 交替打印文件名 + Alternativamente imprimir los nombres de archivo + + + + 最大:[40行x 2048列] + Máx.: 40 filas x 2048 columnas + + + + 同步器速度 + Velocidad del sincronizador + + + + 当前时间 + Hora actual + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;"><br /></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi';"></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi';"></p></body></html> + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt; vertical-align:bottom;"><br /></p></body></html> + + + + + 墨线开关 + Interruptor +del nivel de +tinta + + + + 喷头盖开 + Abrieta la +tapa de la +boquilla + + + + 墨水缸满 + Cilindro de +tinta lleno + + + + 墨水液位 + Nivel de +tinta + + + + 溶剂液位 + Nivel de +disolvente + + + + 回收故障 + Fallo de +reciclaje + + + + 粘度故障 + Fallo de +viscosidad + + + + 相位故障 + Fallo de +fase + + + + 高压故障 + Fallo de +alta +voltaje + + + + 故障恢复 + Recuperación + del fallo + + + + 立即重新计米 + Remedir ahora + + + + 产品计数 + Contar los productos + + + + 产品总计数 + Cuenta total de productos + + + + 关机 + Apagar + + + + 2014-08-23 + 2014-08-23 + + + + 高压包 + Paquete de alta tensión + + + + 粘度 + Viscosidad + + + + 压力 + Presión + + + + + 隔膜位置 + Posición del diafragma + + + + + + + 开 + Encender + + + + + + + 关 + Apagar + + + + + 暂停打印 +停止高压 + Pausar impresión +detener la alta presión + + + + 紧急停机 + parada de emergencia + + + + 泵启动 + La bomba arranca + + + 启动 + Iniciar + + + + 喷嘴逆清洗 + Limpieza inversa de la boquilla + + + + + 机箱: + Chasis: + + + + + + 正在喷印............... + Impresión... + + + + 喷头盖开, 喷印无法正常进行!!! + La boquilla está abierta, la impresión por pulverización no se puede funcionar normalmente!!! + + + + + 墨水缸满报警 + Advertencia del lleno de cilindro de tinta + + + + + 墨水液位报警 + Advertencia del nivel de tinta + + + + + 溶剂液位报警 + Advertencia de nivel de disolvente + + + + + 高压故障,暂停打印 + Fallo de alta tensión, pausar la impresión + + + + + 高压故障,暂停打印. + Falla de alta tensión, suspensión de la impresión. + + + + 高压故障,关回收槽 + Fallo de alta tensión, cerrar la caja de reciclaje + + + + 高压故障,关回收槽和墨线 + Fallo de alta tensión, cerrar la caja de reciclaje y la línea de tinta + + + + + + + + 回收故障,关闭回收槽,关墨线 + Fallo del reciclaje, cerrar la caja de reciclaje y la línea de tinta + + + + 回收故障. + Fallo de reciclaje. + + + + 回收异常,墨线可能偏离.(%1) + El reciclaje es anormal y la línea de tinta puede desviarse. (%1) + + + + 维护时间已到,喷码机停止工作! + ¡Llega el tiempo del mantenimiento, la máquina para el trabajo! + + + + + 暂停喷印............... + Pausar impresión... + + + + 相位故障:飞行时间错误! + Fallo de fase: hora de vuelo equivocada! + + + + 相位故障:相位检测错误! + Fallo de fase: ¡Error de detección de fase! + + + + + + 相位故障,准备关机 + Fallo de fase, listo para apagarse + + + + + + 相位故障,暂停打印 + Fallo de fase, pausar la impresión + + + + 相位故障,屏蔽DAC输出 + Fallo de fase, bloquea la salida DAC + + + + + 相位故障,屏蔽充电 + Fallo de fase, bloquea la recarga + + + + 齿轮泵转速 + velocidad + + + + 交替打印 + Impresión alternativa + + + + 电眼交替 + Ojo electrónico alternativo + + + + %1.%2[%3.%4]米/分 + %1.%2[%3.%4]metro/minuto + + + + 列延时:%1点 + Retraso de columna:%1 punto + + + + + + + + + + + + + + + 警告 + Advertencia + + + + 无法打开文件 + El archivo no se puede abrir + + + + 打开文件: + Abrir archivo: + + + + + + + + 提示 + Consejos + + + + 文件未保存,是否先保存文件! + El archivo no se guarda, quiere guardar el archivo primero! + + + + + + + 变量数大于8个,某些变量将不起作用!!! + El número de variables es mayor que 8 y algunos variables no funcionarán!!! + + + + + 请减少信息中的变量(或计数器)数量. + Reduzca el número de variables (o contadores) en la información. + + + + warning,界面上有变量未显示完全 + advertencia, hay variables en la interfaz que no se muestran completamente + + + + + + + [ %1行 x %2列 ] + [%1 fila x %2 columna] + + + + + + + + 错误 + Error + + + + 喷印间隔过短,应高于%1! + El intervalo de impresión es demasiado corto y debe ser superior a %1! + + + + 喷头盖未关,请先关喷头盖! + La tapa de la boquilla no está cerrada, por favor cierre la boquilla primero! + + + + 墨线未开,请先开墨线开关! + La línea de tinta no está abierta, ¡abra primero el interruptor de línea de tinta! + + + + 正在加高压... + Se añade alta presión... + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Número total actual de columnas %1, número total admitido de columnas %2, reduzca la longitud de la cadena de impresión + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Tiempo de impresión %1ms, intervalo de disparo: %2ms, intervalo de disparo debe ser al menos mayor que 3ms de tiempo de impresión + + + 同步目标每列有%1.%2个同步脉冲 + Sincronice el objetivo con %1.% 2 pulsos de sincronización por columna + + + + + 开始打印 + Comenzar a imprimir + + + + 回收槽未到底!!!!!! + No llega al final la caja del reciclaje!!!! + + + + 停止打印 + Cesar a imprimir + + + + + 随机码文本将展出到U盘,请插入U盘 + El texto del código aleatorio se mostrará en la memoria USB, inserte la memoria USB + + + + 暂停打印 + Pausar la impresión + + + + 继续打印 + Continuar imprimiendo + + + + 继续打印 +保持高压 + seguir imprimiendo +mantener alta presión + + + + 正在排气 ............... + agotador ................ + + + + + 停止 + Cesar + + + + 正在打开回收槽... + Está abriendo la caja del reciclaje… + + + + 停止打开 + Cesar a abrir + + + + + 警告!回收槽开关时间未设置! + ¡Advertencia! ¡El tiempo de apertura y cierre de la caja del reciclaje no está configurado! + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Hay un bloqueo antes de que la caja de reciclaje o el tiempo esta configurado incorrectamente. ¿La posición actual está configurada como la posición superior? + + + + 正在关闭回收槽... + Está cerrando la caja del reciclaje… + + + + 停止关闭 + Cesar a cerrar + + + + 准备关机...... + Listo para apagarse... + + + + 泵停止 + Bomba detenida + + + + 回收槽未关,是否关闭回收槽后关机! + ¡La caja de reciclaje no está cerrada, quiere cerrarla y apagar! + + + + 是否确认关机? + ¿Confirma apagarse? + + + + + 最多支持的列数目为:%1请减小信息长度. + El número máximo de columnas admitidas es: %1 Reduzca la longitud de la información. + + + + 开始打印1 + Comenzar a imprimir + + + + + 正在准备关机,请等待%1秒............... + + + + + 是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动! + + + + + 是否启动齿轮泵? + + + + + 保存html文件失败! + + + + + 是否初始化产品计数? + Se inicializa a contar los productos? + + + + 是否清除总产品计数? + Se ha despejado el número total de productos? + + + + 是否立即重新计米? + Desea remedir inmediatamente? + + + + 警告:‘-’和空格的宽度不一样 + Advertencia: '-' no es la misma anchura que un espacio + + + + 条形码信息编辑 + Editar la información sobre códigos de barras + + + + + 二维码信息编辑 + Editar la información de códigos QR + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;"><br /></p></body></html> + + + + + 获取DM码内容为空! + ¡El contenido del código Obtener DM está vacío! + + + + + 获取DM码内容: + Obtenga el contenido del código DM: + + + + + 获取DM码内容跟上次相同 + El contenido de obtener el código DM es el mismo que la última vez + + + + 高压故障:两高压偏转板间的电压检测异常 + Fallo de alta tensión: anomalías de detección de voltaje entre dos placas de desviación de alto voltaje + + + + 1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座; + Placa de deflexión de alta presión y base de alta presión húmeda, sucia, por favor limpie y seque la placa de alta presión y la base de alta presión; + + + + 2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间; + 2. La máquina reemplazar la placa principal o el paquete de alto voltaje, ingrese la "configuración del sistema" haga clic en "restablecer alto voltaje", la altura de la palabra establecida en 90, restablecer el valor de alarma de alto voltaje debe estar entre 480-550; + + + + 3.高压线路漏电,请更换高压线路; + Fuga de línea de alta tensión, reemplace la línea de alta tensión; + + + + 4.高压底座漏电,请更换高压底座。 + Fuga de la base de alto voltaje, reemplace la base de alta tensión. + + + + 墨水过多:墨水溢出 + Demasiada tinta: se derrama la tinta + + + + 1. 请停止添加墨水; + Por favor, deje de agregar tinta; + + + + 2. 请排出多余墨水。 + Por favor, escurra el exceso de tinta. + + + + 墨水液位:墨水即将耗尽 + Nivel de tinta: La tinta se agota + + + + 1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。 + La tinta se agota y se apagará automáticamente después de 3 horas. + + + + 回收故障:未检测到有墨水回收 + Fallo de reciclaje: No se ha detectado la recuperación de tinta + + + + 1. 墨水未射入回收管,请修正墨线方向; + La tinta no entra en el tubo de recuperación, corrija la dirección de la línea de tinta; + + + + 2. 墨水粘度太低,请更换新墨水; + La viscosidad de la tinta es demasiado baja, sustituya la nueva tinta; + + + + 3. 回收管堵塞,请清通或者更换回收管; + Tubo de reciclaje bloqueado, por favor despeje o reemplace el tubo de reciclaje; + + + + 4. 回收泵故障,请清洗或者更换回收泵; + Fallo de la bomba de reciclaje, limpie o reemplace la bomba de recuperación; + + + + 5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮. + Después de confirmar que los parámetros y el equipo no son anormales, vaya a la "configuración de impresión" para cancelar la comprobación de "tratamiento de fallos de reciclaje", volver a la interfaz de la ventana principal haga clic en el botón "recuperación de fallos". + + + + 溶剂液位:溶剂即将耗尽 + Nivel de disolvente: El disolvente se está acabando + + + + 1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。 + 1. El disolvente se agota y se apagará automáticamente después de 3 horas, por favor agregue el disolvente a tiempo. + + + + + 粘度故障报警 + Alarma de fallo de viscosidad + + + + 粘度故障:墨水粘度无法自动调整 + Fallo de viscosidad: La viscosidad de la tinta no se puede ajustar automáticamente + + + + 1. 混合阀失灵,请冲洗或者更换混合阀; + Si la válvula de mezcla no funciona, enjuague o reemplace la válvula de mezcla; + + + + 2. 墨水罐内的墨水异常,请更换新墨水; + La tinta en el depósito de tinta es anormal, por favor reemplace la nueva tinta; + + + + 粘度计异常: + Anomalía del viscosímetro: + + + + 1. 泵前过滤网堵塞,请更换泵前滤网; + 1. Filtro frontal de la bomba bloqueado, reemplace el filtro de la bomba; + + + + 2. 粘度泵异常,请清洗或更换粘度泵; + 2. Bomba de viscosidad anormal, limpie o reemplace la bomba de viscosidad; + + + + 3. 粘度传感器异常,请检查传感器线路或者更换传感器. + 3. El sensor de viscosidad es anormal, compruebe la línea del sensor o reemplace el sensor. + + + + 相位故障报警 + Alarma de fallo de fase + + + + 相位故障:相位信号检测异常 + Fallo de fase: Detección de señal de fase anormal + + + + 1. 墨水分裂不正常,请调整墨水分裂; + 1. La división de tinta no es normal, ajuste la división de tinta; + + + + 2. 充电槽或者相检头脏污,请清洗充电槽和相检头; + 2. La caja de carga o el cabezal de inspección de fase está sucio, limpie la caja de carga y el cabezal de inspección de fase; + + + + 3. 放大板功能性异常,请更换放大板; + 3. La placa de amplificación no es funcional, reemplace la placa de aumento; + + + + 4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离; + La distancia entre el cabezal de detección de fase y la línea de tinta es demasiado lejos, verifique el mecanismo de movimiento de la boquilla, ajuste la distancia entre el cabezal de detección de fase y la línea de tinta; + + + + 5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰; + 5. Si la línea de tierra no está conectada o la interferencia exterior, conecte la línea de tierra o aísle la interferencia exterior; + + + + 6. 墨水质量异常,请更换新墨水。 + 6. La calidad de la tinta es anormal, sustituya la nueva tinta. + + + + 回收槽开关检测完成! + iDeteccion de interruptor completa! + + + + MemDisplayAndEdit + + + Form + Form + + + + 07 + 07 + + + + 02 + 02 + + + + 06 + 06 + + + + 0D + 0D + + + + 09 + 09 + + + + 03 + 03 + + + + 01 + 01 + + + + 04 + 04 + + + + 0C + 0C + + + + 0A + 0A + + + + 0F + 0F + + + + 05 + 05 + + + + 00 + 00 + + + + 08 + 08 + + + + 0B + 0B + + + + 0E + 0E + + + + 基地址: + Dirección de base: + + + + 0x0000 + 0x0000 + + + + 0xb100 + 0xb100 + + + + 0xb200 + 0xb200 + + + + 0xa400 + 0xa400 + + + + 0xe000 + 0xe000 + + + + 读空间 + Espacio de lectura + + + + 写空间 + Espacio de escritura + + + + 进制转换 + Conversión en el sistema + + + + + 编辑 + Editar + + + + 上一页 + Página anterior + + + + 下一页 + Página siguiente + + + + 完成 + Completa + + + + ModbusSerial + + 接收到开始打印命令 + Comando de inicio de impresión recibido + + + 接收到暂停打印命令 + Pausar comando de impresión recibido + + + 接收到停止打印命令 + Recibido comando de parada de impresión + + + 接收到DM码数据命令 + Comando de datos de código DM recibido + + + + MyFileDialog + + + 确定 + Confirmar + + + + NetworkManager + + + Form + Form + + + + 手动设定 + Ajuste manual + + + + + IP: + IP: + + + + Mask: + Mask: + + + + GW: + GW: + + + + 取消 + Cancelar + + + + 有线LAN + LAN cableada + + + + WiFi: + WIFI: + + + + SSID: + SSID: + + + + Status: + Status: + + + + Disconnect + Disconnect + + + + auth: + auth: + + + + Encryption: + Encryption: + + + + Scan + Scan + + + + Plaintext (open / no authentication) + Plaintext (open / no authentication) + + + + 主获取数据按钮 + botón principal de obtención de datos + + + + Static WEP (no authentication) + Static WEP (no authentication) + + + + Static WEP (Shared Key authentication) + Static WEP (Shared Key authentication) + + + + IEEE 802.1X + IEEE 802.1X + + + + WPA-Personal (PSK) + WPA-Personal (PSK) + + + + WPA-Enterprise (EAP) + WPA-Enterprise (EAP) + + + + WPA2-Personal (PSK) + WPA2-Personal (PSK) + + + + WPA2-Enterprise (EAP) + WPA2-Enterprise (EAP) + + + + 设备码: + Código del dispositivo: + + + + 服务IP: + IP del servicio: + + + + None + None + + + + WEP + WEP + + + + TKIP + TKIP + + + + CCMP + CCMP + + + + 8754 + 8754 + + + + 服务端口: + Puerto de servicio: + + + + PSK: + PSK: + + + + Password: + Password: + + + + 获取数据 + recuperar datos + + + + Network: + Network: + + + + 测试 + Prueba + + + + 应用配置 + Configuración de la aplicación + + + + 去掉数字码 + eliminar código digital + + + + 去掉QR码 + eliminar código QR + + + + ScanSSID + ScanSSID + + + + Connect + Connect + + + + 1 + 1 + + + + 47.111.170.144 + 47.111.170.144 + + + + AddNetwork + AddNetwork + + + + Remove + Remove + + + + wpa_supplicant service is not running. +Do you want to start it? + wpa_supplicant service is not running. +Do you want to start it? + + + + Disconnected + Disconnected + + + + Inactive + Inactive + + + + Scanning + Scanning + + + + Authenticating + Authenticating + + + + Associating + Associating + + + + Associated + Associated + + + + 4-Way Handshake + 4-Way Handshake + + + + Group Handshake + Group Handshake + + + + Completed + Completed + + + + Unknown + Unknown + + + + Could not get status from wpa_supplicant + Could not get status from wpa_supplicant + + + + Select any network + Select any network + + + + WPS AP in active PBC mode found + WPS AP in active PBC mode found + + + + Press the PBC button on the screen to start registration + Press the PBC button on the screen to start registration + + + + WPS AP with recently selected registrar + WPS AP with recently selected registrar + + + + WPS AP detected + WPS AP detected + + + + PBC mode overlap detected + PBC mode overlap detected + + + + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + + + + Network configuration received + Network configuration received + + + + Registration started + Registration started + + + + Registrar does not yet know PIN + Registrar does not yet know PIN + + + + Registration failed + Registration failed + + + + Registration succeeded + Registration succeeded + + + + WPA Pre-Shared Key Error + WPA Pre-Shared Key Error + + + + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + + + + Network ID Error + Network ID Error + + + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + + + + Failed to add network to wpa_supplicant +configuration. + Failed to add network to wpa_supplicant +configuration. + + + + Failed to enable network in wpa_supplicant +configuration. + Failed to enable network in wpa_supplicant +configuration. + + + + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + + + + Yes + Yes + + + + No + No + + + + Failed to remove network from wpa_supplicant +configuration. + Failed to remove network from wpa_supplicant +configuration. + + + + 是否去获取数据! + Ya sea para obtener los datos! + + + + 获取数据中... + Obteniendo datos... + + + + + 上报数据中... + Reportando datos... + + + + + + + 提示 + Consejos + + + + + IP设置错误! + ¡Error de configuración de IP! + + + + 应用成功 + éxito de la aplicación + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Posición de fase: + + + 相位偏移: + Desplazamiento de fase: + + + + 飞行时间: + Tiempo de vuelo: + + + + DetectDelay + DetectDelay + + + 相检: + Comprobación de fase: + + + + 相位偏移: + Compensar: + + + + 相检: + Inspección: + + + + FullTimeEn + FullTimeEn + + + + DetectVol + DetectVol + + + + HighLowRatio + HighLowRatio + + + + 充电占空比100% + Ciclo de trabajo del 100% + + + + detect_num + detect_num + + + + + 锁定相位 + cierre + + + + 相位检测电压: + 相位检测电压 + Voltaje de: + + + + 检测延时: + Demora: + + + + 检测墨点数量: + 检测延迟 : + cantidad: + + + PhaseVol : + PhaseVol : + + + + 频闪灯周期: + Ciclo de estroboscopio: + + + Num : + Num : + + + DetectDelay : + DetectDelay : + + + + 应用当前配置 + Aplicar la configuración actual + + + + 提示 + Consejos + + + + 应用成功 + Aplicación exitosa + + + + 点 + Puntos + + + + 解锁相位 + Fase desbloqueo + + + + PicEdit + + + Form + Form + + + + 开启软键盘 + Encienda el teclado suave + + + + 插入变量 + Insertar variable + + + + + 保存/打印 + Guardar / Imprimir + + + + 缩小 + Reducir + + + + 放大 + Ampliar + + + + 5点阵 + 5 pixeles + + + + 7点阵 + 7 pixeles + + + + 9点阵 + 9 pixeles + + + + 12点阵宋体 + 12 pixeles + + + + 16点阵宋体 + 16 pixeles + + + + 16点阵黑体 + 16 pixeles Heiti + + + + 24点阵宋体 + 24 pixeles + + + + 24点阵黑体 + 24 pixeles + + + + 列高 + Altura de fija + + + + 无加粗 + Sin negrita + + + + 加粗1倍 + 1 1x negrita + + + + 加粗2倍 + 2 2x negrita + + + + 光栅[X:Y] + Rejilla [X: Y] + + + + 放大比例 + Ampliación + + + + 插入模式 + Modo de inserción + + + + 文件名 + Nombre de archivo + + + + CURR[X,Y] + CURR[X,Y] + + + + 新建信息 + Nueva información creada + + + + 打开文件 + Abrir archivo + + + + 字符间距 + Espaciado de fuente + + + + 插入/修改 + Insertar / Modificar + + + + 删除字符 + Eliminar caracteres + + + + 插入图片 + Insertar imagen + + + + 保存为 + Guardar como + + + + + + 字库编辑 + Edición de la biblioteca de palabras + + + + 网格 + Cuadrícula + + + + 粗体 + Negrita + + + + 显示控制符 + Control de pantalla + + + + 行首 + Primera fila + + + + 行尾 + Fin de fila + + + + 字符光标 + Cursor de caracteres + + + + 像素光标 + Cursor de píxel + + + + 编辑现有的多字体 + Editar fuentes múltiples existentes + + + + 点击光栅可打开键盘,点击空白处关闭 + Toque la rejilla para abrir el teclado, haga clic en el espacio en blanco para cerrar + + + + + + + + + + + 放大倍数:%1 + Ampliación: %1s + + + + + 插入模式 + Modo de inserción + + + + + 修改模式 + Modo Modificar + + + Editar archivos multi-fuente existentes +Utilice el modo de modificación!!! + Advertencia + + + + 编辑现有的多字体文件 +请使用修改模式!!! + 编辑现有的多字体文件 +请使用修改模式!!! + Editar archivos multifuente existentes +Por favor use el modo de modificación! + + + + + + 保存 + Guardar + + + + 点击光栅可打开键盘,点击空白处关闭 + Haga clic en la rejilla para abrir el teclado, haga clic en el espacio en blanco para cerrar + + + + 信息编辑 + Edición de información + + + + 字库保存 + Biblioteca de palabras guardada + + + + + 返回信息编辑 + Volver a editar la información + + + + 请选择字体,打开键盘并输入要编辑的字符 + Seleccione una fuente, abra el teclado e introduzca los caracteres que desea editar + + + + + + 提示 + Consejos + + + + 图片已经改变,是否保存? + La imagen ha cambiado, ¿quieres guardarla? + + + + 放弃保存 + Renunciar a guardar + + + + 文件另存为... + Archivo guardado como... + + + + 另存为 + Guardar como + + + + + + + + + 文件名: + Nombre del archivo: + + + + 文件名:) + Nombre de archivo:) + + + + 文件保存为... + Archivo guardado como... + + + + 本条信息的变量超过规定数量! + ¡El número de variables en este mensaje supera el número especificado! + + + + 是否立即喷印当前的文件? + ¿Desea imprimir el archivo actual inmediatamente? + + + + 是 + Sí + + + + 否 + No + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Presione Entrar para agregar una nueva línea. Seleccione la fuente y la rejilla se ajustará automáticamente + + + + 选择[字体]可改变光标大小. + Seleccione la fuente para cambiar el tamaño del cursor. + + + + 选择[绘图]方式,可以绘制任意图形 + Seleccione el método de dibujo para dibujar cualquier gráfico + + + + 光标不匹配时,不能输入或删除. + No se puede introducir ni eliminar cuando el cursor no coincide. + + + + 点击空白处可关闭键盘. + Haga clic en blanco para apagar el teclado. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + Los usuarios pueden personalizar nuevos caracteres con la función de edición de la biblioteca de Word + + + + 选择[文本模式]可切换到主界面编辑方式. + Seleccione el modo de texto para cambiar al método de edición de la interfaz principal. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Haga clic en la rejilla para abrir el teclado, haga clic en el espacio en blanco para cerrar el teclado + + + + 使用[字库编辑]功能,用户可自己修改字形 + Los usuarios pueden modificar los propios pictogramas utilizando la función Edición de biblioteca de palabras + + + + PicWidget + + + Please input a char. + Please input a char. + + + + 请输入要编辑的字符 + Introduzca los caracteres que desea editar + + + + 编辑字符:%1 + Editar carácter: %1 + + + + [%1行,%2列] + [%1 fila, %2 columna] + + + + 光标[%1,%2] + Cursor .%1,%2 + + + + + + + + + + + + + 警告 + Advertencia + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Ancho máximo de soporte: %1 Altura: %2 Solicitud actual: %3 x %4 + + + + + + 请新创建建图片 + Cree una nueva imagen + + + + + + 文件:%1 无法打开 + %1 no se puede abrir + + + + 信息中的变量数超过了最大值(8)!请减小变量数. + ¡El número de variables en la información supera el máximo (8)! Reduzca el número de variables. + + + + + 两个变量之间至少要空出一个墨点! + ¡Al menos un punto de tinta debe ser desocupado entre dos variables! + + + + PrintSetting + + + Form + Form + + + + 计数器1设置 + Configuración del contador 1 + + + + + + + 起始值: + Valor inicial: + + + + + + + 结束值: + Valor final: + + + + + + 重设值 + Restablecer valor + + + + + + 重复数: + Repeticiones: + + + + + + 清零 + Puesta a Cero + + + + + + + 增量值: + Valor incremental: + + + + + + 当前值: + Valor actual: + + + + 可变长度 + Longitud variable + + + + 计数器2设置 + Configuración del contador 2 + + + + + 计数器3设置 + Configuración del contador 3 + + + + + + + 跳米设置 + Ajuste del medidor de salto + + + + 跳米数: + Medidores de salto: + + + + 跳米打印 + Impresión de saltador + + + + + + 输入密码 + 提升权限 + Elevar los Permisos + + + + 墨线时间 + Tiempo de la línea de tinta + + + + 墨线时间: + Tiempo de la línea de tinta: + + + + + + + 0 + 0 + + + + 开机次数: + Número de encendidos: + + + + 维护时间: + Mantenimiento: + + + + 应用当前配置 + Aplicar la configuración actual + + + + 常用设置 + Configuración común + + + + TextLabel + TextLabel + + + + 打印模式: + Modo de impresión: + + + + 字体宽度: + Ancho de fuente: + + + + 首行电压(%): + Tensión de primera línea (%): + + + + 字体加粗: + Fuente en negrita: + + + + + + + + 快速 + Rápido + + + + + + + + + 标准 + Estándar + + + + + + + 慢速 + + + + + + 慢速1 + Lento 1 + + + + + 慢速2 + Lento 2 + + + + 慢速3 + Lento 3 + + + + 慢速4 + Lento 4 + + + + 慢速5 + Lento 5 + + + + 慢速6 + Lento 6 + + + + 慢速7 + Lento 7 + + + + 慢速8 + Lento 8 + + + + 慢速9 + Lento 9 + + + + 检测回收槽 + Detección y reciclaje + + + + 每条信息只打印一次 + Cada mensaje se imprime una sola vez + + + + 新放大板 + + + + + 高速模式 + + + + + 打印时绿灯常亮 + Luz verde continua al imprimir + + + + 复位发送打印数据 + Reiniciar el envío de datos impresos + + + + 小数点位数 + + + + + 注意:“其它设置”页下的"分段计米“勾选时,计数器1不可用。 + Nota: El contador 1 no está disponible cuando "Medidor de segmento" está marcado en la página "Otras configuraciones". + + + + ddhhmm + + + + + 生产日期: + Fecha de producción: + + + + dd/MM/yy + + + + + dd/MM/yyyy + + + + + dd-MM-yy + + + + + dd-MM-yyyy + + + + + 计数器保存关机值 + El contador guarda el valor de apagado + + + + 距离尾部(mm): + Distancia desde la cola (mm): + + + 当计数达到 : + Cuando el conteo llega a: + + + 特殊条件计数 + recuento de condiciones especiales + + + + 首尾交替 + Alterno de extremo a extremo + + + 显示 + mostrar + + + + + + + 打印电压缩放 + Escala de voltaje de impresión + + + + 整体缩放(%) : + Reduccion integral: + + + + 字高设置(%): + Ajuste de altura de palabra (%): + + + + 行末电压(%): + Tensión de línea final (%): + + + + 修改授权 + Modificar la autorización + + + + 自然数计米 + Medir el número natural + + + + 不打印走米 + No imprime los metros caminados + + + + 相位故障不打印 + El fallo de fase, no se imprime + + + + 信息上下颠倒 + Información al revés de arriba abajo + + + + 字形优化 + Optimización de forma de fuente + + + + 回收故障处理 + Tratamiento de fallo del reciclaje + + + + 高压故障关回收槽 + Fallo de alto voltaje, cierra la caja del reciclaje + + + + 信息左右颠倒 + Información al revés de izquierda a derecha + + + 空列打印 + Impresión de columnas vacías + + + + 省点 + Guardar puntos + + + + 超速暂停打印 + Impresión de pausa rápida + + + + 故障停止走米 + La falla deja de caminar metros + + + + 有效期(天): + Válido (días): + + + + 电眼误触禁止 + Prohibir tocar el ojo eléctrico + + + date time + date time + + + + yyyy-MM-dd + yyyy-MM-dd + + + + yyyy/MM/dd + yyyy/MM/dd + + + + yyyyMMdd + yyyyMMdd + + + + yyyy年MM月dd日 + yyyy año mm mes dd día + + + + yyyy-MM-dd hh:mm + yyyy-MM-dd hh:mm + + + + yyyy/MM/dd hh:mm + yyyy/MM/dd hh:mm + + + + yyyyMMddhhmm + yyyyMMddhhmm + + + + yyyy年MM月dd日hh:mm + yyyy año mm mes dd día hh:mm + + + + hh:mm + hh:mm + + + + dd MM yy + dd MM yy + + + + 相位故障关机 + Apagado por fallo de fase + + + + + 高级设置 + Configuración avanzada + + + + + 交替扫描隔点(默认为1): + Rupturas de escaneado alternativas (predeterminada 1): + + + + 行末调整点模式: + Modo de punto de ajuste de línea final: + + + + 点距调整值(默认为0): + Ajuste de distancia de punto (predeterminado 0): + + + + + 扫描颠倒 + Escanear al revés + + + + 行末点微调(‰): + Ajuste preciso del punto final de línea (‰): + + + + 点距调整电压位置: + Posición de tensión de ajuste de distancia de punto: + + + + 行末调整点数(默认为0): + Puntos de ajuste de línea final (predeterminado 0): + + + + 去除冗点模式(默认懒惰): + Eliminar el modo redundante (el modo perezoso predeterminado): + + + + 懒惰模式 + Modo perezoso + + + + 贪婪模式 + Modo Codicioso + + + + 均衡模式 + Modo de equilibrio + + + + + 冗点比例(默认为0%): + Relación de redundancia (predeterminado 0%): + + + + + 调整电压 + Ajusta la presión + + + 推荐设置 + Ajustes recomendados + + + + 使用推荐设置 + Utilice los ajustes recomendados + + + 行业: + Industria: + + + + 快 + Rápido + + + + 电线电缆 + Alambre y Cable + + + + 制药/食品/电子 + Farmacéutica/Alimentación/Electrónica + + + + 建筑管材 + Tubería de construcción + + + + 其他 + Otros + + + 速度: + Velocidad: + + + + + 锁定脉冲计数 + Contar los pulsos bloqueados + + + + 非字宽 + ancho sin palabra + + + + 使用齿轮泵 + Utilice la bomba de engranajes + + + + 高压阈值: + Valor de válvula de alta tensión: + + + + 导出随机码文本 + Exportar texto de código aleatorio + + + + 不检测喷头盖 + No se detectan tapas de cabezales de impresión + + + + 计数器设置 + Configuraciones de contador + + + + 计数器3 + Contador 3 + + + + 交替打印设置 + Configuración de impresión alternativos + + + + 起始位置: + Posición inicial: + + + 特殊变量结束值: + Valor final variable especial: + + + + 交替间隔: + Intervalos alternativos: + + + + 重复次数: + Número de repeticiones: + + + + 隐藏值米标: + + + + + 隐藏打印值 + + + + + 无交替 + No hay alternativa + + + + 普通交替 + Alteror normal + + + + 电眼触发交替 + Disparador de Ojos Eléctricos Alternativo + + + + 复位到起始值 + Restablecer al valor de inicio + + + 显示小数 + Mostrar +decimales + + + + 其它设置 + Otros ajustes + + + + 更换信息文件时执行的动作: + Acciones realizadas al reemplazar archivos de información: + + + + 产品计数器自动清0 + Contador de productos borra automáticamente en 0 + + + + 总产品计数器自动清0 + Contador total del producto borra automáticamente en 0 + + + + 外接显示屏: + Pantalla externa: + + + + 无 + Ninguno + + + + 小屏 + Pantalla pequeña + + + + 大屏 + Pantalla grande + + + + 总产品计数值 + Valor total de recuento de productos + + + + + 计数器1 + Contador 1 + + + + + 计数器2 + Contador 2 + + + + 循环产品计数 + Recuento de productos circulares + + + 特殊变量起始值: + Valor inicial de la variable especial: + + + 打印 + Impresión + + + + 显示屏显示: + La pantalla muestra: + + + + 分段计米 + Medidores de metros del segmento + + + + 插 入 + Insertar + + + + 添 加 + Agregar + + + + 全部删除 + Eliminar todo + + + + 删 除 + Eliminar + + + + 打印条件倍数值: + + + + + 使用隐藏功能时必须使用计数器1 + + + + + 米标显示 + Visualización de la marca de metros + + + + 上移 + Subir + + + + 下移 + Bajar + + + + 提示:可变长度参数不正确 + Sugerencia: parámetro de longitud variable incorrecto + + + + 要求:调整长度小于喷印间隔 + Requisito: ajuste la longitud menos que el intervalo de impresión + + + + + 超高速 + + + + + + 高速 + + + + + + 提示:交替参数不正确 + Consejo: Los parámetros alternativos son incorrectos + + + + 要求:起始位置<交替间隔 + Requisitos: Posición inicial < Intervalos alternativos + + + + 要求:(重复次数+起始位置)<交替间隔 + Requiere :( repeticiones y posiciones de inicio) )< Intervalos alternativos + + + + + + + + + + + + 提示 + Consejos + + + + 应用成功 + Aplicación exitosa + + + + 小时 + Horas + + + + + + 错误 + Error + + + + 授权码: + Código de autorización: + + + + 错误 + Error + + + + 喷码机维护设置成功! + ¡Configuración del mantenimiento de la máquina está completa! + + + + 系统维护设置成功! + ¡La configuración de mantenimiento del sistema es exitosa! + + + + 不存在 + no existe + + + + 密码: + Contraseña: + + + + 取消授权 + Cancelar autorización + + + + + + 其他设置 + + + + + 软件初始化完成. + + + + + RFID卡清零! + + + + + + + + + + + 警告 + Advertencia + + + + 是否确认使用推荐设置? + ¿Confirma el uso de los ajustes recomendados? + + + + 随机码文件为空,不需要导出 + El archivo de código aleatorio está vacío y no requiere la exportación + + + + 随机码文本将展出到U盘,请插入U盘 + El texto del código aleatorio se mostrará en la memoria USB, inserte la memoria USB + + + + 计数器1(结束值-开始值)不能被增量整除,结束值将被设为%1 + El contador 1 (valor final -valor inicial) no se puede dividir por el incremento, el valor final se establecerá en %1 + + + + 计数器1(结束-开始)不能被增量整除,结束值将被设为%1 + El contador 1 (final - inicial) no se puede dividir por el incremento, el valor final se establecerá en %1 + + + + 1 + 1 + + + + 正在打印第%1组设置,不可删除 + Configuración del conjunto %1 está imprimiendo, no se puede eliminar + + + + 是否确认删除第%1组设置? + ¿Confirmar la eliminación del conjunto %1? + + + + 是否确认删除全部设置? + ¿Confirmar que se han eliminado todos los ajustes? + + + + 字体宽度不能为0 + El ancho de fuente no puede ser 0 + + + + 是否立即重新计米? + ¿Quieres volver a contar los metros ahora? + + + + 解锁脉冲计数 + Desbloquear a contar los pulsos + + + + builTime:%1 + + + + + fpgaVersionNum: %1 + + + + + Type: %1 + + + + + FPGAVersion: %1 + + + + + FPGAType: %1 + + + + + 喷印间隔太小,无法正常打印!!! + + + + + 原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)! + + + + + PulseNumFix + + + Dialog + Dialog + + + + 根据速度 + Según la velocidad + + + + 根据喷印 + Según la impresión + + + + 根据脉冲数 + Según el número de pulsos + + + + 根据同步器参数 + Según los parámetros del sincronizador + + + + 实际皮带速度(毫米/秒): + Velocidad real de la correa (mm/s): + + + + 实际喷印间隔长度(毫米): + Longitud real del intervalo de impresión (mm): + + + + 长度(毫米): + Longitud (mm): + + + + 同步脉冲数 + Número de pulsos de sincronización + + + + 同步器直径(毫米): + Diámetro del sincronizador (mm): + + + + 脉冲数/转: + Pulsos/Vueltas: + + + + 脉冲数修正 + Corrección del número de pulso + + + + + + + 错误 + Error + + + + 速度不应该为0 + La velocidad no debe ser 0 + + + + 实际同步长度不应该为0 + La longitud de sincronización real no debe ser 0 + + + + 长度不应该为0 + La longitud no debe ser 0 + + + + 直径不应该为0 + El diámetro no debe ser 0 + + + + QBarCode + + + Dialog + Dialog + + + + 条形码类型 + Tipo de código de barras + + + + 条形码高度 + Altura del código de barras + + + + 条码宽度 + Ancho del código de barras + + + + 1点 + 1 píxel + + + + 2点 + 2 píxel + + + + 3点 + 3 píxel + + + + 4点 + 4 píxel + + + + + 5点 + 5 píxel + + + + 6点 + 6 píxel + + + + 文本1 + Texto 1 + + + + 显示缩放 + Muestra de reducción + + + + 墨水类型 + Tipo de tinta + + + + 黑墨 + Tinta Negra + + + + 白墨 + Tinta Blanca + + + + 文本3 + Texto 3 + + + + 计数器2 + Contador 2 + + + + 文本2 + Texto 2 + + + + 计数器1 + Contador 1 + + + + 插入文档 + Insertar documentos + + + + 预览 + Vista previa + + + + 返回 + Atrás + + + + 条码保存 + Ahorro de código de barras + + + + FileName + FileName + + + + 增加数字行 + añadir fila de números + + + + 日期 + Fecha + + + + 时间 + Tiempo + + + + 文件未保存 + Archivo no guardado + + + + BARCODE_128 + CODE_128 + BARCODE_128 + + + + BARCODE_93 + BARCODE_93 + + + 自适应编码 + Codificación adaptativa + + + + 7点 + 7 píxeles + + + + 9点 + 9 píxeles + + + + 12点 + 12 píxeles + + + + 16点 + 16 píxeles + + + + 24点 + 24 píxeles + + + + + 标签宽度:%1,标签高度:%2,文本宽度:%3 + Ancho de etiqueta: %1, altura de la etiqueta: %2, ancho del texto: %3 + + + + QObject + + + + 手动设定 + Ajuste manual + + + + 应用 + Aplicaciones + + + + 起始值 + Valor inicial + + + + 结束值 + Valor final + + + + 循环值 + Valor de Ciclo + + + + SceneEditOption + + + Form + Form + + + + 预览 + Vista previa + + + + 新建 + Nuevo + + + + 打开 + Abierto + + + + + 保存 + Guardar + + + + 另存为 + Guardar como + + + + 新增图元 + Nuevos elementos agregados + + + + 编辑图元 + Editar elementos + + + + 删除图元 + Eliminar elementos + + + + 放大 + Ampliar + + + + 缩小 + Reducir + + + + 提示 + Consejos + + + + 文档已经改变,是否保存? + El documento ha cambiado, ¿quiere guardarlo? + + + + 放弃保存 + Renunciar a guardar + + + + SystemManage + + + Form + Form + + + + 手动控制泵阀 + Válvula de bomba de control manual + + + 喷嘴逆清洗 + Limpieza inversa de la boquilla + + + + 齿轮泵开 + bombear en + + + + 齿轮泵关 + bombear fuera + + + + 回收槽开 + La caja del reciclaje abierta + + + + + + + + + + + + + 停止 + Parar + + + + 回收槽关 + La caja del reciclaje cerrada + + + + 回收泵 + Bomba de reciclaje + + + + + 压缩机 + Compresor + + + + 主墨泵 + Bomba de tinta principal + + + + 泄压阀 + Válvula de alivio de presión + + + + 循环阀 + Válvula de circulación + + + + 墨水阀 + Válvula de tinta + + + + 粘度泵 + Bomba de viscosidad + + + + 混合阀 + Válvula de mezcla + + + + 时间设置 + Configuración de tiempo + + + + 从U盘导入配置 + Importar la configuración desde la memoria USB + + + + 更新软件 + Actualización de software + + + + 屏幕校正 + Corrección de pantalla + + + + 更新字库 + Actualizar la biblioteca de palabras + + + + 导出字库 + Exportar la biblioteca de palabras + + + + 系统升级 + Actualización del sistema + + + + 出厂设置 + Restablecer la configuración de fábrica + + + + 自动清洗 + Limpieza automática + + + + 电机测试 + Pruebas de motor + + + + 排气 + Escape del aire + + + + 导出配置到U盘 + Exportar la configuración a la memoria USB + + + + + + Cancel + Cancel + + + + (1/2) Cleaning, please wait... + (1/2) Cleaning, please wait... + + + + + + + + + + + + + + + + + + + + 开 + Encender + + + + + + + + + + + + + + + + + + + + + 关 + Apagar + + + + + + + + + + + + + + + + + + 警告 + Advertencia + + + + + + + 请先移开喷头盖! + Retire primero la cubierta de la boquilla! + + + + 是否确认进入手动模式? + ¿Está seguro de entrar en modo manual? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Por favor, primero confirme que la caja de reciclaje ha sido apagada y confirma que está en modo automático? + + + + + 手动 + Manual + + + + + + 自动 + Automático + + + + + + + + + + + 启动 + Iniciar + + + + + + + + + + + + + + + + + 提示 + Consejos + + + + + + + 密码不正确! + ¡La contraseña es incorrecta! + + + + Application + Application + + + + 是否确认更新字库? + ¿Confirma la actualización de la biblioteca de palabras? + + + + 没找到对应字库,更新失败! + No se encontró la biblioteca de fuentes correspondiente y la actualización falló! + + + + 更新字库成功,重启后生效! + ¡La actualización de la biblioteca de palabras se realiza correctamente y entrará en vigor después del reinicio! + + + 是否恢复出厂设置? + ¿Se restablece la configuración de fábrica? + + + + 恢复出厂设置成功,请重新关机上电 + El restablecimiento de la configuración de fábrica es exitoso, por favor apague de nuevo + + + + 校准触摸屏 + Calibración de la pantalla táctil + + + + 是否确认开始校准程序?请小心进行校准! + ¿Confirma que ha iniciado el procedimiento de calibración? ¡Por favor, tenga cuidado con la calibración! + + + + 无法生成脚本 + No se pudo generar el guión + + + + 是否确认更新软件? + ¿Confirma la actualización de software? + + + + + + + + 错误 + Error + + + + 更新失败! + ¡Error al actualizar! + + + + 软件更新成功,重启后生效! + ¡La actualización de software es exitosa y tiene efecto después del reinicio! + + + + 找不到更新软件! + ¡No se han encontrado actualizaciones! + + + + 是否确认更新系统? + ¿Confirma actualizar el sistema? + + + + 系统更新成功,重启后生效! + La actualización del sistema es exitosa y tiene efecto después del reinicio! + + + + 文件不存在! + ¡El archivo no existe! + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + Si comienza a limpiar, asegúrese de que la caja del reciclaje se haya abierta más de 10 mm y dejará de limpiar después de un minuto + + + + 开始清洗 + Iniciar la limpieza + + + + 停止清洗 + Dejar de limpiar + + + + 压力 + Presión + + + + autoclean cancel or status: + autoclean cancel or status: + + + + (2/3) Cleaning + (2/3) Cleaning + + + + (3/3) Cleaning + (3/3) Cleaning + + + 混合阀打开3: + 混合阀打开3. + La válvula de mezcla se abre 3: + + + + 是否确认导出配置到U盘? + ¿Confirmar a exportar la configuración a la memoria USB? + + + + 检测不到U盘 + Memoria USB indetectable + + + + 成功导出配置到U盘 + Exportar correctamente la configuración a la memoria USB + + + + 是否确认从U盘导入配置? + ¿Está seguro de importar la configuración desde la memoria USB? + + + + 配置文件/udisk/sysPara.bin不存在! + El documento/udisk/sysPara.bin no existe! + + + + 从U盘成功导入配置,重启后生效! + Configuración importada con éxito desde la unidad USB, tiene efecto después de reiniciar! + + + + autoclean start + autoclean start + + + + 是否确认启动自动清洗? + ¿Confirma a iniciar la limpieza automática? + + + + 是否确认墨水排除,加入清洗剂? + ¿Se excluye la tinta y se añade el detergente de limpieza? + + + + (1/3) Cleaning + (1/3) Cleaning + + + + 是否确认导出字库到U盘? + ¿Confirmar a exportar la biblioteca de palabras a la memoria USB? + + + + U盘不可识别! + ¡Memoria USB irreconocible! + + + + 字库导出完成! + ¡Exportación de la biblioteca de palabras completada! + + + + 是否开始电机测试? + ¿Confirma a iniciar las pruebas del motor? + + + + 正在排气,是否停止? + Está escapando el aire, ¿quiere pararlo? + + + + SystemSetting + + + Form + Form + + + + 晶振电压(%): + Tensión de cristal (%): + + + + 压力: + Presión: + + + + 高压包容差: + Tolerancia a alta presión: + + + + 粘度: + Viscosidad: + + + + 回收泵力度(%): + Resistencia de la bomba de recuperación (%): + + + + 喷头温度: + Temperatura de la boquilla: + + + + 粘度校正(%): + #Corrección de viscosidad (%): + + + + 晶振频率: + Frecuencia de cristal: + + + + 64K + 64K + + + + 76K + 76K + + + + 96K + 96K + + + + 128K + 128K + + + + 新晶振 + Nuevo Cristal + + + + 频率修正: + Corrección de frecuencia: + + + + Hz + Hz + + + + 回收槽开关时间: + Tiempo de abertura y cierre de la caja del reciclaje: + + + + 电机电流: + Corriente del motor: + + + + 喷嘴直径: + Diámetro de la boquilla: + + + + 50 (UM) + + + + + 60 (UM) + + + + + 70 (UM) + + + + + 信息编辑模式: + Modo de editar la información: + + + + 文本模式 + Modo de texto + + + + 点阵模式 + Modo de puntos + + + + 场景模式 + Modo Escena + + + + 粘度泵动作间隔(秒): + Intervalo de acción de la bomba de viscosidad (segundos): + + + + 墨水温度: + Temperatura de la tinta: + + + + + °C + °C + + + + 0 + 0 + + + + 0.6 + 0.6 + + + + 1.0 + 1.0 + + + + 1.6 + 1.6 + + + + 2.0 + 2.0 + + + + 脉冲计数器: + Contador de pulsos: + + + Pulse Counter: + Pulse Counter: + + + + 隔膜位置偏移: + Desplazamiento de la posición del diafragma: + + + + 隔膜位置: + Posición del diafragma: + + + + 5 + 5 + + + + 10 + 10 + + + + 15 + 15 + + + + 20 + 20 + + + + 25 + 25 + + + + 30 + 30 + + + + 40 + 40 + + + + 45 + 45 + + + + 50 + 50 + + + + 55 + 55 + + + + 60 + 60 + + + + 风扇开启温度: + Temperatura de apertura del ventilador: + + + PulseCntAtZero: + PulseCntAtZero: + + + + 重置高压 + Restablecer el alto voltaje + + + + 界面语言设置 + Configuración del idioma de la interfaz + + + + 喷嘴逆清洗 + Limpieza inversa de la boquilla + + + + 搜索最佳晶振频率 + Busca la mejor frecuencia de cristal + + + + 搜索最佳晶振电压 + Busca el mejor voltaje de cristal + + + + 应用当前配置 + Aplicar la configuración actual + + + + + + + + + + + + 错误 + Error + + + + 实际频率不能为%1 + La frecuencia real no puede ser %1 + + + + + 提示 + Consejos + + + + 应用成功 + Aplicar exitosamente + + + + 自动清洗时间约为一分钟,然后自动停止 + El tiempo de limpieza automático es de aproximadamente un minuto, luego se detiene automáticamente + + + + 开始清洗 + Iniciar la limpieza + + + + 停止清洗 + Dejar de limpiar + + + + 正在喷嘴逆清洗...... + Limpieza inversa de la boquilla... + + + + 清洗完成 + Limpieza completa + + + 密码不正确! + ¡La contraseña es incorrecta! + + + + + + Application + Application + + + + 是否更新高压包电流数据? + ¿Se actualizan los datos de corriente del paquete de alto voltaje? + + + + + + 喷头盖未关,请先关喷头盖! + La tapa de la boquilla no está cerrada, por favor apague la cubierta de la boquilla primero! + + + + + 墨线开关未开,请先打开墨线开关! + El interruptor de la línea de tinta no está abierto, por favor abra el interruptor primero! + + + + + 回收槽未全部打开! + ¡La caja de reciclaje no está abierta completa! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + La búsqueda automática tarda mucho tiempo, durante el cual por favor no realice ninguna otra operación, ¿confirma la búsqueda automática de la mejor tensión de cristal? + + + + 自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率? + ¿La búsqueda automática lleva mucho tiempo, ¿ se confirma la búsqueda automática de la mejor frecuencia de cristal en el rango de frecuencia actual de 2k? + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + La búsqueda automática tarda mucho tiempo, ¿confirma la búsqueda automática de la frecuencia de cristal óptima en el rango 1K de la frecuencia frontal? + + + + 搜索的起始频率%1 HZ超出范围? + ¿la frecuencia de inicio %1 HZ de la búsqueda está fuera del rango? + + + + 高压设置完成 + Configuración de alto voltaje completa + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Oscilador Freq%1 --- el reloj de alto nivel más largo%2 + + + + 最佳晶振频率完成 + Mejor frecuencia de cristal completada + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Oscillator voltage %1 --- el reloj de alto nivel más largo%2 + + + + + 最佳晶振电压完成 + Mejor voltaje de cristal completado + + + + Tiếng Việt(Vietnamese interface) + Tiếng Việt + + + + Chinese interface(中文界面) + Interfaz en chino + + + + English interface(英文界面) + Interfaz en inglés + + + + TextEditOption + + + Form + Form + + + + 预览 + Vista previa + + + + 新建 + Nuevo + + + + + + 保存 + Guardar + + + + + 另存为 + Guardar como + + + + 文件 + Archivo + + + + 插变量 + Variable Inserto + + + + 间距 + Espaciado + + + + 字体 + Fuente + + + + wenquanyi + wenquanyi + + + + 12 + 12 + + + + 点 + Puntos + + + + 粗体 + Negrita + + + + + + + + + 警告 + Advertencia + + + + + + + 无法打开文件 + El archivo no se puede abrir + + + + + Application + Application + + + + + 是否确认将文件内容追加到打开的文件? + ¿Está seguro de que ha añadido el contenido del archivo a un archivo abierto? + + + + 插入图片 + Insertar una imagen + + + + 插入文本 + Insertar texto + + + + 错误 + Error + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption El parámetro de construcción textEdit no debe estar vacío + + + + 打开文件 + Abrir archivo + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + Guardar en .txt perderá todos los formatos, ¿quiere guardar en formato .html? + + + + 提醒 + Recordatorio + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Detectado que una imagen %1 viene de una memoria USB, ¿copia la imagen al local? + + + + 无法保存文件 + El archivo no se puede guardar + + + + 保存... + Guardar... + + + + 提示 + Consejos + + + + 文档已经改变,是否保存? + El documento ha cambiado, ¿quiere guardarlo? + + + + 放弃保存 + Renunciar a guardar + + + + 二维码变量设置 + Configuración de la variable de código QR + + + + 完成 + Completado + + + + TimeSettingDialog + + + Dialog + Dialog + + + + 秒: + Segundos: + + + + 分: + Minuto: + + + + 月: + Mes: + + + + 日: + Día: + + + + 时: + Hora: + + + + 年: + Año: + + + + 设置时间 + Ajuste de la hora + + + + TriggerCtrl + + + Form + Form + + + + 触发模式 + Modo de disparo + + + + 光电电平触发 + Disparador de nivel fotoeléctrico + + + + 光电边沿触发 + Disparador de borde fotoeléctrico + + + + 同步器触发 + Disparador del sincronizador + + + + 延时触发 + Disparador retrasado + + + + + 封锁时间(毫秒) + Tiempo de bloqueo(milisegundos) + + + + 脉冲数/毫米 + Pulsos/mm + + + + 无镜像打印 + Sin impresión de espejos + + + + 自动水平翻转 + Volteo horizontal automático + + + + 自动垂直翻转 + Volteo vertical automático + + + + 中心对称旋转 + Rotación simétrica central + + + + 行末<->行首 + rimera fila <-> fin de fila + + + + 行首<->行首 + Primera fila <-> fin de fila + + + + 镜象交替类型 + Espejo tipo alternativo + + + + 同步器清零 + Puesta en cero del sincronizador + + + + 脉冲数修正 + Corrección del número de pulsos + + + + 脉冲输出使能 + Activación de salida de pulsos + + + + + + + + 重复间隔(毫秒) + Intervalo de repetición (milisegundos) + + + + + + + 延时(毫秒): + Retardo ( milisegundos ): + + + + 字符宽度: + Ancho de carácter: + + + + 同步打印 + Impresión sincrónica + + + + 间隔模式: + Modo de intervalo: + + + + 产生脉冲所需计数: + Contar para generar pulsos: + + + + 镜像交替间隔 + Intervalo alternativo de espejo + + + + 按字符宽度 + Por ancho de carácter + + + + 按喷印比例 + Por relación de impresión + + + + 禁止电眼清零 + Sin puesta a cero del ojo eléctrico + + + + 允许电眼复位 + Se permite el restablecimiento del ojo eléctrico + + + + 允许电眼立即复位 + Permitir el restablecimiento inmediato del ojo eléctrico + + + + 同步喷印模式 + Modo de impresión sincrónica + + + + 重复次数 + Número de repeticiones + + + + + + + 触发延时(毫秒) + Retardo de disparo ( milisegundos ) + + + + 同步器正反转打印 + La impresión del sincronizador en los giros positivo y negativo + + + + 同步器只正转打印 + la impresión del sincronizador solo al giro positivo + + + + 同步器只反转打印 + la impresión del sincronizador solo al giro negativo + + + + 喷印间隔(毫米) + Intervalo de impresión (mm) + + + + 电眼清零 + Puesta en cero el ojo eléctrico + + + + 脉冲信号值: + Valor de la señal de pulso: + + + + 20131228-1 + 20131228-1 + + + + 应用当前配置 + Configuración actual de la aplicación + + + + 独立参数 + Parámetros independientes + + + + + + + 触发延时(毫米) + Retardo del desparo(mm) + + + + + + 重复间隔(毫米) + Intervalo de repetición(mm) + + + + + 封锁间隔(毫米) + Intervalo de bloqueo(mm) + + + + + + + 延时(毫米): + Retardo (mm): + + + + 字符宽度 + Ancho de caracteres + + + + 喷印比例(%) + Relación de pulverización (%) + + + + 提示:参数不正确 + Sugerencia: el parámetro es incorrecto + + + + 要求:触发长度小于喷印间隔 + Requisito: la longitud del disparador es menor que el intervalo de impresión + + + + 提示 + Consejos + + + + 应用成功 + Aplicación exitosa + + + + 封锁间隔(毫秒) + Intervalo de bloque (ms) + + + + ZkEdit + + + Form + Form + + + + 编辑图案 + Editar Imagen + + + + 缩小 + Reducir + + + + 放大 + Ampliar + + + + 宽度 + Ancho + + + + 新建 + Nuevo + + + + 高度 + Altura + + + + + + 保存 + Guardar + + + + 保存为 + Guardar como + + + + 打开 + Abrir + + + + 导入 + Importar + + + + A + A + + + + 图像扩张 + Expansión de imagen + + + + 图像裁剪 + Imagen recortada + + + + 提示 + Consejos + + + + 图片已经改变,是否保存? + La imagen ha cambiado, ¿quieres guardarla? + + + + 放弃保存 + Renunciar a guardar + + + + + + 放大倍数:%1 + Ampliación : %1 + + + + 图片另存为... + Imagen guardada como ... + + + + 另存为 + Guardar como + + + + 打开文件 + Abrir archivo + + + + 图片保存为... + Imagen guardada como ... + + + + 导入文件 + Importar archivo + + + + dlgDrawInit + + + 图案参数设置 + Configuración de parámetros de Imagen + + + + 图案宽度(像素) + Ancho de Imagen (píxeles) + + + + 图案高度(像素) + Altura de Imagen (píxeles) + + + + 确定 + Confirmar + + + + dlgQrCode + + + Dialog + Dialog + + + + + TextLabel + TextLabel + + + + 计数器(变量) + Contador (variable) + + + + 自动刷新 + Actualización automática + + + + 插入文档 + Insertar documento + + + + 信息前缀 + Prefijo de la información + + + + 变量(初值) + Variable (valor inicial) + + + + 信息后缀 + Sufijo de la información + + + + 返回 + Atrás + + + + DataMatrix + DataMatrix + + + + QRCode + QRCode + + + + 保存 + Guardar + + + + 预览 + Vista previa + + + + 正相打印 + Impresión de fase positiva + + + + 反相打印 + Impresión de fase negativa + + + + 变量增量 + Incremento variable + + + + 条形码 + Código de barras + + + + 默认 + defecto + + + + 8 x 18 + + + + + 8 x 32 + + + + + 12 x 26 + + + + + 12 x 36 + + + + + 16 x 36 + + + + + 16 x 48 + + + + + DM码尺寸: + tamaño DM: + + + + 自动插入时间 + Tiempo de inserción automática + + + + 警告 + Advertencia + + + + 输入内容超出选择DM码尺寸大小,请选择更大的尺寸! + El contenido de entrada excede el tamaño del código DM seleccionado, ¡seleccione un tamaño más grande! + + + + [%1 X %2] + [%1 X %2] + + + + logo_Form + + + Form + Form + + + + zkWidget + + + + 警告 + Advertencia + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Ancho máximo de soporte: %1 Altura: %2 Solicitud actual: %3 x %4 + + + + 请新创建建图片 + Por favor, cree una nueva imagen + + + diff --git a/systemmanage.ui b/systemmanage.ui new file mode 100644 index 0000000..6f5493d --- /dev/null +++ b/systemmanage.ui @@ -0,0 +1,872 @@ + + + SystemManage + + + + 0 + 0 + 800 + 600 + + + + Qt::StrongFocus + + + Form + + + + + + 3 + + + 3 + + + 3 + + + 3 + + + + + 6 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 65 + + + + + 130 + 16777215 + + + + Qt::LeftToRight + + + 手动控制泵阀 + + + + :/icon/controlbyhand.png:/icon/controlbyhand.png + + + + + + + + 40 + 0 + + + + + 16777215 + 16777215 + + + + Qt::ClickFocus + + + + + + + + + + + + + 70 + 37 + + + + 100 + + + 300 + + + 20 + + + 100 + + + + + + + + 0 + 40 + + + + + 100 + 16777215 + + + + Qt::NoFocus + + + 齿轮泵开 + + + + + + + + 0 + 40 + + + + 齿轮泵关 + + + + + + + + + + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 回收槽开 + + + + + + + + 45 + 0 + + + + + 16777215 + 16777215 + + + + 停止 + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 回收槽关 + + + + + + + + 45 + 0 + + + + + 16777215 + 16777215 + + + + 停止 + + + + + + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + 6 + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 回收泵 + + + + + + + + 55 + 16777215 + + + + + + + + + + + + 55 + 16777215 + + + + + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 压缩机 + + + + + + + + 30 + 16777215 + + + + + + + + + + + + 30 + 16777215 + + + + + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 混合阀 + + + + + + + + + + 30 + 20 + + + + + + + + + + + + 16777215 + 16 + + + + + + + + + + + + 0 + 20 + + + + + 16777215 + 16 + + + + + + + + + + + + + + 30 + 16777215 + + + + + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 粘度泵 + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 主墨泵 + + + + + + + + 0 + 65 + + + + 泄压阀 + + + + + + + + 55 + 16777215 + + + + + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 循环阀 + + + + + + + + 30 + 16777215 + + + + + + + + + + + + 0 + 65 + + + + + 100 + 16777215 + + + + 墨水阀 + + + + + + + + + 3 + + + + + + 0 + 42 + + + + + 16777215 + 16777215 + + + + 更新软件 + + + + :/icon/updatesoftware.png:/icon/updatesoftware.png + + + + + + + + + + 0 + 70 + + + + + 16777215 + 16777215 + + + + 自动清洗 + + + + image/autoclean.pngimage/autoclean.png + + + + + + + + 0 + 70 + + + + 切换屏幕 + + + + + + + + + true + + + + 0 + 70 + + + + + 16777215 + 16777215 + + + + 系统升级 + + + + :/icon/factorysetting.png:/icon/factorysetting.png + + + + + + + + 0 + 42 + + + + + 16777215 + 16777215 + + + + 屏幕校正 + + + + :/icon/screenfix.png:/icon/screenfix.png + + + + + + + + + + 0 + 42 + + + + + 16777215 + 16777215 + + + + 排气 + + + + image/autoclean.pngimage/autoclean.png + + + + + + + + 0 + 42 + + + + + 16777215 + 16777215 + + + + 导出配置到U盘 + + + + :/icon/export.png:/icon/export.png + + + + + + + + + + + + 0 + 42 + + + + + 90 + 16777215 + + + + 更新字库 + + + + :/icon/updatefont.png:/icon/updatefont.png + + + + + + + + 0 + 42 + + + + + 90 + 16777215 + + + + 导出字库 + + + + :/icon/udisk.png:/icon/udisk.png + + + + + + + + + + 0 + 42 + + + + + 16777215 + 16777215 + + + + 时间设置 + + + + :/icon/time.png:/icon/time.png + + + + + + + + 0 + 42 + + + + + 16777215 + 16777215 + + + + 从U盘导入配置 + + + + :/icon/import.png:/icon/import.png + + + + + + + + 0 + 70 + + + + + 16777215 + 16777215 + + + + 出厂设置 + + + + :/icon/factorysetting.png:/icon/factorysetting.png + + + + + + + + 0 + 30 + + + + + 100 + 30 + + + + 电机测试 + + + + image/autoclean.pngimage/autoclean.png + + + + + + + + + + + + + + diff --git a/systemsetting.ui b/systemsetting.ui new file mode 100644 index 0000000..9307afe --- /dev/null +++ b/systemsetting.ui @@ -0,0 +1,1027 @@ + + + SystemSetting + + + + 0 + 0 + 800 + 600 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Form + + + + + + + + 3 + + + 3 + + + 3 + + + 3 + + + + + 电机电流: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 晶振电压(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + °C + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + + + + + 回收泵力度(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 压力: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 喷嘴直径: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 脉冲计数器: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 30 + + + 59 + + + + + + + + 0 + 0 + + + + + 64K + + + + + 76K + + + + + 96K + + + + + 128K + + + + + 新晶振 + + + + + + + + 晶振频率: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 粘度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 80 + + + 750 + + + 10 + + + 300 + + + + + + + 高压包容差: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 2 + + + 99 + + + 10 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 99 + + + 50 + + + + + + + + 0 + 0 + + + + + 50 (UM) + + + + + 60 (UM) + + + + + 70 (UM) + + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + + 0 + + + + + 0.6 + + + + + 1.0 + + + + + 1.6 + + + + + 2.0 + + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + + 文本模式 + + + + + 点阵模式 + + + + + 场景模式 + + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 1 + + + 59 + + + + + + + true + + + + 0 + 0 + + + + 0 + + + 70 + + + + + + + + 0 + 0 + + + + 500 + + + 3800 + + + + + + + + 0 + 0 + + + + 5000 + + + + + + + 信息编辑模式: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + 频率修正: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 粘度泵动作间隔(秒): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Hz + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 隔膜位置: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + -80000 + + + 80000 + + + 0 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 5 + + + 300 + + + 5 + + + 50 + + + + + + + 墨水温度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 粘度校正(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 喷头温度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + 回收槽开关时间: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 隔膜位置偏移: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + + 5 + + + + + 10 + + + + + 15 + + + + + 20 + + + + + 25 + + + + + 30 + + + + + 40 + + + + + 45 + + + + + 50 + + + + + 55 + + + + + 60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::LeftToRight + + + 风扇开启温度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 25 + + + + + + + °C + + + + + + + + + Qt::Horizontal + + + + + + + + + true + + + + 0 + 40 + + + + + 260 + 16777215 + + + + Qt::LeftToRight + + + 重置高压 + + + + + + + true + + + + 0 + 40 + + + + + 260 + 16777215 + + + + 界面语言设置 + + + + + + + + 0 + 40 + + + + 喷嘴逆清洗 + + + + + + + + + Qt::Horizontal + + + + + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 70 + + + + 搜索最佳晶振频率 + + + + :/icon/searchsuitablefrequency.png:/icon/searchsuitablefrequency.png + + + + + + + + 0 + 70 + + + + 搜索最佳晶振电压 + + + + :/icon/searchsuitablevoltage.png:/icon/searchsuitablevoltage.png + + + + + + + + 0 + 70 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + 应用当前配置 + + + + :/icon/apply.png:/icon/apply.png + + + + + + + + + + + + ClickLabel + QLabel +
      ClickLabel.h
      +
      +
      + + + + +
      diff --git a/textEdit2.html b/textEdit2.html new file mode 100644 index 0000000..916373b --- /dev/null +++ b/textEdit2.html @@ -0,0 +1,5 @@ + + +

      f

      \ No newline at end of file diff --git a/textEdit3.html b/textEdit3.html new file mode 100644 index 0000000..ad48e49 --- /dev/null +++ b/textEdit3.html @@ -0,0 +1,5 @@ + + +

      fdafdsa

      \ No newline at end of file diff --git a/textEditnew.html b/textEditnew.html new file mode 100644 index 0000000..0175808 --- /dev/null +++ b/textEditnew.html @@ -0,0 +1,5 @@ + + +

      化公为私于机构改革讨价还价液恭恭敬敬用同方

      \ No newline at end of file diff --git a/textEditnew3.html b/textEditnew3.html new file mode 100644 index 0000000..40fc439 --- /dev/null +++ b/textEditnew3.html @@ -0,0 +1,5 @@ + + +

      yujhfdddeef

      \ No newline at end of file diff --git a/texteditoption.ui b/texteditoption.ui new file mode 100644 index 0000000..298cfbc --- /dev/null +++ b/texteditoption.ui @@ -0,0 +1,376 @@ + + + TextEditOption + + + + 0 + 0 + 800 + 58 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 间距 + + + + :/icon/linespace.png:/icon/linespace.png + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 字体 + + + + :/icon/font.png:/icon/font.png + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 预览 + + + + :/icon/preview.png:/icon/preview.png + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 插变量 + + + + :/icon/vari.png:/icon/vari.png + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 新建 + + + + :/icon/filenew.png:/icon/filenew.png + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 保存 + + + + :/icon/filesave.png:/icon/filesave.png + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 文件 + + + + :/icon/fileopen.png:/icon/fileopen.png + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 80 + 16777215 + + + + 另存为 + + + + :/icon/filesaveas.png:/icon/filesaveas.png + + + + + + + + + + 80 + 0 + + + + wenquanyi + + + Qt::AlignCenter + + + + + + + + 18 + 0 + + + + + 18 + 16777215 + + + + 12 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 15 + 0 + + + + + 15 + 16777215 + + + + 点 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + Qt::LeftToRight + + + 粗体 + + + + :/icon/textbold.png:/icon/textbold.png + + + + + + + + + + + + + + diff --git a/thai.qm b/thai.qm new file mode 100644 index 0000000000000000000000000000000000000000..d39b2883c15c8819c215da743039a3982e48c0aa GIT binary patch literal 122304 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�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 + + +UTF-8 + + DacDisplayAndEdit + + 墨点 + InkDot + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + 默认值 + Default + + + 编辑 + Edit + + + 是 + YES + + + 否 + NO + + + 完成 + OK + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + 提示 + Tips + + + %1 + %1 + + + + DevOp + + + 字高超出范围 + The char height is out of range + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + + + 错误 + ขัดข้อง + + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + readB6Req + + + + + readB6com + + + + + readB6suc + + + + + 设置读写器密码成功! + + + + + 设置读写器工作模式成功! + + + + + + + + + 警告 + Warnning + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + The parameters of Ignition-Coil are not initialized + + + + DialogAuthorization + + + Dialog + + + + + 授权密码: + รหัสผ่าน: + + + + 输入密码 + 提升授权 + ตั้งค่าเลเวล2 + + + 取消授权 + Deauthorize + + + + DialogCycleprint + + + Dialog + + + + + 1循环范围:0- + 1Cycle range:0- + + + + 1循环次数: + 1Number of cycles: + + + + 2循环范围:0- + 2Cycle range:0- + + + + 2循环次数: + 2Number of cycles: + + + + 3循环范围:0- + Cycle range:0- + + + + 3循环次数: + 3Number of cycles: + + + + 6循环次数: + 6Number of cycles: + + + + 6循环范围:0- + Cycle range:0- + + + + 5循环范围:0- + Cycle range:0- + + + + 5循环次数: + 5Number of cycles: + + + + 4循环范围:0- + Cycle range:0- + + + + 4循环次数: + 4Number of cycles: + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + LocalFiles + ไฟล์ในเครื่อง + + + + U盘文件 + FlashDiskFiles + โหลดไฟล์จาก USB + + + + 删除文件 + Delete + ลบ + + + + 删除全部 + DeleteAll + DeleteAll + + + + 从U盘导入 + ImportFromFlashDisk + โหลดไฟล์จาก USB + + + + 导出到U盘 + OutportToFlashDisk + โหลดไฟล์เข้า USB + + + + 插入 + InsertFile + ค้นหาไฟล์ + + + + 打开文件 + OpenFile + เปิดไฟล์ + + + + 上一个 + Previous + ย้อนหลัง + + + + 下一个 + ถัดไป + + + + 退出 + ออก + + + + 文件操作 + File Operation + + + + + + 警告 + Warnning + + + + 是否确认删除当前文件? + Delete present file? + + + + 是否确认删除所有文件? + ลบไฟล์ทั้งหมด? + + + + + + + 提示 + Tips + + + + 是否确认从U盘导入所有文件? + Import all files from flashdisk ? + + + + mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/ + + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Import from flashdisk suceess ? + + + + 是否确认将所有文件导出到U盘? + Export all files to flashdisk ? + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogFontSize + + + Dialog + + + + + 9点(中/英) + 9点(英) + 9 ดอท + + + + 24点(中/英) + 24 ดอท + + + + 7点(左横) + 7Dot(Left-Horizontal) + + + + 7点(右横) + 7Dot(Right-Horizontal) + + + + 9点(左横) + 9Dot(Left-Horizontal) + + + + 9点(右横) + 9Dot(Right-Horizontal) + + + + 7点(孟加拉) + 7Dot(Bengali) + + + + 32点 + 32 ดอท + + + + 7点(rf7) + 7点(数字) + 7 Dot(rf7) + + + + 21点(rf21) + 21 Dot(rf21) + + + + 12点(新罗马) + 12 Dot(Rome) + + + + 123456890ABCDEFGWXYZ + + + + + - + + + + + 查字库标识 + check ID + + + + 16点(中/英) + 16 ดอท + + + + 5点(英) + 5 ดอท + + + + 12点(中/英) + 12 ดอท + + + + 7点(英) + 7 ดอท + + + + 选择字体大小 + Choose font size + + + + DialogInputTxt + + + Dialog + + + + + DialogInsertVari + + + Dialog + + + + 二维码: + QRCode + + + + 变量类型 + VariableType + + + + 日 + วัน + + + + 秒 + วินาที + + + + 分 + นาที + + + 变量1 + Counter 1 + + + + 月 + เดือน + + + + 周 + สัปดาห์ + + + + 时 + ชั่วโมง + + + + 年 + ปี + + + 变量2 + Counter 2 + + + + DataMatrix + + + + + QRCode + คิวอาร์โค้ด + + + + BarCode128 + บาร์โค้ด 128 + + + + 计数器1 + เคาน์เตอร์ 1 + + + + 计数器2 + เคาน์เตอร์ 2 + + + + 随机码1 + สุ่ม 1 + + + + 有效日期 + วันหมดอายุอัตโนมัติ + + + + 生产日期 + วันที่อัตโนมัติ + + + + Class + + + + + 计数器3 + เคาน์เตอร์ 3 + + + + 第XXX天 + วัน XXX + + + + 隐藏变量 + + + + + 数字个数 + จำนวนหลัก + + + + 9个 + 9 + + + + 11个 + 11 + + + + 10个 + 10 + + + + 3个 + 3 + + + + 6个 + 6 + + + + 12个 + 12 + + + + 13个 + 13 + + + + 14个 + 14 + + + + 15个 + 15 + + + + 5个 + 5 + + + + 8个 + 8 + + + + 2个 + 2 + + + + 7个 + 7 + + + + 4个 + 4 + + + + 1个 + 1 + + + + 变量插入 + Insert Variable + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + ห่าง 0 + + + + + 1个像素 + ห่าง 1 + + + + + 2个像素 + ห่าง 2 + + + + + 3个像素 + ห่าง 3 + + + + + 4个像素 + ห่าง 4 + + + + + 5个像素 + ห่าง 5 + + + + 6个像素 + ห่าง 6 + + + + 7个像素 + ห่าง 7 + + + + 行间距: + ระยะห่างบรรทัด: + + + + 字符间距: + ระยะห่างตัวอักษร: + + + + 选择行间距和字符间距 + Choose intevel between lines and characters + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + FirstColumn: + + + + 列中: + MidColumn: + + + + 列尾: + EndColumn: + + + + 重置 + เริ่มใหม่ + + + + 测试 + ทดสอบ + + + + DialogSaveFile + + + Dialog + File + + + + 本地文件 + LocalFiles + ไฟล์ในเครื่อง + + + + U盘文件 + โหลดไฟล์จาก USB + + + + 预览文件内容: + แสดงตัวอย่าง: + + + + 上一个 + ย้อนหลัง + + + + 下一个 + Next + ถัดไป + + + + 请输入文件名: + ชื่อข้อความ: + + + + 取消 + ยกเลิก + + + + + 保存 + บันทึก + + + + 警告 + Warnning + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + The flash disk was not found, or the folder ‘doc’ under disk root directory does not exist ! + + + + DialogShowCounter + + + Dialog + File + + + + 米标显示: + Meter scale display: + + + + 目前循环范围: + Current cycle range: + + + + + + 米 + metre + + + + 剩余米数: + Remaining meters: + + + + 循环次数: + Number of cycles: + + + + 立即重新计米 + รีเซ็ตจำนวนนับ + + + + 起始: + เริ่มต้น: + + + + 结束: + สิ้นสุด: + + + + Dialoginputpasswd + + + Dialog + File + + + + 修改密码: + เปลี่ยนรหัสผ่าน: + + + + Dialogmodifypasswd + + + Dialog + File + + + + 修改密码: + เปลี่ยนรหัสผ่าน: + + + + 密码授权 + รหัสผ่าน + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Backspace + + + + 1 + + + + + 4 + + + + + 0 + 0 + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + เลือกทั้งหมด + + + + DlgInputAddr + + + Dialog + + + + + 请输入6位机编号(前3位为经销商编号) + Please enter the six-number (the former number three of the dealer) + + + + PowerOnCnt + + + + + PrintDotCnt + + + + + PowerMax + + + + + PrintMax + PrintMax + + + + 开始时间 + StartDate + + + + 结束时间 + EndDate + + + + SuperNodeIP: + SuperNodeIP: + + + + edgeIP: + edgeIP: + + + + + + + + + . + . + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + 警告 + Warnning + + + 无法打开文件 + Cannot open file + + + + 喷码机恢复工作! + InkJet Back to Work! + + + + Mac:%1维护时间剩余 + 维护时间剩余 + Mac:%1Remaining maintenance time + + + + 小时,喷码机将停止工作.请与供应商联系! + Hours, the jet printer will stop working. +Please contact the supplier! + + + + Mac:%1维护时间已到,喷码机停止工作!请与供应商联系 + 维护时间已到,喷码机停止工作!请与供应商联系 + Mac:%1The maintenance time has come, the inkjet printer stops working! +Please contact the supplier + + + 喷码机维护时间已到,请148小时内与厂家联系! + InkJet Servicing is timeout,Please contacted with manufacturer in 48 hours! {148小?} + + + 喷码机维护时间已到,请48小时内与厂家联系! + InkJet Servicing is timeout,Please contacted with manufacturer in 48 hours! + + + + + 当前日期: + CurDate: + + + + + 正确? + Correct? + + + 维护时间已到,喷码机停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + DlgMutiLanguage + + + 界面语言设置 + ตั้งค่าภาษา + + + + 中文 + จีน + + + + 泰语 + ไทย + + + + 英语 + อังกฤษ + + + + 波斯语 + + + + + 土耳其语 + ตุรกี + + + + 越南语 + เวียดนาม + + + + 西班牙语 + สเปน + + + 汉语(Chinese) + Chinese + + + + (注意: 选择切换显示语言, 重启后才能生效) + (Note: Select toggle display language and restart it to take effect) + + + 警告 + Warnning + + + + DlgMyWarring + + + 警告 + Warnning + + + + 确定 + ยืนยัน + + + + TextLabel + + + + + DlgSelectInputLanguage + + + Dialog + File + + + + 汉语(Chinese) + จีน + + + + 英语(English) + อังกฤษ + + + + 越南语(Vietnam) + ตุรกี + + + + DlgShowMsg + + + 警告 + Warnning + + + + 确定 + ยืนยัน + + + + DlgVarLength + + + 变长喷印参数 + Variable length parameter + + + + 头部长度(m) + Head length (m) + + + + 尾部长度(m) + Tail length (m) + + + + + 调整长度(mm) + Adj Length (mm) + + + + 总长(m) + Total Length (m) + + + + 确定 + ยืนยัน + + + + 可变长度允许 + Variable length Enable + + + + FileLogger + + + The directory and all its contents have been removed + + + + + Failed to remove the directory + + + + + FormScenedlg + + + Form + + + + + Last + + + + + First + + + + + 重置位置 + + + + + 另存为 + + + + + 保存 + บันทึก + + + + 新增图元 + เริ่มไอเทมใหม่ + + + + 新建 + + + + + 打开 + + + + + 删除图元 + ลบไอเทม + + + + 编辑图元 + แก้ไขไอเทม + + + + 插入图像 + + + + + 场景缩小 + + + + + 场景放大 + + + + + Next-item + + + + + 预览 + แสดงตัวอย่าง + + + + Prev-item + + + + + Test2 + + + + + 插入图片 + + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + <html><head/><body><p>[<span style="color:red;font-size:12px;"> %1行 </span>x %2列 ]</p></body></html> + + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + 主窗口 + หน้าหลัก + + + + 图案编辑 + แก้ไขโลโก้ + + + + 打印设置 + ตั้งค่าการพิมพ์ + + + + + 系统设置 + ตั้งค่าระบบการพิมพ์ + + + + + 其他信息 + กราฟ + + + + + 网络管理 + เน็ต เวิร์ค + + + + 电压调整 + VolSet + + + + Save + + + + + 不连续电压 + Discontinuous voltage + + + + + vol0 + + + + + + vol1 + + + + + + vol2 + + + + + + vol3 + + + + + + vol4 + + + + + + vol5 + + + + + + vol6 + + + + + + vol7 + + + + + + vol8 + + + + + + vol9 + + + + + + vol10 + + + + + + vol11 + + + + + + vol12 + + + + + + vol13 + + + + + + vol14 + + + + + + vol15 + + + + + + vol16 + + + + + + vol17 + + + + + + vol18 + + + + + + vol19 + + + + + + vol20 + + + + + + vol21 + + + + + + vol22 + + + + + + vol23 + + + + + + vol24 + + + + + + vol25 + + + + + + vol26 + + + + + + vol27 + + + + + + vol28 + + + + + + vol29 + + + + + + vol30 + + + + + + vol31 + + + + + + vol32 + + + + + + vol33 + + + + + + vol34 + + + + + + vol35 + + + + + + vol36 + + + + + + vol37 + + + + + + vol38 + + + + + + vol39 + + + + + 连续电压 + Continuous voltage + + + + 满列电压 + Full train voltage + + + + fvol0 + + + + + fvol1 + + + + + fvol2 + + + + + fvol3 + + + + + fvol4 + + + + + fvol5 + + + + + fvol6 + + + + + fvol7 + + + + + fvol8 + + + + + fvol9 + + + + + fvol10 + + + + + fvol11 + + + + + fvol12 + + + + + fvol13 + + + + + fvol14 + + + + + fvol15 + + + + + fvol16 + + + + + fvol17 + + + + + fvol18 + + + + + fvol19 + + + + + fvol20 + + + + + fvol21 + + + + + fvol22 + + + + + fvol23 + + + + + fvol24 + + + + + fvol25 + + + + + fvol26 + + + + + fvol27 + + + + + fvol28 + + + + + fvol29 + + + + + fvol30 + + + + + fvol31 + + + + + fvol32 + + + + + fvol33 + + + + + fvol34 + + + + + fvol35 + + + + + fvol36 + + + + + fvol37 + + + + + fvol38 + + + + + fvol39 + + + + + 其他调整 + Other adjustments + + + + 整体缩放(%) : + Overall scaling (%) : + + + + WriteByte + + + + + ReadByte + + + + + + + Address: + + + + + + Value: + + + + + WriteWord + + + + + ReadWord + + + + + ReadDword + + + + + WriteDword + + + + + ValueH: + + + + + ValueL: + + + + + + + 信息编辑 + แก้ไขข้อความ + + + + 触发设置 + ตั้งค่าสัญญาณสั่งพิมพ์ + + + + + 系统管理 + ข้อมูลระบบ + + + + + 日志信息 + LogInfo + + + + 定时开机循环完成,准备关机 + self checking done in alarm resump, ready to poweroff + + + + 准备关机 + ready poweroff + + + + 与FPGA失去通信!!! + Lose contact with FPGA ! + + + + 与FPGA通信恢复正常 + The contact with FPGA recovered + + + + 开始自检,请等待60秒............... + ไล่อากาศ 60 s วินาที...... + + + + 开始自检,请等待%1秒............... + ไล่อากาศ %1 s วินาที... + + + + + 自检完成!!! + Self-checking done ! + + + + 缺少墨水,喷码机不能正常工作! + + + + 墨水或溶剂空,准备关机 + Ink or mekeup empty, prepare shutdown + + + + 压力波动超过设定的5个值. + The pressure fluctuation exceeds the set 5 values. + + + + 停止打印,自动关闭高压. + Stop printing and automatically turn off high voltage. + + + + 压力异常:上次压力值%1,当前压力值%2 + Pressure fault:last value is %1, current value is %2 + + + 高压异常:上次电流值%1,当前电流值%2 + High voltage fault:last current value is %1, current current value is %2 + + + + 添加溶剂: + + + + + 混合阀打开2: + The mixing valve opens 2: + + + 混合阀打开1. + The mixing valve opens 1 + + + 混合阀打开2. + The mixing valve opens 2 + + + + 提示 + hint + + + + 是否接收新的信息! + Whether to receive new information! + + + 请立即检查过滤器是否堵塞或者漏气! + Please immediately check whether the filter is blocked or leaking! + + + 请清理过滤器或者检查是否泄露! + Please clean the filter or check for leaks! + + + + 错误!粘度计下位灯故障. + Error! Viscometer inferior lamp failure. + + + + 错误!粘度计故障:检测不到上位灯. + Error:Viscometer fault! the upper lamp is not detected. + + + + 粘度检测异常,粘度值太大!!! + The viscosity anomaly detection, viscosity too high!!! + + + + + 错误!!!!!!!!!!!粘度偏大故障 + Error! Viscosity larger fault + + + + 定时开机 + timed start + + + + 读卡器故障! + + + + + 13.读卡器故障! + + + + + + 压力泄漏或压力传感器故障! + Pressure leakage or pressure sensor failure! + + + + 运行中压力泄漏,停齿轮泵! + If the pressure leaks during operation, stop the gear pump! + + + + + 测试时间结束,准备关机 + The test time is over, ready to shut down + + + + + + 刷墨水卡成功! + + + + + + + 刷溶剂卡成功! + + + + + + MAC无效卡! + + + + + + 无效卡! + + + + + + 9.墨水空,机器自动关机 + + + + + + 10.溶剂空,机器自动关机 + + + + + + 11.墨水空,机器再次自动关机 + + + + + + 12.溶剂空,机器再次自动关机 + + + + + + 21.没有使用原厂墨水耗材,机器自动关机 + + + + + + 22.没有使用原厂溶剂耗材,机器自动关机 + + + + + + 23.没有使用原厂墨水耗材,机器再次自动关机 + + + + + + 24.没有使用原厂溶剂耗材,机器再次自动关机 + + + + + + 1.请添加墨水,否则机器将在24小时后自动关机! + + + + + + 2.请添加墨水,否则机器将在%1小时后自动关机! + + + + + + 3.请添加墨水,否则机器将在%1分钟后自动关机! + + + + + + 4.请添加墨水,否则机器将在2分钟后自动关机! + + + + + + 5.请添加溶剂,否则机器将在6小时后自动关机! + + + + + + 6.请添加溶剂,否则机器将在%1小时后自动关机! + + + + + + 7.请添加溶剂,否则机器将在%1分钟后自动关机! + + + + + + 8.请添加溶剂,否则机器将在2分钟后自动关机! + + + + + + + 13.请刷墨水卡,请使用原厂墨水耗材,否则机器将在24小时后自动关机! + + + + + + 14.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后自动关机! + + + + + + 15.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1分钟后自动关机! + + + + + + + 16.请刷墨水卡水,请使用原厂墨水耗材,否则机器将在2分钟后自动关机! + + + + + + + 17.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2小时后自动关机! + + + + + + 18.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后自动关机! + + + + + + 19.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1分钟后自动关机! + + + + + + + 20.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2分钟后自动关机! + + + + + + 齿轮泵转速过高,请立即停机并联系供应商! + The speed is too high, please stop immediately and contact the supplier! + + + + + 齿轮泵转速过高,请清理过滤器或者检查是否泄露! + The speed is too high, please clean the filter or check for leaks! + + + 混合阀打开1: + The mixing valve opens 1: + + + + + 警告!!!!!!!!!!!粘度值偏低 + Warning! Low viscosity + + + 正在开墨线..... + InkLine Openning...... + + + 回收泵全速开 + ReclaimPump ON + + + 粘度泵开 + ViscosityPump ON + + + 循环阀开 + CycleValve ON + + + 墨线阀开 + InkLineValve ON + + + 清洗阀开 + CleanValve ON + + + 清洗阀关 + CleanValve OFF + + + 墨线阀关 + InkLineValve OFF + + + 粘度泵关 + ViscosityPump OFF + + + 供墨阀开 + InkValve ON + + + 正常开墨线状态,请等待%1秒 + InkLine Raedy,Please wait %1 s + + + 循环阀关 + CycleValve OFF + + + 开晶振电压,正在检测相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + 正在测试相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + 相位检测正常,开启高压 + Phase Ready + + + 相位检测异常 + Phase error + + + 开墨线完成 + InkLine Open Complete + + + 开墨线完成,可以打印! + InkLine Ready,You Can To Print Now + + + 正在关闭墨线 + Closing InkLine..... + + + 回收泵变全压运行 + ReclaimPump ON + + + 清洗阀点动%1次 + CleanValve work %1 times + + + 循环阀开,请等待%1s + CycleValve on,please wait for %1 s + + + 关回收泵 + ReclaimPump OFF + + + %1秒后关回收泵 + Wait %1s and ReclaimPump OFF + + + 可以关机断电 + InkJet can Shoutdown + + + 正在关机..... + Shutdown ...... + + + 正在快速开墨线..... + Is InkLine Openning ...... + + + 打开晶振电压 + OscillatorVoltage ON + + + 5秒后打开晶振电压 + crystals voltage on after 5s + + + 开晶振电压,正在检测相位,请等待%1s + is phase testting, please wait for %1 s + + + 快速开墨线完成 + InkLine Open Finish + + + 快速开墨线完成,可以打印! + InkLine Open Finish + + + 正在快速关闭墨线 + Is InkLine OFF ...... + + + 回收泵关 + ReclaimPump OFF + + + 回收泵变全速运行 + ReclaimPump On + + + 回收泵全速运行 + ReclaimPump ON + + + 回收泵全速运行,请等待%1秒 + Is ReclaimPump On, Wait %1s + + + 快速关闭墨线完成 + Complete the quick closing InkLine + + + 警告 + Warnning + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + Speed is too fast or interval is too short! Unable to print all, stop print now!!! + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + Speed is too fast or interval is too short! Unable to print all char!!! + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jetting overspeed ! Cannot print all content. +Printing paused automatically! + + + 打开文件出错次数超多3次,自动清除默认喷印文件. + Automatically clear the default file because openFile error. + + + 非法关机次数过多,自动清除默认喷印文件. + Automatically clear the default file because illegal shutdown. + + + 上次出现非法关机. + Illegal shutdown Last time. + + + 自动循环中,请等待%1秒............... + Is AutoCyclling ,Wait %1s...... + + + 自动循环完成!!! + Auto Cycle finish!!! + + + 正在自检,请等待%1秒............... + Is InkJet Testting, Wait %1 s...... + + + 供墨阀关 + InkValve OFF + + + + 喷印速度过快!无法喷印完全!!! + Jetting overspeed ! Cannot print all content! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Warning: The heater cannot reach pre-set temperature, +it may caused by fault or setting mistake ! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Wrong!!! Main ink pump fault + + + + + 主墨泵故障!!! + Main ink pump fault! + + + + 错误!!!!!!!!!!!压缩机故障 + Wrong!!! Compressor fault + + + + 压缩机故障!!! + Compressor fault ! + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Motor fault + + + + 电机故障!!! + Motor fault ! + + + + + 回收槽到头 + Collector reaches the end + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Collector seized, or the collector's switch time was setted in wrong + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + English + + + + + 大写 + Caps +LOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Delete + ลบ + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + UP + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Left + + + + 下 + Down + + + + 右 + Right + + + + ` + ~ + + + + + 1 + ! + + + + + 2 + @ + + + + + 3 + # + + + + + 4 + $ + + + + + 5 + % + + + + + 6 + ^ + + + + + 7 + & + + + + + 8 + * + + + + + 9 + ( + + + + + 0 + ) + + + + + - + _ + + + + + = + + + + + + + 隐藏 + Hide + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Special +Char + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + ขัดข้อง + + + + hanziDisplayLabels缺少初始化 + DisplayLabel not init + + + + 找不到输入法初始化文件 + The initialization file of typewriting was not found + + + + 小写 + Caps +LOCK + + + 中文 + Chinese + + + + Tiếng Việt + + + + + Russian + + + + + Japanese + + + + + 全选 + เลือกทั้งหมด + + + + 复制 + สำเนา + + + + 粘贴 + วาง + + + + 剪切 + ตัด + + + + 后退 + กลับ + + + + InsertSpaceNumDialog + + + 插入空格数 + แทรกช่องว่าง + + + + 空格个数: + ตัวเลข: + + + + LogInfo + + + Form + + + + + 当前状态 + สถานะปัจุบัน + + + + 清空当前状态 + ล้างสถานะ + + + + 历史状态 + Historical Status + + + + 删除历史文件 + Delete Historical Files + + + + 打开历史文件 + Open Historical File + + + + TextLabel + + + + + 导出日志到U盘 + Export logs to USB flash disk + + + + 版本信息 + 调试信息 + Version Info + + + + 请先打开历史状态文件! + Open state file at first! + + + + + + + 警告 + Warnning + + + + + + 无法打开文件 + Cannot open file + + + + + + + 提示 + Tips + + + + 是否确认将所有日志文件导出到U盘? + Are you sure to export all log files to USB flash disk? + + + + U盘未插入或无法识别,请重新插拔设备! + + + + + 成功导出到U盘 + + + + 成功导出到U盘? + Export to flashdisk success ? + + + + 选择历史记录文件 + Choose record file + + + + 是否确认将历史日志文件全部清除? + Are you sure to clear all history log files? + + + + 是否确认将当前日志全部清除? + Are you sure to clear all current logs? + + + + MainWindow + + + InkJet + + + + + 编辑 + แก้ไข + + + + 条形码 + บาร์โค้ด + + + + 二维码 + คิวอาร์โค้ด + + + + 缩小 + ซูมเข้า + + + + 放大 + ซูมออก + + + + 获取数据 + get the data + + + + 交替打印文件名 + Alternate printing file name + + + + 最大:[40行x 2048列] + + + + + 同步器速度 + ความเร็ว + + + + 当前时间 + เวลา + + + + 墨线开关 + สวิตซ์ +หมึก + + + + 喷头盖开 + ฝาหัวพิมพ์ + เปิด + + + + 紧急停机 + ปิดฉุกเฉิน + + + 晶振电压 + CrystalVOL + + + + 粘度 + ความหนืดหมึก + + + + 压力 + แรงดัน + + + + + 隔膜位置 + DiaphragmPOS + + + + + 暂停打印 +停止高压 + Pause to print +Stop high pressure + + + + 喷嘴逆清洗 + ทำความสะอาด +รูฉีดหมึก + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + ระดับหมึก +ต่ำ + + + + 溶剂液位 + เมคอัพ +ต่ำ + + + + 粘度故障 + ความหนืด +ผิดพลาด + + + + 相位故障 + เฟสหมึก +ผิดพลาด + + + + 高压故障 + ไฮโวลท์ +ผิดพลาด + + + + 故障恢复 + รีเซ็ตความ +ผิดพลาด + + + + 立即重新计米 + รีเซ็ตจำนวนนับ + + + + 产品总计数 + Grand Total + + + + 回收故障 + ท่อดูดกลับ +ผิดพลาด + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt; vertical-align:bottom;"><br /></p></body></html> + + + + + 墨水缸满 + ถังหมึก +เต็ม + + + + 产品计数 + การตรวจนับสินค้า + + + + 关机 + ปิดเครื่อง + + + + 2014-08-23 + 1 {2014-08-23?} + + + + 高压包 + ไฮโวลท์ + + + + + + + 开 + เปิดหัว +พิมพ์ + + + + + + + 关 + ปิดหัว +พิมพ์ + + + + 泵启动 + ปั๊มทำงาน + + + + 交替打印 + AltPrint + + + 编辑文件 + Edit File + + + + 打开文件 + เปิดไฟล์ + + + + + + 正在喷印............... + เริ่มพิมพ์... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + High voltage failure, printing was paused + + + 墨水或溶剂空,准备关机 + Ink or solvent empty, prepare shutdown + + + + + + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, Turn OFF collector and inkLine + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + 维护时间已到喷码机停止工作 + The maintenance time has come,Inkjet printer stop working! + + + + + + 相位故障,暂停打印 + Phase fault, printing was paused + + + + 相位故障,屏蔽DAC输出 + Phase fault, DAC export was shield + + + + + 相位故障,屏蔽充电 + Phase fault, charging was shield + + + 开墨线 + OPEN + + + 关墨线 + CLOSE + + + 墨线状态 + INKLINE + + + 喷 嘴 +逆清洗 + nozzles +Clean + + + + + 机箱: + CASE: + + + 正在喷印...... + Printting...... + + + 墨线正常,可以喷印. + InkLine ready to print. + + + 墨线正常. + InkLine Ready. + + + + 喷头盖开, 喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + 高压故障,快速关墨线 + high voltage error, closing now. + + + 维护时间已到,喷码机将停止工作! + The maintenance time has come,Inkjet printer stop working! + + + 相位故障,FPGA自动关高压. + phase error,FPGA turnoff the high voltage. + + + + 高压故障,关回收槽 + HighVoltFault,ReclainTank auto Colse + + + + 高压故障,关回收槽和墨线 + HighVoltFault,ReclainTank auto Colse + + + + 回收故障. + Recovery failure. + + + + 回收异常,墨线可能偏离.(%1) + Recovery abnormal, InkLine may deviate (%1) + + + + 维护时间已到,喷码机停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + + + 相位故障,准备关机 + Phase Fault, ShoutDown Now + + + + 电眼交替 + Alter by electronic Eye + + + %1.%2[%3.%4]米/秒 + %1.%2[%3.%4]m/s + + + + 列延时:%1点 + Column interval: %1 pixel + + + + + + + + + + + + + + + 警告 + Warnning + + + + 无法打开文件 + Cannot open file + + + + 打开文件: + เปิดไฟล์: + + + + + + + + 提示 + Tips + + + + 文件未保存,是否先保存文件! + File not save,please save it Now! + + + + + + + 变量数大于8个,某些变量将不起作用!!! + The variable number is greater than 8, and some variables will not work!!! + + + + + 请减少信息中的变量(或计数器)数量. + Please reduce the number of variables (or counters) in the printe file. + + + + warning,界面上有变量未显示完全 + Warning,Interface shows not all variables + + + + + + + [ %1行 x %2列 ] + %1 row x %2 column + + + + + + + + 错误 + ผิดพลาด + + + + 喷印间隔过短,应高于%1! + Printing interval is too short, +should be higher than %1! + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + + 开始打印1 + เริ่มพิมพ์ 1 + + + + 继续打印 +保持高压 + To continue printing + +Keep the high pressure + + + + 正在排气 ............... + Exhausting............... + + + + 泵停止 + ปั๊มหยุดทำงาน + + + + + 最多支持的列数目为:%1请减小信息长度. + The maximum number of columns supported is:%1, please decrease the length of the information. + + + + + 正在准备关机,请等待%1秒............... + + + + + 是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动! + + + + + 是否启动齿轮泵? + + + + + 保存html文件失败! + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;"><br /></p></body></html> + + + + + 获取DM码内容为空! + Get DM code content is empty! + + + + + 获取DM码内容: + get DM code data: + + + + + 获取DM码内容跟上次相同 + Get the same DM code content as last time + + + + 高压故障:两高压偏转板间的电压检测异常 + High-voltage fault: two high voltage deflection plate voltage detection abnormal + + + + 1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座; + 1. high pressure deflector and high voltage base, wet and dirty, please clean and dry high pressure plate and high voltage base; + + + + 2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间; + 2., the machine changes the motherboard or high voltage package, please enter the "system settings", click "reset high", and set the word high to 90, reset the high voltage alarm value should be between 480 and 550; + + + + 3.高压线路漏电,请更换高压线路; + 3. high voltage line leakage, please replace the high voltage line; + + + + 4.高压底座漏电,请更换高压底座。 + 4. high voltage base leakage, please replace the high voltage base. + + + + 墨水过多:墨水溢出 + Excessive ink: ink overflow + + + + 1. 请停止添加墨水; + 1. please stop adding ink; + + + + 2. 请排出多余墨水。 + 2. please discharge excess ink. + + + + 墨水液位:墨水即将耗尽 + Ink level: ink is about to run out + + + + 1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。 + 1., the ink is exhausted, 3 hours after the automatic shutdown, please add ink in time. + + + + 回收故障:未检测到有墨水回收 + Recovery failure: no ink recovery was detected + + + + 1. 墨水未射入回收管,请修正墨线方向; + 1. ink not into recycling tube, please correct line direction; + + + + 2. 墨水粘度太低,请更换新墨水; + 2. ink viscosity is too low, please replace the new ink; + + + + 3. 回收管堵塞,请清通或者更换回收管; + 3. recovery of pipe blockage, please clear or replace the recovery tube; + + + + 4. 回收泵故障,请清洗或者更换回收泵; + 4., the recovery pump failure, please clean or replace the recovery pump; + + + + 5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮. + 5. after confirming that all the parameters and equipment are not abnormal, please enter the "print settings", cancel the "recovery troubleshooting" check, return to the main window interface, click the "fault recovery" button. + + + + 溶剂液位:溶剂即将耗尽 + Mekeup level: mekeup is about to run out + + + + 1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。 + 1. mekeup depletion, 3 hours after the automatic shutdown, please add solvent in time. + + + + + 粘度故障报警 + Viscosity alarm + + + + 粘度故障:墨水粘度无法自动调整 + Viscosity fault: Ink viscosity can not be adjusted automatically + + + + 1. 混合阀失灵,请冲洗或者更换混合阀; + 1. the mixing valve fails, please flush or replace the mixing valve; + + + + 2. 墨水罐内的墨水异常,请更换新墨水; + 2. the ink in the ink pot is abnormal. Please replace the ink; + + + + 粘度计异常: + Viscometer anomaly: + + + + 1. 泵前过滤网堵塞,请更换泵前滤网; + 1. the filter screen is blocked before the pump. Please replace the strainer before the pump; + + + + 2. 粘度泵异常,请清洗或更换粘度泵; + 2. viscosity pump abnormal, please clean or replace viscosity pump; + + + + 3. 粘度传感器异常,请检查传感器线路或者更换传感器. + 3. viscosity sensor abnormal, please check the sensor or replace the it. + + + + 相位故障报警 + Phase alarm + + + + 相位故障:相位信号检测异常 + Phase fault: phase detection exception + + + + 1. 墨水分裂不正常,请调整墨水分裂; + 1. ink dot split abnormal, please adjust the ink split; + + + + 2. 充电槽或者相检头脏污,请清洗充电槽和相检头; + 2. charging tank or check head dirty, please clean the charging tank and phase head; + + + + 3. 放大板功能性异常,请更换放大板; + 3. the magnifying board is abnormal. Please replace it; + + + + 4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离; + 4. phase detection head and its distance is too far away, check the nozzle moving mechanism, adjusting the distance between the head and the ink; + + + + 5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰; + 5., the ground has not received or outside interference, please connect the ground wire or isolate the outside interference; + + + + 6. 墨水质量异常,请更换新墨水。 + 6. the ink is of exceptional quality. Please replace the ink. + + + + 回收槽开关检测完成! + Recycling tank switch detection completed! + + + 墨线未开,请先开墨线! + InkLine is Close,Please Open it! + + + + 墨线未开,请先开墨线开关! + Please turn on the inkjet switch ! + + + + 正在加高压... + High voltage is being up... + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Present total column number is %1, system support total column number is %2, please reduce the length of character string + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Print time: %1ms, trigger interval: %2ms, trigger interval must be greater than print time, and the gap should not less than 3ms + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + + 开始打印 + เริ่มพิมพ์ + + + + 回收槽未到底!!!!!! + Collector does not return to the end ! + + + + + 暂停喷印............... + Pause printing... + + + + + 墨水缸满报警 + The ink jar is full of alarm + + + + + 墨水液位报警 + ระดับหมึกต่ำ + + + + + 溶剂液位报警 + ระดับเมคอัพต่ำ + + + + + 高压故障,暂停打印. + High voltage fault, Pause Printing. + + + + 相位故障:飞行时间错误! + Phase fault: wrong flight time! + + + + 相位故障:相位检测错误! + Phase fault: phase detection error! + + + + 齿轮泵转速 + ความเร็มปั๊ม + + + + %1.%2[%3.%4]米/分 + %1.%2[%3.%4]m/min + + + + 停止打印 + หยุดพิมพ์ + + + + + 随机码文本将展出到U盘,请插入U盘 + The RandomCode save U disk. Please insert the U disk + + + + 暂停打印 + Print paused + + + + 继续打印 + พิมพ์ต่อเนื่อง + + + 请切换为自动状态,再继续操作! + Please switch to automatic state, to continue the operation! + + + 打开墨线 + InkLine OPEN + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Collector blocked or recycle time wrong set at before. Do you want to set present positon as the end position forcibly ? + + + + + 停止 + หยุด + + + 打开回收槽 + Opening collector + + + + 停止打开 + หยุดเปิด + + + + 正在打开回收槽... + เปิดหัวพิมพ์... + + + + + 警告!回收槽开关时间未设置! + Warning! The switch time of collector does not set! + + + 关闭墨线 + InkLine Close + + + 关闭回收槽 + Closing collector + + + + 停止关闭 + Stop closing + + + + 正在关闭回收槽... + closing reatank now... + + + + 准备关机...... + Printer is going to close shutdown... + + + 墨线未关,是否关闭墨线后关机! + Whether chalk line did not closed, shutdown after the inkline closed! + + + + 回收槽未关,是否关闭回收槽后关机! + Collector does not return. Do you want to turn off the collector before shutdown ? + + + + 是否确认关机? + Do you want to turn the printer off ? + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Do you want to initialize the Product Count ? + + + + 是否清除总产品计数? + Do you want to clear the Grand Total ? + + + + 是否立即重新计米? + Are you want to reset counter! + + + + 警告:‘-’和空格的宽度不一样 + Warning: the width of '-'is not same as a space + + + + 条形码信息编辑 + แก้ไขบาร์โค้ด + + + + + 二维码信息编辑 + แก้ไขคิวอาร์โค้ด + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + BaseAddress: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + ReadMemery + + + + 写空间 + WriteMemery + + + + 进制转换 + BaseConversion + + + + + 编辑 + แก้ไข + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 0xb200 + + + + + 完成 + ตกลง + + + + ModbusSerial + + 接收到开始打印命令 + Start printing command received + + + 接收到暂停打印命令 + Pause printing command received + + + 接收到停止打印命令 + Stop printing command received + + + 接收到DM码数据命令 + DM code data command received + + + + MyFileDialog + + + 确定 + ยืนยัน + + + + NetworkManager + + + Form + + + + + 手动设定 + Manual + + + + + IP: + + + + + Mask: + + + + + GW: + + + + + 取消 + ยกเลิก + + + + 有线LAN + LAN + + + + WiFi: + + + + + SSID: + + + + + Status: + + + + + auth: + + + + + Encryption: + + + + + Plaintext (open / no authentication) + + + + + 主获取数据按钮 + get data button + + + 断开 + Disconnect + + + + Static WEP (no authentication) + + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + 设备码: + Equipment code: + + + + 服务IP: + Service IP: + + + + None + + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + 8754 + 8754 + + + + 服务端口: + Service port: + + + + PSK: + + + + + AddNetwork + + + + 连接 + Connect + + + + Password: + + + + 扫描 + Scan + + + 清除 + Remove + + + + 获取数据 + get the data + + + + Network: + + + + 添加网络 + Add network + + + + 测试 + Test + + + + 应用配置 + Application configuration + + + + 去掉数字码 + remove data code + + + + 去掉QR码 + remove QR code + + + + ScanSSID + + + + + Disconnect + + + + + Connect + + + + + Scan + + + + + Remove + + + + + 1 + 1 + + + + 47.111.170.144 + 47.111.170.144 + + + 错误 + Error + + + + wpa_supplicant service is not running. +Do you want to start it? + + + + + Disconnected + + + + + Inactive + + + + + Scanning + + + + + Authenticating + + + + + Associating + + + + + Associated + + + + + 4-Way Handshake + + + + + Group Handshake + + + + + Completed + + + + + Unknown + + + + + Could not get status from wpa_supplicant + + + + + Select any network + + + + + WPS AP in active PBC mode found + + + + + Press the PBC button on the screen to start registration + + + + + WPS AP with recently selected registrar + + + + + WPS AP detected + + + + + PBC mode overlap detected + + + + + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + + + + + Network configuration received + + + + + Registration started + + + + + Registrar does not yet know PIN + + + + + Registration failed + + + + + Registration succeeded + + + + + WPA Pre-Shared Key Error + + + + + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + + + + + Network ID Error + + + + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + + + + + Failed to add network to wpa_supplicant +configuration. + + + + + Failed to enable network in wpa_supplicant +configuration. + + + + + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + + + + + Yes + + + + + No + + + + + Failed to remove network from wpa_supplicant +configuration. + + + + + 是否去获取数据! + to get data ? + + + + 获取数据中... + get data ... + + + + + 上报数据中... + Reported data ... + + + + + + + 提示 + Tips + + + + + IP设置错误! + IP set error! + + + + 应用成功 + ยืนยันสำเร็จ + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Phase position: + + + 相检墨点: + Phase Detect Dot: + + + 相检占空比(%) + PhaseDetectDuty + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + LockedPhase + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Fly Time: + + + + DetectDelay + DetectDelay + + + + detect_num + + + + 相检: + phase: + + + + 相位偏移: + Phase offset: + + + + 相检: + Phase: + + + + FullTimeEn + + + + + DetectVol + + + + + HighLowRatio + + + + + 充电占空比100% + ChargeDuty {100%} + + + + 相位检测电压: + 相位检测电压 + PhaseVol: + + + + 检测延时: + Phase Delay: + + + 检测点数量: + 检测点数量 + Num: + + + + 检测墨点数量: + 检测延迟 : + Number: + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + ยืนยัน + + + + 频闪灯周期: + StrobePeriod: + + + 充电占空比100% + ChargeDuty + + + + 提示 + Tips + + + + 应用成功 + ยืนยันสำเร็จ + + + + 点 + Pixel + + + + 解锁相位 + Unclock phase + + + + PicEdit + + + Form + PictureEdit + + + 光栅高度 + Cursor height + + + + 缩小 + ซูมเข้า + + + + 放大 + ซูมออก + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + SaveAs + + + 打开 + OpenFile + + + 字体 + Font + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 列高 + RowHeight + + + + 无加粗 + Normal + + + + 加粗1倍 + Bold1 + + + + 加粗2倍 + Bold2 + + + + 显示控制符 + Display control character + + + 设定:高度 + Height + + + + 开启软键盘 + KeyBord + + + + 插入变量 + Variable + + + + 光栅[X:Y] + Grating[X:Y] + + + + CURR[X,Y] + + + + + 文件名 + ชื่อข้อความ + + + + 字符光标 + Character +Cursor + + + + 像素光标 + Pixel +Cursor + + + + 点击光栅可打开键盘,点击空白处关闭 + Click grating to turn on keyboard, + click blank to turn off + + + + 插入模式 + Insert + + + + 放大比例 + Magnification + + + + 行首 + Home + + + + 行尾 + End + + + + 插入图片 + Picture + + + + + 保存/打印 + บันทึก/เริ่มพิมพ์ + + + + 删除字符 + Delete + ลบ + + + + + + 字库编辑 + FontsEdit + + + 新建图案 + New pattern + + + + 新建信息 + New text + + + + 粗体 + Bold + + + + 网格 + Lattice + + + 绘图 + Draw + + + + 字符间距 + Character +Spacing + + + 插变量 + Insert +Variable + + + + 插入/修改 + Insert/Modify + + + + 编辑现有的多字体 + Edit current multifont file + + + 字符 +光标 + Character +Cursor + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Magnification: %1 + + + + + 插入模式 + Insert mode + + + + + 修改模式 + Revise mode + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Click cursor to open the soft keyboard, click blank to close + + + + 字库保存 + Save font library + + + + + 返回信息编辑 + Return to Information Edit + + + + 请选择字体,打开键盘并输入要编辑的字符 + Choose font,turn on soft keyboard and input text + + + + 信息编辑 + Edit Text + + + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Picture has changed, do you want t save it ? + + + + + + 保存 + บันทึก + + + + 编辑现有的多字体文件 +请使用修改模式!!! + + + + + 放弃保存 + Quit without save + + + + 文件另存为... + Save As...... + + + + 另存为 + Save As + + + + + + + + + 文件名: + ชื่อข้อความ: + + + + 文件名:) + ชื่อข้อความ:) + + + + 文件保存为... + บันทึก...... + + + + 本条信息的变量超过规定数量! + The variables in this message exceed the specified quantity! + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Click 'Enter' to add a new line. Cursor adjusted automatically as per font + + + + 选择[字体]可改变光标大小. + Choose font to change cursor's size. + + + + 选择[绘图]方式,可以绘制任意图形 + Choose 'Drawing' to draft pattern + + + + 光标不匹配时,不能输入或删除. + Can not input or delete while cursor does not match. + + + + 点击空白处可关闭键盘. + Click any blank position to close keyboard. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + User can define new character by 'FontLab Edit' + + + + 选择[文本模式]可切换到主界面编辑方式. + Choose 'Text Mode' to shift to the main editing interface. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Click cursor to open the soft keyboard, click blank to close + + + + 使用[字库编辑]功能,用户可自己修改字形 + User can revise font by choose 'Fontlab Edit' function + + + + 打开文件 + เปิดไฟล์ + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Do you want to print the present file? + + + + 是 + YES + + + + 否 + NO + + + + PicWidget + + + Please input a char. + Please input a char. + + + + 请输入要编辑的字符 + Input the character needed to be edit + + + + 编辑字符:%1 + Edit character: %1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Cursor[%1,%2] + + + + + + + + + + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + + + 请新创建建图片 + Please set up a new pattern file + + + + + + 文件:%1 无法打开 + File %1 cannot be opened + + + + 信息中的变量数超过了最大值(8)!请减小变量数. + The number of variables in the information exceeds the maximum (8)! +Please reduce the number of variables. + + + 信息中的变量数超过了最大值(8)!,请减小变量数. + The number of variables in the information exceeds the maximum (8)! +Please reduce the number of variables. + + + + + 两个变量之间至少要空出一个墨点! + One point between two variables! + + + + PrintSetting + + + Form + + + + + 字体加粗: + FontBolding: + + + + 字体宽度: + ความกว้าง: + + + + + + + + 快速 + เร็ว + + + + + + + + + 标准 + ปกติ + + + + + + + 慢速 + + + + + + 慢速1 + ช้า 1 + + + + + 慢速2 + ช้า 2 + + + + 慢速3 + ช้า 3 + + + + 慢速4 + ช้า 4 + + + + 慢速5 + ช้า 5 + + + + 慢速6 + ช้า 6 + + + + 慢速7 + ช้า 7 + + + + 慢速8 + ช้า 8 + + + + 慢速9 + ช้า 9 + + + + 打印模式: + โหมดการพิมพ์: + + + + 高速模式 + + + + + 隐藏值米标: + + + + + 隐藏打印值 + + + + + 打印条件倍数值: + + + + + 使用隐藏功能时必须使用计数器1 + + + + + 其它设置 + OtherSetting + + + + 更换信息文件时执行的动作: + Excute when change file: + + + + 产品计数器自动清0 + ProductAutoReset + + + + 总产品计数器自动清0 + TotalProductAutoReset + + + + 高压故障关回收槽 + ReclainTankColse +WhenHighVoltFault + + + + 无交替 + None + + + + 普通交替 + General Alter + + + + 电眼触发交替 + Electronic Trigger + + + 更换信息文件时执行的动作 + Action when File Replace + + + + 导出随机码文本 + ExportRandomCodeFile + + + + 无 + None + + + + 外接显示屏: + Extra Screen: + + + + 复位到起始值 + Reset to the starting value + + + + 小屏 + เล็ก + + + + 大屏 + ใหญ่ + + + + 总产品计数值 + Product Counter + + + + + 计数器1 + เคาน์เตอร์ 1 + + + + + 计数器2 + เคาน์เตอร์ 2 + + + + + + + 起始值: + StartValue: + + + + + + + 结束值: + EndValue: + + + + + + 清零 + ResetCnt + + + + 可变长度 + VariableLength + + + + 计数器2设置 + Counter 2 Setup + + + + 重复次数: + RepeatTimes: + + + + + + + 增量值: + Increment: + + + + 计数器1设置 + Counter 1 Setup + + + + 墨线时间 + InkLineTime + + + + 墨线时间: + WorkingTime: + + + + + + + 0 + 1 {0?} + + + + 开机次数: + PowerOnTimes: + + + + 应用当前配置 + ยืนยัน + + + + 常用设置 + ตั้งค่าทั่วไป + + + 速度优先 + Speed First + + + + yyyy-MM-dd + + + + + yyyy/MM/dd + + + + + yyyyMMdd + + + + + yyyy年MM月dd日 + + + + + yyyy-MM-dd hh:mm + + + + + yyyy/MM/dd hh:mm + + + + + yyyyMMddhhmm + + + + + yyyy年MM月dd日hh:mm + + + + + hh:mm + + + + + 首行电压(%): + NadirVolt(%): + + + + 字高设置(%): + ความสูงตัวอักษร: + + + + 行末电压(%): + ZenithVolt(%): + + + + 信息左右颠倒 + ตัวอักษร +ซ้าย-ขวา + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 信息上下颠倒 + ทิศทางตั +วอังษร + + + + 故障停止走米 + Stop Counter +While Fault + + + + 相位故障不打印 + StopPrintWhile +Phase Fault + + + + 回收故障处理 + RecycleFault + Processing + + + + 自然数计米 + Natural +Counter + + + + 超速暂停打印 + Pause printing +for overspeed + + + + 不打印走米 + Not print +continue counter + + + 打印优化 + Print +optimization + + + + 电眼误触禁止 + Prohibition +ElectricEye re-trigger + + + + TextLabel + + + + 0211模式 + 0211 Mode + + + 空列打印 + Blank column +print + + + + 字形优化 + char Optimize + + + + 有效期(天): + วันหมดอายุอัตโนมัติ: + + + 2018-05-24 + 24Dot {2018-05-24?} + + + 2018/05/24 + 24Dot {2018/05/24?} + + + + + 高级设置 + AdvancedSetting + + + + + 交替扫描隔点(默认为1): + Interlacing(Dot): + + + + 行末调整点模式: + Adjusted PrintMode: + + + + 点距调整值(默认为0): + AdjustDotSpacing (Def 0): + + + + + 扫描颠倒 + ReversalScan + + + + 点距调整电压位置: + DotGapVoltPos: + + + + 行末调整点数(默认为0): + FineAdjDotNum(Def 0): + + + + 去除冗点模式(默认懒惰): + InkDotUtilization (Def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Less + + + + 均衡模式 + Balance + + + + + 冗点比例(默认为0%): + UnchargedDotRate (Def 0%): + + + + 行末点微调(‰): + FineAdjRate(‰): + + + + 修改授权 + Modify authorization + + + + 省点 + save point + + + + dd MM yy + + + + + + 调整电压 + Adjust the voltage + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + UseRecommended + Setting + + + 行业: + IndustryMode: + + + + 快 + เร็ว + + + + 电线电缆 + Cable & Wire + + + + 制药/食品/电子 + Pharmacy/Food/Electronics + + + + 建筑管材 + Pipe & Tube + + + + 其他 + Others + + + 速度: + ความเร็ว: + + + + 检测回收槽 + detect Collector + + + + + 锁定脉冲计数 + Lock pulse count + + + + 每条信息只打印一次 + Print once per message + + + + 新放大板 + + + + + 非字宽 + Not word wide + + + + 使用齿轮泵 + Use gear pumps + + + + 高压阈值: + High voltage threshold: + + + + 不检测喷头盖 + Do not test sprinkler caps + + + + 维护时间: + Maintenance time: + + + + 打印时绿灯常亮 + green light is always on +when printing + + + + 复位发送打印数据 + Reset sending print data + + + + 计数器设置 + Counter setting + + + 显示小数 + Display +decimals + + + + 注意:“其它设置”页下的"分段计米“勾选时,计数器1不可用。 + Note: when "section meter" under "other settings" page is checked, counter 1 is not available. + + + + + 计数器3设置 + Counter 3 Setup + + + + ddhhmm + + + + + 计数器3 + เคาน์เตอร์ 3 + + + + 生产日期: + วันที่อัตโนมัติ: + + + + dd/MM/yy + + + + + 小数点位数 + + + + + dd/MM/yyyy + + + + + dd-MM-yy + + + + + dd-MM-yyyy + + + + + 计数器保存关机值 + Counter save shutdown value + + + + 距离尾部(mm): + Distance from tail (mm): + + + 当计数达到 : + Count reached: + + + 特殊条件计数 + Special condition count + + + + 首尾交替 + Head tail alternation + + + 显示 + display + + + + 米标显示 + M the display + + + + 上移 + ขยับขึ้น + + + + 下移 + ขยับลง + + + + + + + 打印电压缩放 + Print voltage scaling + + + + 整体缩放(%) : + Overall scaling (%) : + + + + 显示屏显示: + Show on Screen: + + + 显示小数点 + Show Decimal separator + + + + 循环产品计数 + Cycle Product Count + + + 特殊变量结束值: + Special variable end value: + + + 特殊变量起始值: + Special variable starting value: + + + 打印 + เริ่มพิมพ์ + + + + 分段计米 + CNT1 by Group + + + + 插 入 + ค้นหา + + + + 添 加 + เพิ่มข้อมูล + + + + 全部删除 + DeleteAll + ลบทั้งหมด + + + + 删 除 + Delete + ลบ + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + AlternatePrint + + + + 起始位置: + StartPos: + + + + 交替间隔: + AltInterval: + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + + 重设值 + ResetCurrentCounter + + + + + + 重复数: + RepeatTimes: + + + + + + 当前值: + Current: + + + + + + + 跳米设置 + SkipCountingSetting + + + + 跳米数: + SkipInterval: + + + + 跳米打印 + SkipCounting +Enable + + + + + + 输入密码 + 提升权限 + MoreAuthorization + + + + + 提示:交替参数不正确 + + + + + 要求:起始位置<交替间隔 + Formula: Starting position < Alternate interval + + + + 要求:(重复次数+起始位置)<交替间隔 + Formula: (Repeat Times + Starting position) < Alternate interval + + + + + + + + + + + + 提示 + Tips + + + + 应用成功 + ยืนยันสำเร็จ + + + %4d天 %02d:%02d:%02d + %4d Day %02d:%02d:%02d + + + + + + + + + + 警告 + Warnning + + + + 是否确认使用推荐设置? + Are you sure to use Recommended Setting ? + + + + 系统维护设置成功! + Syster maintenance setting success ! + + + + 喷码机维护设置成功! + Machine maintenance setting success ! + + + + + + 错误 + ขัดข้อง + + + + 不存在 + Not-existent + + + + 授权码: + Authorization code: + + + + 提示:可变长度参数不正确 + Hint: Incorrect variable length parameter + + + + 要求:调整长度小于喷印间隔 + Requirement: Adjust the length less than the printing interval + + + + 小时 + ชั่วโมง + + + + 错误 + ขัดข้อง + + + + 密码: + Password: + + + + 取消授权 + ออกจากตั้งค่าเลเวล2 + + + + + + 其他设置 + + + + + + 超高速 + + + + + + 高速 + + + + + 软件初始化完成. + + + + + RFID卡清零! + + + + + 随机码文件为空,不需要导出 + No randomCode file to export + + + + 随机码文本将展出到U盘,请插入U盘 + The RandomCode save U disk. Please insert the U disk + + + + 计数器1(结束值-开始值)不能被增量整除,结束值将被设为%1 + CNT1 distance can not divisible by Increment. the end value will set to %1 + + + + 计数器1(结束-开始)不能被增量整除,结束值将被设为%1 + CNT1 distance can not divisible by Increment. the end value will set to %1 + + + + 1 + 1 + + + + 正在打印第%1组设置,不可删除 + %1 is printing,can not delete + + + + 是否确认删除第%1组设置? + delete %1? + + + + 是否确认删除全部设置? + delete all? + + + + 字体宽度不能为0 + Font width cannot be 0 + + + + 是否立即重新计米? + Are you want to reset counter! + + + + 解锁脉冲计数 + Unlock pulse count + + + + builTime:%1 + + + + + fpgaVersionNum: %1 + + + + + Type: %1 + + + + + FPGAVersion: %1 + + + + + FPGAType: %1 + + + + + 喷印间隔太小,无法正常打印!!! + + + + + 原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)! + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + As per Speed + + + + 根据喷印 + As per Print + + + + 根据脉冲数 + As per Pulse Count + + + + 根据同步器参数 + As per Synchronizer Data + + + + 实际皮带速度(毫米/秒): + Conveyor Speed(mm/s): + + + + 实际喷印间隔长度(毫米): + Print Interval(mm): + + + + 长度(毫米): + Length(mm): + + + + 同步脉冲数 + Synchronizer Pulse + + + + 同步器直径(毫米): + Synchronizer Diameter(mm): + + + + 脉冲数/转: + Pulse Number(Round): + + + + 脉冲数修正 + Correction +Pulses + + + + + + + 错误 + Error + + + + 速度不应该为0 + Speed should not be 0 + + + + 实际同步长度不应该为0 + The actual synchronization length should not be 0 + + + + 长度不应该为0 + Length should not be 0 + + + + 直径不应该为0 + Diameter should not be 0 + + + + QBarCode + + + Dialog + + + + + 条形码类型 + BarType + + + 文本信息 + Input: + + + + 显示缩放 + Scale + + + + 条形码高度 + BarHeight + + + + 1点 + 1Dot + + + + 2点 + 2Dot + + + + 3点 + 3Dot + + + + 4点 + 4Dot + + + + + 5点 + 5Dot + + + + 6点 + 6Dot + + + + 文本1 + TEXT1 + + + + 文本3 + TEXT3 + + + + 计数器2 + เคาน์เตอร์ 2 + + + + 文本2 + TEXT2 + + + + 计数器1 + เคาน์เตอร์ 1 + + + + 插入文档 + InsertToDoc + + + + 条码保存 + บันทึก + + + + 增加数字行 + add number row + + + + 日期 + Date + + + + 时间 + เวลา + + + 增加数字行 + Add number line + + + + 条码宽度 + BarWidth + + + 字体 + Font + + + 文本宽度调整 + TextWidth + + + 居中对齐 + CenterAlign + + + 左对齐 + LeftAlign + + + 右对齐 + RightAlign + + + 文本对齐 + TextAlign + + + 文本加粗 + TextBold + + + 插入到文档 + InsertToDoc + + + + FileName + ชื่อข้อความ + + + + 预览 + แสดงตัวอย่าง + + + 条形码保存 + Save + + + + 墨水类型 + InkType + + + + 黑墨 + BlackInk + + + + 白墨 + WhiteInk + + + 条形保存 + Save + + + + 返回 + ย้อนกลับ + + + + 文件未保存 + File Not Saved + + + 5点阵 + 5 Matrix + + + 7点阵 + 7 Matrix + + + 9点阵 + 9 Matrix + + + 12点阵 + 12 Matrix + + + 16点阵 + 16 Matrix + + + + BARCODE_128 + CODE_128 + + + + + BARCODE_93 + + + + 自适应编码 + AUTO + + + + 7点 + 7ดอท + + + + 9点 + 9ดอท + + + + 12点 + 12ดอท + + + + 16点 + 16ดอท + + + + 24点 + 24ดอท + + + + + 标签宽度:%1,标签高度:%2,文本宽度:%3 + TabWidth: %1,Height: %2,TextWidth: %3 + + + + QObject + + + + 手动设定 + Manual Mode + + + + 应用 + Apply + + + + 起始值 + StartValue + + + + 结束值 + EndValue + + + + 循环值 + RepeatValue + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SceneEditOption + + + Form + Form + + + + 预览 + แสดงตัวอย่าง + + + + 新建 + เริ่มใหม่ + + + + 打开 + เปิดไฟล์ + + + + + 保存 + บันทึก + + + + 另存为 + SaveAs + + + + 新增图元 + เริ่มไอเทมใหม่ + + + + 编辑图元 + แก้ไขไอเทม + + + + 删除图元 + DelItem + ลบไอเทม + + + + 放大 + ซูมออก + + + + 缩小 + ซูมเข้า + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + without save it + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + ควบคุมด้วยมือ + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + เปิดหัวพิมพ์ + + + + + + + + + + + + + 停止 + หยุดพิมพ์ + + + + 回收槽关 + ปิดหัวพิมพ์ + + + 回路阀 + FeedBack +Valve + + + + 回收泵 + ปั๊มดูดกลับ + + + + + 压缩机 + Compressor + + + + 主墨泵 + ปั๊มหลักหมึก + + + + 泄压阀 + Decompression +Valve + + + + 循环阀 + วาล์วดูดกลับ + + + + 墨水阀 + วาล์วหมึก + + + + 粘度泵 + ปั๊มวัดหมึก + + + + 混合阀 + วาล์วผสม + + + + 时间设置 + ตั้งค่าเวลา + + + + 系统升级 + System upgrade + + + + 排气 + ไล่อากาศ + + + + 导出配置到U盘 + Export Parameter +To Flash Disk + โหลดไฟล์เข้า USB + + + + 自动清洗 + AutoClean + + + 齿轮泵 + The gear pump + + + + 电机测试 + Motor Test + + + + 更新字库 + UpdateFontLibrary + + + + 齿轮泵开 + เปิดปั๊ม + + + + 齿轮泵关 + ปิดปั๊ม + + + + 导出字库 + Export Character Library + + + + 从U盘导入配置 + Import Parameter +From Flash Disk + โหลดไฟล์จาก USB + + + + 屏幕校正 + แก้ไขหน้าจอทัสกรีน + + + + 更新软件 + Update InkJet SolftWare + + + + 出厂设置 + Factory Default + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + Cancel + ยกเลิก + + + + (1/2) Cleaning, please wait... + (1/2) Cleaning, please wait... + + + + + + + + + + + + + + + + + + + + 开 + เปิด + + + + + + + + + + + + + + + + + + + + + 关 + ปิด + + + + + + + + + + + + + + + + + + 警告 + Warnning + + + + + + + 请先移开喷头盖! + Please move the printhead cover off! + + + + 是否确认进入手动模式? + Are you sure to enter Manual Mode ? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Please confirm collector is closed. Are you sure to enter Automatic Mode ? + + + + + 手动 + ความคุมด้วยมือ + + + + + + 自动 + อัตโนมัติ + + + + + + + + + + + 启动 + เริ่ม + + + + Application + Application + + + + 是否确认更新字库? + Are you sure to update the font library ? + + + + 更新字库成功,重启后生效! + Font library update success, reboot to apply ! + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Factory default recovered, please shutdown the printer and power on again + + + + 校准触摸屏 + แก้ไขทัชสกรีน + + + + 是否确认开始校准程序?请小心进行校准! + Are you sure to start calibrate the touch-screen? Please operate carefully! + + + + 无法生成脚本 + Fail to generate script + + + + + + + 密码不正确! + Incorrect Password! + + + + 是否确认更新软件? + Are you sure to update software? + + + + 软件更新成功,重启后生效! + Software update success, reboot to apply ! + + + + + + + + 错误 + ขัดข้อง + + + + 没找到对应字库,更新失败! + No corresponding word library found, update failed! + + + + 更新失败! + Update failed! + + + + 找不到更新软件! + Unable to find update software! + + + + 是否确认更新系统? + Are you sure to update the system? + + + + 系统更新成功,重启后生效! + The system has been updated successfully and will take effect after reboot! + + + + 文件不存在! + File does not exist! + + + + 压力 + แรงดัน + + + + autoclean cancel or status: + autoclean cancel or status: + + + + (2/3) Cleaning + (2/3) ทำความสะอาด + + + + (3/3) Cleaning + (3/3) ทำความสะอาด" + + + 混合阀打开3: + 混合阀打开3. + The mixing valve opens 3: + + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + autoclean start + autoclean start + + + + 是否确认启动自动清洗? + Start up auto clean: + + + + 是否确认墨水排除,加入清洗剂? + Ink empty and cleaning agent in? + + + + (1/3) Cleaning + (1/3) Cleaning + + + + 是否确认导出字库到U盘? + Export Character Library to usb disk? + + + + U盘不可识别! + usb disk not recognized! + + + + 字库导出完成! + Character library export done! + + + + 是否开始电机测试? + Startup motor test? + + + + 正在排气,是否停止? + Venting, do you want to stop? + + + 更新文件不存在! + Update file was not found! + + + 是否确认备份系统文件? + Confirm to backup system file? + + + 系统备份成功! + System backup suceess ! + + + 备份操作失败! + Backup operation failed! + + + + + + + + + + + + + + + + + 提示 + Tips + + + 开墨线 + Open InkLine + + + 关墨线 + Close InkLine + + + 清洗阀 + Clean Valve + + + 墨线阀 + InkLine Valve + + + 供墨阀 + InkValve + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + If you start cleaning, be sure the recycling tank has opened more than 10 mm, and stop to clean after 1 minute + + + + 开始清洗 + เริ่มทำความสะอาด + + + + 停止清洗 + หยุดทำความสะอาด + + + + 是否确认导出配置到U盘? + Do you want to export configuration to flashdisk ? + + + + 检测不到U盘 + Flashdisk was not detected + + + + 成功导出配置到U盘 + Configuration was exported to flashdisk success + + + + 是否确认从U盘导入配置? + Are you sure to import configuration from flash disk ? + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Configuration import success. Reboot to apply ! + + + + SystemSetting + + + Form + + + + + 压力: + แรงดัน: + + + + 粘度: + ความหนืดหมึก: + + + + 高压包容差: + HighVoltTolerance: + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + CollectorSwitchingTime: + + + + 喷头温度: + อุณหภูมิหัวพิมพ์: + + + + 电机电流: + Motor Electric Current: + + + + 64K + + + + + 76K + + + + + 96K + + + + + 晶振频率: + Crystal Frequence: + + + + 粘度校正(%): + ViscosityAdjust: + + + + 新晶振 + NewCrystal + + + + 场景模式 + SceneMode + + + + 墨水温度: + อุณหภูมิหมึก: + + + + + °C + °C + + + + 0 + 0 + + + + 0.6 + 0.6 + + + + 1.0 + 1.0 + + + + 1.6 + 1.6 + + + + 2.0 + 2.0 + + + Pulse Counter: + Pulse Counter: + + + + 脉冲计数器: + Pulse Counter: + + + + 隔膜位置偏移: + DiaphragmOffset: + + + + 5 + 5 + + + + 10 + 10 + + + + 15 + 15 + + + + 20 + 20 + + + + 25 + 25 + + + + 30 + 30 + + + + 40 + 40 + + + + 45 + 45 + + + + 50 + 50 + + + + 55 + 55 + + + + 60 + 60 + + + + 喷嘴直径: + Nozzle Diameter: + + + + 50 (UM) + + + + + 60 (UM) + + + + + 70 (UM) + + + + + 风扇开启温度: + Fan on temperature: + + + + 重置高压 + Reset High Voltage + + + + 界面语言设置 + ตั้งค่าภาษา + + + + 应用当前配置 + ยืนยัน + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + ViscosityPumpActionInterval(s) : + + + + 晶振电压(%): + ปรับค่าการพิมพ์(%): + + + + 频率修正: + Frequence Adjustment: + + + + Hz + + + + + 回收泵力度(%): + Recycle Pump Potency (%): + + + 脉冲计数器: + Pulse counter: + + + + 隔膜位置: + DiaphragmPosition: + + + 混合阀管路: + MixingValvePiping: + + + 旧管路 + OldPiping + + + 新管路 + NewPiping + + + + 信息编辑模式: + โหมดการพิมพ์: + + + + 文本模式 + Text mode + + + + 点阵模式 + Matrix mode + + + 小喷嘴片 + Small Nozzle + + + 大喷嘴片 + Big Nozzle + + + + 喷嘴逆清洗 + ทำความสะอาด +รูฉีดหมึก + + + + 搜索最佳晶振频率 + Search Suitable Frequence + + + + 搜索最佳晶振电压 + Search Suitable Voltage + + + + 128K + + + + + + + + + + + + + 错误 + ขัดข้อง + + + + 实际频率不能为%1 + Actual frequency cannot be %1 + + + + + 提示 + Tips + + + + 应用成功 + ยืนยันสำเร็จ + + + + 自动清洗时间约为一分钟,然后自动停止 + Auto Cleanning,wait 1 minute + + + + 开始清洗 + Start cleaning + + + + 停止清洗 + Stop cleaning + + + 正在进入手动模式...... + Enter Manual Mode..... + + + + 正在喷嘴逆清洗...... + Is Nozzles Cleanning..... + + + + 自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率? + Automatic search takes a long time. Are you sure to automatically search for the best crystal oscillator frequency within the current frequency range of 2K? + + + + Tiếng Việt(Vietnamese interface) + + + + + Chinese interface(中文界面) + + + + + English interface(英文界面) + + + + 喷嘴逆清洗完成 + Nozzles Cleanning Finish. + + + 正在开回收槽...... + ReclaimTank Openning...... + + + 正在关回收槽...... + ReclaimTank Closing...... + + + + 清洗完成 + The cleaning is done + + + 密码不正确! + Incorrect Password! + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Do you want to update the electric current data of line output transformer ? + + + + + + 喷头盖未关,请先关喷头盖! + Please close the printhead cover ! + + + 重置高压前,请先关墨线! + Please Turnoff InkLine before Reset High voltage! + + + 重置高压前,请先关闭回收槽! + Please Turnoff ReclaimTank before Reset High voltage! + + + + + 墨线开关未开,请先打开墨线开关! + Please turn on the inkjet switch ! + + + 墨线未打开! + InkLine Not Opened! + + + + + 回收槽未全部打开! + Collector does not open fully ! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + It may cost a long time to search automatically, do not carry on any other operation while searching. Do you want to start automatical search now? + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + The search starting frequence %1 Hz is over range + + + + 高压设置完成 + High voltage setting done + + + 高压设置异常 + High Voltage Set False + + + 高压设置异常,本次重置操作无效! + High Voltage Set False! + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- The longest high level clock %2 + + + + 最佳晶振频率完成 + Suitable frequence search done + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- The longest high level clock %2 + + + + + 最佳晶振电压完成 + Suitable voltage search done + + + 警告 + Warnning + + + 确定要切换中英文界面? + You want to switch Language? + + + 重启后切换到英文界面 + Switch to English GUI After the restart + + + 重启后切换到中文界面 + Switch to Chinese GUI After the restart + + + + TextEditOption + + + Form + Form + + + + 新建 + เริ่มใหม่ + + + + + 另存为 + SaveAs + + + + 预览 + แสดงตัวอย่าง + + + + + + 保存 + บันทึก + + + + 文件 + แฟ้ม + + + + 插变量 + วันที่อัตโนมัติ + + + + 间距 + ระยะห่าง + + + + 字体 + ฟอนต์ + + + + wenquanyi + + + + + 12 + + + + + 点 + Pixel + + + + 粗体 + Bold + + + + + + + + + 警告 + Warnning + + + + + + + 无法打开文件 + Cannot open file + + + + + Application + Application + + + + + 是否确认将文件内容追加到打开的文件? + Confirm to add content to opened file? + + + + 插入图片 + Insert +pattern + + + + 插入文本 + Insert +text + + + + 错误 + ขัดข้อง + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption constructor parameters textEdit cannot be blank + + + + 打开文件 + เปิดไฟล์ + + + + 二维码变量设置 + QR Variable Edit + + + + 完成 + ตกลง + + + 另存为123 + SaveAs + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + To save in .txt format will abandon all form, do you want to save it as .html format ? + + + + 提醒 + Reminding + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Pattern %1 comes from flashdisk, do you want to copy it to local disk ? + + + + 无法保存文件 + File cannot be saved + + + + 保存... + บันทึก..... + + + + 提示 + Tips + + + + 文档已经改变,是否保存? + File has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + วินาที: + + + + 分: + นาที: + + + + 月: + เดือน: + + + + 日: + วัน: + + + + 时: + ชั่วโมง: + + + + 年: + ปี: + + + + 设置时间 + ตั้งค่าเวลา + + + + TriggerCtrl + + + Form + + + + + 触发模式 + TriggerMode + + + + 延时触发 + พิมพ์ต่อเนื่อง + + + + 光电边沿触发 + เซ็นเซอร์ + + + + 光电电平触发 + Electrical LevelTriggering + + + + 同步器触发 + เอ็นโค้ดเดอร์ + + + + 脉冲数/毫米 + Pulse/Millimeter + + + + 喷印间隔(毫米) + SpaceWidth(mm) + + + + 同步喷印模式 + SynchronizerMode + + + + 按字符宽度 + as per font width + + + + 按喷印比例 + as per proportion + + + + 字符宽度: + CharacterWidth: + + + + 重复次数 + RepeatTimes + + + + + + + + 重复间隔(毫秒) + RepeatInterval(ms) + + + + + + + 触发延时(毫秒) + ตำแหน่งการพิมพ์(ms) + + + + 间隔模式: + Interval Mode: + + + + 行末<->行首 + End To Head + + + + 行首<->行首 + Head To Head + + + + 产生脉冲所需计数: + Count for Pulse: + + + + + + + 延时(毫秒): + ดีเลย์(ms): + + + + 允许电眼复位 + Allows ELE-EYE Reset + + + + 允许电眼立即复位 + Allows ELE-EYE Reset now + + + + 电眼清零 + PhotodEyeResetCounter + + + + 镜像交替间隔 + MirrorAlternately + + + + 镜象交替类型 + MirrorMode + + + + 无镜像打印 + NoMirror + + + + 自动水平翻转 + AutoRollover + + + + 自动垂直翻转 + AutoVerticalFlip + + + + 中心对称旋转 + CenterRotation + + + + 同步器正反转打印 + EncoderAlwasyValid + + + + 同步器只正转打印 + EncoderValidOnlyForward + + + + 同步器只反转打印 + EncoderValidOnlyReverse + + + 对应编码器脉冲数 + Encoder/pulse + + + + 脉冲信号值: + Pulse signal value: + + + + + 封锁时间(毫秒) + LockTime(ms) + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + SynchronizerEnable + + + + 同步器清零 + SynchronizerResetCounter + + + + 脉冲数修正 + CorrectionPulses + + + + 脉冲输出使能 + PulseOutputEnable + + + + 禁止电眼清零 + ForbiddenMagicEyeReset + + + 允许电眼清零 + AllowMagicEyeReset + + + 允许电眼立即清零 + AllowMagicEyeResetNow + + + 镜像交替间隔数 + Mirror interval + + + + 20131228-1 + + + + + 应用当前配置 + ยืนยัน + + + + 独立参数 + Independent parameter + + + + + + + 触发延时(毫米) + ตำแหน่งการพิมพ์(ms) + + + + + + 重复间隔(毫米) + Repeat Gap (mm) + + + + + 封锁间隔(毫米) + Lock Gap(mm) + + + + + + + 延时(毫米): + ดีเลย์(mm): + + + + 字符宽度 + ระยะห่างตัวอักษร + + + + 喷印比例(%) + PrintingScale(%) + + + + 提示:参数不正确 + Hint: The parameter is incorrect + + + + 要求:触发长度小于喷印间隔 + Requirement: The trigger length is less than the printing interval + + + + 提示 + Tips + + + + 应用成功 + ยืนยันสำเร็จ + + + + 封锁间隔(毫秒) + Lock Gap(ms) + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + แก้ไขโลโก้ + + + + 缩小 + ซูมเข้า + + + + 放大 + ซูมออก + + + + 宽度 + ความกว้าง + + + + 新建 + เริ่มใหม่ + + + + 高度 + ความสูง + + + + + + 保存 + บันทึก + + + + 保存为 + SaveAs + + + + 打开 + เปิดไฟล์ + + + + 导入 + โหลด + + + + A + A + + + + 图像扩张 + Image expansion + + + + 图像裁剪 + Image clipping + + + + 提示 + Tips + + + + 图片已经改变,是否保存? + Pattern has changed, do you want t save it ? + + + + 放弃保存 + Give up saving + + + + + + 放大倍数:%1 + Magnification: %1 + + + + 图片另存为... + SaveAs + + + + 另存为 + Save as + + + + 打开文件 + เปิดไฟล์ + + + + 图片保存为... + Save to...... + + + + 导入文件 + Import file + + + + dlgDrawInit + + + 图案参数设置 + Pattern parameters setting + + + + 图案宽度(像素) + Pattern width (pixel) + + + + 图案高度(像素) + Pattern height (pixel) + + + + 确定 + ยืนยัน + + + + dlgQrCode + + + Dialog + + + + + 信息前缀 + Text + + + + 变量(初值) + Curent-Couter + + + + 信息后缀 + Suffix-Text + + + + 条形码 + บาร์โค้ด + + + + 默认 + default + + + + 8 x 18 + + + + + 8 x 32 + + + + + 12 x 26 + + + + + 12 x 36 + + + + + 16 x 36 + + + + + 16 x 48 + + + + + DM码尺寸: + DM code size: + + + + 自动插入时间 + Automatic insertion time + + + + 变量增量 + Increment + + + 增量 + Increment + + + + 返回 + 返回 + + + + + TextLabel + + + + 信息 + Text: + + + + 正相打印 + NormalPrint + + + + 反相打印 + RP-Print + + + + DataMatrix + + + + + QRCode + + + + + 插入文档 + InsertToDoc + + + + 计数器(变量) + เคาน์เตอร์(จำนวนนับ) + + + + 保存 + บันทึก + + + + 预览 + แสดงตัวอย่าง + + + 插入到文档 + InsertToDoc + + + + 自动刷新 + AutoShow + + + 黑墨 + BlackInk + + + 白墨 + WhiteInk + + + + 警告 + Warnning + + + + 输入内容超出选择DM码尺寸大小,请选择更大的尺寸! + Input exceeds the size of the selected DM code, please select a larger size! + + + + [%1 X %2] + + + + + logo_Form + + + Form + + + + + zkWidget + + + + 警告 + Warnning + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maximium size width %1 x Height %2, present request %3 x %4 + + + + 请新创建建图片 + Please set up a new pattern file + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/timesettingdialog.ui b/timesettingdialog.ui new file mode 100644 index 0000000..1ed6c8f --- /dev/null +++ b/timesettingdialog.ui @@ -0,0 +1,242 @@ + + + TimeSettingDialog + + + + 0 + 0 + 449 + 149 + + + + Qt::StrongFocus + + + Dialog + + + + + 230 + 110 + 201 + 41 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 431 + 91 + + + + + + + 0 + + + 59 + + + + + + + + 40 + 16777215 + + + + 秒: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 40 + 16777215 + + + + 分: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0 + + + 59 + + + + + + + 1970 + + + 4000 + + + + + + + + 40 + 16777215 + + + + 月: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 40 + 16777215 + + + + 日: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 40 + 16777215 + + + + 时: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0 + + + 23 + + + 0 + + + + + + + 1 + + + 31 + + + + + + + + 40 + 16777215 + + + + 年: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 1 + + + 12 + + + + + + + + + + buttonBox + accepted() + TimeSettingDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + TimeSettingDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/triggerctrl.ui b/triggerctrl.ui new file mode 100644 index 0000000..b79a174 --- /dev/null +++ b/triggerctrl.ui @@ -0,0 +1,1035 @@ + + + TriggerCtrl + + + + 0 + 0 + 800 + 600 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Form + + + + + + + + + 0 + 0 + + + + + 0 + 50 + + + + + 16777215 + 60 + + + + 触发模式 + + + + + + 0 + + + 10 + + + + + + 0 + 0 + + + + + 0 + 24 + + + + + 16777215 + 40 + + + + Qt::RightToLeft + + + 光电电平触发 + + + + + + + + 0 + 0 + + + + + 0 + 24 + + + + + 16777215 + 40 + + + + Qt::RightToLeft + + + 光电边沿触发 + + + + + + + + 0 + 0 + + + + + 0 + 24 + + + + + 16777215 + 40 + + + + Qt::RightToLeft + + + 同步器触发 + + + + + + + + 0 + 0 + + + + + 0 + 24 + + + + + 16777215 + 40 + + + + Qt::RightToLeft + + + 延时触发 + + + + + + + + + + + + + + + + + + + 6 + + + + + 封锁时间(毫秒) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 37 + + + + 6 + + + 9999999 + + + 10 + + + + + + + 脉冲数/毫米 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 37 + + + + + 无镜像打印 + + + + + 自动水平翻转 + + + + + 自动垂直翻转 + + + + + 中心对称旋转 + + + + + + + + + 0 + 0 + + + + 1 + + + 65535 + + + 1 + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 37 + + + + Qt::ImhNone + + + + + + + + 0 + 0 + + + + + 16777215 + 100 + + + + + 行末<->行首 + + + + + 行首<->行首 + + + + + + + + 镜象交替类型 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 37 + + + + 0 + + + 99 + + + 8 + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + 同步器清零 + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + 脉冲数修正 + + + + :/icon/pulse.png:/icon/pulse.png + + + + + + + + 0 + 0 + + + + 1 + + + 200 + + + + + + + + 0 + 0 + + + + + 16777215 + 100 + + + + 1 + + + 65535 + + + 1 + + + + + + + + 0 + 0 + + + + + + + true + + + + + + + + 0 + 0 + + + + 脉冲输出使能 + + + + + + + Qt::LeftToRight + + + 重复间隔(毫秒) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 延时(毫秒): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 字符宽度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + 同步打印 + + + + + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + + + + + Qt::LeftToRight + + + 间隔模式: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 100 + + + + 0 + + + 65535 + + + 1 + + + 10 + + + + + + + 产生脉冲所需计数: + + + + + + + + 0 + 0 + + + + 重复间隔(毫秒) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 镜像交替间隔 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 37 + + + + 0 + + + + 按字符宽度 + + + + + 按喷印比例 + + + + + + + + + 0 + 0 + + + + + 16777215 + 37 + + + + 1 + + + 253 + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 37 + + + + + 禁止电眼清零 + + + + + 允许电眼复位 + + + + + 允许电眼立即复位 + + + + + + + + 同步喷印模式 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 37 + + + + 65535 + + + + + + + 重复次数 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 16777215 + 37 + + + + 1 + + + 100000 + + + 1 + + + 1 + + + + + + + Qt::Horizontal + + + + + + + 触发延时(毫秒) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 37 + + + + 1 + + + 65535 + + + 6 + + + + + + + + 0 + 0 + + + + + 同步器正反转打印 + + + + + 同步器只正转打印 + + + + + 同步器只反转打印 + + + + + + + + Qt::LeftToRight + + + 喷印间隔(毫米) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + 电眼清零 + + + + + + + 脉冲信号值: + + + + + + + + 0 + 0 + + + + + + + 100 + + + + + + + + + Qt::Horizontal + + + + + + + + + 20131228-1 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + + + + + + + 0 + 70 + + + + + 250 + 16777215 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + Qt::LeftToRight + + + 应用当前配置 + + + + :/icon/apply.png:/icon/apply.png + + + + + + + Qt::Horizontal + + + + + + + + + + + + + + diff --git a/tty1 b/tty1 new file mode 100644 index 0000000..e69de29 diff --git a/turkey.qm b/turkey.qm new file mode 100644 index 0000000000000000000000000000000000000000..df78423a70f3134204927715dba27d3f16bc9df1 GIT binary patch literal 124908 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 + + +UTF-8 + + DevOp + + + + + + + 警告 + Uyari + + + + 字高超出范围 + Kelime yuksekligi aralik disinda + + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + kelimesi cok kucuk veya yuksek baslatilmamis veri bobin atesleme, tum yuksek gerilim akim hata hatayi goz ardi edecektir + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Baski araligi cok kisa. Font genisligi otomatik olarak ayarlanacak! + + + + + 错误 + Hata + + + + 在同步计米的情况下无打印串或显示区域为零 + Senkronizerden gelen degerlere gore baski yapilamiyor + + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Ayarlarinizi gozden geciriniz, senkronizerden cok fazla sinyal geliyor + + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Karakter dizilimi cok kisa, lutfen karakter arasi bosluk ekleyiniz ya da baski uzunlugunu kisaltiniz + + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Baski uzunlugu cok kisa, lutfen karakter boslugunu azaltin ya da baski uzunlugunu artiriniz + + + + readB6Req + + + + + readB6com + + + + + readB6suc + + + + + 设置读写器密码成功! + + + + + 设置读写器工作模式成功! + + + + Encoder pulse counter per MM parameter error! + MM parametre hatası basina kodlayicc darbe sayaci! + + + + DialogAuthorization + + + Dialog + diyalog + + + + 授权密码: + Sifre: + + + + 输入密码 + 提升授权 + Yetkili Ayarlari + + + + DialogCycleprint + + + Dialog + + + + + 1循环范围:0- + 1 dongu araligi: 0- + + + + 1循环次数: + 1 cevrim sureleri: + + + + 2循环范围:0- + 2 dongu araligi: 0- + + + + 2循环次数: + 2 cevrim sureleri: + + + + 3循环范围:0- + 3 dongu araligi: 0- + + + + 3循环次数: + 3 cevrim sureleri: + + + + 6循环次数: + 6 cevrim sureleri: + + + + 6循环范围:0- + 6 dongu araligi: 0- + + + + 5循环范围:0- + 5 dongu araligi: 0- + + + + 5循环次数: + 5 cevrim sureleri: + + + + 4循环范围:0- + 4 dongu araligi: 0- + + + + 4循环次数: + 4 cevrim sureleri: + + + + DialogFileOperation + + + Dialog + Diyalog + + + + 本地文件 + Yerel Dosyalar + + + + U盘文件 + U disk dosyasi + + + + 删除文件 + Sil + + + + 删除全部 + Hepsini Sil + + + + 从U盘导入 + Tasinabilir Bellekten Aktar + + + + 导出到U盘 + Tasinabilir Bellege Aktar + + + + 插入 + Dosya Ekle + + + + 打开文件 + Dosya Ac + + + + 上一个 + Onceki + + + + 下一个 + Sonraki + + + + 退出 + Cikis + + + + 文件操作 + Dosya Islemleri + + + + + + 警告 + Uyari + + + + 是否确认删除当前文件? + Mevcut Dosyayi Sil? + + + + 是否确认删除所有文件? + Tum Dosyalari Sil? + + + + + + + 提示 + Oneriler + + + + 是否确认从U盘导入所有文件? + Tasinabilir Bellekteki Tum Dosyalari Aktar? + + + + mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/ + + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Tasinabilir bellege Aktarim Basarili? + + + + 是否确认将所有文件导出到U盘? + Tum dosyalari Tasinabilir Bellege aktar? + + + + 成功导出到U盘? + Tasinabilir Bellege Aktarim Basarili? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + Tasinabilir bellek bulunamadi, ya da "doc" formatinda uzanti mevcut degil! + + + + DialogFontSize + + + Dialog + Diyalog + + + + 12点(中/英) + 12 Matris + + + + 16点(中/英) + 16 Matris + + + + 5点(英) + 5 Matris + + + + 7点(英) + 7 Matris + + + + 9点(中/英) + 9点(英) + 9 Matris + + + + 24点(中/英) + 24 Matris + + + + 7点(左横) + 7 Matris(Sol-Yatay) + + + + 7点(右横) + 7 Matris(Sag-Yatay) + + + + 9点(左横) + 9 Matris(Sol-Yatay) + + + + 9点(右横) + 9 Matris(Sag-Yatay) + + + + 7点(孟加拉) + 7 Matris (Banglades) + + + + 32点 + 32 Matris + + + + 7点(rf7) + 7点(数字) + 7 Matris (sayi) + + + + 21点(rf21) + 21 Matris (sayi) + + + + 12点(新罗马) + 7 Matris(Rome) + + + + 123456890ABCDEFGWXYZ + 123456890ABCDEFGWXYZ + + + + - + - + + + + 查字库标识 + Kullanici Adini Kontrol Edin + + + + 选择字体大小 + Font Boyutunu Secin + + + + DialogInputTxt + + + Dialog + Diyalog + + + + DialogInsertVari + + + Dialog + Diyalog + + + + 变量类型 + Degisken Tipi + + + + 日 + Gun + + + + 计数器1 + Sayac 1 + + + + 月 + Ay + + + + 分 + Dakika + + + + 时 + Saat + + + + 年 + Yil + + + + 计数器2 + Sayac 2 + + + + 秒 + Saniye + + + + 周 + Hafta + + + + BarCode128 + BarCode128 + + + + DataMatrix + Veri matrisi + + + + QRCode + QR kod + + + + 随机码1 + RastgeleKod + + + + 有效日期 + Son Kullanim Tarihi + + + + 生产日期 + Mevcut Tarih + + + + Class + Sinif + + + + 计数器3 + sayac 3 + + + + 第XXX天 + Day XXX + + + + 隐藏变量 + + + + + 数字个数 + Dijit Sayisi + + + + 9个 + 9 + + + + 11个 + 11 + + + + 10个 + 10 + + + + 2个 + 2 + + + + 1个 + 1 + + + + 3个 + 3 + + + + 4个 + 4 + + + + 5个 + 5 + + + + 6个 + 6 + + + + 7个 + 7 + + + + 8个 + 8 + + + + 12个 + 12 + + + + 13个 + 13 + + + + 14个 + 14 + + + + 15个 + 15 + + + + 变量插入 + Degisken Girin + + + + DialogLineSpace + + + Dialog + Diyalog + + + + + 0个像素 + 0 piksel + + + + + 1个像素 + 1 piksel + + + + + 2个像素 + 2 piksel + + + + + 3个像素 + 3 piksel + + + + + 4个像素 + 4 piksel + + + + + 5个像素 + 5 piksel + + + + 6个像素 + 6 piksel + + + + 7个像素 + 7 piksel + + + + 行间距: + Satir Boslugu: + + + + 字符间距: + Karakter yuksekligi: + + + + 选择行间距和字符间距 + Yazı ve karakterler arasi boslugu seciniz + + + + DialogPointDistanceAdjust + + + Dialog + Diyalog + + + + 列首: + Ilk Sutun: + + + + 列中: + Orta Sutun: + + + + 列尾: + Son Sutun: + + + + 重置 + Sifirla + + + + 测试 + Test + + + + DialogSaveFile + + + Dialog + Diyalog + + + + 本地文件 + Yerel Dosyalar + + + + U盘文件 + U disk dosyasi + + + + 预览文件内容: + Onizleme: + + + + 上一个 + Onceki + + + + 下一个 + Siradaki + + + + 请输入文件名: + Dosya Adi: + + + + 取消 + Vazgec + + + + + 保存 + Kaydet + + + + 警告 + Uyari + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + Tasinabilir bellek bulunamadi, ya da "doc" formatinda uzanti mevcut degil! + + + + DialogShowCounter + + + Dialog + + + + + 米标显示: + Sayac isareti sunlari gosterir: + + + + 目前循环范围: + Mevcut dongu araligi: + + + + + + 米 + Metre + + + + 剩余米数: + Kalan sayaclar: + + + + 循环次数: + donguler: + + + + 立即重新计米 + Sayaci simdi sifirla + + + + 起始: + Baslama: + + + + 结束: + Bitis: + + + + Dialoginputpasswd + + + Dialog + Diyalog + + + + 修改密码: + sifre dehistirme: + + + + Dialogmodifypasswd + + + Dialog + Diyalog + + + + 修改密码: + sifre dehistirme: + + + + 密码授权 + Sifre girisi + + + + DigitalInput + + + Form + Form + + + + 9 + 9 + + + + 3 + 3 + + + + 8 + 8 + + + + - + - + + + + 退格 + Back + + + + 1 + 1 + + + + 4 + 4 + + + + 0 + 0 + + + + 5 + 5 + + + + 7 + 7 + + + + 2 + 2 + + + + 6 + 6 + + + + 全选 + SelectAll + + + + DlgInputAddr + + + Dialog + Diyalog + + + + 请输入6位机编号(前3位为经销商编号) + Lutfen 6 adet rakam giriniz + + + + PowerOnCnt + PowerOnCnt + + + + PrintDotCnt + PrintDotCnt + + + + PowerMax + PowerMax + + + + PrintMax + PrintMax + + + + 开始时间 + Baslangic Tarihi + + + + 结束时间 + Bitis Tarihi + + + + SuperNodeIP: + SuperNodel IP: + + + + edgeIP: + edgeIP: + + + + + + + + + . + . + + + + 喷码机恢复工作! + Inkjet calismaya devam ediyor! + + + + Mac:%1维护时间剩余 + 维护时间剩余 + Mac:%1Bakim kalan sure + + + + 小时,喷码机将停止工作.请与供应商联系! + saat,yazici calismayi durduracaktir! + + + + Mac:%1维护时间已到,喷码机停止工作!请与供应商联系 + 维护时间已到,喷码机停止工作!请与供应商联系 + Mac:%1Bakim suresi Yazicinin durmasi, yukari! tedarikci temasa gecin + + + + + 当前日期: + Gecerli tarih: + + + + + 正确? + dogru? + + + + DlgMutiLanguage + + + 界面语言设置 + Dil ayarlari + + + + 中文 + Cince + + + + 泰语 + Tayland + + + + 英语 + Ingilizce + + + + 波斯语 + + + + + 土耳其语 + Turk + + + + 越南语 + Vietnamca + + + + 西班牙语 + Ispanyol + + + 汉语(Chinese) + Chinese + + + 英语(English) + English + + + 越南语(Vietnam) + Vietnam + + + 俄罗斯语(Russian) + Russian + + + 日语(Japanese) + Japanese + + + 韩语(Korean) + Korean + + + + (注意: 选择切换显示语言, 重启后才能生效) + Not: Ekran dilini degistirmeyi secin, yeniden baslattiktan sonra etkili olacaktir + + + + DlgMyWarring + + + 警告 + Uyari + + + + 确定 + Onayla + + + + TextLabel + TextLabel + + + + DlgSelectInputLanguage + + + Dialog + Diyalog + + + + 汉语(Chinese) + 汉语 + + + + 英语(English) + English + + + + 越南语(Vietnam) + Türk dili + + + + DlgShowMsg + + + 警告 + Uyari + + + + 确定 + Onayla + + + + DlgVarLength + + + 变长喷印参数 + Degisken genislik parametresi + + + + 头部长度(m) + Baslangic Uzunlugu (m) + + + + 尾部长度(m) + Bitis Uzunlugu (m) + + + + 总长(m) + Toplam uzunluk (mm) + + + + + 调整长度(mm) + Uzunlugu ayarla (mm) + + + + 可变长度允许 + Degisken uzunluk aktif + + + + 确定 + Onayla + + + + FileLogger + + + The directory and all its contents have been removed + + + + + Failed to remove the directory + + + + + FormScenedlg + + + Form + Form + + + + Last + + + + + First + + + + + 重置位置 + + + + + 另存为 + + + + + 保存 + Kaydet + + + + 预览 + + + + + 新增图元 + Yeni Oge + + + + 新建 + + + + + 打开 + Dosya Ac + + + + 删除图元 + Ogeyi Sil + + + + 编辑图元 + Ogeyi +duzenle + + + + 插入图像 + + + + + 场景缩小 + + + + + 场景放大 + + + + + Next-item + + + + + Prev-item + + + + + Test2 + + + + + 插入图片 + + + + + + [ %1行 x %2列 ] + [ %1row x %2row ] + + + + <html><head/><body><p>[<span style="color:red;font-size:12px;"> %1行 </span>x %2列 ]</p></body></html> + + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + 主窗口 + Ana Pencere + + + + + + 信息编辑 + Yazi Duzenle + + + + 图案编辑 + Resim Duzenle + + + + 打印设置 + Baski Ayarlari + + + + 触发设置 + Tetikleme Ayarlari + + + + + 系统设置 + Sistem Ayarlari + + + + + 系统管理 + Sistem Yonetimi + + + + + 其他信息 + Diger ayarlar + + + + + 日志信息 + Kullanici Bilgileri + + + + + 网络管理 + Ag Ayarlari + + + + 电压调整 + Voltaj ayari + + + + Save + + + + + 不连续电压 + sureksiz voltaj + + + + + vol0 + + + + + + vol1 + + + + + + vol2 + + + + + + vol3 + + + + + + vol4 + + + + + + vol5 + + + + + + vol6 + + + + + + vol7 + + + + + + vol8 + + + + + + vol9 + + + + + + vol10 + + + + + + vol11 + + + + + + vol12 + + + + + + vol13 + + + + + + vol14 + + + + + + vol15 + + + + + + vol16 + + + + + + vol17 + + + + + + vol18 + + + + + + vol19 + + + + + + vol20 + + + + + + vol21 + + + + + + vol22 + + + + + + vol23 + + + + + + vol24 + + + + + + vol25 + + + + + + vol26 + + + + + + vol27 + + + + + + vol28 + + + + + + vol29 + + + + + + vol30 + + + + + + vol31 + + + + + + vol32 + + + + + + vol33 + + + + + + vol34 + + + + + + vol35 + + + + + + vol36 + + + + + + vol37 + + + + + + vol38 + + + + + + vol39 + + + + + 连续电压 + surekli voltaj + + + + 满列电压 + Tam sutun voltaji + + + + fvol0 + + + + + fvol1 + + + + + fvol2 + + + + + fvol3 + + + + + fvol4 + + + + + fvol5 + + + + + fvol6 + + + + + fvol7 + + + + + fvol8 + + + + + fvol9 + + + + + fvol10 + + + + + fvol11 + + + + + fvol12 + + + + + fvol13 + + + + + fvol14 + + + + + fvol15 + + + + + fvol16 + + + + + fvol17 + + + + + fvol18 + + + + + fvol19 + + + + + fvol20 + + + + + fvol21 + + + + + fvol22 + + + + + fvol23 + + + + + fvol24 + + + + + fvol25 + + + + + fvol26 + + + + + fvol27 + + + + + fvol28 + + + + + fvol29 + + + + + fvol30 + + + + + fvol31 + + + + + fvol32 + + + + + fvol33 + + + + + fvol34 + + + + + fvol35 + + + + + fvol36 + + + + + fvol37 + + + + + fvol38 + + + + + fvol39 + + + + + 其他调整 + Diger ayarlamalar + + + + 整体缩放(%) : + Toplam yakinlastirma (%): + + + + WriteByte + + + + + ReadByte + + + + + + + Address: + Address: + + + + + Value: + + + + + WriteWord + + + + + ReadWord + + + + + ReadDword + + + + + WriteDword + + + + + ValueH: + + + + + ValueL: + + + + + 定时开机循环完成,准备关机 + Kontrol Tamamlandi, Kapatmaya Hazir + + + + 准备关机 + Kapatmaya Hazir + + + + 与FPGA失去通信!!! + FPGA ile irtibat hatasi! + + + + 与FPGA通信恢复正常 + FPGA ile irtibat kuruldu + + + + 开始自检,请等待60秒............... + POST, 60 sn bekleyiniz... + + + + 开始自检,请等待%1秒............... + POST, %1 sn bekleyiniz... + + + + + 自检完成!!! + Kontrol tamamlandi! + + + + 缺少墨水,喷码机不能正常工作! + + + + 墨水或溶剂空,准备关机 + Murekkep veya solvent bitti, kapanabilir + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + Jet hiz hatasi! Tum icerikler yazdirilamaz! + + + + 喷印速度过快!无法喷印完全!!! + Yazım hızı çok hızlı! Tamamen bastırılamadı!!! + + + + 压力波动超过设定的5个值. + Basinc dalgalanmasi, ayarlanan 5 degeri asiyor. + + + + 停止打印,自动关闭高压. + Yazi durduruluyor ve yuksek voltaj otomatik olarak kapatiliyor. + + + + 压力异常:上次压力值%1,当前压力值%2 + Basinc Hatasi: Son Deger %1, Suan ki deger %2 + + + 高压异常:上次电流值%1,当前电流值%2 + Yuksek Voltaj Hatasi: Son akim degeri %1, Mevcut akim degeri %2 + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Uyarı: Sıcakçı beklenen sıcaklığa uzun süre ulaşamaz, yanlış veya yanlış ayarlama sebebi! + + + 回收泵开1 + Recycling pump on 1 + + + 混合阀打开1: + Kavalı karıştırma 1: + + + + + 警告!!!!!!!!!!!粘度值偏低 + Warning!!!!!!! Düşük viskozitet değeri + + + + 混合阀打开2: + Kavalı karıştırma 2: + + + + + 回收槽到头 + Sona kadar tekrar dönüştürme tank ı + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Yeniden dönüştürme tank ı sıkıldı ya da yeniden dönüştürme tankının açılma ve kapatma zamanı yanlış ayarlandı + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + Yazım hızını çok hızlı yayın ya da aralık çok kısa! Tamamen bastırılamadı, yazdırmayı otomatik olarak durduramadı!!! + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + Yazım hızını çok hızlı yayın ya da aralık çok kısa! Tamamen bastırılamadı!!! + + + + 提示 + ipucu + + + + 是否接收新的信息! + Yeni bilgi almak icin olsun! + + + 请立即检查过滤器是否堵塞或者漏气! + Filtrenin tikali veya sizinti olup olmadigıini hemen kontrol edin! + + + 请清理过滤器或者检查是否泄露! + Lutfen filtreyi temizleyin veya sizinti olup olmadiğini kontrol edin! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Hata!! Ana murekkep pompasi hatasi + + + + + 主墨泵故障!!! + Ana Murekkep Pompasi Hatasi! + + + + 错误!!!!!!!!!!!压缩机故障 + Hata!! Kompresor hatasi + + + + 压缩机故障!!! + Kompresor hatasi! + + + + 错误!粘度计下位灯故障. + Hata! Vizkozite olcum hatasi(ALT). + + + + 错误!粘度计故障:检测不到上位灯. + Hata! Vizkozite olcum hatasi(UST). + + + + 粘度检测异常,粘度值太大!!! + Uygun olmayan vizkozite degeri saptandi, vizkozite cok yuksek!! + + + + + 错误!!!!!!!!!!!粘度偏大故障 + Hata! Vizkozite degeri + + + + 定时开机 + zamanlı başlangıç + + + + 读卡器故障! + + + + + 13.读卡器故障! + + + + + + 压力泄漏或压力传感器故障! + Basınc kacagi veya basınc sensoru arizasi! + + + + 运行中压力泄漏,停齿轮泵! + Calisma sirasinda basinc kacagi, disli pompayi durdurun! + + + + + 测试时间结束,准备关机 + Test süresi bitti, kapanmaya hazır + + + + + + 刷墨水卡成功! + + + + + + + 刷溶剂卡成功! + + + + + + MAC无效卡! + + + + + + 无效卡! + + + + + + 9.墨水空,机器自动关机 + + + + + + 10.溶剂空,机器自动关机 + + + + + + 11.墨水空,机器再次自动关机 + + + + + + 12.溶剂空,机器再次自动关机 + + + + + + 21.没有使用原厂墨水耗材,机器自动关机 + + + + + + 22.没有使用原厂溶剂耗材,机器自动关机 + + + + + + 23.没有使用原厂墨水耗材,机器再次自动关机 + + + + + + 24.没有使用原厂溶剂耗材,机器再次自动关机 + + + + + + 1.请添加墨水,否则机器将在24小时后自动关机! + + + + + + 2.请添加墨水,否则机器将在%1小时后自动关机! + + + + + + 3.请添加墨水,否则机器将在%1分钟后自动关机! + + + + + + 4.请添加墨水,否则机器将在2分钟后自动关机! + + + + + + 5.请添加溶剂,否则机器将在6小时后自动关机! + + + + + + 6.请添加溶剂,否则机器将在%1小时后自动关机! + + + + + + 7.请添加溶剂,否则机器将在%1分钟后自动关机! + + + + + + 8.请添加溶剂,否则机器将在2分钟后自动关机! + + + + + + + 13.请刷墨水卡,请使用原厂墨水耗材,否则机器将在24小时后自动关机! + + + + + + 14.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后自动关机! + + + + + + 15.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1分钟后自动关机! + + + + + + + 16.请刷墨水卡水,请使用原厂墨水耗材,否则机器将在2分钟后自动关机! + + + + + + + 17.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2小时后自动关机! + + + + + + 18.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后自动关机! + + + + + + 19.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1分钟后自动关机! + + + + + + + 20.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2分钟后自动关机! + + + + + + 齿轮泵转速过高,请立即停机并联系供应商! + Hız çok yüksek, lütfen hemen durun ve tedarikçiyle iletişime geçin! + + + + + 齿轮泵转速过高,请清理过滤器或者检查是否泄露! + Yüksek hız, lütfen filtreyi temizleyin veya sızıntı olup olmadığını kontrol edin! + + + + 添加溶剂: + + + + + + + 电机故障 + Motor hatasi + + + + 电机故障!!! + Motor hatasi!! + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + Yukari + + + + 下一页 + Asagi + + + + ` + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 0 + + + + + - + + + + + = + + + + + 退格 + Geri Al + + + + + 英文 + Ingilizce + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + [ + + + + + ] + + + + + \ + + + + + + 大写 + CapsLOCK + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + Shift + + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + , + + + + + . + + + + + / + + + + + 上 + Yukari + + + + 特殊字 + Ozel Char + + + + 隐藏 + Sakla + + + + Ctrl + + + + + 删除 + Sil + + + + 行首 + Ana sayfa + + + + 行尾 + Son + + + + 左 + Sol + + + + 下 + Asagi + + + + 右 + Sag + + + + + 错误 + Hata + + + + hanziDisplayLabels缺少初始化 + + + + + warning + + + + + myInputMethod is null + + + + + + 找不到输入法初始化文件 + Yazimin aktarimi bulunamadi + + + + 小写 + CapsLOCK + + + + Tiếng Việt + + + + + Russian + + + + + Japanese + + + + + 全选 + Hepsini Sec + + + + 复制 + Kopyala + + + + 粘贴 + Yapistir + + + + 剪切 + Kes + + + + 后退 + Geri Al + + + + InsertSpaceNumDialog + + + 插入空格数 + Bosluk Gir + + + + 空格个数: + Sayi: + + + + LogInfo + + + Form + Form + + + + 当前状态 + Mevcut Durum + + + + 清空当前状态 + Durumu temizle + + + + 历史状态 + Tarihsel Durum + + + + 删除历史文件 + Tarihsel Durumu Sil + + + + 打开历史文件 + Dosya acilamiyor + + + + TextLabel + + + + + 导出日志到U盘 + Gunlukleri U diske aktar + + + + 版本信息 + Versiyon Bilgisi + + + + 请先打开历史状态文件! + Oncelikle Ana Dosyayi aciniz! + + + + + + + 警告 + Uyari + + + + + + 无法打开文件 + Dosya acilamiyor + + + + + + + 提示 + ipucu + + + + 是否确认将所有日志文件导出到U盘? + Tum gunluk dosyalarini bir USB bellege aktaracaginizdan emin misiniz? + + + + U盘未插入或无法识别,请重新插拔设备! + + + + + 成功导出到U盘 + + + + 成功导出到U盘? + Tasinabilir Bellege Aktarim Basarili? + + + + 选择历史记录文件 + Kayit Dosyasi Seciniz + + + + 是否确认将历史日志文件全部清除? + Tum gecmis gunluk dosyalarini temizlemek istiyor musunuz? + + + + 是否确认将当前日志全部清除? + Mevcut tum gunlukleri silmek istiyor musunuz? + + + + MainWindow + + + InkJet + InkJet + + + + 编辑 + Duzenle + + + + 打开文件 + Dosya ac + + + + 二维码 + QR kod + + + + 条形码 + Barkod + + + + 缩小 + Uzaklas + + + + 放大 + Yakinlas + + + + 获取数据 + veri almak + + + + 交替打印文件名 + Alternatif baski dosyasi adi + + + + 最大:[40行x 2048列] + azami:[40 Row x 2048 Col] + + + + 同步器速度 + Hiz + + + + 当前时间 + zamani + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt; vertical-align:bottom;"><br /></p></body></html> + + + + + 墨线开关 + Inkjet +salter + + + + 喷头盖开 + Kapak +acik + + + + 墨水缸满 + Inkstand +Dolu + + + + 墨水液位 + InkLevel +Ariza + + + + 溶剂液位 + solvent +seviyesi + + + + 回收故障 + Geri don +sum hatasi + + + + 粘度故障 + viskozite +hatasi + + + + 相位故障 + Faz +hatasi + + + + 高压故障 + HIGHVOLT +Ariza + + + + 故障恢复 + Ariza +Sifirla + + + + 立即重新计米 + Sayaci simdi sifirla + + + + 产品计数 + Urun Sayaci + + + + 产品总计数 + Genel toplam + + + + 关机 + Kapat + + + + 2014-08-23 + + + + + 高压包 + Yuksek voltaj + + + + 粘度 + Vizkozite + + + + 压力 + Basinc + + + + + 隔膜位置 + DiyagramPOS + + + + + + + 开 + Acik + + + + + + + 关 + kapali + + + + + 暂停打印 +停止高压 + Yazdirmayi duraklat +yuksek basinci durdur + + + + 紧急停机 + acil kapatma + + + + 泵启动 + Pompa baslar + + + 启动 + Baslat + + + + 喷嘴逆清洗 + Nozul Ters Temizleme + + + + + 机箱: + case: + + + + + + 正在喷印............... + Yazdiriliyor... + + + + 喷头盖开, 喷印无法正常进行!!! + Yazici kafa kapagi acik iken yazdirilamaz! + + + + + 墨水缸满报警 + Murekkep haznesinde birden fazla hata var + + + + + 墨水液位报警 + Murekkep seviye alarmi + + + + + 溶剂液位报警 + Solvent seviye alarmi + + + + + 高压故障,暂停打印 + Yuksek voltaj hatasi, yazi durduruldu + + + + + 高压故障,暂停打印. + Yuksek voltaj hatasi, yazi durduruldu. + + + + 高压故障,关回收槽 + Yuksek voltaj hatasi, ReclainTank otomatik kapaniyor + + + + 高压故障,关回收槽和墨线 + Yuksek voltaj hatasi, ReclainTank otomatik kapaniyor + + + + + + + + 回收故障,关闭回收槽,关墨线 + Geri donusum hatasi, kolektor ve murekkep hattini kapatin + + + + 回收故障. + Geri donusum hatasi. + + + + 回收异常,墨线可能偏离.(%1) + Geri donusum normal disi, Murekkep hatti etkilenebilir (%1) + + + + 维护时间已到,喷码机停止工作! + Bakim zamani ! Yazici duruyor ! + + + + + 暂停喷印............... + Yazi durduruldu... + + + + 相位故障:飞行时间错误! + Faz hatasi: yanlis ucus zamani! + + + + 相位故障:相位检测错误! + Faz hatasi: Faz algilama hatasi! + + + + + + 相位故障,准备关机 + Faz hatasi, kapaniyor + + + + + + 相位故障,暂停打印 + Faz hatasi, yazi durduruldu + + + + 相位故障,屏蔽DAC输出 + Faz hatasi, DAC aktarimi durduruldu + + + + + 相位故障,屏蔽充电 + Faz hatasi, sarj durduruldu + + + + 齿轮泵转速 + Disli pompa hizi + + + + 交替打印 + AltBaski + + + + 电眼交替 + Alter by electronic Eye + + + + %1.%2[%3.%4]米/分 + %1.%2[%3.%4]metre/dakika + + + + 列延时:%1点 + Sutun boslugu: %1 piksel + + + + + + + + + + + + + + + 警告 + Uyari + + + + 无法打开文件 + Dosya acilamiyor + + + + 打开文件: + Dosya ac: + + + + + + + + 提示 + Oneriler + + + + 文件未保存,是否先保存文件! + Dosya kaydedilmiyor! Lutfen simdi kaydedin! + + + + + + + 变量数大于8个,某些变量将不起作用!!! + Degisken sayisi 8'den buyuk, bazi degiskenler gozukmeyebilir! + + + + + 请减少信息中的变量(或计数器)数量. + Lutfen yazdirilacak dosya icerisindeki degisken(veya sayac) sayisini azaltin. + + + + warning,界面上有变量未显示完全 + Uyari, interface tum degiskenleri gostermeyebilir + + + + + + + [ %1行 x %2列 ] + [ %1row x %2row ] + + + + + + + + 错误 + hatasi + + + + 喷印间隔过短,应高于%1! + Yazdirma araligi cok kisa,%1 den yuksek olmali! + + + + 喷头盖未关,请先关喷头盖! + Lutfen yazici kafa kapagini kapatin! + + + + 墨线未开,请先开墨线开关! + yazici switchini aciniz! + + + + 正在加高压... + Yuksek voltaj ayarlaniyor... + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Mevcut toplam kolon sayisi %1, desteklenen kolon sayisi %2, lutfen karakter boyutlarini azaltiniz + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + Yazi zamani %1 ms, tetikleyici araligi %2ms, tetikleyici araligi yazi zamanindan buyuk olmali, bosluk 3ms den az olmamali + + + 同步目标每列有%1.%2个同步脉冲 + Encoderin Her kolon hedefi %1.%2 encoder pulse + + + + + 开始打印 + Yaziyi baslat + + + + 回收槽未到底!!!!!! + Kolektor sona ulasmadi! + + + + 停止打印 + yaziyi durdur + + + + + 随机码文本将展出到U盘,请插入U盘 + Rastgele kod bellege kaydedilecek, lutfen bir bellek takiniz + + + + 暂停打印 + Yazi durduruldu + + + + 继续打印 + Yaziya devam et + + + + 继续打印 +保持高压 + yazdirmaya devam et +yuksek basinci korumak + + + + 正在排气 ............... + Yorucu ................ + + + + + 停止 + Sayaci + + + + 正在打开回收槽... + kolektor aciliyor... + + + + 停止打开 + Acmayi durdur + + + + + 警告!回收槽开关时间未设置! + Uyari! Kolektor degisim zamani ayarlanmadi! + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Kolektor tikandi ya da geri donusum saati yanlis ayarlandi, anlik durumu etkin kilmak istiyor musunuz? + + + + 正在关闭回收槽... + tank simdi kapatiliyor... + + + + 停止关闭 + Kapatmayi durdur + + + + 准备关机...... + Yazici kapanacak... + + + + 泵停止 + Pompa durdu + + + + 回收槽未关,是否关闭回收槽后关机! + Kolektor geri donmedi, yaziciyi kapatmadan once kolektoru kapatmak ister misiniz! + + + + 是否确认关机? + Yaziciyi kapatmak istiyor musunuz? + + + + + 最多支持的列数目为:%1请减小信息长度. + Maksimum desteklenen sutun sayisi:%1, lutfen bilginin uzunlugunu kisaltiniz. + + + + 开始打印1 + Bastırma 1'ini başlat + + + + + 正在准备关机,请等待%1秒............... + + + + + 是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动! + + + + + 是否启动齿轮泵? + + + + + 保存html文件失败! + + + + + 是否初始化产品计数? + Urun sayacini aktiflestirmek istiyor musunuz? + + + + 是否清除总产品计数? + Genel toplami temizlemek istiyor musunuz? + + + + 是否立即重新计米? + Sayac sifirlamak istiyor musunuz? + + + + 警告:‘-’和空格的宽度不一样 + Uyari : bosluklarin genisligi es degil + + + + 条形码信息编辑 + Barkod Duzenle + + + + + 二维码信息编辑 + QR kod Duzenle + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;"><br /></p></body></html> + + + + + 获取DM码内容为空! + DM kodu al icerigi bos! + + + + + 获取DM码内容: + DM kodu icerigini alin: + + + + + 获取DM码内容跟上次相同 + DM kodu almanin içerigi gecen seferkiyle ayni + + + + 高压故障:两高压偏转板间的电压检测异常 + Yuksek-voltaj hatasi:iki plaka arasinda anormal voltaj algilandi + + + + 1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座; + Yuksek basinc deflektoru ve yuksek basinc kaynagi islak ve kirli, lutfen yuksek basinc plakasini ve yuksek basinc kaynagini temizleyin + + + + 2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间; + Yuksek voltaj salteri veya anakart degisti, lutfen sistem ayarlari > reset yuksek voltaj adimlarini izleyin ve yuksek voltaj degerini 90 ayarlayin, alarmi resetleyin, deger araligi 480 550 arasi olmali + + + + 3.高压线路漏电,请更换高压线路; + yuksek voltaj hattinda kacak var, degistirin + + + + 4.高压底座漏电,请更换高压底座。 + yuksek voltaj kaynaginda kacak var, degistirin. + + + + 墨水过多:墨水溢出 + Murekkep hatasi, fazla akis + + + + 1. 请停止添加墨水; + Murekkep eklemeyi durdurun + + + + 2. 请排出多余墨水。 + Murekkebi bosaltin. + + + + 墨水液位:墨水即将耗尽 + Murekkep seviyesi: tukenmek uzere + + + + 1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。 + murekkep tukendi 3 saat sonra otomatik olarak kapanacak, lutfen zamaninda murekkep ekleyin. + + + + 回收故障:未检测到有墨水回收 + geri donusum hatasi, murekkep algilanmadi + + + + 1. 墨水未射入回收管,请修正墨线方向; + murekkep geri donusum hattine gelmiyor, baglantiyi kontrol edin + + + + 2. 墨水粘度太低,请更换新墨水; + viskozite cok dusuk, yeni murekkep ekleyiniz + + + + 3. 回收管堵塞,请清通或者更换回收管; + geri donusum hatti tikandi, temizleyin ya da degistirin + + + + 4. 回收泵故障,请清洗或者更换回收泵; + geri donusum pompa hatasi, temizleyin ya da degistirin + + + + 5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮. + anormal bir parametre olmadigindan emin iseniz, su adimlari izleyin, baski ayarlari > geri donusum hatasini yoksay, ardindan anasayfaya donun ve hatalari temizle butonuna basiniz. + + + + 溶剂液位:溶剂即将耗尽 + solvent seviyesi:tukenmek uzere + + + + 1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。 + solvent tukendi, 3 saat sonra otomatik olarak kapanacak, lutfen zamaninda solvent ekleyiniz. + + + + + 粘度故障报警 + viskozite alarmi + + + + 粘度故障:墨水粘度无法自动调整 + viskozite hatasi : otomatik olarak ayarlanamadi + + + + 1. 混合阀失灵,请冲洗或者更换混合阀; + karisim valf hatasi : yikayin veya degistirin + + + + 2. 墨水罐内的墨水异常,请更换新墨水; + murekkep haznesindeki murekkep anormal : lutfen degistirin + + + + 粘度计异常: + viskosite olcumu anormal degerde: + + + + 1. 泵前过滤网堵塞,请更换泵前滤网; + filtre pompadan onceki kisimdan tikandi, duzenleyici kismini degistirin + + + + 2. 粘度泵异常,请清洗或更换粘度泵; + viskozite pompasi anormal, temizleyin yada degistirin + + + + 3. 粘度传感器异常,请检查传感器线路或者更换传感器. + viskozite sensoru anormal, kontrol edin veya degistirin. + + + + 相位故障报警 + Faz alarmi + + + + 相位故障:相位信号检测异常 + Faz hatasi, faz saptama bekleniyor + + + + 1. 墨水分裂不正常,请调整墨水分裂; + murekkep damlaciklari anormal, murekkep splitini temizleyin + + + + 2. 充电槽或者相检头脏污,请清洗充电槽和相检头; + sarj unitesi kirlenmis olabilir, kafa temizligi ve uniteyi kontrol edin + + + + 3. 放大板功能性异常,请更换放大板; + magnify kartini degistirin + + + + 4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离; + nozzle kontrolunu saglayin, damlaciklarin mesafesi anormal + + + + 5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰; + topraklama hatasi, topraklama kablosunu kontrol edin + + + + 6. 墨水质量异常,请更换新墨水。 + murekkep degerinde bozulma algilandi, lutfen degistirin. + + + + 回收槽开关检测完成! + Geri donusum tanki anahtari tespiti tamamlandi! + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + Temel adres: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xb200 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + Hafizayi oku + + + + 写空间 + Hafizaya yaz + + + + 进制转换 + Temel donusum + + + + + 编辑 + Uyari + + + + 上一页 + Yukari + + + + 下一页 + Yukari + + + + 完成 + Tamam + + + + ModbusSerial + + 接收到开始打印命令 + Yazdirmayi baslat komutu alindi + + + 接收到暂停打印命令 + Alinan yazdirma komutunu duraklat + + + 接收到停止打印命令 + Yazdirmayi durdur komutu alindi + + + 接收到DM码数据命令 + DM kodu veri komutu alindi + + + + MyFileDialog + + + 确定 + Onayla + + + + NetworkManager + + + Form + + + + + 手动设定 + Manuel + + + + + IP: + + + + + Mask: + + + + + GW: + + + + + 取消 + iptal + + + + 有线LAN + LAN + + + + WiFi: + + + + + SSID: + + + + + Status: + Durum: + + + + Disconnect + baglantiyi kes + + + + auth: + + + + + Encryption: + sifreleme: + + + + Plaintext (open / no authentication) + Duz metin (acik / kimlik dogrulama yok) + + + + 主获取数据按钮 + ana veri al dugmesi + + + 断开 + baglantiyi kes + + + + Static WEP (no authentication) + + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + 设备码: + Cihaz kodu: + + + + 服务IP: + Hizmet IP'si: + + + + None + Hicbiri + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + 8754 + + + + + 服务端口: + Servis portu: + + + + PSK: + + + + 连接 + baglamak + + + + Password: + Parola: + + + 扫描 + tarama + + + 清除 + acik + + + + 获取数据 + veri almak + + + + Network: + Ag: + + + 添加网络 + ag ekle + + + + 测试 + Test + + + + 应用配置 + Uygulama yapilandirmasi + + + + 去掉数字码 + dijital kodu kaldir + + + + 去掉QR码 + QR kodunu kaldir + + + + ScanSSID + + + + + Connect + Baglan + + + + Scan + + + + + 1 + 1 + + + + 47.111.170.144 + + + + + AddNetwork + Ag ekle + + + + Remove + Kaldir + + + + wpa_supplicant service is not running. +Do you want to start it? + + + + + Disconnected + ayirin + + + + Inactive + + + + + Scanning + + + + + Authenticating + + + + + Associating + + + + + Associated + + + + + 4-Way Handshake + + + + + Group Handshake + + + + + Completed + + + + + Unknown + + + + + Could not get status from wpa_supplicant + Wpa_supplicant'tan durum alinamadi + + + + Select any network + + + + + WPS AP in active PBC mode found + + + + + Press the PBC button on the screen to start registration + Kaydi baslatmak icin ekrandaki PBC dugmesine basin + + + + WPS AP with recently selected registrar + + + + + WPS AP detected + + + + + PBC mode overlap detected + PBC modu cakismasi algilandi + + + + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + Su anda etkin WPS PBC modunda birden fazla AP var. Birkac dakika bekleyin ve tekrar deneyin + + + + Network configuration received + Ag yapilandirmasi alma + + + + Registration started + + + + + Registrar does not yet know PIN + Kayit sirketi henuz PIN bilmiyor + + + + Registration failed + Kayit basarisiz + + + + Registration succeeded + + + + + WPA Pre-Shared Key Error + + + + + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + + + + + Network ID Error + Ag Kimligi Hatasi + + + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + Ag Kimligi Dizesi, sozcuk olmayan karakterler icerir. Bosluk icermeyen, yalnizca bu araliktaki karakterleri iceren basit bir dize olmalidir: [A-Za-z0-9_-] + + + + Failed to add network to wpa_supplicant +configuration. + Wpa_supplicant yapilandirmasina ag eklenemedi. + + + + Failed to enable network in wpa_supplicant +configuration. + Wpa_supplicant yapilandirmasinda ag etkinlestirilemedi. + + + + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + Bu kalici olarak yapilandirmadan agi kaldiracaktir. Bu agi gerçekten kaldirmak istiyor musunuz? + + + + Yes + Evet + + + + No + HAYIR + + + + Failed to remove network from wpa_supplicant +configuration. + Wpa_supplicant yapilandirmasından ag kaldirilamadi. + + + + 是否去获取数据! + Verileri almak icin olsun! + + + + 获取数据中... + Veri aliniyor... + + + + + 上报数据中... + Raporlama verileri... + + + + + + + 提示 + ipucu + + + + + IP设置错误! + IP ayar hatasi! + + + + 应用成功 + uygulama basarisi + + + + OtherInfo + + + Form + + + + + 相位位置: + Faz pozisyonu: + + + 相位偏移: + Faz offseti: + + + + 飞行时间: + Bosluk zamani: + + + + DetectDelay + + + + 相检: + faz: + + + + FullTimeEn + + + + + DetectVol + + + + + HighLowRatio + + + + + 充电占空比100% + Sarj gorevi (100%) + + + + detect_num + + + + + + 锁定相位 + Tikanmis Faz + + + + 相位检测电压: + 相位检测电压 + Faz algilama voltaji: + + + 检测点数量: + 检测点数量 + Algilama noktasi sayisi: + + + + 检测墨点数量: + 检测延迟 : + Algilama gecikmesi: + + + + 频闪灯周期: + ParlamaPeriyodu: + + + + 相位偏移: + Faz ofseti: + + + + 相检: + Faz denetimi: + + + + 检测延时: + Faz gecikmesi: + + + + 应用当前配置 + Uygula + + + + 提示 + Oneriler + + + + 应用成功 + Basarili bir sekilde uygula + + + + 点 + Piksel + + + + 解锁相位 + Faz kilidini ac + + + + PicEdit + + + Form + + + + + 开启软键盘 + klavye + + + + 插入变量 + Degisken + + + + + 保存/打印 + Kaydet/yazdir + + + + 缩小 + Uzaklas + + + + 放大 + Yakinlas + + + + 5点阵 + 5 Matrix + + + + 7点阵 + 7 Matrix + + + + 9点阵 + 9 Matrix + + + + 12点阵宋体 + 12 Matrix + + + + 16点阵宋体 + 16 Matrix + + + + 16点阵黑体 + 16 Matrix(BOLD) + + + + 24点阵宋体 + 24 Matrix + + + + 24点阵黑体 + 24 Matrix(BOLD) + + + + 列高 + Satir Yuksekligi + + + + 无加粗 + Normal + + + + 加粗1倍 + kalin1 + + + + 加粗2倍 + kalin2 + + + + 光栅[X:Y] + Grating [X,Y] + + + + 放大比例 + Duzenleme + + + + 插入模式 + Aktar modu + + + + 文件名 + Dosya Adi + + + + CURR[X,Y] + + + + + 新建信息 + Yeni yazi + + + + 打开文件 + Dosya Ac + + + + 字符间距 + Karakter araligi + + + + 插入/修改 + Aktar/duzenle + + + + 删除字符 + sil + + + + 插入图片 + Resim + + + + 保存为 + Farkli Kaydet + + + + + + 字库编辑 + Font duzenle + + + + 网格 + Lattice + + + + 粗体 + Kalin + + + + 显示控制符 + karakter kontrolunu goster + + + + 行首 + Ana sayfa + + + + 行尾 + Son + + + + 字符光标 + Karakter lmleci + + + + 像素光标 + Piksel lmlec + + + + 编辑现有的多字体 + Cok fontlu dosyayi duzenle + + + + 点击光栅可打开键盘,点击空白处关闭 + klavyeye donmek icin tiklayiniz + + + + + + + + + + + 放大倍数:%1 + Buyutme: %1 + + + + + 插入模式 + Aktar modu + + + + + 修改模式 + Duzenle modu + + + + 编辑现有的多字体文件 +请使用修改模式!!! + 编辑现有的多字体文件 +请使用修改模式!!! + cok fontlu dosyayi duzenlerken duzenle modu kullaniniz! + + + + + + 保存 + Kaydet + + + + 点击光栅可打开键盘,点击空白处关闭 + klavyeyi acmak icin simgeye, kapatmak icin bosluga dokunun + + + + 信息编辑 + Yazi Duzenle + + + + 字库保存 + font kutuphanesine kaydet + + + + + 返回信息编辑 + Bilgi Duzenlemeye Geri Don + + + + 请选择字体,打开键盘并输入要编辑的字符 + Font secin(klavyeyi acip yazi giriniz) + + + + + + 提示 + Oneri + + + + 图片已经改变,是否保存? + Resim degisti, kaydetmek istiyor musunuz? + + + + 放弃保存 + Kaydetmeden Cik + + + + 文件另存为... + Kaydet… + + + + 另存为 + Farkli kaydet + + + + + + + + + 文件名: + Dosya Adi: + + + + 文件名:) + Dosya Adi:) + + + + 文件保存为... + Kaydet… + + + + 本条信息的变量超过规定数量! + Bu Mesajin degisken sayisi limit degerini asti! + + + + 是否立即喷印当前的文件? + Mevcut dosyayi yazdirmak istiyor musunuz? + + + + 是 + EVET + + + + 否 + HAYIR + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Yeni bir satir eklemek icin 'Enter'i tiklayin. imlec yazi gore otomatik olarak ayarlanir + + + + 选择[字体]可改变光标大小. + degisiklik imlec boyutu yazi tipini secin. + + + + 选择[绘图]方式,可以绘制任意图形 + Seciniz Drawing,Patern cizmek icin + + + + 光标不匹配时,不能输入或删除. + Imlec yakalamadan giris veya silme islemi yapilamaz. + + + + 点击空白处可关闭键盘. + Klavyeyi kapatmak icin bosluga tiklayiniz. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + Kullanici 'FontLab Edit' ile yeni karakter tanimlayabilir + + + + 选择[文本模式]可切换到主界面编辑方式. + Seciniz: Yazi Modu; ana duzenleme arayuzunu degistirmek icin. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + klavyeyi acmak icin simgeye, kapatmak icin bosluga dokunun + + + + 使用[字库编辑]功能,用户可自己修改字形 + Kullanici 'Fontlab Edit' islevini secerek yazi tipini revize edebilir + + + + PicWidget + + + Please input a char. + Lutfen bir karakter girin. + + + + 请输入要编辑的字符 + Girilen karakter duzenlenmeli + + + + 编辑字符:%1 + Karakteri duzenle: %1 + + + + [%1行,%2列] + [%1row,%2col] + + + + 光标[%1,%2] + Imlec [%1,%2] + + + + + + + + + + + + + 警告 + Uyari + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maksimum boyut genisligi %1 x Yuksekligi %2, mevcut talep %3 x %4 + + + + + + 请新创建建图片 + Lutfen yeni bir temel dosya seciniz + + + + + + 文件:%1 无法打开 + Dosya %1 acilamiyor + + + + 信息中的变量数超过了最大值(8)!请减小变量数. + bilgideki degisken sayisi maksimum degeri asiyor (8). + + + + + 两个变量之间至少要空出一个墨点! + Iki degisken arasinda bir nokta! + + + + PrintSetting + + + Form + + + + + 计数器1设置 + Sayac 1 Ayarlari + + + + + + + 起始值: + Baslangic Degeri: + + + + + + + 结束值: + Bitis Degeri: + + + + + + 重设值 + Mevcut sayaci +sifirla + + + + + + 重复数: + Tekrarlama +zamani: + + + + + + 清零 + Sayac Sifirla + + + + + + + 增量值: + Artirim: + + + + + + 当前值: + Mevcut: + + + + 可变长度 + Degisken Uzunlugu + + + + 计数器2设置 + Sayac 2 Ayarlari + + + + + 计数器3设置 + Sayac 3 Ayarlari + + + + + + + 跳米设置 + Sayac ayarlarini gec + + + + 跳米数: + Araligi gec: + + + + 跳米打印 + Atla Sayma etkinlestirme + + + + + + 输入密码 + 提升权限 + Daha Fazla Yetki + + + + 墨线时间 + Murekkep Hatti zamani + + + + 墨线时间: + Murekkep Hatti zamani: + + + + + + + 0 + + + + + 开机次数: + Baslatma zamani: + + + + 维护时间: + Tezleme zamanı: + + + + 应用当前配置 + Uygula + + + + 常用设置 + Genel Ayarlar + + + + TextLabel + + + + + 打印模式: + Baski Modu: + + + + 字体宽度: + FontGenisligi: + + + + 首行电压(%): + NADIR Voltaji(%): + + + + 字体加粗: + FontKalinligi: + + + + + + + + 快速 + Hizli + + + + + + + + + 标准 + Standart + + + + + + + 慢速 + + + + + + 慢速1 + Yavasca1 + + + + + 慢速2 + Yavasca2 + + + + 慢速3 + Yavasca3 + + + + 慢速4 + Yavasca4 + + + + 慢速5 + Yavasca5 + + + + 慢速6 + Yavasca6 + + + + 慢速7 + Yavasca7 + + + + 慢速8 + Yavasca8 + + + + 慢速9 + Yavasca9 + + + + 检测回收槽 + Alim deposunu kontrol edin + + + + 每条信息只打印一次 + Her mesaj yalnizca bir kez yazdirilir + + + + 新放大板 + + + + + 高速模式 + + + + + 打印时绿灯常亮 + Yazdirirken surekli yesil isik + + + + 复位发送打印数据 + Yazım verisini geri gönderin + + + + 小数点位数 + + + + + 注意:“其它设置”页下的"分段计米“勾选时,计数器1不可用。 + Not: Sayac 1, "Diger Ayarlar" sayfasinda "Segment Metre" isaretlendiginde kullanilamaz. + + + + ddhhmm + + + + + 生产日期: + Uretim tarihi: + + + + dd/MM/yy + + + + + dd/MM/yyyy + + + + + dd-MM-yy + + + + + dd-MM-yyyy + + + + + 计数器保存关机值 + Sayac, kapatma degerini kaydeder + + + + 距离尾部(mm): + Kuyruktan uzaklik (mm): + + + 当计数达到 : + Sayi ulastiginda: + + + 特殊条件计数 + ozel durum sayisi + + + + 首尾交替 + Alternatif uctan uca + + + 显示 + gostermek + + + + + + + 打印电压缩放 + Baski Gerilimi Olcekleme + + + + 整体缩放(%) : + Toplam yakinlastirma (%): + + + + 字高设置(%): + Font +Yuksekligi(%): + + + + 行末电压(%): + ZENITH Voltaji(%): + + + + 修改授权 + hibe degistirin + + + + 回收故障处理 + Hata lsleme + + + + 超速暂停打印 + asiri hiz nedeniyle baski Pause + + + + 隐藏值米标: + + + + + 隐藏打印值 + + + + + 打印条件倍数值: + + + + + 使用隐藏功能时必须使用计数器1 + + + + + 米标显示 + Sayac isareti ekrani + + + + 上移 + yukari tasi + + + + 下移 + asagi inmek + + + + 自然数计米 + Dogal +sayac + + + + 信息上下颠倒 + Ayna +Dikey + + + + 相位故障关机 + ShutdownWhile +PhaseFault + + + + 相位故障不打印 + StopWhile + Faz Hatasi + + + + 故障停止走米 + Dur Sayac iken Ariza + + + + 信息左右颠倒 + Ayna +Yatay + + + + 不打印走米 + Yazdirmiyor sayac devam + + + + 电眼误触禁止 + Yasak electriceye yeniden tetik + + + + 高压故障关回收槽 + ReclainTankColse WhenHighVoltFault + + + + 省点 + noktayi kayde + + + 空列打印 + Bos sutun baski + + + + 字形优化 + karakter +optimizasyon + + + date time + tarih saat + + + + yyyy-MM-dd + + + + + yyyy/MM/dd + + + + + yyyyMMdd + + + + + yyyy年MM月dd日 + yyyy年MM月dd日 + + + + yyyy-MM-dd hh:mm + + + + + yyyy/MM/dd hh:mm + + + + + yyyyMMddhhmm + + + + + yyyy年MM月dd日hh:mm + + + + + hh:mm + + + + + dd MM yy + + + + + 有效期(天): + Son Kullanim +Tarihi: + + + + + 高级设置 + Gelismis Ayarlar + + + + + 交替扫描隔点(默认为1): + Ic Ice aktarma(dot): + + + + 行末调整点模式: + Ayarlanmis baski modu: + + + + 点距调整值(默认为0): + Dot boslugunu ayarla (def 0): + + + + + 扫描颠倒 + Tersten tarama + + + + 行末点微调(‰): + DogruAyarlamaOrani (‰): + + + + 点距调整电压位置: + DotboslukVoltpozisyonu: + + + + 行末调整点数(默认为0): + dot sayilarini ayarla(def 0): + + + + 去除冗点模式(默认懒惰): + MurekkepDamlaAyarlama (def Normal): + + + + 懒惰模式 + Normal + + + + 贪婪模式 + Daha Az + + + + 均衡模式 + Dengele + + + + + 冗点比例(默认为0%): + SarjOlmamisDamlaOrani (Def 0%): + + + + + 调整电压 + Gerilimi ayarlayin + + + 推荐设置 + OnerilenAyarlar + + + + 使用推荐设置 + Onerilen Ayaro Kullan + + + 行业: + EndustriyelMod: + + + + 快 + Hizli + + + + 电线电缆 + Kablo & Tel + + + + 制药/食品/电子 + Ilac/Gida/Elektronik + + + + 建筑管材 + Boru ve Tup + + + + 其他 + Digerleri + + + 速度: + Hiz: + + + + + 锁定脉冲计数 + Darbe sayisini kilitle + + + + 非字宽 + kelime disi genislik + + + + 使用齿轮泵 + Disli pompa kullani + + + + 高压阈值: + Yuksek voltaj esigi: + + + + 不检测喷头盖 + Baski kafasi kapaği algilanmadi + + + + 计数器设置 + Sayac ayarlari + + + + 计数器3 + CNT3 + + + + 交替打印设置 + Alternatif baski + + + + 起始位置: + Baslangic Poz: + + + 特殊变量结束值: + Özel değişken bitiş değeri: + + + + 交替间隔: + Alt. Aralik: + + + + 重复次数: + Tekrarlama adedi: + + + 显示小数 + On sayıları göster + + + + 循环产品计数 + Dört ürün sayısı + + + + 无交替 + Hicbiri + + + + 普通交替 + Genel Duzenleme + + + + 电眼触发交替 + Elektronik Tetikleme + + + 特殊变量起始值: + Özel değişken başlangıç ​​değeri: + + + 打印 + Yazdır + + + + 其它设置 + Diger ayarlar + + + + 更换信息文件时执行的动作: + Dosya degistiginde disari aktar: + + + + 产品计数器自动清0 + Urun Oto-Reset + + + + 总产品计数器自动清0 + Toplam Urun Oto-Reset + + + + 外接显示屏: + Ekstra Ekran: + + + + 无 + Hicbiri + + + + 小屏 + Kucuk + + + + 大屏 + Buyuk + + + + 总产品计数值 + Urun Sayaci + + + + + 计数器1 + CNT1 + + + + + 计数器2 + CNT2 + + + + 显示屏显示: + Ekranda Goster: + + + + 导出随机码文本 + Rastgele bir kod dosyasini disari aktar + + + + 复位到起始值 + baslangic ​​degerine sifirla + + + + 分段计米 + CNT1 Grubundan + + + + 插 入 + Aktar + + + + 添 加 + Ekle + + + + 全部删除 + Del All + + + + 删 除 + Del + + + + 提示:可变长度参数不正确 + Ipucu: Yanlis degisken uzunluk parametresi + + + + 要求:调整长度小于喷印间隔 + Gereksinim: Uzunlugu yazdirma araligindan daha kisa ayarlayin + + + + + 超高速 + + + + + + 高速 + + + + + + 提示:交替参数不正确 + Pneri: alternatif parametresi yanlis + + + + 要求:起始位置<交替间隔 + Formul: Baslangic pozisyonu <Alternatif aralik + + + + 要求:(重复次数+起始位置)<交替间隔 + Formul: (Tekrarlama Sureleri + Baslangic konumu) <Alternatif aralik + + + + + + + + + + + + 提示 + Oneriler + + + + 应用成功 + Basarili uygula + + + + 小时 + saat + + + + + + 错误 + Hata + + + + 授权码: + Yetki Kodu: + + + + 错误 + Hata + + + + 喷码机维护设置成功! + Makine bakim ayarlari basarili! + + + + 系统维护设置成功! + Sis. Bakim Ayarlari basarili! + + + + 不存在 + Mevcut degil + + + + 密码: + Parola: + + + + 取消授权 + Yetkilendirme ayarlarindan cik + + + + + + 其他设置 + + + + + 软件初始化完成. + + + + + RFID卡清零! + + + + + + + + + + + 警告 + Uyari + + + + 是否确认使用推荐设置? + Onerilen ayarlari kullanmaktan emin misiniz? + + + + 随机码文件为空,不需要导出 + Disa aktarilacak rastgele kod bulunamadi + + + + 随机码文本将展出到U盘,请插入U盘 + Rastgele kod bellege kaydedilecek, lutfen bir bellek takiniz + + + + 计数器1(结束值-开始值)不能被增量整除,结束值将被设为%1 + CNT1 mesafesi belirtilen degere ayrilamaz. Bitis degeri %1 ayarlanacak + + + + 计数器1(结束-开始)不能被增量整除,结束值将被设为%1 + CNT1 mesafesi belirtilen degere ayrilamaz. Bitis degeri %1 ayarlanacak + + + + 1 + + + + + 正在打印第%1组设置,不可删除 + %1 is yazdiriliyor, silinemez + + + + 是否确认删除第%1组设置? + sil %1? + + + + 是否确认删除全部设置? + hepsini sil? + + + + 字体宽度不能为0 + Yazi genisligi 0 olamaz + + + + 是否立即重新计米? + Sayac sifirlamak istiyor musunuz? + + + + 解锁脉冲计数 + Nabiz sayisinin kilidini ac + + + + builTime:%1 + + + + + fpgaVersionNum: %1 + + + + + Type: %1 + + + + + FPGAVersion: %1 + + + + + FPGAType: %1 + + + + + 喷印间隔太小,无法正常打印!!! + + + + + 原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)! + + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + Her hiza gore + + + + 根据喷印 + Her baskiya gore + + + + 根据脉冲数 + Her bir akim +sayaca gore + + + + 根据同步器参数 + Her bir enkoder +verisine gore + + + + 实际皮带速度(毫米/秒): + Konveyor hızı (mm/s): + + + + 实际喷印间隔长度(毫米): + Aralik baskisi (mm): + + + + 长度(毫米): + Uzunluk (mm): + + + + 同步脉冲数 + Senkronizer +Akimi + + + + 同步器直径(毫米): + Senkronizer +Capi (mm): + + + + 脉冲数/转: + Akım Sayisi +(donus) : + + + + 脉冲数修正 + Duzeltme bakliyat + + + + + + + 错误 + Hata + + + + 速度不应该为0 + Hiz sifir olmamali + + + + 实际同步长度不应该为0 + Mevcut senkronizer uzunlugu sifir olmamali + + + + 长度不应该为0 + Uzunluk sifir olmamali + + + + 直径不应该为0 + Cap sifir olmamali + + + + QBarCode + + + Dialog + + + + + 条形码类型 + Bar Tipi + + + + 条形码高度 + Bar +Yuksekligi + + + + 条码宽度 + Bar genisligi + + + + 1点 + 1Dot + + + + 2点 + 2Dot + + + + 3点 + 3Dot + + + + 4点 + 4Dot + + + + + 5点 + 5Dot + + + + 6点 + 6Dot + + + + 文本1 + TEXT1 + + + + 显示缩放 + Skala + + + + 墨水类型 + Murekkep +Tipi + + + + 黑墨 + Siyah Murekkep + + + + 白墨 + Beyaz Murekkep + + + + 文本3 + TEXT3 + + + + 计数器2 + CNT2 + + + + 文本2 + TEXT2 + + + + 计数器1 + CNT1 + + + + 插入文档 + Dokuman icine +aktar + + + + 预览 + Onceki + + + + 返回 + Donus + + + + 条码保存 + Kaydet + + + + FileName + + + + + 增加数字行 + sayı satırı ekle + + + + 日期 + tarih + + + + 时间 + Zaman + + + 增加数字行 + sayi satiri ekle + + + + 文件未保存 + Dosya kaydedilmedi + + + + BARCODE_128 + CODE_128 + + + + + BARCODE_93 + + + + 自适应编码 + OTO + + + + 7点 + 7Dot + + + + 9点 + 9Dot + + + + 12点 + 12Dot + + + + 16点 + 16Dot + + + + 24点 + 24Dot + + + + + 标签宽度:%1,标签高度:%2,文本宽度:%3 + TabGenislik: %1, Yukseklik: %2, Yazi Genisligi : %3 + + + + QObject + + + + 手动设定 + Manuel Mod + + + + 应用 + Uygula + + + + 起始值 + Baslangic degeri + + + + 结束值 + Bitis Degeri + + + + 循环值 + Tekrar degeri + + + + SceneEditOption + + + Form + + + + + 预览 + Onceki + + + + 新建 + Yeni + + + + 打开 + Dosya Ac + + + + + 保存 + Kaydet + + + + 另存为 + Farkli Kaydet + + + + 新增图元 + Yeni Oge + + + + 编辑图元 + Ogeyi +duzenle + + + + 删除图元 + Ogeyi Sil + + + + 放大 + Yakinlas + + + + 缩小 + Uzaklas + + + + 提示 + Oneriler + + + + 文档已经改变,是否保存? + Dosya degisti, kaydetmek istiyor musunuz? + + + + 放弃保存 + Kaydetmeden devam et + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Manuel kontrol + + + 喷嘴逆清洗 + Dokunmatik ekran +ayarlama + + + + 齿轮泵开 + disli pompa acik + + + + 齿轮泵关 + disli pompa kapali + + + + 回收槽开 + Kolektor +Acik + + + + + + + + + + + + + 停止 + Dur + + + + 回收槽关 + Kolektor devre +disi + + + + 回收泵 + Geri donusum +pompasi + + + + + 压缩机 + Kompresor + + + + 主墨泵 + Ana Murekkep +pompasi + + + + 泄压阀 + Baskiyi azaltma +Kapak + + + + 循环阀 + Geri donusum +valfi + + + + 墨水阀 + Murekkep Valfi + + + + 粘度泵 + Vizkozite pompasi + + + + 混合阀 + Karisim +valfi + + + + 时间设置 + Zaman +ayarlama + + + + 从U盘导入配置 + Parametreyi Flash +Diskten lçe Aktar + + + + 更新软件 + Yazici yazilimini guncelle + + + + 屏幕校正 + Dokunmatik ekran +ayarlama + + + + 更新字库 + Font kutuphanesini +guncelle + + + + 导出字库 + Karakter kutuphan- +esinden disa aktar + + + + 系统升级 + Sistem +yukseltme + + + + 出厂设置 + Fabrika ayarlarina + geri don + + + + 自动清洗 + Oto temizlik + + + + 电机测试 + Motor test + + + + 排气 + egzoz + + + + 导出配置到U盘 + Parametreyi Flash Diske Aktar + + + + + + Cancel + lptal + + + + (1/2) Cleaning, please wait... + (1/2) Temizlik, lutfen bekleyin... + + + + + + + + + + + + + + + + + + + + 开 + ile + + + + + + + + + + + + + + + + + + + + + 关 + kapali + + + + + + + + + + + + + + + + + + 警告 + Uyari + + + + + + + 请先移开喷头盖! + Lutfen yazici kafa kapagini acin! + + + + 是否确认进入手动模式? + Manuel Moda gecmek istediginizden emin misiniz? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Kolektorun kapandigini onaylayiniz. Otomatik moda gecmek istediginizden emin misiniz? + + + + + 手动 + Manuel + + + + + + 自动 + Auto + + + + + + + + + + + 启动 + Baslat + + + + + + + + + + + + + + + + + 提示 + Oneriler + + + + + + + 密码不正确! + Yanlis sifre! + + + + Application + Uygulama + + + + 是否确认更新字库? + Font kutuphanesini guncellemek istediginizden emin misiniz? + + + + 没找到对应字库,更新失败! + İlgili yazi tipi kitapligi bulunamadi ve guncelleme basarisiz oldu! + + + + 更新字库成功,重启后生效! + Font kutuphane guncellemesi basarili, uygulamak icin reboot ediniz! + + + 是否恢复出厂设置? + Fabrika ayarlarina geri donmek istediginizden emin misiniz? + + + + 恢复出厂设置成功,请重新关机上电 + Fabrika ayarlarina donuldu, lutfen yeniden baslatiniz + + + + 校准触摸屏 + Ekran kalibrasyonu + + + + 是否确认开始校准程序?请小心进行校准! + Ekran kalibrasyonuna baslamak istediginize emin misiniz? Dikkatli olunuz! + + + + 无法生成脚本 + lslem dokumu hazirlamada hata + + + + 是否确认更新软件? + Yazilimi guncellemek istediginize emin misiniz? + + + + + + + + 错误 + Hata + + + + 更新失败! + Guncelleme basarisiz! + + + + 软件更新成功,重启后生效! + Yazilim guncelleme basarili, lutfen yeniden baslatiniz! + + + + 找不到更新软件! + Guncellenen yazilimi bulamiyor! + + + + 是否确认更新系统? + Sistemi guncellediginizden emin misiniz? + + + + 系统更新成功,重启后生效! + Sistem guncellemesi yeniden baslatildiktan sonra almak etkisine, basarili! + + + + 文件不存在! + Dosya mevcut degil! + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + Eger temizligi baslatirsaniz, geri donusum tanki 10mm'den fazla acilacaktir, 1 dk sonra duracaktir + + + + 开始清洗 + Temizligi baslat + + + + 停止清洗 + Temizligi durdur + + + + 压力 + Basinc + + + + autoclean cancel or status: + autoclean iptal veya durum: + + + + (2/3) Cleaning + (2/3)Temizlik + + + + (3/3) Cleaning + (3/3)Temizlik + + + 混合阀打开3: + 混合阀打开3. + Kavalı karıştırma 3: + + + + 是否确认导出配置到U盘? + Konfigurasyonu flash bellege aktarmak istiyor musunuz? + + + + 检测不到U盘 + Flashdisk algilanamadi + + + + 成功导出配置到U盘 + Konfigurasyon flash bellege basarili bir sekilde aktarildi + + + + 是否确认从U盘导入配置? + Konfigurasyonu flash bellekten aktarmak istiyor musunuz? + + + + 配置文件/udisk/sysPara.bin不存在! + Yapilandirma dosyasi /udisk/sysPara.bin mevcut degil! + + + + 从U盘成功导入配置,重启后生效! + Konfigurasyon ice aktarimi basarili, lutfen yeniden baslatiniz! + + + + autoclean start + otomatik temizleme + + + + 是否确认启动自动清洗? + Oto temizligi baslat? + + + + 是否确认墨水排除,加入清洗剂? + Murekkep bos ve temizlik sivisi eklendi mi? + + + + (1/3) Cleaning + (1/3)Temizlik + + + + 是否确认导出字库到U盘? + Karakter kutuphanesini USB diske aktar? + + + + U盘不可识别! + USB disk algilanamadi! + + + + 字库导出完成! + Karakter kutuphanesi aktarimi tamamlandi! + + + + 是否开始电机测试? + Motor test baslat? + + + + 正在排气,是否停止? + Yorucu, dur mu? + + + + SystemSetting + + + Form + + + + + 晶振电压(%): + KristalVoltaji(%): + + + + 压力: + Basinc: + + + + 高压包容差: + YuksekVoltajToleransi: + + + + 粘度: + Vizkozite: + + + + 回收泵力度(%): + Geri donusum +pompa potansiyeli (%): + + + + 喷头温度: + YaziciKafaSicakligi: + + + + 粘度校正(%): + VizkoAyari(%): + + + + 晶振频率: + KristalFrekansi: + + + + 64K + + + + + 76K + + + + 83K + 24Dot {83K?} + + + + 96K + + + + + 128K + + + + + 新晶振 + YeniKristal + + + + 频率修正: + Frekans Ayarlamasi: + + + + Hz + + + + + 回收槽开关时间: + KolektorDegisimZamani: + + + + 电机电流: + MotorElektrikAkimi: + + + + 信息编辑模式: + Yazi duzenleme modu: + + + + 文本模式 + Matris modu + + + + 点阵模式 + Matris modu + + + + 场景模式 + EkranModu + + + + 粘度泵动作间隔(秒): + VizkoPompasiHareketAraligi(s): + + + + 墨水温度: + MurekkepSicakligi: + + + + + °C + + + + + 0 + + + + + 0.6 + + + + + 1.0 + + + + + 1.6 + + + + + 2.0 + + + + 脉冲计数器: + Nabiz Sayaci: + + + + 脉冲计数器: + Nabiz Sayaci: + + + + 隔膜位置偏移: + Diyagram +Otelemesi: + + + + 隔膜位置: + Diyagram +pozisyonu: + + + + 5 + + + + + 10 + + + + + 15 + + + + + 20 + + + + + 25 + + + + + 30 + + + + + 40 + + + + + 45 + + + + + 50 + + + + + 55 + + + + + 60 + + + + + 喷嘴直径: + Boz diametri: + + + + 50 (UM) + + + + + 60 (UM) + + + + + 70 (UM) + + + + + 风扇开启温度: + Sıcaklıkta hayranı: + + + + 重置高压 + Yuksek Voltaj Resetle + + + + 界面语言设置 + Dil ayarlari + + + + 喷嘴逆清洗 + Agizlik Ters +Temizlik + + + + 搜索最佳晶振频率 + Uygun frekans ara + + + + 搜索最佳晶振电压 + Uygun voltaj ara + + + + 应用当前配置 + Uygula + + + + + + + + + + + + 错误 + Hata + + + + 实际频率不能为%1 + Mevcut frekans %1 olamaz + + + + + 提示 + Oneriler + + + + 应用成功 + Basarili uygula + + + + 自动清洗时间约为一分钟,然后自动停止 + Oto temizleme, 1 dk bekleyiniz + + + + 开始清洗 + Temizligi baslat + + + + 停止清洗 + Temizligi durdur + + + + 正在喷嘴逆清洗...... + Nozzlelar temizleniyor… + + + + 清洗完成 + Temizlik tamamlandi + + + 密码不正确! + Yanlis sifre! + + + + + + Application + + + + + 是否更新高压包电流数据? + Donusturucu cikti hattinin elektrik akim verisini guncellemek istiyor musunuz? + + + + + + 喷头盖未关,请先关喷头盖! + Lutfen yazici kafa kapagini kapatin! + + + + + 墨线开关未开,请先打开墨线开关! + Inkjet anahtarini aciniz! + + + + + 回收槽未全部打开! + Kolektor tamamaen acik degil! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + Otomatik aramayi baslatmak istiyor musunuz? Otomatik olarak yapilmasi vakit alabilir, arama sirasinda baska bir islem yapmayiniz? + + + + 自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率? + Otomatik arama uzun zaman alır. Ağımdaki 2 K frekans menzilindeki en iyi kristal oscillatör frekansiyonunu otomatik olarak aramak için emin misiniz? + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + Limit deger 1K Hz icinde kalacak sekilde otomatik aramayi baslatmak istiyor musunuz? Otomatik olarak yapilmasi vakit alabilir? + + + + 搜索的起始频率%1 HZ超出范围? + Arama baslamak icin frekans degeri %1 limit disidir? + + + + 高压设置完成 + Yuksek voltaj ayarlamasi tamamlandi + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Kristal frekansi %1 -- En uzun yuksek level zamanlamasi %2 + + + + 最佳晶振频率完成 + Uygun frekans aramasi tamamlandi + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Kristal voltaj %1 -- En uzun yuksek level zamanlamasi %2 + + + + + 最佳晶振电压完成 + Uygun voltaj aramasi tamamlandi + + + + Tiếng Việt(Vietnamese interface) + + + + + Chinese interface(中文界面) + + + + + English interface(英文界面) + + + + + TextEditOption + + + Form + + + + + 预览 + Onizleme + + + + 新建 + Yeni + + + + + + 保存 + Kaydet + + + + + 另存为 + Farkli +kaydet + + + + 文件 + Dosya + + + + 插变量 + Degisken +Tipi + + + + 间距 + Bosluk + + + + 字体 + yazi + + + + wenquanyi + + + + + 12 + + + + + 点 + dot + + + + 粗体 + Bold + + + + + + + + + 警告 + Uyari + + + + + + + 无法打开文件 + Dosya acilamiyor + + + + + 是否确认将文件内容追加到打开的文件? + Acilmis dosyayi icerige eklemeyi onayla? + + + + + Application + Uygulama + + + + 插入图片 + Ekle +Desen + + + + 插入文本 + Ekle +Metin + + + + 错误 + Hata + + + + TextEditOption 构造函数参数textEdit 不应当为空 + YaziDuzenleme yapim parametreleri YaziDuzenle bos olamaz + + + + 打开文件 + Dosya ac + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + .txt formatinda kaydetmek mumkun degil. .html olarak kaydetmek ister misiniz? + + + + 提醒 + Geriye kalan + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Patern %1 flash-bellekten aktariliyor. Yerel diske kaydetmek ister misiniz? + + + + 无法保存文件 + Dosya kaydedilemiyor + + + + 保存... + Kaydet… + + + + 提示 + Oneriler + + + + 文档已经改变,是否保存? + Dosya degisti, kaydetmek istiyor musunuz? + + + + 放弃保存 + Kaydedilenleri terket + + + + 二维码变量设置 + QR degisken duzenle + + + + 完成 + OK + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + Saniye: + + + + 分: + Dakika: + + + + 月: + Ay: + + + + 日: + Gun: + + + + 时: + Saat: + + + + 年: + Yil: + + + + 设置时间 + Zaman ayarlama + + + + TriggerCtrl + + + Form + + + + + 触发模式 + Tetik Modu + + + + 光电电平触发 + Elektrik sinyali +tetikleme + + + + 光电边沿触发 + OptikGoz +Tetikleme + + + + 同步器触发 + Senkronizer +tetikleme + + + + 延时触发 + Gecikmeli +tetikleme + + + + 脉冲数/毫米 + Sinyal/ +milimetre + + + + 喷印间隔(毫米) + Bosluk +genisligi(mm) + + + + 脉冲信号值: + Darbe sinyali degeri: + + + + 同步喷印模式 + Senkronizer +modu + + + + 按字符宽度 + her font genisliginde + + + + 按喷印比例 + her oranda + + + + 字符宽度: + karakter +genisligi: + + + + 重复次数 + Tekrarlama +zamani + + + + + + + + 重复间隔(毫秒) + Tetikleme gecikmesi(ms) + + + + + + + 触发延时(毫秒) + Tetikleme +gecikmesi (ms) + + + + 间隔模式: + aralik modu: + + + + 行末<->行首 + sondan basa + + + + 行首<->行首 + bastan sona + + + + 产生脉冲所需计数: + sinyal basi say: + + + + + + + 延时(毫秒): + gecikme(ms): + + + + 同步打印 + Senkronizer +aktif + + + + 同步器清零 + Senkronizer +sifirlama sayaci + + + + 脉冲数修正 + Sinyal dogrulama + + + + 脉冲输出使能 + Sinyal cikisi +aktif + + + + 禁止电眼清零 + Fotosel sifirlama + + + + 允许电眼复位 + Fotosel resetlemesine izin ver + + + + 允许电眼立即复位 + Fotosel resetlemesine simdi izin ver + + + + + 封锁时间(毫秒) + Kitleme- +Zamani(ms) + + + + 电眼清零 + Fotoselsifir- +lamasayaci + + + + 镜像交替间隔 + Alternatif +Aynala + + + + 镜象交替类型 + Ayna modu + + + + 无镜像打印 + Aynalama yok + + + + 自动水平翻转 + Oto uzerine cevirme + + + + 自动垂直翻转 + oto dikey cevirme + + + + 中心对称旋转 + merkezi cevirme + + + + 同步器正反转打印 + Enkoder daima gecerli + + + + 同步器只正转打印 + enkoder sadece ileri gecerli + + + + 同步器只反转打印 + enkoder sadece terse gecerli + + + + 20131228-1 + + + + + 应用当前配置 + Uygula + + + + 独立参数 + bagimsiz parametreler + + + + + + + 触发延时(毫米) + Tetikleme gecikmesi (ms) + + + + + + 重复间隔(毫米) + Tekrarlama boslugu(mm) + + + + + 封锁间隔(毫米) + Kilit boslugu (mm) + + + + + + + 延时(毫米): + Gecikme (mm): + + + + 字符宽度 + karakter genisligi + + + + 喷印比例(%) + Baski skalasi(%) + + + + 提示:参数不正确 + Ipucu: Parametre yanlis + + + + 要求:触发长度小于喷印间隔 + Gereksinim: Tetik uzunlugu, yazdirma araligindan daha kisa + + + + 提示 + oneriler + + + + 应用成功 + Basarili bir sekilde uygulandi + + + + 封锁间隔(毫秒) + Blok Araligi (ms) + + + + ZkEdit + + + Form + + + + + 编辑图案 + Patern duzenle + + + + 缩小 + Uzaklas + + + + 放大 + Yakinlas + + + + 宽度 + Genislik + + + + 新建 + Yeni Dosya + + + + 高度 + Yukseklik + + + + + + 保存 + Kaydet + + + + 保存为 + Farkli kaydet + + + + 打开 + Dosya Ac + + + + 导入 + Yukle + + + + A + + + + + 图像扩张 + Goruntu genisletme + + + + 图像裁剪 + Goruntu kirpma + + + + 提示 + Oneri + + + + 图片已经改变,是否保存? + Patern degisti, kaydetmek istiyor musunuz? + + + + 放弃保存 + Kaydedilenleri terket + + + + + + 放大倍数:%1 + duzenleme: %1 + + + + 图片另存为... + Farkli kaydet... + + + + 另存为 + Farkli kaydet + + + + 打开文件 + Dosya Ac + + + + 图片保存为... + Suraya kaydet... + + + + 导入文件 + Onemli dosya + + + + dlgDrawInit + + + 图案参数设置 + Patern parametre ayarlari + + + + 图案宽度(像素) + Patern yuksekligi (pixel) + + + + 图案高度(像素) + Patern genisligi (pixel) + + + + 确定 + Onayla + + + + dlgQrCode + + + Dialog + Diyalog + + + + + TextLabel + TextLabel + + + + 计数器(变量) + CNT(VAR) + + + + 自动刷新 + Oto-Goster + + + + 插入文档 + Dokuman icine aktar + + + + 信息前缀 + Yazi + + + + 变量(初值) + Akim sayaci + + + + 信息后缀 + Suffix-Yazi + + + + 返回 + Geri don + + + + DataMatrix + Veri matrisi + + + + QRCode + QR kod + + + + 保存 + Kaydet + + + + 预览 + Onceki + + + + 正相打印 + Normalbaski + + + + 反相打印 + RP-Baski + + + + 变量增量 + Artirim + + + + 条形码 + Barkod + + + + 默认 + varsayilan + + + + 8 x 18 + + + + + 8 x 32 + + + + + 12 x 26 + + + + + 12 x 36 + + + + + 16 x 36 + + + + + 16 x 48 + + + + + DM码尺寸: + DM boyutu: + + + + 自动插入时间 + Otomatik girme zamanı + + + + 警告 + Uyari + + + + 输入内容超出选择DM码尺寸大小,请选择更大的尺寸! + Giris icerigi, secilen DM kodunun boyutunu asiyor, lutfen daha buyuk bir boyut secin! + + + + [%1 X %2] + [%1 X %2] + + + + logo_Form + + + Form + Form + + + + zkWidget + + + + 警告 + Uyari + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Maksimum boyut genisligi %1 x Yuksekligi %2, mevcut talep %3 x %4 + + + + 请新创建建图片 + Lutfen yeni bir temel dosya seciniz + + + diff --git a/vena.qm b/vena.qm new file mode 100644 index 0000000000000000000000000000000000000000..8280d64eb38780a3ce7551724887259f9d572d2e GIT binary patch literal 127994 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�#A zohXLIxzvTF8{HN!xRKb?@ZJ0A{?D_wxnFZ=e#QH6*fdw79<=6yV{Sgb~$r?Ta0!;e7Nko8nK-5un};qZ_&vpor}IA`iV%J$)#>2-oNe#yqJ*nZCg^n9&!u zRd>Cb2D3Q38tY*KQdl39HP?}a^;hON(9P;=@V;)1l?}Jc5}m2-W+%vktnPmq1^MVc z&w{)y1~Sj*r#6f1lr%XZ2B0JG^UpS(6Rih(-~{}h&b6Xj6kkfXyBRU%-W^YaSLMTx zn9gT&vG7O`i|YAw0}G{Xe<^)UETa*4M{zY|jQSJtBDp!s3cx!8!7D}JVLa@qNMecRlnhNgVvzgKBTV4wgl}{gAQ5DO_@m$o^yLS0N z#{;+Ykw}ABwkHf2(A$@Ik{;jBhI*zbFXl zlktlrtS`0k%K|ACnCNnDmm@IC%Maz{s~AXj>|}NLJrN&LP-Z}z=>W0lz*qe50G{S% zx4p*Y9YY^}Vp%OxdAz;#QvkkE7?3Tc)x%Y*1U zPY~6*4i5qTk&$QK^9G~TT2KO4s2C+{rE8jE@u941Kmw50;4aj!MSa)Po@pBO)LPy7 zEQ}~ZbyCnP(!7awYEn97O+NS$^M&hVv?KcB;NOvZ3IoK3N{MhL4hbI8C4Q z(5&K)rP-KGH0({%(j&0zib6>pD6?$CB$`$_T1{jtk;$XV=Up02t0GMdTV4-@KFfEr z;ZU0d(~a#5T!w+cR$mV(A&#Zx?})cKzbB<+ERv~0ApX^&@x6#wBQ!O$e90Z}*G6GY z+y0V?rjpdtv8}smyI%=tFU787jDSTphW--ymiQr}t&}*M8lS22oo?LOboPpV;U;bH zjpbdWBF_z5M0 zD@%*rp024K+=`R09T=|d*=D;IwpCQ9K|jMvMH7>7Q?)lAy#C5X;Mi9#<`GQ((fxP# wbgk`Hp{=g>lKiBo9G$I`zAmi^!dM>0NnXNrp#{LsXR4=8^8Z{kte@-u0b<3~)&Kwi literal 0 HcmV?d00001 diff --git a/vena.ts b/vena.ts new file mode 100644 index 0000000..d0ef4b7 --- /dev/null +++ b/vena.ts @@ -0,0 +1,8976 @@ + + + +UTF-8 + + DacDisplayAndEdit + + 墨点 + InkDot + + + 点距电压系数调整,该参数仅代表电压比例关系,不是电压实际值。 + This is PROPORTIONAL index of voltage, NOT actual voltage. + + + 默认值 + Default + + + 编辑 + Edit + + + 是 + YES + + + 否 + NO + + + 完成 + OK + + + 是否将点距微调参数设置为默认值? + adjust the pitch parameter is set to the default value? + + + 提示 + Tips + + + %1 + %1 + + + + DevOp + + + 字高超出范围 + Chữ cao vượt quá phạm vi + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Phun in quãng giữa quá ngắn, không thể thỏa mãn đồng bộ hóa, chiều rộng in thiết lập, chữ rộng sẽ tự động ngắn lại! + + + + + 错误 + sai lầm + + + + 在同步计米的情况下无打印串或显示区域为零 + ở những trường hợp không đánh đồng bộ hóa hàng ngàn mét + + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Trong trường hợp đồng bọ đo mét phun in đồng bọ số phun xung quá nhiều,hãy kiểm tra cấu hình cưa bạn + + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + In chuỗi là quá ngắn nên tăng chiều dài cưa phông chữ hoặc thiết lập in giăm chiều dài phông chữ in + + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + In là quá ngắn, hãy giảm chiều dài chuỗi hoặc tăng chiều dài in trong thiết lập in + + + + readB6Req + + + + + readB6com + + + + + readB6suc + + + + + 设置读写器密码成功! + + + + + 设置读写器工作模式成功! + + + + + + + + + 警告 + Cảnh báo + + + 无法打开设备 + Unable to open the device + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + lines:% 1 redundant Points:% 2, redundant points too manny, +please modify your configuration!! + + + + + Warnning + + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Độ cao từ quá nhỏ hoặc dữ liệu gói áp suất cao không được khởi tạo, lỗi hiện tại của bạn sẽ bỏ qua tất cả các lỗi áp suất cao + + + + DialogAuthorization + + + Dialog + Mật khẩu cho phép + + + + 授权密码: + Mật khẩu cho phép: + + + + 输入密码 + 提升授权 + Nâng cao sự ủy quyền + + + 取消授权 + Deauthorize + + + + DialogCycleprint + + + Dialog + Mật khẩu cho phép + + + + 1循环范围:0- + 1Phạm vi chu kỳ:0- + + + + 1循环次数: + 1số lần chu kỳ: + + + + 2循环范围:0- + 2Phạm vi chu kỳ:0- + + + + 2循环次数: + 2số lần chu kỳ: + + + + 3循环范围:0- + 3Phạm vi chu kỳ:0- + + + + 3循环次数: + 3số lần chu kỳ: + + + + 6循环次数: + 6số lần chu kỳ: + + + + 6循环范围:0- + 6Phạm vi chu kỳ:0- + + + + 5循环范围:0- + 5Phạm vi chu kỳ:0- + + + + 5循环次数: + 5số lần chu kỳ: + + + + 4循环范围:0- + 4Phạm vi chu kỳ:0- + + + + 4循环次数: + 4số lần chu kỳ: + + + + DialogFileOperation + + + Dialog + + + + + 本地文件 + Tập tin cục bộ + + + + U盘文件 + Tập tin usb + + + + 删除文件 + Xóa tập tin + + + + 删除全部 + Xóa tất cả + + + + 从U盘导入 + Nhập khẩu từ usb + + + + 导出到U盘 + Xuất khẩu vào ổ usb + + + + 插入 + Cắm vào + + + + 打开文件 + Mở tập tin + + + + 上一个 + Số trước + + + + 下一个 + Tiếp theo + + + + 退出 + Lùi ra + + + + 文件操作 + Thao tác tập tin + + + + + + 警告 + Cảnh báo + + + + 是否确认删除当前文件? + Có xác nhận xoá tập tin hiện thời không? + + + + 是否确认删除所有文件? + Có xác nhận xóa tất cả các tập tin không? + + + + + + + 提示 + Gợi ý + + + + 是否确认从U盘导入所有文件? + Có xác nhận việc nhập các tập tin từ usb không? + + + + mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/ + mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/ + + + + cp %1/* %2/ + cp %1/* %2/ + + + + 成功从U盘导入? + Nhập khẩu thành công từ usb? + + + + 是否确认将所有文件导出到U盘? + Có xác nhận xuất khẩu tất cả tập tin vào usb không? + + + + 成功导出到U盘? + Xuất khẩu thành công vào usb? + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + Usb chưa cắm hoặc Thư mục doc trong thư mục usb không tồn tại! + + + + DialogFontSize + + + Dialog + + + + + 9点(中/英) + 9点(英) + 9 Điểm (anh) + + + + 24点(中/英) + 24 Điểm (trung/anh) + + + + 7点(左横) + 7 Điểm ( trái ngang ) + + + + 7点(右横) + 7 Điểm (phải ngang ) + + + + 9点(左横) + 9 Điểm ( trái ngang ) + + + + 9点(右横) + 9 Điểm (phải ngang ) + + + + 7点(孟加拉) + 7 Điểm (Bengal) + + + + 32点 + 32 Điểm + + + + 7点(rf7) + 7点(数字) + 7 Điểm(rf7) + + + + 21点(rf21) + 21 Điểm(rf21) + + + + 12点(新罗马) + 24 Điểm (Rome) + + + + 123456890ABCDEFGWXYZ + 123456890ABCDEFGWXYZ + + + + - + - + + + + 查字库标识 + Nhận dạng thư viện kiểm tra + + + + 16点(中/英) + 16 Điểm (trung/anh) + + + + 5点(英) + 5 Điểm (anh) + + + + 12点(中/英) + 12 Điểm (trung/anh) + + + + 7点(英) + 7 Điểm (anh) + + + + 选择字体大小 + Chọn kích cỡ phông chữ + + + + DialogInputTxt + + + Dialog + + + + + DialogInsertVari + + + Dialog + + + + 二维码: + QRCode + + + + 变量类型 + Loại biến số + + + + 日 + Ngày + + + + 秒 + Giây + + + + 分 + Phút + + + 变量1 + Counter 1 + + + + 月 + Tháng + + + + 周 + Tuần + + + + 时 + Tiếng + + + + 年 + Năm + + + 变量2 + Counter 2 + + + + DataMatrix + + + + + QRCode + + + + + BarCode128 + + + + + 计数器1 + Bộ đếm 1 + + + + 计数器2 + Bộ đếm 2 + + + + 随机码1 + Mã ngẫu nhiên1 + + + + 有效日期 + Ngày hết hạn + + + + 生产日期 + Ngày sản xuất + + + + Class + Class + + + + 计数器3 + Bộ đếm 3 + + + + 第XXX天 + Ngày XXX + + + + 隐藏变量 + + + + + 数字个数 + Con số + + + + 9个 + Con Số 9 + + + + 11个 + Con Số 11 + + + + 10个 + Con Số 10 + + + + 3个 + Con Số 3 + + + + 6个 + Con Số 6 + + + + 12个 + Con Số 12 + + + + 13个 + Con Số 13 + + + + 14个 + Con Số 14 + + + + 15个 + Con Số 15 + + + + 5个 + Con Số 5 + + + + 8个 + Con Số 8 + + + + 2个 + Con Số 2 + + + + 7个 + Con Số 7 + + + + 4个 + Con Số 4 + + + + 1个 + Con Số 1 + + + + 变量插入 + Biến số chèn vào + + + + DialogLineSpace + + + Dialog + + + + + + 0个像素 + 0 điểm ảnh + + + + + 1个像素 + 1 điểm ảnh + + + + + 2个像素 + 2 điểm ảnh + + + + + 3个像素 + 3 điểm ảnh + + + + + 4个像素 + 4 điểm ảnh + + + + + 5个像素 + 5 điểm ảnh + + + + 6个像素 + 6 điểm ảnh + + + + 7个像素 + 7 điểm ảnh + + + + 行间距: + Khoảng cách dòng: + + + + 字符间距: + Khoảng cách ký tự: + + + + 选择行间距和字符间距 + Chọn khoảng cách dòng và khoảng cách ký tự + + + + DialogPointDistanceAdjust + + + Dialog + + + + + 列首: + đầu dọc: + + + + 列中: + Giữa dọc: + + + + 列尾: + cuối dọc: + + + + 重置 + Đặt lại + + + + 测试 + thử nghiệm + + + + DialogSaveFile + + + Dialog + + + + + 本地文件 + Tập tin cục bộ + + + + U盘文件 + Tập tin usb + + + + 预览文件内容: + Nội dung tập tin xem thử: + + + + 上一个 + Số trước + + + + 下一个 + Tiếp theo + + + + 请输入文件名: + Hãy nhập tên tập tin: + + + + 取消 + Hủy bỏ + + + + + 保存 + Bảo tồn + + + + 警告 + Cảnh báo + + + + U盘未插入或U盘根目录下的doc文件夹不存在! + Usb chưa cắm hoặc Thư mục doc trong thư mục usb không tồn tại! + + + + DialogShowCounter + + + Dialog + + + + + 米标显示: + Mét hiển thị: + + + + 目前循环范围: + Phạm vi vòng tròn hiện nay: + + + + + + 米 + mét + + + + 剩余米数: + Số mét còn lại: + + + + 循环次数: + Số vòng lặp: + + + + 立即重新计米 + Đo mét lại ngay lập tức + + + + 起始: + Kịp xếp: + + + + 结束: + Kết thúc: + + + + Dialoginputpasswd + + + Dialog + + + + + 修改密码: + Thay đổi mật khẩu: + + + + Dialogmodifypasswd + + + Dialog + + + + + 修改密码: + Thay đổi mật khẩu: + + + + 密码授权 + Mật khẩu cho phép + + + + DigitalInput + + + Form + + + + + 9 + + + + + 3 + + + + + 8 + + + + + - + + + + + 退格 + Lùi + + + + 1 + + + + + 4 + + + + + 0 + + + + + 5 + + + + + 7 + + + + + 2 + + + + + 6 + + + + + 全选 + Chọn tất cả + + + + DlgInputAddr + + + Dialog + + + + + 请输入6位机编号(前3位为经销商编号) + Xin vui lòng nhập 6 số máy (3 đầu tiên cho số nhà phân phối) + + + + PowerOnCnt + + + + + PrintDotCnt + + + + + PowerMax + + + + + PrintMax + PrintMax + + + + 开始时间 + Thời gian bắt đầu + + + + 结束时间 + Thời gian kết thúc + + + + SuperNodeIP: + SuperNodeIP: + + + + edgeIP: + edgeIP: + + + + + + + + + . + . + + + 机器很长时间没有进行保养了!请联系厂家进行保养! + It’s been a long time since last maintenance, please contact supplier for routine maintenance !! + + + 请使用原厂家提供的墨水! + Use original ink is strongly recommended! + + + 累计工作时间(分钟): + Total working time(min): + + + 累计墨水用量: + Total ink cost: + + + 警告 + Warnning + + + 无法打开文件 + Cannot open file + + + + 喷码机恢复工作! + Máy phun in đã hoạt động trở lại! + + + + Mac:%1维护时间剩余 + 维护时间剩余 + Mac:%1Thời gian bảo trì còn lại + + + + 小时,喷码机将停止工作.请与供应商联系! + Máy in phun sẽ ngừng hoạt động. Xin vui lòng liên hệ với nhà cung cấp! + + + + Mac:%1维护时间已到,喷码机停止工作!请与供应商联系 + 维护时间已到,喷码机停止工作!请与供应商联系 + Mac:%1Thời gian bảo trì đã đến, máy in phun ngừng làm việc! Xin vui lòng liên hệ với nhà cung cấp + + + 喷码机维护时间已到,请148小时内与厂家联系! + InkJet Servicing is timeout,Please contacted with manufacturer in 48 hours! {148小?} + + + 喷码机维护时间已到,请48小时内与厂家联系! + InkJet Servicing is timeout,Please contacted with manufacturer in 48 hours! + + + + + 当前日期: + Ngày nay: + + + + + 正确? + Chính xác? + + + 维护时间已到,喷码机停止工作! + The maintenance time has come,Inkjet printer stop working! + + + + DlgMutiLanguage + + + 界面语言设置 + Thiết lập ngôn ngữ giao diện + + + + 中文 + Tiếng trung quốc + + + + 英语 + Tiếng anh + + + + 土耳其语 + Tiếng thổ nhĩ kỳ + + + + 西班牙语 + Tiếng tây ban nha + + + + 泰语 + Thái Lan + + + + 越南语 + Tiếng Việt + + + + 波斯语 + + + + + (注意: 选择切换显示语言, 重启后才能生效) + (lưu ý: chọn chuyển đổi hiển thị ngôn ngữ, khởi động lại để có hiệu lực) + + + 警告 + Warnning + + + + DlgMyWarring + + + 警告 + Cảnh báo + + + + 确定 + Xác định + + + + TextLabel + + + + + DlgSelectInputLanguage + + + Dialog + Mật khẩu cho phép + + + + 汉语(Chinese) + Trung Quốc + + + + 英语(English) + Tiếng Việt + + + + 越南语(Vietnam) + Tiếng Việt + + + + DlgShowMsg + + + 警告 + Cảnh báo + + + + 确定 + Xác định + + + + DlgVarLength + + + 变长喷印参数 + Tham số in ấn biến dài + + + + 头部长度(m) + Chiều dài phần đầu (m) + + + + 尾部长度(m) + Chiều dài phần đuôi (m) + + + + + 调整长度(mm) + Điều chỉnh chiều dài (mm) + + + + 总长(m) + Tổng chiều dài (m) + + + + 确定 + Xác định + + + + 可变长度允许 + Chiều dài biến đổi cho phép + + + + FileLogger + + + The directory and all its contents have been removed + + + + + Failed to remove the directory + + + + + FormScenedlg + + + Form + + + + + Last + + + + + First + + + + + 重置位置 + + + + + 另存为 + + + + + 保存 + + + + + 预览 + + + + + 新增图元 + Mới tăng +biểu đồ + + + + 新建 + + + + + 打开 + + + + + 删除图元 + Xóa biểu đồ + + + + 编辑图元 + Biên tập +biểu đồ + + + + 插入图像 + + + + + 场景缩小 + + + + + 场景放大 + + + + Save + Save + + + + Next-item + + + + + Prev-item + + + + + Test2 + + + + + 插入图片 + + + + + + [ %1行 x %2列 ] + [dòng %1 x dọc %2] + + + + <html><head/><body><p>[<span style="color:red;font-size:12px;"> %1行 </span>x %2列 ]</p></body></html> + + + + + InkJetPrinter + + + TabWidget + + + + + 主窗口 + 主窗口 + Cửa sổ chính + + + + 图案编辑 + Biên soạn hình ảnh + + + + 打印设置 + In phun thiết lập + + + + + 系统设置 + Thiết lập hệ thống + + + + + 其他信息 + Thông tin khác + + + + + 网络管理 + Quản lý mạng + + + + 电压调整 + Điều chỉnh điện áp + + + + Save + Save + + + + 不连续电压 + Điện áp gián đoạn + + + + + vol0 + + + + + + vol1 + + + + + + vol2 + + + + + + vol3 + + + + + + vol4 + + + + + + vol5 + + + + + + vol6 + + + + + + vol7 + + + + + + vol8 + + + + + + vol9 + + + + + + vol10 + + + + + + vol11 + + + + + + vol12 + + + + + + vol13 + + + + + + vol14 + + + + + + vol15 + + + + + + vol16 + + + + + + vol17 + + + + + + vol18 + + + + + + vol19 + + + + + + vol20 + + + + + + vol21 + + + + + + vol22 + + + + + + vol23 + + + + + + vol24 + + + + + + vol25 + + + + + + vol26 + + + + + + vol27 + + + + + + vol28 + + + + + + vol29 + + + + + + vol30 + + + + + + vol31 + + + + + + vol32 + + + + + + vol33 + + + + + + vol34 + + + + + + vol35 + + + + + + vol36 + + + + + + vol37 + + + + + + vol38 + + + + + + vol39 + + + + + 连续电压 + Điện áp liên tục + + + + 满列电压 + Dòng điện áp + + + + fvol0 + + + + + fvol1 + + + + + fvol2 + + + + + fvol3 + + + + + fvol4 + + + + + fvol5 + + + + + fvol6 + + + + + fvol7 + + + + + fvol8 + + + + + fvol9 + + + + + fvol10 + + + + + fvol11 + + + + + fvol12 + + + + + fvol13 + + + + + fvol14 + + + + + fvol15 + + + + + fvol16 + + + + + fvol17 + + + + + fvol18 + + + + + fvol19 + + + + + fvol20 + + + + + fvol21 + + + + + fvol22 + + + + + fvol23 + + + + + fvol24 + + + + + fvol25 + + + + + fvol26 + + + + + fvol27 + + + + + fvol28 + + + + + fvol29 + + + + + fvol30 + + + + + fvol31 + + + + + fvol32 + + + + + fvol33 + + + + + fvol34 + + + + + fvol35 + + + + + fvol36 + + + + + fvol37 + + + + + fvol38 + + + + + fvol39 + + + + + 其他调整 + Điều chỉnh khác + + + + 整体缩放(%) : + Zoom tổng thể (%): + + + + WriteByte + + + + + ReadByte + + + + + + + Address: + + + + + + Value: + + + + + WriteWord + + + + + ReadWord + + + + + ReadDword + + + + + WriteDword + + + + + ValueH: + + + + + ValueL: + + + + + + + 信息编辑 + Soạn thảo thông tin + + + + 触发设置 + Kích hoạt thiết lập + + + + + 系统管理 + Quản lý hệ thống + + + + + 日志信息 + Thông tin nhật ký + + + + 与FPGA失去通信!!! + Mất liên lạc với FPGA! + + + + 与FPGA通信恢复正常 + Liên lạc với FPGA đã trở lại bình thường + + + + 开始自检,请等待60秒............... + Bắt đầu tự kiểm tra, hãy chờ đợi 60 giây … + + + + 开始自检,请等待%1秒............... + Bắt đầu tự kiểm tra, hãy chờ đợi %1 giây … + + + + + 自检完成!!! + Tự kiểm tra hoàn thành! + + + + 缺少墨水,喷码机不能正常工作! + + + + 墨水或溶剂空,准备关机 + Mực hoặc dung môi rỗng, sẵn sàng để tắt + + + + 压力波动超过设定的5个值. + Áp suất dao động vượt quá 5 giá trị đã thiết lập. + + + + 停止打印,自动关闭高压. + Ngừng in, tự động tắt cao áp. + + + + 压力异常:上次压力值%1,当前压力值%2 + Bất thường áp suất: áp suất lần trước giá trị %1, áp suất hiện tại giá trị %2 + + + 高压异常:上次电流值%1,当前电流值%2 + Áp suất cao bất thường: dòng điện lần trước giá trị %1, dòng điện hiện tại giá trị %2 + + + + + 齿轮泵转速过高,请立即停机并联系供应商! + Máy bơm bánh răng tốc độ là quá cao, dừng lại ngay lập tức và liên hệ với nhà cung cấp! + + + + + 齿轮泵转速过高,请清理过滤器或者检查是否泄露! + Bơm bánh răng tốc độ quá cao, làm sạch bộ lọc hoặc kiểm tra rò rỉ! + + + + 错误!粘度计下位灯故障. + Sai lầm! Nhớt kế đèn báo dưới trục trặc. + + + + 错误!粘度计故障:检测不到上位灯. + Sai lầm! Nhớt kế trục trặc: không thấy đèn báo trên. + + + 混合阀打开1: + Van hỗn hợp mở 1: + + + + 粘度检测异常,粘度值太大!!! + Độ nhớt bất thường, độ nhớt là quá lớn! + + + + 混合阀打开2: + Van hỗn hợp mở 2: + + + + 提示 + Gợi ý + + + + 是否接收新的信息! + Có phai nhận được thông tin mới! + + + + + 错误!!!!!!!!!!!粘度偏大故障 + Sai lầm! Độ nhớt cao bị lỗi + + + + 定时开机 + Thiết lập thời gian mở máy + + + + 读卡器故障! + + + + + 13.读卡器故障! + + + + + + 压力泄漏或压力传感器故障! + Rò rỉ áp suất hoặc cảm biến áp suất bị lỗi! + + + + 运行中压力泄漏,停齿轮泵! + Rò rỉ áp suất hoạt động, ngừng máy bơm bánh răng! + + + + + 测试时间结束,准备关机 + Thời gian kiểm tra kết thúc, sẵn sàng để tắt máy + + + + 定时开机循环完成,准备关机 + Thời gian khởi động hoàn tất chu kỳ, sẵn sàng để tắt + + + + 准备关机 + Chuẩn bị tắt máy + + + + + + 刷墨水卡成功! + + + + + + + 刷溶剂卡成功! + + + + + + MAC无效卡! + + + + + + 无效卡! + + + + + + 9.墨水空,机器自动关机 + + + + + + 10.溶剂空,机器自动关机 + + + + + + 11.墨水空,机器再次自动关机 + + + + + + 12.溶剂空,机器再次自动关机 + + + + + + 21.没有使用原厂墨水耗材,机器自动关机 + + + + + + 22.没有使用原厂溶剂耗材,机器自动关机 + + + + + + 23.没有使用原厂墨水耗材,机器再次自动关机 + + + + + + 24.没有使用原厂溶剂耗材,机器再次自动关机 + + + + + + 1.请添加墨水,否则机器将在24小时后自动关机! + + + + + + 2.请添加墨水,否则机器将在%1小时后自动关机! + + + + + + 3.请添加墨水,否则机器将在%1分钟后自动关机! + + + + + + 4.请添加墨水,否则机器将在2分钟后自动关机! + + + + + + 5.请添加溶剂,否则机器将在6小时后自动关机! + + + + + + 6.请添加溶剂,否则机器将在%1小时后自动关机! + + + + + + 7.请添加溶剂,否则机器将在%1分钟后自动关机! + + + + + + 8.请添加溶剂,否则机器将在2分钟后自动关机! + + + + + + + 13.请刷墨水卡,请使用原厂墨水耗材,否则机器将在24小时后自动关机! + + + + + + 14.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后自动关机! + + + + + + 15.请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1分钟后自动关机! + + + + + + + 16.请刷墨水卡水,请使用原厂墨水耗材,否则机器将在2分钟后自动关机! + + + + + + + 17.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2小时后自动关机! + + + + + + 18.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后自动关机! + + + + + + 19.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1分钟后自动关机! + + + + + + + 20.请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在2分钟后自动关机! + + + + + 添加溶剂: + + + + + + 警告!!!!!!!!!!!粘度值偏低 + Cảnh báo! Độ nhớt thấpWarning! Low viscosity + + + 正在开墨线..... + InkLine Openning...... + + + 回收泵全速开 + ReclaimPump ON + + + 粘度泵开 + ViscosityPump ON + + + 循环阀开 + CycleValve ON + + + 墨线阀开 + InkLineValve ON + + + 清洗阀开 + CleanValve ON + + + 清洗阀关 + CleanValve OFF + + + 墨线阀关 + InkLineValve OFF + + + 粘度泵关 + ViscosityPump OFF + + + 供墨阀开 + InkValve ON + + + 正常开墨线状态,请等待%1秒 + InkLine Raedy,Please wait %1 s + + + 循环阀关 + CycleValve OFF + + + 开晶振电压,正在检测相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + 正在测试相位,请等待%1秒 + Is testing phase, please wait for %1 s + + + 相位检测正常,开启高压 + Phase Ready + + + 相位检测异常 + Phase error + + + 开墨线完成 + InkLine Open Complete + + + 开墨线完成,可以打印! + InkLine Ready,You Can To Print Now + + + 正在关闭墨线 + Closing InkLine..... + + + 回收泵变全压运行 + ReclaimPump ON + + + 清洗阀点动%1次 + CleanValve work %1 times + + + 循环阀开,请等待%1s + CycleValve on,please wait for %1 s + + + 关回收泵 + ReclaimPump OFF + + + %1秒后关回收泵 + Wait %1s and ReclaimPump OFF + + + 可以关机断电 + InkJet can Shoutdown + + + 正在关机..... + Shutdown ...... + + + 正在快速开墨线..... + Is InkLine Openning ...... + + + 打开晶振电压 + OscillatorVoltage ON + + + 5秒后打开晶振电压 + crystals voltage on after 5s + + + 开晶振电压,正在检测相位,请等待%1s + is phase testting, please wait for %1 s + + + 快速开墨线完成 + InkLine Open Finish + + + 快速开墨线完成,可以打印! + InkLine Open Finish + + + 正在快速关闭墨线 + Is InkLine OFF ...... + + + 回收泵关 + ReclaimPump OFF + + + 回收泵变全速运行 + ReclaimPump On + + + 回收泵全速运行 + ReclaimPump ON + + + 回收泵全速运行,请等待%1秒 + Is ReclaimPump On, Wait %1s + + + 快速关闭墨线完成 + Complete the quick closing InkLine + + + 警告 + Warnning + + + + 喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!! + In phun quá nhanh hoặc quá ngắn! Không thể in ấn hoàn toàn, tự động ngừng in ấn! + + + + 喷印速度过快或间隔太短!无法喷印完全!!! + In phun quá nhanh hoặc quá ngắn! Không thể in hoàn toàn! + + + + 喷印速度过快!无法喷印完全,自动暂停喷印!!! + In phun quá nhanh! Không thể in ấn hoàn toàn, + tự động ngừng in ấn! + + + 打开文件出错次数超多3次,自动清除默认喷印文件. + Automatically clear the default file because openFile error. + + + 非法关机次数过多,自动清除默认喷印文件. + Automatically clear the default file because illegal shutdown. + + + 上次出现非法关机. + Illegal shutdown Last time. + + + 自动循环中,请等待%1秒............... + Is AutoCyclling ,Wait %1s...... + + + 自动循环完成!!! + Auto Cycle finish!!! + + + 正在自检,请等待%1秒............... + Is InkJet Testting, Wait %1 s...... + + + 供墨阀关 + InkValve OFF + + + + 喷印速度过快!无法喷印完全!!! + In phun quá nhanh! Không thể in hoàn toàn! + + + + 警告:加热器长时间无法达到预期温度,故障或设置错误! + Cảnh báo: hệ thống sưởi thời gian dài không đạt được nhiệt độ mong đợi, + lỗi hoặc sai thiết lập! + + + + + 错误!!!!!!!!!!!主墨泵故障 + Sai lầm! máy bơm mực chính bị lỗi + + + + + 主墨泵故障!!! + máy bơm mực chính bị lỗi ! + + + + 错误!!!!!!!!!!!压缩机故障 + Sai lầm! Máy nén trục trặc + + + + 压缩机故障!!! + Máy nén trục trặc! + + + 错误!!!!!!!!!!!粘度计故障 + Wrong!!! Viscosimeter fault + + + 错误!!!!!!!!!!!粘度故障 + Wrong!!! Viscosity fault + + + + + + 电机故障 + Động cơ trục trặc + + + + 电机故障!!! + Động cơ trục trặc ! + + + + + 回收槽到头 + Máng thu thập đi đến cuối cùng + + + + + + + 回收槽卡住或者回收槽开关时间设置错误 + Máng thu thập bị kẹt hoặc lỗi thiết lập thời gian mở và đóng rãnh tái chế + + + + InputMethod + + + Form + + + + + 1 书 + + + + + 2 输 + + + + + 3 数 + + + + + 4 属 + + + + + 5 熟 + + + + + 上一页 + PageUP + + + + 下一页 + PageDown + + + + 退格 + BackSpace + + + + Shift + Shift + + + + q + + + + + w + + + + + e + + + + + r + + + + + t + + + + + y + + + + + u + + + + + i + + + + + o + + + + + p + + + + + \ + + + + + + 英文 + Tiếng anh + + + + + 大写 + Viết hoa + + + + a + + + + + s + + + + + d + + + + + f + + + + + g + + + + + h + + + + + j + + + + + k + + + + + l + + + + + ; + + + + + ' + + + + + Enter + + + + + 删除 + Xoá bỏ + + + + z + + + + + x + + + + + c + + + + + v + + + + + b + + + + + n + + + + + m + + + + + 上 + Hướng lên + + + + 行首 + Home + + + + 行尾 + End + + + + 左 + Sang trái + + + + 下 + Đi xuống + + + + 右 + Sang phải + + + + ` + ~ + + + + + 1 + ! + + + + + 2 + @ + + + + + 3 + # + + + + + 4 + $ + + + + + 5 + % + + + + + 6 + ^ + + + + + 7 + & + + + + + 8 + * + + + + + 9 + ( + + + + + 0 + ) + + + + + - + _ + + + + + = + + + + + + + 隐藏 + Che giấu + + + + [ + { + + + + + ] + } + + + + + , + < + + + + + . + > + + + + + / + ? + + + + + 特殊字 + Chữ đặc biệt + + + + Ctrl + Ctrl + + + + warning + Warning + + + + myInputMethod is null + + myInputMethod is null + + + + + 错误 + Lỗi + + + + hanziDisplayLabels缺少初始化 + hanziDisplayLabel not init + + + + 找不到输入法初始化文件 + Không tìm thấy tập tin khởi động bộ nhập liệu + + + + 小写 + Chữ thường + + + 中文 + Chinese + + + + Tiếng Việt + + + + + Russian + + + + + Japanese + + + + + 全选 + Chọn tất cả + + + + 复制 + Sao chép + + + + 粘贴 + dán + + + + 剪切 + cắt + + + + 后退 + Lùi lại + + + + InsertSpaceNumDialog + + + 插入空格数 + Chèn số không gian + + + + 空格个数: + Số không gian: + + + + LogInfo + + + Form + + + + + 当前状态 + Tình trạng hiện tại + + + + 清空当前状态 + Xóa trạng thái hiện tại + + + + 历史状态 + Trạng thái lịch sử + + + + 删除历史文件 + Xóa tập tin lịch sử + + + + 打开历史文件 + Mở tập tin lịch sử + + + + TextLabel + + + + + 导出日志到U盘 + xuất ra nhật ký vào ổ usb + + + + 版本信息 + 调试信息 + Phiên bản của thông tin + + + + 请先打开历史状态文件! + Xin vui lòng mở tập tin trạng thái lịch sử trước! + + + + + + + 警告 + Cảnh báo + + + + + + 无法打开文件 + Không thể mở tập tin + + + + + + + 提示 + Mẹo + + + + 是否确认将所有日志文件导出到U盘? + Có xác nhận xuất tất cả tập tin nhật ký vào usb không? + + + + U盘未插入或无法识别,请重新插拔设备! + + + + + 成功导出到U盘 + + + + 成功导出到U盘? + Xuất khẩu thành công vào usb? + + + + 选择历史记录文件 + Chọn tập tin lịch sử + + + + 是否确认将历史日志文件全部清除? + Có xác nhận xuất tất cả tập tin nhật ký vào usb không? + + + + 是否确认将当前日志全部清除? + Có xác nhận xóa tất cả tập tin nhật ký lịch sử không? + + + + MainWindow + + + InkJet + + + + + 编辑 + Biên tập + + + + 条形码 + Mã vạch + + + + 二维码 + Mã qr + + + + 缩小 + Thu nhỏ + + + + 放大 + Phóng to + + + + 获取数据 + Lấy dữ liệu + + + + 交替打印文件名 + Thay đổi tên tập tin + + + + 最大:[40行x 2048列] + Tối đa :[ dòng 40 x dọc 2048] + + + + 同步器速度 + Tốc độ đồng bộ + + + + 当前时间 + Thời gian hiện tại + + + + 墨线开关 + Đóng mở +dây mực + + + + 喷头盖开 + Mở nắp +vòi phun + + + + 高压包 + 晶振电压 + Gói áp suất cao + + + + 粘度 + Độ nhớt + + + + 压力 + Áp lực + + + + + 隔膜位置 + Vị trí màng lọc + + + + 紧急停机 + Dừng khẩn cấp + + + 启动 + Start + + + + 喷嘴逆清洗 + Đảo ngược +làm sạch vòi +phun + + + 墨水泄漏 + InkLeak +Fault + + + + 墨水液位 + Mực chất +lỏng vị trí + + + + 溶剂液位 + Dung môi +vị trí + + + + 粘度故障 + Lỗi độ +nhớt + + + + 相位故障 + Lỗi pha + + + + 高压故障 + Lỗi Áp +lực cao + + + + 故障恢复 + Phục hồi +lỗi + + + + 立即重新计米 + Đo mét lại +ngay lập tức + + + + 产品总计数 + Tổng số sản phẩm + + + + + 暂停打印 +停止高压 + Tạm dừng +việc in ấn, +dừng cao áp + + + + 回收故障 + Thu thập +trục trặc + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt; vertical-align:bottom;"><br /></p></body></html> + + + + + 墨水缸满 + Thùng +chứa mực +đầy đủ + + + + 产品计数 + Đếm sản phẩm + + + + 关机 + Tắt máy + + + + 2014-08-23 + 1 {2014-08-23?} + + + + + + + 开 + Mở + + + + + + + 关 + Đóng + + + + 交替打印 + Đan xen in phun + + + 编辑文件 + Edit File + + + + 打开文件 + Mở tập tin + + + + + + 正在喷印............... + Đang được phun in... + + + 喷头盖开,喷印无法正常进行!!! + Cannot print while printhead cover is open ! + + + + + 高压故障,暂停打印 + Cao áp bị lỗi, tạm dừng việc in + + + 墨水或溶剂空,准备关机 + Ink or solvent empty, prepare shutdown + + + + + + + + 回收故障,关闭回收槽,关墨线 + Thu thập bị lỗi .đóng nắp lại, tắt dây mực + + + 回收故障,关闭回收槽,关墨线 + Recycle fault, turn collector and ink-jet off + + + 维护时间已到喷码机停止工作 + The maintenance time has come,Inkjet printer stop working! + + + + + + 相位故障,暂停打印 + Lỗi pha, tạm dừng việc in + + + + 相位故障,屏蔽DAC输出 + Lỗi pha, lớp bảo vệ đầu ra của DAC + + + + + 相位故障,屏蔽充电 + Lỗi pha, lớp bảo vệ nạp điện + + + 开墨线 + OPEN + + + 关墨线 + CLOSE + + + 墨线状态 + INKLINE + + + 喷 嘴 +逆清洗 + nozzles +Clean + + + + + 机箱: + Hòm: + + + 正在喷印...... + Printting...... + + + 墨线正常,可以喷印. + InkLine ready to print. + + + 墨线正常. + InkLine Ready. + + + + 喷头盖开, 喷印无法正常进行!!! + Vòi phun mở, phun in không phải là bình thường! + + + %1.%2[%3.%4] 米/秒 + %1.%2[%3.%4] m/s + + + 高压故障,快速关墨线 + high voltage error, closing now. + + + 维护时间已到,喷码机将停止工作! + The maintenance time has come,Inkjet printer stop working! + + + 相位故障,FPGA自动关高压. + phase error,FPGA turnoff the high voltage. + + + + 高压故障,关回收槽 + CaoÁp bị lỗi, đóng máng thu thập + + + + 高压故障,关回收槽和墨线 + CaoÁp bị lỗi, đóng máng thu thập và dây mực + + + + 维护时间已到,喷码机停止工作! + Thời gian bảo trì đã đến, máy phun ngừng làm việc ! + + + + + + 相位故障,准备关机 + Lỗi pha, chuẩn bị tắt máy + + + %1.%2[%3.%4]米/秒 + %1.%2[%3.%4]m/s + + + + 列延时:%1点 + Trì hoãn dọc :%1 + + + + + + + + + + + + + + + 警告 + Cảnh báo + + + + 无法打开文件 + Không thể mở tập tin + + + + 打开文件: + Mở tập tin: + + + + + + + + 提示 + Mẹo + + + + 文件未保存,是否先保存文件! + Tập tin chưa được lưu, lưu tập tin đầu tiên! + + + + + + + 变量数大于8个,某些变量将不起作用!!! + Số biến lớn hơn 8, và một số biến không hoạt động! + + + + + 请减少信息中的变量(或计数器)数量. + Hãy giảm số lượng biến (hoặc bộ đếm) trong thông tin. + + + + warning,界面上有变量未显示完全 + Cảnh báo:một biến không hiển thị chưa đầy đủ trên giao diện + + + + + + + [ %1行 x %2列 ] + [dòng %1 x dọc %2] + + + + + + + + 错误 + Lỗi + + + + 喷头盖未关,请先关喷头盖! + Vòi phun nắp chưa đóng, xin vui lòng đóng vòi phun nắp! + + + + 继续打印 +保持高压 + Tiếp tục in phun, tiếp tục giữ cao áp + + + + 正在排气 ............... + Đang xả hơi … + + + + + 正在准备关机,请等待%1秒............... + + + + + 是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动! + + + + + 是否启动齿轮泵? + + + + + 泵启动 + Bơm khởi động + + + + 泵停止 + Bơm dừng lại + + + + 保存html文件失败! + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;"><br /></p></body></html> + + + + + 获取DM码内容为空! + Nhận được nội dung mã DM là số không! + + + + + 获取DM码内容: + Nhận được nội dung mã DM: + + + + + 获取DM码内容跟上次相同 + Nhận được nội dung mã DM như lần trước + + + + 高压故障:两高压偏转板间的电压检测异常 + Áp lực trục trặc: điện áp bất thường giữa hai tấm độ lệch cao áp + + + + 1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座; + 1. Tấm độ lệch cao áp và đế cao áp ẩm, bẩn thỉu, làm sạch và thổi khô tấm cao áp và đế cao áp; + + + + 2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间; + 2. Thay thế máy bo mạch chủ hoặc cuộn cao áp, xin vui lòng nhập vào "thiết lập hệ thống" nhấp vào "đặt lại cao áp", khi chiều cao phông chử được đặt lên 90, đặt lại giá trị báo động cao áp nên là giữa 480 và 550; + + + + 3.高压线路漏电,请更换高压线路; + 3. rò rỉ đường cao áp, thay thế đường cao áp; + + + + 4.高压底座漏电,请更换高压底座。 + 4. rò rỉ đế cao áp , thay thế các đế cao áp. + + + + 墨水过多:墨水溢出 + Quá nhiều mực: tràn đầy mực + + + + 1. 请停止添加墨水; + 1. xin dừng việc thêm mực; + + + + 2. 请排出多余墨水。 + 2.xin vui lòng xả mực dư. + + + + 墨水液位:墨水即将耗尽 + Vị trí mực: mực đang cạn kiệt + + + + 1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。 + Mực cạn kiệt, tự động tắt máy sau 3 giờ, xin vui lòng thêm mực kịp thời. + + + + 回收故障:未检测到有墨水回收 + Lỗi mực thu thập: không thấy mực thu thập + + + + 1. 墨水未射入回收管,请修正墨线方向; + 1. Mực không được bắn vào ống thu thập, xin vui lòng sửa đổi hướng của dòng mực; + + + + 2. 墨水粘度太低,请更换新墨水; + 2. độ nhớt của mực là quá thấp, xin vui lòng thay thế các loại mực mới; + + + + 3. 回收管堵塞,请清通或者更换回收管; + Ống thu thập Tắc nghẽn, làm sạch hoặc thay thế ống thu thập; + + + + 4. 回收泵故障,请清洗或者更换回收泵; + 4. Lỗi máy bơm mực thu thập, xin vui lòng làm sạch hoặc thay thế máy bơm thu thập; + + + + 5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮. + 5. xác nhận tất cả các thông số và thiết bị không có bất thường, xin vui lòng nhập vào "in phun thiết lập" hủy bỏ "phục hồi lỗi xử lý" đánh dấu, trở về giao diện cửa sổ chính và bấm vào nút "lỗi phục hồi". + + + + 溶剂液位:溶剂即将耗尽 + Vị trí dung môi: dung môi đang cạn kiệt + + + + 1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。 + 1. Dung môi cạn kiệt, 3 giờ sau đó sẽ tự động tắt máy, xin vui lòng thêm dung môi một cách kịp thời. + + + + + 粘度故障报警 + Cảnh báo lỗi độ nhớt + + + + 粘度故障:墨水粘度无法自动调整 + Độ nhớt lỗi: độ nhớt của mực không thể tự động điều chỉnh + + + + 1. 混合阀失灵,请冲洗或者更换混合阀; + 1. Van trộn thất bại, xin vui lòng rửa van hoặc thay thế van trộn; + + + + 2. 墨水罐内的墨水异常,请更换新墨水; + 2. Hộp mực bất thường trong hộp mực, xin vui lòng thay thế loại mực mới; + + + + 粘度计异常: + Độ nhớt kế bất thường: + + + + 1. 泵前过滤网堵塞,请更换泵前滤网; + 1. Tắc nghẽn bộ lọc trước bơm, thay thế bộ lọc trước bơm; + + + + 2. 粘度泵异常,请清洗或更换粘度泵; + 2. nhớt bơm bất thường, làm sạch hoặc thay thế các máy bơm nhớt; + + + + 3. 粘度传感器异常,请检查传感器线路或者更换传感器. + 3. độ nhớt cảm biến bất thường, hãy kiểm tra dòng cảm biến hoặc thay thế cảm biến. + + + + 相位故障报警 + Cảnh báo lỗi pha + + + + 相位故障:相位信号检测异常 + Lỗi pha: phát hiện tín hiệu pha bất thường + + + + 1. 墨水分裂不正常,请调整墨水分裂; + Tách mực là không bình thường, hãy điều chỉnh tách mực; + + + + 2. 充电槽或者相检头脏污,请清洗充电槽和相检头; + Bộ sạc hoặc kiểm pha đầu bẩn, xin vui lòng làm sạch các khe cắm sạc và kiểm pha đầu; + + + + 3. 放大板功能性异常,请更换放大板; + 3. Chức năng bất thường của tấm phóng to, thay thế tấm phóng to; + + + + 4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离; + 4.Khoảng cách giữa kiểm pha đầu và dây mực là quá xa, hãy kiểm tra hoạt động vòi phun, điều chỉnh khoảng cách giữa kiểm pha đầu và dây mực; + + + + 5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰; + 5.Dây mặt chưa được kết nối hoặc can thiệp bên ngoài, xin vui lòng kết nối dây mặt hoặc cách ly các can thiệp bên ngoài; + + + + 6. 墨水质量异常,请更换新墨水。 + 6.Chất lượng mực bất thường, xin vui lòng thay thế mực mới. + + + + 回收槽开关检测完成! + Máng thu thập mở và đóng đã hoàn thành kiểm tra! + + + 墨线未开,请先开墨线! + InkLine is Close,Please Open it! + + + + 墨线未开,请先开墨线开关! + Dây mực không mở, xin vui lòng mở chuyển đổi dây mực! ! + + + + 当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度 + Tổng số dọc hiện tại là %1, hỗ trợ tổng số dọc %2, xin vui lòng giảm chiều dài của chuỗi in + + + 有效打印区域 %1行 x %2 列 + Effective print area %1 row x %2 column + + + 打印耗时 %1.%2 毫秒 /次 + Print time %1.%2 ms/time + + + + 打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms + In phun thời gian %1ms, kích hoạt khoảng thời gian %2ms, kích hoạt khoảng thời gian ít nhất là nhiều hơn in phun thời gian 3ms + + + 同步目标每列有%1.%2个同步脉冲 + Each column of synchronized targe has %1.%2 synchronizing pulse + + + + + 开始打印 + Bắt đầu in phun + + + + 回收槽未到底!!!!!! + Máng thu thập chưa xuống tận cùng ! + + + + + 暂停喷印............... + Tạm dừng in phun... + + + + + 墨水缸满报警 + Mực bình chứa đầy báo động + + + + + 墨水液位报警 + Mực mức chất lỏng báo động + + + + + 溶剂液位报警 + Dung môi lỏng mức báo động + + + + + 高压故障,暂停打印. + Lỗi áp suất cao,Dừng in phun. + + + + 回收故障. + Sự cố thu hồi. + + + + 回收异常,墨线可能偏离.(%1) + Tái chế bất thường. Đường mực có thể bị lệch. (%1) + + + + 相位故障:飞行时间错误! + Lỗi pha: thời gian bay sai! + + + + 相位故障:相位检测错误! + Lỗi pha: Phát hiện lỗi pha ! + + + + 齿轮泵转速 + Bơm bánh răng tốc độ vòng quay + + + + 电眼交替 + Mắt điện thay thế + + + + %1.%2[%3.%4]米/分 + %1, %2 [%3, %4] mét/phút + + + + + 最多支持的列数目为:%1请减小信息长度. + Số cột được hỗ trợ tối đa là:%1 Vui lòng giảm độ dài thông tin. + + + + 喷印间隔过短,应高于%1! + Khoảng cách phun quá ngắn, nên cao hơn%1! + + + + 正在加高压... + Đang tăng áp suất... + + + + 开始打印1 + Bắt đầu in 1 + + + + 停止打印 + Dừng in phun + + + + + 随机码文本将展出到U盘,请插入U盘 + Đoạn mã ngẫu nhiên sẽ được trưng bày trên usb, hãy cắm vào usb + + + + 暂停打印 + Tạm dừng in phun + + + + 继续打印 + Tiếp tục in phun + + + 请切换为自动状态,再继续操作! + Please switch to automatic state, to continue the operation! + + + 打开墨线 + InkLine OPEN + + + + + 回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置? + Máng thu thập bị chặn hoặc lỗi thiết lập thời gian trước khi máng thu thập, bắt buộc vị trí hiện tại được đặt vào vị trí cao nhất? + + + + + 停止 + Dừng + + + 打开回收槽 + Opening collector + + + + 停止打开 + Ngừng mở + + + + 正在打开回收槽... + Đang mở máng thu thập … + + + + + 警告!回收槽开关时间未设置! + Cảnh báo! máng thu thập đóng mở thời gian chưa được thiết lập! + + + 关闭墨线 + InkLine Close + + + 关闭回收槽 + Closing collector + + + + 停止关闭 + Ngừng đóng + + + + 正在关闭回收槽... + Đang đóng máng thu thập... + + + + 准备关机...... + Sẵn sàng để tắt máy… + + + 墨线未关,是否关闭墨线后关机! + Whether chalk line did not closed, shutdown after the inkline closed! + + + + 回收槽未关,是否关闭回收槽后关机! + Máng thu thập chưa đóng, có phải sau khi tắt máy! + + + + 是否确认关机? + Xác nhận tắt máy hay không? + + + 最多支持的列数目为:%1 + Maximum column number is:%1 + + + + 是否初始化产品计数? + Có phải khởi động đếm sản phẩm? + + + + 是否清除总产品计数? + Xóa tổng số lượng sản phẩm hay không? + + + + 是否立即重新计米? + Có nên lập tức tính lại gạo không? + + + + 警告:‘-’和空格的宽度不一样 + Cảnh báo:'-'khác với chiều rộng của khoảng trắng + + + + 条形码信息编辑 + Chỉnh sửa thông tin mã vạch + + + + + 二维码信息编辑 + Chỉnh sửa thông tin mã QR + + + + MemDisplayAndEdit + + + Form + + + + + 07 + + + + + 02 + + + + + 06 + + + + + 0D + + + + + 09 + + + + + 03 + + + + + 01 + + + + + 04 + + + + + 0C + + + + + 0A + + + + + 0F + + + + + 05 + + + + + 00 + + + + + 08 + + + + + 0B + + + + + 0E + + + + + 基地址: + Địa chỉ cơ bản: + + + + 0x0000 + + + + + 0xb100 + + + + + 0xa400 + + + + + 0xe000 + + + + + 读空间 + Đọc không gian + + + + 写空间 + Viết không gian + + + + 进制转换 + Chuyển đổi chế độ + + + + + 编辑 + Chỉnh sửa + + + + 上一页 + Trang trước + + + + 下一页 + Trang tiếp theo + + + + 0xb200 + + + + + 完成 + Đã hoàn thành + OK + + + + ModbusSerial + + 接收到开始打印命令 + Nhận lệnh in phun bắt đầu + + + 接收到暂停打印命令 + Nhận lệnh tạm dừng in phun + + + 接收到停止打印命令 + Nhận lệnh ngưng in phun + + + 接收到DM码数据命令 + Nhận lệnh dữ liệu mã DM + + + + MyFileDialog + + + 确定 + Xác định + + + + NetworkManager + + + Form + + + + + 手动设定 + Cài đặt bằng tay + + + + + IP: + + + + + Mask: + Mask: + + + + GW: + GW: + + + + 取消 + Hủy bỏ + + + + 有线LAN + Cáp LAN + + + + WiFi: + + + + + SSID: + + + + + Status: + + + + + auth: + + + + + Encryption: + + + + + Plaintext (open / no authentication) + + + + + 主获取数据按钮 + Nút bấm chính lấy dữ liệu + + + + Static WEP (no authentication) + + + + + Static WEP (Shared Key authentication) + + + + + IEEE 802.1X + + + + + WPA-Personal (PSK) + + + + + WPA-Enterprise (EAP) + + + + + WPA2-Personal (PSK) + + + + + WPA2-Enterprise (EAP) + + + + + 设备码: + Mã Thiết bị: + + + + 服务IP: + Dịch vụ IP: + + + + None + + + + + WEP + + + + + TKIP + + + + + CCMP + + + + + 8754 + 8754 + + + + 服务端口: + Dịch vụ Port: + + + + PSK: + + + + + AddNetwork + + + + + Password: + + + + + 获取数据 + Nhận dữ liệu + + + + Network: + + + + + 测试 + Thử nghiệm + + + + 应用配置 + Cấu hình ứng dụng + + + + 去掉数字码 + Loại bỏ mã số + + + + 去掉QR码 + Loại bỏ mã QR + + + + ScanSSID + + + + + Disconnect + + + + + Connect + + + + + Scan + + + + + Remove + + + + + 1 + 1 + + + + 47.111.170.144 + 47.111.170.144 + + + 错误 + Error + + + + wpa_supplicant service is not running. +Do you want to start it? + + + + + Disconnected + + + + + Inactive + + + + + Scanning + + + + + Authenticating + + + + + Associating + + + + + Associated + + + + + 4-Way Handshake + + + + + Group Handshake + + + + + Completed + + + + + Unknown + + + + + Could not get status from wpa_supplicant + + + + + Select any network + + + + + WPS AP in active PBC mode found + + + + + Press the PBC button on the screen to start registration + + + + + WPS AP with recently selected registrar + + + + + WPS AP detected + + + + + PBC mode overlap detected + + + + + More than one AP is currently in active WPS PBC mode. Wait couple of minutes and try again + + + + + Network configuration received + + + + + Registration started + + + + + Registrar does not yet know PIN + + + + + Registration failed + + + + + Registration succeeded + + + + + WPA Pre-Shared Key Error + + + + + WPA-PSK requires a passphrase of 8 to 63 characters +or 64 hex digit PSK + + + + + Network ID Error + + + + + Network ID String contains non-word characters. +It must be a simple string, without spaces, containing +only characters in this range: [A-Za-z0-9_-] + + + + + + Failed to add network to wpa_supplicant +configuration. + + + + + Failed to enable network in wpa_supplicant +configuration. + + + + + This will permanently remove the network +from the configuration. Do you really want +to remove this network? + + + + + Yes + + + + + No + + + + + Failed to remove network from wpa_supplicant +configuration. + + + + + 是否去获取数据! + Có phải để lấy được dữ liệu! + + + + 获取数据中... + Đang truy cập dữ liệu... + + + + + 上报数据中... + Đang báo cáo dữ liệu... + + + + + + + 提示 + Mẹo + + + + + IP设置错误! + IP cài đặt sai! + + + + 应用成功 + Ứng dụng thành công + + + + OtherInfo + + + Form + Form + + + + 相位位置: + Vị trí pha: + + + 相检墨点: + Phase Detect Dot: + + + 相检占空比(%) + PhaseDetectDuty + + + 相检电压(‰): + PhaseVol(‰): + + + + + 锁定相位 + Khóa pha ser + + + 相位偏移: + Phase Offset: + + + + 飞行时间: + Giờ bay mực: + + + + DetectDelay + + + + + detect_num + + + + + 相位偏移: + Offset pha ser: + + + + 相检: + Kiểm tra pha: + + + + FullTimeEn + + + + + DetectVol + + + + + HighLowRatio + + + + + 充电占空比100% + Sạc tỷ lệ tối đa 100% + + + + 相位检测电压: + 相位检测电压 + Điện áp pha kiểm tra: + + + + 检测延时: + Trì hoãn kiểm tra: + + + + 检测墨点数量: + 检测延迟 : + Kiểm tra số điểm mực: + + + 相检周期(墨点): + Detect Period(Dot): + + + + 应用当前配置 + Ứng dụng cấu hình hiện thời + + + + 频闪灯周期: + Chu kỳ đèn flash: + + + 充电占空比100% + ChargeDuty + + + + 提示 + Mẹo + + + + 应用成功 + Ứng dụng thành công + + + + 点 + Điểm + + + + 解锁相位 + Mở khóa pha ser + + + + PicEdit + + + Form + PictureEdit + + + 光栅高度 + Cursor height + + + + 缩小 + Thu nhỏ + + + + 放大 + Phóng to + + + 宽度 + Width + + + 新建 + NewFile + + + + 保存为 + Được lưu giữ + + + 打开 + OpenFile + + + 字体 + Font + + + + 5点阵 + 5 Điểm trận + + + + 7点阵 + 7 Điểm trận + + + + 9点阵 + 9 Điểm trận + + + + 12点阵宋体 + 12 Điểm trận loại Phông chữ Tống thể + + + + 16点阵宋体 + 16 Điểm trận loại Phông chữ Tống thể + + + + 16点阵黑体 + 16 Điểm trận loại Phông chữ đen + + + + 24点阵宋体 + 24 Điểm trận loại Phông chữ Tống thể + + + + 24点阵黑体 + 24 Điểm trận loại Phông chữ đen + + + + 列高 + Dọc cao + + + + 无加粗 + Không phông chữ đậm + + + + 加粗1倍 + Phông chữ đậm gấp 1 lần + + + + 加粗2倍 + Phông chữ đậm gấp 2 lần + + + + 显示控制符 + Dấu hiệu điều khiển hiển thị + + + 设定:高度 + Height + + + + 开启软键盘 + Bật bàn phím mềm + + + + 插入变量 + Chèn biến số + + + + 光栅[X:Y] + Raster [X:Y] + + + + CURR[X,Y] + + + + + 文件名 + Tên tập tin + + + + 字符光标 + Con trỏ ký tự + + + + 像素光标 + Con trỏ điểm ảnh + + + + 点击光栅可打开键盘,点击空白处关闭 + Nhấp vào Raster để mở bàn phím, nhấn vào chỗ trống để đóng + + + + 插入模式 + Cắm vào chế độ + + + + 放大比例 + Tỉ lệ Phóng to + + + + 行首 + Đầu dòng + + + + 行尾 + Cuối dòng + + + + 插入图片 + Cắm vào hình ảnh + + + + + 保存/打印 + Lưu/in phun + + + + 删除字符 + Xóa ký tự + + + + + + 字库编辑 + Biên tập chữ tồn kho + + + 新建图案 + New pattern + + + + 新建信息 + Thiết lập thông tin mới + + + + 粗体 + Chữ đậm + + + + 网格 + Lưới + + + 绘图 + Draw + + + + 字符间距 + Khoảng cách ký tự + + + 插变量 + Insert +Variable + + + + 插入/修改 + Chèn /sửa đổi + + + + 编辑现有的多字体 + Chỉnh nhiều phông chữ hiện có + + + 字符 +光标 + Character +Cursor + + + 像素 +光标 + Pixel +Cursor + + + + + + + + + + + 放大倍数:%1 + Phóng to lên: %1 + + + + + 插入模式 + Chế độ chèn + + + + + 修改模式 + Sửa đổi chế độ + + + 编辑现有的多字体文件 +请使用修改模式!!! + Use Revise mode while editing current multifont file! + + + + 点击光栅可打开键盘,点击空白处关闭 + Nhấp vào Raster để mở bàn phím, nhấp vào chỗ trống để đóng + + + + 字库保存 + Lưu chữ tồn kho + + + + + 返回信息编辑 + Trở về soạn thảo thông tin + + + + 请选择字体,打开键盘并输入要编辑的字符 + Hãy chọn phông chữ, mở bàn phím và gõ ký tự cần sửa + + + + 信息编辑 + Chỉnh sửa thông tin + + + + + + 提示 + Mẹo + + + + 图片已经改变,是否保存? + Hình ảnh đã thay đổi,có lưu hay không? + + + + + + 保存 + Lưu + + + + 编辑现有的多字体文件 +请使用修改模式!!! + + + + + 放弃保存 + Từ bỏ bảo tồn + + + + 文件另存为... + Tập tin được lưu lại... + + + + 另存为 + Còn lưu lại + + + + + + + + + 文件名: + Tên tập tin: + + + + 文件名:) + Tên tập tin:) + + + + 文件保存为... + Tập tin được lưu … + + + + 本条信息的变量超过规定数量! + Thông tin này các biến vượt quá số lượng! + + + + 按回车键(Enter)可增加新行. 选择字体,光栅会自动调整 + Nhấn nút Enter để thêm một dòng mới. Chọn phông chữ, Raster sẽ tự động điều chỉnh + + + + 选择[字体]可改变光标大小. + Chọn [phông chữ] để thay đổi kích cỡ con trỏ. + + + + 选择[绘图]方式,可以绘制任意图形 + Chọn cách [vẽ], bạn có thể vẽ bất kỳ đồ họa + + + + 光标不匹配时,不能输入或删除. + Khi con trỏ không khớp,Không thể nhập hoặc xoá. + + + + 点击空白处可关闭键盘. + Nhấp vào khoảng trống để tắt bàn phím. + + + + 通过[字库编辑]功能,用户可以自定义新字符 + Với chức năng [soạn thảo từ ngữ], người dùng có thể tùy chỉnh ký tự mới + + + + 选择[文本模式]可切换到主界面编辑方式. + Chọn [chế độ văn bản] để chuyển sang chế độ soạn thảo giao diện chính. + + + + 点击光栅可打开键盘,点击空白处关闭键盘 + Nhấp vào Raster để mở bàn phím, nhấp vào chỗ trống để tắt bàn phím + + + + 使用[字库编辑]功能,用户可自己修改字形 + Bằng cách sử dụng chức năng [soạn thảo từ ngữ], người dùng có thể tự thay đổi hình dạng phông chữ + + + + 打开文件 + Mở tập tin + + + Picture files (*.png) + Picture files (*.png) + + + + 是否立即喷印当前的文件? + Có in phun tập tin hiện tại không? + + + + 是 + Có + + + + 否 + Không + + + + PicWidget + + + Please input a char. + + + + + 请输入要编辑的字符 + Hãy nhập ký tự cần sửa đổi + + + + 编辑字符:%1 + Ký tự soạn thảo :%1 + + + + [%1行,%2列] + [%1 Line,%2 Column] + + + + 光标[%1,%2] + Con trỏ [%1,%2] + + + + + + + + + + + + + 警告 + Cảnh báo + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Chiều rộng hỗ trợ tối đa :%1, chiều cao :%2, yêu cầu hiện thời :%3 x %4 + + + + + + 请新创建建图片 + Xin vui lòng tạo hình ảnh mới + + + + + + 文件:%1 无法打开 + Tập tin :%1 không thể mở được + + + + 信息中的变量数超过了最大值(8)!请减小变量数. + Số biến trong thông tin vượt quá tối đa (8)! Làm ơn giảm số biến số. + + + 信息中的变量数超过了最大值(8)!,请减小变量数. + The number of variables in the information exceeds the maximum (8)! +Please reduce the number of variables. + + + + + 两个变量之间至少要空出一个墨点! + Hai biến số để trống ít nhất một điểm mực! + + + + PrintSetting + + + Form + + + + + 字体加粗: + Phông chữ in đậm: + + + + 字体宽度: + Phông chữ chiều rộng: + + + + + + + + 快速 + Nhanh + + + + + + + + + 标准 + Tiêu chuẩn + + + + + + + 慢速 + + + + + + 慢速1 + Chậm 1 + + + + + 慢速2 + Chậm 2 + + + + 慢速3 + Chậm 3 + + + + 慢速4 + Chậm 4 + + + + 慢速5 + Chậm 5 + + + + 慢速6 + Chậm 6 + + + + 慢速7 + Chậm 7 + + + + 慢速8 + Chậm 8 + + + + 慢速9 + Chậm 9 + + + + 打印模式: + In mô hình: + + + + 其它设置 + Cài đặt khác + + + + 产品计数器自动清0 + Bộ đếm sản phẩm tự +động quay số 0 + + + + 总产品计数器自动清0 + Bộ đếm sản phẩm tổng +tự động quay số 0 + + + + 高压故障关回收槽 + Cao áp trục trặc đóng +máng thu thập + + + + 无交替 + Không có sự thay đổi + + + + 普通交替 + Thay đổi bình thường + + + + 电眼触发交替 + Mắt điện kích hoạt sự thay đổi + + + + 导出随机码文本 + Tạo ra văn bản mã ngẫu nhiên + + + + 复位到起始值 + Đặt lại giá trị khởi đầu + + + 特殊变量结束值: + Giá trị kết thúc biến đặc biệt: + + + 特殊变量起始值: + Giá trị bắt đầu biến đặc biệt: + + + 打印 + In ấn + + + + 无 + Không + + + + 小屏 + Màn hình nhỏ + + + + 大屏 + Màn hình lớn + + + + 总产品计数值 + Giá trị tổng sản phẩm + + + + + 计数器1 + Bộ đếm 1 + + + + + 计数器2 + Bộ đếm 2 + + + + + + + 起始值: + Giá trị khởi điểm: + + + + + + + 结束值: + Giá trị kết thúc: + + + + + + 清零 + Xóa là 0 + + + + 可变长度 + Chiều dài biến đổi + + + + 计数器2设置 + Thiết lập bộ đếm 2 + + + + 重复次数: + Số lặp lại: + + + + + + + 增量值: + Tăng giá trị: + + + + 计数器1设置 + Thiết lập bộ đếm 1 + + + + 墨线时间 + Dây mực thời gian + + + + 墨线时间: + Dây mực thời gian: + + + + + + + 0 + 0 + + + + 开机次数: + khởi động máy số lần: + + + + 应用当前配置 + Ứng dụng cấu hình hiện thời + + + + 常用设置 + Thiết lậpthường sử dụng + + + 显示小数 + Hiện thập +phân + + + + yyyy-MM-dd + + + + + yyyy/MM/dd + + + + + yyyyMMdd + + + + + yyyy年MM月dd日 + + + + + yyyy-MM-dd hh:mm + + + + + yyyy/MM/dd hh:mm + + + + + yyyyMMddhhmm + + + + + yyyy年MM月dd日hh:mm + + + + + hh:mm + + + + + ddhhmm + + + + + 隐藏值米标: + + + + + 隐藏打印值 + + + + + 打印条件倍数值: + + + + + 使用隐藏功能时必须使用计数器1 + + + + + 米标显示 + Hiển thị tiêu chuẩn mét + + + + 上移 + Di chuyển +lên + + + + 下移 + Di chuyển +xuống + + + + 首行电压(%): + Điện áp dòng đầu tiên (%): + + + + 字高设置(%): + Thiết lập chữ cao (%): + + + + 行末电压(%): + Điện áp dòng cuối (%): + + + + 信息左右颠倒 + Thông tin trái phải đảo ngược + + + + 相位故障关机 + Lỗi pha tắt máy + + + + 信息上下颠倒 + Thông tin trên dưới đảo ngược + + + + 故障停止走米 + Lỗi dừng đếm số mét + + + + 相位故障不打印 + Lỗi pha không in phun + + + + 回收故障处理 + Xử lý lỗi thu thập + + + + 自然数计米 + Mét đếm số tự nhiên + + + + 超速暂停打印 + Quá tốc độ ngừng in phun + + + + 不打印走米 + Không in mét + + + 打印优化 + Print +optimization + + + + 电眼误触禁止 + Mắt tần chạm sai bị cấm + + + + TextLabel + + + + + 字形优化 + Tối ưu hóa hình dạng chữ + + + + 有效期(天): + Thời gian có hiệu lực (ngày): + + + 2018-05-24 + 24Dot {2018-05-24?} + + + 2018/05/24 + 24Dot {2018/05/24?} + + + + + 高级设置 + Cài đặt cao cấp + + + + + 交替扫描隔点(默认为1): + Quét xen kẽ các điểm khác nhau (mặc định là 1): + + + + 行末调整点模式: + Chế độ điều chỉnh điểm cuối dòng: + + + + 点距调整值(默认为0): + Điểm cách điều chỉnh trị (mặc định 0): + + + + + 扫描颠倒 + Quét đảo ngược + + + + 点距调整电压位置: + Điểm cách vị trí điều chỉnh điện áp: + + + + 行末调整点数(默认为0): + Số điểm điều chỉnh cuối dòng (mặc định 0): + + + + 去除冗点模式(默认懒惰): + Loại bỏ chế độ dư điểm (mặc định lười biếng): + + + + 懒惰模式 + Chế độ lười biếng + + + + 贪婪模式 + Chế độ tham lam + + + + 均衡模式 + Chế độ cân bằng + + + + + 冗点比例(默认为0%): + Tỷ lệ số dư (mặc định 0%): + + + + 行末点微调(‰): + Dòng cuối tinh chỉnh (‰): + + + + 修改授权 + Điều chỉnh ủy quyền + + + + 省点 + Tiết kiệm số điểm + + + + dd MM yy + + + + + + 调整电压 + Điều chỉnh điện áp + + + 推荐设置 + RecommendedSetting + + + + 使用推荐设置 + Sử dụng thiết lập khuyến nghị + + + 行业: + Ngành nghiệp: + + + + 快 + Nhanh + + + + 电线电缆 + Dây điện và cáp + + + + 制药/食品/电子 + Dược phẩm/thực phẩm/điện tử + + + + 建筑管材 + Ống xây dựng + + + + 其他 + Khác + + + 速度: + Tốc độ: + + + + 检测回收槽 + Kiểm tram áng thu thập + + + + + 锁定脉冲计数 + Nhịp Tim đã khóa + + + + 每条信息只打印一次 + Mỗi thông tin chỉ được in một lần + + + + 非字宽 + Không phải của chữ rộng + + + + 使用齿轮泵 + Sử dụng máy bơm bánh răng + + + + 高压阈值: + Ngưỡng áp suất cao: + + + + 不检测喷头盖 + Không kiểm tra nắp phun + + + + 维护时间: + Thời gian bảo trì: + + + + 新放大板 + + + + + 高速模式 + + + + + 打印时绿灯常亮 + Đèn xanh khi in thường xuyên sáng + + + + 复位发送打印数据 + Đặt lại để gửi dữ liệu in + + + + 计数器设置 + Thiết lập truy cập + + + + 小数点位数 + + + + + 注意:“其它设置”页下的"分段计米“勾选时,计数器1不可用。 + Lưu ý: khi đánh dấu " phân đoạn" dưới trang "thiết lập khác", bộ đếm 1 không dụng được. + + + + 计数器3 + Bộ đếm 3 + + + + 生产日期: + Ngày sản xuất: + + + + dd/MM/yy + + + + + dd/MM/yyyy + + + + + dd-MM-yy + + + + + dd-MM-yyyy + + + + + 计数器保存关机值 + Bộ đếm lưu các giá trị tắt máy + + + + 循环产品计数 + Số lượng sản phẩm tuần hoàn + + + + 距离尾部(mm): + Khoảng cách đuôi (mm): + + + 特殊条件计数 + Số đếm điều +kiện đặc biệt + + + + 首尾交替 + Đầu và đuôi đan xen + + + + 更换信息文件时执行的动作: + Các hành động được thực hiện +khi thay thế tệp thông tin: + + + + 外接显示屏: + Màn hình hiển +thị bên ngoài: + + + + 显示屏显示: + Hiển thị màn hình: + + + + 全部删除 + 删除全部 + Xóa tất cả + + + + + + + 打印电压缩放 + Thu nhỏ và phóng to in điện áp + + + + 整体缩放(%) : + Thu nhỏ và phóng to tổng thể(%): + + + + 插 入 + 插入 + Chèn + + + + 删 除 + 删除 + Xóa bỏ + + + + 添 加 + 添加 + Thêm + + + + 分段计米 + Phân đoạn +đếm mét + + + 喷印测试文件 + Print Test File + + + 备份测试文件 + Backup Test File + + + 备份系统参数 + BackupSysPara + + + + 交替打印设置 + Thiết lập in phun xen kẽ + + + + 起始位置: + Vị trí bắt đầu: + + + + 交替间隔: + Khoảng cách xen kẽ: + + + 交替打印 + AlternatePrint + Enable + + + 点距微调设置 + VoltageFineAdjSetting + + + + + + 重设值 + Thiết lập lại + + + + + + 重复数: + Số lặp lại: + + + + + + 当前值: + Giá trị hiện tại: + + + + + 计数器3设置 + Thiết lập bộ đếm 3 + + + + + + + 跳米设置 + Nhảy mét cài đặt + + + + 跳米数: + Số nhảy mét: + + + + 跳米打印 + In phun mét nhảy + + + + + + 输入密码 + 提升权限 + Nâng cấp quyền truy cập + + + + + 提示:交替参数不正确 + Gợi ý: các thông số thay thế không đúng + + + + 要求:起始位置<交替间隔 + Yêu cầu: vị trí bắt đầu < khoảng cách xen kẽ + + + + 要求:(重复次数+起始位置)<交替间隔 + Yêu cầu :(lặp lại số lượng + vị trí bắt đầu) &lt; khoảng cách + + + + + + + + + + + + 提示 + Mẹo + + + + 应用成功 + Ứng dụng thành công + + + %4d天 %02d:%02d:%02d + %4d Day %02d:%02d:%02d + + + + + + + + + + 警告 + Cảnh báo + + + + 是否确认使用推荐设置? + Xác nhận việc sử dụng thiết lập được giới thiệu? + + + + 系统维护设置成功! + Thiết lập bảo trì hệ thống thành công! + + + + 喷码机维护设置成功! + Thiết lập bảo trì máy in phun thành công! + + + + + + 错误 + Lỗi + + + + 不存在 + Không tồn tại + + + + 授权码: + Mã ủy quyền: + + + + 提示:可变长度参数不正确 + Gợi ý: các thông số chiều dài không phải là chính xác + + + + 要求:调整长度小于喷印间隔 + Yêu cầu: điều chỉnh chiều dài là ít hơn so với khoảng cách in phun + + + + 小时 + Giờ + + + + 错误 + Lỗi + + + + 密码: + Mật khẩu: + + + + 取消授权 + Hủy bỏ ủy quyền + + + + + + 其他设置 + + + + + + 超高速 + + + + + + 高速 + + + + + 软件初始化完成. + + + + + RFID卡清零! + + + + + 随机码文件为空,不需要导出 + Tập tin mã ngẫu nhiên là rỗng, không cần xuất ra + + + + 随机码文本将展出到U盘,请插入U盘 + Văn bản mã ngẫu nhiên sẽ được hiển thị trên thanh USB, vui lòng chèn thanh USB + + + + 计数器1(结束值-开始值)不能被增量整除,结束值将被设为%1 + Bộ đếm số 1(giá trị kết thúc - giá trị bắt đầu) không thể được chia thành số tăng lên, giá trị kết thúc sẽ được thiết lập là %1 + + + + 计数器1(结束-开始)不能被增量整除,结束值将被设为%1 + Bộ đếm 1(kết thúc - bắt đầu) không thể được chia thành số tăng, giá trị kết thúc sẽ được thiết lập là %1 + + + + 1 + 1 + + + + 正在打印第%1组设置,不可删除 + Đang in phun thiết lập nhóm %1, không được xoá bỏ + + + + 是否确认删除第%1组设置? + Có xác nhận việc gỡ bỏ thiết lập nhóm %1 không? + + + + 是否确认删除全部设置? + Có xác nhận xóa tất cả cài đặt? + + + + 字体宽度不能为0 + Chiều rộng chữ không thể là số 0 + + + + 是否立即重新计米? + Cố ngay lập tức đếm mét? + + + + 解锁脉冲计数 + Kích hoạt nhịp tim đếm số + + + + builTime:%1 + + + + + fpgaVersionNum: %1 + + + + + Type: %1 + + + + + FPGAVersion: %1 + + + + + FPGAType: %1 + + + + + 喷印间隔太小,无法正常打印!!! + + + + + 原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)! + + + + 点距电压微调 + Fine adjust the space voltage + + + + PulseNumFix + + + Dialog + + + + + 根据速度 + Theo tốc độ + + + + 根据喷印 + Theo in phun + + + + 根据脉冲数 + Theo số lượng xung điện + + + + 根据同步器参数 + Theo các thông số của bộ đồng bộ + + + + 实际皮带速度(毫米/秒): + Tốc độ băng chuyền thực tế (mm/giây): + + + + 实际喷印间隔长度(毫米): + Thực tế in phun khoảng chiều dài (mm): + + + + 长度(毫米): + Dài (mm): + + + + 同步脉冲数 + Số lượng các nhịp tim đồng bộ + + + + 同步器直径(毫米): + Đường kính đồng bộ (mm): + + + + 脉冲数/转: + Số nhịp tim/tốc độ: + + + + 脉冲数修正 + Sửa đổi nhịp tim + + + + + + + 错误 + Lỗi + + + + 速度不应该为0 + Tốc độ không nên là số 0 + + + + 实际同步长度不应该为0 + Chiều dài đồng bộ thực sự không nên là số 0 + + + + 长度不应该为0 + Chiều dài không nên là số 0 + + + + 直径不应该为0 + Đường kính không nên là số 0 + + + + QBarCode + + + Dialog + + + + + 条形码类型 + Loại mã vạch + + + 文本信息 + Input: + + + + 显示缩放 + Hiển thị thu nhỏ và phóng to + + + + 条形码高度 + Độ cao mã vạch + + + + 1点 + 1 điểm + + + + 2点 + 2điểm + + + + 3点 + 3điểm + + + + 4点 + 4điểm + + + + + 5点 + 5điểm + + + + 6点 + 6điểm + + + + 文本1 + Văn bản 1 + + + + 文本3 + Văn bản 3 + + + + 计数器2 + Bộ đếm 2 + + + + 文本2 + Văn bản 2 + + + + 计数器1 + Bộ đếm 1 + + + + 插入文档 + Chèn văn bản + + + + 条码保存 + Mã vạch được lưu + + + + 增加数字行 + Thêm số hàng + + + + 日期 + Ngày + + + + 时间 + Thời gian + + + + 条码宽度 + Chiều rộng mã vạch + + + 字体 + Font + + + 文本宽度调整 + TextWidth + + + 居中对齐 + CenterAlign + + + 左对齐 + LeftAlign + + + 右对齐 + RightAlign + + + 文本对齐 + TextAlign + + + 文本加粗 + TextBold + + + 插入到文档 + InsertToDoc + + + + FileName + + + + + 预览 + Duyệt trước + + + 条形码保存 + Save + + + + 墨水类型 + Loại mực + + + + 黑墨 + Mực đen + + + + 白墨 + Mực trắng + + + 条形保存 + Save + + + + 返回 + Trở lại + + + + 文件未保存 + Tập tin chưa được lưu + + + 5点阵 + 5 Matrix + + + 7点阵 + 7 Matrix + + + 9点阵 + 9 Matrix + + + 12点阵 + 12 Matrix + + + 16点阵 + 16 Matrix + + + + BARCODE_128 + CODE_128 + + + + + BARCODE_93 + + + + 自适应编码 + AUTO + + + + 7点 + 7 Điểm + + + + 9点 + 9 Điểm + + + + 12点 + 12 Điểm + + + + 16点 + 16 Điểm + + + + 24点 + 24 Điểm + + + + + 标签宽度:%1,标签高度:%2,文本宽度:%3 + Nhãn chiều rộng :%1, nhãn chiều cao :%2, chiều rộng văn bản :%3 + + + + QObject + + + 起始值 + Giá trị bắt đầu + + + + 结束值 + End(结束) + Giá trị kết thúc + + + + 循环值 + Loop(循环) + Giá trị chu kỳ + + + + + 手动设定 + Cài đặt bằng tay + + + + 应用 + Ứng dụng + + + + QTranslator + + 错误 + Error + + + DevOp构造函数的sysParam不能为空 + SysParam of the constructor can not be empty + + + 警告 + Warnning + + + 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! + Present column pixel: %1 , Uncharged dot rate: %2 , Too many uncharged dot, please correct your setting! + + + 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 + Short Font may caused by the data of line output transformer is uninitialized, your present operation will ignore all high voltage mistake + + + 喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短! + Printing interval is too short to fulfill width’s setting. The font width will be narrowed automatic! + + + 在同步计米的情况下无打印串或显示区域为零 + Cannot print the string or no display area under synchronized counting + + + 在同步计米的情况下喷印同步脉冲数过多,请检查你的配置 + Too much printing pulse under synchronized counting, please review your setting + + + 喷印字符串太短,请增加字符串长度或在打印设置中减少喷印长度 + Character string is too short, please add character string length, or reduce printing length in Print Setup + + + 喷印长度太短,请减少字符串长度或在打印设置中增加喷印长度 + Printing length is too short, please reduce character string length, or add printing length in Print Setup + + + + SceneEditOption + + + Form + + + + + 预览 + Xem thử + + + + 新建 + Mới đặt + + + + 打开 + Mở + + + + + 保存 + Lưu + + + + 另存为 + Lưu dưới +dạng + + + + 新增图元 + Mới tăng +biểu đồ + + + + 编辑图元 + Biên tập +biểu đồ + + + + 删除图元 + Xóa biểu đồ + + + + 放大 + Phóng to + + + + 缩小 + Thu nhỏ + + + + 提示 + Mẹo + + + + 文档已经改变,是否保存? + Tập tin đã thay đổi, Có lưu tồn hay không ? + + + + 放弃保存 + Bỏ tiết kiệm + + + + SystemManage + + + Form + + + + + 手动控制泵阀 + Điều khiển van +bơm bằng tay + + + 喷嘴逆清洗 + Nozzle Reverse +Cleaning + + + + 回收槽开 + Rãnh thu +thập mở + + + + + + + + + + + + + 停止 + Dừng lại + + + + 回收槽关 + Rãnh thu +thập đóng + + + 回路阀 + FeedBack +Valve + + + + 回收泵 + Máy bơm thu thập + + + + + 压缩机 + Máy nén khí + + + + 主墨泵 + Máy bơm chính + + + + 泄压阀 + Van giảm áp lực + + + + 循环阀 + Van tuần hoàn + + + + 墨水阀 + Van mực + + + + 粘度泵 + Máy bơm độ nhớt + + + + 混合阀 + Van trộn + + + + 时间设置 + Thời gian thiết lập + + + + 系统升级 + Nâng cấp hệ thống + + + + 排气 + Khí thải + + + + 导出配置到U盘 + Cấu hình vào ổ usb + + + + 自动清洗 + Tự động làm sạch + + + + 电机测试 + Kiểm tra động cơ + + + + 更新字库 + Thay thế mới +phông chữ + + + + 齿轮泵开 + Bơm bánh +răng mở + + + + 齿轮泵关 + Bơm bánh +răng tắt + + + + 导出字库 + Ra chữ +tồn kho + + + + 从U盘导入配置 + Cấu hình nhập từ usb + + + + 屏幕校正 + Hiệu chỉnh màn hình + + + + 更新软件 + Thay thế Phần mềm + + + + 出厂设置 + Thiết lập từ nhà máy + + + 系统备份 + System Backup + + + 设定机器码 + MachineryCodeSetting + + + + + + Cancel + + + + + (1/2) Cleaning, please wait... + + + + + + + + + + + + + + + + + + + + + 开 + Mở + + + + + + + + + + + + + + + + + + + + + 关 + Tắt + + + + + + + + + + + + + + + + + + 警告 + Cảnh báo + + + + + + + 请先移开喷头盖! + Xin vui lòng bỏ nắp vòi phun! + + + + 是否确认进入手动模式? + Xác nhận chuyển sang chế độ điều khiển bằng tay? + + + + 请先确认已经关闭回收槽,确认进入自动模式? + Xác nhận đã đóng máng thu thập, xác nhận vào chế độ tự động? + + + + + 手动 + Chế độ bằng tay + + + + + + 自动 + Tự động + + + + + + + + + + + 启动 + Khởi động + + + + Application + Application + + + + 是否确认更新字库? + Xác nhận thay thế mới phông chữ? + + + + 更新字库成功,重启后生效! + Thay thế mới phông chữ thành công, hiệu lực sau khi khởi động lại! + + + 是否恢复出厂设置? + Are you sure to resume the factory default ? + + + + 恢复出厂设置成功,请重新关机上电 + Khôi phục thiết lập từ nhà máy thành công, xin vui lòng tắt máy một lần nữa + + + + 校准触摸屏 + Hiệu chuẩn màn hình cảm ứng + + + + 是否确认开始校准程序?请小心进行校准! + Có xác nhận bắt đầu hiệu chuẩn lập trình không? xin cẩn thận với những hiệu chuẩn! + + + + 无法生成脚本 + Không thể tạo văn lệnh + + + + + + + 密码不正确! + Mật khẩu là sai! + + + + 是否确认更新软件? + Có xác nhận thay thế phần mềm mới? + + + + 软件更新成功,重启后生效! + Thay thế phần mềm thành công, hiệu lực sau khi khởi động lại! + + + + + + + + 错误 + Lỗi + + + + 没找到对应字库,更新失败! + Không tìm thấy thư mục tương ứng, thay thế thất bại! + + + + 更新失败! + Thay thế thất bại! + + + + 找不到更新软件! + Không thể tìm thấy phần mềm thay thế! + + + + 是否确认更新系统? + Có xác nhận hệ thống thay thế không? + + + + 系统更新成功,重启后生效! + Thay thế hệ thống thành công, hiệu lực sau khi khởi động lại! + + + + 文件不存在! + Văn bản không tồn tại! + + + + 压力 + Áp lực + + + + autoclean cancel or status: + + + + + (2/3) Cleaning + + + + + (3/3) Cleaning + + + + 混合阀打开3: + 混合阀打开3. + Van hỗn hợp mở 3: + + + + 配置文件/udisk/sysPara.bin不存在! + Cấu hình văn bản / udisk/ syspara.bin không tồn tại! + + + + autoclean start + + + + + 是否确认启动自动清洗? + Xác nhận bắt đầu tự động làm sạch? + + + + 是否确认墨水排除,加入清洗剂? + Có xác nhận mực ra đã xong , thêm chất tẩy rửa làm sạch? + + + + (1/3) Cleaning + (1/3) Cleaning + + + + 是否确认导出字库到U盘? + Có xác nhận phông chữ vào usb? + + + + U盘不可识别! + Usb không thể nhận dạng được! + + + + 字库导出完成! + Phông chữ xuất ra hoàn thành! + + + + 是否开始电机测试? + Bắt đầu kiểm tra động cơ? + + + + 正在排气,是否停止? + Đang xả khí, có nên dừng lại không? + + + 更新文件不存在! + Update file was not found! + + + 是否确认备份系统文件? + Confirm to backup system file? + + + 系统备份成功! + System backup suceess ! + + + 备份操作失败! + Backup operation failed! + + + + + + + + + + + + + + + + + 提示 + Mẹo + + + 开墨线 + Open InkLine + + + 关墨线 + Close InkLine + + + 清洗阀 + Clean Valve + + + 墨线阀 + InkLine Valve + + + 供墨阀 + InkValve + + + + 如果开始清洗,务必确认回收槽已经打开10毫米以上,并且在一分钟后将停止清洗 + Nếu bắt đầu làm sạch, hãy chắc chắn rằng rãnh thu thập đã mở hơn 10 mm, và sau một phút sẽ ngừng làm sạch + + + + 开始清洗 + Bắt đầu làm sạch + + + + 停止清洗 + Ngừng làm sạch + + + + 是否确认导出配置到U盘? + Có xác nhận cấu hình xuất ra vào ổ usb không? + + + + 检测不到U盘 + Không phát hiện được ổ usb + + + + 成功导出配置到U盘 + Xuất ra cấu hình thành công vào usb + + + + 是否确认从U盘导入配置? + Có xác nhận cấu hình nhập từ usb không? + + + 配置文件/udisk/sysPara.bin不存在! + configuration file /udisk/sysPara.bin does not exist! + + + + 从U盘成功导入配置,重启后生效! + Nhập cấu hình thành công từ usb, hiệu lực sau khi khởi động lại! + + + + SystemSetting + + + Form + + + + + 压力: + Áp lực: + + + + 粘度: + Độ nhớt: + + + + 高压包容差: + Dung sai cuộn cao áp: + + + 粘度校正: + ViscosityAdjustment: + + + + 回收槽开关时间: + Rãnh thu thập thời +gian mở và tắt: + + + + 喷头温度: + Nhiệt độ vòi phun: + + + + 电机电流: + Động cơ điện : + + + + 64K + 64K + + + + 76K + 76K + + + + 96K + 96K + + + + 晶振频率: + Tần số rung động: + + + + 粘度校正(%): + Độ nhớt hiệu chuẩn (%): + + + 83K + 24Dot {83K?} + + + + 新晶振 + Độ rung của tinh thể mới + + + + 场景模式 + Cảnh mô hình + + + + 墨水温度: + Nhiệt độ mực: + + + + + °C + °C + + + + 0 + 0 + + + + 0.6 + 0.6 + + + + 1.0 + 1.0 + + + + 1.6 + 1.6 + + + + 2.0 + 2.0 + + + + 脉冲计数器: + Bộ đếm xung: + + + + 隔膜位置偏移: + Vị trí màng bị lệch: + + + + 5 + 5 + + + + 10 + 10 + + + + 15 + 15 + + + + 20 + 20 + + + + 25 + 25 + + + + 30 + 30 + + + + 40 + 40 + + + + 45 + 45 + + + + 50 + 50 + + + + 55 + 55 + + + + 60 + 60 + + + + 喷嘴直径: + Đường kính vòi phun: + + + + 50 (UM) + 50 (UM) + + + + 60 (UM) + 60 (UM) + + + + 70 (UM) + 70 (UM) + + + + 风扇开启温度: + Nhiệt độ mở quạt: + + + + 重置高压 + Cài đặt lại cao áp + + + + 界面语言设置 + Thiết lập ngôn ngữ giao diện + + + + 应用当前配置 + Áp dụng cấu hình hiện tại + + + 脉冲计数: + Total Pulse: + + + + 粘度泵动作间隔(秒): + Bơm nhớt hoạt động +khoảng cách thời gian (giây): + + + + 晶振电压(%): + Điện áp rung mạch (%): + + + + 频率修正: + Chỉnh sửa tần số: + + + + Hz + Hz + + + + 回收泵力度(%): + Bơm thu thập lực độ (%): + + + + 隔膜位置: + Vị trí màng septum: + + + 混合阀管路: + MixingValvePiping: + + + 旧管路 + OldPiping + + + 新管路 + NewPiping + + + + 信息编辑模式: + Chế độ soạn thảo thông tin: + + + + 文本模式 + Mô hình văn bản + + + + 点阵模式 + Mô hình điểm định vị + + + 小喷嘴片 + Small Nozzle + + + 大喷嘴片 + Big Nozzle + + + + 喷嘴逆清洗 + Vòi phun rửa ngược + + + + 搜索最佳晶振频率 + Tìm tần số rung tinh thể tốt nhất + + + + 搜索最佳晶振电压 + Tìm kiếm điện áp rung tinh thể tốt nhất + + + + 128K + 128K + + + + + + + + + + + + 错误 + Lỗi + + + + 实际频率不能为%1 + Tần số thực tế không thể là %1 + + + + + 提示 + Mẹo + + + + 应用成功 + Ứng dụng thành công + + + + 自动清洗时间约为一分钟,然后自动停止 + Thời gian tự động làm sạch khoảng 1 phút, sau đó tự động dừng lại + + + + 开始清洗 + Bắt đầu làm sạch + + + + 停止清洗 + Ngừng rửa + + + 正在进入手动模式...... + Enter Manual Mode..... + + + + 正在喷嘴逆清洗...... + Vòi phun ngược lại làm sạch... + + + + 自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率? + Tự động tìm kiếm thời gian dài, xác nhận tìm kiếm tự động nhưng trước tần số 2K tần số rung tinh thể tốt nhất trong phạm vi? + + + + Tiếng Việt(Vietnamese interface) + + + + + Chinese interface(中文界面) + + + + + English interface(英文界面) + + + + 喷嘴逆清洗完成 + Nozzles Cleanning Finish. + + + 正在开回收槽...... + ReclaimTank Openning...... + + + 正在关回收槽...... + ReclaimTank Closing...... + + + + 清洗完成 + Làm sạch hoàn thành + + + 密码不正确! + Mật khẩu không đúng! + + + + + + Application + Application + + + + 是否更新高压包电流数据? + Có chuyển đổi dòng điện dữ liệu cuộn cao áp? + + + + + + 喷头盖未关,请先关喷头盖! + Nắp phun nước không đóng, xin hãy đóng nắp phun nước trước! + + + 重置高压前,请先关墨线! + Please Turnoff InkLine before Reset High voltage! + + + 重置高压前,请先关闭回收槽! + Please Turnoff ReclaimTank before Reset High voltage! + + + + + 墨线开关未开,请先打开墨线开关! + Dây mực công tắc chưa mở, xin vui lòng bật công tắc dây mực! + + + 墨线未打开! + InkLine Not Opened! + + + + + 回收槽未全部打开! + Rãnh thu thập chưa được mở ra! + + + + 自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压? + Tự động tìm kiếm thời gian dài, xin không hoạt động khác trong thời gian này, có xác nhận tìm kiếm điện áp tinh thể tốt nhất? + + + 自动搜索耗时较长,是否确认自动搜索但前频率1K范围内最佳晶振频率? + It may cost a long time to search automatically, Do you want to start automatical search but limit range within 1K Hz? + + + + 搜索的起始频率%1 HZ超出范围? + Tìm kiếm tần số bắt đầu %1 HZ ngoài phạm vi? + + + + 高压设置完成 + Hoàn thành thiết lập cao áp + + + 高压设置异常 + High Voltage Set False + + + 高压设置异常,本次重置操作无效! + High Voltage Set False! + + + + Oscillator Freq %1 --- 最长高电平时钟 %2 + Crystal Frequence %1 --- Mức độ cao điện đồng hồ %2 + + + + 最佳晶振频率完成 + Tối ưu tần số rung tinh thể hoàn thành + + + + + Oscillator voltage %1 --- 最长高电平时钟 %2 + Crystal voltage %1 --- Mức độ cao điện đồng hồ %2 + + + + + 最佳晶振电压完成 + Tối ưu điện áp rung hoàn thành + + + 警告 + Warnning + + + 确定要切换中英文界面? + You want to switch Language? + + + 重启后切换到英文界面 + Switch to English GUI After the restart + + + 重启后切换到中文界面 + Switch to Chinese GUI After the restart + + + + TextEditOption + + + Form + Form + + + + 新建 + Mới + + + + + 另存为 + Lưu dưới + dạng + + + + 预览 + Xem thử + + + + + + 保存 + Lưu + + + + 文件 + Tập tin + + + + 插变量 + Chèn các +biến số + + + + 间距 + Khoảng +cách + + + + 字体 + Phông chữ + + + + wenquanyi + wenquanyi + + + + 12 + 12 + + + + 点 + Điểm + + + + 粗体 + Chữ đậm + + + + + + + + + 警告 + Cảnh báo + + + + + + + 无法打开文件 + Không thể mở tập tin + + + + + Application + Application + + + + + 是否确认将文件内容追加到打开的文件? + Có xác nhận thêm nội dung tập tin vào tập tin mở không? + + + + 插入图片 + Chèn hình ảnh + + + + 插入文本 + Chèn văn bản + + + + 错误 + Lỗi + + + + TextEditOption 构造函数参数textEdit 不应当为空 + TextEditOption Tham số textEdit của hàm không nên rỗng + + + + 打开文件 + Mở tập tin + + + + 二维码变量设置 + Thiết lập biến mã qr + + + + 完成 + Hoàn thành + + + 另存为123 + SaveAs + + + + 以.txt保存将丢失所有格式,你是否愿意保存为.html格式? + TXT sẽ mất tất cả các định dạng, bạn có muốn lưu vào dạng HTML? + + + + 提醒 + Nhắc nhở + + + + 检测到有图片 %1 来自U盘,是否拷贝图片到本地? + Phát hiện có hình ảnh %1 từ usb, có sao chép hình ảnh vào địa phương? + + + + 无法保存文件 + Không thể lưu tập tin được + + + + 保存... + Tiết kiệm... + + + + 提示 + Mẹo + + + + 文档已经改变,是否保存? + Tài liệu đã thay đổi, có lưu giữ không ? + + + + 放弃保存 + Bỏ tiết kiệm + + + + TimeSettingDialog + + + Dialog + + + + + 秒: + giây: + + + + 分: + Phân chia : + + + + 月: + Tháng: + + + + 日: + Ngày: + + + + 时: + Khi: + + + + 年: + Năm: + + + + 设置时间 + Thiết lập thời gian + + + + TriggerCtrl + + + Form + + + + + 触发模式 + Kích hoạt chế độ + + + + 延时触发 + Kích hoạt chậm trễ + + + + 光电边沿触发 + Quang điện biên kích hoạt + + + + 光电电平触发 + Mức điện đã kích hoạt + + + + 同步器触发 + Bộ đồng bộ đã kích hoạt + + + + 脉冲数/毫米 + xung/milimet + + + + 喷印间隔(毫米) + In phun +khoảng (mm) + + + + 同步喷印模式 + Chế độ in +phun đồng bộ + + + + 按字符宽度 + Theo chiều rộng ký tự + + + + 按喷印比例 + Theo tỷ lệ in phun + + + + 字符宽度: + Chiều rộng ký tự: + + + + 重复次数 + Số lần lặp lại + + + + + + + + 重复间隔(毫秒) + Lặp lại khoảng cách +thời gian (mili giây) + + + + + + + 触发延时(毫秒) + Độ trễ kích hoạt (mili giây) + + + + 间隔模式: + Chế độ khoảng cách: + + + + 行末<->行首 + Dòng cuối <-> dòng đầu + + + + 行首<->行首 + Dòng đầu <-> dòng đầu + + + + 产生脉冲所需计数: + Phát ra các xung +cần thiết để đếm: + + + + + + + 延时(毫秒): + Chậm trễ (mili giây): + + + + 允许电眼复位 + Cho phép thiết lập lại mắt điện + + + + 允许电眼立即复位 + Cho phép thiết lập lại mắt điện ngay lập tức + + + + 电眼清零 + Mắt điện quay số 0 + + + + 镜像交替间隔 + Xen kẽ Khoảng +cách hình ảnh + + + + 镜象交替类型 + Xen kẽ loại hình ảnh + + + + 无镜像打印 + Không có in gương ảnh + + + + 自动水平翻转 + Tự động lật chiều ngang + + + + 自动垂直翻转 + Tự động lật thẳng đứng + + + + 中心对称旋转 + Trung tâm quay đối xứng + + + + 同步器正反转打印 + Bộ đồng bộ In dương và ngược + + + + 同步器只正转打印 + Bộ đồng bộ chỉ quay dương in + + + + 同步器只反转打印 + Bộ đồng bộ chỉ quay ngược in + + + + 脉冲信号值: + Tín hiệu số xung: + + + + + 封锁时间(毫秒) + Thời gian bị +khóa (mili giây) + + + 自动调速 + AutoSpeedEnable + + + + 同步打印 + In đồng bộ + + + + 同步器清零 + Bộ đồng bộ quay số 0 + + + + 脉冲数修正 + Hiệu chỉnh số xung + + + + 脉冲输出使能 + Kết quả xung 729 đã bật + + + + 禁止电眼清零 + Cấm mắt điện quay số 0 + + + 允许电眼清零 + AllowMagicEyeReset + + + 允许电眼立即清零 + AllowMagicEyeResetNow + + + 镜像交替间隔数 + Mirror interval + + + + 20131228-1 + 20131228-1 + + + + 应用当前配置 + Áp dụng cấu hình hiện tại + + + + 独立参数 + Tham số độc lập + + + + + + + 触发延时(毫米) + Độ trễ kích hoạt (mm) + + + + + + 重复间隔(毫米) + Lặp lại khoảng +cách thời gian (mm) + + + + + 封锁间隔(毫米) + Khoảng cách +phong tỏa (mm) + + + + + + + 延时(毫米): + Độ trễ (mm): + + + + 字符宽度 + Chiều rộng ký tự + + + + 喷印比例(%) + Tỷ lệ in phun (%) + + + + 提示:参数不正确 + Lời khuyên: Các thông số không chính xác + + + + 要求:触发长度小于喷印间隔 + Yêu cầu Chiều dài kích hoạt nhỏ hơn khoảng thời gian in phun + + + + 提示 + Mẹo + + + + 应用成功 + Ứng dụng thành công + + + + 封锁间隔(毫秒) + Khoảng cách +phong tỏa (mili giây) + + + + ZkEdit + + + Form + + + + ZiKuEdit + Font library Edit + + + + 编辑图案 + Biên tập + + + + 缩小 + Thu nhỏ + + + + 放大 + Phóng to + + + + 宽度 + Chiều rộng + + + + 新建 + Mới + + + + 高度 + Chiều cao + + + + + + 保存 + Lưu + + + + 保存为 + Lưu như + + + + 打开 + Mở + + + + 导入 + Nhập khẩu + + + + A + A + + + + 图像扩张 + Hình ảnh mở rộng + + + + 图像裁剪 + Sửa cắt hình ảnh + + + + 提示 + Mẹo + + + + 图片已经改变,是否保存? + Hình ảnh đã thay đổi, đã được lưu chưa? + + + + 放弃保存 + Bỏ tiết kiệm + + + + + + 放大倍数:%1 + Phóng to :%1 + + + + 图片另存为... + Hình ảnh được lưu … + + + + 另存为 + Lưu dưới dạng + + + + 打开文件 + Mở tập tin + + + + 图片保存为... + Hình ảnh được lưu lại cho… + + + + 导入文件 + Tập tin nhập vào + + + + dlgDrawInit + + + 图案参数设置 + Thiết lập các thông số thiết lập mẫu + + + + 图案宽度(像素) + Chiều rộng mẫu (điểm ảnh) + + + + 图案高度(像素) + Chiều cao của mẫu (điểm ảnh) + + + + 确定 + Xác định + + + + dlgQrCode + + + Dialog + + + + + 信息前缀 + Thông tin prefix + + + + 变量(初值) + Biến số (giá trị ban đầu) + + + + 信息后缀 + Suffix thông tin + + + + 默认 + Mặc định + + + + 8 x 18 + 8 x 18 + + + + 8 x 32 + 8 x 32 + + + + 12 x 26 + 12 x 26 + + + + 12 x 36 + 12 x 36 + + + + 16 x 36 + 16 x 36 + + + + 16 x 48 + 16 x 48 + + + + DM码尺寸: + Kích thước DM: + + + + 自动插入时间 + Thời gian chèn tự động + + + + 变量增量 + Gia tăng biến số + + + 增量 + Increment + + + + 返回 + Quay lại + + + + + TextLabel + TextLabel + + + 信息 + Text: + + + + 正相打印 + In dương pha + + + + 反相打印 + In ngược pha + + + + DataMatrix + DataMatrix + + + + QRCode + QRCode + + + + 插入文档 + Chèn tài liệu + + + + 计数器(变量) + Bộ đếm (biến số) + + + + 保存 + Lưu + + + + 预览 + Xem thử + + + + 条形码 + Mã vạch + + + 插入到文档 + InsertToDoc + + + + 自动刷新 + Tự động cập nhật + + + 黑墨 + BlackInk + + + 白墨 + WhiteInk + + + + 警告 + Cảnh báo + + + + 输入内容超出选择DM码尺寸大小,请选择更大的尺寸! + Nhập các nội dung vượt quá kích thước chọn kích thước DM, hãy chọn kích thước lớn hơn! + + + + [%1 X %2] + [%1 X %2] + + + + logo_Form + + + Form + + + + + zkWidget + + + + 警告 + Cảnh báo + + + + 最大支持宽度:%1 高度:%2 当前请求:%3 x %4 + Chiều rộng hỗ trợ tối đa :%1, chiều cao :%2, yêu cầu hiện thời :%3 x %4 + + + + 请新创建建图片 + Xin vui lòng tạo hình ảnh mới + + + 文件:%1 无法打开 + Document %1 cannot be opened + + + diff --git a/x86_build b/x86_build new file mode 100644 index 0000000..6a01a85 --- /dev/null +++ b/x86_build @@ -0,0 +1,2 @@ +/usr/local/Trolltech/QtEmbedded-4.6.3/bin/qmake -project +/usr/local/Trolltech/QtEmbedded-4.6.3/bin/qmake diff --git a/zkWidget.cpp b/zkWidget.cpp new file mode 100644 index 0000000..efa9e0e --- /dev/null +++ b/zkWidget.cpp @@ -0,0 +1,359 @@ +/* + * zkWidget.cpp + * + * Created on: Jul 2, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#include "zkWidget.h" +#include +#include +#include +#include +#include "SysPara.h" + +zkWidget::zkWidget(QWidget *parent):QWidget(parent){ + memset(pointMap,0,sizeof(pointMap)); + heightPoint = 0; + widthPoint = 0; + scale = 16; + currXpos = 0; + currYpos = 0; + modified = false; +} + +zkWidget::~zkWidget(){ + +} + +void zkWidget::paintEvent(QPaintEvent *event){ + QPainter painter(this); + QRect rect = event->rect(); + int x = (int)(rect.x()/scale); + int y = (int)(rect.y()/scale); + int x_ = rect.x() + rect.width(); + int y_ = rect.y() + rect.height(); + int last_x = x_/scale; + int last_y = y_/scale; + //qDebug() << "x:" << rect.x() << "y:" << rect.y() << "width:" << rect.width() << "heigh:" << rect.height(); + for(int i = x; i < widthPoint && i <= last_x; i++){ + for(int j = y; j < heightPoint && j <= last_y; j++){ + QPen pen; + int width = 0; + if(currXpos == i && currYpos == j){ + width = (scale>4)?2:1; + pen.setColor(QColor(Qt::red)); + + } + else { + width = (scale > 3)?1:0; + pen.setColor(QColor(Qt::gray)); + } + pen.setWidth(width); + painter.setPen(width?pen:Qt::NoPen); + if(pointMap[i*MAX_PIC_WIDGET_HEIGHT + j]){ + painter.setBrush(QColor(Qt::black)); + } + else{ + painter.setBrush(QColor(Qt::white)); + } + painter.drawRect(i*scale + width,j*scale + width,scale - 2*width,scale - 2*width); // + } + } +} + +void zkWidget::mousePressEvent ( QMouseEvent * event ){ + int x = (int )(event->x()/(scale)); + int y = (int )(event->y()/scale); + + if(x < widthPoint && y < heightPoint){ + int oriX = currXpos; + int oriY = currYpos; + currXpos = x; + currYpos = y; + pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] = pointMap[x*MAX_PIC_WIDGET_HEIGHT + y]?0:1; + update(oriX*scale,oriY*scale,scale,scale); //将原来的焦点去掉 + update(x*scale,y*scale,scale,scale); + modified = true; + emit picWidgetModify(widthPoint,heightPoint); + } + +} + +void zkWidget::currPositionMove(int shiftX,int shiftY,bool moveAllPic,bool trimPic,bool expandPic) +{ + if((widthPoint && heightPoint) || expandPic){ + if(moveAllPic){ + shiftX = - shiftX; + shiftY = -shiftY; + int init_x = (shiftX < 0)?(widthPoint - 1):0; + int end_x = (shiftX >= 0)?(widthPoint):-1; + int step_x = (shiftX < 0)?-1:1; + int init_y = (shiftY < 0)?(heightPoint - 1):0; + int end_y = (shiftY >= 0)?(heightPoint):- 1; + int step_y = (shiftY < 0)?-1:1;; + for(int x = init_x; x != end_x; x+= step_x){ + for(int y = init_y; y != end_y; y+= step_y){ + int new_x = x + shiftX; + int new_y = y + shiftY; + if(new_x < 0 || new_x >= widthPoint || new_y < 0 || new_y >= heightPoint){ + //pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] = trueColorEnable?backGround.rgba():0xffffffff; + pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] = 0x00000000; + } + else + pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] = pointMap[new_x*MAX_PIC_WIDGET_HEIGHT + new_y]; + } + } + update(); + } + else if(trimPic){ + + int diffX = (widthPoint > qAbs(shiftX))?qAbs(shiftX):widthPoint; + int diffY = (heightPoint > qAbs(shiftY))?qAbs(shiftY):heightPoint; + if(shiftX > 0){ + currPositionMove(- diffX,0,true,false,false); + } + if(shiftY > 0){ + currPositionMove(0,-diffY,true,false,false); + } + heightPoint -= diffY; + widthPoint -= diffX; + resize(widthPoint*scale,heightPoint*scale); + update(); + } + else if(expandPic){ + int diffX = ((MAX_PIC_WIDGET_WIDTH - widthPoint) > qAbs(shiftX))?qAbs(shiftX):(MAX_PIC_WIDGET_WIDTH - widthPoint); + int diffY = ((MAX_PIC_WIDGET_HEIGHT - heightPoint) > qAbs(shiftY))?qAbs(shiftY):(MAX_PIC_WIDGET_HEIGHT - heightPoint); + for(int y = 0; y < heightPoint + diffY;y ++){ + for(int x = 0; x < widthPoint + diffX; x++){ + if(y < heightPoint && x < widthPoint){ + + } + else { + //pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] = trueColorEnable?backGround.rgba():0xffffffff; + pointMap[x*MAX_PIC_WIDGET_HEIGHT + y] = 0x0000000; + } + } + } + heightPoint += diffY; + widthPoint += diffX; + resize(widthPoint*scale,heightPoint*scale); + if(shiftX < 0){ + currPositionMove(diffX,0,true,false,false); + } + if(shiftY < 0){ + currPositionMove(0,diffY,true,false,false); + } + //qDebug() << "diffX:" << diffX << "diffY:" << diffY << "heightPoint:" << heightPoint << "widthPoint" << widthPoint; + update(); + } + else { + int oriX = currXpos; + int oriY = currYpos; + currXpos += shiftX; + currYpos += shiftY; + currXpos = (currXpos >= 0)?(currXpos%widthPoint):(currXpos + widthPoint); + currYpos = (currYpos >= 0)?(currYpos%heightPoint):(currYpos + heightPoint); + update(oriX*scale,oriY*scale,scale,scale); + update(currXpos*scale,currYpos*scale,scale,scale); + } + emit picWidgetModify(widthPoint,heightPoint); + } +} +void zkWidget::ensureCurrPos(){ + if(heightPoint && widthPoint){ + int x = currXpos; + int y = currYpos; + + for(int i=0;igeometry().width(); + int height = widget->geometry().height(); + int scaleX = w?width/w:width; //不要除零 + int scaleY = h?height/h:height; + scaleX = scaleX > 0?scaleX:1; //scale不能小于零 + scaleY = scaleY > 0?scaleY:1; + scale = scaleX > scaleY?scaleY:scaleX; + } + currXpos = 0; + currYpos = 0; + memset(pointMap,0,sizeof(pointMap)); + resizeWidget(w,h); + modified = false; +} + + +void zkWidget::resizeWidget(int w,int h){ + if(w > MAX_PIC_WIDGET_WIDTH || h > MAX_PIC_WIDGET_HEIGHT){ + QMessageBox::warning(0,tr("警告"),tr("最大支持宽度:%1 高度:%2 当前请求:%3 x %4").arg(MAX_PIC_WIDGET_WIDTH).arg(MAX_PIC_WIDGET_HEIGHT).arg(w).arg(h)); + widthPoint = (w > MAX_PIC_WIDGET_WIDTH)?MAX_PIC_WIDGET_WIDTH:w; + heightPoint = (h > MAX_PIC_WIDGET_HEIGHT)?MAX_PIC_WIDGET_HEIGHT:h; + } + else{ + widthPoint = w; + heightPoint = h; + } + resize(w*scale,h*scale); + update(); +} + + +void zkWidget::enlargeDisplay(){ + if(scale < (1<<10)){ + scale = scale + ((scale>2)?scale/2:1); + resize(widthPoint*scale,heightPoint*scale); + update(); + } +} + + +void zkWidget::reduceDisplay(){ + if(scale > 1){ + scale = scale - ((scale > 2)?scale/3:1); + resize(widthPoint*scale,heightPoint*scale); + update(); + } +} + +void zkWidget::setScale(int scale){ + if(scale > 1) + this->scale = scale; + else + scale = 1; + resize(widthPoint*scale,heightPoint*scale); + update(); +} + +void zkWidget::loadImage(QString filename,bool forceSize,QString charStr,QFont *font){ + if((widthPoint == 0 || heightPoint == 0) && forceSize){ + QMessageBox::warning(0,"警告","请新创建建图片"); + } + else { + bool forceForegroundBackgroundColorFill = false; + QImage img; + QFile file(filename); + if(!filename.isEmpty() && file.exists()) + img.load(filename); + else if(charStr.size()){ + if(font){ + QFontMetrics fontMetrics(*font); + //int rightBearing = fontMetrics.rightBearing(QChar(unicode)); + //int leftBearing = fontMetrics.leftBearing(QChar(unicode)); + int width = forceSize?widthPoint:(fontMetrics.width(charStr)) ; + int height = forceSize?heightPoint:(fontMetrics.ascent() + fontMetrics.descent()); + if(width == 0){ + QMessageBox::warning(0,"警告",QString("字串:%1 在字体%2中不存在").arg(charStr).arg(font->family())); + return ; + } + QSize size(width,height); + QImage image(size,QImage::Format_ARGB32); + img = image; + img.fill(0xffffffff); + QPainter painter(&img); + painter.setFont(*font); + painter.drawText(QPoint(0,fontMetrics.ascent()),charStr); + forceForegroundBackgroundColorFill = true; + } + } + if(img.isNull()){ + QMessageBox::warning(0,"Warning",QString("File:%1 open failed").arg(filename)); + } + else { + int w = img.rect().width(); + int h = img.rect().height(); + memset(pointMap,0,sizeof(pointMap)); + if(!forceSize){ + widthPoint = (w > MAX_PIC_WIDGET_WIDTH)?MAX_PIC_WIDGET_WIDTH:w; + heightPoint = (h > MAX_PIC_WIDGET_HEIGHT)?MAX_PIC_WIDGET_HEIGHT:h; + resize(widthPoint*scale,heightPoint*scale); + } + QRgb argb = 0; + for(int i = 0; i < widthPoint;i++){ + for(int j = 0; j < heightPoint ; j++){ + bool pixelVisible = false; + int init_x = i*w/widthPoint; + int end_x = (w >= widthPoint)?(i + 1)*w/widthPoint:init_x + 1; + int init_y = j*h/heightPoint; + int end_y = (h >= heightPoint)?(j + 1)*h/heightPoint:init_y + 1; + for(int l = init_x; l < end_x; l++){ + for(int m = init_y; m < end_y; m ++){ + argb = img.pixel(l,m); + //qDebug() << "i:" << i << "j" << j << " " << QString::number(argb,16); + if(argb == 0xffffffff) //节约时钟周期 + continue; + if((argb & 0xff000000) && (((argb&0xff0000) < 0x800000) + || ((argb&0xff00) < 0x8000) || ((argb&0xff) < 0x80))){ + pixelVisible = true; + break; + } + } + if(pixelVisible) + break; + } + if(pixelVisible) + pointMap[i*MAX_PIC_WIDGET_HEIGHT + j] = 1; + } + } + update(); + setModified(false); + } + } +} +void zkWidget::saveImage(QString filename){ + if(widthPoint == 0 || heightPoint == 0){ + QMessageBox::warning(0,tr("警告"),tr("请新创建建图片")); + } + else { + QSize size(widthPoint,heightPoint); + QImage image(size,QImage::Format_ARGB32); + image.fill(qRgba(0,0,0,0xff)); + for(int i = 0 ; i < widthPoint; i++){ + for(int j = 0; j < heightPoint; j++){ + image.setPixel(i,j,pointMap[i*MAX_PIC_WIDGET_HEIGHT + j]?0xff000000:0xffffffff); + } + } + filename = DOC_ROOT_DIR+ QFileInfo(filename).baseName()+".jpg"; + image.save( filename ); + } + setModified(false); +} diff --git a/zkWidget.h b/zkWidget.h new file mode 100644 index 0000000..1a70c0d --- /dev/null +++ b/zkWidget.h @@ -0,0 +1,73 @@ +/* + * zkWidget.h + * + * Created on: Jul 2, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef ZKWIDGET_H_ +#define ZKWIDGET_H_ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#define MAX_PIC_WIDGET_HEIGHT 256 +#define MAX_PIC_WIDGET_WIDTH 256 +class zkWidget:public QWidget{ + + Q_OBJECT + +public: + explicit zkWidget(QWidget *parent = 0); + ~zkWidget(); + + void resizeWidget(int w,int h); + void initWidget(int w,int h); + //void loadImage(QString filename,bool forceSize = true); + void loadImage(QString filename,bool forceSize = true ,QString charStr = "",QFont *font = 0); + void saveImage(QString filename); + void enlargeDisplay(); + void reduceDisplay(); + void setScale(int scale); + + void paintEvent(QPaintEvent *); + void mousePressEvent ( QMouseEvent * event ); + + //void currPositionMove(int shiftX,int shiftY); + void currPositionMove(int shiftX,int shiftY,bool moveAllPic,bool trimPic,bool expandPic); + void ensureCurrPos(); + int getScaleValue(); + bool isModified(); + + + int getHeight(); + int getWidth(); + +Q_SIGNALS: + void picWidgetModify(int w,int h); + +private: + unsigned char pointMap[MAX_PIC_WIDGET_HEIGHT * MAX_PIC_WIDGET_WIDTH]; + int heightPoint; + int widthPoint; + int scale; + + int currXpos; + int currYpos; + bool modified; + void setModified(bool m); + + +}; + +#endif /* PICWIDGET_H_ */ diff --git a/zkedit.ui b/zkedit.ui new file mode 100644 index 0000000..44b8835 --- /dev/null +++ b/zkedit.ui @@ -0,0 +1,439 @@ + + + ZkEdit + + + + 0 + 0 + 800 + 600 + + + + Qt::StrongFocus + + + Form + + + + + + + + false + + + Qt::AlignCenter + + + + + 0 + 89 + 400 + 400 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 16777215 + 20 + + + + 编辑图案 + + + + + + + + 180 + 20 + + + + + + + + + + + 0 + + + 30 + + + + + + 50 + 50 + + + + + 50 + 50 + + + + + + + + :/icon/arrowdown.png:/icon/arrowdown.png + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + + + + + :/icon/sure.png:/icon/sure.png + + + + 24 + 24 + + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + + + + + :/icon/arrowleft.png:/icon/arrowleft.png + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + + + + + :/icon/arrowup.png:/icon/arrowup.png + + + + + + + + 50 + 50 + + + + + 50 + 50 + + + + + + + + :/icon/arrowright.png:/icon/arrowright.png + + + + + + + + + 5 + + + + + + 0 + 45 + + + + 缩小 + + + + :/icon/zoomout.png:/icon/zoomout.png + + + + + + + 保存 + + + + :/icon/filesave.png:/icon/filesave.png + + + + + + + 新建 + + + + :/icon/filenew.png:/icon/filenew.png + + + + + + + + 0 + 0 + + + + + 16777215 + 37 + + + + 1 + + + 256 + + + 12 + + + + + + + 保存为 + + + + :/icon/filesaveas.png:/icon/filesaveas.png + + + + + + + + 16777215 + 20 + + + + 高度 + + + + + + + 图像扩张 + + + + + + + 打开 + + + + :/icon/fileopen.png:/icon/fileopen.png + + + + + + + + 16777215 + 20 + + + + 宽度 + + + + + + + false + + + + 0 + 0 + + + + + 80 + 16777215 + + + + A + + + 11 + + + + + + + + 0 + 0 + + + + 1 + + + 256 + + + 12 + + + + + + + + 0 + 45 + + + + 放大 + + + + :/icon/zoomin.png:/icon/zoomin.png + + + + + + + 导入 + + + + :/icon/fileimport.png:/icon/fileimport.png + + + + + + + 图像裁剪 + + + + + + + + + + + + + + zkWidget + QWidget +
      zkWidget.h
      + 1 +
      +
      + + + + +
      diff --git a/压力调节算法迁移.md b/压力调节算法迁移.md new file mode 100644 index 0000000..fa5eea8 --- /dev/null +++ b/压力调节算法迁移.md @@ -0,0 +1,66 @@ +# 压力调节算法迁移方案 + +## 概要 +将 `latest` 目录中更新后的 `InkJetPrinter` 的压力调节算法(包括改进的 PID/闭环逻辑、软启动、滑动平均与限速保护等)迁移到当前工作分支的 `InkJetPrinter.cpp`,保持行为一致并减少对现有模块的破坏。 + +## 迁移范围 +- 源:`latest/InkJetPrinter.cpp` 中的以下实现段 + - 新的/改进的 `pressureAdj()` 实现 + - `PID_realize2()`(若存在)与 `PID_realize()` 的改进版本 + - 相关静态/成员变量(滑动平均缓冲、状态标志、计数器等) +- 目标:当前工作区的 `InkJetPrinter.cpp` / `InkJetPrinter.h` + +## 详细迁移步骤 +1. 分析对比 + - 在 `latest` 与当前文件中逐段对比 `pressureAdj()`、PID 函数及相关变量,记录差异点(参数边界、默认值、节拍周期、限幅等)。 +2. 提取实现 + - 从 `latest/InkJetPrinter.cpp` 中拷贝完整的 `pressureAdj()` 函数体与所依赖的辅助函数(例如 `PID_realize2()`、改进版 `PID_realize()`),并保留原始注释以便审查。 +3. 更新头文件 + - 比对 `InkJetPrinter.h`,若 `latest` 新实现引入了新的成员变量(如滑动平均缓冲 m_pressureBuf、m_bufIdx、m_bufValidCount、m_rampDone、m_adjSkip、m_lastAvgPressure 等),将这些成员同步到当前 `InkJetPrinter.h`(注意初始化与默认值)。 +4. 备份与集成 + - 在修改目标文件前,先创建 `InkJetPrinter.cpp.bak`(或使用 VCS 提交快照)。 + - 将提取的实现合并入当前 `InkJetPrinter.cpp`: + - 保持现有函数签名不变 + - 用条件编译或注释标注替换点,便于回滚 +5. 修正依赖与宏 + - 确认 `#ifdef`/`#define` 宏一致(例如 `__DAC_ADJ_FUNCTION__`、`SYS_LINUX` 等),修正配置差异或添加兼容分支。 +6. 编译与静态检查 + - 在本地构建项目(或运行 `make`/IDE 编译),修复因函数声明/类型或命名冲突导致的编译错误。 +7. 功能验证 + - 在测试环境下运行(或使用连接到硬件的板子)验证: + - 软启动流程(m_rampDone 行为) + - 压力超限的硬保护与限速 + - 回收泵模式下限速与 maxValue 行为 + - 滑动平均对短期噪声的耐受性 + - 记录测试数据(压力曲线、gearPumpValue 变化)以便对照。 +8. 记录与回滚 + - 将变更写入变更日志并提交到分支。 + - 若出现问题,使用备份或 VCS 回滚,并记录原因与修复建议。 + +## 关键代码位置(建议) +- 源文件(最新实现参考):`latest/InkJetPrinter.cpp` (检查 `pressureAdj`、PID 相关实现) +- 目标文件:`InkJetPrinter.cpp`、`InkJetPrinter.h` + +## 验证要点 +- 功能:压力能稳定在目标值附近(±0.5 至 ±5,基于阈值) +- 稳定性:避免震荡与超调(观察步长、delta 限幅 maxDelta) +- 安全:在速度报警或 gearPumpRunStopFlag 时,必须能把 `gearPumpValue` 置 0 +- 性能:软启动和闭环节拍(800ms / 200ms)符合预期 + +## 风险与缓解 +- 风险:新版算法可能依赖 `sysPara` 中的字段初始化或外部状态变化导致行为差异。 + - 缓解:逐步合并并在每步运行单元测试或人工观测点(打印日志) +- 风险:硬件差异导致限速参数不合适 + - 缓解:在 `InkJetPrinter.h` 中保留可调参数并提供运行时调整入口 + +## 预估时间 +- 分析对比:1–2 小时 +- 代码合并与头文件更新:1–3 小时 +- 编译修复:0.5–2 小时(视错误数量) +- 测试与验证:2–4 小时(含硬件运行) + +--- + +如需,我可以: +- 立即开始第 1 步(分析差异并生成差异清单); +- 或直接把 `latest` 中的 `pressureAdj()` 与相关函数合并到当前 `InkJetPrinter.cpp`(我会在修改前备份)。

      S-s?yGG~$ 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%0DYhIhl&`m&(VUxpB)=ym6 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 Xw&WlA47ES4{*hFM#W|Z(1Ule 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

      @S zL#u6>LRE&;YzDG0glER&G6H~M!$RVUEBv0X{-Sj*bvn2KbiKi*3pL!TbyZirsgInr z*N79Xk~<>LP{rza+u-MGd_BsPW}Y=8SFWl2J2ww6J#tuCP<5xl{La=kaE`{}k*do; zgjSuZFqy@&twrorQEhA4?1KU_dYc=xww?$Pbvm|0uaYuh>s&H{+D}nP=Fn>n84?q4 zBLqyA+JG4W7*9K*BvjoxSp}aw_-f7Ug-ST9>lbMzC_KOsFs_uP*eZ?9IPLQWW&s0; zApq!c%`0qeb#6vyw@#wWuoI4qIGh8{4$xNpN4HyJ08=P7b+dz;=Kgj0uk5fNIjr!0 zyyTB~B>Fv0eXS;t1%-n8_;F-CcyJ>+2-ag94;ci31&iUYieBu^& z1UstYoQRo;2?HuVuzM!eOX1SNT)|)g8MCdd&XqG75pgFD;2qX6dqB(OKc&Bew`r|{ z*rsj{|83|-|2uDv4|GI5?9#->L5u1Dki&Nxnc#wHz(D6*h}#mqfeIaX8x^x+-{y3+ z;*vHW%YEXhP*bD!H-uZZg)>d9Z z!(ZMoFdsi*0|8sT@a(Urju~Izp?dNy%2Ykp`JJN$1cM`qk(L;&ah`nb*rhSY9mfT} zoa~yusM0HB3JCNd-N8}4fderxM_y;W}&+z#bKIJkKbhw`C* z$4!Trj|k3}rN5hj|p8L8MO65RB$p(RpDq zj3V2Zf-(`|+Hwt@TI^+m9ctp$E_I&?w}BDuyLy)PL?b1Rw5r1ju-gQ1$l+Eg&ejg* zgV@L$IG7JMpwo4oZnPfUNgw(9tA38Xz~6=j2d8Fu@6cL?k7?Vo;08tv(YNM62v{=5lugZEXFIv5IGQl7L_a%5f^2v!6$r!29ZL0i_D0H!ZM%6xVd z9%qC0oTm&8z)4%U3LAlsTXS*R;$k^!K+74ln|8V*TlTq$%x>63F~Q7wr_&W;#e#bT zZZq(?n)QtHSO)+d=4x&ZhV0_3p!Neuo?`e;;vdck*x9N(q1gss{IAB5U zkORCqusbU6Hg6;>yYil)k%D%2l${uG6Ydg~qN`crp+mc<;;=$6Oy$&>shdiTDo+_& z&=L5Q8c@je+3^l6aKKNQI7bwiuEyfZHsZ3PnwzTv!)kCF%qLdLKIZ3X@og0Gh*4L@ z8%7_(_*hR=Y0EV}$M&^ygKGxl{C``4-CvVGF=@fT6ZqtX6|8q9wxBit5fDQV z__>-=6)Fz8_-Esw)MZEz8MA7>AVH^J^JSxZY!~m8W_$ht<^y7MtW|X!5GkTIbObgX zh?JmO44g*8(}Kv1t>$gI#XA)_ru?<6=zO8ILRV)#i~_7RU^_^E`^xSp6BJvX3UcE7 z(iCykWLf7?@21dTh)2R5qGhJZ*m>T`RDGL7ZUs`M%{?6`dvzZ$=mq2 z^rlz0d5WxZYSZT0ys~10*Z74VBKA34sL*OcMOU_=+j=c}g14=D6oGD4b>~5@exOqS z*;;F1`9H4gHiOFUb7Np|R4Tj(%zRA+@phHA$+ayp+;lBcn6Iexf`zQgwK2=``mM2J+`cvG4zaoQ@Taf1#B~xMpsS|$7fvugmd%7`NPo9!87P6KFr)M ztS7<}u-4kt4cE3ZmFt;}qu$Cc-ur1Apf@*v)S3FIoQNXv_idd=E4d>)jdoOhIH*B| zreULrfq>?%k@-(i++D0H(&rvUxAU%BL*td;u(gzV(E2w( lx4N?PUwd!bH2wGg4*+z9t^RhC`tAS#002ovPDHLkV1nom_1FLa literal 0 HcmV?d00001 diff --git a/icon/startprint1.png b/icon/startprint1.png new file mode 100644 index 0000000000000000000000000000000000000000..f879b633814ec468b2987d9e05d4df69c9553288 GIT binary patch literal 6918 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 LNkvXXu0mjfW4DBr literal 0 HcmV?d00001 diff --git a/icon/stopprint1.png b/icon/stopprint1.png new file mode 100644 index 0000000000000000000000000000000000000000..df72b1b12146f51f085834d43d56ebe6df31b846 GIT binary patch literal 6550 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 literal 0 HcmV?d00001 diff --git a/icon/stopprint2.png b/icon/stopprint2.png new file mode 100644 index 0000000000000000000000000000000000000000..176c319afb0604900d30b55fdad4e50e911668fc GIT binary patch literal 6945 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 VdkI??fS3RP002ovPDHLkV1g-Ta9IEV literal 0 HcmV?d00001 diff --git a/icon/udisk.png b/icon/udisk.png new file mode 100644 index 0000000000000000000000000000000000000000..f5fc1c27ec9d93bf98b29eda8be92b8c3d3a4633 GIT binary patch literal 3233 zcmV;S3|{kzP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0nSN8K~#9!?A1+c6Hycf;P>2n(+nNcNewk>iysh*qQU+H7p`2yz2L%yJ9kBJ;Zpa4 zYu$CByDBbR6wPE|pn{*tBAP;s6*Nv_J0_Xwotb<54Vh99%=rTk=WyP0h?#MaC2+ts z1^xqo%H=XF%K`vwb-y7}hw_y>5AHe6oSh_Qq8%ndv^N^|nsxVa|7-i5*Ln*T1ObdO z05c9d4#snfx!J|#o1Bp#GkHdGM>4o{=ECa6!~55Me5yZDl}hD$p-?zWL?Dy!A30n2 z?E3%-P>K*5W>}V`R<2xq)Y*JlC)ahWrBdl)wOYmLlP8c}Si;@cJs1F#a_+`3@_7gC zSL>_F_x+*gc_D z90o#ZtyLVyXfzsFI(`gt{wTE8NWc&&2?j&XWbv!@zO6c)PIEjSFW9yX-}f;X46RVl zpJSrb9S{lVXwPiBPuEqgR=Z`}HUJ=rV|?t5O1aB7zDOm3G^d;dNC4kotljq8ADT)^ z38fT-AZ)g_u)Q1Xp8DB+PBU2xX2Kwl08Fwo>bBOrHyh6=lLbv5&J_6ffxiO)4Diq7 ThiAYV00000NkvXXu0mjfA~PVs literal 0 HcmV?d00001 diff --git a/icon/updatefont.png b/icon/updatefont.png new file mode 100644 index 0000000000000000000000000000000000000000..b42f68e952d4998dcdf5a91d88d4288329449324 GIT binary patch literal 4007 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 N002ovPDHLkV1jatxDfyV literal 0 HcmV?d00001 diff --git a/icon/updatesoftware.png b/icon/updatesoftware.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa3352d18ec6b732edebdfe781f6d644a5e9e0a GIT binary patch literal 4569 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 D%@5)$ literal 0 HcmV?d00001 diff --git a/icon/updown.png b/icon/updown.png new file mode 100644 index 0000000000000000000000000000000000000000..351f42cee709fa4160a0f471f3ce4955e335eeaf GIT binary patch literal 4172 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 WeX@-Nlpe4E0000!F< literal 0 HcmV?d00001 diff --git a/icon/vari.png b/icon/vari.png new file mode 100644 index 0000000000000000000000000000000000000000..2bdfa034c0d5c2d60c06f2b5b7ccc65b9924e0eb GIT binary patch literal 3797 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 LNkvXXu0mjfR#-~! literal 0 HcmV?d00001 diff --git a/icon/zoomin.png b/icon/zoomin.png new file mode 100644 index 0000000000000000000000000000000000000000..2e586fc7bfb6216aec1be411603315d1d0e129d7 GIT binary patch literal 1208 zcmV;p1V{UcP)3rU9b}h+zvU zvdt-Gx`Bk+iiy+!DMK?HAf-^(YFA1l#B5Pnlrg*b!*09YySzoz6%sSG$;nG!-@WJi z&OPUSWdOkbO|bus06#GZg-WF|C=`k#JRa|5{JtMij8G!t5WIgxfS-+0skE}LuI}Uh z{{BlIkLN}(7`!z;K7Q3^v-wOWlU*W_7&)T*mm<1b^YpT^vUeR0hd&SqfYa%Owzf7f zo6XSC(E$?^6X5lF!D6ul3kwT7@%bFY%19)CTRAl!86ExJ?RJCdmD=C(_ZzPjG#m?S z-?qZmx;I0+8_hp=T0aWoZoq1@UD0SX7OcyRMDi!iNfuf;H7`9}bM@&%uTP~kcLrHZ z8nD>Sz*c91tl2X2!ilcw_P(z{t!+d5{0IWUG7N)Vc8=NUD;Ok|5Ss zAz~3LA`$FGY36C5N<;lLi&4VHta5m+s2aBDUW2Tc8X>2=88UPYz~T#mt;vJK18%R+ z=YxuhifdT^210<~MpMTn@7L$2rlyGCCe|NE2oVoNBG~70x#r1=s#nd^G*FgM1Z=}jg#HgahLF;AC)A7t zFZlg_&}y}`gQJK9#DkFtiYY|o^NOa{xujz~L&EpI857!m8e<|{u>^@EdJx+~!-}zA zdY&4Z`_$_B_A)sM(@ry}UTz0UN+^Yhd|rIgdNKZl%eD6O>%H5ZaBdJugQ8ci9Q zw;RW1-JYpHxTU29WHQ+h*6&zu25}UBN+>y_y>DQ+`!qi;9YuByx z^z`dk*NdRA$s^`~BcT^p4#l4mN+F`%kQK=-G*BWYS@4+!rBWG6O-+UTG~xAw+csRm z+5?p6r3iT3J0+9iPYIFGrH|*`h~6#%v*&OOm1MP&zc}pS(@7?2*Y4tsv`>zbQoAmCxO$-^EDM zuM)2Mu39aE)>1j_(TII`UwhBaWR9d;BYt=`FL^aJFGoCdPY-==W~9CLPV@idU&Zf9 WSJt-!dAjKU0000&r*aqEiG-2SS)^r%jLd--*+JL5E8^P1os~i;AeGQTwI}6t8MM< z>>PJGoi}|x->l7MyJ0XG+$AL?#@N_c4NG+Id_;F@E>)>iADc`jkJsykfq?<2tE+>W zni|mQbTBwL2ricknwpw?IXO8EczrrzaVV0%-8nV4SgqeN3AMqfDEI8xtn*6(mQprWE;l*i*~v0g}W%|{?6%}Exzb80R+@X3Je zc!yJCa!gd7yEs$W>6lJA-95UpuIqe$^I5mqHW+MaX@QK4jBc#YM1=o!in#>YMx)V1 zn#&7z{~)M5Y0YaeUC{KnU2ikvo+{?s%TpJSMCHer#}BvlE?$udOA}SFB6T+iHWb71lwA;> zm=B!Tm*MH&i7&F+zv&wu9wvfYSbqe;N8A^R;5ED5K1Ehc+gCHP^4OO>oJZxr5pD*~ zD)k?D0uiT%B=e-P%;FpJcs!s`C}@HMh-k$9p$PIQMC9{=>O&JW0sq9se!k(ye!-c5 zRnQi&M4t(q7a9X*asN+kG=biE`5HM1(@r}mU1$OcC6q!$KF|9=e<|vy-5z=BnuGVL ze~8yS!yqmQJ`Y%vEK^2J{}|&O_6BQfYat;ap%?47F0_MX6n{!6IitR#+pli?+7nYh zbS_FaZi{S~bO>6ftnsD^6E$yV+&`PmW{}Bb{)mW((^$WDAs2CJ3W`4^ltw3?lNHG= zv{2HVWN~`DL29nvwry4_mCj&YJA%R{3Yi0zgdSY!6n{!6g@~phE0SAip+row;5B}U zL=s3&PKL}i{Fz;wR$a&1os{VL2)OJsC57To38fH`&&i797FsB2jE&{5+NJ^A~r-vSSyyY3te{)hhtqExg=2d>~g5ijRRfL z8rZ)zacnM0sP_Svl`EWG9FMhNG<)Q+=S4`;w?6uzfMz`(-c!ayW3d#f)ldCSvfwL| zC0az*BY#tf*kc%bo_-f1NoN{=$< + + image/ALARMGreen.PNG + image/ALARMRed.PNG + image/ALARMYellow.PNG + image/suctionON.png + image/jetOFF.png + image/jetON.png + image/suctionOFF.png + image/reset.png + image/Turkey_logo.png + icon/exportpdf.png + icon/fileopen.png + icon/filesave.png + icon/zoomin.png + icon/zoomout.png + icon/filenew.png + icon/textbold.png + icon/preview.png + icon/edit.png + icon/filesaveas.png + icon/font.png + icon/pauseprint.png + icon/startprint.png + icon/stopprint.png + icon/closereclaimtanl.png + icon/openreclaimtanl.png + icon/poweroff.png + icon/arrowdown.png + icon/arrowleft.png + icon/arrowright.png + icon/arrowup.png + icon/fileimport.png + icon/apply.png + icon/cleanup.png + icon/controlbyhand.png + icon/factorysetting.png + icon/searchsuitablevoltage.png + icon/time.png + icon/updatefont.png + icon/updatesoftware.png + icon/screenfix.png + icon/searchsuitablefrequency.png + icon/counter.png + icon/lockphase.png + icon/keybackspace.png + icon/keydown.png + icon/keyenter.png + icon/keyright.png + icon/keyshift.png + icon/keyup.png + icon/keyinput.png + icon/filedelete.png + icon/filedelete2.png + icon/keydelete.png + icon/keyend.png + icon/keyhide.png + icon/keyhome.png + icon/keyleft.png + icon/lastpage.png + icon/nextpage.png + icon/specialchar.png + icon/vari.png + icon/exit.png + icon/export.png + icon/fileoperation.png + icon/udisk.png + icon/import.png + icon/localdisk.png + icon/insert.png + icon/sure.png + icon/leftright.png + icon/updown.png + icon/pulse.png + icon/linespace.png + 0/image/digitalWidth1.bmp + 0/image/digitalWidth2.bmp + 0/image/digitalWidth3.bmp + 0/image/digitalWidth4.bmp + 0/image/digitalWidth5.bmp + 0/image/digitalWidth6.bmp + 0/image/digitalWidth7.bmp + 0/image/digitalWidth8.bmp + 1/image/digitalWidth1.bmp + 1/image/digitalWidth2.bmp + 1/image/digitalWidth3.bmp + 1/image/digitalWidth4.bmp + 1/image/digitalWidth5.bmp + 1/image/digitalWidth6.bmp + 1/image/digitalWidth7.bmp + 1/image/digitalWidth8.bmp + 2/image/digitalWidth1.bmp + 2/image/digitalWidth2.bmp + 2/image/digitalWidth3.bmp + 2/image/digitalWidth4.bmp + 2/image/digitalWidth5.bmp + 2/image/digitalWidth6.bmp + 2/image/digitalWidth7.bmp + 2/image/digitalWidth8.bmp + 3/image/digitalWidth1.bmp + 3/image/digitalWidth2.bmp + 3/image/digitalWidth3.bmp + 3/image/digitalWidth4.bmp + 3/image/digitalWidth5.bmp + 3/image/digitalWidth6.bmp + 3/image/digitalWidth7.bmp + 3/image/digitalWidth8.bmp + 4/image/digitalWidth1.bmp + 4/image/digitalWidth2.bmp + 4/image/digitalWidth3.bmp + 4/image/digitalWidth4.bmp + 4/image/digitalWidth5.bmp + 4/image/digitalWidth6.bmp + 4/image/digitalWidth7.bmp + 4/image/digitalWidth8.bmp + 5/image/digitalWidth1.bmp + 5/image/digitalWidth2.bmp + 5/image/digitalWidth3.bmp + 5/image/digitalWidth4.bmp + 5/image/digitalWidth5.bmp + 5/image/digitalWidth6.bmp + 5/image/digitalWidth7.bmp + 5/image/digitalWidth8.bmp + 6/image/digitalWidth1.bmp + 6/image/digitalWidth2.bmp + 6/image/digitalWidth3.bmp + 6/image/digitalWidth4.bmp + 6/image/digitalWidth5.bmp + 6/image/digitalWidth6.bmp + 6/image/digitalWidth7.bmp + 6/image/digitalWidth8.bmp + 7/image/digitalWidth1.bmp + 7/image/digitalWidth2.bmp + 7/image/digitalWidth3.bmp + 7/image/digitalWidth4.bmp + 7/image/digitalWidth5.bmp + 7/image/digitalWidth6.bmp + 7/image/digitalWidth7.bmp + 7/image/digitalWidth8.bmp + 8/image/digitalWidth1.bmp + 8/image/digitalWidth2.bmp + 8/image/digitalWidth3.bmp + 8/image/digitalWidth4.bmp + 8/image/digitalWidth5.bmp + 8/image/digitalWidth6.bmp + 8/image/digitalWidth7.bmp + 8/image/digitalWidth8.bmp + 13/image/digitalWidth1.bmp + 13/image/digitalWidth2.bmp + 13/image/digitalWidth3.bmp + 13/image/digitalWidth4.bmp + 13/image/digitalWidth5.bmp + 13/image/digitalWidth6.bmp + 13/image/digitalWidth7.bmp + 13/image/digitalWidth8.bmp + 0/image/digitalWidth175.bmp + 0/image/digitalWidth275.bmp + 0/image/digitalWidth375.bmp + 0/image/digitalWidth475.bmp + 0/image/digitalWidth575.bmp + 0/image/digitalWidth675.bmp + 0/image/digitalWidth775.bmp + 0/image/digitalWidth875.bmp + 1/image/digitalWidth175.bmp + 1/image/digitalWidth275.bmp + 1/image/digitalWidth375.bmp + 1/image/digitalWidth475.bmp + 1/image/digitalWidth575.bmp + 1/image/digitalWidth675.bmp + 1/image/digitalWidth775.bmp + 1/image/digitalWidth875.bmp + 2/image/digitalWidth175.bmp + 2/image/digitalWidth275.bmp + 2/image/digitalWidth375.bmp + 2/image/digitalWidth475.bmp + 2/image/digitalWidth575.bmp + 2/image/digitalWidth675.bmp + 2/image/digitalWidth775.bmp + 2/image/digitalWidth875.bmp + 3/image/digitalWidth175.bmp + 3/image/digitalWidth275.bmp + 3/image/digitalWidth375.bmp + 3/image/digitalWidth475.bmp + 3/image/digitalWidth575.bmp + 3/image/digitalWidth675.bmp + 3/image/digitalWidth775.bmp + 3/image/digitalWidth875.bmp + 4/image/digitalWidth175.bmp + 4/image/digitalWidth275.bmp + 4/image/digitalWidth375.bmp + 4/image/digitalWidth475.bmp + 4/image/digitalWidth575.bmp + 4/image/digitalWidth675.bmp + 4/image/digitalWidth775.bmp + 4/image/digitalWidth875.bmp + 5/image/digitalWidth175.bmp + 5/image/digitalWidth275.bmp + 5/image/digitalWidth375.bmp + 5/image/digitalWidth475.bmp + 5/image/digitalWidth575.bmp + 5/image/digitalWidth675.bmp + 5/image/digitalWidth775.bmp + 5/image/digitalWidth875.bmp + 6/image/digitalWidth175.bmp + 6/image/digitalWidth275.bmp + 6/image/digitalWidth375.bmp + 6/image/digitalWidth475.bmp + 6/image/digitalWidth575.bmp + 6/image/digitalWidth675.bmp + 6/image/digitalWidth775.bmp + 6/image/digitalWidth875.bmp + 7/image/digitalWidth175.bmp + 7/image/digitalWidth275.bmp + 7/image/digitalWidth375.bmp + 7/image/digitalWidth475.bmp + 7/image/digitalWidth575.bmp + 7/image/digitalWidth675.bmp + 7/image/digitalWidth775.bmp + 7/image/digitalWidth875.bmp + 8/image/digitalWidth175.bmp + 8/image/digitalWidth275.bmp + 8/image/digitalWidth375.bmp + 8/image/digitalWidth475.bmp + 8/image/digitalWidth575.bmp + 8/image/digitalWidth675.bmp + 8/image/digitalWidth775.bmp + 8/image/digitalWidth875.bmp + 13/image/digitalWidth175.bmp + 13/image/digitalWidth275.bmp + 13/image/digitalWidth375.bmp + 13/image/digitalWidth475.bmp + 13/image/digitalWidth575.bmp + 13/image/digitalWidth675.bmp + 13/image/digitalWidth775.bmp + 13/image/digitalWidth875.bmp + icon/startprint1.png + icon/startprint2.png + icon/stopprint1.png + icon/stopprint2.png + icon/pauseprint1.png + icon/pauseprint2.png + icon/TEXT.PNG + icon/Epauseprint.png + icon/Epauseprint1.png + icon/Epauseprint2.png + icon/Estartprint.png + icon/Estartprint1.png + icon/Estartprint2.png + icon/EstopPrint2.png + icon/BarCode1.png + icon/bypm.png + 11/image/BARV16.bmp + 11/image/BARV12.bmp + 9/image/DMTV32.bmp + 9/image/DMTV26.bmp + 9/image/DMTV24.bmp + 9/image/DMTV22.bmp + 9/image/DMTV20.bmp + 9/image/DMTV18.bmp + 9/image/DMTV16.bmp + 9/image/DMTV14.bmp + 9/image/DMTV12.bmp + 9/image/DMTV10.bmp + 10/image/QRV37.bmp + 10/image/QRV33.bmp + 10/image/QRV29.bmp + 10/image/QRV25.bmp + 10/image/QRV21.bmp + image/AH12.png + image/ZFKD.png + image/MIV12.png + icon/10008.ico + icon/a9.ico + image/AH13.png + image/MIV13.png + image/ZFKD2.png + 12/image/digitalWidth13.bmp + 12/image/digitalWidth1375.bmp + 12/image/digitalWidth16.bmp + 12/image/digitalWidth1675.bmp + 12/image/digitalWidth1575.bmp + 12/image/digitalWidth15.bmp + 12/image/digitalWidth1475.bmp + 12/image/digitalWidth14.bmp + 12/image/digitalWidth1275.bmp + 12/image/digitalWidth12.bmp + 12/image/digitalWidth1175.bmp + 12/image/digitalWidth11.bmp + 12/image/digitalWidth1075.bmp + 12/image/digitalWidth10.bmp + 12/image/digitalWidth975.bmp + 12/image/digitalWidth9.bmp + 12/image/digitalWidth475.bmp + 12/image/digitalWidth1.bmp + 12/image/digitalWidth875.bmp + 12/image/digitalWidth8.bmp + 12/image/digitalWidth775.bmp + 12/image/digitalWidth7.bmp + 12/image/digitalWidth675.bmp + 12/image/digitalWidth6.bmp + 12/image/digitalWidth575.bmp + 12/image/digitalWidth4.bmp + 12/image/digitalWidth375.bmp + 12/image/digitalWidth3.bmp + 12/image/digitalWidth275.bmp + 12/image/digitalWidth2.bmp + 12/image/digitalWidth5.bmp + 12/image/digitalWidth175.bmp + 40/image/digitalWidth875.bmp + 40/image/digitalWidth4.bmp + 40/image/digitalWidth375.bmp + 40/image/digitalWidth3.bmp + 40/image/digitalWidth275.bmp + 40/image/digitalWidth2.bmp + 40/image/digitalWidth175.bmp + 40/image/digitalWidth475.bmp + 40/image/digitalWidth5.bmp + 40/image/digitalWidth8.bmp + 40/image/digitalWidth775.bmp + 40/image/digitalWidth7.bmp + 40/image/digitalWidth675.bmp + 40/image/digitalWidth6.bmp + 40/image/digitalWidth575.bmp + 40/image/digitalWidth1.bmp + 41/image/digitalWidth1.bmp + 41/image/digitalWidth2.bmp + 41/image/digitalWidth3.bmp + 41/image/digitalWidth4.bmp + 41/image/digitalWidth5.bmp + 41/image/digitalWidth6.bmp + 41/image/digitalWidth7.bmp + 41/image/digitalWidth8.bmp + 41/image/digitalWidth175.bmp + 41/image/digitalWidth275.bmp + 41/image/digitalWidth375.bmp + 41/image/digitalWidth475.bmp + 41/image/digitalWidth575.bmp + 41/image/digitalWidth675.bmp + 41/image/digitalWidth775.bmp + 41/image/digitalWidth875.bmp + 42/image/digitalWidth1.bmp + 42/image/digitalWidth2.bmp + 42/image/digitalWidth3.bmp + 42/image/digitalWidth4.bmp + 42/image/digitalWidth5.bmp + 42/image/digitalWidth6.bmp + 42/image/digitalWidth7.bmp + 42/image/digitalWidth8.bmp + 42/image/digitalWidth175.bmp + 42/image/digitalWidth275.bmp + 42/image/digitalWidth375.bmp + 42/image/digitalWidth475.bmp + 42/image/digitalWidth575.bmp + 42/image/digitalWidth675.bmp + 42/image/digitalWidth775.bmp + 42/image/digitalWidth875.bmp + 43/image/digitalWidth1.bmp + 43/image/digitalWidth2.bmp + 43/image/digitalWidth3.bmp + 43/image/digitalWidth4.bmp + 43/image/digitalWidth5.bmp + 43/image/digitalWidth6.bmp + 43/image/digitalWidth7.bmp + 43/image/digitalWidth8.bmp + 43/image/digitalWidth175.bmp + 43/image/digitalWidth275.bmp + 43/image/digitalWidth375.bmp + 43/image/digitalWidth475.bmp + 43/image/digitalWidth575.bmp + 43/image/digitalWidth675.bmp + 43/image/digitalWidth775.bmp + 43/image/digitalWidth875.bmp + 44/image/digitalWidth1.bmp + 44/image/digitalWidth2.bmp + 44/image/digitalWidth3.bmp + 44/image/digitalWidth4.bmp + 44/image/digitalWidth5.bmp + 44/image/digitalWidth6.bmp + 44/image/digitalWidth7.bmp + 44/image/digitalWidth8.bmp + 44/image/digitalWidth175.bmp + 44/image/digitalWidth275.bmp + 44/image/digitalWidth375.bmp + 44/image/digitalWidth475.bmp + 44/image/digitalWidth575.bmp + 44/image/digitalWidth675.bmp + 44/image/digitalWidth775.bmp + 44/image/digitalWidth875.bmp + 45/image/digitalWidth1.bmp + 45/image/digitalWidth2.bmp + 45/image/digitalWidth3.bmp + 45/image/digitalWidth4.bmp + 45/image/digitalWidth5.bmp + 45/image/digitalWidth6.bmp + 45/image/digitalWidth7.bmp + 45/image/digitalWidth8.bmp + 45/image/digitalWidth175.bmp + 45/image/digitalWidth275.bmp + 45/image/digitalWidth375.bmp + 45/image/digitalWidth475.bmp + 45/image/digitalWidth575.bmp + 45/image/digitalWidth675.bmp + 45/image/digitalWidth775.bmp + 45/image/digitalWidth875.bmp + 46/image/digitalWidth1.bmp + 46/image/digitalWidth2.bmp + 46/image/digitalWidth3.bmp + 46/image/digitalWidth4.bmp + 46/image/digitalWidth5.bmp + 46/image/digitalWidth6.bmp + 46/image/digitalWidth7.bmp + 46/image/digitalWidth8.bmp + 46/image/digitalWidth175.bmp + 46/image/digitalWidth275.bmp + 46/image/digitalWidth375.bmp + 46/image/digitalWidth475.bmp + 46/image/digitalWidth575.bmp + 46/image/digitalWidth675.bmp + 46/image/digitalWidth775.bmp + 46/image/digitalWidth875.bmp + 47/image/digitalWidth1.bmp + 47/image/digitalWidth2.bmp + 47/image/digitalWidth3.bmp + 47/image/digitalWidth4.bmp + 47/image/digitalWidth5.bmp + 47/image/digitalWidth6.bmp + 47/image/digitalWidth7.bmp + 47/image/digitalWidth8.bmp + 47/image/digitalWidth175.bmp + 47/image/digitalWidth275.bmp + 47/image/digitalWidth375.bmp + 47/image/digitalWidth475.bmp + 47/image/digitalWidth575.bmp + 47/image/digitalWidth675.bmp + 47/image/digitalWidth775.bmp + 47/image/digitalWidth875.bmp + 48/image/digitalWidth1.bmp + 48/image/digitalWidth2.bmp + 48/image/digitalWidth3.bmp + 48/image/digitalWidth4.bmp + 48/image/digitalWidth5.bmp + 48/image/digitalWidth6.bmp + 48/image/digitalWidth7.bmp + 48/image/digitalWidth8.bmp + 48/image/digitalWidth175.bmp + 48/image/digitalWidth275.bmp + 48/image/digitalWidth375.bmp + 48/image/digitalWidth475.bmp + 48/image/digitalWidth575.bmp + 48/image/digitalWidth675.bmp + 48/image/digitalWidth775.bmp + 48/image/digitalWidth875.bmp + 20/image/digitalWidth1.bmp + 20/image/digitalWidth2.bmp + 20/image/digitalWidth3.bmp + 20/image/digitalWidth4.bmp + 20/image/digitalWidth5.bmp + 20/image/digitalWidth6.bmp + 20/image/digitalWidth7.bmp + 20/image/digitalWidth8.bmp + 20/image/digitalWidth175.bmp + 20/image/digitalWidth275.bmp + 20/image/digitalWidth375.bmp + 20/image/digitalWidth475.bmp + 20/image/digitalWidth575.bmp + 20/image/digitalWidth675.bmp + 20/image/digitalWidth775.bmp + 20/image/digitalWidth875.bmp + 21/image/digitalWidth1.bmp + 21/image/digitalWidth2.bmp + 21/image/digitalWidth3.bmp + 21/image/digitalWidth4.bmp + 21/image/digitalWidth5.bmp + 21/image/digitalWidth6.bmp + 21/image/digitalWidth7.bmp + 21/image/digitalWidth8.bmp + 21/image/digitalWidth175.bmp + 21/image/digitalWidth275.bmp + 21/image/digitalWidth375.bmp + 21/image/digitalWidth475.bmp + 21/image/digitalWidth575.bmp + 21/image/digitalWidth675.bmp + 21/image/digitalWidth775.bmp + 21/image/digitalWidth875.bmp + 22/image/digitalWidth1.bmp + 22/image/digitalWidth2.bmp + 22/image/digitalWidth3.bmp + 22/image/digitalWidth4.bmp + 22/image/digitalWidth5.bmp + 22/image/digitalWidth6.bmp + 22/image/digitalWidth7.bmp + 22/image/digitalWidth8.bmp + 22/image/digitalWidth175.bmp + 22/image/digitalWidth275.bmp + 22/image/digitalWidth375.bmp + 22/image/digitalWidth475.bmp + 22/image/digitalWidth575.bmp + 22/image/digitalWidth675.bmp + 22/image/digitalWidth775.bmp + 22/image/digitalWidth875.bmp + 23/image/digitalWidth1.bmp + 23/image/digitalWidth2.bmp + 23/image/digitalWidth3.bmp + 23/image/digitalWidth4.bmp + 23/image/digitalWidth5.bmp + 23/image/digitalWidth6.bmp + 23/image/digitalWidth7.bmp + 23/image/digitalWidth8.bmp + 23/image/digitalWidth175.bmp + 23/image/digitalWidth275.bmp + 23/image/digitalWidth375.bmp + 23/image/digitalWidth475.bmp + 23/image/digitalWidth575.bmp + 23/image/digitalWidth675.bmp + 23/image/digitalWidth775.bmp + 23/image/digitalWidth875.bmp + 24/image/digitalWidth1.bmp + 24/image/digitalWidth2.bmp + 24/image/digitalWidth3.bmp + 24/image/digitalWidth4.bmp + 24/image/digitalWidth5.bmp + 24/image/digitalWidth6.bmp + 24/image/digitalWidth7.bmp + 24/image/digitalWidth8.bmp + 24/image/digitalWidth175.bmp + 24/image/digitalWidth275.bmp + 24/image/digitalWidth375.bmp + 24/image/digitalWidth475.bmp + 24/image/digitalWidth575.bmp + 24/image/digitalWidth675.bmp + 24/image/digitalWidth775.bmp + 24/image/digitalWidth875.bmp + 25/image/digitalWidth1.bmp + 25/image/digitalWidth2.bmp + 25/image/digitalWidth3.bmp + 25/image/digitalWidth4.bmp + 25/image/digitalWidth5.bmp + 25/image/digitalWidth6.bmp + 25/image/digitalWidth7.bmp + 25/image/digitalWidth8.bmp + 25/image/digitalWidth175.bmp + 25/image/digitalWidth275.bmp + 25/image/digitalWidth375.bmp + 25/image/digitalWidth475.bmp + 25/image/digitalWidth575.bmp + 25/image/digitalWidth675.bmp + 25/image/digitalWidth775.bmp + 25/image/digitalWidth875.bmp + 26/image/digitalWidth1.bmp + 26/image/digitalWidth2.bmp + 26/image/digitalWidth3.bmp + 26/image/digitalWidth4.bmp + 26/image/digitalWidth5.bmp + 26/image/digitalWidth6.bmp + 26/image/digitalWidth7.bmp + 26/image/digitalWidth8.bmp + 26/image/digitalWidth175.bmp + 26/image/digitalWidth275.bmp + 26/image/digitalWidth375.bmp + 26/image/digitalWidth475.bmp + 26/image/digitalWidth575.bmp + 26/image/digitalWidth675.bmp + 26/image/digitalWidth775.bmp + 26/image/digitalWidth875.bmp + 27/image/digitalWidth1.bmp + 27/image/digitalWidth2.bmp + 27/image/digitalWidth3.bmp + 27/image/digitalWidth4.bmp + 27/image/digitalWidth5.bmp + 27/image/digitalWidth6.bmp + 27/image/digitalWidth7.bmp + 27/image/digitalWidth8.bmp + 27/image/digitalWidth175.bmp + 27/image/digitalWidth275.bmp + 27/image/digitalWidth375.bmp + 27/image/digitalWidth475.bmp + 27/image/digitalWidth575.bmp + 27/image/digitalWidth675.bmp + 27/image/digitalWidth775.bmp + 27/image/digitalWidth875.bmp + 28/image/digitalWidth1.bmp + 28/image/digitalWidth2.bmp + 28/image/digitalWidth3.bmp + 28/image/digitalWidth4.bmp + 28/image/digitalWidth5.bmp + 28/image/digitalWidth6.bmp + 28/image/digitalWidth7.bmp + 28/image/digitalWidth8.bmp + 28/image/digitalWidth175.bmp + 28/image/digitalWidth275.bmp + 28/image/digitalWidth375.bmp + 28/image/digitalWidth475.bmp + 28/image/digitalWidth575.bmp + 28/image/digitalWidth675.bmp + 28/image/digitalWidth775.bmp + 28/image/digitalWidth875.bmp + 11/image/BARV5.bmp + 11/image/BARV7.bmp + 11/image/BARV9.bmp + 11/image/BARV24.bmp + 11/image/BARV105.bmp + 11/image/BARV107.bmp + 11/image/BARV109.bmp + 11/image/BARV112.bmp + 11/image/BARV116.bmp + 11/image/BARV124.bmp + 11/image/BARV205.bmp + 11/image/BARV207.bmp + 11/image/BARV209.bmp + 11/image/BARV212.bmp + 11/image/BARV216.bmp + 11/image/BARV224.bmp + 80/image/digitalWidth8.bmp + 81/image/curDate875.bmp + 66/image/digitalWidth875.bmp + 66/image/digitalWidth8.bmp + 81/image/curDate8.bmp + 80/image/expiryDate8.bmp + 80/image/expiryDate875.bmp + 80/image/digitalWidth1.bmp + 80/image/digitalWidth175.bmp + 81/image/curDate1.bmp + 82/image/class1.bmp + 82/image/class91.bmp + 30/image/digitalWidth1.bmp + 30/image/digitalWidth2.bmp + 30/image/digitalWidth3.bmp + 30/image/digitalWidth4.bmp + 30/image/digitalWidth5.bmp + 30/image/digitalWidth6.bmp + 30/image/digitalWidth7.bmp + 30/image/digitalWidth8.bmp + 30/image/digitalWidth175.bmp + 30/image/digitalWidth275.bmp + 30/image/digitalWidth375.bmp + 30/image/digitalWidth475.bmp + 30/image/digitalWidth575.bmp + 30/image/digitalWidth675.bmp + 30/image/digitalWidth775.bmp + 30/image/digitalWidth875.bmp + 31/image/digitalWidth1.bmp + 31/image/digitalWidth2.bmp + 31/image/digitalWidth3.bmp + 31/image/digitalWidth4.bmp + 31/image/digitalWidth5.bmp + 31/image/digitalWidth6.bmp + 31/image/digitalWidth7.bmp + 31/image/digitalWidth8.bmp + 31/image/digitalWidth175.bmp + 31/image/digitalWidth275.bmp + 31/image/digitalWidth375.bmp + 31/image/digitalWidth475.bmp + 31/image/digitalWidth575.bmp + 31/image/digitalWidth675.bmp + 31/image/digitalWidth775.bmp + 31/image/digitalWidth875.bmp + 32/image/digitalWidth1.bmp + 32/image/digitalWidth2.bmp + 32/image/digitalWidth3.bmp + 32/image/digitalWidth4.bmp + 32/image/digitalWidth5.bmp + 32/image/digitalWidth6.bmp + 32/image/digitalWidth7.bmp + 32/image/digitalWidth8.bmp + 32/image/digitalWidth175.bmp + 32/image/digitalWidth275.bmp + 32/image/digitalWidth375.bmp + 32/image/digitalWidth475.bmp + 32/image/digitalWidth575.bmp + 32/image/digitalWidth675.bmp + 32/image/digitalWidth775.bmp + 32/image/digitalWidth875.bmp + 33/image/digitalWidth1.bmp + 33/image/digitalWidth2.bmp + 33/image/digitalWidth3.bmp + 33/image/digitalWidth4.bmp + 33/image/digitalWidth5.bmp + 33/image/digitalWidth6.bmp + 33/image/digitalWidth7.bmp + 33/image/digitalWidth8.bmp + 33/image/digitalWidth175.bmp + 33/image/digitalWidth275.bmp + 33/image/digitalWidth375.bmp + 33/image/digitalWidth475.bmp + 33/image/digitalWidth575.bmp + 33/image/digitalWidth675.bmp + 33/image/digitalWidth775.bmp + 33/image/digitalWidth875.bmp + 34/image/digitalWidth1.bmp + 34/image/digitalWidth2.bmp + 34/image/digitalWidth3.bmp + 34/image/digitalWidth4.bmp + 34/image/digitalWidth5.bmp + 34/image/digitalWidth6.bmp + 34/image/digitalWidth7.bmp + 34/image/digitalWidth8.bmp + 34/image/digitalWidth175.bmp + 34/image/digitalWidth275.bmp + 34/image/digitalWidth375.bmp + 34/image/digitalWidth475.bmp + 34/image/digitalWidth575.bmp + 34/image/digitalWidth675.bmp + 34/image/digitalWidth775.bmp + 34/image/digitalWidth875.bmp + 35/image/digitalWidth1.bmp + 35/image/digitalWidth2.bmp + 35/image/digitalWidth3.bmp + 35/image/digitalWidth4.bmp + 35/image/digitalWidth5.bmp + 35/image/digitalWidth6.bmp + 35/image/digitalWidth7.bmp + 35/image/digitalWidth8.bmp + 35/image/digitalWidth175.bmp + 35/image/digitalWidth275.bmp + 35/image/digitalWidth375.bmp + 35/image/digitalWidth475.bmp + 35/image/digitalWidth575.bmp + 35/image/digitalWidth675.bmp + 35/image/digitalWidth775.bmp + 35/image/digitalWidth875.bmp + 36/image/digitalWidth1.bmp + 36/image/digitalWidth2.bmp + 36/image/digitalWidth3.bmp + 36/image/digitalWidth4.bmp + 36/image/digitalWidth5.bmp + 36/image/digitalWidth6.bmp + 36/image/digitalWidth7.bmp + 36/image/digitalWidth8.bmp + 36/image/digitalWidth175.bmp + 36/image/digitalWidth275.bmp + 36/image/digitalWidth375.bmp + 36/image/digitalWidth475.bmp + 36/image/digitalWidth575.bmp + 36/image/digitalWidth675.bmp + 36/image/digitalWidth775.bmp + 36/image/digitalWidth875.bmp + 38/image/digitalWidth1.bmp + 38/image/digitalWidth2.bmp + 38/image/digitalWidth3.bmp + 38/image/digitalWidth4.bmp + 38/image/digitalWidth5.bmp + 38/image/digitalWidth6.bmp + 38/image/digitalWidth7.bmp + 38/image/digitalWidth8.bmp + 38/image/digitalWidth175.bmp + 38/image/digitalWidth275.bmp + 38/image/digitalWidth375.bmp + 38/image/digitalWidth475.bmp + 38/image/digitalWidth575.bmp + 38/image/digitalWidth675.bmp + 38/image/digitalWidth775.bmp + 38/image/digitalWidth875.bmp + 37/image/digitalWidth1.bmp + 37/image/digitalWidth2.bmp + 37/image/digitalWidth3.bmp + 37/image/digitalWidth4.bmp + 37/image/digitalWidth5.bmp + 37/image/digitalWidth6.bmp + 37/image/digitalWidth7.bmp + 37/image/digitalWidth8.bmp + 37/image/digitalWidth175.bmp + 37/image/digitalWidth275.bmp + 37/image/digitalWidth375.bmp + 37/image/digitalWidth475.bmp + 37/image/digitalWidth575.bmp + 37/image/digitalWidth675.bmp + 37/image/digitalWidth775.bmp + 37/image/digitalWidth875.bmp + 90/image/digitalWidth1.bmp + 90/image/digitalWidth8.bmp + 90/image/digitalWidth8.xcf + 90/image/digitalWidth8 (____).bmp + 90/image/digitalWidth88.bmp + 90/image/digitalWidth175.bmp + 90/image/expiryDate8.bmp + 90/image/expiryDate8_backup.bmp + 90/image/expiryDate875.bmp + 90/image/expiryDate875_backup.bmp + 91/image/curDate1.bmp + 91/image/curDate8.bmp + 91/image/curDate8_backup.bmp + 91/image/curDate875.bmp + 91/image/digitalWidth1.bmp + 91/image/digitalWidth8.bmp + 91/image/digitalWidth8.xcf + 91/image/digitalWidth8 (____).bmp + 91/image/digitalWidth88.bmp + 91/image/expiryDate8.bmp + 91/image/expiryDate875.bmp + 50/image/digitalWidth1.bmp + 50/image/digitalWidth2.bmp + 50/image/digitalWidth3.bmp + 50/image/digitalWidth4.bmp + 50/image/digitalWidth5.bmp + 50/image/digitalWidth6.bmp + 50/image/digitalWidth7.bmp + 50/image/digitalWidth8.bmp + 50/image/digitalWidth175.bmp + 50/image/digitalWidth275.bmp + 50/image/digitalWidth375.bmp + 50/image/digitalWidth475.bmp + 50/image/digitalWidth575.bmp + 50/image/digitalWidth675.bmp + 50/image/digitalWidth775.bmp + 50/image/digitalWidth875.bmp + 51/image/digitalWidth1.bmp + 51/image/digitalWidth2.bmp + 51/image/digitalWidth3.bmp + 51/image/digitalWidth4.bmp + 51/image/digitalWidth5.bmp + 51/image/digitalWidth6.bmp + 51/image/digitalWidth7.bmp + 51/image/digitalWidth8.bmp + 51/image/digitalWidth175.bmp + 51/image/digitalWidth275.bmp + 51/image/digitalWidth375.bmp + 51/image/digitalWidth475.bmp + 51/image/digitalWidth575.bmp + 51/image/digitalWidth675.bmp + 51/image/digitalWidth775.bmp + 51/image/digitalWidth875.bmp + 52/image/digitalWidth1.bmp + 52/image/digitalWidth2.bmp + 52/image/digitalWidth3.bmp + 52/image/digitalWidth4.bmp + 52/image/digitalWidth5.bmp + 52/image/digitalWidth6.bmp + 52/image/digitalWidth7.bmp + 52/image/digitalWidth8.bmp + 52/image/digitalWidth175.bmp + 52/image/digitalWidth275.bmp + 52/image/digitalWidth375.bmp + 52/image/digitalWidth475.bmp + 52/image/digitalWidth575.bmp + 52/image/digitalWidth675.bmp + 52/image/digitalWidth775.bmp + 52/image/digitalWidth875.bmp + 53/image/digitalWidth1.bmp + 53/image/digitalWidth2.bmp + 53/image/digitalWidth3.bmp + 53/image/digitalWidth4.bmp + 53/image/digitalWidth5.bmp + 53/image/digitalWidth6.bmp + 53/image/digitalWidth7.bmp + 53/image/digitalWidth8.bmp + 53/image/digitalWidth175.bmp + 53/image/digitalWidth275.bmp + 53/image/digitalWidth375.bmp + 53/image/digitalWidth475.bmp + 53/image/digitalWidth575.bmp + 53/image/digitalWidth675.bmp + 53/image/digitalWidth775.bmp + 53/image/digitalWidth875.bmp + 54/image/digitalWidth1.bmp + 54/image/digitalWidth2.bmp + 54/image/digitalWidth3.bmp + 54/image/digitalWidth4.bmp + 54/image/digitalWidth5.bmp + 54/image/digitalWidth6.bmp + 54/image/digitalWidth7.bmp + 54/image/digitalWidth8.bmp + 54/image/digitalWidth175.bmp + 54/image/digitalWidth275.bmp + 54/image/digitalWidth375.bmp + 54/image/digitalWidth475.bmp + 54/image/digitalWidth575.bmp + 54/image/digitalWidth675.bmp + 54/image/digitalWidth775.bmp + 54/image/digitalWidth875.bmp + 55/image/digitalWidth1.bmp + 55/image/digitalWidth2.bmp + 55/image/digitalWidth3.bmp + 55/image/digitalWidth4.bmp + 55/image/digitalWidth5.bmp + 55/image/digitalWidth6.bmp + 55/image/digitalWidth7.bmp + 55/image/digitalWidth8.bmp + 55/image/digitalWidth175.bmp + 55/image/digitalWidth275.bmp + 55/image/digitalWidth375.bmp + 55/image/digitalWidth475.bmp + 55/image/digitalWidth575.bmp + 55/image/digitalWidth675.bmp + 55/image/digitalWidth775.bmp + 55/image/digitalWidth875.bmp + 56/image/digitalWidth1.bmp + 56/image/digitalWidth2.bmp + 56/image/digitalWidth3.bmp + 56/image/digitalWidth4.bmp + 56/image/digitalWidth5.bmp + 56/image/digitalWidth6.bmp + 56/image/digitalWidth7.bmp + 56/image/digitalWidth8.bmp + 56/image/digitalWidth175.bmp + 56/image/digitalWidth275.bmp + 56/image/digitalWidth375.bmp + 56/image/digitalWidth475.bmp + 56/image/digitalWidth575.bmp + 56/image/digitalWidth675.bmp + 56/image/digitalWidth775.bmp + 56/image/digitalWidth875.bmp + 57/image/digitalWidth1.bmp + 57/image/digitalWidth2.bmp + 57/image/digitalWidth3.bmp + 57/image/digitalWidth4.bmp + 57/image/digitalWidth5.bmp + 57/image/digitalWidth6.bmp + 57/image/digitalWidth7.bmp + 57/image/digitalWidth8.bmp + 57/image/digitalWidth175.bmp + 57/image/digitalWidth275.bmp + 57/image/digitalWidth375.bmp + 57/image/digitalWidth475.bmp + 57/image/digitalWidth575.bmp + 57/image/digitalWidth675.bmp + 57/image/digitalWidth775.bmp + 57/image/digitalWidth875.bmp + 58/image/digitalWidth1.bmp + 58/image/digitalWidth2.bmp + 58/image/digitalWidth3.bmp + 58/image/digitalWidth4.bmp + 58/image/digitalWidth5.bmp + 58/image/digitalWidth6.bmp + 58/image/digitalWidth7.bmp + 58/image/digitalWidth8.bmp + 58/image/digitalWidth175.bmp + 58/image/digitalWidth275.bmp + 58/image/digitalWidth375.bmp + 58/image/digitalWidth475.bmp + 58/image/digitalWidth575.bmp + 58/image/digitalWidth675.bmp + 58/image/digitalWidth775.bmp + 58/image/digitalWidth875.bmp + 100/image/digitalWidth1.bmp + 100/image/digitalWidth8.bmp + 100/image/digitalWidth8.xcf + 100/image/digitalWidth8 (____).bmp + 100/image/digitalWidth88.bmp + 100/image/digitalWidth175.bmp + 100/image/expiryDate8.bmp + 100/image/expiryDate8_backup.bmp + 100/image/expiryDate875.bmp + 100/image/expiryDate875_backup.bmp + 101/image/curDate1.bmp + 101/image/curDate8.bmp + 101/image/curDate8_backup.bmp + 101/image/curDate875.bmp + 101/image/digitalWidth1.bmp + 101/image/digitalWidth8.bmp + 101/image/digitalWidth8.xcf + 101/image/digitalWidth8 (____).bmp + 101/image/digitalWidth88.bmp + 101/image/expiryDate8.bmp + 101/image/expiryDate875.bmp + icon/Estartprint3.png + icon/EstopPrint3.png + 14/image/digitalWidth1.bmp + 14/image/digitalWidth2.bmp + 14/image/digitalWidth3.bmp + 14/image/digitalWidth4.bmp + 14/image/digitalWidth5.bmp + 14/image/digitalWidth6.bmp + 14/image/digitalWidth7.bmp + 14/image/digitalWidth8.bmp + 14/image/digitalWidth175.bmp + 14/image/digitalWidth275.bmp + 14/image/digitalWidth375.bmp + 14/image/digitalWidth475.bmp + 14/image/digitalWidth575.bmp + 14/image/digitalWidth675.bmp + 14/image/digitalWidth775.bmp + 14/image/digitalWidth875.bmp + 15/image/digitalWidth1.bmp + 15/image/digitalWidth2.bmp + 15/image/digitalWidth3.bmp + 15/image/digitalWidth4.bmp + 15/image/digitalWidth5.bmp + 15/image/digitalWidth6.bmp + 15/image/digitalWidth7.bmp + 15/image/digitalWidth8.bmp + 15/image/digitalWidth175.bmp + 15/image/digitalWidth275.bmp + 15/image/digitalWidth375.bmp + 15/image/digitalWidth475.bmp + 15/image/digitalWidth575.bmp + 15/image/digitalWidth675.bmp + 15/image/digitalWidth775.bmp + 15/image/digitalWidth875.bmp + conf/config.ini + conf/VoltParaHi.bin + conf/VoltePara_No73.bin + TouchScreenConf/qtui_Capacitance + TouchScreenConf/calibrate_Capacitance + TouchScreenConf/calibrate_Resistance + TouchScreenConf/qtui_Resistance + image/keyboard3.png + image/keyboard2.png + image/keyboard1.png + image/arabicz.png + image/arabicl.png + image/arabicc.png + image/arabic2.png + conf/VoltDataStd5Row5Dot.bin + conf/VoltDataStd32.bin + conf/VoltDataStd25.bin + conf/VoltDataStd21.bin + + diff --git a/image/AH12.png b/image/AH12.png new file mode 100644 index 0000000000000000000000000000000000000000..49bb9fa685c92e1e60c1dbdda508476374dcdf0a GIT binary patch literal 1605 zcmV-L2DPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1=>kOK~#8N?VQV1 zTQLxZuTu-K;81~60f!AMN^sgC%TNL$GR=5eOO>2)Vm)ngcd@*TcCISmKa(H^=^UQ^&2*ZR;!g`d;c3# zK>v0A!T&HA`Dy)uV)>EIL!!-_8=nUvc1V~X9Kx&)Y1Vrpp!GvckH{ojz?_`=nV)>v zEH`f(F};=non2c~nhet!Bhj5a`%wl)Z5`Y)g43y6&OE^xqRPy3@(2dZa=fi6J1R3V z295IIXLe#5cZiX*92mhSl^KKnDDO6Z^_xR8*MZAP#m0;w-U@yf7j=KBS2&v_$$rTB+sv&IDY$=3xkM}R0E_V-MM2=bszv{jD`==^7 zvq~vKh{eqm=R^{o{SpWT0ZkKyDBC2ayQR5dwhCn?P>|H8W(*O4Dk75GhsmPIWXLgd zp2t~*sYY5@dl;V;&8fsOL;|Xe2(+5oTV|G1&d$4ea0x|1>tIq;^4j$3SIwC58z~_M zP-R4j^MB%DWP^71zohU)vr~`+Gn*stYc3>Y1KMmh_KekP5sYU%K^Y+j(Dk3|#)w3@ zZVXx?LN=iF`RR1o8qpY5m+V49$N_Y7buul8B*spX6%YymYJ}(;CO1tJClm(M2vL&v zjWGx(w0$$Kde;9^ocb)asH!W#gq|Pn4vLt7S|HMghUjsmsbKQs9HpulMnC4>SxE+P;Q_1LXz zPLWpU$$Y%9zTL9o+gqpUjtvm?S^r;`5m{4IY-HNBl8(d>9zh?5YtnR6alpq%)Se>n zEroePGC++GWteBUZrcJhU7YF5Qqo9Gq9_AV>T88rOXdycV#o%xxxNIJIyt+rrK;a9 z07`vr5jsIzO+v;di?s{txZ`~E8HlMgdSGxD=EZrmT(uXVW5|x63_^9IXf_$xY6k(U z6K>B}-6Wx6fTpP~BH$h&deIedZ!g8ZX zzvbL>I;zAxOlbH1dRWhX22qE!D05y}S?LiDyx z)e-0gz^RcWsb!=W5Xj_?p3o4#h*4zEbIJJ4oIZWuiWlq8mr#f=~5C-~$IUzX2 zUCYzB5TO0OEFvi(&>Tvv&7swyr7h39g_q^*S4)w*ILa0^-gJzfYhwx zTuBxfHp?YhqsKuDp&qH2IxU12LcLp{cm0+a>YdPE=l1F3W?XX+00000NkvXXu0mjf DS+nWU literal 0 HcmV?d00001 diff --git a/image/AH13.png b/image/AH13.png new file mode 100644 index 0000000000000000000000000000000000000000..11f3fc7ca3b7e03839ac28ff4acd40e594c534ba GIT binary patch literal 1792 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 FV1lLXRapQ4 literal 0 HcmV?d00001 diff --git a/image/DMTV10X10.bmp b/image/DMTV10X10.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a7b96dbd981ac66aae8b376520479255deb198d8 GIT binary patch literal 374 zcmZ?rEn{Q=12Z700mNKT%*Y@C7Iy&33v)v-Sb#X4 rF(6uDs*reSOf+pkE<^-LC$bo-B$^C_i=+f-2(l6g7v=znIvgYbYQ=(% literal 0 HcmV?d00001 diff --git a/image/DMTV12X12.bmp b/image/DMTV12X12.bmp new file mode 100644 index 0000000000000000000000000000000000000000..140e6f2ee910dcd1b8de683ec4f440de2e2646bf GIT binary patch literal 486 zcmb7+u?>JQ3S4CC*u}Hk1-sL6rd@x7WZ^BC IgZcd2ACRK6LI3~& literal 0 HcmV?d00001 diff --git a/image/DMTV14X14.bmp b/image/DMTV14X14.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a20042a9a321afe440d30acdb9a7c0289314bcbc GIT binary patch literal 670 zcmb7=!3~2@3`2oyB`&=%LMP||y?2jJ#j4=u^{1w!5=2VAV>=1r@tlV);;wpAj-Twi zDfpN4>xB&Bd|4tirY-}QD7^6|K-+B=l0xT#s=RndICnn;FIaXSlLtgBZ?+CaiFd^V*_>o literal 0 HcmV?d00001 diff --git a/image/DMTV16X16.bmp b/image/DMTV16X16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a874b5c83de74f8cc88149a55c00f602cb00522b GIT binary patch literal 822 zcmbV_K?=h#5CdIu?4{64o{$&h0loMC&v8^w5W+D{$byA-cD4R|*QvBxrHkHce~&UZ zUNnC{d4OA5YgJB~1sSTL45gqAN7NeHCjml;pyq}mK$M8dZx+S$f7a7H1@xtCbDs$6 zWtkx-$Qu3_Bzv5)nfvVc8fMrIp}+7Qj-y@VbkzNxH}NLgC3fT02k;71CT|l?l_eCBRmK~?13&bvOsJjpZ0G9yIFu(*D vUE{8!G*!93u>j;MJEUeo5tCkT8R8AFO`_GvT(gNR>P1_6`F{+i3jR1}zeTp) literal 0 HcmV?d00001 diff --git a/image/DMTV20X20.bmp b/image/DMTV20X20.bmp new file mode 100644 index 0000000000000000000000000000000000000000..041d96c1a109e1c6799739686c2d011da6d10013 GIT binary patch literal 1254 zcmbu8!41MN5Cnt7FHd+-LMotu{OOgdXai0jG+OKs9z^nKy*In&!+Luhr}kZIE_KfD zbC@p8zt{dWbDHu0c(yNl${4R=Y-RK-@@*w7L%-Psk^x|wIvJ}lt%A=jx|?DI_a{&6 zG|-l_gK6*;gtY{X10-Isz@{|<6hk+iFTzJnV-%J D4O#*w literal 0 HcmV?d00001 diff --git a/image/DMTV22X22.bmp b/image/DMTV22X22.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3d226af44958c43ad38c00424ddc7079cb244777 GIT binary patch literal 1550 zcmb`EQBDIv3`4gc@Pot;Qq?1H0uI1G_vbd$lh?TJ%m@jINSkqN$Fth~{Ca&psy@`; z^_*|d>9`dC{d62}FFZy3Yx{{(Fq3cCjv{fkEh2`Z!U9NK;`IZtQU<-pv`k&eO}elz$-m!BN2>% zX9NxQ;6M)Z6qb+Zu~w1S-wXQ{cy;;{=rE0;*KP1lA2Z_dWFng3Jl#f!j}jw|HDgLM Rf*}%Z$*P+XQ>^@-oG;32%838~ literal 0 HcmV?d00001 diff --git a/image/DMTV26X26.bmp b/image/DMTV26X26.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ef092c0bb0e3a2f04c318c911b6c6c2ace38b609 GIT binary patch literal 2134 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 literal 0 HcmV?d00001 diff --git a/image/QRV25X21.bmp b/image/QRV25X21.bmp new file mode 100644 index 0000000000000000000000000000000000000000..54da2a715d6fdec91ddcfbfcb6d479589041277b GIT binary patch literal 1650 zcmaizJ5B>Z5JZ=Rgb*RY4LAW25jmIP{t|TW8^100f>~+W)%BaTC4YQ=-EaHzR`a#a zOP!}WciVH#ZF?{M@qx1wHNN-fvR!?aqCpIU&+GzYXRVo;(U`0Lj=DGg50!7MzSpz-UaeQpbBK2wILOSMD2gbq&@vs@hqr zQ;*=6_d=sZUx6%Ag;HI^ zj_~F0470kF2N)L&b*%Hf@}0_B>v^Wf%i2aa8Sri9hV!b+3;UAzEx==9PUrt!Sz(f* lDdjghJ7B2D;exaV;zX^KArAn1WHuUqMBeie*helbK?L2 literal 0 HcmV?d00001 diff --git a/image/QRV29X25.bmp b/image/QRV29X25.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b14d055a5afd61f39c7db4a603f56b9289118f7a GIT binary patch literal 2254 zcmaivF;c}q3`0Z53?&T|^qhbL&~rad#g)KbIWJmo5;7Aa&+>*M11sOi6<%5t*1Q z0)m~hcuH18aMpE&M6L9>noc);6`6XKX)}m$?q`dL&q&peytF%tB{yH-$2FDw z+Tt1Mmc)b%fv&>)-q{9l(=EY+ha-t#wF>1ST@?HW DqLrnD literal 0 HcmV?d00001 diff --git a/image/QRV33X29.bmp b/image/QRV33X29.bmp new file mode 100644 index 0000000000000000000000000000000000000000..059e4b41949c98e4b54c9270e1c915fd15d34eb7 GIT binary patch literal 2954 zcmaizF;e9~3`9RMAqmL_WP5@=067__+Do$QjBgu%W%=)ybR8*Lv);7 zX|6_<1s17OgP=x8lYvY|P1BP+NYO1ID@P>CGyyFdm6vbj>|VNky}g zg5=XSoY&JVDPB9$LWDuK1eH=?7G!Iutf>*DA#L)w(kpJD+Ib@eRyXAWr-GcazD9bN zOtb?da3U~*P&KrB$nd6f^zp6JKvq_bg7k_3>{FxG}W*Cms7g?&nR4NywbF z!-!OazpKWTfRoWD7r!g19q9BPd;0E@xx9zY7E1JgYqO)TO>2j10V-^X7@qV0)X`2R zbJ;-(5!Ty8)19VXJY}lcT;o)LZ#BvUw+Vy1^`mBFt*kt0RIfm0fF`BAC=OrpMcArr Vr2GJ=-JgI_6AVur+D1B`-ha|fIFkSX literal 0 HcmV?d00001 diff --git a/image/Turkey_logo.png b/image/Turkey_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f51bc185d7af3c4beada0d5158099bcfb63fb7ab GIT binary patch literal 51588 zcmeFY^;6sL_C5Ma2=3D24#lOoOK~Xf4h4!8_hP}lxRwINN?WYB6WpC5#oe9a^3D64 z^ZDGlckUl>XYTponIudSX7;o9+H0-76Q!mihlxgl1^@u2g1oc_0Dz$Y09r*sg8zkg zVsR7x0CLlidjph@lI_7?K&&N|B>~`9JoEvg&nc4i+;Wi!LY?fk2WDSyDJ6GiOwg6!!&v0r@w#x&^*O zt>Ne-H#|hzXoz|O#tW0u$BNpqR_%%(j;UJeiS@d_8m@D$mqmSYJye?rBRkAEi7=2t zsK1+m$N%$m;J;7*6_O}5O-+mcjY{T!qw=q){5L!PT`>QR!++yI{of?`|4tI1n*T3W z|Nrn>oF$c&A9691hnIH6II@1tyI1T95ya0Fe>Qx5%n>RWF1#kPhjjuBT9(!EYz2XnMuHMN}n zar802HkrR&w|CvYB#xr0*x*F&cPzBp_(&W<%0(u3E$Fg4=i+l*v{Yq({Ui}M8phFf zj?|$07}cZS*~#dJ8zrYtaS&1Fudn;;LtZcf`9vYg-fR+}Z6a&H)xwd;Xfe1{#$sPV zGs;yGl^mMsiUQ!ey586RZ%ifFR7b~y-X0&&S%FB+@ z>Q7qgv+O{}7?TX$GArQBak4ZKxt#ob4rB4PJR5Qv+~7D)^)(S;j6eAkaVbFaE6X|A zvyIsk$;VgAM8xy$Q_BTZq}$#1)?@KR;;5DM&a3S_zTzZS-hI4l0fkKigj}8(h1-jcR4pAF> zPZJWfceroqnmrBMG=<4Fll~L2)u+9X){9B3_nC#o>GJKp6={je5u4IMER z*|^&hquXC&Lxk-QqM5uqJFYt`FZ;Jg#s&?YD6igWA@jN7rbIbIUYKlPe(&RnOls)u z0#60YegP*OqJb04sa~=LNQgPBiz|#U%PyxV%D(?qNE<)NJrqkdWUuI%Q}~{6D1u!v znIWBR)_qDuhIFX~aL>i9AI)J9z1x;wiKS7HA;viW=|M*4uZgxLMOZwDfGw6EAd^oW zimd_O8V|%dAe#C8tcQU;gp=2u`*g|QSSk0abI=tr|H*ca8!05D#XDP6Uxk|+onF*F zuW$<^A%Gb1{0X~oa1z<*VL|KEopa;0n2|J<1-YY1g9`i8+M9s}#~>s34ZFshUhPj) zBI_-EHMNu0`NrBUA4w#aq~A+@$ZH zbTmq-(bIVb7#}CcT(nkj`(mB$(?wR%$~Zj_???ii?z?!KI_Vlk>;i-IZEGVwyB75{v|F{A;g0owodf< zix~IOl-sFfKPU{a5Yx+qup=|nf;iIGCGm?Y{qhMgb7Bt$K7Ik4pU)+;Opn1%J(y;A z0T%*yyZ7(b^5y7g?HdTvX+9N2>h2N5>wc7L@?cf!=emn~V9BBD38_d}uVSHUVo-2g zgAnU+np7dhrX2e)JzVo|5w_p{{IFCvB*O`kM|8L`MmQuf zcfe_-kU;Awrvm(gp2lg1aQa-C$ao}&44Ejz6i-jT?pa6^OWqO<*JNV27_tANU!m+r}H=-1j-X?^hxP_d(jj!Yh|n6mnA(I>M9{g z_YBTr?}`4A0cJw!qwl%0c`hjLx48C1H*EL#k=HU>X{fSy2sIOq_o`>*+x3MD`xcFp zgsf{Xa~@-jUR!)EZj{d2^^aJJn~|WI$xaL#J4y?fN|S#!)KORw9NJ0}TyQ?oj(ZTw z&E)c`z5LvaW!tDY`Mx5pt(sqhp3tt7SgL^ zK2L|!SymP)+kg_MLR}JEX<1{$x2^b>pCoQKnK#bf%v<=22PV)(d=WlK$Q~d)SryT6 z$!sOUuo@|lzczWGVum}}gyPdjTXErH0+nrZ9w!jp=Eg=+?Z9=+Gm$FXNmWUBLM)(n zfN?6AtE$LG`R#MBBnUq>sbP`1t1dz`q$1D?UT+dpP$XF3y?;V1Htb8biu68=+Dgh2 zMRAc8D#>sT?ktK=v@~XAendI{m{Drfs6G|9)x1Y-mU2%donX@J{?t?P6e+}sVpZZW zmBv?)vQ^{ULO>ATD>ZDzXze!_sh}PCE}zyx=G~+9Nr9~KajVy_!X1nbsiT|FN^bIm zauf0oOt%Rdkk`fnC^XKebRvxDLj~~-IU#u>dsx%w;4?xwLwwg_O-Jut`rFfCwxrj- zY$O8?Nqp8nx%@rJ?BxWT^?&g|($R9JbR-G&m+OGTLea?)%U0J#PTJ6p`0At) zB^E*?PwaH%GY6g5(Hw27qaHKD`|>bYgmX?cV!#LcOB9W4tYJsUYOLcrxD>y79|2`^E1GCAn)4Z3!hYe;>YP}PB7 zsHzy$a&-r~Imsz)jt8bUg8@JJ$-DFpwJE*$zXBlXki5$!p_q+AU=4L!nu#%lkq+7P z82246Yd94vD+NO%A}u{_^II-AMXSzD)gj6!*9tOGnW+Jxx5a$5v4TI;2zxi)wgu&rWN%FV zs+6H<$APqH)`664NBAnI-Gsf(zxlGkA=z)WZ(*x*p)OByiB;6mfNAKenTf@L3D{t~ zB=Ey4(?~Q8(^QFWA_JeU3)&xaZbxuam;PN0S;SlV_c6F%qNtezd*%{6%h4+{uKNsXDQ*zAU}X&2##C z?1H8L8FoVduio;XzVc6R`MWryGKu$*T-;k-DgaJBVm_B6p9mw%NZ@c zPDgSj#)M!N*{c-56sKoFJxii-IsrZ4M2&A4WeNMmY8^ktc)ML6koVL#aVjm?j8C9mq}LaK8-fLLIc^gc#CL`-^Vfy=^RFp2D0vJE;HL@ z?<5m0b8A&JzKJm%;Q0creqIjYrhJC-n7O1^se1H-fqI?8_C_YRG1hcjGnh#eoPIm6 ztKU1O3^xuHowURyiTV~@erZ*FHR7W-6$0j{ye79LQb#3EZx?$mHgeraP7-xXE?g5M zu6Ah$0!OWj$ChIoDrD};65bY4`aVzYl*-+?6NB_?}*5xvVN+UX&CRRn{&Z1};lgRERP`(I-sL>cjsc zQU!n0t0V$*Mu-+W64h45?)85C&9XG%bt3I5@FPPiPmv+iZoqG%B@_7MM#h76%Z0Tj zC#KGsN>h>GbxYsk>64ip$VBn-+-kTXe&A7w(k)67_T~mD(^h+-;HM*bN_zGrAOZnp zWN8*+R*QvFwZ+P*k%viDM0n0zZ&U(ff2fqWe?~kn&R3=u9Bp86c zA5?F@0)CVD(Au+u_tVa9%dfsg+h}cuN0_Evk1ewM3yAP>B$gv93R>fLci9~&?}>U< zTS_rreQwg2Irb2RexS5Nq-5WBd0$2fN;v>Ub*1>dIzh&XDTP@Qh$MJd3H@~4DsHr z&GlGl58-SP*)}5@Ih~-GVbCeJ(U1qTxtk`zSpdUg%t6d3UcvFnnTdIA>Pn8jeUA51 zGPs=AU8)^b3icsV^gSjKv-s03B`<~x3949x%V$I+^g|LFPCbC#=%KRkFNYkN@mS`8 zwnfvgv(7}CEXTi}qK@Hs&{w?pa6nbxU68vif;6!u$95+CY;@95fOoCo#jrU~TOisP zR^ZONSDC1}xyGQ=C>?|w=b}Qza8RKB-r$#J`4Q>XtKDlrtnRHwH4-%i0lnsUCD(AI z8@KI?!);SItEKqtdQkxfws_^n+u48r!z@?1fT}*iy)NyaEV^IHfazkqy~EI}v4C6B z0Ww%)S}6kCMf|w@Z23*w&_|PZg>v%$miU4n zf|y4NcKq>l?{d14=>68c!p%ZN$@vIE6&aCMGwkYfso;c?5%;0h*#rNFfV1I^_ek7g zjr%tv0gHmd5fen0T1iBm6`#*!J0Co=>t#sCW1OTmqL6s;-xZEwj`i>R=K$Tt>IT2D zwbLjJX#qi!UK;X>?b17_cByT=lkh(HJ%;G=ijOVnsUFb?~Iz@1H`alDXLr_SENTm&E?F2vQ&)o<4 zx46IkQm>)0T^0m%Te~gsd}gNx6!@mQI}x!JWp%z^B@wtHvXBhd?SnpiA|OGe-=GqZ zvk_R#2Zs*eLyc>Zah?fk!3mg5v7V1eFja91|5v^3g7ALwPfz*xdB4lA2+DokJ{NNk zzWGXlY27$FoTGkKLqUNf2^C+Qe(c2WH$4`}*C?cA+Q9-mRV%v7C5LE+g-GSAiwDUg zOkZ_Jbyaf5{(n98oyK8EVM?knITJZSa zoXWFB#>es9s_S@g0=OF$ru>Ig2Gmf@1VRb?qX{&fejz7~4i3k-Q%*M%1>LYt1|I37 zOO!KFX#vY9pvZ^)9aPx1w3eBGP)b0ieei?Gsh2YDme!O@a^a}{!C$~pl6d*Y-V{9~ z@AzO_v`01jl8K3x7#(5gn_9H^iU2*y&nxO3(kpnol*@HBBzG3e^d$aW&Uc7bY7ZE& z17no0&?FeZxH}p=y<06gRE_ing{HEJZ(D84m8gQ_=!vq+k6_&t5-1X*eP}PC3Zrf> zpg4xz@XTL80$2K%v|4PDnRxvD5jbjgJDJ{AVNT_alCh@YVj#Y_^Ur&&< z)2PiCP&g!!GXnESzbL^0M$2fR-9Uas8mh>sl|5JKn^A4x>Bt8KW~*uw&xU9wjsi<* zBt0mSbTEK^$$g3PjWA83P8Jxo$Xv?5c+yZy^ZiBWe(b573(q#&-Keq!FNKv9FwZtY zV0HsWSCMSpBVsJtNQaRbr$+DFn~ZRVQZNf^qCCnP2BXcF&O31B1dg)?Dhw4BoS=!c zm}u2&iqiFns5IEyf8`*|`z7H+mZRez&{PHaMeSEW+J_HBB=Le|hYFZ~116^j6igo` z98)kzIQBA&T<_xp3f4+~{CLxtzf|&p;MmQY0S#7qp%2Vpg1qX0Y4X=<#|w%;G4y++ z6wc!b&x3I~6-1R5Bp@sathX0Ks7i&~sl7z%vB9S<|p|pPuJay7|EN25FQy4cLmVREk}UnIht%&iAs2f3(Ktl!CI`oaB?qJzzbN$ z^#EfEd9%qI4_W%|0zHvY<7agygwEx&QVyWCQ0W~=z$AF(91EgKpfT}1NLr4~`mh1HD-47yHw}go z>!`4rd4l`6DVo}$LYdC>0$Gf^05|uprMF7;V_P3lU}ZSXUtU9o2Y0wTzLb<;DYQ=; zEu~jf9-#$r4pF6}nOxLC{eP|;6;fCqn4KdTrLyJ3R0LU2>9p@Qu1XYk;eo6{Lh!_kA zw6bY#VVHxg3MQ^O76EUw5q3Gidy3$M<74jG5G~)4l|Yz>DVhbp@n0M7!%b78t;$CZ;*fe zwO!K*zs_owA=KkM5*%KPpKi%B^uP1bOSi^pUT*!k=GD6GXcPR<^7Z*dHXIx5J;Pks zVX()GKFc^O-G?e+i6)cMZj^H(5G$iTEsDtPcC1RrK!{Wt8yx?WeqK+-Gkn;0(ouJE zZi3RuKBF{f>-6B}Z8qC`T0)ptSUo zHPa>!8JnCom74#9JgEQo&V;j8K5ntST2_5h4yQVZs0K~1>-}`otTJNW9}E<_KbWHm zBO{dbv~vDhT~ZFcw^3v=X2kYH5i=A23M3W*)S4gShYF$MpB}k_to~r90rs|IupY_G zEl*7TkU0jlm`sk}U^i@;4>bIB8EDvI8u;>5iIM%(V5w^QYQ7#Sa<}QB=~(vYm|&Ri zoACKuVIcdAsI%2*(#hYT$}vFi)ku>Pf6(@VH+TxCG+NG`HbXeqU%9HH4dKjRzRJ-b za_y_=S}cyqj&4c&{Mqe7@B%mVNPQr)QP1@~YjVuaVZ!yZ<0 zqrs|4!NP zmd(^3k%vEG2ZEv%eG0f}nma^Oe;cPcL4C(UaYsv9jEK`kwOxGfH&MSwkwvtMh4B>l zqsaHo*?y1BPQvfsoW1Gc7MMGCXrF_~IuJoU{%pNA)XBfn9_h`s9Q0Hhj(P#W1x@{k(m^ zo}S1E_U}^{#&7-+Xohd_p*wHN*{!oM`YGANin_MC2Q;$+5;;Sq&HfeTIh@mGwJ=$) z7toxW4Y)H}(I*K>>pywA@xml@kbB%i61gj-tnm7V3UgZ*M3ZoYjL5cjL8!_N=z$$c zz;zDWabEXX`wfQWh)dK==u*=6tf`x^xL}w?LSMOjH`zOtcQ~vr<>BV<@|MuGR|{5k z1AaK5=r*iKpZfFC+^|h*p7e|z+`4>n1zy1J5No{8Kc@7 zGeh83Gs#c{FW)|vAicm`Yh$b0q8lBPV&zSTpw(q=I0tXF9z{U6M=DYq+%eLFJ8ybu z`0##?HSdzBKCn8FWa#~!KoX*(RWJiKcS6w%lPhp{LKHP$N0%@}T!hrNeF*_9(NW#A zfY8$mQx5&^M^GbUp?6AQA>m+Ctz(r(B)F1~B3lKItisEB2lby1DS#82kOQ*gfX$ev z160`j0sX}tqAOXuIDQ+SlR5sB`LoiPI=V@EtfdIr(xy9hI0w9tbMown^7N@f*}2j;T>Nm-WNpD#-)!Tg@11? zL8?emJy8K%U+lrwhb&9$=`j!%ghG~P;5_UtP?wUk`^I8B{GOp7`e4pwclaVJ{OzDx zWS2*I-z$MfLl_cxe8ip?G#A+)mk}UG0y& z{_W$Ws7H!j(Q=5j{V|^5fP=*TkSUyI>I$z)Z+Cj5=-UD=r2Tk_|pfp|A0an*E)~t4s ziOCaj;B71<>3SY9w9|HJtSndjt6k1)qsEEJc-wsr$Jxzia=i8X3E#iW#(x=(vA*>b z;F;7N0;nUTBbDQN^x&{%g3GS+o7n|QIJt*z4=8wr*;hmNd8u}JE*v_RhT)Y59Og^G z`t2dtrHE!-)T=xwu-JoRytXwl9ZisWXoTT1t47#OpL1Yn;@^@OuIN)8n%Lj+=EX`F z`5Z{E_3$I0aUHy`k3@brL`ojZsM6prsX1c?;Ky&=yKMSH#mg8dc4>ZVgk6+mry(Tp z>d!7SwFW*UYz`Y0wfahe)d+WnO=(5lzxI>dt`7e`FT3~DIG`PM_`-lf8_%euIQC^% z57ciW$Ecwr@$y15m3l8V33&s&QHX>-U0~fko!}As`dbGJTfvzpxU%xWb%2eWMKG*u zlXRt31^=f@i%qDZMfX^k2d0ECx&)u&CxM-D+fI+xlRKZCFZOpnrO(6{f{~*fkB*(! z{?B%SD@d%C2*!M}qCSl{wF%(D#Jh5C;?3UCEeX)IO(OI?7)ceOuC4vwx5u~+&5FIZOc@&dodbj>?(>0hT%6a( z2%(yVC6}~}hMGJl?Y^ni)G25vA~by=lob$Rumw56icl6H!jKaJyp@tFi;-x`1l~3u zpSVKWLchF&qC~+ld5=W`WouxtVR~^a7ddnbErElaHNal8nC(~UpLJkk7Pq?aS zr>WYg?1X2eY4O74%=@Qjf68c-`|62Z;%|19rnk1(ia>^c{~=szQ($j8(jUmUPr1xI z%P{g?dG(T>O-S-78~xzJTk=yAfvvf&6Xnolyk^D{5b2k;+#pz#sHKD__-0vt8DgIO9Q&+t zs^G8IQa`TIGksKP42Wh&-Y*ZLSK+L!|IxMz@_KenF2} z+Z*w>*(IA?8OXsWb}V#JihwfxxS@H>S?1#uJ0b`1(t#*6C7yUHm079A6M#QFZ;fo6yKKm z7-Mz}JP`WegE=p~PPqKT0fj=#WeGERXRB4pA?f7hKh>HJ7 z$>Q^vm5xA_NJ3gVc@dR&<&s)P%4gn{VU}mp;&DwNWW3!-cO(~M8RA? z^4u6M{3AaGNua~oD<9|gT#v)k$wMzV^Pk)LJV>j!FwBtEH?%~ zzgpkiU>SXv>szZYpl=dG{WOV;m3+C_k(9|V&xMpGiIJ+L^K71!Xv}UaXf@~_|KySX z4~PEWGj$xI=81ciP3^iyPkcUIrJdzy&^ITKSje{26b#Vmf3kCsW78+pTfVLAxZ_k{ zZ}ZM;Iqf_knUN=m`{k@5G?Zd3=Uwhtx)Qf>sP`{$9EGgTC#}Ir|Hw6*XtpEHdfWq^ z9-xdlgp7d4B^99e#;&tLi#8i?XSt3{!)m@DVgJWl9FvCfjpibUb*}^Nx!mG`j|xf~ zQ>dy0IYa}H(v*Y%WH6@|EgS*Ax!r5*ly*urWQ|B+jD%({Q`v1|KM&-%JtE&uA0y z_LdD;qzfLkp+NRBzKFjm|IBB29Jr~F5*A@O@rXT;L>~{0A4s~VOzgoHVO45kB(6ie z7H3As9c?}_q;qQXke^~hqTUQ&C;i427gz>Z(xSSj0Uwh3(}h5h$Y1hbYv_r*QPI`1 z_dfU#Dfj2a3uuSSKa#v8Mk2`w@bt!}DnHGQj=3U$2ARJWqEXGLul0$wuN8mW5)Q8X zg9@Wy26XvZfZHtL7f`o!r3zUvXUDTA%|s9wC(c&Hhy`F!d4hCz7jd#KdR1(Ji)i&o z%R7>(Y@%z->2XLcaab@B-^l6a-GOmB)N0}Z%M(^PQra@ilNZrQIi$;!q(Ms8vd(GcrP z(FRz=<^8foB%x)k{pMz)xQAb|Sdg(>LyX=pSM88!SE-9- zBev!+nF4jQe4K|9!^6Zh*djNTcV1$!R0rLP2Md}5R0+>S04|2AM4BT=(hgdJab36i zp5?lfy5H5rjHWf@h;vf4d6fQqKK`@xjTU0Y<%BS03^6mshdQWkqF&VT#k(xY16883 zc-6>oFuC7cUr+}4sPOs?Z<{x6)8TVRb_~pwhqc%^Zaw4pCqG!rdLmcv0$#Xh*GYbl zxEDsOn{Q<~$mW{bOcmIVmW_l3-O_IQ>aOgHh{#bfpFdnQZ(X;yD~Ub*;!qlenJ2}a zx;^t4=SiMLc&jCN$j__&I@$hUg+&JbdXI_85b;2ZOEQ$#;>{1&_D8=F`tL2bQ-*@W zVt$LKVb-59kzhxwg@zawxm(SYt6Avb$C@VGXnIu&Ujj4pbwl*+p=();w*5ct%RhfN z|MVuzc|zTxb!NGJ`%vK@r}HD}0Z7D}Q)ft?_IJhyJwtZyEc$K`A;aZBf4YOP>9l}N zwjGO)oK9X7Ql38|RnLk54yNSZ3uZ9#HfHk4gY%EOKF(?0KT*;JWD+E#j>0%HA*1}T zZk%-KYylV9fcyJ)#rcHSlN_xQXwk9?>W%1u@338t{8;!@atsY$x4Y-FtC%fna>rQi z#5D7Mcx@ckD*)M&b92w!K$n=spB58^5(`RgwuLE8i;HBzoU#fz*%`}mJkh?hEAkH? z@9yIfr{s8)G5{`gP1yk5^4-GO-<`rhhR zeN%voNV@qFNQ;{l^zO0JEYw3>EjmA<{J5Zh6J|Pa;Pvfb>2$9zB!2>P?biG7dn%Xv zjpYCZCxLm8+Pi>PkrIUbX_K{24)6q2>PQL{nJKrwuw0~cVvL!M!rxP`we2S5v z0`B2`n{ct>X@WpKwz;OrJ51@Fr^o9ml3T0L9eJV3+sk7IyYaBNKI?JU!>40nIz?vdM}UlDFVAcRTUq^Ts^^D3o`V z{dj!z%#tbCRp>sR`losm(i{4cKin?Q?s{pxQI3eY$^mgzdLUwrJ&0O)jD$|^Q_hTc zPXm2y`G>2Gd0e;*`{Rp6wUVYT;7vxNRsN^-4bt|fw3ElxkALHXOMIFX*LN3*p8gcw zd^}FYMU!%j>iC6KCaVH@IOY#b39xNUGUOsLf431;#bv{FZVo>8#uycpCL?=#nH2+GG%YkE--^?}XsMvMxD$^5nJYS#u-C0*-$siJEbqr=d&Z zu=B{XXS2l{Qf2n#0PZoo?CB4k>PeZJ+hKVxT&_YDnmNFdb0H9_VDy4e9?=y& z+_Akr{oOG6hiE<(N<=H1`fzu&2ag&rbrXHJ{SN(a^a6uV*(J+S|8D5uyX`zHkfJjHG!8fe} zY;UFw^|J55mF_1xt3wFKE;x5;t&=W9t_4Y2dH)de&*Nc*J(C#h;40OZ< zkWMV+x>&|j@gu%sZ$F=se^%1ItSJJf&--pZ?iH`cRH<>klUoOKDzfSm8i&o6X{^!W5_1zL5EUOzn_8t(UCoom&64u4|dZb1Z^ zgfV2&1U%lZ+vU4XvPV*mrNl@Oj1oJPnEZ{d-dmuPyY5Pvjl=|A@O#zfe#>zWaVkou zgDHj?JSOK#eTpUn0^dtref92I1K9&t*f5Q@-7^3TJqX-hoROOS`Nv1=el>A#gVIon z7q+AWW6*alma}>G01ES{m>!yo`te zihQ$)D)CU^8RRq2G(T|pL39c>uQTa(Jyl#C>6{6Opxc?x4i^SR=XHFt0SP~hzTOkh zdmC+bh^F*Po~fHs<^`hcYYg-_ZF>@jHknYVszo&+QMh61^Dazwe`~2iX$(G#gm8vt zk5{|_tz5+AQy5A_qoYtSrDXIHfI0b}HEw(BE7YHPo^H_P#))i6rhoMyts3jk0%`!4 zf7FF0z!l)~g={Pb=eSR<)C8S2JN$u-yut~KiB(2$oGa|~;|E)x$&(E)gI6v`kX6Ww zOeUKfo$}?vfWCLb7KQD(?FP&EUD*<<8706b^QtESbWd>0b>$rcu)#}!h4GCcp{B)q zt44F6CKwgb*rXG4Z#GNx<-$u{JuC| zcXZLWAD(u$Url-cZ{0gL4xqaqT>|(Bpa;~zi8e?NA6tp{VO2mDu6&M3IPreVCE;+b>F%c?9I2rtAhZ1?HY7v1~aFqNA7S|UV;LdQ0&l==9a;y54#|`&&`zLQop5I z1RoUrwqjP2gAn9)S@s7R&zZoF6fHWJjL9Bb6Fs@M{Z(0_&V_G3-&*|Te_0{10jiE_ zkr}Uv<)0^lt40WS74kq*5B871uk!SR?_La=@J60TMZBIF>5gj@j!;jK$`W`ZAMt~k z9?6CBN2y)5=Sk-=E1=LG`+HtIo{=`aaC@jF_sL*`pihdPRN8S@`QSbHlx)Bm84Y&4 zgwX%E)$m*12?aC!HzD+UHNSlCU$2-?rqW~M%&P$<{1eGIfz**4)`ai=M%Kv?Z_cFr zN8c}5<3eKCO0ayo_{M{N3t?Q>IoTV?Z$_cQs`Jn!ioxh@)+zHwglQ(P!g?&GOCZFb zb=2eVWmW|ghKT8^x1ZiVZb0nTvAvdAz6%!F;WU0sUssNMXOBn~%c$$Je??nlVNTX3 z@A$--$$Ri^-<0lUY9v4ZTl6qANuBc58aq*81;7={tQifqE#EF+Bnd)!9U{=~e;Qe6 zo%TJ!RjO_|1qjXTn?ZpU_a6nm3Ou|ZIk9QMTg#IvmV`+n%By84z}2!C1f$qGb?8xv zLif3eH2~bfK6x42q<^Ob8{L+6xsDQ!Mfu_0g3}X3#H?zg*Lel`R+D3X=82=+zPi_VxgA) zSxAEYQ#+E$mkF2oMQGv5{gUnfG}BiA!Y(@O4+Q*D{3gTll9KM$p^>qxfE@z;^%lNo z!H?Zq@DwJss8T5VDffHIV(?eaP>VBBJ`@5d4i^sh&MSbL4<~&cFB5o8p2A;F{5Bs)PDN3{&)n(2DJdYdKO7xG<{bG&G6>Sa5oADm}nPMyu)6V4NoQ zK)1hGP-Qb9RkiyR;d1FMULo0ZV2ygY^go-NcuS;>qO38Ldi!VQ`VE%fS&eG6bSg|D zxE9Z=v{Zqn?J`ny*xmF4d?ohLEn;wumVw8S_1OsPPbPR=2jn$LgG1nCkmQ9AeZ;vE za}x!jBu-%OFuBbr4Nm)R5d=_ngdDhpUB|Dl_rkWUmm;SXsYT(sd3wEgp zC+%aGW|lDOAjhk$9wK?L7WhX9jKD7wuDq8BgP_?9UFJ=d{963(-O>XrHsR!-c;+#h+*;1%^@b&#xRh6Fbpn_RS^fCi4h|F>e;{Vb(j91ScHjFy8CS^X zUV@Dk1_-~_8+r4-!c1Oq-X{E%Je>XYd{s*IN1)JVc%TT*=Xx5KYQ>@wOR_dqkbEaj z9WxovFqva0(0!sbA2}uQGBz;^U##rO<#+X!ta~0H@*Dx3FHi#YyWOGx*!PGFxGm~m zsB-BiY^%75_QZu+GD}Z)-c#y`{|-#!=0zDnk*J`myT;+%+y1@&)c>=yW3ejoaZD|aO+n)5ExO2&(^98GN0et?IGcK0<5zu!Mv`b3UWH)`@t|bv?58r-Geu7&PqG@DF18kNi>O^AZeO&We))wr-0RV%pM@#*zIwQ1<3exq<4 z@V+6ol_9C)O=K8e_#@Km;RfdPsSg6tCMq78ylQ)>JyG&J#$lom(vNOQZI|rb{vaQ+ zshUx4bw&p-t}s^W3|v30PTZ|m$4mv2lj=BJ8#RRR1&zgu)HSsNlt965J;hGOv=^rA z#Ct_mRzq(4rm^UdQ901uag0P3RZlJng2|L=0{+_X50P(kc_}+DH6s1kpYi}pirO{d zVA101cCGEFUETd}X>1Qtk^~(9;P}q}sElOf zUysr7Z_T8KrGYL_ckXUzS3^@MT8L;_O; z_-mUwt6qUEnpJlNXJL|T(g>NRf9`rac;_M!;#m4m6A+L-rEmn?BJbyxgLOdtokPKs zGsJLPWKwwj;RUqBHJ0N-dug>|N48YISzTiiji>GK=$+Am5wN~2h*+?Bu+pgVIL)AW z6eUSvdSEs3rv%cbC}1;9 z^Q|uV0JLOO?jvDBi=z~7$%6JCu1~m|%9pR=ewYhQn2syzj`E}0(~dHg+`#pcy(nCb zh6}3!o+l1w)0n~WZXlmgP9gqsjOE~iktDRQ6FYUvlM(9{@Eu#sjybtT3P;rcS$-j% zBb^nsE=v#MPVdiA(~1byFW)#*{8CVI#rxV{DCGYta{NL@YRBfs^rWRg6zNd$OSG;@ zW~n_AF20QHot_;2Hp#-8O;?2@O}hJKfkGNalC1|KN3S5~%5(2HxE}mQ4Jc7R^ujWJ zML@1akVA}T`-Og(%Y-Z!%mUv_T=S<8ffwnRS|OK$UU1pJ0)By6!xFjaZ$LwC?o?IQDP08xi-&UW{V27T^AUgf>OzXcyn=@zA zervc^)s=o^kZC#;*pTI)kz?`(44y_WP`~p5!lw5?7lI`PVGU+b2FFfGyiOkByD#DY8r5$9gi5{$ z`1r}0rFE=^p|XwhQ1LL1b8GpokPKrlR&EK!IR6mTExFJHb>Ek#QGE;K&^H>2CYlNu zMJx8ga0JifaMxlrly+m&NNBUG2`g&|LOa+PiD)UGcL{%U_^(u|B$R(T_1XT zJ{!pB)03_M;>Rq0{ed>53{&7F?0y@AhJBnc$PAHx&`nZKYGs7EZXq?4Rhr2h0v>97xEp?Komy^$il4o@-rIe0V&P zFuc6*pefSUOh7a37hn+ubQ9V_Oa)lH0v6(=Kch(S6AC6lDP)r56$uRQ*@1CVKizD8 zYY#^9ac@SGV7D9`xZoq*8DE%(cM0o3LMVwCKGXxudCisiQIix!qAo$=9!)~TJ54n$ zr4(-rNWbuk&#Z zOd{+OIzPWKCaph7;UQWJqA&RJI%rMJLd!nI;EgrR52W`7q$gy6w275S>g3v0W_0*< z?X)`=9bY4%F$k&Ci7en@YGu`{zy;e;VZv3CK%PVFPO+(jptZniGb8>-pb_c_zwC`U ze4Y-!YKEO#QDjc23Lu0YFyc{7$KoUn7YJY!*kO>>J|+6BKB|N&e1ufFv;%mWBcZ~M zxscV4WCpf0!Y?ilY36H=eEyz%-#VaYYelgtXNw4W6e1m7e8(UkBF<@C@|{%T*FnV zwKI137V;}*V8NF(gMCz5a$*U-IQhUKYpgg#Mz>Jcp7-=ikm~6keI>E5cov&B2AY(IX^dZau{#q)Hv)X5OsQNHM^^(iOdE;6+xh&9V!i_WKPK*|*9!&pM}-=5{2!wJ zGANEV+TMp}1_|!&?iQTj?iwUG1PJaB90vE`l3+mt!AWq}V8JE0ySokW@8_KN{N4{! zR8bTkx~Kczd#|;wy>ue}kY2C z_k1`_2p#3E`sWex_|=M(p0*uLZsvw*4#%9%kQJ0u8yQ^UN+F^T6gN8)`GtqpF85>M zHwb3jcc7nX@Kqh3ODr3&uw0ymh>!?^FsPnhD&Ex4tKi|S=zs|F{fn(I(jCX&fr)lX z&Ojqwi5uQnY$UYdgNAcL1C2L^Y8L|Wir`YKKYljsGG9jrIZ__PU+P6J`xgH*(zoNR ztmZ^NScyVcq(NG+SzM@x{0GkFfKVe?p(n-smaph$t(xyD2DoR-vCU}^9gA^XY5YNW zG2$w>S5$!Sytnp^jMm0q^+EFv6uLlz9)(C2E`n+~iu^#v5_M}VpO27<9~nf)&lCAv zRUV$Vgoy2U5pakdx!`wiHpTGt`~y%19rEjLFzxH5kxbU@>@&snTl}H@zd2 zq|ioutIv(G`3VwNY9Ez$9=kO9yHxX&NIRDnoh_#N0enF8)2NVmUv6 z(HHvU1h-B2b-dJmW&fvQr{~z%O5b?*4WT{L(Hj%ez3bwx; z43DJ@2QjCGOf~RGu~eDuFS9Huw#=`hn}lM=3u5CD$$47STxQcmv$`3F?frcU-$nxh zcUVd{GE{MPu?SR(v}K*N)D73UTlAg#T4gBtEJw=ALfT8Z#0I7y-=Q^XNX>{NTqqY- z9&A+4O2Yif39i@ilhVka(je=0Ofxue=>`uNP#0RK`MHoG6KCKV$K1sJ+11wZJcAA; zE$&O|VW!ch6}-k6TS~Bkq3n{5_B-8}CLTzbb(W}iX!OGls>Bjv$q|Z#7DC=1-+81U z@u+HEq{{0BQYt}ysW``^j$e(+!xh#W9e-WZy{^aiDiG$qjaJq(0j5B@_w^Vb+S1We z@KK=Pr?tnTwx1VhieY|_18Q5FaUAfr2ZkYw*@G$RNL^Qcq(pKQK?Vw*AtkHw1FEp5 zZGr^5_q2T*xFj^Izo34vHKo8+1V-o)E10Vy;mewy9sk+qr&}Q#BE!Y+6G9$@An3aQ}ArL*#_$Vw9S8uzn!_ z&I28r3TiQ^yre!_lS(#b$Jv`I-$zWTxa= zav5RPK%g3FOm|h&2c`-ZhUq{0V0F~%Y6MX0x9}=<&Uy22gJ(7gR6T0o%WlKG#8@X2 zmS?8`g~#PKcq0~3XCD=gZ!b|sg3r`DvW+5aqMt+z{ut&ZQ#7)*C{SFqh2AA6E%CGiXtGyrr<#@H0c(`-6Z8+#SQ3zVW z8W%YZf7f*+)A;@WmpcBBIALK#iqhrOh*X3O{$Pv_M#3h#lv)4rdZg_Ap+#HihRtYMGb3~jcghqYaY{Q2R>cu-( zVw*iqI?wMrOFWiX6WIF_VtlK(a7qKsthLfs;|7g;3?7gBujvz@ak`a;JUPc0?D~piL1kn&@3)+R;3hD7q!kl#S23&jH=Z2Yg`XlhI zTR`kYKkIiBd`#HneY7#XQg=@&_G*HEywqgzsiZEwv5CqLWR1i?{LBlYbuv zlbD4Z2~EJG=C;x+p_6R*2iqZ2zv*#9#BV+5yP6C#`-+$LJt?fIsB4JRI`jbbM|x7k z{A6oM?VkWdytrib*E@k(apS*q3Ou?t)%*==@C;cXk9Nl~qzThRNSrP5=<~(6r<%3o zg$(ZpJ>Sikf|omYW3JYx|6NC&>8*?Nkt`rt7z#RY7ye zT^(3ZTX$;E-WJIwi{G5wf#?aber;zgk_4CM7^31=Y3wEhNTO7z`}3UguIHUi^|zTO z%~B$!TBZA~;^0Nj1P5W^kmx{`qs_Ct`4Z#*PBLc*S1=xwEQEe{?UrXK{~VfBsNpW% z;AjdrBHO1IX-7n)jJ4k``-1;z zs)&LA!LYax%iiO7c*t+V^9u(zd^Cs*q*qh!M#jil8hs6WT*iuGLi&1EKYq>y9cMe5 z{i}IIcgPXG=ozV2lvAs9nYA*%fam>yr{~BCV*WQZjY5z2@kV}G|IsEBkn4S|{t`kB z!~w1h;8iYg<#y`X+fK=Qi15GOGEGhhNQTw5RCleiztN7?iXBpIQHZKdTd} z33+ciL4m~PusWlQ$=Bou@ym$W(5Y(TpWs^rs&JwSA4sCr^z4uzNu&b&=OI6x!M{At z8P{Z|U$_W7k#7=j+$V^lega9r_e`J^57JCETxiqgFAnyh1*ERPc=+{*Pw-~HQGr3c z%KsVuvj3A*DH?O;ArsM^vUlQi2Vd#O%rq2Skt*Y5wM{OVh=nhdZq)UjYNtZp&LlFO z1Rkr3P&@WoSLdtBC6(NlV_*mzz<)1)pnSN0RWRAG($X5sZyqt$$ zz7Q-rz~wtr<0DEWR&~E`ZE4o+@{d@}cEj%Gf~BG*2c)v;Xr=;Uc$>rsv@UiCZhY3u zeF;iV8#YAT82NP<4u*wt;LKcOhM?ys$W3(wI%hp&4@HJuS=lO0wIeL^*d&S5Z{C!e z4}XM?qOwcx3r$5gvI3YWwt3^IKQ>*7!4Is=*u^C+@%sQK%TIz!?>r%>IK+`AeA=S^ zJab}iCxsIZMnPF?{RKRqgA`q3ONbGH&FJmY)Y^P_orP!FiK7*g+%`y;6@8{dCnS}+ zl~H|XB)5RFl3FlHnJBDP)qctl@AZN3${XJ_-rv2wnZtcC2+2FyatAFP0hQoq5E;); z^Jk4sbGVY+ze+#ePls7CCVANV=>KE{iRQ07Kx)KR3V76nv6)FllrB-_6*Pqe;@^y5 z$yF8_rvO3I2x#jTRt=Bm-byK50sVfNeIP%Zvh2ArYz7lU8w zYW?FgsLlbKV!0r?{~Usu)up5Dy}$TAGDihsu6HHZa)Tm*&TCu`DFx!=zhCy(Cm{is zYtq^5-3L&^6AjjCb+@Sf2>FUJEh+LZP?Z0f@Vs(hw@s=zV~PL9-XO&a!NAv@O29>- z5{efjOOHz@>K-L>{(WgWsXc%#wmz*>pZ1LVhXuS@Gh35&?V~)ZRv~VOVw5;ikuPqI zaIAsT!}=EPd~SfPt#lb;6L3t6JH;hmI5fFgoo==o=guZ?W2 z9Dpy9+<_ZC3$O)p(1M5=2I4QMjmd1qiRFTZN0TEdQcP@pOcpj_TL09F%k7s1zZsfL zc8(DQ4>5wqo$y@}miUz^tKTFpbyXa)EOkMnArqzu*#iPWMqZ8CmQ>W*g7Rrwa5&Xc zq(sxarS;7NW;B2Q&mz9p2nySnDu_bFOxm4e!6xEH=}Gy)T5KwZP4c$m(kA;Tn0aTp zoYhRwfL8FI_j{2RM8QsnitR1thvd|cJ}<@d`bP9IVY`SEt|aeCOv=&^8_&}9(u;>K z(nPJ+w!UgL-^t$}<8f~lebU+ze2Z(bc=K0$b9Tj9p*m2=$tI$gJ9xuhXcih0I`MD1 zY40$d%T!OC)?B+g!d%$C&eb)3?_nA)%8!~t&~wjYS}ye<%uTP~Cxwc}?`Ite`h^W3 z7FVKk_v*`=cGdHD_-Aflt?Wdd?Ii1kTpDvLl^9*D^z7Dx6eeao=36tLli6^K*+})Iuo__ClFFevTTy7dABeLAz-4^R1sP4tBADd? zRGGkbMvz6?xiq8t#xC`J_$}NINBfa+X&Uw951=V;p$o!r5bf^jZRdY!KfH`DNp+Xe zHoO5~!G8N01DiG`-c%dB?kVc`6Zc=zr_4QZ&lH`iyTY(f+Cw)mrH^w0KVWq7D)%tH zU^ME{g~gD6!k%A^h;aRg$Sqf;dHptU^ABC)K6ey3k;y$J(Ex!K0s={aRtE{j9@*_A zyZLP=`c|lm3~>hHhA``;7YF%Ro)EN+@J!#!bnI?A0(Xb&rzlfZ7cd0Q%Ya0Qt6?(P z^imj#cOJrjAK@9Rd>S!bhW$A9r zg8g{_VErhECSfSDgNRMPmm^DPiN6OA4$P%({nQ|{@{R+baI=>sS09*PG#CVb_Pj}I zU?Hufe|Ba9jj!o+36Cp*7;ZtIW>LDlt|B)8=K6{0ke3t_RKn zIl$4V8_s9EP zN^tpaO)$vg$`a5x5P)n)4$c%G!gtnbmDkKM^Brln+N1uJDZnx|OnN$U*(J)Bl;Cf6 z{1d{JCJNol2en-U?*SAl_glzB9$eF>HSG2`Zp5l1_O8;&b9uC$1jv`BmY?H`?};@<8ZL<(MnBHl z%jzt5P2$<916GGF@I>aF+Db5gX9AfoPuD5!ID7dnE&gUnS;$OO1AX4ca+!7q`K)qr zbQntCF_hBu_m>wGNcF7RtqH98%10RSE7rM3+B7W>j2^RZY(MbhX@19rE>A^eQ;EL6 zvIKMrCdW8uiOjV$4tEEnrjvuin*XVO_z;Ss1PK0G%vt+?Jv0Z!Cl(01s@ z6+?%`I-|z)>&|?Th-oCW^*2an!QAr`aw9N+qWOPkcyHe{ya;6^w5+By-lpvXBv^IH zOG$}fEq5bMItR4PRbvs0o)LqFA^{_ii%{=5Al|97-MTvbQSvi6dTam3UAsqx)D ztiy)5mJ~c4*--Ubu^R8+aoP88(ck!WW{szm0Kq&!(P49_L81dh5tx?_P37TmVr!tl zr5`XbuRGR&_l0oj0<$K+@K2ddkHFzU`=k}smGIrjDBA7h(B3dDelGbXZyv%mCTm5K z1`lp}rvbX9-(wg9FYm*z&-787p@8<}E4e24S-a1EQTJFwYGSc{lKmlANiuAb{KH7t z=V{JH?9C5_M&lZynj5G^>7*Pdu7wgLB3gQzmw(AZsoo*+x8VtqF!0-$6zuy;M2O?1 z@i6t_AJbOHP?c&T&r3|`Xm5FO{bt%u5*(A(k@6h$(-ds!^Nj2L8zgG9kXW0nC-o&M znHo<53!(mL_->XVLYO$-9T%)Rr#GbD4t-6NaNXM?G}y5ug9iF)-8 zO3!09u)^eHRXKDc`Y_|uNOh7=2w8BYA_G`qD^|`xnWoFft^E;Wrjes57i}KOXPNlc zHl3F{)XeNYQjTgQ9Kcf9Dt=?Ghg* zg|CHOoy=mXLLW{i7Q2}=&Q4cWUh!@mO@5QpizD%Owj@^{Z--MX;_J=F%7s9CKo z2Z74iJT)#A{#}?ehKvc421-Y2nCFuuKSqY$>F?#4 z*W>Kc2lwXff{UG_7P+{WsEAne$^p1AQw&473?cGKAV}Rki!8C5z{-f!gen}K>{LFj zcpdibD851+UkZ(NP)^_PF-_%a-S<0Urqx6%=OiD38JBIsN6kf!f0aM&kh~I`uDe_e2|hr- z##1hHdlHb6e*?45CeHO5@$YnXa0c&>AN6UJdZ5#cqk)yR8u~p=I_Z}AIC!;;Om4}7V-wJPWS!-Ov9u~4xGRI$r6n? zP|bf;hggSVlpxtT$7Kd$Zw01c%7@&XeHCmXI*=!}LL(uR$uLnuhXgg_HV=05e(FuU zOJ}ov7M`9%(Ua7*G54#!;@3tK-+b_R#{>3)Pmf_KFg@5dRgU(kWCSgAG=BuL9)R=D zQDz%i8C^>;!I~E2=ivn&1fAzJi!h=nbENg${tHr#U$%7Yd)zZ-FnxZUJv8N2O8O%Q zjhEE8r&`Wb7>z@+o~e0|2t0nr!MWP>VJ`4U;1ULVlSr$e>hFSbR|fr#E`S9kOV0-t ziudVtT)+*n6LGW)k&Nqrj^goWzM7jT|Y7#4mySGjq=xB^= zS7}y#kSJ8A?(W$Z$5|VC?oP|LRE*p>#!;MwnuWjd(+|Y1bmcKQ0~^z;@mMs$)jGEM z1VVMbjch~r-$cBIFfHFN&R%*9H|}&N%`3ywcoyG(M*La?*QZLv`SE#|on#);fdGm3 z1o!ORGNEDk*$*PNx=egH$kOauwdXP$maf|)FhE0V)cwKY?M&*U#0k%f_H|AO>80xwN*%-1$sC zxOH|00=h_;Aug;O_LvZqu?EB53u=-Md?;W0$y6X{cL=U&y#vh&oWBKfFtL*zS10y# za36ECrlvWj&c^nUXCBpsJy&l)+$*#;?>@8^)*X4IS+2sOP)dG(9hp>c#=z4%!152+ z6=Q9u0!{B#B?V%|hJIp~&FXQ(GLkdwcgKUy!TrN<$Oi~9qR?xmK^{B|Jei{ej@AME}u{?Cp>}&S&Qu{&C|b>+MZ5hI58}7tr!Sp-I9X1V-M@5xaN^! zW5M$B#*D4LFp1lncAeXsEU;RJRX`^*Y1J#MDS6zPZ1LjJEE-MZ-ze%{1}YH?>~ZE~ zOicjg#y3|P=Y@qjJfNtg77cqib5bTE;GkwL4aETnfzu<7NH+1y<>;uk}`+ljmIP=9)!ho0~lyB6ZexAHx`-gfKssOK#*`m))> z3FX=B^>z=Y9%540{T@qz`vZ(faS>6N}!ypX!AACD#!yi=s704y@PIzd6wJ z8v|RuB%OY<-I%JGW3QF3oZDp#JSER6cv<~>qedrg@%3j<(uZ@H34rit)cI#MW-?jS zq?FZe;yb=nwKkI3YVat@_T_0IWpV!(8UJNxy-eGp9mfA2NB{LHq+{TUGit^YT;b0h zOw6_qHc`#0r~nw#$-v319=qDnJHV?N91%P+NX!NR=ksRNtJd*_z;5CAeqdwSFFwfC z1z1l0r+XT2cM96{*%R*Wv)fYMNjF%IrOrQ%rAr4`52Jn+7%WWrfocyjwI-aDMfSW< zp<}ed?R;2SqZ3Ve8Z!>QH{tM!;t5yILYCmGz_l{Fu;Sj=YNU@NVCqYtnGn$K2A)In zJv^W+TY!_l(9?d`jSD?SmkBL;@t#2x*dW=aNp5iudn503Q&|0Bt0P1~uTh}D&@9FD zv|(h!i#I^zHMWZ%AG+H9d~Lo^=%@Cg@UYLg(vuy76^XAo0FNoLM*{*P%&V~y3ahcU z!ZqGxV@YFV?>Oa_V>AP?{}?qT`M5AX9~lVDoc*Um8UUYP52DA2y_+fXhY=ziOi!6r zP^)S^lNT;k0gR*pj~A=0-<~%+{@BpBLhoIbJ}y7u>>U3aN<CB%AY&D)*`mgTq>TwoaH?d%acOo zg;(J&?#I@0Q&F9btI3J7_s|8yD+F*<$I$d+#ug<9?skop75LR`uv zG7Am-)i+@=Wd1E;3r*(JdxY@HFS*nf zZA+S< z<0lp+^M{ATF@=9E5n+FHwH0_p!ce+CFC&(ut0;@M*o&_n2KQ=-mH@Hi?Id(3Kb!wC9xeUnC|nrl=d<;@OK$#=B(F_ zRdbxmiOyH)h=|ZqTaHTZ=eR<}Ceo#FiIe%iEt?9+XHxlHp6RTHar?w96u1#o`EVDF z3p(@PtggHuz8~}y$cp%T83RAJC9LYVjXEX7yqA=xNJE(Y#_AXV2;Xwrl*JfDv-fH& zx67`@)a#-A&fWN#Y!lRb9v2!w&CLXQPYvR!ZZ}kWo83e?VwZ}HYa!MrA=uagV?a(a z*=q(l922|#EYNx^X_?2z_m%ct^q%Ts;GMCS=HK>&Oe_hKpzFFG;3wyKHT&PbU(*qn zHA#aT50t#Egy{)&9QIy5PWQX*u2U8x3g!`!Z zQNiG_O<2Mep1Ai*0+;$j6eXbo0c;pIXw-TlnvU`M+huI$OlA0a0u!B{TrJPO$+EDAwOXk*|bN0s&>)9Hfw_1y##xc2~NMiI=?mtA``O9t^JX)IJLf#^o5SGgL$ zxwuv`{+_X^sm({m(QkK(1%Q3P?*m_y+W2vxbdA1DzqnnXRS4x5Qe9IZzIU4fqAGHW8gsdt~tycdAGE}9ST7*!pKR|ns2fynwi{s^C%Kk z8PBm)FlpqIFlJAUriqbH{wD1{Gl7_oNgm*)s@%sgO8m)95Q6{epb;51_U9K>ZWwox_*e+v!b^X{wYX)M40j0O9G z9>e)!m!N`IBpsLXYP>j@xPePY38{2i%HrqlP*5f}kdu}T6{GTMQpw?0e~y!5Iwi5z zB?lUjdQT`2`=lPZ*wNx9g49^HT`P`6+T4ehm?B|fFJ}t?w`vGT-?ujeADoH+-YHd> z4-Kf^HQ0Fi?=NE(G|IQY3m4$4DE>+NN(J`jSn6s*#MLG8DXBgVQ^nBB2@(D5<8@=K zt~`hN%CZ%78@9jXX_3e_nQ~9ofDyRSM?T4ap#c7;jrrZZTBa=O@TEGNfo`^K&Gt8G z+NFV~!m#xUr|7Oj3gF>ao;$9$Nd(L!Vwi97*+9*T9*=F-6VU3USSNi(o;(j)#0xHg zXy+xEvpqP|b;bDIo5VW{gG`VEbrK_9paQ+<<>LzcI^gkL0ooV7@5c|o@|7Uu*8*8( z`jo45DyZP~I{bHWf8DhY+2}{`RQ;68O4NZ$1H)Y*8<$rA0Qp%2uJF$RF`qU6P*RR* z5?q$t(ARdo{Ot|~|EwkAuq3GjS~_aHPXwFq?^O{@Uv<&9LPiDSo)X#4D_|^%=Wqjm z+k>b1F4gv1+}l5e*bEDUO9tPMeAomx52)KQq0SQ&? z`|=yNVNkv+DKC78Q9@T|J$6P|)+Otx!}c55AhVE*1UvU^AkvnlmydtHO~dK77RIIM#rRR;AP;nPpu7+c>Qm~09pxZnJ3PUl5%3}=bZ%$FAB)+ zH>x|lc*Mkz5L|AkBCa?`c({dmrjQJv;#EctwNg8+?G7xvKZ%i^+f3VePXwoX!ttWx5Y_UK4^Ck|;agNcu}ny0 z;$zkMH!HF9@Sr;u^g)9}yt-{2WG`q*YtIK9H+no#8=Kgc|NOs!Dhl&nJRLH{k=LwO zeQc)~`Ah?^B8B-@dNhlu<7tKi@G9f-b{(ZNgcv|sj8|ju-{t$#YNrHi2`93W>pt?4 zB#ug@nu|MCOy7(I^m65)`gAtnKAP@X#Q7GFWm#E9yO%H2wl4g-K#xi1`;{a-}bf^T}wE z!qo5BWQoEmVy|guHWJ^ZHK`J$Kpm9@5v&6Re1GaUBQ!~SE>aYT{F%efX_9pAzdMCt zVFwf-)52+d)6dlb*M)MK#4ouaWCr4EX<3SQ{FFumbt*rQmIp_h7o02m|Ga`HxcE9A zXnc92iqG3Nw*QV>?F(;D{N@swXs^;`HoCG&x0Tz$;K-~xJV<6*SC}#}yu0>Pv`h_D zaLk&l3bOm=cVIfQ=zYnPu2S7RPYWxe~4ihDa(Qwje) z7Io^4Nbs7@q*>VoLGx}$n%j_e2Vbysts!*}zaol^nRxb(Q3Lt|ERNT!rQ*xu3nlzu zvaA@MzmpVHR=*w3m)4P-hG^d_y^nRjI%mIyT;6=|G`))1R_!$9$Zj?8m3AnRWGnt_ z5IR7Feq|IRX5=2a*L>t5>vHB}xG`oT8O0pNi25g15azdqTj$GZ;U*_Fm}U1{9!YyC z4ZK_q>}_z(ciCwUjJ%Ng_Q@z9vLWb3Q?Iv$eKXAf!)UQKuKC*D9XrZT^S=9y=wsjv zK?guQsMocn(>UI2!+JR0>tu(!lK+XVF@Id(z zV3|VMh7X|2Cp9XE#KP1lov^6i2$ z<)Znvn`AL-a*_e`MXr+3RhBZUaR5HA+$6B(8N00$Dt(Zk~h+ zUsL{3zOz^EHS}E{wfHVxxp-}K_S_m3{(X*uo5%d~Zk2pt8)E$3XWmi&ouyB_V@KEo zzrg@m;_Pd}2;^p|2g@Y5r#$IhU1w z^Mm=r?^zs@UOvA?^n9noE@uXI6m{?z;~6Cc^-6Y|nMI#4RT9hUetj^mjr zS&d{zpDuOm`>hIR#}|k0&>|xclICe~NQg--1cc*&&i5{<0O=>b|H~cB{!C=pr2Smj zKw`H-l&RmVA~pZ+IN9}%JVW_xfpv?}DQV=TNh|#%vMfsKgPhvo6Ez>e4G$;*3vC{btvgBr-Fgpg$oiEci?EqK;gN(! zh(d>e?LSVVZ~CUAZM;18RF;rg-~kAEa)+%f_d$&M$RzGDs@cxZNfZ3LpKm)0>gB`T zzgkFl{hfw4o8Fd2ITA{c;UmeWrey#uq6*ACy{d}DBedXhRY+*)YaV1lsn>J zp}NssPwiHdlbam)9s&hiC_6(w zWI~;7^EU6T4h&y~~oo{MOJB7%j-uLc;ndX?t!x}d}TkZHPqY+w=D zIY4u5L0k2e(x%jVRGwrzEiQf47Qt;vJ#Y&L zd0j-WqWAt9GOj6Tk!9TssPHVGK>#E`L03<2K1L$FwEfL$@^yt&jma8k^vHTGR= zK#_8(zwNR;!zWS1Fm^Mck~M!7vZsPbB7Ie++V)+C6=Y=$MLPRxb7a3Dk&H9$Y-Z&q zW3Dx+h%yBp}$;pt!yS(w-PIRnz zBjV%mH=EaR0^)SPDA%HizK_n5O_#}&(QS&nOQQ}xm_*qWyMd?LDPjFo35107lkf9$#jDo)Ih#+x@UZfO3W*8XfeXZi zqTBx0ImjS~3z4c>&VECm5-t{(S%m-hzQg_rCF~dQ9sz(7m}c$}tbwTAlp`e1V7ct} z49&6#=ZSL&<{>44iZz| zw)RQTT}S+$J@tM_9}bCS)ASkJEs>PB39oa8zs;&zGtnMxV5`=bx10I26ZMfF4z-I8 zMv!e1LZ=G(`T`bpL0VmIOx~-&6nLI>!#U$3$|mYVk3PNq_NSH*l*QVs1p zNda5%_> zX}@1?284@X%ZN!=9l-920hHuor_A(^l}Vugs0-1j-A>sFI#B~co%`Gmj{;R%;?Y}$6%xc^q(yy{tXb-O{<9K0QVvs!pjkm|v-Dezq>WH7WsSyyZ`3J=g z32-EZ^|&cjza-6dKf=U-~M19{2b{u@1_HI z#kI;Kpgu(){YZ}`c<$$heNn--F%!M9`r`}<6E8OEd%g<1=jW_3X zi$p{0u4j4L;C~Tp6k$KK$)>rLEw?@qE)Yd-*kw%8(s9w$?*ZcqVekVaasOLm(P3={ zeMcisy>!rNK%-bQ%RMhX-pjN9i4$?tIzDl&S#=yRqr>AAV~{53sBDMIDz7GMcCJy4 zQLlETB}J6I+&IS2|n-v(TnoblaNeCk;@tmG?KwL>`&I zr=`xHoh?Mg^pM1O(?pQNx|en0!3?i)wKV&}z4snkknz?);gf2T8njc2lBMnqTE^&$ zmD^R^gVw>Kd=cq1Gu`9|`Y#FsBnYa#x79{U>Y2O%F0n|xF4?CHf_1P3Z?@SA1+EDh z`%ZY^K#M50pHR2j29f2xsOW@)D$^p(!M&TS+|fBi)jj!Zhr$MPW?$+8z2TOgq~ zbX;Lz8J`8ESs_$Z!KiXX$d7rkMoXb$-tY3A=k4c&@y%~{yL)P&!yZfu(Wy!Sgek`( zDhM;EQ7K_Tcp{TCk^M~q>Y7SVyY(d6ftoptbJQ5InFnEWB@lvTg=R7_GKVVB$W$aS zRW{$|h_$qoNP#zQPyKB^loax{o89tVjQbp7a`oOwZoN{tS#`58-5aa#0#^?$2z9NC z!0NDiimnJqA|_=tB=O3yH4YT_3j{ZQ<}2&_V>^GdbyZxzw2XboYfViXgF;O4xgy#P zAHUIWqb`uZjgAWqs ze%)0wkVtwb_WKvWE$|S(cRh@AyfEW{4;H+QXZOoNOt8lqPp^fRKU|BBP`HZLn1#g= z@hspwAralB4)w?tLeJ@uBuemW%`RxMhZr{UK&D=wi-q~m8+isJqS|weiZ;F= z7a>t;zAS4z2^u9x`<{!=0HZzDB0tFkORT$I(U=$p1zox3?Y;O!L+57WFAuRIzmw}A zt{s$9Uu<`YZ5bKfm3H5T4M``6hqp0nnfJ7r!@d$o+NNe(J``ceyrjpc1wZTnsQdK` zn>oO_n9H5lu5|v(6h?sw?sdUTe`;XAVslpmrAvYy&*J6of2)1g@S#Z}a60|@OYwKG zbVOVVtRN|h=Mc@Yagi}%>6fOj1KE#Vh1P9fki0VZj+I%MXO*S4y5GA`APbd(RATU9$f%9}Bq1tO}7&u`&&I>`CXC8TNLZmL+ zD3(a{C!$8Q2Tk&M`u21di=mfYM~ql@zd6mvu;p6|F2ZmrJ2p-iQS~TDi{2`Z(z`dsm?N}`wR?Hkcvw=B3} zXTny;rfZ28cgHE_cMcf|EA2`qJJa~E%}@E7G3=ESOdoR3r|rl8z1*q?rHvj-YJsqo z^LGjA<75pG{xsJYH63T@(~Vb{{CLqiZ-&f&0Qr)G>&%eh&0gJL6!A=Fy|DMvYW%l_ zJf-a^!Ist1p}8oxA4B|2t2tl(jc7v05%InxnUq;!L1}k5gWBYOvSd$8#T+_j^+HVS zQ|;q}?NebW6Q|cGZxPItUTIb!(U`h;ZE+UBMp;fbUz`O%uf{i%`0T08cptJlGE`zCn{Fy?x2%%Ryh4W~mK2Gn}ec=Qtet zFtm4y5?U=`9GobvKf;-ZRPg_`_m*94Zc*DP?h@Qx3q@LryIXl@17OFy=&3mDZsC zAvA#?K=7O#bDu?FoV0Vx>fsv6Xi}FFISE+W!&4K~k#2lcH`{rVeq>FIl-?*JSWT-1PmFPMRf zO5CiBYn7)b&Zfa{j4nQcw3)R z{NRV#Hp8`sW&_BMNT=X^+bji=zhRzSov)wHwrNp#-D3H-jH+#*F3w_X4DT^a11_0f z34_W@v(+VWa)&;d7&3UDaP>|FoMVpA^1mH4UY=J?S)Pfk#pJINkwxlT|HJRjn#t}V z6zF|5T~^}NE%zc+l8ZOL@J1DAkXh>o!HLjy+ks%*F1Y(_|3p(Cp+rI6$4BmmZu}6O zaAu1Uq@Rpj{{qzKZ9T9&@Hz4wY4wQR88^nZ{D~90BX&}x>`sMQL;$& zm_Gy&!!NoNf4x!oW5Gx2fIwh-G}2Cgj73;`AyN+L5k4BY@?FPtl*8GHv;L>>5HwSi zVoQpjG1Dh~M7Z0n({~()%#yusSjmETQrL4tHM+{Yi1ubcm%PjHeuc@0^ZIjr_ujSZ zgS>!^)96c|R;b2>EBMH!KRsX+Qy`+VrE4nH%%{8(@XfNqhU>6BP$Y(C0bfCsFmy+P z!1MTXH&MEjyhKhfSj2A}?_-?2%j6WJJ)xI2$)YdAkxr`=(qmacg}NZZ$D zsxyOY3k~S%B%W5F-Qsff6Wa#M@Aec9#;X`l0yys8ykrfhUUjz4H5s1GKPp9m9Howz znTP_lm&STN6G&>LNxW%n9o%Lu`_Onb#+ANS5&GKoH<@dH<5IolB|)zDNia}e=~sbs zA|_D2ahyN*>P4r^H>mwgzkpYz%}{u(5$$Rf z52*}JeZBQlx#U)ZFtXeD*6K~%N;G)*iDxDoY#+?&hEh`}V*d)kqx=0{e8-9`omL0I zF>hZEoHFN2H+>BByN)Z{6=W@o;%!tH#Nrb-&P6&#YL|2QX27Y9I> zOLiOdi#XR}QD0D6tV}484kRHj+Vx=zgzAyC7+1210qTY`I5(B zur0KC?i4x%o=O6AM6HWjr%VU$FZZOk0w^U0 zR^lB&Nw+^GT1RW!;+Iow^LMngChxl=Ak344OI%rnI^DxgF_K&QMiha#k9RY_+ zjnP?ta+9XER#_x0X?;z^51%U6-T*RNztSA-Pi;mpq#vJ~)i-V|*MFaC-o3}|W})G| zZ~M~um*7xI^c$Y2A{nVi5KqWfK|h|o$RZ8ox|5dpuZf^Tp>ucyu_HK$pP!cOuCoh} zja;r&xGmLI7~wdMC8WR@PFZzt^5HBYafVNjBB+FvmX>ne&C)?=hPy##rUAFaFyCF& z?~YCZGt?{}_UXwVd4DFn<#CP8)iVAiSy@&%mZ1`P#{0PK0!>Tbzl?~bpwyH`;vYt@ z>(yDo&XhAwIWg3a+L;%LQzOD%9=T6qRr=Yjy-kW4QN=O-W5bN7Rp_>-|Q+%4< zTIFs`=kp}Y-M+j7PHr~ik0SWYbbGQs`7t(GR}(K10z^XrM(Bv;Euk3#{T72`v|^r% zJaWUqbVI_w&v#`r4Hh8PP&)N7teYwiT2}vABB7LZLh}_9p)YIIu)3$YFeb*BubQk; znyH)Gs{o9FTtb8>NF&h|G@4&cgT9+Fa3#XOXkUmFLZ#) zFq(kL;Qc!qDAzKXM2u54u~nU;E9i|CZ>Tm76kI8KoPwk*r>o3+fYPt1v<~KZo*6w~ zySM!8;#A3*U3e4R-H(nw*g&83<<4aUUrS|jB7UTXP@2#0D-tzEq;g#Eyx|cuo+b}i z3FhFok=jt;-SlEpSsvL)9Ft!bi5-_@4@n0JvFdX?iipw_88s%5-BEs!_#)+le9Eeg z+6@e9)>*3-oYI?)yaK02|KKm%u7=grJ6fasQxPi!1}+~qW!v6zKW^HhVH7BJ-8FL{ zDo%On-$5Yl+Nagz`bWKz9Hk8ASDszL{2yzD2`Y%9ROhC-d=9+EY&p1~k;4|dU-eo- zMcIuai@^~^Gp=*|pLv_7c7VaFKYlnTBB9w)X1e1z>X(~8uuecXv*f1Pl#!gp*}4j7 zKC-+8pDcyH`SX%S=p?~oC+zF>c76tiETW_qyYiEXPiQP_LfmGqt>$7pYVP7@IowjD zh`0s;Sd=%}79-)lPlwpKPX4l3kG~S96y+y`KqJB=-dub*zPy;J0@|!+JB@9!gzxMe zB-Ki-gS;>n12KKQ(#aaK-HGTxbqp0h|7n@r@`+U z<9)kJcs24uQ9#Xl#KT;n>n4J8@c)3&{2%Ul_LT+4KV00+UsCls1wOxn8G@HX+M+QV zD8p~x|3#fi^ZaHT=rj2mxuXjjDADO#RK0>k6ZV)>1OJA2OA(7;-!4C%!|g*4*Sicy z>=#F!8l(>wFu_qY0DB!8s z)O(KjK-9YPDyNBx87bB_h_l=T^5fNJ2U9E48yb@*jJ+p+uqe$=A=T$y=~5{+A7P%f z?&=jL4zBwhiy|v1o;NYRSo2~<#YYabWhP^L@d@lk?xd(MqFWX2ThMM|i-n}O(dlIPJO?v0dq5OlN;B`35%*yM#_oVPIx&$%b|*ts8PCpz0gsgW`~2 z=!cA>se<1XY%T9t$1Sa}+TOJghhfW{NVibNUTWal9xcFLE(dsnk4+-*EM)?*^px-DQQIaRD*|0<1iUB6e&Z_;n6aO4uk`)k14 zF#r9P8TSi;1(ne&o*BCb_9xHKtFBEZ)%Hy(Dhask{f)f1&2DcqNht&J3KtGOsxWD7 z!wZj3l|ny-VoA1s(<}IfY!G@4e`pagCW{+rM1Pv+gC=}$=1s6{U`X1;7x{9dLnXFH zMCF<1vVW{>b5@O6f_F}XMvzyhqBLR7x-0yoYAzCcv9*h>E&dkl!Hi&DN`*ZWm)kBB z4J3#Q>Km8lfg?srbU}QQ zw!ikPW?Ha6qbE?rK3E1L_pzO@Oz;LHc6lDg7#fZyt{iIaKJu3WOOjLQT&O~WmNY4B!wf=wk(q+0hM z+INU^ZreTT@LHZC}QSSgaO3%5TyTV>i^Q; z1pW>=1!;2q9gpP1RQ>I(x6L$Icv)5zy2`pfx)(Q6U+pwD1_%I`t#g9y z-X=dkmyWEh2}7zXgduI?RXd5_*3&B|oGP&-g3Dg3sS~^oKLeS@Dm&-IDiuvHN-TNn z#v~r&?ns>3?~_vZkq{GVqlh_krkxDXpD8x7fn_K=4akxVxvO?#->KY$Rqbj>q%aIU z-YZ>swBGh~}g=i7V}b*wC{9&*G@=umD$%O6FF#y~EsHzK40+Qq6(dWzh| z#4fl+$UDx?^@%e%W`g6x0-IPXR${T7=bKeOZ^8Wssb==5QV{2>*YuWlWNHpOl(n0h zJnMlk?Oaa9P5bd}3fQcODxws2@h&ogUN3@wvQ1l}B;dZ$EF=zVol~cro24-65wP@P@&Cif85YhEG&lJgT zU#^x2R9bW#n9F|YIlo|dL~BhTj6Z4n_Hr3haMPneby#vyw?`=r3@GXRD2?3GBzo0K{6gM!6d79 z3;)iY)4+pPf>-`~kQ9z6bjIJFyu{kV^J4pB#vjtL?FTRCckmR$*-LPyl6XU-p@(zO{vVwDjK`2{n%o@_d$9&N@4gKiP=MBpsK%3 z&xuISd-Vf}@+xWqRKGZ*Px-9~J0}H7!5`*Nzhe#OegOOgYZc&5kqt;*BcfY3_tY9aKg0UbLDd-Fm_yB!-RkNV~O!;l}{owXPi{ zA5pikW3}%0Ybvd(=BnMu!=ElZ!8E-G_1#l=?^7={L~jP7v+P$yj18mC*?*VkzB`Li zDms5+Jhn@L9({CsFPzpNmJq~W8AQOtGMMGr+*5qHM5DPfh}=EkB(oB3Ej9OJtZehp z({nKQs;R*KjT~dVcc5~=e1FYWyzsW1KyGw|Cx=K3o&3q$U*;Hj4VZwf_#%TZ0-_uV zu~}L}-{~`z_K>g9@ud!lfATo%OF|I;6{N6i7O`uD0!H4%>jtxzc_xX__QGg1BCL z;;{~+nSL?+-9f%FWl|s81TcP2vEH6n)rwZ&HWVK=>KU%_U>ewrjp$RTB5<12yeFj9 zyib57uGgWi#|K?Hb$d!X!>TL!u+CVxb2A_uL$mz-2O0COlUGX#7ydq->-ZPGqxkjW z9&N|tIlLwqZ<7(UPh;N#7RJOoInm0-E-3=k^WfLpEi?ceRY8R+USrFExuIFx#w7Hj zl&IT3 z9$X^OC+XsYEQNmD5de)jY2Bk=H6q)inHI&knQyPrO`i#=H&SWFynYKH1b80T*ko_5 zWllvZ$EteW4)>l8xaCKJCjRXtpYuT^A+i5HEVSxxgEZG&K`WILlBCWQgg6{0SQld$ zD=4#dMG;S~tH!l2+g=YJ;12h&+>H+o4Msf1i-f)VC=UoehJ0KR$(^|NyX>OVC5R*- z3#1j>?Z?kQZh4N9;W-Kbm9OM94-XW`xL4I@RIA9dTB3CmZnw|5hFp3i>L~9_P)PF( z8$L5&*8mC8HZY4FcEi~kA5e+Sug!BT7{lku<*rT=bLQ6u%)zc#fQxc)L6xb||GH?wpLx*Kz}n|f6t(yfgcnenoH)JoUMXZ9l! z4aQTj2avB2lO@ZqT+`dwj~jgxl>f)8Qz}GB5=^_A3++XylcMmtV*E_*&-H5{8Kk%S zR%iBMicpb3Ifiq?K3+D%%3^q~T%!~}ETgdfkF_1F3A>=D*va00iMT~l@kL_}B|eUI zI1#elzPq6)Miv*Pi-etf?%?*n`wSyO zsb9NEfa9NYDmM1`xtc;2rh}mF)Krtym81lRt_2GRl-<>zLX41_0I#)t&_q+2d{Itm zm2D)Yha# z$l5@)^3w!gtf%iW-Vj{1YTp#UO-_GZdf)=Gi0J7O-tm7w6U?$Fj@zKO zgs2S#Yj0M4VAQizNokSJw|3{wA{c#(aPY@z3fo3r=6khPFQ)^xfbO3W`H=y%BVg)X z=lWTO3e*iwpF0|6`P-W{;nOcPLAohSp_qoD<&x;AA_aB?m}H&MILu?qPU9Ecw0nDy za5#<_#5(;QB|$Cy?OQbeTKO%P&}7d`w+LZ0OR_#E5gQumU=DHf%cA6jz#Oaltd3UO z;*QpXU{}{?klIAlZRE>GxPn2KvStn3&<8lyJ(ibBMJ(BX_xczu!0RoDVfcAl1Y19+ z)G_(4%b`{JGW)`yn`ZYze)i4>aQ2S#)BzwscRzHWOCa822aPvEYjJggY9) zF@8WCa|e;ACi1?di_WTBdzSaaCoF@>IhiNOK#=7d>e!*7D{5Jbh&d8#>=Q-nnJ$dF z$f>3}%_o0~Vu}T&Pt!KkIm2IspzVNXX9uHBS0&l-skPWsdO8c<$T%7l_C%3@DF*Nh z471??Q)Xv*;{A6>dne}twO80KnQuZ#-;mut;$G66ue$DBGmM_=L(>lhp^3j7CXt^g zus1t=C*aAmBBx8f=v~cbl@4)gA?>QuTKi2Rz+L84;;8bJWFFxao@Jn);mvg}JGjiX zcev()-Me7QeQCj|tpkUt<$en~7WWw%G()o5YR=UU@Uq-AQ5G2hSl^X%F8PljCT*+z zd|Di>aw$Ro-0X<=)nuP`kqrD$c(>i|vGjGK2uHT7`*!h#D58>=vv{8asSqH>cB7+M zxi^Vu#@cf{OSzPu^+ z6i@x0ofgDe9-ONDx|@kxw~M#xAwV&Y-lMbQtjv~6>be~(*73P-X~?uNj*z(pdSH~= zwUE?~&u{drLMIen>0a;p?9Na9ul&bviRpyV@amK|hf~d24Fg)qUNO%B2}k93Np_uk zQ|r6^>N}z?JJHj}So%34^_+=Bn$gNrIHB@nSm+SCnO4!aZywqdv?SQ-nopB{C6?SB zleI8RPqkWcVq8-UYPICDrzdPHwNZw9?H0J{4}PlnJM*e#jy6VRFizgpZ;sp5Z&)^w zr3LdH-FACqmHx5Iup{rq#-S~aERI|)vm4)`556DOfD;o%g%gnthr6sW+DWA4|LP6n z^rmEB+i#i~?$PI1Ie_^uZN9bEcS5N#iNa&G38=xPkk2I~wo@A;^_BJ^9rydm)W1ab zP%eZ`h3LRNl6^XKn>YC#9D_MWDccf#oLytj$y=LTe(5Hv(K%Zh8+3eJEP@vVtY*a+ zuYYiH&5;2D0L5519tCS-(n>`MRiyq8mT0%)K_+?-m(?63;po#e$af2fczYLfxMxh_ zb2i4vvbYp8hj}YTfMgH@U6@uO)D>@g<*UO;Yw$`~K>#&XtXZr=Li;~f(9RdBnTcSn zEr*`Z(se85!TZhXJ2zg7n)-&)aZf zUX?u^bo(QEa68#EZ0#KDYHS_(ba-GM|(usF0QP|6m=++E#1dWadP&2tV6%>l&l$jc&RJXp(!x^3kxXLN3V+}E*pOZqB;VtAqJ>_OjkE=1 zS}E6IMPZ^SVRb`oK4yx!1g#DYwu6|7CR;i}`TK>@GM$*Qp|BcSKM7q;r#s~eqem^B zrnGDwi;Z)JVq(YCBN+Hp*V|sP4iZ^Lg=VHW&SbMzCXg0D6KkiwRnxpSWBqIIAM-uV zV-?dv8nR{#O~r*ogIaXc$YN5z+FIMlAJ|^(Y@F9SjmSS_E^7@(mKcA-=p9z1Vufx- zt4?z7+_D)U%kHh+xo{e@OyyQ5O(<9GgdYB&4W;p*l?GRDavv}rI{>%{XdZ9D%4-dB zTt!c2sd`D#VFRRQKL=6~6fQF-)NZ-3V7=L4b9KMR zikN(M#pnvPk(M(J<;T3Yed9?-EPMK|;9aa@ib$?liws?COV*h9>>NUpd|=oi-$s6k z>p~T^420DQvPc5zvhSO=cvpD3cJ{;ZR;Sn?44s zH-PQIH0qyDlFw+mBfC+VJe3S_-9kjl4db?wSG^Je((7zaUtXq+3c?8sq0g>SW{2Z9`{t?;&1G&1+qPu>az+`LdDC=mrK@qKY3L9X2ZS7a#q0xlf z{IAbfvc^o>KT~9kREFnVZd$FRp<7x_(T0EYiBY@{1NeU~iV}RDT@$H4z5TO2{3vr* z!8qV#Ax@SIUT=6Cw$h|In%2SIPeGfa4*kPtO-`He-K!Iisl_;;dE3J;dF!$uzRr9cxSuu+mo~jb=G$A&JT59Xxa14KUoyxe;(HpVKuDj-``-Nl5f^Ok~2n9gP64 zCAxSqBql}^LdqY_lg~lR9O&xni9y|tiDkEL z<~icM(^2e=H2*uU0j6~v6e4|j%P{D0OS1rlYsgNbzq0Kwy6j@V^Rd_V=k$o#=)jnk z+dw?C7A*|E6+V_zpnMpwuLj0?yK%OAt83rJ8x6gF-IBkKqnXY<3SOHhBgy!eEM;)o@`SyE%lJOhFlu2-P!Q z2_gRzJ17;^1*^K}AhAli>=MEsf)a2=Dl48TOZj24SoD?H>THJRTkGHL%#$<>pUr;y zZ>867XN9_2t!7huJ67wMx#_gbx?y#LW85^rkhyp$VvD2$L6p^&!n4FJuXjb4uqi@d z-e?iV_lJjt{5XtKf-@P`Xkacm*!&Q6s!k_@3D~Sfa5&sW&>D-YhI>!R{MN655k_=? z(jBn6E9c-_kC9qflHeDXHfpk^J8VJ zmxTn^+^f8!?BHDx`IjWi+tb9}XhN0qXH2FC0$&v8cs!GnI*t3~G40mv z)ywdowd8+I4uTLsA)GAKJuEbE8mm(jY?obVC86xbb9PkcA;#4zmm%m~rJ*_JcYF%S zv_AaB++&_i83*f!0kneuA~yoNbmG8Q5mh)5d~^hVT}?OUmeWVG)VsKVkLDbhzFMiM z=_`y*#VefR0!|5KK!3A1iE%@)Y~x^MF?*knU+V9ei&%7%o%(hQM4#$L9;u7P7I!U8 zoucDKI=JPSTy(arTL=z*Kx!rYu$u)>fK(Ey+03F}++^uR(ydoIaYX*kK>Al}rWemy#mtbn zn0~lp85aHu(q2tcBp9?+?A3QIfHu{0TvIP4d)9O$`sP}XHr2N;+}d7q1bk17P@2SQ zNBYd{2X}l6t3MT_y5IW>@B^!k^gZiz-O)AUc=ys%wcX)UVVnzpBpP5u+Zu+|n+pfm z#)V$vGiV?XD;vU{2f4_{)>032njW5YIv-Ffj2}TX*RVO)XK7iaF3deRyYj*l$kl$B zVzZY%a*jU-8TLP+=1+mhS{5Xt41Pmz8Cw^rwUIr-F@a3!gy+uE(W(PoCKPab=L_9b zaEV50IwM*>S9WcGeOZZG!8#*a)%Ra=^U6P()w*Rp7~W4-utVcroQWzSUsq( z?Kfqq>d$znfa~h6R0>;K^C$Bm5z19;v^BW8&puHue&!=h96dCy-g`W*cNK3dmb|}( z7<5peK>ZP$+5KHj{k>J|(U))zrZ(`imgtW{l`S$FqGlFqC0;`zqW>|}B2{;6WQZa; z6F+UV3|vtU&!EdijeewCiNI7uf9=pe`uNBzxg*Q7s3RvJxg!PnCYSwl*wnPkvX_IL zDb`E7KBko;(sV-zpM}UvYgnUc*y?2=p4nL%UN;o$?q>>*7;_0O;mCgXmn1%39|Lzl zYpKrGCQdG`_I7x1{XC9@MH3C)enYP zU7-H^Zn>*YWiCTFi1__A!^Nb4Bx?t#cA#Y!{}d1_^H%Oh*8i%|G;3Q3($2CtV{gH3 z3vsa;^LfO(*qV$t%H~?Fnx41qN;kK;Tu!&G+62X#$!0GMM}|_IM&j}%3bJ7?=St`y z)VEZ>{jIiMiH1TX?`BLc>ZEHDEkOaAVQZ}>N-OtCF)gS;XI>_|VZ&adQdqAc;#i%4 zrx3Bv77qUXjNT!!{i1s#dKnS1!t9E-%hpsBc$h)0(4Mrt;KmNEg&;|;je6ov_ zz6?mTlVbh83r$a^S>u3K-wXR39S~QD-KpQzQ@F$&@O#l7^3lg*l!pG#$C9}T zs-qzERbgy(U+?CM;NwLVZFR_(SUgg{Fa{s(z5{3PLI#D$XgbSA+G479r)NGZu3@=} z)^zp7K4P@dw^O3oD#!s`%3R{jekFnav}%2OcnKr` zzhQ$X2GPbRVxObTMAxgOs# z`U-ne7@R@GFYuZ9R0lILcgHIpS@l|}EyZ6lDI6+1WjH#K$kAFKUq@fIub@%G*o%Yz z=jfFa_L(IED=Qf%7r%!GD)up_649mUlVNRoJcY_%+@y8tw1z*s5HMji3)E#yG9UuY z%|3vm2!ewf?>74ANLH?eVK|a|gJQiq`e;!*$56I^u%!XF3m@dL0Yne?FKXk;5NQp_ zKknM3fA6;Y^1ZZUS2c~W`cKgA!o^>+qjEi>odjC2XtDhKG?tAeCyLfN;ok8~OfQ{| z-WC>%6k2>QyeJ{3jLjIa-1y(^C7!3SH-#MHy}bq^3JI5se0C8tH}3svwogCAR+8ty z9U&M%WW{BQT&IjZ6iRk#{?6(S@3#M%%Dyh*1}EtbuNt|i4Zu>``7M>PIlsd4*0KYq zjpUY%AiDYqoIg_8wVsmu9KdNJ5Wr~C(EWn1)SL}$;oTr{+e>w!Fd`w^@&$a#0I9L# zk}D&c2Pm+uo0;NE%l+9d%aZ}Aq4xp)u7O-u8{0;B>=32we-3#$Q2{Z7nxLkmsO=?& zH%*=_aC}pBG7)`{;HW{mkfUHomrB|E<$Fl9E2Uu6)b=kQ&7F#kS)l9D-yb0^gkqP1 zPC4ro(G6O0jv^Pd%t=lU5!*SP-}J@fN864WASMiLN{Dips<}$Lwz)^{jFO*de;uz42N0c$>Sl%76gvFGED^ zGyi+f#<5Scp)scW{n&e3nS&&uiYWPrD906*k=k__5Mf%9^^2~fzFg5Pp@51!KVY1n(? zBV^Zh49Vi<0KQH4;%(Kxxoy?=EYk|cdaCV6x&G?Ib^@#~85Z7w%+#Ebc7qj=MBh~7 zssi%u(R1!Si3bSnv?s}m-zb>gKZs?c{(n7w`9LdQ#A5KC?{E*Ng4s*7Y0OaN#In99 zNpDN+Ip-dc5NJ1B-RLf{qz70*bA{vl7gq&#H+G!|U<(?ezzEv{d^=XJ4kF!#wp6Fn zMg5^M9CVaVq+58ILiT9^^4Z@pLHKcvvwi6ilfLIZk91fV0SvNMy@Gps;1MjLE2fYB zL4j>-PpI)k^n(BHKUvh?=xS8%mNXO}A zgn8njyJWoN-xxcDZ^i4`tSdV*#moq2i-%wn zk2|X7IiJuKwJ@+>6-BFv6nL5 zmDie#>~pZlf9LhalRmPR2Z;NJN2pm{y%#4w(D5(f6hUwNmYdS1RQ$-oUF6GnMw6>DV&=rDSFi z3h5Mq2*T3k3cW}Lhss?%m_y;5>(%b3dM6Dh(YEtv*N@NAYBne6|6~)rxU3zgD3R4I z?`(FZ)d&CFj+pR02^adx++w8cQ*CBTGq(ueGR6$Hgc;e~PUR<208M#-Oi$)o*Wo~y zke=;#KX7F70U%A%3vuDGs!pdQkMyOhkSwvia=gT}9KyF+2?##M-bs7Sj0tbkH^18;)L-dL3MlHpd2oZ7Uxt5^)OkA5 zJ|8~Hwl$pkbg^O=P=h_1I%=9uT-gh1Y38~4ujIFws^U(9Y*fM3hIn?29~LQTqEO+;FM$Mw*p)b-;rPkhqc-ijn}t zQewr>R@HdlP-HCRcXxE*+g(xb(&O&KV;e?$=n>tK=2;|>?v~q;^NOr60axBJq4RFC z_YKzIZU%C`~l<64 zJvpGIqOs2-+VY@-DE7#noK%^@33Zxo7!Z9qL?xm!dS|DN5F!o;+$@`A?bt%Cw==^C zStBre)Yk1^sB1OsbNPfN92#fH{Ay!xl>6h@&+)3=rsK@|=3#fyKh~ukZX+75KcLt3 zgoW{2@e+$rCD9o-YN>W@L|j@Vk$lb*dA#}SHQ8sCNyZK`JuuVq>EORU&U(SB84$SA z@!sM&43wBvp7V_{C2RI#zQH2B+3+@j&HlKHV?X?vrQ_FX7EzUUeSp z*L1_;*c!na)rRlrqm0-?aIl!jE@*{$Uqn>CYbn?Y5?8Ry+J960iqgSnk#%5p05FTj zg|Cq%GOWqzZXAt(?NyPRX*4@*jGh(I+*+(l4inRoy79U2>Rw-;%#v+!j01twuSQ%n zx2^NdJFlhpp5XV8wT112?5;EvXqC&sH3IaQ<}@~v1{$5nb~`xDhP#JsdXc(#8`d5D z9sET-p5|5VlyEW%f45C87$*rj1{LTybQ3^)fasnRm>)c@s>NI^2!8(7J%G--2~0a` zDsP+e40)~rC~iB1K7!o*8}nPF#I&Al-*`RwJUr$PzK!b3>|7YEpaVxA=&q|yd$WI> zmEU!{(%(ZK=WxjTq?c}2RR*Zub8BXWUp~X5a)sCEhSwf;DLW31>TXYN2YbDq-0$sp)X;xP!+O~r=Z}*Wst0^<-h>Y=tTL|XU3}N{mVZe@c^oyrT!mOvw%h&%1 zU6N*YiJSp`NaU+9FneaPXksbTzgCTA(Pns9rd)@GWvpFS+DpL7rhSelreV9;g`Jmt zGyV&M2e}KwJKx%M&tvro-K6}XdZrP+Qg71N0Y*-W;`)|SMiey$jUQ+ID>mccAArZe zS-Y)Pno~rl{-#9a;)XOpy^BaQdwY_rE<8aRSW)wb!n!t*xhgq{J9PEl8csg!+0Cta z5}=W@dYL8Ca69*^?MTbYW_Wq)coXzi>s-&{I{u??x$oPuTrJQ~mL{8>@R3c=SI;?I zYrKL*0+JxsAO6ln#LGPz3*-3JUu`G%&mBC^K-MV^JXgI z6b%R6Q-7hExlyf|4T)2?>G6vv`594QshhVe_sRZshaACm552+Dk3F;JBVA=%>xA^t z(^pOx%3(CIONWW%IzL{+XUPM=SHK<0&Zp}qsMp{l?84u0#p&b6k2h+3M{!6U%*C#z zowP=muNDt>E>B84KF)rXT%Fe~-1T~B+Jl>U$o>6z?b+!h^@`N%X?XJPS1@Lw-R!&S zQ)wc^R@^WG1OEJbcwX$<_2bqg=Iub-$N?9(Ne%9_Lo<1RXWXxQK<5+C6lP`)%Z0%g z=4vuCGnWMGPqBNX+h{-foRIqC)*052oE&x;D3m3l)S7j6Jl;w_f4y3R>ve#k?$t}4 z>;_-yV)I~$EhX^KeGLeR;#_0(y zay`iaO?`mm(w2exLKMceSvs!&_w{mA^`vBy+(2qnfK#1<~NG^+1%Gu70G^;@t=yOlf zf4|jzZ}W0WQ+WG^L5lwK&)k?26HNuD6X)t9alOuC;87aO3k+rJgZao7pXGzQjlbXT z?uI0%8%{#KZ^IJr(k=b8sWxYlx(X&j8+l_TRD8 z^Ah${@quufm+Tea9L>EjlbVL>t(^B5U6q!%-)|-w>1N0G2sV*iHh-#mP~PsR(P1Tc zJ0wmoO2)AAhP2s{Hh%XgKU!JqtscCg1M?r7ZS!9$#P69m6}S2*rdh_}v(T@lH1+q1 z7-~~ZOIgzg{v-EPqj{e0WwKspB*ae-eLgVq`*7)8T^>7JuMu4L>>ZFo8yJU_m6`e8 zi_fGHS!DT>9&&~>@>7Myadb8&!C>W|%>7k~I_KYfp&O}HCHTciE1n$>4?ic0>W=LY zZ#;XtD4hr<*<$=o)HOPJRUeB}9np_MAKQJAY8QPa z&^Me{bj0bK9qHrAn)bGf{Fhns@%i(~jQ^FRna?BzIb*#los0j_E!Mt-L-h4*M0^eC zjW4E>)d_Xm9Mv027+k&V$2?C!8+H5SCt~m=D@N=2uK5+6 zn@g8@{7=Hb41^6b8~qfqK$%2dJTCVBtXMT0lkrJ^5A~^RI6vOw$V+kR?{^~sep>G4 zxS`Q+vvUU@F34o&=QW2%|ERoNzk9pVv?+r(cbV9I^*pCqAU>x)X87oX5bon@{UA-? zi}?%np4=y?9(#iY6sd)rs!42bIH()I;NxuAA^ml*wAW}_nEdmDrs3Yx(GovpGtA!0 z?_4@Rw*PvvPrdsf{_6Rjq~~AHjnINEKWq_(8uiWj7*Cv@`>~cL;}BgZ8Y;-jjlsZcBTA?W`BxA|{V literal 0 HcmV?d00001 diff --git a/image/ZFKD.png b/image/ZFKD.png new file mode 100644 index 0000000000000000000000000000000000000000..975dd2ddcc52e84ef3a1e9fcc975629072f58b58 GIT binary patch literal 1033 zcmV+k1or!hP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1D;7lK~#8N?b_>c ztS}4(VCqUiTTiOlW>O6IW=IGFvYzM2B(wRsF}6R;mcg*BfBJ9v)4KJ=tHk&DShT;# zvr@U^T5j|V-LkNKRGz7$`rgKXH9KViI(t}T8jUQpNN z1M$MTCLe~E(DnEryp&FTJVM={A$Un$hY!F@>l%Cjp7;pvoL$P}yR!!U0k_Vp=;-k) z^J+Tw@k^Cg)scNgUR}ra)p!UU)mP$SbWC4`htd&!1)jWTrB2hecM_=zzjwnt52#ab zuS=g7q<6!VM4o2;wG&)`kh6@5DI2D+M0=KX&@{#-b>(78Te z`s(mywQIb=$piZ7+|EGu=aCs6<*41p2qhHXHrN?nswZ_(NbL3s z{k6fOrypGUJEW9UniyS`9Jg zXTm(%PD8MF;?$dH&0DqRUur^5p=8|i*$;oNntm%E#6P-EjquUaFW7x)3%pao} zJDQ)Pfm6zdd1fL$dh~2*E=Y5VcC0;R)fo%m5LGk0{;@Cz<#T`XuQ3wu6!~i_;xE^o zBeOAtGQ@BJNYUHxMa0M}%lMR^0hx1OhoM`IPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TGb*nj_ZY9D^jWm z=|nK24&_TlO7$R}UJ13Mo4LKbR+C&cNVwFTBI`-65~MV#4VWrPt`4MBseMtZBDpG% z(xp~caup!uNv)>j%0s%o({FHfG+C^Imn#nGdf3xB1ZjJu<2FXHf|u)~0OhVryKAVA zI!yj-k6llW+u;47-mPG{tE?qm53~=P5j{P27#^P}YD~Z1=^8UQ&HLrvN84U@P1s62 z>*ypGv8JZoUCQ;G$~6T@&2tBr5z*%sW~){Pto8BS?=Y`AgM_0 zi&8wsbl#io<;);m-h$CJihH%OydEiTOoo!Pi6z?1}5}V_5?ps(A7k-sQ6ysrCYAwzP48petQcDQyk^v=sNZi~Zo-?=? z;O4+>t9{_44#`StU&a(WNzs>_G9*K(Rg|2rcVkm(e$hR@<;VOEaFU{)6{qRlSns1Y zq4MW<9qHTpOs%>8V*ou!{G_VcY4#-8En*cL)PuyXh?PCgW!HAca*?BOy*AY#m64jW z`?8W#f>cgw112u{LRoS;kdV!1R30(;mV$r45L0bn&X zKDUrV%FW5f#wahPkccXVG+(JXzH-S4AC)@pC0TL#dpB;?tFt~q`-X&dC1K-yOX3b6n+IYtYA}f;l(Ig&%!b5C zE&W_Afyh)*=p-fo@G=t;ch27sk}V>{GOBKSc$o)@m0Bb*OP9{@G)u{4L7J7+3gio9 zK$@G>21;i60_l+0lp3XAf2JhOB!{j=pkS9`TsgI0ALWt5%k+ee#GqTkmqvM`6xXs? zSf)W@1Mp>6*+H5}lr-_UJqZ%}QJ>fxL=VuHT*Aa1NfhN$`!grvylVOjOB|A7qG;aW z@mktm4u+(fD2k6aucY!`4uqtYlbtu_^jgZ2$`r5Amujx9qWZ&By36jpe5GyPg@c)I0PQ@oLuYEXkR2Z$>99XOP&*hr_oL|NU_1q z>He~q6uu3!#iX!bv#P#80$#@gNgLACe$4$2Xp1f4JkPpwohBWSI$ehQ&_y6txy@&2g&3_4;RHp8Q zBU8bh2|gx^4R@Pd93mCU7fKNbN!6HoTPYC>|x*e zzW?IKPx# M07*qoM6N<$g8q>BL;wH) literal 0 HcmV?d00001 diff --git a/image/arabic2.png b/image/arabic2.png new file mode 100644 index 0000000000000000000000000000000000000000..7cfb34583a92c30afd2026d52d943d9f890382d7 GIT binary patch literal 544 zcmV+*0^j|KP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0kug)K~z{r?Upf* zK|vIS&niT;TB1{{v2#9ndyIv6Ovz+YDquF7DUo~d zPEo4aY#Iw0U+U>}Dl1?x7-(fkG#XV$Whz6Ag_g^utblAbD=RZhWr*>SB@zi)0h`SR zq0sL{*z*P>U)>9f#X?s8V|-+X!vX1ZS}OC`*cRg*V%oM^EvbM?rJ|z1Z>;W6tycSx zV!kk!nB0D1Jvzu}G`gB&oLP-V1F2L>I^OXlM3}<8UJw0#Upnt%oleJUnBL-9=mIZ$ zyWPH;TTJqNJ};FWKNh;c|3kT4PAaiuE6vzKI{T`&(#g%UWF`XQlSa0a&(iKKrUECaQWny$R@C{g9Ji{kx4=H+7ZSCD7 zZ6f~!BQNIVmk0OW|2dLUzT=^o>wODEdc4@iU>Tt5LbY!!Ym~bTm`Yb zMAm34&1y#jS8dQvuuw>--U*qwqbRGj6hqV{s^%*?rn7v@!~b)|Am z6&ky(&B`;T&)-~dnW4zQEjQ~Q_SPEmbn0%E8|TPu$#C;hT_9o{*S+o$3vq5=u~xs{ z`0MS;zfj8B0na@es8++@5vCg8Of|rnYJfA<2l|q(?I612)&Kwi07*qoM6N<$g1>(Q AZU6uP literal 0 HcmV?d00001 diff --git a/image/arabicl.png b/image/arabicl.png new file mode 100644 index 0000000000000000000000000000000000000000..61d05440794f7bd81ec7723e5d23aec3547eec67 GIT binary patch literal 411 zcmV;M0c8G(P)#wr0^$7wJ2>1lH+Xz0%-TF5q2!WY} zq?iu`*+uynXMXF!81siW=Ht}@&k#W_BFN>F_4H6d#|65FWnCKNA?wW>ju4oYs3U88dGB(mDY{d26>9- z{L?7w1m5!}$dCkw>v<06z<-cyadF&)G{Js3JGuhjYaowRwS9=S2fKdC!J*2)$!wBf z7~LkJE8=-b;vOfHXywM^*Go=Y5rgpLKf?Pz9iwJTNK`tW5MFhEsAQutjB7$5*kjvW({sSJ0W65zfPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0!>LoK~z{r?U%o9 z+b|G^f9;D1kr%IegBU@ljGnY==;o!XHOgxiZyva6%IGODtT)i=#WeUN?UABfTQ&c= zOppNj0NJ7vLm!U3onlG&ZBC6~Qo1Q>6VhXAt^NCO%xW zS(4bSLaWD$w!+LI`(L7cM0}BwMXd)z+AVe#)4N441$|@%o0}ySEsiIBdxMXe`eun) z)lYT~#yO}N>MoY+=XUNEl`rYJy#JR5%RZDjqyJsuu^V+fuIL#f{S1=_{p<$s-sZ_E zSJ9M`t1HE8gn&pABzia`AfgnRbV;8fG}uVVti;|XDX~aOyhR0D<52#*o;DZF8)}-; z@};m!_~0i>1^QPt#i9s#od8?Y+RPUS`k4VQ(PmQtq0tmOY~|AY5%en~Zc&Qny3PZm zNt}*q_c?Ia=IDnr>s8hs7xs+3!8zM~a8(4t5z#JdGh2a+LA?fZ1l}$xI1ZGx&rjjm zkfc+67YD1T*ln-7oDgWo*_W9fxR@e!#KJ0iI^M0RNQ&2PKQ~?blIDxZCU7k-ch*x( zx3>Q4UZ_#&`_k1_5+WT&+l1Xf?R*EG5R~ryB|ej;Zg8E2cu|gM$y=e eqOtiRqQD=rg6je8k{dbz0000}qw6NCIxErfPS7dfw}K-81unAEp*xp&U|(P z)`IZ%&bW^dz8+`$_|ibuM!+?M-=nrEumqd$6V9DuT~*34wgEa2{yq#LI|uH3o)OvU zHroVuj;+Ab(n;B$V4ooTbqv`S(1Wmu+GY+YSu~8F05hM10ncD2r?r7o2Vo;H*Lrs+3XMP;Lw2=0Jp$Y2G7(M0k?s`PJnR-g&!_sCjDAYXwFu+-$f{%im_|AK_A#??YMO1ta&w_vvWCasrd+JQ(ecoCn6gjTq^eL z0FqzzFHp&6^$j8Ur8H8IJq4~QJWeVS8+>=S0}t6^>aHms4CJYws^MqgN&-Q~pSz1lvf~QW;8dsjPrYJPz(ed{avnIoUBV@hr&* zm-MR!wVZee4P^8AXH*^37U5MXV?)?ZBeLqqonq!3!tHxx%>gG1?dn$FJpmp8v+5a~ zgH66@TpL%%9mNjtN}-N=2@5c(hij@aw}d2eY}i3~l)^+dJm^H&>U#!UR>x0;qbvJa^M-QFMjetpv*yc2Ocvy^_Q=NDbuV5Ikv)SXfIR_i8J-S6Hooa>Ttf0sM6Tf) z31Dj~*|gHP#brBlQc3VTbh!6SY68o=;RdzA&)EkhtwXi4?mJJsL$92F`$7p{504FR qBKFw4PIxIn@Ad7De}VmA@7Zr|oxwIFpSwx`0000utb literal 0 HcmV?d00001 diff --git a/image/atxt1.png b/image/atxt1.png new file mode 100644 index 0000000000000000000000000000000000000000..b41e2c5f123bb0d1bdb33d7cc5789536d23b26d3 GIT binary patch literal 1065 zcmV+^1lIeBP)bC}Fz7Bhv(%w{&T z&=$PAf0FIfp7ylBd(ND--t5e~_r9MQzv2Zwul{cU|K;wjsmSE}gBcAT9I|AE) z-9fyP?K9W{Yz@|j`2BGR`2=hQG1hE37+~MPS`c?nQ^+UoCw}^yWUYsLS;=q?ya!T^ z%-?lj05;ORLA;f%545z`670O1YphLxq`9Xhz!n(0e_K|B^NG(FgCXz$)@j-;fq3y8 z*{(n@^j-l2Iqp}#56EV~4CsIzL%bA_E`;dOp$E2wcrVa@$liH`Y$~5K-~*7=L|h3= z%lGFPxB*5$Tl)FY2+x)Ih))pd@N}xHO zel4vVK=@73uYdD50(hw1p-0-v@o-4PI7D`C0%|um|7!@Trl_U(3;*KyDoz zeQmU@hM{J(Q(7(YNTv|ZTv?+Mz-D+9M?P1IcA`io5PtAzSSGPD2tRw{IUxG0FwNyV z)0n&6ijrych#FZN;`Py^tRtYR*SftAtbMb1tF<=}P8^7>@mdG3^Bey@{Im!99j;2N zN;@04DBL~K_1Acsrw~3typ~`YgzsQ;t)D3%Wt3}Vc2 z&y;CvBfQSWwP7NjdejQF^LKc3HZEdGcI-q+JR|DIPTYarIF4`y`H#w=z6%S=r=B8e7kDBC_mw}&sT79)sf0@uaUy{MnHD;#$^e#UYzaDb(+bIoljyK#Pm zr{WZ^*&f6OU9T2CrHOd zU?iunT`an83zyzh;;nowUHSSsYh%1Qz1N-#)!tRj-v_EA&G2530lL&MlmJtm&-agz z1@B~RT$Qrcl!B#g<>^wc$pr3B0GA?=;Zak=u|6=bQnLV2khQIVk0D&B7qkVs?Wq}e z>i%=TFqFqyrxF#z%Pj#K7nyn*PkgexEu~aVCT$KgUGc8{X2euo_)^i=nHzrbG_;`< zpLr=X1Qyxi(h@#abMdRnq~-hPM-p&RE0f}K(Zy3ggK+Ad{>g3}FLYr4)uHId`@JS| z;n5EDvp91h!wCnEZ5<%y@BMpl{Ne+Y5m(hW@ytu6G4^WwQL_K$vwsJUyJqS)=I*O5 j`rL*8pFc0^U%Wp7UB|>WH-tY300000NkvXXu0mjfS~U+U literal 0 HcmV?d00001 diff --git a/image/atxt2.png b/image/atxt2.png new file mode 100644 index 0000000000000000000000000000000000000000..54613cef6a20f3decd24a70665559f106f819de3 GIT binary patch literal 951 zcmV;o14#UdP)|9COh*EM*Bx&^at+HgnM_tY$82 zkPGIMw6UcmeecqO>b-s1e>3xav$HeO3x1*J#m@%tBcCUdT^)cG5U-yV%`-obkX;>s zWk4S|2AlfWdJq>a`*$IJQU6b{bFdM_yGQK&2iAvp0jq7WuV5v_S-TDE3&%rk17kvV z^%CsNPtXb{#tl#ahd@vL0@#Cix(4DUFbBgUz;a*FeYSe54Tq6eWrIG7y|oxmk@s61Rob*6X3)_@)^iBol@J&ogkSeN{xHK z6xh+)nvQr4F?uu2h2JzbAcyd}&2CCIbE4t3gh~-DfVlt+oV4{6W>v@@Nah?EiRjM5 zWaCWEnF15FeLR{@lDU)aYhd|(8)m>5;%(dR7P7U6CR)goen#W@X+zdB{M3iQ9Kwet zJmZIUpa3?IOs=+vJE@<{-L&V2|Cg-cr<=I~O0_9)1|d-xZz28-wgX%$qzAsgD}%58 zknS>Rx~oj?&zWqjcKyy;E}|l9y=06MSl-AzPIfH98I7m=z!C5n;zxo07i=t1_6IOn3v+$6Or;;DK&hSPRz1rX% zWQ}ZzduqoOSmEU2Cjpo#L(UY=w_rz-Jyg4daJ3oIcA|Y%S*uPm2eveK-hKyHyY2{v ziQ|p$yR+eyJU$W0IUYI_uqw+gI|}|b*gO0*3;blp4#+My6OD;XT>*|ji{UC8`l#vW8%DkBBPKRHtegb#kFk zopjQKQ$@vU+dqCdbiFB#CzGx2Lrvfx{KH}iyoK=5%ZO#b$U`vRxpAg4e&YbbRigJ! z;079BC5dLKO&NY&s{6ZKo6C~&GLo%h2p9M1RNn{f72ttyV=J9(h|T@1!Hyv;5;CPb zAjI~X81EpycUf3VG*4``t_ycwXdz@1JPCgJPO@>)6%L!q;-~Jt&+)XAQG)DP`^Ele ZzX6@RAw^;Rbn!;naVCqW-_zT z70mCnd-~hRV_|J#B8a(pA$@-^5Agr{$#|DTOD*zz^l z5G>y>;q!jAHUxTy*OhM}JSMh}z`9^JzPBvFfG|n+ya9WG@C@bef5*=?SZm?h$C?-c z7eFq#^=AkNV4Fa5KWusC`m7B$0tP?>m;rqVpB$W`4r`adNA0=t-wfq*B@6ev?&mse zQ&0mv$3V{w(vI&3VY_wM@)+zqo+3c_3O0797$tTJpyPWj--Hc!I+PQjt7k{QE9voJ;>qe zv|7^BO6JzA0&NYp~_1j8u*nc%<7NrPW;Fx@`er>8TkeNu&pI zpeds>fu<+31iSTl`jGvgK;J4jt@>Q{llFaeP~L$J0M##7vfI}0>ixlOZNOUJm5|m0 z#ClEV+rYGbwUlStf1&RUH^vmQFKmqP4B@w!C9Cu=+{VtDRqBVOf;$s*`#;c`2$ zT>>4g6BrHIH3e+EcJ;^?ZspfhAKG~4JrFzeF4(ZtRWOj@o;ICCMV90B^kV}0)?w&F zCYbczc!5soOs&~O=*M4QJBmo7mcOC$mcu$$TPqi^uKz6}`iho9I;d4Rf z)LMJm(yi}KXLre50vndP8yCPL)~{Vg-QiiVO~31{yC%5J^3(ymLlQgvoY)kHZioIJ z*zy-V|MNt8`k2?nEVlJ9N&e(J6;v1Rgh{H0`?Yk;{h3|sy-LI87Ae$I8hDl!i9Z(( zo4wb4J;Tef0enoGXqv{8we&e8wF_H1o&`IE?B~tzwY7KN52~vnd{HKBlgFsPdba^& zPwMECM8_X0$D3GI8?gV@2>07N@7A@;!)tc#ecto!Y1@BX-_`%Ke**g%!#G~E3}XNQ N002ovPDHLkV1kH==#2mX literal 0 HcmV?d00001 diff --git a/image/atxt4.png b/image/atxt4.png new file mode 100644 index 0000000000000000000000000000000000000000..2464f98c0f65542f7597fdf0f0ae89da871e71cd GIT binary patch literal 1017 zcmVCi^ zs(~%e!6sn&X$kL7tF;NxKRvH#g585n_d(ebXh3*6vi2NornMrp_z2dA@Nmpx4Xm93 z229oQ2wVZVLafg0;M1^U1W=*I8A1lywmwrGM4AuQsY@D=P)b_|#UYnzznimkA$u9 z%t1DDU;=!X%}uf{*W9`0ua3w(C8-X!FNVt2kl|HzUL~d4B4UN7UunD#wgT>f7SMz2 zSq{HuwtdV zrdAJ+>ETcz^bwLNcr}SG>ck_D~TJ*erl`ft$mCZQ^8PZv|lLHfczo(mT|NO~8VJ(N>Mn zQMrF1Nh7=UYROp2`b4I?QkLWU;nxJ{rGsGrnZTq+k3C9$$J{`?UrZ{BUQ9Gd#tQpFZ)-l~m5W0iN#3%_RjJwq86;saoz| zGuNN}u@AsT#8aW`VA6|1IoGDrbIp!$THa^oe#Da_P2=D3vYsc>*I-^1vv_8f`v$zC z+Zt!MRwTl6j6~4{?(ia4R?*xEG9wnkiGWm`)*fBr)oFY}KBYx8P2(rO8U1ZZqPx>k zUJfRZ{kA{8o43`GkwnbqINA5{q7h!=ZK)DjWnZ=s;m4%%Bk}|OdcyPJ%DXpjTLlna nB%9OoKtK-Oe^0fa>VNi6maEJ<<78CD00000NkvXXu0mjf{-X0X literal 0 HcmV?d00001 diff --git a/image/atxt5.png b/image/atxt5.png new file mode 100644 index 0000000000000000000000000000000000000000..19a8cd42a686c522963839ca4255b5971eb820cf GIT binary patch literal 1054 zcmV+(1mXLMP)`xERO z!slb?BC`1jFa}bv7qF3ovlM6pU9gLCZU_2G^IgfEg0*~XfVI6UxCFA2fOT+zizEIz z4!-ISzAKMth_6@S(6~ZS6O4CV`IzT4CRNot*2O-Ew>cD6NFM3niSW0gu zaI2DRcmkVA)_{d<&!X?K#+l3S$QJXBGDw`ceWHXI5FTpC<|m5SHSi3aO4)#+<|dlU zBG7lrTuZV`C!hT6j?4tQLN>nw=8$~!OxQ+&LAFx)dy(EY(n}?~ko@Y%yNH7nk+pMy zDt?Q|4uGBjEJS=9M@%KuiDXAnxz>=)e-hXfY~{Vc2C{J}dGwu1?~AsYGD-%?jrR!V zklea$Ys=RFlD!@im+_;@+y*bhH zIcwlqyq2FXUL~o%$13}Q))%EMlTOi?Y~jU%P>;Ct?oTG21zs6TynKt^VZw%FI}urY-9~QH%hHNvgb0Q@=t!%y48~fKQ8D>r`Y#JgDkS#f<(xC1!qJSbd0sMZF=&5a3QIZRaBB&KiABZq5Ej_HzE10<{~fxMjAw9 z!;K&ORe<>wzBMkRV67ne>=y=xc(7}LACR5n0qp{3b^EnKHh+&dpnh~vn=S{b9CY#K zbhBs0b$gV1HzK=Rzrb%{ahHCE07*qoM6N<$g4WOsfB*mh literal 0 HcmV?d00001 diff --git a/image/atxt6.png b/image/atxt6.png new file mode 100644 index 0000000000000000000000000000000000000000..5b917d2f3126f2c96d756f21295cd02818b89dfe GIT binary patch literal 1071 zcmV+~1kn45P)QqBU_jU;eIMU9cbDJPPWReD*3N)2gl|dT5V!@d-v`19A0NUy#x8(0guA3~ zEwTQ2J-$Bicd^Aqsef~yHr}@&3EBEsL{~r#b_;e6Vdh3DA^T%D;QA}r1z72gQ=sSe zY}ED}5Wa7bJ;gw4n7BI4#Gb1g$r`?D zR=Cp$#x5k%SjL`#b6_evN3y$cQuRl$YYCGBLjjC_2kI-^7J-|IXy5HoNn9Kwr@+#& zq^Z~;8y*yXxjF{GrTRq{f)$fdp8|&s_7Dz=g&xWa~-3 zW(nB|uKZsbA2AKo4kQ+7B&A{e73c}XpamYTk}&?o|A(t??pmqwrHJ-qqtLyl{wH@H zHV!__+8U8vX=O+9^|#(lAp4T|GCXpQ@aTD#?|E`xxIUGbfyN3S1h- z-&Gk+9YcS%HBAVcsnLd2O12RuZ7~eD3sWh(740gG93(@qDRAK;b>>B~Ydk+!!n#fd z^?-R7OZWJ<*irY+nx*Q23r2zO_omyh%g05vg?N*&T!% z5qXxq!a-~wMyzmxahsv%Wa~rPiayyx)|^bUwXNhY7ycDq2T1dMYwKzD)M9I2E8Bc+ zww<^YRDRF?OaR57A)a?TPC`}y2atVIexfv}oOs+`EC+jraG&5At6Cok4^EC;BE)O8 zhinJLS$kYGV{gvZhfanu*zaHyjW6(&nEPD2lvw@t2pDFqpkbqf$w>1`ky-dNgDvqZ zEzU!-g(>eTUEDBx<51C%jqx7C_7<2zcCVbBJBhIIGpJRb&$hxVqA3M#)V|2Zf;Z3B zHgVCioAzuQ?iD%Hwz!3`O(MZP#aHu3XXAK=uQrg-KyFEd)%dFV&m@ZkBIQH p8)SHS>q};9+`~Si@RNPd{tHFG%tAr)U()~p002ovPDHLkV1ntv2Y>(o literal 0 HcmV?d00001 diff --git a/image/atxt7.png b/image/atxt7.png new file mode 100644 index 0000000000000000000000000000000000000000..876d065a5b8aee1e3aeec4a57ba4d6ef4bcae47f GIT binary patch literal 1018 zcmVG`3Yc;d;eY5jt{f7V1c=KNa_?qJzAX^-P0pTTDdk5j^3-)?j z-={uW$QFNrr4W`-9Doh{y*a}}L+=ll4L1>q71(Sa0GHtr!r#%_qip=yg72suNAVt5 zfK4F0{!6l!0lAa4fp0(x3^g<03_@t=&46py0|#NJuG>23#rpb4%7_Pv&z8-#ybl*!a1Dm@c%K+_B zzLx-sckUd^1acsNCE%Xc8hQX`BANm#VCn?H?Q;y=0h4C*MPzLRoVgLY0`VwMEvm3# z2z2URv$^XeKS?IvJ;M^LBOAGheH8FJ;2fCieJF=5s)#YucLP31K8>8zb9@X`3vOG; zhFj&&se2_k5vZ&&`vNVp#V`1&;-PK1h+jIuuoS?BuYrf>=G#d2u5_|vx0C#?Z*xd~ zjT~#hTFyGt?_3TmpLcGLMVtzaoV76?23;=_tYtWHA|bf9NEMC;z)Z8R?|lboQ#Vu` z=@jO%msMyo{Peog%XBKwa>Nw4sE4DOJBN|WaVXLqsuLbL;iOh8nq)sn`5F(8kFK~C z#$Dy`E7+mPW^%}bNOZk2+fc@>-cBqNxhd5tjU6NdFkwhe8W>BmN-=Vm=P?pGbnIp5 zZ;>s2l<}2F&h%kKy&Cs%&nt|>jhv8G7244Ir9v@<=X~viJmm%RQHha)hh;m9Kd% z49k|Q;@U|jw-Jb4v-RGpi^&9%n@T3!EAOwXepy!hE&XSgBma!M@t2J7(hlIW_IPav o8D97Qk*LY-appJi7w_whPg2{;QVanfeYnaO%CbN{qEJZGu zE9ps=-FDB}UC?*V94qf*=H7Yp@$!P-XuSBp0sNQa2W0mz!7>Qje-FZb1O|j%H1`U^ z*MFevWm`{s{D7?GzyfS`N(t=WfQ^0sN#W3Owgw&{+(&bdU@3&ZdTfn+t&&RL{td7M zn?m^3hcY6&AAyx%)(8_VUbpAXz?O|6n*u3N9&?9A*+cdcm`9-hl-+T^gRKNI?a9H0 zU^kjeflIInSOMYV5wc+mAqe;anDt9?<@;jLRsc�)&-|ndaU%b2Xt?U~`?zfC~Yv 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 literal 0 HcmV?d00001 diff --git a/image/dd.txt b/image/dd.txt new file mode 100644 index 0000000..d192163 --- /dev/null +++ b/image/dd.txt @@ -0,0 +1 @@ +压缩机故障,请检查! \ No newline at end of file diff --git a/image/exit.png b/image/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..6721a39d7b3605d6ed081e11f5c9ceeb554c632c GIT binary patch literal 3936 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 literal 0 HcmV?d00001 diff --git a/image/exit1.png b/image/exit1.png new file mode 100644 index 0000000000000000000000000000000000000000..96833de18d40e1bd5d16b5f6a626da2546719fad GIT binary patch literal 2734 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 o^Zb{~%S&h($07*qoM6N<$f}@=xng9R* literal 0 HcmV?d00001 diff --git a/image/g b/image/g new file mode 100644 index 0000000000000000000000000000000000000000..8876378bbccafa3620529d4c8992452053a62a25 GIT binary patch literal 136 zcmZQ!fB<#|2Adt+3=I2#+zl)Y42&RQCI*HSurwp{3uYjLk%yHLEWyCQuMU;~6CgGt vBMVmwgM)?$ScJ<>112rOAi@P??*Wz+eY7ivudp3Zz$X?${3iUGNFf literal 0 HcmV?d00001 diff --git a/image/gg b/image/gg new file mode 100644 index 0000000000000000000000000000000000000000..ceb9c32e7924d593e40b3356277960175e4bb336 GIT binary patch literal 132 zcmZQ!fB<$V4Wk&L3>XdJGBYqj1^CrrDj66+Y(_>FkN_7%l+_5zU|`^35CO5j0QG^i R#_%&R*fBFOa6lA-#QHu3;=N11$_Vj literal 0 HcmV?d00001 diff --git a/image/h12 b/image/h12 new file mode 100644 index 0000000000000000000000000000000000000000..df8244980ffb9db08d9832143bd49e537037db67 GIT binary patch literal 136 zcmZQ!fB<#|2Adt+3=I2#+zl)Y42&RQCI$v0urw3P3uYjLQIM4pEWyCQuMU;~6CgGt xBMVmwqk~2vNQ8;gO#>>;#L6JT1!V65ng!CTU&Fv)2Q-TVByW6cKP!j^0sv~+377x? literal 0 HcmV?d00001 diff --git a/image/h2 b/image/h2 new file mode 100644 index 0000000000000000000000000000000000000000..30deae12c4545fba15281fcc10eb77796670822e GIT binary patch literal 124 zcmZQ!U|^WQ#K6Fw!eH}+hk;=Wkbj4jfq@xFGXuqWK{O*1%L|YIqZ=zDBaj9Hesu81gZVqlVB5Rn41_W;cTX_XUYV6X$4#Q|gk0G*x)<^TWy literal 0 HcmV?d00001 diff --git a/image/jetOFF.png b/image/jetOFF.png new file mode 100644 index 0000000000000000000000000000000000000000..8447c87e24417f81bf67b15a70253ba0e0cdb113 GIT binary patch literal 7219 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 BOTqvE literal 0 HcmV?d00001 diff --git a/image/jetOFF1.png b/image/jetOFF1.png new file mode 100644 index 0000000000000000000000000000000000000000..85b041b7b9443d15573b0228216168ace96a3bbf GIT binary patch literal 2369 zcmV-H3BLA;P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyt} z4l5Eo)|lY{00_ZJL_t(|+U;FiZ&TS7{?5fdj+5GP3XTILf}qJTg_I0R2_vWq5*j)$ z?E_LXJWM)$ta#}^81;?EJ|Lt%6-|G@NJS|#twazFol6-AQ0f8A#EwG}UxMRHVjufl zb{}k?i=Ehxjbk6PKPi&!oU_l~>)UIsZ|!}K%_Nga7!i-h$^tiq}kAby$?Y&Cv*s-wZqOixJaBjT7%Gfk= zeM0~Mzu%9^$w>eJ8wdoTswz}fg^&oC$fd9bSXsp2_n&DzrqgMxtgH|KV58Bf_78XD zTWT$$K`E=y6FkHuozLC$mtDxt=*DxB#M((a=GfJh`#AXrfp-PM&mwUUJ) zWMe4tnaySk1QVjWtnoF4^*{)z;Lzm36xJ78B|g{I)(Qlxs-Y0#sgbMqF_Fb8ih|N#+h(2655+my5eAaohZ{bx6UI=^XGetS?C>v;8+;dxoP`j5 z49DW<4NnyG^h0tEg77_XgzoO@d}-iqZ2ja406=*441DAXZ1Lw+&k;w?LmWA;y?6cR zPhfM24i#B#^4{FwyV`sE%2(AV!}v$rex56CbQ{6QSqQ6N?~33O^6pUxi~p>7jk*1WI@TtRmJn4Cg@JcS>{O>(M*G{jX2n3=iHdSV@1< z!XADId+Z4SfJ+3LYF9e+o@t`kUVhnybuic3i*xA!-2eVW3(ev?A3|~tfswQ5dv+7j zkKfUbwM8CP<}wa|;o%HcPJv4Yn(n(Q^qaiS7WadN2ylSo*{5){#29--a66VNiNgc& z*l!>g$#wqsCa@KTc=Go;d5It(R*Ds4AEo^#q5NpL>b00m48r2=>UsUxwE3J|vceX* z(GNhJ`x_o}J^grHD!Q$8aNcta^3h*H5j@2@O+^04`<2Iyz7Iyq>ft!>53pNd^I!yz z*3M3_)#}fIGmv`^)Si^i{g8H%i_2kGa&4)D%^{j;eFr!-hn#_wok)_MW~1ARD%D7a zE&2$y=wm3ogUB8EpwND91AKJB;GT)9p*cT%e%E6tUAJal_nw60EmR21R;2rLFaU7L z0PM?mL0rQ?b{%Xs4t6tKEP;NftJuJ8?el_x!caMfR*nDwA6WpG3YumuE5>23vrNgq z^(#|*nitfX>4K}i1rfnjf1BMvu_eRRg$Q|Gu=mlU50Db?rIOgCXpqy_TtjPDahVa^-TtYvH8p@ zWSax>Aw8UOaX(bHa$*v~=$}`qd1a$&4$W2MvGO*^Rt!98!VA@W&3;*4WHFl&z-wNZ z;I`IuQr)9^$D$9xi29?e(&0;5u4d#cY{4%YucZ|c_GdSty!GqCwZdOP_MNH7&+!9+G5P%SS5foa-ns``2I84_rinsa?u7@Nl5#t5x^s^}W*ZC3sxYAER4LKeIM}k+WoskLhoPBO z%7Cd7ep_wfj@=LDl0N|HP-BDIHv!`CP~p&V1RHD5bO_wb29>I71WKn6%yclpd(E}6 z_EZjCfO4q$g$32#52k@}5U!{GHh2e=A;TRYhI_dP7_`%8y8g)q#^G*k9KGIMv>}2B z9>6V%Q3<6)}t%_o2KeSZDTvk(rr^3trVvf{{<|+kQxATF z$|S;47p7$rg>}m$iY_mcsL1N#GHKXD+3jkPMd`IZM72sCycSoXGSo;`MkL8-Ir#MH z(*OXr^h;Ty45UPABr7AFg!ap4E?41sWPWUH41T{K0PrXX{QPa|##Y6`l8TbX(meRm zrAr#?-~6B=o2S{>ig><85KgEXmuJtOEf73CJ&nG;KB%gSOismL?<+{=D9Khr@Rf?c zeJg9^PEAeW`0?WmQ2Yh(`T2P=Gc$v9I!&!*Aq={iqPQ|Uev$N#t z)vJ_bi{twB>$q~|iYBBqf&m~D3XyBqu3>g|7O7N00000NkvXXu0mjfCwh9} literal 0 HcmV?d00001 diff --git a/image/jetON.png b/image/jetON.png new file mode 100644 index 0000000000000000000000000000000000000000..08526c75e7a848664d2dfeca52aef6a1d35a21d2 GIT binary patch literal 4695 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 Ze*wdc{%s-bUTFXT002ovPDHLkV1jUHG3WpQ literal 0 HcmV?d00001 diff --git a/image/jetON1.png b/image/jetON1.png new file mode 100644 index 0000000000000000000000000000000000000000..d59047f8d883117c36a08925c25919e3284c53fb GIT binary patch literal 1994 zcmV;*2Q~PKP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyt} z4lEJso?n~*00&A*L_t(|+U=cfZsJ%Lh97@m;siGc)E|}_DN?HaeRDy2)rKs`4-qmVN-Dm_`o@E(r7e(xjR4`6FegJ1UOQ0%Prmk zuN#fV)p&t9CRa-N4ydRYFk{&<_s}{~@LPK}v~~k_#?4)6TfyLXo@S2np%X;WzC!LK!mVP)hlB zJVu`=sJP~u3obySUO9RRDfpm$nB;!{)vH&32hgRIM`PwMxm2>qDf;xel2@sUM}CYc zrA({luGSr16$-gTK!78i)QiUirvnla6{Vbe@&uoiw2Drl)Vp=aC|Dui5K>GkcsfNZ z1?L+*dQ&M{S7F)m6s8RH30F*}do?Am;sM9D1S7F+-V5#SBhOK{Do;TR5vW^f*#BcxCsyxz-n zJ#TC4HYO$p1{Je{rCDjF7~?zZJDO1w086tdYQ+cbqnmWM*Mn`{#?;J(V+L|Sn1r|m z7uRy{SF=&#c=vej`m^2{T`@nXj^XfP=f(2b!zi&|*ylVxr)JicI>t#ft{YF7qSuVN zRi9GCT?8Va*=s)9G2J9L3y%dLPGTY%5hMXo5)sScw@t$&%vp+l#B3cU5q;SQpr92f z>cupeNNB|^T5)UUwyt%n?mz@I!zQ*dOs@a~283d{;NSJrMf<&P+eXk>c&woa*B;}I zsiHgm4z2z$kZ!@nExIZ3chmaI-Iv)Q&N$?+&9A8zsu|KZ!rv#}Pq6;t>}lu0a>-y$ zET2-M1aIIGBth!g$n1sje=9|-Nlb2lm0t^nhq`9qGDC}viK#J(IxF(dt>Lp8~=@tU48dnWjjWC4=kOigGj{ZRigyUuy9O= znpLAzC}rl!ZP{LWU*_F9_PKa)D{RpUN4;p<#kGfuG&Ca}GufRQ2gcA0Z1c9ubtC3~ z8e|*xgNv+PeU}60AVcaHLW<#sAq&W|bc^pR-_LyS$M~YaW__b$w7)os3HrfpVKiD^ zG^V>zU)f(}E&@OHL4s}CnfY^ivD|Y`6)XFnqsmr!YRpx9h2Qt_dfvU~6N{Lu_-f|+ zc#-#fJUDaWJ#S|4#tH|BL`1DvOO+1L>2-)jjBVPyEWboZLC_EQ(EWgrf=Jw7bx&r4 zNkk&zGP=Z%{H$u1K)csY2@d)Jp$PF~f4$9@Jaw{Cg0EYt668;*E)GMFAPzQL!JBv$hJ$cw%CidA zN$xn~+?Q392P-@u4_0^v9<1{nx?(hH0@`gf&l$bWyHBCnhlvLt|V!C{wY&MODTT=-U276$GqnU z12V*p@K#Eh-cPGf$ojvdX9=H3DSZ{a+%-7PM^AG9&+K{d5Ptwa0zax2W-f3z%D6r- c^Dg+m0J;%CFNEBt@Bjb+07*qoM6N<$f;2kDkN^Mx literal 0 HcmV?d00001 diff --git a/image/keyboard1.png b/image/keyboard1.png new file mode 100644 index 0000000000000000000000000000000000000000..4713564e02d2f94962977255a5a77e8bb59256aa GIT binary patch literal 1674 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 Hu0mjfQGqw9 literal 0 HcmV?d00001 diff --git a/image/prduct.png b/image/prduct.png new file mode 100644 index 0000000000000000000000000000000000000000..f95029016c359d978626f50c38ad0f45fdd6b219 GIT binary patch literal 4848 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 Wkb7dvP386g0000/etc/pointercal +fi +unset TS_INFO_FILE + +export QWS_KEYBOARD=TTY:/dev/tty1 +export KDEDIR=/opt/kde + +export HOME=/root + +exec /opt/Qtopia/bin/SunJet -qws +#exec $QPEDIR/bin/qpe 1>/dev/null 2>/dev/null + diff --git a/image/qtopia1 b/image/qtopia1 new file mode 100644 index 0000000..a9acbb9 --- /dev/null +++ b/image/qtopia1 @@ -0,0 +1,32 @@ +#!/bin/sh + +export TSLIB_TSDEVICE=/dev/input/event0 +export TSLIB_CONFFILE=/usr/local/etc/ts.conf +export TSLIB_PLUGINDIR=/usr/local/lib/ts +export TSLIB_CALIBFILE=/etc/pointercal +export QTDIR=/opt/Qtopia +export QPEDIR=/opt/Qtopia +export PATH=$QTDIR/bin:$PATH +export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH + + +TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent +if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then + export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB:/dev/input/mice" + if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then + rm /etc/pointercal + fi +else + export QWS_MOUSE_PROTO="USB:/dev/input/mice" + >/etc/pointercal +fi +unset TS_INFO_FILE + +export QWS_KEYBOARD=TTY:/dev/tty1 +export KDEDIR=/opt/kde + +export HOME=/root + +exec /opt/Qtopia/bin/SunJet -qws +#exec $QPEDIR/bin/qpe 1>/dev/null 2>/dev/null + diff --git a/image/reset.png b/image/reset.png new file mode 100644 index 0000000000000000000000000000000000000000..62f5e329c47eec782052986829176b50236f89a9 GIT binary patch literal 4125 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 literal 0 HcmV?d00001 diff --git a/image/suction.png b/image/suction.png new file mode 100644 index 0000000000000000000000000000000000000000..a18a9cf408fb1520fb68d41a2037375db817a73c GIT binary patch literal 1794 zcmV+d2mSboP)VsNa)WzMb3N=`B7aBwc?_8gKpPNmurM;vkBI7b|(ZsLdoN8GFfw>VI9 zqN=C6XJ!{7E(hGyd;ON_?XQ~s|GPfAdBq@u4DzJp)qlN!K?WHlm4TFl4D!U}iIB41 z0I5Jqa5Jd4K=wc`z}+tB^B$y#3ii1j)#czWe}Dpm{BWsXgB*dJfxEZ5_y68+UcWbd zy6AZu++R!9x7)&K)l-LJK1dHK>l#EJQOYn_L#prX_XcDQSOKPx{jT-053EDx7QZAZ zfeM&wUoPx3xB46?z#T6hW02=7G6MF29NcHCI|Z)$iQ-B17>v3IclCx6hlxIWJjp3g zg}FQHn*c{Z=_`N(!1^%<3LEoF+_Q(2Qrch_z@~LPiW7(w4=oR+!FH}=At)xNkiBc+HrKHqB&C~a zk;rNU8&dm0tMJCh@?T~Vc60(Z=Z<#V<`;5z3)VHuU1#pLMA}dkd zSnC$K7lS-ckuho^3-tG1K>;=bu7Gv>u1GgzDM&~qNm-GQQV#Xm?`TqJpX`^^ z?d4n*YRVaK4IC1zd8seQ-7MB~kmn`tMll!{5#X&EjHo`A7{79Yl4ycrR8agtKPiuB zNGYfGylL1Zlk;0*gof`^e%%7`#+F2u6o-P1X50c zQ}Y6kBjUk>q-2dItdj#H-%d(MFt>M#;&a{ljO=-YVsyt!;=;aKFwl0ifSdsSHJe~B zU3`a>c@z*&c{C|0(OtwAEtSnBX%^NU8(Gh-ViS!iF9`AFDQdCHG!`A?c}xAb;wCQS zzy#!N>$^z^Upl0$0ujE8lylS@+eR(lSm$;h({(xrazuz73)D#DsLOq3w)cN?v4oV^Lf0Yt)!L0w7j&*l$645VRRep3 zkZs+E><`U^$+gw*5Pbdpfs`*rBqwa-z7%Naa@MN93h`Qpl(~6)1!*#K+Cxh3ZUWhF zI;ME!LE)6sC)gVd3hsJj84FP^1YYEl>4Yz{nS;e(>4#v2!w1Erci0g zBB3E=y^8Ji5n(b9^Mr8$e-LXE?i#(Qf#z%`oii0zgqH?zc%5!ok@q(qZZg^dTg z8SE^HDZSKNsN1*??rT@6w#1}#v+j#)EThnn(%oy^h@d7udKqqJyV(dh=*9}}CJnBo zK;6}Knxv4F`kZ~}*Kv^NFZBkxvD@(kC%U0~%*GPq*Io8t^tPMabl)P2w?Z10`T7dQ zbnB8!b9#|Q$)H`7SB2pgU=CSw*4cM?U_+JTN(X7q1tX<83Y#(y9m)cU`|7@RUq-zO za*pmUXXv@pNE1x4;(k2w88m-RnMaAK(U9bMiBi9|-~SLev8?Mi3tbK^o?z7Eb z(cI?Aj?Fcm_pf)5=PB;q5{~C+;-tq-bu&v;R-{SA3dQKxCHTA|xu6n@fa2>+=g;2h zdfdI{U8GbalC+Y?9WuX*w%Pyhe` literal 0 HcmV?d00001 diff --git a/image/suctionOFF.png b/image/suctionOFF.png new file mode 100644 index 0000000000000000000000000000000000000000..de10de557f90003d080d71509345a2727ab0df76 GIT binary patch literal 3603 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 literal 0 HcmV?d00001 diff --git a/image/suctionOFF1.png b/image/suctionOFF1.png new file mode 100644 index 0000000000000000000000000000000000000000..32a3094f73b3718c48883a5061b4bf501f0a32dc GIT binary patch literal 3565 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 literal 0 HcmV?d00001 diff --git a/image/suctionON.png b/image/suctionON.png new file mode 100644 index 0000000000000000000000000000000000000000..199b824a5e7bec4d63ce501a0829aad131a5ad3d GIT binary patch literal 3594 zcmV+l4)yVgP)IRT}&E?=P&WsX6R)IvZJ*J+iab{>}?qiW_%4YoGUeX5)^- zEX(e$uC8`Coz6JV^FynZ54DniZfI!GJDtu$)z#H47S%*!v38)Y(sbLl#oVT_8@f@f z8(8q#XzEbd_1(5Cg{M|Y$Lk%=&5awXw%J&g^{*7UELcNBgPvvCx74z5i(TKdw>I~R z!EWe=S?PvG76AYxL=D_R8N#9k5z&H(WID!5MT*cfL99`Yp;X_C zeD#PU4Z6O}@!a03O`E%x3tTenz<~ohwX$$)g|TDrcJpP0S?LBt2?z)l^hLMhM)*%~ zDeyY3MH>DB^^h; zdITlfUQ1k5)^BiZb8KR_ba5Q#dLppzs??IN9(kwEdd^^0xd8x!5eL4RcmroVe~13q zbMT}}AV33>1V{o4zmkAJ7!e}vn5644O7BIAG(sf}Lr#Q{uO5L_Ic}d!nD&)Bo*U;l z?&hk(_V3?csE`S*b=Grr<;J_9ND*VP5_~=OBYZn~2>w)IW{^2xB=PWXkPM=989eeA zkfhc^o4ySd6+)@5Paz|dd#z=AY&_4OS{2yAg9ocj3h$NYt!Hf}xgW8V1{d6aj{h9~ z2Y7|T$CF$EY&I}X7sIP~8I0tGGChE7g$HJ(+hMiusdG4MPjVcWST?Mop+Rqydu}{$ zJ!??Xal}#@9PRlK9f23-PjVGt)9*nsh$yxoMVp~bT!BUwfmJnb8xF6ny?XuD@nyjp z8XEKrl{mMxLS{fMSC`04F`M^e%*p5zmNkt86|MkEz>XrpIfl>4EfBMx)fUT_?D zK4aK{0|!3cV&QjNl%t5IGIhfRw5NOtK%e@BrCzkD@oU-of+y z@p)k^%eHLKJ@3%c0d)DC_`LV61p|nZ1R*U!E+d{Qj3fa;?Sv}W3KbOs0m7DF{_^)) zat3zbz=56l2LC(d`kROd8oYP&2omA~lLY}>?@M98Eg_Z!^eQYJxB?hKF%T7bP=qeQ z$oOzCSmL;L{pS0R!K$mPk8HDEvn$CUz8-uHH#|ER4KV5xkrIJW3>b6+(S!uO29V31 zJd7j&DAqz2>j0A;hbYm8*;S)}sjp1A>hRGD{dEAq&u{(|X)uf4n4y8mkTlcE!5Gjt z4n*RBDHGrdVI&CHrss%o9S4K|+VkIlepYHAuc8u?nI+>Z+nejis|yD|!(QxO>V zPgN~X;f9WmAe2%g5CwWhr+`^nK*2mYn50+>dEhK)DTGK$V=3AA;z^FGyQF9RM&CE{t;=cbYnQ@L-im?tiOPdj}IyD^A>deMtfIDgtAE38^#?6x4X5uN3KLc6{VI-1o zDR*o?La{7+XhZgpLq|{I{Ky{k1uK>uz@R2D>U~(X7tL2^CX{KQmX6>?;2FeH3?6t0 z+!`d276G$C0zIVIp(Q|DvAAvcNZ_b8;&1lDAU4_kBzFj9m#cMKpR4XXj`8wcD$ zKubsPUe&)sP6-)-KJ43v2k~40K#@hnpYBLvceMb$Ci7024I2oryFodf&b>vZuuTp> z?s(W`Pxon20zV)@lz@Xp|AienHDt2GUJ zyWvdho zQH`N>Xdlv&JmUaqQ9{T4?^kOskVYY4TbYC%6(S7kM*u5?F`+idf|n2$)VS*}Kgn_2 z2?_uz9JP)@-I!fYMll+(VI;gh;{f+3MR>zg)%wx;U*KmwfAKw#S|Oo!y@cP{2;}JJ zX}J}`6rL|Z#Rt$ID#mEkdX(q+HVOb(mQ|>fvb{OXeW+w1{AO%VMgc@g!ku9eq6ElE z0mtwE!9$Q7U`r(ID4+U~xlkLe1V%|=sK$&a9BOZG4@|=b1xb0RL~}=x zqZ|Y8-ic5uYtb8zctm(3Q)?d6AFL`lP*ntMu}>`vWb%Bh1f~eIf(f@FEU0nQ>p1zz zC!aiA^WZoxQC3-FH>pz&9X$!FdJvb#_bhtjJ0od`->u~+8K9zoKy?WLlP2>vS`kbN zL;K*LK}Z5P4+~$yaA8&f0 z1fceR33;>~VL^>6?%H$B&CNfa_RPRIj!SIVxLILT3w1hr5(SzbTywv;;4)mUoeVl{p^kSN0+#7OvG~b6>EA7CdC9&B7=KD=hBjV3NT6v!#MFi zXyE}|v0U&T_DFMc^Rd~M@4+~ZOH?|lZ$u?ieSvxq&lq@k;#Q2t*8jhPnYwX5l{-6;2?(s&Wxqy?^c=~IQ}h2Dieeg**W zTX!uwd>b2^nws98FZTsu(>RXfPUPBOv1#at!zlNo!f+8~`U~g{)gmcro+wP0zJ=1j z-$0e>olzFf`7gU_uk-}%pACfy8vo_PFaE0S z`mIx|buM_tu-Ri8$@BcF%hx)OUuf(8@qE|$w(g(sJb#?yxbv%d$a#AF9~v5!yW6pq Q`2YX_07*qoM6N<$fnIo}_M?4-64h;>R9T^!pH#|H%J~A>g9*f1U#A31WXPmDO4-b!x zjEqEwhK52TBO?o{sv5hQle8N@5|78v4-XGtk!AV4rlzKIZEbC%?d|Q+NF)-9L?U!` zb*+20wY7zU!C(OX58i_;*g+h3}USwHD6vYjHLli}1S;p`86Ap*z=;$C22t2x7$tCl1LYVq?VhQNp~@;bugpt=V88s`Ftm- z|*%QB%*h_<%2klXDZH4Nj@z`#Hykw|>8=fH~> zFAkhKb?SqC`}SSx?(SB+UN533va}rFhxvWnNgiZA-$GswVA?V@M?w@p6scby|18$S z+m4J`^HZ@yl+5k&)+=nx15Xl!hZ7K_D80|Nuo+j%~> z1dPYyf8W;DcKOhuL%7{;OiSW7-yi1NWQ1~6-Zb&80-va^AX5{YKu{1V;&HoZZEeN2 z?XkYTzL2V_pX>_o!i5X}5RFDJb#`_FaBseq|NOd-W!<-N!aD@6UIkGGsS%MXf@2a4 z2Jv`2r+a#OqKQP}qa6X`@%Z_!uCDR+_I3b%dpC+Ybr8o{rz!3cuznR0U5$vM05u)2 z*9$Os^ytw|o9i=y@p$}vb93{x{rmR=@IPN4=KF{3TS#UvfGbz20a0?}*hK) z)w@0gjK||aS(d*#eE6^;iXz|6wejC~j%+`fJpzg%xIBJvOlr1CV`C%PZ1&vX;NW}f z4G5kB#$vG#dV6~ZWm#r1@8jPSM{y8;Qb17vx4Qw`Dj^6Ce!pKyr_+6^s{U$2;9GCK z_2*q(UE|?!n2IU!FaO&|v7$U*GJ6b^BmuX(fvQ=+?RH_?c3*FA?^lUL;_kY@csw3d z6y?*No*o6@*WW~$N;Pj7D6c!@N;QIB;e`W55hTflC<;_f9iPufKA%6kwy8b>#$vIz zBaz5iuh+}$Qjq_+eR$JA>Xc0?4-Ya9ZV5uZb)b6)6b10e3RblYP7P5Mm0T{j@c6h@ zdaPslAR3J-0RMKgmqK}+rnx3iw&YN$f@MQ053^|pw+ov5FAgY*;BvV!$^|?g54l{f z@5?X0eCG*ZEEYT0+1Yu{@Aosa8053>4{j+?gDkL+a~`#K%ZB+ZOfQ1R1>wMp0lHmo zEK|pEYFL&PdVByN0SpfhU+eDf?hr+hUw?CurDgw?0(oVDyk4VHg=W9OU^GWk^HR0p zfd*3xb!bcD-U932IT#fkNs>sX)2#NW(wlF-dC=$cU0xlI{nKat+Y02BVLt0nHeLMH z%X9o$Y@V_ytw06l(gMGGSckR-_YUZhWr~F?Znqmv)A|Mn2d}8AYDgzfo*Zj!Z5;~) z0(_rr=G(c}?E#gQXVC<$AoJ?+MFyjJUhdT%K}}0wW=Y`g1A&%Chmda%Dky?w8CX^o z(=;g*3ZEwuiMvuP78~#C>gtnancsZ3pT)d?+kt$tz{8A#R+Q=OEYK1#@yhnP(7Q>I zq$belTLaw%pnyZAtm8Nixm<2RRnXayOqD6^~!+?kP>SriEQoTq!;Z35jc7t708TrL;$ z^Yc+vRevd+Idf*brKN>zQRa&uB0B9fekCuS>6g003+`ca{of2vCJA@mZ=dYk% zz^T>9<#G%R3|x_3e);9`mX;P4vVLw)ckHOC_+*&dpo*J8b0vXWKT1q3h=cs5R$HoqxwEp&gg&Np+7Shh&EC}PwydgzA4$G1E9=P&nBHeCQH9*0+lEIPxrp9U~faJc)hp78n6=?$O3wXpa9>k!{2 zgIKnR;&J%n6Bg%RHQ3+kZ0i|(CQ$KMeD>Xe9RY7o*L%_4&H}HEY}`E8g}EKh9Jl$| zs7e2U8Xou7Th8h=m(##;NG6k9y?XTx>G<*E<6T`{xFv@hcQ%=~>bLpJGZsf9>%g`FT+U|zNG6lHL?ZEb((v%`SX*0LhbW3nF9uoGH<$-*5a{cf z+J@Cj7d-r{+R61B(I;T1`)d5fD;B-`Hh^srST)M%dI4S6Sz229JdsFTmtwKl>0mH8 zD9bVnSsxEGjoSw1N)A6RIO|p~UGVUazm0JH#v$%6`mt;gkIUg?Z;jVZ*&Obw;c;!P zI-A{NR7x0?GWmR-d_I3oRn;3(EEbD;z238ae?9niXA`0b-^|shtf}7Pu%zY%z~A6- zve)5HhiY_pICa=In%`#kl!{p_tBR&+6bgkaiA3VAG&D4{0Q|hArG=KpGGF|#uf8H$x~6o=DC9scBmLuZ&LVY>tbn|yW&fZ5quYPH%WRaFh?)~#FlmtK15 z(Q~L3yjz~pivoQ2z!ebt4<{xj zuEX!wWE4eF&U(FG6t~5l+4e03%Igl(OZDoNP1hrsSBBvpc;(p2a>Z5{4(`t7>;2*4JZJj|LB%h{CBO&>UDNsXYQ( z)iQc93&70GOzz!x-~HKYP7;8ss>Z;;0A8-wd(wl*c`Gg!>~$dwv44AdMD=xh?` zkE{cGK|rfoq@w2ln3|f(*|vRd-IZ-sRgJ;HK}C|JQNQ2Mp|&jlH{C&Py_cOUpB0aQ zSJ_5Vy9^W@n_~U};E+nC$Y!&bCnhGIc(wh+%NJEuZyY;zY^6Zr#dn3RG1!b^Q481>3gAg25o2O+}W=GMS?9Cj)e7?>Nz$O-@25RfB%m0~ro(?QAk}#stKJGzsT8xbv)3jkCx7uQ z!-hbBL?ZFg;lqb>rfHrHg+eq3bo`1zrsTt}NiPm4R1vLNgqjZ2o8`j7!p|osC;xV% z{5J)zAiwDE@1HhJb8HoPxMPXsvO=-au;)NGIb5|Q0v48KF*P+sHk*BYa&q$OX1Q+( z2=!;OzrTMvpU;o_d_F~yT|`?m_+*1z*^6Cs?K)5rOd7-_F0u$X=(^6md-rmsQt8s_ zKzi4JtH={4PP~`RW={)(5LFa~=Ee%WohgFe5=PZcr7G_jC`%>$t_L(oDMYGRmc@ey z4@f4HpH{2Y(-RXD+uBySt?iVmsv0+M-n@R~$Pu#H?5HfuD2hU$p~8U{jYv3++hrpN zU|RB)fG)|#>n;%RWC+P~G`O-zLVX0EPN%tl|31sh%i~wCUVY~RSD3v@MU9BQ4X*`K2|kfkkg%h1%2A=Hqi*_)!- zo5JVGb8~ak#bWV_ZQEm$ zlas&N=_d6ZZ%S8H)lgOShN`OX96NUG(|kTZol2!b^Yil^g+c*M(>6S3W@cDgTKcL` zD7;sxRK_PKCx5Z>d%LpxephzguO5j+Vn$Wf8;L~Xs;a8LJaOX0hlXK%V4CK&^-jyO pu1ri!{PoKHHxh}&%x>lb@c-BB)SE@Hipc-~002ovPDHLkV1j8cz%Bp) literal 0 HcmV?d00001 diff --git a/image/textEdit.html b/image/textEdit.html new file mode 100644 index 0000000..952d622 --- /dev/null +++ b/image/textEdit.html @@ -0,0 +1,5 @@ + +QTextEdit Demonstration +

    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 G-2VsiBihga literal 0 HcmV?d00001 diff --git a/icon/10008.ico b/icon/10008.ico new file mode 100644 index 0000000000000000000000000000000000000000..fafe3f78f159cfd889d3818a6cfc54c54be5cd8c GIT binary patch literal 99678 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�+IYLRm5)ytzW-5s?_9ES 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æ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 St(#eEyQd{^tT0w)y8i*c`n3E2 literal 0 HcmV?d00001 diff --git a/icon/BarCode1.png b/icon/BarCode1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4a30a50884f8eff4b0fe65e746c7545678ce48 GIT binary patch literal 308 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 ZH&+WCCkPw8|3w7=4OLy0IwhO8{{@x@of`lE literal 0 HcmV?d00001 diff --git a/icon/Epauseprint2.png b/icon/Epauseprint2.png new file mode 100644 index 0000000000000000000000000000000000000000..b4906c8396aad808b3fda80417319d8e80ceaf2f GIT binary patch literal 8498 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 literal 0 HcmV?d00001 diff --git a/icon/Estartprint.png b/icon/Estartprint.png new file mode 100644 index 0000000000000000000000000000000000000000..06e9403e1e80eda02c66e1088d7e17a7555a636d GIT binary patch literal 6932 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/f_%BuO9&@86Nk5z+wkjLnQF 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 literal 0 HcmV?d00001 diff --git a/icon/EstopPrint2.png b/icon/EstopPrint2.png new file mode 100644 index 0000000000000000000000000000000000000000..771773d84572ae9d6feefe88c543a47a61122c67 GIT binary patch literal 8318 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 KDpM(C7W!Y@=^8Eo literal 0 HcmV?d00001 diff --git a/icon/EstopPrint3.png b/icon/EstopPrint3.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ba04a98505b0e9453322ff3ea0b8065687c625 GIT binary patch literal 6349 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

  • CD+FtW%Tj`gq=^}SK?$;7I$@Wx(M?fJ(tV+;3WELCRI5+M**j8I|u!%(h2$dESh7B6AprFanjp6Z9`H;fT|(T%>CjrX)?`tuRQ zKN4-A&5M#d7AQZ`|0iwGzn~5GC3{Z6#f-JNQy-}M8Q01Bd7mBES2qirsd19+oE=u@ z%aFVyy4mXQ=h)wJ-UP%R(U|z`4uzW>B%YeIiROIcnM;IglMBk!nK5{EcWS1ebCURY z;6rHF$@8VQ{g6Ab40B;B?b~x4;rR(i2kn%2#;)(6w|wTD)d4`jI$NS<1)QBj1qc#g}gHR_D-V zeZGk7wodcfsCZJlPdNqIQOYh#rh zuM&*cMm3*Wo;lSo&c@T+JD#KX47csRk#=2{ESY_C3$gde)B3jl&*!$lf9ba!i5@Z6 zbQ{g5?0H<9yu&TEn7z?4hr78bxjy_C8>ROO~&o>$G zQNRD8c-AT<1IlcZ{yeRA)27YQChfg^>g>UF$@{C5kGn;^d55*fMnkL6?)^5pam;4V zMx6*^Y+i^q&lsR9Lw?(lH#G@fdTSo>glu~P{b?10hZFvhw6MT4@<&gm7@ncm$A+UV z+#ATR9~)rjy8ChIv&^brP}OfB?q>$-lqYCqL|_@rKcw(^=k>pf_FDR%fwcbTe>QZd z3X$)l>1_gcyPWbmV;Sg|#K4rktR^RO9QOGvF>Y?|cUOHou~c&c`Z6)Doa>r#K==ec z-*(q9$nn3^+i4||&Q=?z(%Qk8>+joSQssqhMdc-U+-*hmkGqFi^~fR)qpB~)I)^qP zc_`QGZZm)KxV(ES)K{4I&=0z>Nt5OMllo88?H#yAy|y)~N&Q^=8r9r$;~PhR@fwZC zB|a&2e<`b)gY(cFq;JG|XzJrq?&a0r5p{1EfX^^o=n{*5Kft-g@teOvVr51wtjw?x zuM8|Te=~qLxzoq<0DVerJw*R54&OHLe=Xou>k|mW8NEgPU-{ZeQNQ5<{MQ@B+|(4l zu)Nd!;yz&8J4VU2y8`nPY=3p&)IKocQkU$GpY#eWZp(fwN7x90chg!xw_3~vST9+= zJ%?uvp?=tc#IEGY6fx;=j@mH~Z7CtXsa_YOen*CH>tWWD_I;FRmPA`jAM#a>l9>1v zPI=$i{g}jJcByu8tZzqO%_MK=Wj`)KTPGzeqf5;jNqcy&5GEel=0lFq+=L^DJu!g& z(XaMJoWC5ghJ+)`{cp3}6E*CQ8u!Hx)aOmHKMIU@?QJpV`3)_)SkiZ4w}ZKZcV0(0 z-jFZlG9j;$#|RnB647sy(Ql)a-m_=mxQFDpmr2{<_+&B0TMuQbv7Umr6XTpG!~g4C zcH8FiC;w%?xkSxnFWTJQBXKpZ?CDLN!0(;5`|DEB+{e-HrPQNQK2#cgQjetNG3k$B zmP$(<-KA=bg36aA&nS;PCeJj)C#B7YMf)2OuG_Ga4)@@ktL|y3yAVb^?Mn)kUOD%L zpCK$u(N*nha*q$GJ^mv+)2|&P_5kkxvEw&J+Ywjw>;yr3XW+dS{|oVM#JlC$ai?IZ z`>;pmopB;Xd$k9fOghQx%l?<>Wi#~pqP|Daj$V$%K!=LG6Lg8!qOSL))gFvT4z zXf?-)`Uvy^$T`is)Xu1oiwF$duY4foKpASi+I^^}?`4|%bg1q7X!&DGhg$8U8H!)J z_E*Wkv}xf*-_VFzYmN6VuAOI3 zm6z+v*1B{YqA- zKJE$Cnb!H;QCXPKLxzj~1=$viRe?jbg?C!Tp_`*4=A|Z0@N1gp()@Ng=qBDJXt}24 zXLi|(-6`7HuFq9^XS6?da?RHyr#ZBomaFA_{vm!x)bG(wEvHfa{waPF>l|w-={IuC zDm;~VX8y9x?2Tq6^suyH(1Y}qOx@o33F^58GgBPGL96dk`6~PxQMZeaIGeO|GgdWH> zchc4b{J^C+-})oNOxgkBEV$|!(m&s|iBW|(PizK_r0*fD?_SN7*yWv@3`g@4&E8z| zBJ|UR*we?L&&~%OIuC1bbdWkBP4NqeT@*t7&}X7AF)s8|9`NUywZU9-6!MNlULW#~ zK-zPWe>n0FL;h*V7ev14$TtJ|W+Gn*`DP*CP~A`HGOQ5cy^!-yGx% zBVPmZH6mXV@Uq14Ak#8{a4MM&%kgwP0Oq2xZPb=4KMScVM*CPKqgS8=?0Xs5oMHtc5Fg9r79OL}yK zhY=obG56z}`w>o`m04kghZw%Xb;@)>+Rko2>;qpIL)siYdYEB(8rvnqE0M1g z^E)#X75_Vs&*P0AE=T$(!hN*$6Zuw|n?js>yjx)2RcJTT`lI6a2A0o!{$c1p=4%%D zSg-Z0i+_b#fV>{9<1l}(L;COHe-8g+k6!DiUzw=*ZLmK4CepQr=;NN>>=12gX4(E0 zvjzFb)2=(n@>+ZS!dzK`EngEK`vmzh=MFPIj;XN2gBHkQm1 zd6${fQO$+AQ_E6hR6<6U9;MLRbi_Td~?f&4enX570~{3nLt&%Ci@9{(flkPZ>J&O96y(TtMbLPMDWiI>N|Ji zJ6+ecnHIl=Jv--6QJZ<_JUkg~=KfU@pXWlXr!lm1$2vG4->bly^J7g`VSQ9%J(ghZ zj7Gagp$~jWI|6CXMcUy=TZ464i*+{*YjryE%|O1H$QMGsVaPWW`OZeZV&ppu`OZYX zBILUWYkC&)&PLuj$Qwr92IOr--X??i97b}ZcW$Bpd50ixKJt2zcQEpj4xfiPF)~1# zzFd=ZwFPCgq6`CNtVJ2?P{tsXaR$Dhhca@5(srL~-Ged$*pq@NXFc+_BmV~E--!I1 zLiF1P`hzm6{1Q*617%^4N=`EtCOVORr(e=4(karWxzVNsX;Td4oQ^(mKirFRKn(9o z5q}BFx)|m5^}8W`OVej8akHyYj{xdXiu|?6a~|@PAkSz$-T&vX?@`Af@=Zs+8MGHb zzFEk}v6+K>!;x(Kbtfkc^ic5gJkSp6TcaHM3MQ|+le`AT z;uq-Kix7Vy${&NVJ|F2u+xyfn`}91X?^U0ULi&+N??d`?k$x!W1ir~WorZita-!-HGz7Ib34z zXOwrr>H1pdy7@2tjeH~iTc0EUjQ`f}$bTmC7a@OvahiTd{zku?&xOcu&1dep`CiHk zKtqs!5a%TFbIzYKkCA^p@}GhHdHDWD*0tEc%GtIwz>kd1P$M4z^!tPLn@lP3E$ zs(6+TJ^|mXZ6PZox$@_4CkXR+gaFt{_p%B&i|v-`M=>b=YN;blaRU*b{Rlr z;{RR-aQVv9%K$E3d3qVZ1uLZtV6ROEa0G2WHb4eo$wWW?mmoB z`#svAl@jxj<@<29;x~>zYr}oC$+(3tEa}G}{?*@fr*gc~e-qD#JoA>lFY$mnjq4JX zyoj z@T2Lg{q+`i>Yw6n#E4sd+an0y+#+od?Dip>5camhz}>LAJLOTj(=#kgMgJo6r54GP zFwJvFQ>yIpnbvRV+hLA9gLM1Uoszh(W}OkYrbXJqbF3&w;8^*d8y8*w+=OW3b8~o{+xl{eC2;9+NgU~_U`0H-ryPI=_ z_sxbsJqH99BhH=-7cv!rjoRFYUzn-vo?l`aDtwSyTZ1^BDvbHdz=e^|D)tL0%RiS;w>!rT;A@pCza|7C%FYlW{F43o{9~S-Va_Ls`&xqfUr>&9Tw=t}llDl$ABTps zu%>MXt=Nt;!*(-^@<;!6`j;0NVvfLeGb1ErksPJ* zuaWv8>G{R`h&K*MoPs~$P5j{3@z#`|PRjcRUu7hllwSiYFMTcB_xT^LkZZB555Gg| z58sdQT{d4myi2}sMS4A2G%oy{l!MNCPU@Quzy4GVk6YMQ%L0X~q% zE1PB3eeh6&vc>ov3is6=j=e;ioKj-}ac7ekMT;I~8~n*?-%0ykl6b-^%r2FddJIm`LQ~*Q%5>)`U3F2v3n@1@;#c&F zJ&k7s8&1peKK`Ov*#+=^XV?n2y6czm|3JKDqe_1#1!|pI@x*Ae?9Hj?k-I|bL)mRq zGZFTJ&Cim+`CTDxl-YmQenC5slgq)cp#58I^fZDo^J6Yge_rlS8}M#?{#5-{hwxjv z;t=JwoR{Zg{7UYXn7>wihdbomF>P6O?^5&SSWhZ!`~MRDf1>&Dnw$PfpH3nk|Y3N3FYBP2RKf zu90_+tXG~pEPOoiUXS;WyxXf(wjtG#dNYLg|F=7O*2TJ~rwyLCr;o@on7=U4D9Uis zhnBX~{Om1>7s2}tOTU+Px5S5_FBNxSk?Fychv&fi$|f*M9%)K^kHUMn67A)B;CdE! zAP8I0)08y>AJDUtK6~x; zDM8(lrw(}zs5>X>-Gu3DQrLSL@z;r$tNQC+r7!V+qtkSJIY5r!zNqb_*59}RD1){y=Y74sFY#kk@?%6Zk;WiUxm?! zgnvMJkE?Y2&2ZwR(;jP++P7%CxEXam*dy&3c~&64$);uhALgz;II1ekzy1g`5V1o@ z6(y)0Mfn(TUN8!3lvbKA6SYCaI5KN1lv1;?Y!PQD%UN3uAq0e$G!QT&PeF%O2p@~H zuItXk@e99pR3s?lO!bFvLE_F>J6hvPM)vo+_rCPa>yEm_k7oij4}o>2zxfDE3{F}u^EZUNa_hwq>7lyL-cd=GXM ziOX|*av@vg{#oV?piagZdH=B8j1N15ej3i%9d)SRJ}38p#DnkzqRgQ_UiwSEUg7M= zLVhcAqSMHV`p*3_cZi1POg-vTEk7M~EuNt+T(5Gjrw@s`(b|3)<9GDt^->2TUs3Pe zj($zqF|{*=a(_o(ztDY7|6DOgfy85WNcGR7`bVEh=FZ=y`o?vaeG&d?=;N27kFl&c zA2nX9V877EGTG<#BIX6}2)K2|@2mFm{T{pzI?@>@WZvt|Y0a11uY7XPT`w_l*f%3I z%J>9*Vjt(JKDuf6icZ70M#GrYTZ+*zQ#z0OZ42k=V)oaJGDj9@c|G&Nju(A27xHYs zm!9WVlb$}=|9oeH{AEJrwoF^EnQ|sKDZ5tjalJ9?ZjkEHeE@ zEHs#Tn=PyAL~_6+=1B3B&L_V38N}iu-q9fS&f)5v!^HD9(4JA@d;$`Ixlb zn2%NX49jCAU#?(Y{`a*!IUFncF>b;5yrGRvqc#s5KlM?Xj{-4LbU(Uw^}&LY^mDo$X@Gd+o*3NP-zWeYoUHO}c6XCxykGXJ$viV$#_IQKIPd$~1G-Cq%MmzQq z>qNfXuwnV8V$Sh@h<#Iy`g@Eev>lEJhS~*YkvHf`d!Q4f^09-1tMUCF;~sIJV{6pM z>rbuHZ`c_xb7vvG3~>}zFLdx@Hi*0%PF(PNqV3DGk@#l&tY>7LwvpUupGMsG&<2rD zxjuSOj3>|DDGx@^N!tIa>`u(jZdEd_w^`s7SXGU$(l3{7egePM#cKtR(+BV0esR2e zaaGE0sFZnVi4W9J)rh^)NINR>Tc&e$*k^jphICnIMRu_#WiJYDf-d{WQ7^7N=8Ej; zX)6=^e3R`l;?V0U6VuS)YVCL><3NXHp(B^i2;mz4V+MWMAZYv}+&7cH9{7&mN{DS# zBK&&Fb2H4F>FZxUB4qh|=0lkoco*XbX5t;o%2Gmy@i;m8gO)E6thJe=`;K?lg_qmR1upbX=KRC& zf9R4qM!d==I)L$?q}CBfZimp%kpedY>vrfNAIA#gSVDc!OvpA(L>n%~clL*UxDcO7 z3E6hGo4G7J0?(mV^zCANE(&S)vY(-RADKhTi@ljcvyI~U{B^6gx1ON#IMm{~pQ5}P zC2?Xe;}}UDGqXJ?bw|efPiQ4>j+J44I>-gche($CB~lxO>Y?PxlHZnO_h6yd-_t;k5Ow3ZB(55 zT#pB|${Ym_&n9-w?u>wMV{g4(Iu_qc@%ak%kzIY|UW3A-s{Y5GZmZJC%{!MeAyBQ! zRNC77!p?G)$hmp^8;RNC*r3@Sdz~NeSTEuf*p3+ffA=n_`{=S`0%XUB8upZP?nC{~ z60)Ny8%b`qPe+?57vwnJkUK4OKy%8muzNi6G^~-MRblTO?L1 zY~4Jwo29Uv_h3yYzCxYKjZfb5nYRfa>b|l8`hnThM>broa#~%9xv>oVGnM>D-{X+L z*6@WxlCM0Bxg}rW`{gK!`CEf>Fv`m~hf!XNl6i$LL0K+h&1>!R1b^R{o1*ypVvWBi zhw}XKoje}5a@O6A_6YimXndUgr$Roa4DC5coUCX@>Vs`I@hV2U_?Ys`jOY1va$NDD z&a?46&;Cxs3^fIhrE`>H*Py%#%7HL;C(-s7D8%w8w4v<_+ZgM`KER+`I0$k9NXGO>m*;k>O=6e?R&7KpKHq#h$)nc8g5012B#4Z3|>g#$?t?Tt6xu#!-`QV3suqfDWlWz_45rN0Y z_xM848}OUt-FCsdd}j;ujc9B7EZ3Ueir*KhHGP(AO`qjj(`TtQeRe-<`V6(EU!m6Y zh*;BqAlCG0_&y!aQy-`oJpTiscaX0y(RiLRVv6E-@&IK(0ncgtZz$fP4B{GprL(q! z&nT;`O6D$aw^vW1-|Um}#BX5WKPK**3c z@r;%E39j$O=f_v^%m(8N`oF#RxWFo)eQRuJx$PNkWxSQNjV`z6STTxEV&dV$9ak)cPurgR(?#M6>>u6S-(!{2-hkd;TokQ)VXv-_k8+$krV!*oKycJ zN9IvRqV7_ZmxQ!-IC@Q}FKwHZKI6QnUg;$wm!hHaDLyLq;CnT_gf_6sU47->Gg`kW z{}^vA^1>^;kMGO}NZqAI$xQN~AHQYr z4EYYa!m%2K#~xDh^RW7DyOL2=9>b`9U|g^6vO~$thTT$TMt0|Q7w0T;dpw_4*1>FO zh^6eI&<(^n+0LH@h{Ga$!wusY>jy&)L6#gI9&Qu4sws27e7dj9^(UH%Gc(wEZ;3kd zcI56(=sr9X#qcQGj%{_$Qa0P3q>{(b zkA5xW@k;Ee+Uz%;R(erfVry^=>f=Lfxo?6#1ieMd+eELteVp=E?VBib?}9GS06HwL zOo^B=#zSsM&*aU?kk#Xb zjGmvnI9OZ4_|G6^9p(x6wIW4bfHK>Z`zOj??j33z*&BndN7;L8qmZxqzUm+LIC843 zk3QCRK$nNaXqlTCQ$!vP(&S;Cl85^+&nCqnOYm{pc1Xz&XN;d!`yuE0=NirvF2%#iw7X02but-q(e->skh_s+iZ={48d^J?*VbnFq<7K8}Q)!3ZwIUnvV(-*zQ)&NyW>cBp zk4@MVe&YMl|7xMlo*;HbhO(o{i6=Q#En~LOHCpYHRN?)2? z#HPZtH}XGqjzeptoX~A5JZt-}9Yt&^3iFP#A*%B2Qx3egCT~-5M5){_7_>#$Ns-Y`YHC>b2|#{-;PfX?YMik z39P$ZVot)oA0M7|zNqAwJ|47J^NfmekvKqG@tohN;JR9Ve^sKwtG*}jow{RT>0_xKUd)YJjT5u7a8A|s!Eikw0EvmZPv%4W{u3D z>WoFCqtJ);|4OgCW!tIgl@IizSDwD6xL!GEOF%196Gf!}&D`>q8*XYX4GTELgck!HqmS&rsgejwj{)MsbceIB0nm zmo=4m6<+WiVTqksqI}W*jO*=Ft<18jCOiIMllU*vE5Ll{)XORvfBLX}Ht6TbJe`Jb zJtFfPJ2Z@U6rN9vRyfa$2Oz#PV*-wE?dcA5ChaLtG7nq3u!GTe1^?;8no-VmHh-pa zeXfRaA$a~?u}>Z;&UUaa90-So93*y`KML7h)tpX+x%ST!_Q5c8rkdDDkvofd_Q4-d zjKdtM5&lo~1$x=8Ax0qXi_lhKB+@+{$GbUB1LL=+jaXB`YM}`1kH94SL%zFq}f(~w3#$N?6mnz z#(^;|7Hu7fw(@<|u_5A}%oWI-HpFw`9%7J^F-CG_`c25>+worFUzU`$9r=v&D@6aM zThm_S9^zeI9S+GpctdxjiLY7z?l;|Gyesb?x4G9pZa3(=TjkQd{t@XP7Z&)xcouY! zm<+Vp;u z27T#WiC<>Oy=p}5WiL?A+^^`zgMtke1cD4&+N|B?!N0rkM7T{ zawlJ;_-_7I$xo1lHe{pp6;*3XK;;HvZrBBo4GY!U$T9lfv)bAye7%~m_B8eSn$kyf zlxKtO=n~A&L>e*{A8pB%8XE+@oBMa>eN53WIo4G0n^)*c^KySwcv=^Lo?p{0ijw(= z#-lvq!ih<*_IJPHoCjcS<#?rv@GE5${V4Y*T0dbN4{c4NhWm{-IcOFI3!N%WIAPG)cu_+h2Jrt2Gl zu_t^I(GR0jV$A6KBJvS^LFqG)Qa;~CsI6jb=;4Ys*R?6m9w`qO;( zE3#I9P}R2`4Qz+S9B-Qo=01HDCwL3%i6u6+$o)6syVI93Y~K5P{K&wgB__2U}c&vw_MWE*FrWP4_!45FNlvJK@l z^PFaT{hM*2Z-8TXrSx~a#HLCM@==b_|0I~OH!St?Qf4CUD zDv2lH(ESyi?wa4!QZ1&V#>vf(v5Kl3Yz^_0t>>Q`q2;3&n2OTxsrPrr6^$<2VvnxG z$Fs%Wvr5Jl8PM;Bh7O7SZz=bu>i%xr{{`C396`)u{nRR%>oAQv;!80`!a`k!`If3y zq=!R);+e`vPe5XWKHuPZEyn93*5T=I!k68n+45_ip(GKR6=rn$imfM>iz%EcTL=cHqLgkSmR<9dW# zH(haVcdn9gZa>#(^C4){2HCI=pJn)byk~Yn+>yu)sN{AH)<5DXaBT|_Kb(2nRnAMs z>@ctFaE$%jRWep6if2!gYheqqHud`%v-61>=Nan$;qeVN?IH<|ap<7Enm#$9xmoC) z<&BjI=&T2OubXl0)vj0LnmNXe;G8V=LE1&p=JI4&Lgeh@IkZlLj(?XlU|Z(7+D1A! z{)0TvKTEaGkG5SyIz$~htnWhy>d3!1zemJjtWk7u#`<%NHODxxSB|rrA5#7BL;Xqe z!;m8U5CKghph*NY`OlW`<_Cv{#3{+NNPaLFi-o!X>OO8MT=Pl%SEfM zqO>Z;FVhsQey#D#uZr-?z7~nKMt;f7`gVS)J74n4=zjR+i5AH(TQnL5cK!AIQt#rI zI*cnZ5$Z6mO)YtTDOI}TSl9gyu1pB`->2?3%!8n1m!Kti>)|A=5_Iz?|;E(AG~vNd`5dvq$SU1_ssfsKKuAQ$!Gh<_T{tCF3D#O zoj%@ka`cJ1##`r|vo!h)QuOIh{*iZv^+TV}T>aPAnvx>)xq|e;J64zVU2A;i!QSg; zvG(Mzx#svadhx6{37QQO`;isdGy56WVQO5P&Xc*?bs8?zXgIbA4V{=f+UO6gl>N9C zbUCK`i0{hFzdm%)uqJ0|GLYCbPCQuybW`d&UvFXCl8m=Vm&TF;Pnfw@^LadP6tuYj zdv+0%Zk~&MbYt2;KT2ck>}uvghc3q4^$lvRvH4EoX5)K}wZT3(vq!{^35-gWd$U4d zD_EJSVr(|razEc>2bC>|{>KB9{e6TQtKSRxB=>W_RkErn2d8qpgCG5=-g9DKZ6>?>AEj3mnSJ3*htRU3r=8P6vdFlR0HKg;Mb#Cg*%)>kb@AR1;9hs>7Am8oWEMi@`XS^U-o1Lg)pU7vW z>2^C9ZpRq@T?X`h;gg8u4QD)OYB`0!hxf9LKIYO$KxBEPbE@#;BY(+*s~M=|kzk??&;=v;*`Wldm!f2pBb-%lGn5g(O+_w(yR72 z`@3&P-IHTDx4l`8t24h%HNSs_dltIl$zN!e7%a~GUaaOf=Qihf{ocYk{z@_Z3UmF3 z3VYr?#~0{xT>SP>c1mc7{mu-DJzw3Mr+jX%idZXVmzej{4dWTkIiF=cjCuATX!s!W z%AK$1IPkmZh&e`kwAX53t_IMt%O3QtbnJ4`aZ_AqGg)G zMgk3|2w$yr8vjas^MBF!_jhke{@thX?;gd!dT#S;K`(J`9c&UfTC>%EJGmR_8#^8M zv}%UY(Rrbw^FIqZ%QbPIqO-o|{$Pc_ zyF>j~0RNQ}wp)4s6x!hMUaX6oh5Tg>CT%=QzLhUF+T@1-`6AJreGBg}IuCybUmQL; zzKA+}af9HCpH7o=)5+05z4USPYl${Db(>tZnw#r!&s{19fg`JusN;O;)aGp4NysYN z%xNzl>*E>eqax3nuyqHAs5!jOexBzVBChF%TmxuVgFOq++rRMU^TO@Z<}=?HCGINf z=ixrmy@s}P^L^;3?+P7tGv-+h>X{$fSM^YOc(T>@#2d4IV`X+NbQI>j`O=p0XHPk2(&JWii$dDtf@v>H7ZEdRf0y1x+*GKYNKLHE9ycL zh!pGsNr*_zT4_s_wp6L2qAn6OQd&`7L`vIzVG6QVZKZ`uB){vr&zarH2HSq0@ALfr zn9uH9+W}UG7i>T|YOUU>1cdXvt4J_m9+F!ft*q$`|Jc#u`IUTXs zsn=nj<(u#Aw)^aIq~~L8ucBRxF>*jdVS2|*gk{(!#v+6QqD zOx~h&(H$69+Cg$(HZ*3gE%$7jqhi|Fb?8PNra#x;f6`^#n-U!^=B)UMMkNMcVFAx7 zeGYwJ+l)}3@tfaee8>x_^J5&hg4hzvYjTg@EHdhPi8F!uz}SjLZDNesIFx=36KT`u zpPl4*O#)rw_H8Cz37$#vB=>9oNn%2QmIYtw!JaENAcby)nJ==KhIO6d2TwZ}cSQ^R z{Zmb6HzrK6dwBwTR5SRb}9v%A(G>E(8jHqjh*_=oFpDF(4vU=p9|0nzBC5QjdCXGX5<51C_cGw)H ze_=a@vK{0Dr45V4o|gHG=P22&?Te77{gTBFFR;KGI7i8<{MxRT@9^yKApH?Nk4m4P z5F3HZ_q?(Vh+|Hz#GKlWs~Tx7&-M4s*)z(v6;S8+&g#y*VQ*98Plz) z0_T6TH|?TdIm(++jlRP38Ks@pY5zQ+^xinv_RzP7G)G{zH3WN2wZGZMtt!k5DIHBd z_qV_-;VTDXeKKE0UxK}Q5cV@a%JrlC(r~+VB+K^&lYd8D_b{foxlGFZlblV_)SD=8 z({Y`a-6!u;&lG60cBRno=)Z!{vRz?f&@{ALwZ3+1F7~Opv!2||G2?iNt$Qq*ntShK zafvY<#?{-K9uwnP)nwKA+GSkb8&zz-2P?SEUT=JfRge6~{h>+d zh(K7y+@zg9%P=lj@X_CqcZ|CUYf8<*=@Q$6*c6}(f`dfIPYlyQY`9e#S!U6;`1vP# z(!_8r!aJpY)lSX>(yyiA@K11VKLuL&Y0$VYbN}F3&U$%#P4NIR2n8o^xYXMyUa)5q z>QH3Nlk#|G6017^+RF<%?33Q!9oR!?)4RbtwmDwJc|(1)*y+}$y#B^rUmy>4o<6)k zDyGJRINr;`%|FT0b-4v~DPmnvZ+_p6y0A{H2kT_$y3l636?O6b4|Qq%s=A=PKJ@+2 zKQt#Rh$-V&Z8r4xT>M^e!AFbmtr4zf!NV;@{>$ENPFDLCN&W0G%G3|}=OF(mP)=a*&qYbI&Kn2ywxArZ;sf+FQ=w zb=kRn4(G6+G{#rIKN{~(cf8NN(V*=N&fDX1eZ)Xlkap+qql}9g%YKWvVBp;g*YXU; ze$|2f>cb|l;F%FqafObhOh3!bP0Gj7j^9U2zp1qUZBly!Y3uQUPK%gHpPt^7q|L`$ zc((13vMsFlDJ(zog|Q~(7qL~_9R@U317!y?!;WIm}=aJ7}F>wnK0GHP~$nDp*Zvl8yn(ZsQ%S0x5wj(hxXq}*m> zoN|yN?914Dmy#B|VnI*3!LQCk?r%-tN3OtFjmDb!+b?=DF+r;r^oVL6H|GHI&+>k7bU9P^lMpUeG~aeLz-yY+q7fBFYR1M@yqkqhhJje6ycZlrv>8y z{w-L)TdXL~EO$j?!ZV6kCtJXKY_Z&oU+kTg@Zi3vAe?X&g%ihB%ua;L{qf%Nb*Yi) zQ%_|yF(BBK43&Xq>sf%#>Bhu=7^8t+v%CA{Ood*jOEei-Ni z?^_K%xH-;zd8|WeW5QJ)O^mFJO1(yon2q~Yi99XKp7#qCmyW#D)A&|UVj0z@{(v*| zU-G}*GKr;&vHEa+PudknxeZ$+#;TWXBR(72ncp=(!8zi=b7S=E#29ZhF=Wi_1aZ1< z?LIc%+r2S0rVHOGh$e3B8WZ;ya37_=x$;FJb{5BzHg&}PT;HhdU1^U-yv~b{iKaO2 zq`Q9OUzFg!@iOv^;2hC=#S6IilP^Hu)oMGj-ykib_Xq9`qklUg7Mcm#3BSv5b@9TQ zH}G4-XSk;0D#i6N(zoNP#QzptffpvkrmR-`MhAY&U+BMAaDH&F2y)!8M--pWdM`Cj1`2)q<<^g>ijwR~Qe` zkXY?u(XSo*IQ3BB+sR0N)OApGLpgbPw?}&wfkMJf;I{lmCU+ zLf<`uezR@M>-;M2`cIKYIcW_0#q>2;=eWkN>CeAU3o8Aw*Jw^|2=t`8!_7(Z@?2jP z5ynSvwKjG1q^BC+Pf=FpryUw-(`mS;z3!N?Sy{um8O+LPs*rUK1e2#~%+OI^?@4Fl zaDQLn(t=n2L~KU4Wn%c+I*5;nAEo8%e81s*CF5;7uP4n|ORF6+j=vHw$@cfsILx=t zR=8i3(SC?;G&%CSLUY`LD~#__F7TeVTlJdrFn{MIm+ap!_!aDfD>zrd-*T>Q0zFFE z3g`3Xvz5R7z#Q4>rAU8Oa4xr5v?KB9F``T^Fk9K1*kfX1{szvQ5Zi_SpIw0cTaS-# zd)988b4TPWzKB&8pO_?GV?i9eS@EotE3WX?*EwRcKlF*%X!eQ8ewUVamzg*G)G)h# z>ccqra^@@b)q_Qz93fspI(kGjQG|TPVe)y$Ml6+gF=Y&CjWhi6VDkpiTe|(x67UwD zYQvNC`%02wpTZjQ`Ad?nF$#mIz${7n9T-H1`&PMbzY$Y1NW%yI4((?f*?zY30=8YZ zRd`ukr=q=wD^JSOvSi{i2|g0$L4s{S-X_f3KkNU__}3DH8teIMY;z!D(Z57+8F4-? z((NCL_S4_wYrY%GaOHV@vr3R({7%C1|Asu?)A!_{&o$J(r~k<#`krMn4f7{mj`}wo zra##Cl(`vk^kba9CW}@7U@VBA$$4^t#`QGxJYj$3_R+2lYEHPwv+BO`JJ!g*wLZjY z3mKW^O@Ho~zcrY@K#fB6{f7u>IZxuhrkHO#Y3B9{(Z{O>aFXIzpqy=GYA{&Eks_s%_Chcb3kGac$!9-ax_kixBW+Av%?OT~#D<jU+x&^f5m#Z%Q4n=%wxOUFKqh+Ew|%d zb>uAN^T0T^w8I`cOJQ)?b)TWfeQi#?$K>FK5jT%xaB0_}KIc;r@xQ~~^nOQ~+jGh? zY`Z317SFo~)^A0Z!jwKkmzf*G!7Vbkg(5S2p`s@}ad1$4(!E$Klqno%7)#rWf~kDm z)4uQw!uQNwU+D89&~UkZ&i;1xHT!`B|carC?V5chWMhlxi7xtDurcY||j>BJ$ylpFWx^TKxgXACwE>ciOTp~KAK zGtN{tKh#eqQ2&CsiiKBc5?dpf_#NIK7+10I?m@lY=6Q#E@|gqh`=)J=fN@z8R(9?j z7vl|=!Lc!3J`DCUzS|v*>|(q~`os}0>8dE?cxLfS2j?*{!AjZ&W@exe=zX6quP%@-`UcC@jM`q!rh;&(7;lLBHD z2-fj+v|%5n;x*2(%8fb6=s)+T2NLVaxSo6cGm2hpw%E69<0I#7OpPS@rc?p zIp^kMuF2Vg-;KB$aE-yW>gE3)x1?0t)s4bD{L!Ze`uSVNA5n2jGBoiE{e4g6T)}*% z&u<0FAPtMT?&1DZN?!;aBjG4~gZDLp#}-ar>^+dC?dJ%yDOu`k5?^4-`ilIF?cIbr zG+BPL$r^=cNRyZi$ZL%bHd&<@BgSE1eHja(i!tEWpA-wfdQzXdjWTE>7*58|Q|tY8 ze~)1QUOv1hoy&iWa?-o#n=jK#4l}nMA=Sqk9zZZ-ceb5$ z=k%QOrBL%s;T)ccu?P0Pq4bQzlC{q~8%vg$%&cGiBPxat>5AGG+L79Heyim()!8>m z=dtUz?*$c4fH=sxb`H7m+-JA-q^IAS#igu@v}rr7HtTL}r{%QQx!Gag5Y&6&aN~cE z(Oz_{iqW1MpZ({$FLq;XvR+5$v~@dpILc1SA5nM|B2nOPWk`C%0?@ueL^{Rx{&^R zq(3HhgCFiDw$VGdr%vxp%{Njv^!nVMbfu2hLwdFWbBgh@*)OjmKc5jxu_#PCrn&^^ zlMNy2OmY8PJZHNp^Q8_pps^QO&aWKL_N#8S=1H-F7stgm zRbp*n{&Ef%d~-rAK70Ji z=4kav?Z%-&2dxf=fFObOPzg80p900`co5jX)aWp|{m~Ez`P~V;XL-Se75W4!@m0y)iMG-^V;UCU%3e zUl&>0BFQse>*YtGE@s0~$)OLUuNvl9&UjMZAXtvPImik)TK9as;kecNeA9!J^^$N1M_ z{EJ=%?}4_hUfY+C<$i9MHeSNwj0}c+L6PQVm&H4UHxOBj=DnQ!Ye8UvRrt2zKTDg_e%wE|$oNtA>I!bL-0>}zC$L3ir-smZ;K>3D_OL9@jbA^c@JVdGmDt8V zb+n&0$KL=y6Rer2@^@x^OpNguV!cEKPcv=!FvjMrl*mTqd|oUv_X5!FVyBAs73u#4 z`0vyIi}1fx|1b2~ z!LP)7)AOo{{#t#`&-Q-jC;ekG=VyrLXS>i8AHq~cI~=s0&c_qficVV%V6gmbp*}I@c>Z!P z|JzIzXU<;BGhZB+p&6Yt8FA~neQKVQXQk|pcBjJ^lRm)Qqt8%yk=jGS!x9_909{i> zEbu7DVV;Zw+s3%)Pnoo@8*a@2tyK^@F7EaZhzsUukQf_Aq3Fl_9!aAwcl+SUsR6Xn zGT+Xl%zM1ZA0`urPSWVdG!?YgM5NtM-=8zGXW2~74~d!cw$*+k_7-Agngwxtk38Uz zy~{fFDY+zdP3ula`-~&WvlW`*f}{`p9KKyR4&V1P1_QqD*55aAPhB2uT^BWTd>@zb zT?RUBG5VS79eJ(6gO9{M&{|gDUtBi$)Hg~B{EcO_6A>&7^VoRapc3*1gS&95OjosQV}e+VUj!8`1{q zH1ezy(YMcGFDTG`^a9@7<)8&Rk!L67%}&f4#?K3(ElV|TyB_bYapWCAJ6Y6=a)78K z{TQ9TRb(rZmAxIl{{+gOFY=YiiG^B!z&f-^`IA$N@%)GM@zLo&!hd4N1+@>sd8o@G zjU88|vEwRds@N9fm$~m(;QnEavs13+i>J?2XV?)w!{FTC^qQjSBAEXNu&yYxnToV9 zE+4KHuN?;4BB<7ctOp(2gV-|HEb2*rJkrMCRdzVv(mqqfO!P#f?_EOME$sWF4P)5T1~f#U$|s%_&bg^SKA0xn%!$;YHmtY!U&Vo2FS@T~ z^u0u1GmfeeTa3QI8BjVa!C0y$c;!%Wr`Yi`=1v3oYVgiAxStkOzI+X@D_I+PfB~U9 z&_w^oH)OAvfvWFFzN84}Le8TG!VilT4sQ*!aIe&L3oV4R0 zzP+#~T`)F_>m>GZGIy|tV;-0IR@#BFZJ4MDrVr?*OYws z<<}1B*qw@An%1P~-9W4@L+@5${*X>;)%5OEw8^H6sOxdtvT{wYHGp2@JhF91xpMN( zE@j(}dj9kS>_g%Mi9P>veA{mh&+xQdhnGL7+Vgvd%`49)+HYTiXEEKcb?8H$gQH(p zeY!@Ug-)KMK1Y_t_@)01x8z&s?`?bkJ8sEw5B8O>bideN#xo=5`(^*b_a`n?K16bE zD0)VGOlvT1mBte5rq>VksoSTAsawwvRO~>zZaZJ>kHteigBUzR%uQ0C%Qa>Y&+5Dg zXiw}#tlucw*!mSc>ejJ-jR@$!=$n=&^rlr2YPPCy1#l5>Bu~rnj$f$kBuM8K#?)Ry z{-x4rwk{xsmX0?(cCWn;v{-wH*+pXWO}m0J-Uy~PRZv^a^O~YjXBBhSN5cXzE%}O)VL}WGj&&) zvi%E@?;xL^vF~WNUVrtFic1qy}(c$;0QjQ^Yg68JTp0NM>O8;cn$6Vu}>;L4?gA?yDtnnW4-4pShE5}7s z&qpKTi!uZJ;w_>)79msJ@oNn!*V^(^TOaQS$~%cwaixRGmOO<{o#dNll>o2ph?Yf@+ zk)9912;AL{`E8cL7 zV@BuqE`0;Fu8;9kLkp}QVhn>hHUqRd;(6mUOOl>I)a9y)mh8ee|ET-i5c|1pmL12B z>y&e1?DrK`sNFYqzXZ`Q+rOe8+!_xx^dI_y{Xh&qyB}5vPjgM;-#9m-IzIG$x=*HR zyLqR4v%r6tx$Wo^#*nq+$+B-QL7&u^ed$CSd-Ny#4(jJM;?Lu(diq1%Cr;Z0_U$J# z6!y=TU-tG6sx=JuiQOL|^v9St`pW@KZBIZP&VtZl%hp*RZTF4IzL|u+nN&i(k{N6j zfB!s`bA+*a&k@GTJ@#+D(TZ#S9{ViiJbGeGPnvpru2I`WGeyRU`wYj4a!PxgI7S>d#v1Lj|3nv9 zJJ%f&{DbpQ*DmeH`Q`Hm(*a$NK`6(MdVKcyL6IHt`9JY|lzz_mLOwj-gXdfH`OkS< z|Jfz6nHZl2TrF=LCLUvGlJKYGOSxXQJLDlhwB=>G-@7BTl9VH?cueU-D_jw4;b2q+^|7kJ~X2^U-6{m%EO#f|uPVUzjZRUznu5va8@~%J1f3KJUfz)Mn%_ zn&$WzH! z1dMru_Ew^;v=3PJ${~dbqiGSwA(y%$Z@Iy|w@H1E5uB1}s&Z_TRY44PvAfFJ8mKkZ znsA?UQL@;)C`p@W#sht+a`29p0O_UM;PeazMHi2Ye;iN9!>sD z(>XlnwroF1_OEH0{%XbAC|IA>)pfn0^mMs+)J}Sg`&LBDFi4|*^ztF$tq)4SMpF^9 zNo?X$FCSi}+VMTD57&F?3@7dNVRkQFJE>FYLo^NilE#mHYk}g?Z5w9pg<^N&K_8c3 z{Qj!Wk=s$XNSO7kOHE=NBpow+JD!ujVtneV@M3xXsJ1b%&l{iLwtrJRJ@+^6SrWq> z|KHH|Z}$1aGlysKidbJ7`v*3S_J3LKqMULmvsH6{Ny2^dMSb=L$}s02OP^cHwhfPg-UgJ@pyM2|JnC-}Mfn zJy(I2)4VcY>D&Ed7h6H%?}r%QK=}wI$M-^(i%5aNcjpU=d_I z&Ts7!+>K}o?cNjdE5E2g8n=M|-@!L&19IMXm0ZNo@q30ySuN70z1rrZ;=9V1fV|XL z{3m8D&lVfYWen0-m#uI9w6@>mxAMd>qUzBwUgpEvt3ej9PsAZ;oxj(-H> zAAPg09L8@H)Aqg$SDve?vBXui-eZ_y+=uggc;+`7OZ;XwEr7Hz(!!3kFwz1@3pmpJ zIWdxn#ZP@ZZH}qG{^tWKPVz?D1im#PR{z#l`>xpb2Pa^TRD>jcY+|bM-IQQsMO$e* zR9GZFE8iuKeBnxm-t1C`&&rK2DIM)M9d=l5ymPeh`PWcyD%ho?sk2+yDKXs?Hoq~f z#+2Aqw3}LLV=C^f~+la*UL z^&_G;#oYgzIg$SMCHO7#%KZ&x8+AGcbrJbxs4q^u zbNme-aY9Q|^xbjeSK$dAh5L25KMMEjN(|o|vBjV)Zgy|~_%?4(SMp1HZp7F0*SC0Y zv1Ji+lK-C9lWxh8hm_~^3vCqGUxIO}?PYjocx+n{-7kXC>O)@IuY-;%Fq<*H#I14m zUAtA=+us&f=>O@;XU?wsJ}3R}tb0(^eFN$q&RJ7O_NzN_OB+#_CdFt98aTR_0f0ta7@d z-|aQ#dt0rs>bG;oz@>ZwIk)e^7}Vs<>)d@!u&IsOQ~>kYp1UvP^rvkjdDL_zXSDls z1o|`dcK_Irw4q__lkVWcT|95amLQ;PYpPKviB}Wpz+AAl>;8s-Y73}szEJ=81Mvag@0VwFgIF^Rv{X4O?F zTWivm!BL&oaYGcJMSNHK0aY7=@~|IzXrr=1>~OA6RYwQq6(Wtc>@SKhkV?Zhv_H`G zspS&KVG!~8Qe!ZW3XCxp_tK1Qr|>D+d9;1KvhmE*bBOcDw(lJ9s*30F8s<EG5WACI^24LeqlS9FUVnf2!~qtB!7ertd8 zXZo9`eZ@Duj&Bwn=9`=NP0;+0MWV7HciO6 zge6)ySo@L@U+Qe_M>bgdkdfwZKaa6BqAA*qHHc1TQi^^)w7FGy;(PQyM)y7UvIP10rj^})X5PF+=zmTB)oz8ff;#`>aeikL}^;rVBz zpP=90mh(ROs6l)`y1?3ke5Yw!tBo3WV<0Z>&$PRutrho3^Ce|_MZ2r%*egeLPl#>D z@A9|*ySz?pT>AJpwps^&t88KZ{aa-Vv;Vh;m)EVlPs!`-y?Xph4%-rkoiAe-b%&Ph z60A$^H>krOTYAz3vu(OVVOd`#{BOIpPxI&8KYeD@Gv92=GyFV{XY2F$`qV{Sf4-&G z#<7&IV=p&dYQ2NbHO%I+a|MHses^zLq)E7*NQ<8JWpCQ!Q#Qk8V)NQ=9e)^qx*{!m z6Rf^yG(|gk%7&;bl|2XJ zb;kSu10KU>ooA3f_cQn*68oxI;iF=#*6OjMf5-(GE5<6}HyZIi$Kh3F>`D3TDWAYoTIjC_enI=|UH7m3>C#}URUW`Rz`1wE3y0KL zU>^%(3`0f}=0}_8P`LIeClh%Y>LG3aqxM7e+wm8!mUtyjJdDqt{c(Z6SjD(lhj!q8 z&oqrcFp4sTd%*_>7hASH_}Lzc8f&TI1 zV*B3d%UjciwbaJ=M|&j(2KxV2;tm=23zqdDk@wtBy;=s#dzwSmlU%LVFmcgs{@9KD z$0&@U6tNfCHf67>%65k~W1qw2p96Y#sMv8b*53dn10rr1?YRoIjc4Hzpf3i1r}fLT zYf{H+IntjTviBV}ZZ76X<-Imml&bG`#!JAnijlbR+{E+E4*CA?@SO7O5qNeIp1tjO z_7@!w%8O^m;@KY^&tAo|?b@$+_`M3Z(|+~>ef@Y|Gk(my3YXq~Mi~-qBq%=`e6N;Y z>Syb<4>5IY1MrL(Wjw1JG`=3~C=I03jfDZjtsk-h*d9bj+uXznc(S@sg4kHDNCKabJTgifbS4qZ`yb ztH*EfP9;m4wxK`2yE52mk>4FMSL@VuycL{duA^wb=ig#c-s*}CO}b;z5_e#zV0inC z5}YH^lA=Hpc*~MxAV#0HrbGbgVV&-$9f&{bA}$J_ah<#ITcGDE_e0aC_+7zCLO=Wp z?c|vncf=C*YX7aDHz?VZ-3R1_yU+*WJNve4RSy2p*R&3A>m0T3(60|=77vmArCt1P zI430roPUw*H~v7An{>KY$>@eTv5f4x8-X_AJ&7|B(0+`>k9`RB9Dsh@r^nZh2l%}P z<%?48Xcv9A?rl(V6}GE<;{<8jcG6uK%Uu7#)j4hZx^CN(Y#Vi8jA<6I+ZOq%whfiG zVU9Z6=5zQL+G#@ranHYV+IKPPi*(ZUecCs!L9NBy_I(=$oS%Zmj2ChJ@1^q<&;exZFfeUuE&ThIXfHtoe`IP%dJ zhBg}X5wmgd_I*e7iTKF*7~gqLe85zV!4Zh2PME6dOUzsHqnou&8Qba#&33y(vxg3t z7Ion&MqU@LV*1RI#wq(AXn106>b{<~v9F%H)V47UW^D|IVE(KQcPg7aO>2Hl@FhO5 zi0k7v8%v1iBMP3$^|jWXEW zWDW7rCh)en!oU-sMzN`SNXMnN^~0ns?YPXupIPx8%HLJJKIGY;@mqfK9pyv7_HsX9 zd%Z7@i!IyO|6Gk6CdTzJJ?FbakzK!U?y<2=3K{R(FgNAlDhrs6p4Uy!(65;j^F*d? z#so7!wP~~UHMG}m6KMsui|zF2wq4@DJaW>1_kTy(7TWt+IqJP;V_$hxwT{=S{8|?8 zs?srAs~K+@;}&I|0}AuPqv=xGoSEll=ie_}S)EV$gPmd@#Ikc`W}SlwTENtkz{#L1Zz02PP>KnZBX3%@d0@dd&He?%3uw*ZiZC z&+0n4&8X`UyytQqExJ0)xuJpZ(a9Hu7P&g*^+!G5#&hBujtNgpj`OWcxqR~zn8RWN z;qlMLzR`uVZK}k)t@H1Y@ywm0wjXFc;~j(dejmJDWqi0*kNOU&j3$VK$k?&;Q(zOg=UL>TTx<|AlzamvhBKcz^V;P_nKwRM+koDbLfIv*SQp>Lp4wGLjG4d0ihhE$ zpHilm`#rmy$50OADJ(ozpFt7O&W4T~tjGTA7zfI9Y8j)&ujbb8F#pU*s}<>1`o{6- zzwxL~o&Q6O!=KSlx5c@S)F8bUZ90Q-!F^E=vGS)BbXv7>`sPJbjUyww8;j9K<7$pA z`Q<{N!nzt(3!1FPe^IisvQzBco^~1Yf+#C7D4M$QM+eiyc=UHuhBDkLN0~(n=f^qD z*WlTs^c9QTm1G=lj`hF}%!T~xu-DC>?Wv5;I<7l9i|wn64YKX!3xnvNHAjh@Cb2QU z)B3?Z-Zc1_z3!r;DI=75SztyzS1}g%iJjIe>wJmlGe17`>$8%peeWge zxVCAR9GRG;F2il!g?lxhYV_P2&+kPRSVv)O>p0K#GebW+jbo4JNAP)EJwL50nqVGR zPM!fGd)#6%?GcQp_*dh5%$wOKk+0{=-n5EE9!$|@u~L^+6jSq!dF?s(cjOH-hPvK| zJ~*V}-DLNmrB?JeY7g3UD7y#!{*c;(N{__(F`&~LioWVTl;!KN#tILVfu=tJ7oHd5 z`LFTZADf@z+Nd*k*nUKXE=Rp6yD4z2t#?pA7uNJxJyzuy^DQWQ?eU$~#yrprWopd- z@ojIq+%e|A!?$P;M!##jY-hR8>vD%vmx6L?P)-xdjDOpkw%b75e)_I9(ON@ zCd4s*cakvxC?~JOJDVNv{E>4r)-Jf{$Ha<~m3Ur>_dhOGvdV7e)#nDznY??^mQ8r( zJ6`$X`H=T@T(h5_rt6%kul-!t`2@YL2EM_w zES$9a!Bot zu}PVq`9A64nowgVu@{W&x9x9PJ?dNRry}uX&3@DFr=5=PIrpjD@4c_f;`(G++^354 z_-EEX@;vt?*1j9GYq47E`=@zT9YEtuX8aO->&Y*(d(RER%RQRh^FY>5y$k$Lmkazq z-hB~kVahtJw_@7i%})lgx36@mvg3HpvsA4KWxF%pH%RuBldx7lMt;ic!pOgMnzCgn zN_6V8b~E02GIQRNPp>i6yMDYIj0??@7>{>Z4&^J*gF^bb~TQuK5w@?Us5zU5N( zf~@09y4{0O|7F@vXBX}NkbW21ze4L&D6jj~G_@Z*i1di|Z70uUpKU+GbNZ_ATw|GY zk&iOGHJU$Vo*(Nnh(E+U-~Cd_Ysf#f<5{WZ&31gLa3Cooj3B+!L5qLQI?l*#V-;Qe^uF=R-{(B{(*mCZKSQGxw zK-%*8Tgw^#A35QCKv}rlL7XzYh9_{baV1WenB6 zUp9ST`m;`5wqt%AZ~~NZZ?jHkxyV~#OiXetu9I{$Fj53_f8>?AaOBD zQtn`LiQE1iSd#MLm%8TOU|!M{d<$j%Z#?3@gNjF_9ebtz4&~A=@jzN*H5KmL2c zznS zTCMAebz`DOBHi_3Kx@gOadJ?0+Ys6C*ImYx= z^6yu*%Dzuqi3-YM!Kad^uM2Ip1_w4<`@c~5GxvyIo8ue%$~o?mJn_`Y8WX0%r{?$r zdXB3&T+!6Aluu&JM)}&U5eCK=V>TwzZjA>0P@|0y{Y%BH%q|t@1+g=@WF} zx4%>HG3Y;Pe9N1DT0dKfXDjiHdj2o&_NG@Ly~Bau{?EI;+9z^r#t)T#I-lOHV(V~S z^O@kB;XieN^?v22L)%CT`5x5o+cH_|5B`Gmb9K5cHzS_dhe&VKXWQ3n4dW9a$dFG9IWn66ay%S=UIMb@|{{a5)yclQMeK^~mKmG-%z%-3&RoANhApH}O4xX5_F{NX{dK_ceAq0TTSu z;!|}jgnQ})h{s~vIy>dJPCDq;u%dqki`-NBN)!=C-63~p zjBy*E%~d#5{J;yc_9-vhGTGJ~Y6Lf>-JAX^-a8t!^$3Y!d#lVfVsmgG8l$oG|J2*NgLT~Q!1JSA`{TR3>31FUXg&Il zbY%7K`|3-4w8g%_wsmQ>#D*2^I74`eImz;{!ZIn6e)=FAe=Hjtd6+5wimH!}cJvX} z;mfw(!-=U*8lLp@`nwcP8Fd7zZ`Px4c3WJlb^dLtZyNgd&201ybsxhVePi3Hv2QGm z7xx$Gn>K5Q#@!gBZDXkySbmq%(fYLA5cN!*Nc)|m&sJhSHK5;G|B&ss492ow>D5U; zI(0gobJloVuniwsc_{4zjpL0xnxx;oJTp7wnG^422fkflbXaqLsq5Rxw0mXR2H|%pXM8K8H$Ab>InpY!P*?OW z;f2YE9F7N}y%Ob=?;q$De=Xuc+WGm+nctQxG5=f0ztfH{%JYA!!YrZgn?AFDpQ`K| z$e(g<|81(m7WX-D680eNea9S_j_x$ouMn_PAGtUH{I3`b>hevGJ=V6fN;iL3D8~Qao zr=N_^xF+Sr9R3({f;h%9$BFMr%)x)^^JlR@PmL>?_EpHwbjoVoS~ir?iQxH!14<@m>r8Urzu$Wcs>@-88<=7i@%+bKRR_sv_WOw6OebjmdBkc^0>Dxryj@7H^Pyx zpPmQLOLd){azW?wB1fD1JlAdZ{+IWA_V#csY4b8MKkwJJty73MXe?5AgQc?) zA?~x<=Ak~;fi>G`brW;Y-)L3E8m$K0PittjM)($4Q~Zp%d{v6^mR-K6r})^YYl^?I z3|C%+zS919s-E~$=93wkJB0n3>-Lgom3@3Q>)|6FE$gvR;n9MQ=AL0=(awmqSx!7! zsfS^#@TAz5cNH!DF@9Td9!%dfA+{XjsNjq#wP&9+ZhA$^m{Q^djVY{wj1 zwoS#CIE#34Xm_c(1as_ti7_$7zg_@=Kz_gOP4H91nj>BEgNL#{A{Am|yVWB9P(VEV zhPlZ-;(ILiX$tE_#|Wa0k&Ssse)$WHUtnVt6R$Y5>JVkd36U8DCMHQ^iOc}c{_?Nh z%y&=K^ctVJ{Q7J_o^Ah9w%k0M&UVlZQ;kQHUw(&i8kMYmkE!I?U*6#re3|M%v$cGi z!X5ZK$lZWzwtW0+txc&Jm8I*CNZ@S{kupHi|>H4yJ2}7?ohnlI!$}n ze)UDWYGTVV&t^V=IkrjLtZ~la+P5i7Z)f9^3I20oCPtYNEiqR7xZH^$HAv>2isez6 z!;?|>XWIk)RO+PiF}+;Jqv~{|Z$Vu{?@fr!#I@|b!`H?8|3Y16e??tp=F}yo>$3B` zoLEqd!4jm8nZmOm-M>onhF?$~;8Q-Pf6!_8pGV%|a~;#iE+-P~OQV+vAICWH#1hyH z{%VroG7mAk@`%kvd!d1}0n}+jah2ebmmy1lXRpgf&Zdd*mEsiztgvRo1)%bbq zkf$AarfFT;tG6rs=X#CLPPx$)_jsL*)_3Z5m z&x5usTvObaes;U!@j0)ybN|7-n)<%d!O^~cAO3H|6@FjY+}Gf@71wfHYv1q7FEj2= zg~m>!Z9Op;Xv0&e?dyrB;3xg1eUf=DmQpT@x`Ngzv}Gf-tsky!P>ud}bV#O4E*!zSs1vpdU17-7#jf1unSrz!)Cu3N?Co8d7@(>?`Jt$*24(WQ zitQriBl44{u znusx>JCq&{V)8B)6gV|J!XI%I_6Tfc! zo`GNbf{X<}HAKq{Y3ErL7-Z#RzYgG+eoy(t-PQG(CN$dz5({31RVAB8eX^L*P21h=yKI7c>O-v3j-`h=n;76$M5oSs9a@iX@GQ1DZ#{p>X zG^0uMilti42HIp;9sOBoJ0`pgs#-tz|{dt*Pn0J>J}R?sIu>g|2zQK9!#n}0}* z75YBlTcudnrC8T@O!20h9eHMJUl_*qVT`?-rYQbkfbw_A^xtsJJ5Ix1PrA0s9Ay0p z`G}iB+jR0iS58s>C(E^s25HdCkXA42a5(m4g{d6)HqI6waiozZ`{x3Mk&OKGu{uw` z!*aR)s6VJgTD61L<$gt;hiAjsDGK*R;@fDw73tAakbbeID_9oy{}ZMtd_1nVqA@4S znj5`Vt+|<-)j2R9zYUw!8eECrxL$unTl((*ALsZ|oS|tQ+P7Ruo2rn)0JophCyM-s z?f*gB`M?j9{k81>j<_&v3w=OVVLfp^aeS5E#Wl2{PtrD3#cxq%W6l>&(Rx0<%YI4U zrsyj2h2u5;>|c?_I{eAuC-k8{H!JkH`KQ~IO?;`=&rpWE{Wc|IWWQCfRp%ysFW6sG z(JwP_Rp#{1h^so4K0$w{Qv2u?U_R!5sbU@-sr3wpzOQV5%Ma5JtFZ2EKNQ=q#)Wy* zw-0Jl#{{Z}YQMj%kB$De(Bpx4DmR_FYHA?bBn!^d{ZM?9ckO%5Rf>%6?>jcH>&MCF|dk8+(Z~ z|B%>btJm*NdX4&&5n60<4%PWKiA>pJT$P|M(;b+V^agH=uVoCG>e&*n$vd7jb1*e( zykNtN%*BqG`^Be9-b9{wh{iH7jRkvb3{?6dFI#yiwQ{w&Ai0B`lh3=*hin`%(JzjPRlL+j_sE6`?)&h zy*FYVCv$6V@=iUs=!-sJYdi(RC5?mE&D-o6>dJK52E>!?~{9Ic*!g6?@Ox{@60*_PEp6#!m$=!(xlE=Ies?xKBM5>*!y(6uCI&kWQ(=R?8^8v4aWY&Z%-577<>=om>0ZNe{Yg}kFk4+F~Hb6 z#J76$RuxOp$rrooqaN-<@1alw!MM=^x&$9lEF73}qe?+HGqpK?G&**XZGumrvOh#9!e3-s}tJ2*# z@n|@A?!Pt5BeNfx^t_2|{pvl#i7#p7#OURmiaD@6ITr?NOaZ~E#vJ(Zvxm}^IhZ6+I5O=?JHw29lA@G#+&Dv_6>cOk+!NmsALHF zjy z*|#b?key$uZ{iHx;4;3K^7*&t;VKLGXM0}vyNCMx-I;UuNL^QAOML54Z(7L-vh}Rh zbOY&xKi{J2IbPdmFs|T-w|Fx;({*}Jquz1zElQ>^M$4?;#Xag^rF4IGtnJHRS8P*! zbSZvow)N*@4ve?`2V3>{Pf8K%da=tG7N6QFI{r<*ImrXs9?$ErLwL;Lqh>^@2bhy& zpZWTXjmk@$_SW)Ft93N4f==tHTNJJn?Lu~bPuUppd>?9lDEa-4cemm@b>YXY5ZZpwU=4K-x|F~)Jl-n)(Tw0~)i{O28%^SG7wQ|zt&VDk4GLtgyNUAAoJ z9qVmJ9O*9P+2o&-+;mi@wKKody7w04Q*Ia?RyWc%>pC6bs1tqZqj(lQ5f|Q>a*K|g zq@VwqG8sIN;CUF&>u*u~v^@7K9-zuU$a))f8mikP_(fXgL;s-~yjz2JFTcgc*qD_1 zEq%0TOO11=Qf&T)3f7~a{&)U45%0+N+XDVUZ8$%da()KH-V;33w4uqAU>^-l4Rk5l zNI@v-xg6zH`i84KuHuwGG^eCDG+<~TI5hdLmZ5OIQ1|FVJ?YCf&i@9!H7nr`&B3~F zO!WFaNuU26%WgaEkzIldA(%mlpI~jd9rsV_`*-#IQrr&;M(N`&-(XrB(zve_2j8KN zLh?m)nteYX_pH154T<@kvTdMji?Ii)GIFXFvZJzxyY6_FG&(waa)AW$>JS zt5n&GtZ>9iZ@)3>>7@Tk=y7XPnUZgws^`M*WUSh)HAtVR(Js23&h_a$g0{kc*R~hnU|8MjIROuJ~d4KD185*?yL`6KVzR z_8QK3KKl{qX}7;Q@!GKyCEqnV&m!cZOvQ&if%)i9^4b{_6F#g>zRS5#`lYh#==JA| zZ3@e_ zA*}(=XB^jQU597%JwI8mX-_EX`Wp8WAfYeL%BkoK)Z*}d^;^456Xh38Z7 zybRBubnKm!XFKu62ZxkA+kVb?hokVk1iQDMi z{_o!2{h$Od&NF&{^LcM??@`7hy~w*=`54hR$p3-z8={|4c$<FFPZ&N--qwr1o8Lh_s%b`2e=P4cUra#vIb|>85!pVE+ykMm2Fp!FVoUKz7m79pT{Q0HxfD~ z2mOZ1=`)M-u@GbH#r<2_9>moCAb+aw8z_N#Y?d^M}cR!N$G#-f3&?q zwfSa88|m9p>u{om2U;2PG#fDq?#$$VCVoz)V&Ds^2m>i6K@R4t? zPtjj1j59A#jDC+jnhg62la(m19O>0abB!rX24aQDdd!*eNFNt^D;0cdkmYY^O43$l zAb6x2Z!WrQWH}0bEgZ#>cvp?J@eO5kpxW!l->>swD{gW3#yTNA` zneC$U=lY~Bg_yJVVh-oqw&&=VL8<+shjVFtrTy$Ir02eWE#9xi9Hh@0vD(aH`g~zd zqCLcgAB{O%jpy`ts={+Wo>O#4p2tzcE76EAiir^bts}$5__kzLs+j^Pe~r^?v%Ny(a!?Bd})t zSTppE9ff`zQ%rma<-$Y_V^d+JnQOySfWAr7W&k+5H=rdINs`4YE4^giFki^@$ zTF2Y*wPpN=*x$>wOf3r9>f?W@z5aHMTRDFyV^1ibqJsTOPjee(#b#5I*f`W}?YLjb zW9}e5%~{Z57`s>37C1&U{-xi@=#QqXA@Mv?c!zwfz<5gyh<+Qyobi@f8V7A1$rdKiMw7<<7VJcmd=iZLp z8?i4>Empd-DWH3dnKA4*yc#19Q`xQC)!|sjJb8zjp}Uty(7=xk%zW%)JJY4o|w){PM;Es>d2|GQW4T93~0 z>+x#8o?gw1Z_$1|dmVl~ltKO)_4vJ(ll!$#&olK3GjFEegV?{Mr@8O2Z@ahkx9PF_ zkM>g{YyD@o&x&$vuWUWYzJ|^WR_VzaQ}3PolyA#F9etVaz%=@l^eyTdLtSI2>m#V^ zUI#|#vHzhD<2ZKb~#0Lv#6NVK2Q( zaF@6TF>P&*&y&QEVmzOE<@4n7HN^#682MM3>nzeEv~eRQ_C0#sh`HXqM>-9PlZT8{p*<>5Ws z`|27#<{YB0iyr?ow2$?%VlTbj(lXFuiBB4hmXu1Y?RK$`IgN9T?`izaugSZ$!f!co z+e@Qeg4a%alF^-vL%v<~cJ!MkR^?vWN!u8;zx;85?K@0+f)8%+YTZHhd6nMJXj}en z<~is=KhGnzF5kI9`77IfL;KFI8?yEU?3>Vss!vS(25|X4oX`hLcvnu}n7VKLhv}OV z-7jnp`)2pOefws(?iz$&DYEC}E{t8jYsBG((@SgE!j9`fx1I#}&>iL+slu_lgNBXD1cw8{G z7d?3>EwS1ok4mfp!90jyy&Fp{#&)#j09D$4T6`W+myb3aNHb4+Cw=&?OL?R7l7AN) zq$S#Z-6-^GJ9>|!O%u_k2cD$=o_dz&ct*U6d!AG=9%JIa*J|5e4lD6v?)xuH(uSf$ z^kvz1v~TAy+T4eX#r?j?_=Hc4&+YJZg`K@S=SL+kl=kq{w=4tsY)8>fJ zPBb;tQ9sZMg?4NJ;te0T-kXj%@#V_A#y@O}$>tE=(-Sw)HaaHcf(l_%zRP@aX{BFXv7S{+o-}7OAJ>kyp z*)cZNyjbAU{-j5BT7Ums&H0g(_e5K*)kq_~J7iz>47cB79;Y8;x4$V#zJNU2jt0{I zTmwsG4Q%7R_%{Yi#MUx|H4ut=J`o>Bj>%H-X}n|kA%#b;?{CFDbyf5;EHU2~JEjua z1ZscA)ty;?#s;I=y4i&}p08->KfZIo#^e=$#+#kKjM%#2H)dzA;*VgL(1~WS_H+UdNoLPNVx@{hzxX&tv-e-wfmBcOB2))z8=H=jhCrwXP%K z(fRm%6`r$gTzfvV+hRPJL5}Au^mD#jjOTe0XD|Ew>-)3M`M#8;bwBh0Wu7G{Lt<)Z zU5x$i!hfkXZMWA>|DjH2nW7ui=^lOyeON^KreGSn;~vNJhjd-Vro!wN|3jv8oS0{} zexLt~9OL{m-3DUj<&JOXepPo@PTg;19rbwIW6fuG>9QJf%3_}RdJp6K%zvY~Vq5!t>+x^Dv%MM@D_qCOkU^>C+DJTpMm3=l{a9%jwgCGlB9WlbCuwg%R^4QkSKH^yHa6BJIyAy3I%ld3~JS$-gP3rudY-7V$~_ZiQP!Ip7fg4vV;BgI&fm;?D(oqkJId($SsPuD6wc>m0mK zp9WWWZn94NS=+?Nl{Ckj_mBq3`c`4gT|cCbinbnty*4SeRA|jfjKc=nSjFHSV(zf` zKQ4Q!diO=V=PdhI_b}#5n{}gai`YW^L-We{a@M!YeiOkvawh40+svx4~qUj)2AW5Ru*>)~LtLsKvM*jaM+TtpYN|__^`x3v+F))?Q?jtT`XZ0z|$NinSmzdHx zUq)dcQu}q2)it2gx&rfx_fv7d8uypso_-`#aIg2~!l_vvrcn4p(2`Ypt`syx6G4fy z5>4G`b}777f0uO={(lSU_S`y2&%ZmUGt+d{(LR-z@7?6rM=0FY531&rQy}HtUym zw5;8w))6SZQ97w&Jpu)sxdqHkDGhal{y|D{iO=< zegVq<`!(J)=W&f%w}}{Nq zy@~gx9#VBJMS2KnF{Cx?G}3rMq`ks=>a>qR0|k)w0_%h{`eqZWgLY28LE31fjmCf4 zLH!cp3Tk!lQ zO&pzIl4Z?v1FaD zKps=uRJD^{<{0^ue&bR+`v7UA1xIMQ^g@=2x%=E9Me{{>DSQage-ZN_F(FoiYZtE4 zKjR+PXSf1?0o{iyj;k&{A=ZV9SQ5KHGnOOm0BAe^pYSfO23*y6XDZUy@WTJKcs?KL zYjJJIbpTfn${2wwf~z8-WK%83*NSTe?x*0_msIjtCmzITrymQ}?oArEq0W3y#cJ^> z`EEYix}WwuXs7qJaj~M*gsh*>hgq3!MbP#se;_q26tSurB9@AiMnB#MDBCZrcIctL z;fURK|Ko~hqmPRn3&)Ljd~&8uPJKq4RJd7|9&t{ zEXIwFw*Hlvl~~($JV(Yp`@>}A*L7mC!lKL9aq!;O_aFOuM8{?ObiaC2f1mCd+7I-V z$x5HcZ`29DqU4glovdQx(I)bjH<3oRV?VYFUa5(9S0YcIQJ0|IGW9eoaQ`OD@_n#d z@c(d6`TsxlcyKIAU(5Pl)8Es^m9()WO^1%KBVfk@YR$yC4iR65^rgnfu%A)iM4GJV zaph-i`}^22v4dKMN?9rGCLWrs;yO|m|G-UI+@CR~!uunyH+{0gqZp-qFF4P>gEZD5 z`#TST(Q8adl{H z*7a*=UAWG$7EPg*VQd{e%mv;WZGpk5jVoW$Z9;By3<7>TXR)3 zCOl&sQHE8&nvx-|0|ujy`ytPl+2z%i8Ou&9ZT;;%@W@@==aAs_4J6+6UhXlr>6^$MG6l}{dHboLJINxS^pmCb>#CE4v$F);sj zg!-NO*+J2BaXe}@{xEGMUawX07TNb)$CX;&{8Fv5E2h8s0N?iA)SslU2V zqJJ0vSmDL0B8x4F1#Dc~Cw}*({NJE39&Nh6DmKWv_KE%J4wS*zR6=XuygozAAv;8N zbZx4tA$lD1PF}V@&F@tZ57Ahx=o{k3W1sxf0|$jCjA;CWs?cI7^BYo!of0?BFy8_1 zL%cikr5i0beFj4BSQT-`$N(P@e@EUIOaWrC`8(vEcJ>kM8@rY$+o6hv;d!+E=?FE; zJgdDiivzsHRQf2|zf7uC`|ydVx7`n~YB>;T55{GS)*|QTD5Mfx>oTLjPYXQ zQBm*2emD=$*tVZ)oV5ykpKVZccB$B&i7$41fprG*62Fo8iNBpsJvR1y@n1t(C+o7P z$IAC@+g+j4T@7=S$LVLE={d9l^QQvyWMgoG%$>NNJ70AU9B%(4p6Jy}4!?iq*Q))~ z-b>aTX8+_qSsuuq&2EibdY&$`PyF9WefP=k*Rt_{o%TShO@USV5<4?j)=oLREpMlso&NBYD>rDI3bvW&TkR4>dlYDz!L}!=(*E%52l{@$ zIZ4q7w2^tWJ}U#IeLS&BNeir0ty8k$oI{M6`?QcH1t0!H%{y@Ke z`{|^<pau^7=yJaw-jebHO`EhK(qKH-vIv57v#F1Ea!*MXvdi! zO&w@wf2+M~Q|Ag(#pg0~tmkUbU2ef>YPC*pSNletxv5WI?7CX50lP2i4pT1a z+~uU(=+hzPw`I!zT26l$y6=biwphdT7?5u9=@{|sNAc&PO@*d=SwEgdm$V zS#v{Q8ig1Uq;p@qTG<)eSQ<8s_M5AfeG%I-746{uz&0JOJzMM;p39x`N+xA_L+J-H|5}m)X=`MIAW2nce5X25!vf$ zBku_idpTmAjyi2OI|WMuXMGv%?6bC^wTy*PSm*H9xa0xluTe+886E$|3tEMK8uZto z%_8GA#u!rszphiFscQT(o@14-HRHQcrQN zc4*qb_SN{>w-4I3p@shvy5c>ttD?P?U!N%_qMy2TKYiU1zhXZ6O6JSG{nu5s<6QCT zHFbR(?UTTFwD&)ghu|CkbgZjouV>Ge|5R=f%KODSWqbDXb^Xt*16TDeca@`DC)Roq z<7qUgcp64@iL5))v&2QI4llK8`t4&K62pCfy^jUkWq+^I`?*caGM>f=e~YXGzaIC^ zu>&H1K2~^|Xi9uHm#BG7KaD(1zfu-{>isHyMz?>i_{OqM-;}y6wU+rm$i&WI+ziIg z81IOkL4Kx+aWk+Er-hp=Th>w8rf`1G(rc&yyF`X<7R15x;3W`uz#KgYz{-*>e}tx-@PJWm&Cwwo-p;^C8H-h0Mp&XJhjANKt?OW!Vc#Lcj2l9pm+JKlso zd@-hUmRD2P7;3UgsV^e-qu9VTN$f|#{qb#9^NupB;9^p}#feA8iER_iq&*YhQ2gGq!!yw0315F(;w2$-P{ZB;Z-!6H+xK3kk>O9=H{21?l2fdl{ zY}qLH`Oz~c$e2>@x#{(BefJp3AH;4fg7z%77D+!T`fq<7_v}xvg*@n5T{6skvy509qqr~qlCsV3O1y2#R{kM&^O5ggn(v;kZ9wUV z911EK%QD&1<|VIX9U8KAn4)>^Yl5^Rxi*1$vw?P@SL2@j{j`?njM6e2+J;UHD!U-c zY$&(9G^qBZPaJcm=XE7><$NZs;^em}gU#$m4mlgKCsiDuxtQmz)_3mcNec#VIBTDA zsm35@{JJW?!t4}$VDo+JDXnvrGZOn0?R_a%cN-6sjC9E5T)y|Q2Cqu()A*+a!S|(X z#=D#5>#%-0GMe})W2<8ib1`0hFfZAFv&0Y^t0?H07Hg{6f^l!L25I^GK#fWNjUh_b z&h4ir&lW94Z9CS zhJ)uFeid(L_m#@#{?<>FET7{)L(5&_S7voYm^X#A;|Xb*Eafd>*MdDCAP;SL$7>8F zj{o~eV?1eB?0w6Lc}jir@2*r>^iIBy{NS5Nrz~$5=0Gjxz^K@`nAe&R>)54qE)DqI zgKHycvRygyWmiP(asP39PrBY0P7W~^?vefuL|w$>n(9+L5NKN$u99hfC5QFIqAq_d zTH*~fCmMuL!aF0PB{(+l}xAigZJ4!{+e}f!6Cx>PmMX~YVCV6#UbZ&W#nfOYlxOJU5PqZ zHZ;>GTd)B?1rHDkwOI9`tluU2ulS|j-r;=y!qv(r#Cet)S1O&4-H$V!^{~hHf{5h_ zDZf7QZeuydf?pUdsW-!AZv8)m|HNE2GU@8SN{=R%^!8@sG&#;`7j5XnkzM2;hN0|O zsBc_{uiN;gPqpn<_D9!?|I9Uu)c)jl*qd=Y1rrkdqU|I8eSDW#9OeGa7Hxsc>2pfj zgZ9*v-(c*B1Fh25r<7bJnzGM&r|xF;6^iFKj0K?EmMTm3rR% z0jqDn1{`>HE=`}XfAb_hSGz?X^JSMhKga97bB^7@D-^Ds{hf|jf8LCK3*E*n!Rj}) zPx!hiJ?VnkoobE{V=JI^4As%aR)fZ87JXtvbTh_eJ#`MGeFA>;E6N#<{w1ce_&qnM zSY2Knv(O)Ev#k3LW-wKkyLi^OSyAeZu_t=WTjFlxeqtV7Rlo4i4IC?$k9o2gd5%5xeBjMWp4psODIS1H<}My)Uu7=S(GknJrV5b77{O zw={Nt74p)4H?&CE@A4UaVDcO8iqqa>I_4jJmj;@Rar!c?5lr!R@sWS}Y|vFW=P93< zqGc~bG4_lnY|HzI?M?Y#(G`k+v*#@Bb|}voaE0>I;n_{U>QaplYFwdk={biAF1|cw z9_a1mTv~~_G#~Rdj%ymOl{s@a>eNAKo#WT_zI4)*zPOjvfjZY4=Sy`U+-JRcjrQG) zlQnW7WgN8pH;R|W+R-2-49pkZaKUeGd4O!2*Yh%OZYMt6^W9?z~*GP^Y zWw_X|Zprx5dBe({w$$k0ekAAHKW%8$W>zQ;Y?I=vaU03z~rj7|Z#C+e5Iaf%W4tEr1TqK$( z5TClog?@R1^~W0aHH4FD-7EPqX@+eJm3&ETO)mi7240(El5f-|_GQLH#pJX7(%!*4 zCeq4ZJ&^W`-mX^GE%UQZjD^E`(I<~Fadt{P9I@%zp`~TtN8e8@bQen#+WL0 z%n;HFdFE!TK*zA5jGa2WImO=dZGPCfCOUHF6J^!Yf~~U8lD4i6Ew-kP?oCss8oG^i zlH$3ECFeEgfai`#dr=1u>Go0J@pzB((Zf2A*7t7QdnERPy2sov_ZY-5oRvKC&V&8V ziTulzFS^}NpE>81gTE$@Cf%Gp2h%>im(myA<~MGQsJ(Wtwq+D-Z2JG!c!h5;3zQz;w(Z%Z z@Bf+KBXK!vHEyU^?}hKwsCb1x0iS$C%$+2kXlg#u)VxBhM%fP#AE8LcEPMrNTkJh? z-MHA4zfO>T>%ksag#UrR_T5KZ#=R+#?T0k(R9MbLPl=XKl4jYyQ1RM6n^qB=jV8-o z5fxjC=4%@h`3=npvjJ<)e8Q??EZ=h|i>7?*36Vci9w}JQ*f;z+v3+u7B=gXQ&mCj# zM?1Ry+Fx$FYN$>5%cbW#g>!z4v~k<`CD%7Kbe*F<3|oaBm*M z7(m!_=wrQsIJRil3d$S(N-uMz#uq(Jw?Fz6_KAgQby{@($m=RoQ9# z!q`)}x5nD6Cf_!}wGPu4!Bl*MHwvCWaGslY6&RD%o{BTWjI~Bs0;Ut5vR^8cde_2`7M+1!KwpZ&Ea z7JBUD*zyI+Plt298gsq^*O=Yd^ZweGH#D)Y1p=UpsIx}AD+uhDH;qTYA!wt894@WsvO| zJ4(tSIp2nAIpishJ(hX~`ub9~qwHr|t%%ld+L*qy)foCCrI)DcV}to!725#&_g;}F z(I=o=$_VK)MoWA|^{vs`7LVl~dQ90>5R;hoZ>S~hkhL*j%xc=-eh1@{bYS8fukGRZ zot+}{+hQ%(@}Q{JA>2Aq#V6ogXMFD_JLVG7r#bev7_opf?g8}^wRrxDW3ML`!j(v) z{)KhClywYc>qs3gWrCMXR9MCQp1s#oCKNzAao#zHredyi?3oa2#e8YNwF}n>+&AE= z!nJyLj@;ua%7mJe-^RE$S_TEq>dygPhxm zFnMX}z_cwvUdEq{WUB_jPI_BcucrTV_jJ&h>pDv7f+Cy1eGB63QV8%*GPREDoBUp_Etb$1in4=bCSqg^i&izZN}& z9UDu_0KU-kw_L|hDA)6sSnt0<`#yBEZx!0NXHS3G$yyx`AQkG%7v;9;kD+XvglBTJ zsnFbJjROzJdiet-Dh_~A!nhO+rjDUH@-l^EZ?75Bo+B<(@!{?M-p(`ZBenl1u z!^E01cO=NSeGBjBYrN?Ok=aC3RsIdudFF|;mOVglpy{Bj%&+|1t zJ<2I5@@*(Pk9uh7tE;8o7=tlPU8G}vg^eZFs0HfWeqQNTQblMF$FcQl=UKMIii}l0 zJc}pTIMAxiKh^X<m_5VXxIahVqfb02KkqL(e?->P z2N?{#7H!XPIof=Q!^flg>i#|+^y8o&`a4w#scG!b;8o?Di%sxqZENz}B@8)@TiQMt;H)J3vk-kb^%k4fY0qM{qn|FZb)KQcedNIBG;FcX zjc!r)o8|z)j_PU1M|pESDrUr_lpFtD+BU$`Ft>#AoW`Dm!v7v6d(M%mad;oQ5uIO=DN$T#b(GpFN@0!eeg_)ZWTPmdg>U!F{;KGWoSJIp24Q8?3h_?f*mX|vu=r4cc8D<(Dn**&ZFb$UXL{THeM<7?CR82 zT35I5CdF?%`?D~zN%}6(FfmzV&P|Rt2U&%|Ey^zN+i#=>g5M^N@l^2WTratJ!Ie4m zNFn-WoZp>fnPFpC${jf=?h@bgqs2GIRWwX+fD3Scf{eeqcj2D+iGF?W!#(BVtP5qa ztOxh8B9Q@cpPVbcl;gq2$IMQVFHlEA9{#Ivkx!Z6l{gIf8W;J^jr-GupyOyaNjww# z*{4YFlD#a;uXF!9sAJsPSaQ9Ws&Vw{SfT;#8}o0ZlQvXqbDPkM+zZJQ`@9SG{QXkK zCT+7KdJfcU+eRBtmvf;4bD;xsVKuHPd;8MHYTbsDU&DCzg!-;oi52Fce{Fm3BH!Y& z0$*d9(2S0}LD1Lxqx&;h@6NFdh;7juseraE@+0rZUy;|R^ZIn&rnOlglOpknXtNH? zJCqLN_h0xWeYg+5pB=`A_7|5bKSJ9!Mg0FRRW`FW%}0Ks^HL>)wD-8`Hx!M10R6Rn zZ~wU4ltX)Q#-013vithxi^^`(*|!ac;rBAS4Za@|xksv0>nk`8uh2)ULD_~Fpi8hP z2+r)t7l}!@MdWmpnSmeJkSk-p=hD9XXf4_>RQ^sG zj1x_()@qrD*fD@^Ic=ehZ>H`~rmiAFoQvy}{?{?bJ2WQnFJ3qx?WxoD5CuB^81;d6 z{5j$k0C_-$zu0ldro>e2IqL6?h{h;rSYSOIA;w=&u=nZX}=;Hf4B|R;z8EqP1xg5Hg2rKa^;(*B33W^G_UFaj18=t16lr z54xPbNQ{3S)_fmj>juVcIqkLZy#rS|aF$Hv^Ge!j|0T-a^9am`ON=<<74NOobQ9%s zpI)N)9+t8D%D#Rz)G_Y9MA;Fx>-j;w3FpWZJuN;#uVj1ea?ULE7m zqUldoF*ZMT%bf?) zEN?#ORLb)~v;T%PAKyDNBUkOp@Vm{KeL=}Bd=9zAV~?t_->Lmuj4S)fEf~v(*b}`M zD;X$dMFrg|R^u4{I$|}R8k?A;y;Fg1nsgdxm_&fX4)n-$Y=TS9r z$H@0;3{C1fNyjxro2)=XlXc0H`_l)=3nD-Blrujr+K7{e<2yd&t3p1(UDg<5Z8!Av z!&jwe?upOS8^BQdnDHMv^hF-tr*jjecqYdSEQaX~N3 zyQ(E#D*CxHv9GxM24x?@7@~~BM;YLIt4XJwCGBLMZzGQ@P)m&A>v=A+Jo;?BjeN3C zS~ancDOdQ}$+0QFI5}42z$S6}ShB1uP*$-ijK1S2JHu+<6DY; z!Xe+YWeG|@(T26xCN`7yzI5&#Sa+0}9me*IU5w_4GIxxSaXs?}c4_D#cn zyzC9-50Zc9G{>VHAR z+N9SFX{r_}*Hcs@>IdRB~Q7@l=o5gtJF40qD;{b|e(8b;odKZ&a~= z3vy!ry3CR!XpTOyfB%y%;6b!;+hKG859GAH8*SfJJt5}1xIe~0cU0LIQ4aJ|w9k8M zUz^T4!7a$jvbU_X9w6MN&xbmRku@J@LWQ=+lk?Nxf%VC;zBTUgDI8_; z(2w1IFg=iGXe2t8m~Gs9c}5)1Jql;9$D9@Sn0UvyE`c$b=k`%YuIvT*{*!p0`S~1Y z^jTiB8q=ZM)t8-TrxM-b6t zOS^k7#xSa5g7ws7X?5yc8?^jVcR~?dH?RnOFJscO35RAc9Fta$VVS}H0Dhj zX>9Xr8vB4W*ibLm3U($SyQBtdAH0>8D8Nq1mZIo>P`gAp4r1&(u|99#BZ#Zv)_)m4=3Y^zpzm$NuhAz^mcRE{e2g=sWJyr17}MJEvr2)`ICD7Fur}{d)_evxPP*01Z~A<<jQm=5Jv+>DM0OpX(_G}AlaXJ4q~+J#hjoA%RoDS5n0$%&kJU4Cto{i8o;b*c%`XSMay4^Ew< zWERA6v~@KfPVBF%@p&+J&+N25xKPdgOR)~e>2`v?Ej++js>dqK!9QH6aJIZgIcdof z>J-6WlzBuJTMn8yT7vzvtU>k!r4w5!@o#5|ZO+k$4yFUhH&n;5rEc+5b0RTntxcNG zzMXPo-(tbDK${b{7{)U^!(IN^?jqFp)YuJZEAD->lkOPOe2o$>nqxs3@f+H%j{Vl9 z`-uHU9)WeBe)K`zMbvp+u4Wd+tr}oS7Qx_ z(Qn^FnKtGU_SF)`GdV3faVTXIl?E2kB_&v=)JAKO(=8v%sZJ#f3An9XA zY^DKNvsgbT7x+Kiou}J&#c>L&cAwa8f4G}vo`(KCmHiuAqHN!c`V`mysS-a(e0K|r z!pkgQe3>-_JRkVjmrq0gP@nEI%ad+3rq(=d`*W&qV)8Wo?kMEz)O#R(t2b&t>go%5 zwk@^J(()=|@|-h~vDdSFF=I{iT7vd*mm5@Pea=A zdd(9@u3qomqxJX7wEr4qY9VcxKN8Qler}X=a{F%DzKyt0os&t;zj5#8zJ4UqXX|}~ z{)#^A8{9wQ=TC@DIX`=THl4408C&pd4D#?iU3q^0J-x??85Yu*Vc_+M&qp8L3EEcR z%#3gB1L9Y0%Vuqx-3OZ0e5=mU^&hWw{kCsxcf*{dz3*J6_ljfcl;1HXTT1y6L=(^X z7AF|jm$J4HexEZJi;j#Kx)Qq_^8h^3IkIp08dIc;-TocBi?vLw82wK>m?L#;>jLao z_Wre_e!s$*MSV7FojGIw8nhF|dU*8$C9n60@7bghx5mq&o+d7P%cK7`&$n~8#7iOe6!_F8o%eG+m;PC77(>B4 zaxMkdE1y`>^eYGdXDq^U`qt65K87)=P_zMMo9^Pqj6WRZLzHv+eGB$bZnSdVp>)Mz zu&bOnBzX>hD*Md5_5x+kW1pGzsOR!@u3kj({;bEN*Y@<0pK>1he4EN}<#~LwN_u=Q zx6c>DeJn4lTM|s*etH!0ac)g}60hyPYc(%Q`IF|~zI|%loo|0L|+F3wHzo_`J~96&?cXO?SO?slZ_)??q>YZ%EOl9A1xi`l|n~ z$D0{YavQteP3!ynAg#7B3>#W^Edzfl^1iV0HF^f$jzlLWgLl%_caT-1;~-5zKW(_> zU`C(yBbPC3nGbxdu~1~HKl)tx4E_amUIyBrJfC=~i>%V4I>lb81Lyp2e|4~Mk4E*`OKG%Jq<*Vf`6;BTQgNx^DB!G7{c0wwY@uM8(ibOg8_A-vy(Z+SD zKk-bwVCil@AA2;Y6NAnh3=vesrj^8$Sf5^Ne zeO!k5c|5MXPHXcx>Y9wb%Kg^uSbIgfPWN)NwDl9xCYOASu5Cov31r;-G8e{6VfImw%%He{G7|oZ^YiTob6&;?D;-L`=IBx=e?F} zdtOI-I4@J*T+UiK56JtTfHh{*acfy;%;}>!j(A^T48}73Js)#z zMoFhN<2Z#$|80!RT!{rY+$uE}O5BOFDbK^VF3@o!+VuB`3rl%D*97gwe(;Zj;`_)x zam#nsWxjJCZ4>bwAHFjJ-{yeT?@tasqd05Vxdl2t!2amWNJmMbkh!^9% z@3MZ3tqa=4ZTt9yqp6|P31f{FU~NpC5KUc#d}~mCzOG9V&nD{S$Twi`<68L``{$XY z&rttcbo*{Z`^cj$KTLmJi~5X5ea53c^{CHC)aPpEjoEG9n8{m%yd#iz1oBoO?~%xR zDeHuC2k3Gc<7vbhA`452-Bcj@)Zx~y5ASUPox5oy_tI$MW6-*8lo!YQF2Rx^#xK?f zb->sQy}kvO$Hz489XQkQe=XiA!vDP3R>7*Lo^JsDbB`>gP7wR02k)-J{^-U3l}KNK z|9Nq>moAU1y>r+3-ZW!|OMKf)DO2nadbUExA=-)OM;I^dS%y9_1IthreRJrS^OE+< zd0hN*7`vlK{I4@SR-sR)(U79?jc_M zm%U5Y#Ad4qeY7IReVDZNPQl$`+l|KqYV--%HZL3Ec1Y-Z6scrSn5?j5w$)C|5r=hQ{ zUU5*_>J2t&o3}pYH@(R)=BaC$H%S{k%GnCS;bb7-71`Hbv_01jZg{Tj%Kw4(9k?EJ z?(uPDn^z_=czGTw+r2XS9jh3uVyjmsSjwihn_-&m+roDL<-gd@(H@d^|EHg?eDU+N z->Gc}cGCIEe(n=(+iKhXb6iPVk38Qi*vijpdds$-qwO5WwWw=cj4|mC;97fej_sW0 zcdkJHhJ&_TP|1mk``OO5AI5gB&0*8lYF#voHf^oe1+xxGe3@~xlueth6Qlf^^!UE> z6g_U!jO5WiJx|%R*)-#bE+tnUaY>X~Gb&-zgM;m}m8N2&d>ylZA#D4d5 z2cGtcVn@|CFZ<)%SxU~~s)~BXn@xE*D_vM_!)%O@JawM34ym0zy|e?7IEw>uza96~ z#VphDP}!Fq=(nfNQ!-2T!{e7^^((~ao2hNDI?hveHIHc9tEBdQv-JWIJbz!8(c&nB ze0D(lnatH?+@s5Q&oO?~3p|47FF3|;491Up1hM;T#w*<8*vI{Cv*`DU@k`OKfNR{Q zNodnf{)*=k?W|}YA~cF$#r`3tQvrCTBJfE+pF=#1tnGV&__r%sB!g2Q+a~+z2#Hy) zcrBJuq-mWi&r|ricKt{Ht-sB^;KpFCO~YCG^h#y3Kn#V+8mqtPs?C^dlj$GgA-#FT z*v;ra!DI2{X;~I{Ne}tnUX`ze_x>}odYeZaycy$Nd84WiTu($vckMl(Z6+F5I&CKA zSoe@dBAsr|!PzqhH1!;d=XF6SysLHH{&Z<@u0@=Ld~M%wLp?@glyTqxMU^-G1C6`Q zxkfIKx@fZs{EG!wntpeD*M3GU zL%}w2#Jo0iygJH7@0g=(s78XXu;1Z&7(pB||7Iz3uh_dUwmi7EaW^f&-P|lR1@^RO z#t<9K@tpJYeRFd{$IyJ){(hIyS=Qz2EW5hOJDlr*b)o#GdQJw*@EJqvNUPa)ja$t9 zqrtyObg&np?QA3U)3k*R>sUkQRq6PU*hAURLhqojpC%q7V{hqr)Mp}JfzD^+iE$j3 zQRm`Q@u8>(KMDDkXgdndhvTc1oR@Q8)F;?eG3HZoZO1jfOUYSU@P9e3f=~L!`mymy z^3BZ>+m9F_#)=;o@O<={oq6a3Pni)fF&I--J=-(>msj?gQ%#@~XjhYootZ;Jbp+bQ z29Nt4>6`hu_X>tK+UF;R-K}v&W7TTREmh6{hb@WIhUTMlvo=6nGu*d#ovY+x`_Koh zUjy11(rs`3q(6q|=-IaXtHYY6F-fXI5i1x~dW!qCZ;!`;+i9Q4whtk34-fqNU^+fl z*$uECdxM4Iw|14@+iksH4C{k_DJPF){6BZnOHQJ-i~epL3J5s-3o=_k)?QJOMaZN8z)pm}=dc5&mh1*FwJE-l;>(1qx?68_O=JAzmM>N}xQf&u( z1@f(O%qz~R23*Fc;CtRz7@xZ^zc}C4e4^sBaL$eSv_GvdVp6BV+w)+h&c#Nx3;42DOfHqkHo__^+ z{$cEEe3QO6yJj(#OI8;4(d_-1IJTg>3uofJ2E5mR_lnqGD3|zxls`;aL|x__YbW0E znvYxa!>SzWP7BQ2;t}$8T6VxTR7DqAgB_b?_qX0GcLd#PhxSigpmq|DzF*|9rp z%#V*7zAm-Ky(ux!H!^PE5?ttV%0ee4MvhkNcjO4Q?(@wZyFI>HiG1IN-9z}_KRYo5 z-;}n88?D#1U6kn)y=3D48xN*`!?8pgc46-B!rcAEIcf|arX5hMUF_Ps@r*PM&l9o# z$C~U!KF+l}iRb3;kTn-YzQ>Wy`F4lHj)=PH#Yn%4-@-U|1m=h@&7&7(?dqqR+9$SQ zfz@)3vKwZeupV%Kopc|TM8`6fIYkE`QT70>2yHeR`Bn;Yl9*Vt@5PJB*%zIhm9*9go8 zy|y@JL}z7eT%G>!0h|Rm8@hu{NrlY@UMNVN+_fp;DZ{Pwr5jeI*O0_n#kZcqcZLYg zfTAs?8Q&`@5IKRi_rktI+HN$lxrj;hkg^Rs-l6Mup&UQT`J31^@NABzo*t>Nc|-nr z*3DC0M<+#yqReHxKP>O47%#-kfJ$b>N`b9v6v!>f>VDN1eyhXAv9hxTN5f zno$qlA8Ol=)N30S%K2%h^qZ{*(;GE?I^d$d7$}SbL)}i^ISLOey#1iqaUQ_975)A2 zIJcGPzna6~+}7pb+}0lk=Qi~J0O!`o`F?pYM~92=oJ@KQYdma}Bn!2Tza3L1H^zzK zh;d^7&y77JI&8{Of{|T4SE9YBcaZq6Hufv(O57sBeq|hT>ZZVVk><+Naj#u*g~gV~ zafws6ig`mhJ+YJmwjLrYudj}ET758M_cf=7fu?JvIj+D2C-*@K8{C= zi5*UTII&~<`BMfWyLfhWqdmb;*s2MIEoUsc%1~31b9%~ol&NhISsMF|X{Vi+jZ3$> zSMhfz>9qfZ2m8w_vv{yI4m{YP0}r;wfd?DZc(6}6blLWpxCEyvLjEH0;KvG!dZ9xv zpQ}HuLjU}Gh0>q??4d*b^ru7oo3!2a)e47FV_lW%GpO58n8Y)$R66{>t~fA!2<@$f z_q{qn?5oeUp0uBhb8uGD6H)sO>rGnWZYk%w6!)Bg4Ok;NSf$K+3-VM`?yY0K<<9c} z>UuWzVd9Y*{;c|;?%Qwd&erf}rRr=>xv^k!J zv!@FGjWA`6Eh1|a9^ZUl<`ws*a^F0eZ^vS63h-R8Q1PGf_QDM%f`=z-vmu&VEjSP= z|B=WuK)1Di<{{Z1&(JuRUh4J9Uz)QmmidwPQCqI}zqc;P%E2gKc)QY@9@Nk`28W?> zS`CfU+NR%q(edtDQ^gjg&CLsy$|johtw%6=uS<-;7)5nFn_uDiv$~9*Im)1I*v~6f zoMev06&N>;!5_8U;3nNKe6QnzzBbl1`rAt?z0wz-pdTn_WxP4kym`LOyXiwkz5ip# zLz_Cr?CGH_Ij-Vv_}(6uId>Uz<8ZMyoc7f(Uy-$Mslpys9b9aUT%r6>h4(NoN*b60 zwAWX-mCe@kB@SHYKRWiJP}?rb1=+UcQf@SbwQpfBPX8zO+r| zk6&c?pwEOa&*H~U;l5?APfZa&xGaV&zccR&kx@}Tml#9YKxj^K{)6=Eyhd>Bh<6t< zmRNHilo)2Iyb$v#T)e*?>P5cEsWBS&^Z@b_YmxCqxQ3m0v(u25w$!=&svSdDV%dNu zp>3U8Vr)h-@^+u5L#7!Iln9QB@ql0)**1022QxC23@^(#xtD^U5_?HfL|ZT?8} z9XMObm-*gjfh_&#)tLI9ovm!mNh1;y;^VUwjrcb`4>|Yzn1h^uRe$dvS7C%cgDF!K zA2Xhpw{*&RN!uKrnIc;cYTFvxB;oRbzA2w|D9w0Lg3}5bew0K0`gMsFqwsriOzy=z z1)bS!alRHA%}L_Xows&>x*X{vkcMB-am~s3NIx6t-9}52wyW+dw5(O|CzUT5_`Drc zwXUxe^!X7#S9U3umU$YY1H*otiL;9NrR}Wp9sbAx(eG#5W4A9EJ|wgp&v*8r*E=cW z1J)<5n8voH>`v%sVh;sXU%GvpY5SGI&>AfGMvM3G%qSGvb|>XXw2LgEjWnL`_4s%0 zrtLzZVEgb~3?{H%=2hyLs9S$_c&yx^XfuB)hr1PHQeY~Yg?0F|mVerHchc=HoSohN z$9K^lh36X2!ljq1ScdjK(bTX**~*|@bHAs~ZW~jzai%)!h_kv<%ehywj%F|^xS>3Y zBzE6Is|tITdsH-G$CJzlKWF0XngPC(IIE+1z9CNo(xye{$oXFYUVaQQjj=ZnFGci( zA?4rAxJTk&PW}>ONt!Mn{Gu1_XIrMC9c4Uo0&0J;F_u}!6+ckCF!m-lu`9Uu6lgro z&qaoGjnJAQW2t3hnex4*KT!JubyVa%Cw|$RR=mQZuf(>WLO)3SpF+$>C%%17%vkbD zA8CBE`Pkd`>+`9?9AriD9iBO)`POK^h`)`?#%8TFm5nm_&5ys~O>fY7b~*A;PE)S= z&D1xPJwGu!mnTk+Rbqcwg}q_>-~aD0I!E9e{|Te>IULx=8!jW)hw{ssp7d7NrbP6J zXog3~ArD?}Ojn#_tCB-6oCG82OJllJ8w>V>Fhk_!%0T(f&Q$H(vdUZ~P}L$QS>I z?>J>@w!Zo&HCl({z@GH#vypsAp2PQVepLHt8P}((!i#BJFwAJ+*$KYhs4F>DaIcnN zKVO1ASfX*SZi^4}sd@X@waT^)`^!j{!8z;~9S`zGX2%CckQdKK8^%2P4f5QiTr+wt z{RZjZz2q#fx#ajl@%fv37B21cH^<5o|8j+sS`+Q-PiFg){p$ONY&~BI-YHuJ`s(&) z_Y1xs-|y0L8TvewTz61>=GZ>Am2J1%`6l)R>Ni`=orG9zb2W2Mjb?;$Ghp z>t212dRuPs1DtEUr|A@DY~BnuE$Vb0#-u{9R~U2We&SLV9wj#a_sc%Cg4jGd{?F0> zqaWROzMsWmwtWdn-^>6nXWP%ZQNCNt?ZM9$?o#%@l9&9g9dm=W!hW=M>siWP!fz^{ z8sZw*KJK(b`2AVRzm4bROzbK2Yb*c9gludu$9(kIm|^7GaK7}=2ZT1#Iq?Ubm=A{d zNn9iG!i5EHZ7swQCjb8fd0Mu``b*Mxt-u75@cQRzBtl z=L_da`Wih?d@bU)w)+};o`ANcUmxZQbGxpv5bFN5pDLhf5v^m{Ys7y#d;CHt+JFS$~_V^bF?h! zmh?HvX4=r^_@52ZeDpzMAS$jVpsqPtv#2$mbUr&5Szpt`BeqR~CB<=TA zmE-qSndA3$+F|^@Y=5fbb-98!iFpS4e=mKh1cyAT{Had;3V$lnwA7IhSgxzmvZ_%iN92Q8EDC6)&S$C1lH5bNwiOVvosb0%flGYBOW`;IN>wpXZDn%-+qLC zTcvGEPDA;&Ki0d*+pXt^;gq2%`6SLk)+z28Ea%4JjNHph+BdFjZpCI5_w+FcXuDiH zUec(C52cGRZ;XDjo~&=j(22rFCd9tUH(UIFxNb|uw<9XP9i_fl8Lm9V=W`quiGF+2 zfAjA^pL{_d8^5+!)BZ)AlPJH8-=Gf%%eQ?vn8tg`x#+`T-&59gNbY0up6$a?Ao|qB z)-Rp0kQ_24m(4ea72iyodeX;RP%qQ$5L-pl<5q038vh*r>y*D-X9T65u3FgzgW{AwWkZd|FA*CXfjJBUXxG7Qk3U@rGxU& zFEijTO?oLGE-FoV!n4Ju(2f5-JTsA}Al#_x)if*NwCh&>Mzh4mKj82;GK!VIQRE>d zH@e&~UY<5KYo~LywgL2T9m^VT&)Ch``&MF5Fja)MU_TYC+ywdn=d|Z{xF039kAjs{ z*pBoQln-Z$=Q;aumBeX`ScTfBM(n;F_UEH=>TCPfOhJ9gFC_|tsUi3lzhZpz=g2>CFn9~(U(WjAKloP9Q~W=K@kv!&Ki7F#TAY6V?h3Ei;Ltu{ ziY}ABnS+tGNYNUCv&wh>QI&m{_QRE0F7@{_6>cEUn9ETk-~R)f(?w?<-sW`vng7}5wCT*O%_+ynX>-ak>3F-p&1vpF{F@1kmDd-qc5pwN z)3$y#rxDEu-}K!>!)bq6|6L`oxBdNS7fC(U4QHyDbgUoiwBqe-jCfnV=)@?Z{4gWe z*YSy1&$$zNGInrAXo=8n9+9)PTOa@AfXGz$;+N;#o}Vb3AFp8fOiIwUpRzxvd~ZDW zXOsG(#j-zpwA}yO_|6Ik&N=IJLk@o7p_zScR==R^LgEZ+oH~22aO@MbL&w@mIrj+e z8Q0HLw6)6-kCtVX`aY1o`$+Mz=xYx<_(l;h(N0-=MMm?05H6Rb~aaMas6VEzg z5@}b_4c6&rmkI7gG&MxW0v<*Ac7ymNij8Om_Oc4(J@}N8C-S*p%eDUXl)|jS9#mMW z)BgUHlE-$TQq72_SgdxTzVgMUJO-8ZmKt7Vjj5FeegZ@Wz zq9ydJrq42!YiHrQ*Q>CxC}X6JWdX+a>jiyfrL-~fj*Vz}pwRKD>Hz3Mdrx=7f*h8k zS5UDnHus5baR%lQV}bEoV?Lh{+wRz-Oh;^sm6T6k6;a(8foY}T9WkmrT1CuYnx&WA-0DEZ(4jrZq0w=dq`D2>PIIYY(IwlU2Grv&L= zj#cq2*rq*b5AD9$w!^in2W4e^Yt4n3cAb2fxDLbpUDhyM1wn>Kx5QqHpw+ z&Puqj_9aF-)_u9L#VU%oS`sTAyi_ad$=K)(_+J%Q@zU7`BQ(~fM|jVGn>LU`ji}4; z$5T^`#ynhQ^~lHmnW+1wAjjW47qfTmSS6ce|E)fUbWd9b%XEa6Up_xp`8%+md_5;i zANA<*-&EPRuf*S7`Y4j=Bgz<9r@u~D=U*MpGUwcS0_Fe9F}Di39p|4z*JLohc|gZE z*FN9Ga3~13N__JxbzC80rkt$f3RP)&%Z+$8OzTRhtH+!xlR5c+I5y$puO1u!|2Q_g zrmL|z-=Xhf+@fL~x9I&$eDyYKq{NuImROQY8E5@)0i)7qPC#s#v@(-@GLApZm9ivR8#rj-sKqi_MkoyHPP#VLPml zInt6mYURp;T2qUR$nB=|$KN%L}ynb$7g_xd)=o_Q{1BSEf1k(2Bd+drInV?gg!fDiQe zw~FmK=j(p4P2VcK$3C$qSNf*i4=B3Fhw{IH@>UyL6HE_tKSA0rJJos2^Ot_5Zt<(c zdcuBAUrDZ^@>rMnSsFpLzVh_?;@T<=sx`HRdy;{*6jbYq>xpY@gzW!%O~q=|n%bz> zR19k>rq)z-V2;E?75o2hYJI-8=cWB^Bl?=-umj`4@jgk9_lfxB*()~u+8+4+ocHNd zbU)tzMAlTh+X`&zvB(2{Rv<5DQ|Qo$@3n4^gLm zbO&k~TG%%U?1U zdHwqPF}8TWKJS!%JZUZVR3k!Poq5SSJ~^1Coo$80UsbUM@5|wR#I7&!xY*KjpACf` zx8^r21zpzuk!$#ENw&kMK2-THg{2Fs_v z(QcvlY6a)V)cCoif$Ggit#4{Rm2H{{TDUtjFUhkkBDRNDr>d}?s-^8qu|Mt*`h;_u z@-~Snhq*m|q_QF6ysiqWF_;!<6#Lr{XiBooM=skhd&()`2{SR(P_A41TVRhZ{Hp^ukunpz zJde;@vn`h8(PR28l=rcm$D1uXhAVN8gQqLZraVVnKk|8(A$_mzvzh3tIQnU-re)WD z-akgV@3u~BbU0!O?w+uHh~V@Kt9%vHS~Kt=kGs0l6;IS zykQ{9$q%sX;Szh)Fdy%y3%d9|MSK2IxAVobvul>^C7>ARI`;zBi#Tqh*1(wjdzP2toDMkCJ&+S8z{q6quuTG?YLM`S#3 z+N(Aq|IK2v^`T(S5iggq>1nq$6VDi*o>;k`>h;sA*H7ic6Jq8*wT?)etw4HoD)yg! zYEAXqha7s1CakY%VYRlZ&@ZF4FPAUUA+c^`y+!9HX(z{hYN5uT8=1j#eL!rwIL23; zo!yhnGdnHQqvL;}?rL5uY*vo(@9$OP+mwS(H%RY8dnNvXvX8QL+>A*bABu6qIlmL@ z=IqndUSiMlA81@Se&-{7cF^Xv7tfaIa*n%N$*zwuJxNdS;v{v#KNS144@HLk2x!i{ zg^$MVxa{@xYYGRGoA7O(bENUk5&6m0Vz0$^`_85gXt;_Q9@}iO4@|7>Dz}PdJ@_;g z51sXtI+3>v5s%9lc7$=HiUaGgyKo_`)a)qZ`3ZV>XsOvEdaH7z1+e!q4Q(tdK$@TV z7|Q}_exy;~HG*llAAx)E%fb4lT|=$WVI5(983=#LeT=CR{%X}$n^{>$XG zX1{YVy-54heDDp`Mj2m>Dci~Rj>n!;hjmCf;pS7-dF(?STFtF_ZnM$TYQCArIJK>` z*EiQA{Y`7<9}bHDA+bSx#q=lYls#rW-Y5Rz9r~Luf5W-vm2VvFhF?Oyd-d6}N#jS- zcjtMeKdjTYXxzUQeue+F63;puSiVu#3C~ygmESFS$)}NLss8p8-^kJv{5ID#eN>ks z&*d_f3j|M={&4JzfW{&xP6+!Va;owLVp%QhJHMVEn2%yVjQ3e?0m^M=yY-r0`?D8mUt?|8J5uXCh-*F~ z2iJUne~aa%T_s~Kfv$J^q9uNfYwq>q{v?HEZrf71@jo0ZNd{snJ&=QO?l((_&G3~N z=ehXq7oMtYMRGCDt4>uI=jX6Qm*||2guxS z6%JzFs^4yEQB91Y}kiHY9_&lrn7v#jvs?%72OWZp#niz%4shj#w z^W$aIYtLck$LcYC=ZE*5uZ~|ZU)R~Xuy375Sj&jFS}#i!EBpEBOA@?RE(E1u_0f->kWu{-_;RA?QPoIWNNl z6LY<=VXnlq>^=RqWI?pU^7v;b1uy*BXyW8&Ne^9}a7AZ7=QXaU?&c}#ZvRSJQTwL! z9#q)hl>0d`ZoV-_#Vfb_Z#4RkevP@Zaod)C%M(hb^8OPJOh>J|oatC&)tVcc>C|C5*P9pZ*yU(P z#XDI!o6mur=|dX|0#8_Miz}{doxRFM~HjIR}6@56rQJB*#EFQ)dRa{9zKEK}bX|E*w(c6y|3r$*+A59R@_V?6x{ zB?}~e;(*F%;)JQVP`Bg8;HsFN7%*j)#7R63X(xDzrAysom&EPz8eP@^Uzg>=|2(tH z$`5y01&qTP>Joj|K*6pNzaQ~E_W2gW+40e)BzdEiXEHA4M2Txo8j?KI^S|CNHX@{-4PT?h{kzCm^pV@VEwd-_ zyQj;%uS=bJn7E^(iJhzM43F3QX_5F5mr#H2qJQ!+vIhnwwngsyM>*av&3WIKX`|93 ze&^J_epFI-i9!0+b&pf`Lc2xsMxqCvE%FHVMJ@WF6@4%syl1W0v(%?hPMO!7T~>gr zj}FslvnsKNy#*d64|6I6{^~D`9qnHz>yA1^cen-n`Bbr08y_BIO$U#Z+urXu+B;2S z(G;1REXKI`2IUV8gRGj+Agh*sPkxL&1DtIPa zum_d!Y#J8y4Y$fg=PUl_*)hO#@;h6!E^Eq}S$szu(`?GgUa1FhK^ipfPQBhMITrPJ z&T(khIA;N&VRi^FGa1h)pRLmA)Y(!7c;(3o1rKy=-aiv<71j;riiT$NJRyx68TA_{4t{y+FHF(6Cta6pM+!>Q(Eh=5civk8mlS zjT`eZBr)l_z{ln%^Zi>b+YWRf&tJ1EZ-B!dl=rqzfJgi$_#XDD5l1Cy!|NLPMyde& z73HKJ@Q`lI%RHRl?uy1l0rr~X=;MWQ`Q3ndl*EV_V0M+^%A-8-K2$MZT`bFq7C@>c6ay!V+n}T^H8FRn^$1 z9+|v@N>blNy-8r;N>?Q_or?J`OBc(o5K6y5k1%R~LWu8%Qlw%`RF3%ZB&k9$-&;i;IFx%ZIv zK{cf06ckb zL%u%u+vMD*T(e2?_qEBCv%ld@WgCtE&6=;tdpwIl>@GS=;@dm>x4=~W>l|bDHOHCf znLXBdNNeoveWvIqYFt@I#^Pog5CWvz(Slnq1J&AUlkE^*w z`}^2pS&zeX>?jlY7;|yNNF^H_!2Eii6my@9fj_37Ch{=GB4ymn*E8Ci9w_z@Y7Vh1 z7v>Q0fjO_-NZW}$hiT*mytt2HKPvDO8+ePg5@i($Ht-fX|MKx$Dz=MTtaAJg#P10F zCh?s~TDHAoZ1$XB95Ujuc|$4&^LFIBL+9J%$VdE|dTocyynjHx@92DQIr5FrzKL&* zR&p|%Zl-C3^yx_UINKLTe>XszpU_ppW0Hn-i{EZMWy_B08YYSyie)@9kvwuVRmc6CG$GC(?&&PA zR;Se&TO}_wjVZB}!??1oiIa&NwOHuiRTpf* zx7w2)-+P&MuexYr0`qs6y@uHC+KW`X8P|+F5N*JnXHqL=Y4_UxXmgYEc^=_hT5>*U zqe*?w-<1wt#pRIcQxCw{Fv~<{ZpZo@4;|$3-`!>LL@9Q5~ybKJuOf-hp`Rg2%&s6m2F3*Yb=m-6(9u z^8vp}mnX3}Czh^sx_*N}w?i$eEb-_W_z^`cY43p)} z-_wM$*mkxlg1R!c1N(qj@ZT9tyZfbm=ugu1ErH?KJNo+o2c^u`J#1HPXgKOH9Cc9N ziD7J88E@CPI`Jz0+wB3JI4t648?H{gi2q)Uk*m- z{Z%4z@o=;RG-sc+>m%;c$Q(L)eU^?E9yJ`c@_KsHVPlEaardEg1i$V0tq(UV-&ElV z!RJLbTXo?NB>rYW_^!CbC-S!>Nx#sZzEJH;DLVjfK#;%odf;HM$ka~OKJ`C2#hVUl zSuK70h!Iodr#~NgoW(YV#}4j6`HuLKv_G^l+9K%VlhMa-X}!#L(C13tNxZ_v;6E2z zccSj{9mbwP`IP$vGclh(5L=O>PgMF}dt7OIReGX|ch3GTGP5|6#-Ffm)h;0ttY5Zd;hjj`*Q(szu1qvH)yr{g{hwqY=`MAq#L^!TCDR<>G$=`Wt&H{Y`Fa zp#Mqs{`!VP>D<1U?&yoPj=Buc-*C41KK-3vIO_kDeusIT?Y7%|yME^}$2)WAV?sX| zjNuQoonM_f*NU8>_(^*#r!|Bvj^&4U9m@29OXFB`j_^EZoN<1$M`&GD{xy!68|<@c zcc*pH30UK#6_IWptK_+wE*<~#1Z6vEV_tS4{TQT$^?OG--lPA?3Oqjw&&vYw)Z5526YtH$ zd#y+>MtYTgZ=mD7db~G7f3M&KC3mjId)0Vv3h`}`cCCKz;Az?S=+`)2zxT!QO4d?@ z_ln4SApM_6`-Xn+Z;tmqCboxu@8jc@&kghJa^&eYmCcOce<056#@v`f{Xf#q)B7mT!?gvc#AqMN{d5KP)4)NspYHoN&PZHQTwAcOuEN!T|24Qi zo--jf8ovjSR*L)wzL*f(iE9O}Fs>S0qrT`bzizk&^U_dsy7;_ezJ)*|eamGGs~do4 zM|N6&Z#^Kk?)BI^n_WiXc%+R#q0`#6dVjhO`&d2JVbvX-md`iaDlisW)&5x`>u9}S z*)iA0hL_Ryzto&xX45Y>qx=wPx}(PmK2T~ZbxkPCKbCS@g+2XO?zJd;i21&}Ggj# zZ**8*?ep~5xjpIpXqUzMiw{29;0?EkZ~S|-h0Vdm;r~Rd@_`DWyb$)HsYYY+RLmpx zlhWZVv-bS|$on7YsH$^+96s|WWC$Zn{%M3LClEDCtS1^ZwW$mmEds3rqGF}(sAy?x z+p(pU-r71OlYo4|21tNXYQ}1NY3scg(R!(u_6~nkYN;ZiQfu2YXE+5JZ;RFn8YJ)M z^Xz?+$v}Ji{jK+X*Sprcvd)^5bN1Q)_p_h<{P{e=KKBszpT=_(uKK|lwVq?ty-x6>%fFP)J!P)T&d)4$M)q`M zqg8$GW^0{bM_4#J&dZE)|NHX_4}kqO4`sA{T;U=HRy-i~S1fb3HQjv*-+gKH4I=x( zJVKwZm$`5s=<=JF^hw;FQezeP^2ZKMXh~-`n!B>o@Lgfv7wWueOE3@Z+J7N+Udqpy z`j*FVZrfi^`&Tk8Oc%sHcj2}D%4RCQ z$~|%6UCwx7DuPcWE_lGWi5T{KiRVQ=jB&?8k-Z1SH^6MS8OxS@BQfIw*0m1hWxmKx z*KZO_Y3Cr0`hCJz+>~o%KGAgU{ri=VfnX+4hmU-S{XN2(XEUZm)Ji|noKd=@kz&KR z#FjlWvD{t#MYT3*gGRoKG;2zaiqUY{wBvd9(}Ncl+5xU}lh~h@VSid)ui{(9k%oQZ z|GdJPx(D^=yt$}g-c+DZId`tsbg@B~an`isgV@qM4;GFsv8LzYymMyqXr5*C-E<<) zd~TsF7V5z9<{ld`9yvt&Pc`maW!#fmHdBK9IgfXVoNb9cfO^({Y-o(h&YLt?<* zkfl8&PqlJ1>*7hOf_bu)pcy@$wRq*V5JfpATnRPF@ zyNSW;qaW!Ck)@e+E8HWD6_ME^wqfLt&O-XdC$N?=Mu(7|@|Ob=Gjk?o<37sSQrf1X z0%?1Ymh+*kVBOFreKYNU^tyTbgz5|SIs0Rvad?05JZRyY6BC2^%!wiS82vRK#eNmR z|H+?UpGglG1~KS14k#Z>%EUHe52PRFA*8d8Uzgc}|6B39ezIZgjvB@W+}GnOf6Fio z{MO(KA6Ig=eMp zwD@qL5C0E7OdsV}2L19+N8gDog!b1fLGvRqN5z;{_Ef>!x`z2AcX3Q&^xe5^a8F&1 zXW|>Ul6&-Q!Q312drA-US1O!iGm84GO!t|J$6>F+99mmr_JCgYxa-Y5VuQTi-0o&H z?o44HO_-?c_Pjo_etohZ9evNm2ijVhoeR1$w@#JslNd=il#3rJ`>`N4?GJTX%>{TT zjDOXj_1*JUDttuZHxfU&3iVBzD{*zWyicLtDb$(w3-NrRejdktT;I<_nt3|STs)`G zSxuxz{!d0$;A$WIKNWci*S5j`7vlZGg7&!yzW((qBaIWD?rPQO{%AC4s;3(WZku`;3SC264Z+mV7!6)`iLG4r7@oHMRk5flS}> zHzH}AjlQ7Hw^ta((>~1U59v6~Wv0T3SY!?1hcYi>hkM^LpS}9~GxYbPv^;V=?QWtf zR;AYBk=vp03RFBGMlr{fBI9_eyA z&Fw{L#ODC%Zqs@FR;Qa&l+KfB-8@0z)^l7oqd^=Gj?D~=&D;~$Wg2n4!@c8!;p=Bf z!Fu&#Vk>)G#`ozSJkNw=9Vwm%dy7xSWlm@5Uoyr{XDbITlKp|cju)|x8l%~4S}8V{ zj4Q;vE<`;&EYw1peBOj1nq2c8RrmPcnO8B!6N~G4rR|pHr@I`Gqp|ei;Trzx3WX1m z5IuPh@i7%{ZgOaDcs421U!?pqo!e$9{0zzmgGq%mJM{~SKfDohWrT5aZj$yhc=v+i z`JndsWIZUONSLeLztsivew0DX3Z{FrAYH;#I_~v8?Hk ze}UZ$>&SDLudtp8RmbsqK3}7K1-`vPVMq+l;ROA3Z_d$gBGgSR+)mq%GmpeBq1a`-HIxTBdFYOq%p#IH*f!E^(z=tJl)duq7mgbSf&awLeXSbHA zKZ$mYG;YrNac0E)e%@!@OTVd07$*zohV5dXn@syaPs)C(<-b3;fc%;Ak6oti``NyS z>l79V(|i|cR9x5PgZ;^M#C>{Aox(5Y8EB4BC*nr|?LLJv;j$!TGjk%b?@7fb;ZgO5O7&uuz9HqQJ**y%qdw%y4XMDl_ zva4Io%}e#%tn%h&;?#39STyEAJ?;pbbs`^lk71CLsH|S?@V?IzLtqLJod0>SH5l# zPm(^Cx9IwNF}F6KyfT`9#WelY{mQ%;;O1`tn&GK%51?{6H~&Qw;cb+v^{(=#(TH`7oR?T^aCWeQCR!+3IAWfuU@Qq zS&qZ+?@+$s)X92y>h#~M(*Apti|ruJz1}lhwO`?%1p{Y^bM^U!v2fP9#HCu#^^Z1{ z7&m3lLLJz*SDI>%URdC}a#qebVGQ(+CAX6|!&20pDAYe?a^j`c8lX^$xDMq}+L46t7J-aFL#c!!uO zDEEzqQ)3Ms8n4cR#aKhmcxAK5_8$4Q!Wv>*2Wdya+!0L7WbXmm)Rbsns2TTov_shf zpYLIn;r`Mh985#b`_H;6Zbg^)`5Te7pbtFnu2A#=bb;R&(uOz90@@H&*k|m6mOB*g zJndrR`V6n)MX9*Det=q-dozYfO&L|S96y#ACHzN@r-TQQ?Rx<4#8bYX25Yd zFrZ=qH{?#nYuuS$ByvpJ%#x>~@6eAgJ)W=qO5c!PUgPvp$2;q!eQ2%3bsFKxM51d1 zH{+@z-7;l>A#;iBRiq1iH}k<`g74W-5dY@e^Ax?HPkwV`oah5d_kJ4f&wJxDMdLw~ zh%fj`oYh|$+$U()MxXmQu_o&{4?5ih{%`H>bZ106-MizRvOoOi?TUA9Eox5??FpLg zc2L)qWh5~Vey#bm@eM;UG#D$+ME{S94v$U4K2dwK%3}+@rCw}5#%w>vta7}H@y9dk z4(*ppIgrGu$GactvVsL=Q9o9q%VM8AhQ7<{bnl-xly0H6zvEhd@9ZI*iqS%=``mZV zRxwP4|1bECxE3+Z*XGX-ihSiNw43%Ij^0a1`wpC~_L4XBd^0fLhy~-xsv>&cF;mcgcG}6 zU*ZgBgkakyoiFlCs=qf2@Tk(-*Qn}2ly^c9rp$+Wz4?ibHi^3u7e zN3DNarWIFw*U54%PgdL4%$RG#_o|U6?N$3EeueQ*$ZJ1-w&GL0^6%SqGH#m0kQF|3 zvGAeaMjiIWJ)hmxZgaY4aPG9AjxCrA)a8UCv_+ep9VNI<)C z(eW40XMgB8w0{$f%vFND7&O{l#`Uty$Hi`%ajfWr6U1I)f!2fy_;!3BDzj+Q$ru;P zmbFsnOFnM)dne?6Xn%cG=0usEJM4>Y^ut{A2m53ge_kNN?$N%gS2PdzRh1aQ8TR|K zoOe!Wu{KI+ks5PVszg zQ%;#z|9F9~ZGqo8^?a7~luLXO?kUvqaqjh_zJetl>2;S`3R8ZSKWG=$yBJ^e@v~0t zYx~opdhaZ*cVXr-|-sE<0`YusX-d1H5fNm$M^DE9hC;o zJy^42Yccm8TB$I8h+UG3Q0AoeqMOeO4(?UgpF89`$#&6BgZiFNoJG0JjoFZnUpnn9 zbyjcH^NjwyJfF9nrF3$Zj-fU(viIO*Jfn=~&w9*kyzNqjHv}X&&dfa946=K&$ zOv2K5`tcF*^uuM5cAGKY7>o9fEBnPipf%I$@z7(NGaiq$UgPC}2Lk`IFs^je#1Jk` z++~kQFSQH#mlpCsQPQ*&_Oo%QSITXPF40)oH|KVWpVm-%E4o(jW*BerdFtBnjPZ53 zF4~N7?w)fLt`7Cb#{_e$TkttJ4|dlEhxwCQ1!cFQ?ZHUOwRG9EOCb&r^PHL)e|nGoB}JPQNMoB>#J@id#Hi+Z}OU z{us}eajs<)euu&teO=CnKd4nUU%|+02RSe4t2%=iJkgZ%J-nNNdeJ{Gr{|TxU;LUi`z3Pn0OAjH_{!#pGUi=J7Mzyhc=`U zYq8VH^+znD^eDGk_ve`prgJkG1Cz1bK>OcMAI-CzkfHVmp3QztJ~t_6*|A<)^Wmd; z*8f|mzgI8H9Ln)qt794broeZA@(K1&8SbCMbM8f-MSs@dTlAN^jj^3|-XkAAD)`)o zkj^cz9Y?-nznHdj#Q98VT|e=i&d_sf5L2Cd64L!!0WLht=2-%@8q)1K~*&rEkO6aVwUZ^i$``_4}v zU)sBxVxuJAdfzqhJMhk)uT3##{lAY>vV3pPul>!b@u1m1>>IlY`+HHplxzH5=6RaA zM{HW@n_FdK4Oq8}KDkV=n$RZH#|Qow`>5kL7<;S|?MzmBxW>ix>l&wc6|a6)LH&%v z`uV!SM^1N$S3D=PTlG(7nG??3VULMSC$E>IJ#Yklk~=YQ%6KjHF~#5iYtwPjIbJtj z#~QY-7F%kW!}NzUdP{!z=@X;at})|-dFvFhy%jc1(&<57Z#E4-E8HXf)hjY3ufG~G z57=ix>n_>XxPOIppZzEOZ0Yypjk|7F)K1BK@#}Q_ro{#=K^uR9Z;0nsGk&=5d=NA= z9Df??9sFZrwR;9_54uwh<0&yNR9lw3(_)GUK<6nT*q?Y-&V5{nQX1DAQDdw+=<7IOOGc<}<)QeU$P6>?u3V#ZDW3nT|Y54bnx- zs~qxV+;ghQSAz!*4Z|5+;!a|pVUM|_NM1x-1&?28*8EBsyfWoeWsFURel@^POFUEB zmJr9x>;&Ct7rSioG$X)QE8gms9I?OuAo_>3a)$XG?%Brd%k(#1OMV7<#r9a<-I&d!`)@%#fM7b5)En}x+mOQTWT!TFSUGr0)n^+iAc8y?Q6Bl*< z*x~$Hu%NvjZ^-k*Hrd~Xk5$MlA53fMw4tca^~UX9l+SZR_jis8pXKpLvwt)BBph~6 z=Fo2G*d@`T*d;|Whk&^~N1tesBZK!~ok(LT2dM@9{g|1Qp&ynnT%G%pnGT#|P8a`rpRZalu>E-6WTq=E^{$%lJq%LDuJJPt6W*PRcjxMN z3$#4wUekU8=jTW2%;`VF^+PYFlqIs}m9DR>Ja>B}UHPR*I#3^(UX4q>N4aCqwD!0Y ztm*Dp{7%F#Y5o(xQTnh(Q`v4(25+_!Ylv+hae$2pCA zH0X5ngCU&R5T2o5T*eq@d%uh}-C59H&b4!_Tg7Lg2J5K?>*$wfDxZ;G;N5w67s5MY zeICcS{-=JYFhtYY19<)>vCHsoBi=P2eIw>;0Clgc>c~=-PFu|k-q+(DeHVU&bgG|L zyJw2s{LGy6M+W_Y`V+gt^K}saz|3;@yZDB-N_CN21!sbCrI1mcOMyny9yA%_`M5mi zx6{6b8O}f4#~5?Ioc0yI`C6|>-!aCOF(b?0Na?n$K)&aqZc__*zi;Vx9eVyo0!n6d zALekwo7ZK6)2_=b!?P!Gg%*D-GZnuxaK&)V#x)05V_>+vF-pEk@9Ung*xeHEV|JGM>z$~dr;C~soi6+t{hL45+Mgfg`8R_HAbt;dfcrnX zH8v@GtAT!%@X*Vf8;?fQ$9ZR1 z`rGem83)#F`IZv{<5;%R)vXj?G|{DaaYXgAotDB~+K6{i>@QVpYqAJGf|%^FpQD|( zfY-qJmO5oK>CiWw@)MpvM#+9$xZkb??{f>jYj@j>&O_nY5|?~RlD1F83+DMA^C@VO z2WofgCveSC|Jmu*PSAU=>BV_X%3eghz$J5)Ohj;#i*PPPCxr5X{?0=|low7Yd4~~O z1HSF%EMu&;MMt@tAMO*J_txk*#&&j*F!r{`n#ZxEPvmvC-Nti zXWW<#CRpa;L&3xnStG={ZHtc6a+sUsJj=fQm%1T+VXL-}rwrs9HNpI;#=J#jHADO| z=YUN=TBFB3jxnd+)WgPa)VfcPze>s;wN}RX!?)8Xkurm|1-j+cu6?W0n_^CvOcxyL zwW4c})hT=$PoGa+J9YQnl>gNzozn+6=lntF^gmbcO}gGMpx(5-;MhH-bupI4*rCk* zGUQL6g$9ki!?nXTZsGZvMKYT8ztQ?^{Bn)&C(S&CP0Z|~^UMtDn@|^?cjkQPcz*k0 zWoxZ%c*`0V^|=lA^tsKLE13H^+OAb$y)gX@q$fr>V^;>PO_UEx90K}E7~nC=g@0Tn zF%LZcF%(C+$qqLNUVj710&R4Ev{=POy8-iAbfj^fp=L?kQ1YSw!#L>aQM5+|-@nQI zzbWH8x{T$zj4S>@86vyZ?Wb&ZB+8&aO%Sw-e#QSiFz~!Lr#w6)o*Q# z`OV4pmaRH2b-kftLd3-1uE&j`PSH}H%~!eW<9pmQ7As$~8F+ua&nP2C)+n+4+9mQq zAATdHNDN`dpd%Z&XK^l>Sj;$`**k7idQRR`hDbX# z=E=Oj9asACFX()$kndN0N_NF|8RlNJ>2>k1`i4*0%1#wunxx~4cQ{`*k27Y-A<-v{ zP_{A&iAzGP=2zUv2xTYf$35fK&Bu6nb9gD{$2&j7J{ue5lHRqUyhGZbuPVOY{Y97Z z^PBG@U0UqyuEx7_z+?T0u>=-7E$CCrTI`s(=l)Dyu-;hg;(zzC67o#Xp$^ZvEl3lN zEOx4JR%4n-WHIK)V(jUQ-P+7zw*l!JvcIz}Tss52x@W8T!=@Z5f-uGhDS(@|8f zl7f1DiGF*!UZ2s=r)Zt_`p7HdKgU=el==Is7G-BQdvQEeeP|P*>XgKotPweI(4cN7 z=@N@Rm`O?>vj0L@yBo1y$+K`yUU=bg+0!{M+9KTRl7bh7e$GZU_RPIVzbl~XcX^kx zDZLN%%YZN1RVj2ccLC-_1ZTR(@P9b^jC`ReZa4rxNAFP?z*X?h)(7jwgxV zo{7ZB7$^UK9(hwPJHJcewR$v#b$xRDkbT2E)a7TV2lLdIe5y;~eU@RLVx096;^#=3 zr}Qta$e-srj!*MM@(dkrtm~M3`w9JR|0hr6eaWc~<-i{@jHj(rn22KFoLb7QDL;?-rh} z{Kxq&QP>}NchBi6_6E;mHKABn zC07c~dJNx9IbGR+Fx`g>^7hg!LzJCB6{I=u6lsX%crMbgA71D@CO!i5 z3hFp^{E&W2zBQJ+-nWePc*g0=XfJKxALLDYAp_}uQIP)V z*~jx!HHN%l>^bQh@>_qcR(7T0^LF--55R8i13;a_VWjyNq@g{^vEa1KE?kd3cYUVE zo{?!TnU;xDK63M<%)aT9GE=Xclv$5wbEi(qSYMcwNt6ufUZ>(dblG(o1HZ?}NAVX| zbi}kwJ@SmycSQ*ijP0UhIpzUB<{`eAb;-mlM$X_T!TjwleobOUHAm z)AHq5x573TyJYJ%!7sc>>w+#6EGV&AEu-$Ir9jX1N%?-Yo78$Svw+7v?-q4l5L{4= z`500D)q}oXb20X7tEnS126aEQjb+T4aG(Pde*3o<+9*c*s9YUTV zJGC0*vG+2@kEhOX zCwPY?c440PA0*|MRptyB`0qWt<0n_NG2{8lLru-PvnmcXn;HvO6oZPud5bFkCtCoYM7 zfL~9ydI0yQ(y8vd)U(S_eEZ$xlVYn~D>~hopXd}B1+fo^AGm<{N0#_8fNv)L%Q~Dv z*101xGtlozyTpD8bp0iFH1_`qg3q`p>u*SBCp2u#j--7GWsg>eeU{iu3%2(zZzVWCEj5;l+60VNx>11*O>M|&DLBUaWh-e*%7gn6R)bXiQUL@cy{MLbHQ;X z>wlI$OS&AEF|iHbwWYGbsW@{?mAGt9Ai5*xkG46%Xr~<%EK}5>sw3;GNoVVb35j~u z)wbjRjah}CKASjtW9iGvGCwZuTIbFsPlR_0qXBskXOeBHN88AMH?(I1jqTanTPD~8 zE!%Swo736bnU-)7!pvg_^H?@m-fR6QWNyu-?@#nbhjdZ!C@nQM#50w# zX+b~Lc4TjBsT*w5ZD%eFif_btv7jEX#TXY&CxxQQm0uLpYes z-o6v_Xy>jRbwZ68KO=2BLzL&PRxtq#9k)ED_y@*9X1uFhrHXgz^}}nm|6l3{ z?Vq(B<$p-ys?}(pj9=o}@)K%rh+?~SuyDAIv_HtAeu?r`aoT61KTdl}bxtOR*tZN@sYm&JCtgF19iryotqezfEK z<9WNOd(bX&jA2(E+3@|ECuuXS_xcjz=x97O%HH>Xu0Kz_pcivT<@bD?J9p)H7VmY} z8%OiR`i+2AQ_mOtw2Jq~_4PB9Rf9BhqS#}~60~hws^XLzWt$>L@vg_6P<~WwjB2cu zTZ^=fI&G;=%ewq4($*sF8B9yt3nS$g`skB~eDku87sU?+-yw4PKKFZnJtn$`8DAS7 z({ncV@EuAAn4|8Te%aBwm)y3dm)xnhz2wfB`I0*~`;vS2JukTnr)+goi}1S@zYo9U zF4_8$Yh^~cDf~9$m;blmm;S7hW`#=As?$Vu8pgx0Y!w%-2KUXlr%WbHyKv0Ys`PTV z7SCJooHjZp?ptwR5B{eC_fgziSWAt#zx%D>XI1vYoRNzE9c^6r2IpGDv!4)*r1W;| z9j|$|A@eeQ?z|{tw5}JtSBXV$uP-s|bfqu$px+luSDN;+>iXC+u}3$w4GncjyXN%g zLz(~M_{PPZp!q$)c{7ZZU5j?wct`yR^`M6#wG>19898QTH+1h-X~CnXqBz$mg#1(kL>?z0P1AVCUncMJx3je2kUjDOn{)Owq(^WIiuV|Yl zt`Vk7yf8c#uh{z2Rt#xAi?lUj54_4<;M?man)ZT6>d1QErtocXUvciW5r5Z;Dm*I2 zjP-o8jP{%%@mTk|_Zt!VQ;a>1d1-P@X4bn4F-EB=yX1E&%1`0i1 z$;zZr;anEk?w+Y*0<+yuW+;PHdF%`96>RY;@Dkm=*G2C-5H%b#nyT!cva9+H%#S}B zhLemYbKOXfXaBGq7h|cg%T*tz3iA95POK5+8;vFdsBa1CUyZATdWBlhRn?cV>@OLs z+#r^$(z`~`x78XqfPJ_gec6USP3!R(7V|x>usKJF9S3ERDwa8A0Vhrj!5peYd4cy(kDA1_j*+D8!xFK5sEM9VTfFFOla7!t*n|3dcwp2g zG@nrOk#=gc(f-YPPQ^!^e70|n?-n`H{qYgl|E`sF5+HuVTYYP27yssclQQq%I*#iA zuF~&Qww}&4qF&)-ue;^qSF@q$-8S{iXk%R{-7B;#Y^UtCI4iHMQ}aHYUTTwe3vNOb zd>rc72-f4#7?n9RmJ;3_r|=)Wr_bYA52bU&{JN(vom+$7 zui&>AzhA}gD%O|r9O)~NP6tqCCGCxtU_R{9b7RKs5o2x9{HPUwV}&ntzwk%bIHcKy z^W*rpCuKtSPs&u`I)eMskJ2w>l*AniYoDhNqn(Y!$(PtTH;8}Zy?A!yo<4V=yTqaF z_YmgF!WG-y^^5kpYe5rV$Gi!p7$ZRSC3%AynKM1^mI<$9!)f|!%*pzb>4(eGci3gP z52e#hjAPblX*(xljp!ztMemce!;ub&d-l7F`i1_}W^c>IuVl;A+3hvvG0n0o8?00{ z>m>C-U$4dW>5DoXqkEg%T@HGU-xH?K=|(y5~9JEBc-?p07?;dq_o5$js`Omqz88u2fG#T=t=nmLsqa6-^;AHES;x5&ho~28@ES+Q z+$%H0H)C!t)LmUdA7}i!BaKgHDHHsPW#>%LBJyhW_$B|;%=0qZQeV+0b_}#B`Wo8P zto3oUMU04EVWqpUX`7q!?HL^B0n>0Ohp4g65L=v&YMK?ada8rnsp?R)1aoa^wb9*C z9TMBPbZ#fs!WPOcKTvd>=jvLF(UVOIuhHB0HXt2s7-oH-_C0UTu{~_#$n+;|(o0|F zKI-o-@mXILj1_*Hz_)XBOp74s(-h>v@|h2PhoX3QzZG!2HtoA)pPYAYo1A{)%q!E6 z1dKfgi`)1NzQaD5qi=MTj)%drEd&*2JUE-4R6#=Ia=>w14_7ZGeo~;5lxpq+er|woxQ+ z5wfb>P_)hA{0eD1zpnd_YmChrYCy$mUkb{GAJ$ADOTViF0i^&b8%+KD%4`OgQ7kp)+A2@4mlM z>v&Q2kHSauyY2wb6j|(0{!?poi4Wx;3}b0)Sjl}hBK>;Y^L-88KZAFd;{TCRp2gdo zo8g-!^({y9WthLU9ewVYv>mvGIzN*by=&b_WUYJc@ptn| z&b7oHh4-DLaaZ@bUmuflE*W<`PhZTnv6QpFoH){J#7@Dw82x38a~o$baSzrjTuSi0 z`7KR7Zt3?^4tPH&vm)j0z{Rp6kq#Hn+_Gdk`_2zi?iMTMP~JWUd+m;gd)ysaoV`YL z95U>ssB^%LBm?dU`*rY?Gjl%sh1>{x7v^fft;bc#I5}oJzF*|DSRIZ(kj}RIqPAgo z+D0a2bM4jJ4>~&;1JUTT|AfAkJk5ang0WA|$S)W>+(k3Lb`bOV>AZfy1Z~C~BCcI(tE$H`eDjEB2Zj24gLR3CJid(m|KT%^=OfyGpL}=R zr_R(Zql5V|-Nffu?O}cn)|Y$OzB~IdW`Ohwfk@S{fX0u-k(qVXW9W^u77YE+L~6j%#@+NQ;?3>AAiI9TIBOR zozI&E@2Q9VpVO4Rdge3N%DP|A-(T+vx1BakW^?G4{awL;uHL9FpM`*0Z6go;**i#&^ER*BtcM zB^9IFoSg$h`7C^KNLJ_NLHkqkRu!L)I-EF1ty^3_ZZ#8Xv2A1S zgH>n2%am<6b4Zp|hcak0I1r;epxX^iL?7c!Nk6J3bywN`N>GLJ*W@)7-DS@Z;|8w-_m#M zU6uECmv$Q?&9wNN&8Sgx^*Q8kE$S4kPTGxeUTm50ayDs1a)q-0WZibb;<4&FIYzm; z?VWB7zMF&Rv^87^K1R;lD4%hZ*p4^P=yU&rePI$8fPJyj{Uhd<8k_CzH<51F8R~5F zL#D$V^u;-69}<3jD$?=X%6>~t+3P;~ui&pP?sW%}K_}3()D9arW|uXs5}C`gGt_<* z?oO8*-RZ!J_c%wZav#-rb^*b+Gz70f6>Ay3CVFVT7KKOOul>x^+= zKNsfLfN}QnI|ui*I=>0HN1l$S|2UiHboz;43_i=)0cd}VoTq!;pqA0mrrumRDYJgX zq|Dv8X5(tbRex@uj1PT0DB~n;U>&CF`>D8pUk`vkr_a6;LmY`}Mw?xve-K+VsU0f8U7mIk(qOQ8G*O9Q0{hM>eQsmT%(QR$@JXZh$UMByLf2a=KG` zTG9zc6rS4V3;Oe$w%?lF7`QciiG8cv+-o4 z*D`O$3SfNSfYqLjW1oyqc-g%K-vx0dj89Pihs<`lAEoEq2K3*O-btB8Ts5mFWj6Py z-v#>DyPEa?kFJ`Ok@FMI8hxyT)a!=a&u9})*$?(;j8nBwV$Q0$#`VEI^wvY<2=)Fk zX9ajw)<1;r=2rBI&*u6{)rU)vH{ap8%NWOOkFR{Gy{vA9ykCfP_an^=JumOZ|KHU0 z;XI_ghwTmO_6jZv<`d`ARPgULO{||3bm{zsC2QDsRo+AMrUg<(;x;6W1(g zu6LuDi-q}2LLCIlg=a;|S21=`@TVL@=0`ahV=ivGj}M9cz``kt?s9ynr=V_!WpZ7Nj|3ba&Rw4r`QS|P;i2sBUXViIFd{yvD0$R5d$64f^qXYTbC~pGGvpxFqkl3eEuHexa{?c}eat6-b+n6`n8MHcN z4i=B|)Pj0kiL}QwpSd69(H7uM{Ll5vXM6E1jkeq$F&v&vFCG|J%JuCx=H@QKJ^N{4 z`L>eOZF@@0_y~WAtf>f}xp-FHjpvd0hzhl;Q-%b4ZU zG8V2lt{J%IjOO`bdZrt{Jd>pHyP3~$Ex;8-nnRIknH{*&xc1@M5nTJg>juY6%QWCh z;M&4pyzj=f9{2lky@QK7sTp`?;fh3t^Wh2VXWLe}UJP5o*wb<^PX}zzp=hEoFX(Ne56DZWIlymP_>I_C zAs<|?=y;f)J*sq-^f96A_PR0^cawf$*W$i9VT;bv>x(0}cH>Hy54VvBfrj|B9iwM! z<=JsX3S{3V(izcicRtowNc-f2j~ZKLtTVyco|Rtm}Hs7m5BIXCRL+s$rZp zeEX)3`y3gxqnIgi92kR$Hiooyo46~TolvXnC28{(Ff-T-GlDhbk7Qhy#dF>S@WiXJ zE>~RDVYg=b+((+y+4Wa1vLCL%H(NVw-_@8u+wQh~Q`&65c{e8HJc*ggyqKpS`T2By zKU?&PaStq6vSgTz2x#Sn=J8?vr%~{u+-IZOKi2EJ!f(t|e$)PUzo|m{5Os3+_H!-$ zV%N3#;Yq{oO`<$+rsTZYjDF^sl{VrVkaw-6{L5PyPco8Ze1J+n&bgoc%F%H_Z8uU} z$D`wq=ZPWY7Wl9q`JFB+G0UMpGS9iy;?K24+t$sbEUwImzNCC`4da5-#J&{&Cl>Qe znH^~uOGjv2+LB4MnOftP#L(|tOYtuIuVP0#-#+rw?;jFb{7;A5^r@IevnmC9ET*t` zu}+tIa{G}9Vv(x&^&=!sLw|l`q>VZW^hcMyYe4CIkalyak+gjwi8uC>QtK7htWRe< zTJ7v3xJs>O#U9H@Jd1htEan6LH=Y$6ykZ?o75cX(qOc6fyU~81{`P}B4$1(HKytsk z+ei%R3bxwiYDlw9{uL>qH z{mm7q_{qiP29ZYIqb+O)@7d;UjOqG!(gq9CvR{6Vv@`xr+QR+{6?`Wc==%SS_@1)o zWB>8}L#lktFYrHnHx=z`uIqDe)&2QXw3%sY>%=xlec!YvYgs9G7;b^N8fWKiIm7G{ zT1Q#_k_jn$KIk;Zh-KWN*Qig~+GKmEZ~OuM9F{t?dt@4xe~V5>o#gz;cilPWcilt= zzt&R6Fqa8lz|a;QUs% z=LmIFqLZ9Oy-AksV!zU!nsPVdBEEyV`0LtjUhQ>@?0Tc!`%dEZk^e*;ukiZP`pxy3 zR$Lo?G%3@D%Q%08QMjh5Cu)uE*0I!P=Sbtm>o|+W>$o+poUeT*B^ZZc^;T*_VrG+7#C*c8q*r(ez;uu$+a3UEBb>oENPF4b1?n~xN;F0l&pI+N9&8Tes4e zE|zrImOD=i<{J{Hi=NO(>?kQ0y~AQB7*R6Zo1Q%;`Y=Oc@fb_Ld3C?U5-p9W7*CYT zRfF!A5wFeKanP6O65I4r+%x}+zjrk6@pS`Zl+Jw6M%0SAVWrE@`pkgy^vBhHTh%!n z$A}o*nM}9Fmz*oU(UvjY^(7Sc2KOfFdUl%1e=ZQmxg6=PR_EbtCZ2M4m?_3D!ag-O zyASJRKk>?l`=WK`^r3q!LVU5AD8neb3FqY9nI89utm(PgTd}`}w=T2aK^Yq{S9!l| zD`R)wkUN%1xuiWc=Ie6C31Q8d)-t!o+y#DMnb^{>ta=^a68!7f$4% z2Qk)OqfSa<4ua-BZfg2KUUy=(U8nI@0;nHlu8fDrd3hEL)tSdd!@OrbElQ+jF{~mSDHIIX^*rKWme$ZSFz@hhWeQ@p1JC=zS$1X_J!q^ z>2m~StHf`^csSuqhaE;AEF@Mu%DEQfnL!`Yo@zeQh~6Ig{0{$fz4QNwreEZ(rxv8y zqtk56?87;DJNjiV&M|W!T5C!>GrIT;Vs0?WVXk ziI=vGAWP!{di)5^7%{Zod!v(dTvCGJlO~OXcIBjS0mw`N|gL(x8vD zaiLwOpEghl(xDr2E9iSjd=l&_590pm%U;Qjxgy|>i*NX@3EBca~txDCRLudfmStC^tl_rQ};wxxLuRl<$UmLv+#@o+JlKLF!mCk z6#&h$b1KfM-v+&Zjq{T8Y~`5aq~n5%W?^q)Eculqf-+D458heYUvfv2iYNbn@NRRR z^4kcBEw?dtV>#spvuLxuboyvHALK~0uEP0fvebb#`HRFRzsl$lOol2Wm6M5N< zm}>ldiBizAt+_yAaW<6fbZZjNxZybX?r5jz@lM0ObN@%T<%qo%7QP*Iu2|)6{l>9; zNbmjRmw7fZQKtU0{4zN1dOLDzG$PBXqJ4Y7B}BMo_QVjYk#+6Ov${Q7H+BlsP_uOEL) zaQ_&tnyP7;dH8Lq94@n{kvO2;%7)772+&@UXAkV#HQ`9N=zqTHe{bj9kp08moR%cbKYgn9! z-Dr2nQarU6&r!~!;MYCcbhq&@^1Z|d!n4od|Df2>_YT?<4Eay26+ZIcMr$mp^zxI= zaz8Bzifv-@%O5Q})mimeyxWcGcvvhWsIjP7_8QI4Q_nnfPQ8h-NXlv>tL1zWp*?&g zUFnn91~Wxp&ogC0;z)No#0%MFsy5RvV;^Z>WV;)}J#C6lGZkJ8Wp!B7PB^m1^+&em z!jWzAjAsz)Ro0;{A?bs3E(Titn%?`#8%8<5B4SH=_{JNqy1_W7#3-CsNwibu))%)^ z7o43Oe>S&10bYdu+XZr(k!K|x(t`h(e>5Ky+h^tbSB78i%_Vx@O!W^)Y>x&#Cgh(= zqC5|GI(KXO3|cyNfxc(l3KM($2xB&56py_-((Cfu1!!NuT4WRRkN)R9lsDp+_sRz{ zE&dIcdNLB~F*T1im3S$VK*JSqM+|=RvGrMv% zne8tBuf_i%{lAI(Ba{v6*zPs&w6pXS`7Y7%vQ8fup0=5G_mt^c9e%dC@Eh6!6vh^d z(vL8*Jr|91x*kR>W5?9Wy1pU%Wz0P}Z(;u4t;=Kmy70f3<}Nv-#)L-leHG@)C*L2) z$94La<3nk0)wah+^g7^qA`nfNla{?>7L0+f-TwNCfxPrFaR#sssB7gJ+^fR`y6a<74N6j+DiZs(lmX zk;e;Iwv_A1$B9Ez1HPX$cJ^sQv36^~5A!@ux!esw6`z2zz?Q1vva-jy4@OtGM==h^ z(%tSx@QPQW>`n3A?ztWG0h*J$Qrl36P=`y;>(7tH8T&(G|L~goW;ga5tI|obUuk1k2b7xlrF)tB{r(xe8wGxG(qBd z;tJs!iK`4(IMyj=deUIlJ&3w`b@!w01Kr|Rd$@M+{I=9(*^#3E2L^Dm<+<#`nuZs| z-V?tCOJodV1Iiv5W48@+Z=1U@vN!9;{YGnVme>mcYn$uExC=5~sWDsdpGpP4M&hJr zsn-rgdnk)73&wkdKRc>@3jd<2G)x*AUhLqGB^)&|2Tqs z8}~c8wiBnYpb z;WUP3i=O9a0|OWEJB}%N9b$bM$SadzJ~uNS#Mtpxz+oPNOO|Ds7UdltC{^+uPj?}5 zFs$MKKJ$3KHq-6akf&q&GRvG1k$rAye4ksJNs63M-VuY8JR!z##Jok>xEVkmvly>H za5?-MH-Z=v0Rw3wQye4Mo+W-njY&ED%$yIj`^y-UmY+?^^gJ~wvjD#~t`P24A=5SC}WqQ%6J&>{+;?}b0zgtV@0+?9fx_9!}hZu zh!f`ZG1K`3mt6f%Ox1D7?>?R1K*Vr(4q(jGH?R-Q6C43M`^aR4KkwCN1Im>2MkHq> zSCTGO;{O`Pzwm>MC<2f>HmLre;k@wmC$-IU?{-RmBtj3C1C-0Oy0lRjTdhtJ>K;rljq zyTmq8SYWU1O!SC+wucyCsN?--ZOu&vA03PJxQ~1H-hE z>QKm>WskJB+hvT$ME_5m#b@9wejVxK73u86E7X}l=KK|RVE_Ik;|$eNzV+bo0gdCR z&M4mb;h69dpA_H1=Hw{X>Q*?d%@(mniIddpZc84^6EiYwDZLuc%G@*VlrE_uv&Om+%Kj7`aVmwC1AyE%AX^` zlXCy)a5H^Bwo4Onn^?Bwg_71#9f-kLW4_{UXr}#Id#=WORxrdL_((^#*6eakIZN8P zy{AamT$C;%V~G7e-67|1%F3P*n+7|#U9iyX+*U0cFzQOwUJcH>*yj3}K2z4HxG=dA z;*ufn8k|ji7i>e>9WLiTaq1jB?*o|Un~dGA5B#~vw!@3Cr>iv(Zb@e8<9k$ej1{1R zz1205mDRqniz;g(?bTKKY(JT6A=xAJ`U>Rx$WJl%d(zp{FrN3HmdUkZ9=4=MxwG*b z!|!CwrG`kS(`Jm4m{d{BRm$s#1I)D(EZ}W@R;gd(NSE!J*yqkpV=j+acW6UmXf2Jz zS}Ma@iV|PVV0?g2X3G*>Q?V@8?DOBmx3h^&S+K7BgX`*M$`$H3NB;%woZUSRbsXn% z%zlh9qi@hsj1|X@W5w~S6}|2pj_p{E5$(l^yKY_L&5zE(IXZi=JvURfCw7U9uW&?s zVQdwFX$9;4wm@oE4bQC`hxjTX0=OuPhw=Z>i%uU zSP|zrO#CWMJ4i=ZPV@c8@@;8_7aX?M4WlDVJUY@1I+9L5F+%9b-0TfSbcERLzxoeF zOT4y?G`j7w$iqTcsM}#o7t&AC80_IoL&-aA)kmx3Ov`iQdi0~x%hLZ@=`8w$Kf5`* zh_rzi5!yZ|+OOy))_xgruJTn?OLR1mp5Jp>YTagCqlh3=^{dll&3Y}!y* zLv!_pVYIE&y0e?gdbGJarGhHRXEaPo{I>WGD9b9*HwV8}q$<<6ZaXyBU z4@5%A+akeahs;55&lP!KWRdK-g>#ehvJYhibh%&G<-VZH_33h%x6r1fqEBMqhqd6f z^O?a|PeXC$H+Z%WUVQmsvJ+y6Qg)IO*$MlAa)R~fbB^2BqY6{(5bE<&y@s#H{RU!v zj_z|e{B0mlSqN#iVSZQSXs^-k1bsUm^@)}ce|4>U{G-Z;ytRaJ1@}u`FDfyXhH-yC z%522*(dK?>)A=Qg?KdlT9^O9&x)aA57!z6Id=LHmy0u^J9pE{!Pd}2eQa{7>!w}`b zX$RC&(+YYf|R;4s|vDdg$J}4n41aAASDhcZJu! zf_&1uPJX}aHTapF}Ba0v9!9Wqt0M*YxKf6TO7;iKotB zfV^^2`SZ@9&2myOL&qM&+M0C%b=n;+b#GiFUtf7NKaBQ*S6O{xVC?C}!dxK9m`SA3 zb8?wT&(BT+&yt}%6Xc$f@9j;p6#Ii8U47Ev>APOXlI}74UCgWpRU(iR1AlJ?$f6j`wo40&Pvkb zg}JFG2Fgf}=b)^)C_`}Et>2=|*WK16%iOKY+&@?*%VW8zwSA23BYdS-=G`qC&!v00 z`=@tRnU2ONd4^}*WSZErhodM<`A5*6XSdsmdXqnrb|lrjDAR4IXP)KD5AD(Uy`b}> z4p97Fk>{^Yk>`=;PMs&ug!?a7dHzD@NerPokVlV>5it`yB>O`7qU@G&V7mwNLmSsV z*XI`2bJ^vpuQ%vCA4Q&zC-;djW(@sH%>1dy?*pSIXV`m?$8RO?V=@;o&fUH44>7;i zpVudIopb)Gf;u&_PT=ijTqL%~ez*4EP#b-j;r$l8T#ZEvJWbGE?zZcCrO;2`V%@OE zJQdl8`c%@^B0xNuW8FP6?|o+b_C)t6*+*Hg{|bOVKz<2)D|NG$x#Li`N1s*e+UwsD z!lR{g6_kggfA7>~-bQ->bDeJMtlX>%+Wlx>3GxbzJjK{~ea(61^>^#D!~47TGS%NR zbQx3iyjak$=0qF)eUMM68|$N6<#GI(;dxv?nHYu3-H+%zE+_U1>cTjPG4%CjVijjl zC!0F?y%Im=n5p_`9({Q;dj)?o?>AmMaH$?QtKHp)bsWVwwF*D8U)EId{8>;`mk}RT zb*a&HsnRitSswKpfyj2(pWN>Ha2dEFnU!uZ(&02VC_jSm&UALd`gFGOP4d=BhrR@j zcoys?PTN*@guUG@&1`o|l3U$T_`b~8?uKRDwz?Zo-zUktW)y~~zoo;EzAxXG8otIk zzGoNE>i_whs_Pq|ZzTh#&ckc(vK^|uBXoNuA3T3u=dmAoJgD=Sw?maHd@j=P8}1kU zE~0TLUeMn?kME9gKS?SdmUn%WWv*~*yH~g-+JC<8n;IKyEJVB8Q7-#z9)3;yF2L{k z_37+=_#J(*^4$#CFJS#G0*}1Nt+BVd3Hoz{u}_&kXCCeoI3o;1e9i*QlX*BR+=pjL z9S@h7G<?VVbf9rpI=c|*7a$#d+{x!xpgl`aUJ~aEuFo#BKYv>HPW(^$yVG4l zpIURL%e5NF>~!Zz%*>r`0`E)kej(7=&?VxZK%&jXgVqD80*KVSbpd$y1%)X)#z__>Te3y|KJ#L{p)XT z;}}`q7~POt=TmlcoYx;i+ezcbn`+*aP##Q~GTOC_G6}Ss&+oVFN}si}n);G}McMIA zwmb6^U&6zb<6(jX;O6P0{zXo_-3j{L+GoE{hIseF^N5~M`SHkIO7oS+^AV3 z`+3aJcD2omvI{U*&h#12SEG;CH+eMW0XK3&`3ow(0C}3f9Y!Z-FB-m9S-)e%dDUyx zuj_Z>gMqPQkypc3MY{{w*-hD@30?1w9M+OMqbs)50rf2OtLYFefpzw_|_FY%ke?>78Cir-dTvvJ*r%f{7= zs|VLkT>J3d7F<0qT%Sqe+JXCbaP7ytH*ri)JliIrxC>!16!vUxpxRMqo8QO^&5pylsKd)Ws{j%Q*{JVrSz_OB61>Kzs4 zR0W>xAF>HAE0h!a3*L>@z5&=3#SZIa znIPx)6t7RkF6l0jG0v74bSbGbZ4)C(F6@LOdv*Lm>P@hpo6BX)I5r%k54}4iQ*@4> z>bpg!{La+hF%7?6gfSw%CfoV(e)anT^8@{%9OX|Z2G&tm@E4;(@SW|8#}BUGcaVHlsbY@eOqDs{kAxiVWxsd} z^#Tok@Hl0Qzm+rF4odku@7iItXKSoqxgALRBa;JoKW9zzlmzOay{z%W7KuL)N`jB zw>li|H{2)gJg(N^YpAo)ukbC@`D>5xr@s1?!aD>(|9*O0#n0wGz8v&bVt{j=ao$DB zozFq7yL8S+>vGZjUzR@(k8AIzk=D4IIzsB@SFZ4!` z{7!O|8x|~GVqPhKcBUh~+TG@KXN0lx5V5z2*SZk(T)=aOu}XLm(L+Yox(|QjSiV>e zYHGbf7tY@ExK|msWbYr7=?EB^4n9wcPvvZTJ?t;9(TMyMCMIs4+kz-zP>c|mjqGwCz9h`zzJDNMw`KVj}nIZogIS=s*@ z7+A;n(~KuQde^e75n7g=hq0~wRX6qj0Uzyb6}~6tr6Kb&gncQ3@hm0p9hu_PX?~k= zT_)^OKD%{c`qylC>+np@UPm93=s14mK3eqcf9r3(@BXWwG)}GG?}HCvK3tQppP*e%Ky3D_ z7$Z{i>Fdwx&(qGthrG#~lV==}`IYO(6~I*jx)l-}!3X4=z( zX#A3wXByhbe+_A>Kzpw3*S6CI{qESccL@ZX!lfDT3XO#bEgZAyCZB{UmlsfjYe52a+Vuw8UFUtR>!76d- z+f+}!L-_-iQLdr!`2?@vYp5UfPOK~KONbF4F!vuUqin)V2Lk5KQrhi?w7=Y4e;p7! zK+EbYLB1v64a%6$9m|gjP7ip7rw@z$aka9gjoFn4G5;l2+7+ll!-!!%bQ`ShLECZa z)o6GBXr>!9eI{`oF7RpF4!`#Cd5r$*O{)%y?Y)l4AkVD52j4>(ykCU6K5nhb{!QCu z8U^?O)TyGJC-B{7u9qhZFbf9#<8__H?+1O(I9N|+c4xPkFA;YmOFXhPu}^e5`joEM z_Wq4xGg(PpciCoqv$0NnLz}sfe*Uz%JG-grr7U@bHwC+*8)udkSl0oYx?1)Z{V;0^ zo>9&xemWVo|8rldp)EZ9vogyh_EQyj!P?k*@g*&Z`EAAuM%~Kx3hl0>9bDN{sM9ZX zJNDs!wquvV_Y&X!1j=1lP%iE87U0=^1g1<#(wv-|KYRq%{BHAy^MQt)ge zo~7_?S-~^<124g|?t*9ZX<3G6Jq6Dm#xZBNg&S`oG7+%GX!a4zBd*?e!t zoTEcF|Jgz84~dhgumg@L-0N&@q}NTJw_0!ku759(=h{4S#&93~X3X7soP~)C7qI*` z{jwzvfYojX^&UnZzanl+EH&1rN}myk&0#Pm6V}#gLSI%0j?iDFeC%DBj$D|&Qd?I@ zeDSKSi)7#8_f>TY|Kkv`MRhq7Y5&AC3*+OUAK5mGYcw8nP8Y0qb$$V_RQ;#TN5^Tb z%E4HYqr{(-`@gc~3wd!=BJDZ)XjPSikBTgEs>(Y=ms-`dN-(%1LL+aa-%=URfG=)7 zn)ljDzU|ozyJcUy;MHRa zF9Q98b5%9*R%$Tc>t8)K&XXBr_8l9<#hi*d#cPJok@27@k6cW=#H$^_0gowPY>d}y z!Mc?PWsX=^`vXm#MnGtwaX4sJ9?(9(V|~%t4sm*X8f%05Y!LMd&g`@W_uT9i{BFJ@ z#`A28bFj_ne+6k`*En99cXjMMVstkn&0k+pG1A$F@1PAFFP1^yn>SxMCip!3hI`oE zXww2*^S<@5Ola}PhV|=4OT|apd`Twj_3@H@s*gi2UVq9lNb2{IqW4#bkJ$~}n?hW7 z6OIQYU5!rX?epPyw;M@xyI=owmqT8HW5qT7Yo<@e9G~`w<-T0ou-aX8WtS5|9joLF zp2FFbv1Z!Er@ywP%MIbXMr#fD&Xm&-S?n~Li{08t3cOiLVk1k86x8dDqBu)l8HM8= zj&+NF`qw|v>Bt^~G(Tj$;^GfBcFyHPc!(^&G*S?^DXw^h1O0))H8dQ5CY^0D6wYcl z^90>$VOxkrXKt^?9IWw)P5*XxqxG`H$=ZC$j%?WIJ!I`uxB%=+Z(O{5TcSy)QRn+F zI$uNC_^UiE#*W|NG9UU!oK=ulq-bp7&!PQE<*)DYh(U?L30jd^ukkU~iw$p03wVxC zC!G++u*$lc<93+*JnyTb9S-qr1jA3$xTE5q&U{u0#+~5LSgQY+C++(O$D`2CFEP{c zYrYU`>?hTFfADEi3(8j>9B&4krU~@Zt>C;GyZs{Yycbf2(qWH} z_#B^kyG;zx)BS3{8*g?{e*E}$eDjUTosPd8yqr;84`*pkqZ*QZ|z}f-I ze$;&1E&GjrPaHs}$=Y&Kk>WT;-;rPp6RmNy%!-DCIk$+!^%)Bt z3NNJ${KQV3{#STjgY;X9(rNvtdtYfK&%5gRh)Uu%$vtI|ToY-OBYX;I;uw^lK$%{hEE7E`fhxCKfbvG-@Ku1mp0=0GCZd*+Nbc`*3Z|ICgVBFxEar1)z6nmykwPrCZ4~b zpD)1k`|x}+o=?Z~XY}(po-fq-T!ZIZ^z#`K=d#Noj>BX;e*(|%!+ycNVk3StxOU-s z9oHdT2ew_CnSa-`Ox2mwG7(&1Tp?URTn4V=NOKIAH!r>YfqPR3JlAgY#~D{C%#a0V z4#z_w{jH63olji8TH@W4b|fwrzvZ#BFJGkMjQn`ka_% zG5zd_=J5yjRpg(?Gk(LmGQG;nt9O^1qwPWBs9^A%ROh1o{PFkIe$G1U@fX>JSLb)$ z8`{6)_jbD9L%zp~@-?*VB!m6*%=ak=c}n~n1IA6++F0ZO&(O8t-xLOinwy-b}YWsJADK?~kCCH!+6;N;)Iz?>YxCDXk(4>ZcKft0 z`XSVJ!Q$s+-GBbQz%akyDv2{znH$Hp#}+%^`0`@%e7PNLe|ax>hM?0#{=q00Y~z{< ze7^diAAEq{+?oy4bAT>__3>;D)Jv1>$%W2jPaH~hj!F7tRX%^mT9V@l?Qm9tdiJEJR=Ta z$MGf&V|}#X z*+%?dD64Lm!nsSk<#xxy8AM`cf+yj4Z5`+rTDTVNpe%8uK0~lg)T!@|ce%Sj%ic#n zyx!F1*5TL2FXN7pe>?lME@utxxFf5Pu21A1JLxwEev5Jl^req`!e*?W&Fs6ssr}&R z^T1yjOPsHAzM|Y(!604hwtuM0iA0uQZY;q#bzxk(WSxZ)n_UaM7T1{Y$>hWO2l5tp zFg~}e#RY4u$DMl0HI{NmU<^5)>0^OB{Y=^RmwdN*bA#8ZyPZ=2>Q_r=ludCICsNNn+R_UIY?`A5ZuB9=Q{Swm+R-28?=F$! z_9!`SY*qGgvm^Vme&&nqJ?JyHAEZ3F!Q|`TYjf?JLyraV3G#Hvnb2DpeB=aeC6v8HeHhTZ0^fwA47V? zxL}?xotU$>uV*kWSBb_+{qto<^NgcT`Is+~v@=G^xd!X(UA9y6#~$ta4D$OQ%Gs~^ z_%Pb*)BCH3>vFpG5ym(i&b)=WgKOd2m@~NIf1Q*`;+p-|KY#5&`tUpIelC9J;I{|A zp5HBgHwThxE(_+I6&mytpZi>oV8eN_);N|WI=%?$WG(e(Nv5B}d_u)(h^rtv2aL%k zJe$R|HLAQM&)_-oG8_{;Z`gJ*bx%nrAZO2#!F`1Je`7qJ`&JyZ{DSj}a&IP0 z3DLKizL9*#{Awnc;%gbGTXgV863+(nYJ?hJ54)LddR>nx`PtoitXJwdC{LqKV^m$2 zEX3RzZv_U5nLmG-mcE&jb=v#D`)tF0$8#^gX{sEme;dx9{<;+hy?hQ}ja-8> za-gpJ;AN3c$Jdm!6=w7*#-u9y!I*Z;Da?yZ+zz9ysOM_|gK4DQn*+w}a(|CJZ%zMnCn+m-)KzvI{A!DliKmrSr{T%2@2Tad?+Q{>Thiahv?>#!VoaDKKSpBsg? zs(hB6BA=-R`LNwSb3z6C^IGDh7Uee;`Ay-x)4td~B~R|qYa;Y@tKA7SC54wO6&$^e zYJ6AOtow}mHvAvB2>&-BpZ%Vm3(xi^lO>$v^zYgdOSuOwJ({1P<1z&_o%qPdkLK$b zBMSHbXU0*9J9`%X2OZ6N_5Q^hpTk%Z8?1KZ4H=J?cr8D$w1BtHAq^ zFZV|liM%SXwfmsRtT-1YECVl^JjizbqcXc$W(;N4tvXo3GGpmnbz8fXN!n%8*Z=K6 z{*kxU`Sl;=wGer6AN)sYNJF0aU(%$IX3PJQCXF;t{4Z&iAk9zymo&?e=3(+?XAak8 zi2N1v>fX^w;aflG?;pZdE5NiY)-6yLN7?Ho)GcJGTllorEwqbnVFYyxHgyZ1mUu3n zZo#luN~{TAqRm;~4PNse&^(MqD08R1>&0E!lK4{5HH^mIlLWsQ);t|)z0tkg{ZdPR zo;n93hBKOd#sT8yFwGqB?M%n-h$%~Zv^$8c&UDuI2KS3l0^^$-iRd}+RKxITii%P(FTbwZRUXCw|));CscJF{c7jrL;$I1iP9 z=O{}*5=Q>TSn$l_OMfSi`*j}Q`zP}VpCXS^oyXFDB9AX4kH6QBfB7fB5B`HXeD0sj z<5caKtn--jPvlYB`uE#0^`H3u>!;|4Dof3&mQ#FREIah_I8|Sa*Y!B}@6^MSi*s#} zm*hMp|IS!}G2?r0aNYge<^6eL!D$`C6=&)gZ$aZG+9R&x`q?p=F}G6ABOeuP{)YpR zlue$7^wVFr=Ah5I!}fTDzc8kmUKczwv&>qQx9al#yq7Q6$f1FOrE&)Rx9=a?__=E{ z!LcXDswe*Q7IRN_V|HKmm+^hsO{pSv)HCB{Zr_(d+=^V9Q+f$F}L=)C6T-AFCblwMSQ%)c2KW5Bi?0? zNi)B@?5{AUi+*pEEI;(9em^;*-rt7z_j&J8&U*cx?@GJVxi8{<%6lJJeyFG5{oQ!C zq#*C*1@FE}pQwWGx(eRikFxK=`|g5rzpdY=^)sfsmuFPu3m#74=;A%kv!rEw&vfk9 z8jRO@>_faCQ9#Q=W0h>Xn0DQ(X-?tXHnhBul*;}=XCnj|77}Cb^4xDq)%KP5ghO;?hnfM*~jns-LLd_r1L$m zUpwr(1^?i?|M~~tE&K=H{o5(N^LVs-KY_8KJfFHJpCK~Guf~;bX644CC&|~vMo!C# z7!R3rgXhtMXZ4E=#V>Y{L-DLrH9ZpR&}XDhotox=v4-8yEe4_fXMe!q0zE@|id#?E{Cf2{TPxQ<>ZfJH+MW5^G?J}%e zBIXc3ec^eht2jGa#?*{-o6l01wA6=rdJOM<4c>3m?>|ahk)rpjUMvdUQ|~t2OCPGt&D8hQyWQ+PA0hHoxu@Q3 zgs#s5l$}P|+=IGx*<*CQ=HlJASXV3NRB@aVw#ZApv0|Fma_YQNPD@jto7CU$rH&Qj z{8x>uNc`b$q#@66uTJwi($KyxRnsdmK7B@~?TvM}jB{_%ICoz9M~w0Bb)LIL2dC$irY}aWLqBm4!eN3nMkxuip zP7@QIqsr$>ohGf*5ErBY^RgA!R9v%h#c{30wI0_zO$U4MdpE8HxbDN1!nJJdaJ^pK zpj}y?JL5CQM0Zd@%pK60dq=07X7g%i!{sSA+>mm~FDH)o=f95UEySxO?mND_{Qjf) zMOUW84y64Y`Wr<>voA;H>h04<_8rGO_!>~o@`&xkM96F+Kr9(}rgTwskwR|gJq=w?ujbfBl_- zfuBSo?T)XUZJjB)P`@63uN{n|PP<#;nb3yN7rG($Cwxad$cZ%`hINmd)#*5&|De;o zUX+fy$ybYH$kdmx-u}yIvprkznW;CStfb27IVpBojnU(#KdtOJ9{RMh!QO0jy2X2{ z5mz>+#JhPXAfa*AN1KT4TXtJT>FUVI(b*%IXI#XlP1>#~zZ zm(A}t;QLqkz2M!69=WU~-sv_PolXzvM-SdNeEVp=8~3dHobysH`F{Up)CHy7&9Rg_ z7td;AolZA(eS&kD&e2ZC@9R0p7>$;XG$E4n`+Coy48OKKS?(|IJcC$}?}(3BFZVCd zrk-kIs{2|xDnnMPTG_Amx&QI!K;DbJMcVYK1uvD5HZ_i$mf2m}nCU5L%)H~#DZL&x zYh8OI=RNsJ;#9pI$hT;Fppap_#xs9VpXEt|E&%;*(RjW=rJs3T{FB}e2%l4I>sF<8 zDcobdm@F*!oTwe3ZmLn+`QP@o($RW0QxP54hVRbT?>u_v;p`5}J2^aWpZ38cw(Lgh zrECoJpS~}pA+ecUNBb`73f5vxh@F*|brbV^Cffc5#$<`~x+ZvL?#ZT| z*_oIV8?Bw$Px2T4U(DYLJF}Z`|5V-1>}Fg~`>`#ox^A$aX(61RNTQ$=rht`+81mr-=Cdh zOmXNdUlNMtI&tn@3%bFxvsJFf_W|PkqTQ6ObFBWXzhjIn>iZb~!NZ*PFo>&~7`p&{ z^p);|{;QI9For#Y{`S;!WRiAme7#$fNIwxu;Ou4Gm@{MPCqU00DUEezOXDM)5%@J? zTV4O{-3PxNvvVcr*OGYp@%z!w_s7$Z_~KjLV4}x;DgF}X`_0*s1mE49yC3=a6Zo#Z z`(Q9ZpU=B&|Lw_x!DNrS2Wk0#FrIQ7r;z^67TiNWeg&sLy52QnFS(I;(D~7A7?Wtw zc{JLUEs3UZ#@H&l>YB(h(Tz8hXIy_px7rJS{QVmL1j^o(y%GNhk7?I<{#N+Es=V8c zY*l_F=hkIPe33;JwbrVVF%e&d)s!r$Do<7uf4L^M-W?%!lsBT>^uxhu`tefKuQZx| zWB~OEpdL&UoRQA9&A7&{i7s4!^V?9&@__hVcJVkJ%h<53gA`?=}tHFKxfHL+#G%J_vY zqj1lfPrF@W5JVMTgJmqJv?3|7*|kJh-s3)D^@=U#6pamALu_2o>wu9I-qG7*84r-Y zOXvEA%b@04E8Krub1Yx%Hxr9Sof@qtzISx80z7O*^4)&1F@J6D$??3RvE-o5a~bFk z<4=rNzDZ@q;Qq?ks67QXPARuqpM7>6Q8qjYtvd-OR=K{!$3(Y78yebU%%QzbbhUeg zXI}Kn5%USzSLvsGOqW6a?@072+PoeP8!6|mcU3&tCw2bEv>!icOrEjYn3lW;_pYfg z4Yxs_A6p?l%8WQToqc!6o3Jt}#xo~!r-oImn0lzG{^{e$-Ro_(IT2Nw2I z+gr+JDDw`fzO-z&Sbl-SX;tyAg$jr{Pw8hu=Wch$5D zp6B(cUQ>)ez*rcEh~bjx6aAeLT~pMrH#45oV85cDDvoO0nCHDX5oS*{u99QPR0;d> zFGc<6$tauS-Qt5XFz?yin7f|Mnel6JUJ;uAT1C>%g|w{jK#Vreoz96P%4VLv{QFS% z5w~@K?yMHSH~MSE5?$geHxB*G^dCj~jo?Xm#(d+}V-lCJUUb2|ZcC)gd1P{jy&dhU zXW-E)`n8+mX*;V#Tir%JeA5&tt} zt{a>Wtuh~$y3gJvn2gy9%m>!*$-njIpQ9ZB>R5$3@(eo)?LEr)VlSz)T(hgrcHTT0 zjDH!OC9+-8fX|5US~`1zXAO)mF%l{s>U3JZ(&rACe#h7SfD>T6%z{1d{HB*dYhOJ` zUnknlpWpOM^}WdF0(rjJ4n}Pj9r40TEIapxd6i=}J>#CPG4wu#J^fHcVv8L*Dd8)6PvmnW&?Sy10!^oo-#-Gj7Af&j<$nd3ZKFHb$4k zIKi1?-3Viey;+~ZrlMciAJmmKHYp6px`&@BDN!+RE~#sJ=2E}dC6M-{1Ngs$HXsei z-~SKFakV`AEbLvhP5SB@uJ>NiF^^4aOcq9g}+|XMBd=_9+t6`(rsADP z=RmhZq;G$HXFzE92-G>I*H58dp>g-eo&68@x$}8G?FK!zda}eOmAxiLdsT%E&Hpdt z8bUt|>hkn+od3)3|KhgF$?<0^-}U_7^qM-aZr`B)+__ErBt5Y<8gO6nV9JTnhu*qf zd^P>CbW?L;x)X>ju}KSPC-YpmKYt$52CO^n^O|-Hn`R$U6##4pMe-H$(mCZcOXl+Z+9RT+ph^A{OpW9VNOaw|Fj(+Ns+{lV; zKfi8$)tFu$imuaFtR!gPRpN({3tnCS)1lwVGX`Qs&N*>X!nUX__z4!cJ3)*mOFU;X z2MWM9@Ht#cc-HaWAlS>!=7$M>>HCqt`FAz`RLJ%hG4jtjebrHvd1|O!`Kd++22HQ{ zBS^7fw#o-798Tj}X*u@nGpZ1TLkuuO66qC!TK4jET~rIDB5E;MQxl{x$~qX{U(_85uY> z2U==yPO&zR2K_$p>dMp#9h3b>kuYIpIzS(si4>r|`a@pWFDyhfN>RCN$?e-$rJb&<#aLWeiLCGE+JX|O^pfF5z5_0{8ANC za=UdrT6UX@P#ktvr-)`DsM=W;zZ8|VViroAlE0+imHqZIw&`W|gw#7=_m@vz4PSh=+p$NpwO;Zm`GOO-ZS;vL(C zc8U4^0Qs;e-q5!r!Q8mLE>>2-R@;k{z}=!sY(l?K6_^<)C5NWEH+`4TIU2~Kcg3u^ z(@)LgG^(2mDn0Ycg|PhE2-)7&)z*0)pJCT%>#5x`L%|j9!=heCncWff#u9FPYq}vZ zGmup>q)!HK{3?D*F1;Jz(feni@I-P?7Fj2KN_jk1*Uouh8^FBV`=Cr`!*J~GXu&t5 zLRU7)=#TTQxQ&HTiYxhI|2--MPm#GGQZ5bWw8x-B5pvQYAuS4vNo@~e=fU*Bs4sxr zjDDHitB({rhDZdI^k#L)R9`Wkzpi$KzOvqs-U*m1K?p^K+RmIx^aWfX#rfMN+HE%}whj2Mv4B$u#NedZ0R~f?}Yp%r=`heq^W6I_%SMS7B_+|P# zOeY5iEwSt(spC&#sNZv9J}H+|3Cs2PScIk#_SF;v_zv$Mw~k8cZT$MBbNleDVoupH zq`F*teovWkpZ;Lf;CyUH5fy}xe?+6eX}bA5clDxrR*6$hekYfC5Soi`?(Wpd!_0Jt z#`>vQ8f)2q9TXe);Hvfxe{z_kW5xFhPEDfiWZDJUd1DsW>kSTqOws)5< z0DptGR@s2)1E%e#980C895!y1^K%`1LNm0_009XC4RkHS*}e{9htgO7sM|o>5hGS4_JB$igLV=Qak1k*zsQ3^)_`hBD}rq zcCEX+X2`$Oe_FYc)OV)w1!6zhLrWQEP}S{$OyBH zg$%2Ztg7N)nKaBbMC*h%Z8}LZbrc_s+CwreLJ@LKybv={gb+HErn7`Uel_bXGws1a zq|O-~7|4Fglg!EDiR6mj0KEwvnZ}P^@lmpvQ2Ks9xwwbf6<<4Fj40F_J#2OvKY9q| z8PZ@T#GklPW}<125^=FghvKn7Uaz8hnOG&wR|m=9H^KMM(M74qx`Q3md-9i}-@ZY* z8{CTBvIV!c=y|0PjRNE1LaKYuW5c9y*XETCt-?0XoIuiwj(%<8f8WAYa`Kt?d6Gr= zOGyQZtIG!AoiV8JKV-D`JCv&Y8z%Cvp>Sdl><8;ZFke6-aAm)^E$MKxSGz**g(c36HbAVVNKwn~Fja<$v zkL(W`o7Z;gF;|C_1|qaeZk=rs2xo*kDvT0|6h483zyu&fuUcpt#yJot*dknR*Qgoj zGZ-*kk-;CbNl?JPh7~-6I@NcOUzq~4cL=s#LpeaR85u&>Qf3b1w+irz4=u&LKP4@c zsx%$pPkq+@gJSh11f{u7y_DJTgC*bWMZ0AfJYB>28pH}v|=ygm^wFEccu2lW!?C*9)z*tRB z`!;*As9|8Y;5=b*GG0YFd-Xg&d|*h?N>bL!P=73;4=Z$spHYEF4?pw7i!Gs7$7m&c z`T6n8Gi0vvrO+%TVcw=?RkrF5tEIF9J#_NCD%n|ma}2x|Y}PVa2k@1BBnw%|YOJju ztrT+RC)t|l3>EfZgO~QeU4pL&=96*ToZU0cscf+&KHz|daT5rH ztVOW{w=$t;f_P8`@@O6Bvg)wJ;%EF!QWLdW>g z&Vyjs^-!ySiC&J?hr_xp&t;feWf`(^pH?vgE6Z7c&#G>TyfdVW_lbP|c;i~f-7_8$ zk6V}PX|I9|-)uJzZoV$jeGIGQ>sX8~t8CVCfuCGE=sUmLY+ zY#LgHxcEFMzFY9Z>g>r-(5}rR9l5kwC*j?O9ze;;U`PPliqaFG(J@lyKB@25KUkIzT$1kR|{oY*VV0YvGCGRdGaJwv^mnbgNB%d+h4WXoAuu+7SE~68;a1Xp!)#* zQ&)&>TK%cu@g66(iBv^Qa&k z&6RpKWfX<{SF(e47=zkV@Q(42c+P6T~D4knYn{4I#S zbJok^4h!SmPQSocK*#9qfty$IBI9h}6bH{woY~~s3;oey%t4?Ge5)KiU*ZXcxW7yE zHkWYyV$6FeNn1%Ryr;Ao57-6!r_Tey)O1>jH#tzH4v7=ZBWK%t|Bn0-5;IOaa6kTW za45Ioyb|xX#A>BAWgSejKzoocp)=;fa;MbG;I4Pzn3Siw|O+3s9X+ zdFOqvi^EhQgT$G&M8Cn=;1dO<+3gR(qKd->6*mUTgxlY5KU*Zt%A`_S)-4}OyQz%O z-jKq0&$A6#FBK$Xd0Z{9-s9;Ih6oy~6mm5IScjHOznLwci?LDO!OANVZbA~eIY%i1 z^rBOMnnsNw{n@y)4GF$w2hew>3;(+tlX;gEnsfNiEb)+k$D~S`-2KaeLpO`(#>DKa zIUSt>ukU|pgx^=*%kjPj)tj*c1>B3q%1vAVR-fHaQoMBfy3r;kF}57HBb-dVqzdqP zuA{tnvslG|AOCF;HOg&I|(cESj4w3i5JYo8Xk3e!Sa z`{+f}|G~?wLoTV|p35)MNe#_)ob!z1p@`HjAI<1Ud571sY?{AnK6`$68vT5Vo^Zzn10DrF~HguR$D%Z`7>&P|?b9%Um*UGa_A~)Zm zNa}>S+KPtaYFP&|MS8grZl&S1kSSlbP#UyFxC=bhkLDO5jzMEJbLxD=obm&4!OQZ= z44sDMFv`CtjmO{%n5lf~PSIsZagpVsqpPJ~Y!AX(;K@p`W{xOgR zCeSa__|r6kAa0hJF@tY>tcHFb9V7LX@Vk{CWKufy4JI}6(zKrYk!wqagmSHoYk}5iH?Yl4vp86a{UXJ}-S9rbgf|&Yq#``8-6soIe*857OKpp-P-hSAI zg}toI&4~?|>63cbzLjLd@z#pfA{si;9*-;-ONnLD{bj7(A4)6r8L-;fZ=yq}=aIL3VJ)W!Cx(|)L z|9KNdzQ1Y6y~Fah*1xs#sXSFEYv5FE+fYKEnDSern4`IHjV7L8hr>vp#8py>k8NyG zUOqB`&^|+=$Nu4O-Q}?J6b^&GO`0=j|A+DdJp1w47J0p9vnsf+_#QU7xpaOs5FvdG z!OV^E2Ufq%!|f4WpJOx^F&=+EDcw9{=QvsmNkhIjEFMUhQ#t}ytwuHo`qvuMVyo-* zb~J}bVJ|NL$1e}OX4kX+VlUYck(P$<^>sE0pQ?8p5i!CBCm7)tkX>fY zoZIx-?+^ydAH;-n|7S_w@a%WgW12#ib}bjG>G4+SB%Lld(XA9#p!sE<`&(-w+sO%} z;aR%5EJSGnfEKMjoN6LjF`v<>8r|YlxGKl3VP2W>DbCnz-@T8@whtDY2WfK-=SsZD z;8O9c)OAQ5qWs5%&^XF|xW7k3=jxE0;;AG^dPR{fzO@(B-L5b5@t>WXu7&D}6iR>p zHjMq^Na>ws#yrdTv;YT=Ct~rB?eJEPfb0(d!*$q$AZp^<$zpKriblBF%V4<8Yh##} z!iPMML-OyeFSvP#gfF%JZYFyh}qKfBv!*J1Bi!U4`d zikCka2zwDSt#Ekn2$?50$~QB(9s+R9=+pNv?ds)p51$D;h+;eB{Y{&L!)wUr`zLe_ zQq=%_I&C!xmua(taQBq+^7v&lpStslkU)ubCfB7HIiTi7mUk-d&kqhgR?s(u+((E1 zK*0iI_I?3#hxGDp;e_`g{bT+F>Qm3sC!E9X{!iNmardKT+U648Fm)s#)@4d(|6?wR zPlUoKLQr8&RL)HTc?Rh#PXyfCZxo;ig#?xfXJGhPlxL!um5XLWofkJS!XXjB+H!Jx z8s#!9>v)7-+2r`wcV3OC3+S6v%rB{FA6xQNK!lI1oo`2h7-fZv*@QJwU|Du7u?9ps zP|;@gp~(N?>dOs>w5Ld>R*mXcM<VyuGE_Vy*8@aywJaJfs{dcKJuv#(IkxzNxMi$J4RvOq)0C}@SPG=XsV&5!> zaD6g;Qi3j^Y=?RpBh0±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