diff --git a/checker_gen1.uvoptx b/checker_gen1.uvoptx
index 999cd07..2c8e293 100644
--- a/checker_gen1.uvoptx
+++ b/checker_gen1.uvoptx
@@ -1149,8 +1149,8 @@
- rt_thread
- 1
+ rtt
+ 0
0
0
0
@@ -1161,598 +1161,14 @@
0
0
0
- .\source\rt_thread\libcpu\arm\cortex-m4\cpuport.c
- cpuport.c
- 0
- 0
-
-
- 6
- 51
- 2
- 0
- 0
- 0
- .\source\rt_thread\libcpu\arm\cortex-m4\context_rvds.S
- context_rvds.S
- 0
- 0
-
-
- 6
- 52
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\clock.c
- clock.c
- 0
- 0
-
-
- 6
- 53
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\components.c
- components.c
- 0
- 0
-
-
- 6
- 54
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\cpu.c
- cpu.c
- 0
- 0
-
-
- 6
- 55
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\idle.c
- idle.c
- 0
- 0
-
-
- 6
- 56
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\ipc.c
- ipc.c
- 0
- 0
-
-
- 6
- 57
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\irq.c
- irq.c
- 0
- 0
-
-
- 6
- 58
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\kservice.c
- kservice.c
- 0
- 0
-
-
- 6
- 59
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\mem.c
- mem.c
- 0
- 0
-
-
- 6
- 60
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\memheap.c
- memheap.c
- 0
- 0
-
-
- 6
- 61
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\mempool.c
- mempool.c
- 0
- 0
-
-
- 6
- 62
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\object.c
- object.c
- 0
- 0
-
-
- 6
- 63
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\scheduler.c
- scheduler.c
- 0
- 0
-
-
- 6
- 64
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\slab.c
- slab.c
- 0
- 0
-
-
- 6
- 65
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\thread.c
- thread.c
- 0
- 0
-
-
- 6
- 66
- 1
- 0
- 0
- 0
- .\source\rt_thread\src\timer.c
- timer.c
- 0
- 0
-
-
- 6
- 67
- 1
- 0
- 0
- 0
- .\source\rt_thread\board.c
- board.c
- 0
- 0
-
-
- 6
- 68
- 1
- 0
- 0
- 0
- .\source\rt_thread\core_delay.c
- core_delay.c
- 0
- 0
-
-
-
-
- soft
- 1
- 0
- 0
- 0
-
- 7
- 69
- 1
- 0
- 0
- 0
- .\source\soft\buff.c
- buff.c
- 0
- 0
-
-
- 7
- 70
- 1
- 0
- 0
- 0
- .\source\soft\mystring.c
- mystring.c
- 0
- 0
-
-
- 7
- 71
- 1
- 0
- 0
- 0
- .\source\soft\mystdlib.c
- mystdlib.c
- 0
- 0
-
-
- 7
- 72
- 1
- 0
- 0
- 0
- .\source\soft\list.c
- list.c
- 0
- 0
-
-
- 7
- 73
- 1
- 0
- 0
- 0
- .\source\soft\signal.c
- signal.c
- 0
- 0
-
-
- 7
- 74
- 1
- 0
- 0
- 0
- .\source\soft\bytearray.c
- bytearray.c
- 0
- 0
-
-
- 7
- 75
- 1
- 0
- 0
- 0
- .\source\soft\sort.c
- sort.c
- 0
- 0
-
-
- 7
- 76
- 1
- 0
- 0
- 0
- .\source\soft\cJSON.c
- cJSON.c
- 0
- 0
-
-
- 7
- 77
- 1
- 0
- 0
- 0
- .\source\soft\debug.c
- debug.c
- 0
- 0
-
-
- 7
- 78
- 1
- 0
- 0
- 0
- .\source\soft\crc.c
- crc.c
- 0
- 0
-
-
- 7
- 79
- 1
- 0
- 0
- 0
- .\source\soft\mymisc.c
- mymisc.c
- 0
- 0
-
-
-
-
- task
- 1
- 0
- 0
- 0
-
- 8
- 80
- 1
- 0
- 0
- 0
- .\source\task\prot_mcu.c
- prot_mcu.c
- 0
- 0
-
-
- 8
- 81
- 1
- 0
- 0
- 0
- .\source\task\prot_uc.c
- prot_uc.c
- 0
- 0
-
-
- 8
- 82
- 1
- 0
- 0
- 0
- .\source\task\moter.c
- moter.c
- 0
- 0
-
-
- 8
- 83
- 1
- 0
- 0
- 0
- .\source\task\commend.c
- commend.c
- 0
- 0
-
-
- 8
- 84
- 1
- 0
- 0
- 0
- .\source\task\transmit.c
- transmit.c
- 0
- 0
-
-
- 8
- 85
- 1
- 0
- 0
- 0
- .\source\task\tran_for_checker.c
- tran_for_checker.c
- 0
- 0
-
-
- 8
- 86
- 1
- 0
- 0
- 0
- .\source\task\tran_for_coder.c
- tran_for_coder.c
- 0
- 0
-
-
- 8
- 87
- 1
- 0
- 0
- 0
- .\source\task\tran_for_coder2.c
- tran_for_coder2.c
- 0
- 0
-
-
- 8
- 88
- 1
- 0
- 0
- 0
- .\source\task\handle.c
- handle.c
- 0
- 0
-
-
- 8
- 89
- 1
- 0
- 0
- 0
- .\source\task\handle_for_checker.c
- handle_for_checker.c
- 0
- 0
-
-
- 8
- 90
- 1
- 0
- 0
- 0
- .\source\task\handle_for_coder.c
- handle_for_coder.c
- 0
- 0
-
-
- 8
- 91
- 1
- 0
- 0
- 0
- .\source\task\tcp.c
- tcp.c
- 0
- 0
-
-
- 8
- 92
- 1
- 0
- 0
- 0
- .\source\task\log.c
- log.c
- 0
- 0
-
-
- 8
- 93
- 1
- 0
- 0
- 0
- .\source\task\udp.c
- udp.c
- 0
- 0
-
-
- 8
- 94
- 1
- 0
- 0
- 0
- .\source\task\mod_signals.c
- mod_signals.c
- 0
- 0
-
-
-
-
- codec
- 1
- 0
- 0
- 0
-
- 9
- 95
- 1
- 0
- 0
- 0
- .\source\codec\codec.c
- codec.c
- 0
- 0
-
-
-
-
- rtt
- 0
- 0
- 0
- 0
-
- 10
- 96
- 1
- 0
- 0
- 0
.\source\RTT\SEGGER_RTT.c
SEGGER_RTT.c
0
0
- 10
- 97
+ 6
+ 51
1
0
0
@@ -1764,6 +1180,242 @@
+
+ rt_thread
+ 0
+ 0
+ 0
+ 0
+
+ 7
+ 52
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\libcpu\arm\cortex-m4\cpuport.c
+ cpuport.c
+ 0
+ 0
+
+
+ 7
+ 53
+ 2
+ 0
+ 0
+ 0
+ .\source\rt_thread\libcpu\arm\cortex-m4\context_rvds.S
+ context_rvds.S
+ 0
+ 0
+
+
+ 7
+ 54
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\clock.c
+ clock.c
+ 0
+ 0
+
+
+ 7
+ 55
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\components.c
+ components.c
+ 0
+ 0
+
+
+ 7
+ 56
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\cpu.c
+ cpu.c
+ 0
+ 0
+
+
+ 7
+ 57
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\idle.c
+ idle.c
+ 0
+ 0
+
+
+ 7
+ 58
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\ipc.c
+ ipc.c
+ 0
+ 0
+
+
+ 7
+ 59
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\irq.c
+ irq.c
+ 0
+ 0
+
+
+ 7
+ 60
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\kservice.c
+ kservice.c
+ 0
+ 0
+
+
+ 7
+ 61
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\mem.c
+ mem.c
+ 0
+ 0
+
+
+ 7
+ 62
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\memheap.c
+ memheap.c
+ 0
+ 0
+
+
+ 7
+ 63
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\mempool.c
+ mempool.c
+ 0
+ 0
+
+
+ 7
+ 64
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\object.c
+ object.c
+ 0
+ 0
+
+
+ 7
+ 65
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\scheduler.c
+ scheduler.c
+ 0
+ 0
+
+
+ 7
+ 66
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\slab.c
+ slab.c
+ 0
+ 0
+
+
+ 7
+ 67
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\thread.c
+ thread.c
+ 0
+ 0
+
+
+ 7
+ 68
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\src\timer.c
+ timer.c
+ 0
+ 0
+
+
+ 7
+ 69
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\board.c
+ board.c
+ 0
+ 0
+
+
+ 7
+ 70
+ 1
+ 0
+ 0
+ 0
+ .\source\rt_thread\core_delay.c
+ core_delay.c
+ 0
+ 0
+
+
+
eth
0
@@ -1771,8 +1423,8 @@
0
0
- 11
- 98
+ 8
+ 71
1
0
0
@@ -1783,8 +1435,8 @@
0
- 11
- 99
+ 8
+ 72
1
0
0
@@ -1795,8 +1447,8 @@
0
- 11
- 100
+ 8
+ 73
1
0
0
@@ -1807,8 +1459,8 @@
0
- 11
- 101
+ 8
+ 74
1
0
0
@@ -1827,8 +1479,8 @@
0
0
- 12
- 102
+ 9
+ 75
1
0
0
@@ -1839,8 +1491,8 @@
0
- 12
- 103
+ 9
+ 76
1
0
0
@@ -1851,8 +1503,8 @@
0
- 12
- 104
+ 9
+ 77
1
0
0
@@ -1863,8 +1515,8 @@
0
- 12
- 105
+ 9
+ 78
1
0
0
@@ -1875,8 +1527,8 @@
0
- 12
- 106
+ 9
+ 79
1
0
0
@@ -1887,8 +1539,8 @@
0
- 12
- 107
+ 9
+ 80
1
0
0
@@ -1899,8 +1551,8 @@
0
- 12
- 108
+ 9
+ 81
1
0
0
@@ -1911,8 +1563,8 @@
0
- 12
- 109
+ 9
+ 82
1
0
0
@@ -1923,8 +1575,8 @@
0
- 12
- 110
+ 9
+ 83
1
0
0
@@ -1935,8 +1587,8 @@
0
- 12
- 111
+ 9
+ 84
1
0
0
@@ -1947,8 +1599,8 @@
0
- 12
- 112
+ 9
+ 85
1
0
0
@@ -1959,8 +1611,8 @@
0
- 12
- 113
+ 9
+ 86
1
0
0
@@ -1971,8 +1623,8 @@
0
- 12
- 114
+ 9
+ 87
1
0
0
@@ -1983,8 +1635,8 @@
0
- 12
- 115
+ 9
+ 88
1
0
0
@@ -1995,8 +1647,8 @@
0
- 12
- 116
+ 9
+ 89
1
0
0
@@ -2007,8 +1659,8 @@
0
- 12
- 117
+ 9
+ 90
1
0
0
@@ -2019,8 +1671,8 @@
0
- 12
- 118
+ 9
+ 91
1
0
0
@@ -2031,8 +1683,8 @@
0
- 12
- 119
+ 9
+ 92
1
0
0
@@ -2043,8 +1695,8 @@
0
- 12
- 120
+ 9
+ 93
1
0
0
@@ -2055,8 +1707,8 @@
0
- 12
- 121
+ 9
+ 94
1
0
0
@@ -2067,8 +1719,8 @@
0
- 12
- 122
+ 9
+ 95
1
0
0
@@ -2079,8 +1731,8 @@
0
- 12
- 123
+ 9
+ 96
1
0
0
@@ -2091,8 +1743,8 @@
0
- 12
- 124
+ 9
+ 97
1
0
0
@@ -2103,8 +1755,8 @@
0
- 12
- 125
+ 9
+ 98
1
0
0
@@ -2115,8 +1767,8 @@
0
- 12
- 126
+ 9
+ 99
1
0
0
@@ -2127,8 +1779,8 @@
0
- 12
- 127
+ 9
+ 100
1
0
0
@@ -2139,8 +1791,8 @@
0
- 12
- 128
+ 9
+ 101
1
0
0
@@ -2151,8 +1803,8 @@
0
- 12
- 129
+ 9
+ 102
1
0
0
@@ -2163,8 +1815,8 @@
0
- 12
- 130
+ 9
+ 103
1
0
0
@@ -2175,8 +1827,8 @@
0
- 12
- 131
+ 9
+ 104
1
0
0
@@ -2187,8 +1839,8 @@
0
- 12
- 132
+ 9
+ 105
1
0
0
@@ -2199,8 +1851,8 @@
0
- 12
- 133
+ 9
+ 106
1
0
0
@@ -2211,8 +1863,8 @@
0
- 12
- 134
+ 9
+ 107
1
0
0
@@ -2223,8 +1875,8 @@
0
- 12
- 135
+ 9
+ 108
1
0
0
@@ -2235,8 +1887,8 @@
0
- 12
- 136
+ 9
+ 109
1
0
0
@@ -2249,7 +1901,355 @@
- readme
+ soft
+ 1
+ 0
+ 0
+ 0
+
+ 10
+ 110
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\buff.c
+ buff.c
+ 0
+ 0
+
+
+ 10
+ 111
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\mystring.c
+ mystring.c
+ 0
+ 0
+
+
+ 10
+ 112
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\mystdlib.c
+ mystdlib.c
+ 0
+ 0
+
+
+ 10
+ 113
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\list.c
+ list.c
+ 0
+ 0
+
+
+ 10
+ 114
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\signal.c
+ signal.c
+ 0
+ 0
+
+
+ 10
+ 115
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\bytearray.c
+ bytearray.c
+ 0
+ 0
+
+
+ 10
+ 116
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\sort.c
+ sort.c
+ 0
+ 0
+
+
+ 10
+ 117
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\cJSON.c
+ cJSON.c
+ 0
+ 0
+
+
+ 10
+ 118
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\debug.c
+ debug.c
+ 0
+ 0
+
+
+ 10
+ 119
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\crc.c
+ crc.c
+ 0
+ 0
+
+
+ 10
+ 120
+ 1
+ 0
+ 0
+ 0
+ .\source\soft\mymisc.c
+ mymisc.c
+ 0
+ 0
+
+
+
+
+ task
+ 1
+ 0
+ 0
+ 0
+
+ 11
+ 121
+ 1
+ 0
+ 0
+ 0
+ .\source\task\prot_mcu.c
+ prot_mcu.c
+ 0
+ 0
+
+
+ 11
+ 122
+ 1
+ 0
+ 0
+ 0
+ .\source\task\prot_uc.c
+ prot_uc.c
+ 0
+ 0
+
+
+ 11
+ 123
+ 1
+ 0
+ 0
+ 0
+ .\source\task\moter.c
+ moter.c
+ 0
+ 0
+
+
+ 11
+ 124
+ 1
+ 0
+ 0
+ 0
+ .\source\task\commend.c
+ commend.c
+ 0
+ 0
+
+
+ 11
+ 125
+ 1
+ 0
+ 0
+ 0
+ .\source\task\transmit.c
+ transmit.c
+ 0
+ 0
+
+
+ 11
+ 126
+ 1
+ 0
+ 0
+ 0
+ .\source\task\tran_for_checker.c
+ tran_for_checker.c
+ 0
+ 0
+
+
+ 11
+ 127
+ 1
+ 0
+ 0
+ 0
+ .\source\task\tran_for_coder.c
+ tran_for_coder.c
+ 0
+ 0
+
+
+ 11
+ 128
+ 1
+ 0
+ 0
+ 0
+ .\source\task\tran_for_coder2.c
+ tran_for_coder2.c
+ 0
+ 0
+
+
+ 11
+ 129
+ 1
+ 0
+ 0
+ 0
+ .\source\task\handle.c
+ handle.c
+ 0
+ 0
+
+
+ 11
+ 130
+ 1
+ 0
+ 0
+ 0
+ .\source\task\handle_for_checker.c
+ handle_for_checker.c
+ 0
+ 0
+
+
+ 11
+ 131
+ 1
+ 0
+ 0
+ 0
+ .\source\task\handle_for_coder.c
+ handle_for_coder.c
+ 0
+ 0
+
+
+ 11
+ 132
+ 1
+ 0
+ 0
+ 0
+ .\source\task\tcp.c
+ tcp.c
+ 0
+ 0
+
+
+ 11
+ 133
+ 1
+ 0
+ 0
+ 0
+ .\source\task\log.c
+ log.c
+ 0
+ 0
+
+
+ 11
+ 134
+ 1
+ 0
+ 0
+ 0
+ .\source\task\udp.c
+ udp.c
+ 0
+ 0
+
+
+ 11
+ 135
+ 1
+ 0
+ 0
+ 0
+ .\source\task\mod_signals.c
+ mod_signals.c
+ 0
+ 0
+
+
+
+
+ codec
+ 1
+ 0
+ 0
+ 0
+
+ 12
+ 136
+ 1
+ 0
+ 0
+ 0
+ .\source\codec\codec.c
+ codec.c
+ 0
+ 0
+
+
+
+
+ coder
1
0
0
@@ -2257,6 +2257,50 @@
13
137
+ 1
+ 0
+ 0
+ 0
+ .\source\coder\PSDGenerate.c
+ PSDGenerate.c
+ 0
+ 0
+
+
+ 13
+ 138
+ 1
+ 0
+ 0
+ 0
+ .\source\coder\UIDGenerate.c
+ UIDGenerate.c
+ 0
+ 0
+
+
+ 13
+ 139
+ 1
+ 0
+ 0
+ 0
+ .\source\coder\coder_lib.c
+ coder_lib.c
+ 0
+ 0
+
+
+
+
+ readme
+ 1
+ 0
+ 0
+ 0
+
+ 14
+ 140
5
0
0
diff --git a/checker_gen1.uvprojx b/checker_gen1.uvprojx
index 047a5b2..c0e465f 100644
--- a/checker_gen1.uvprojx
+++ b/checker_gen1.uvprojx
@@ -338,7 +338,7 @@
--diag_suppress=550,177
STM32F40_41xxx,USE_STDPERIPH_DRIVER,RT_THREAD
- .\source\interface;.\source\core;.\source\stm32lib\inc;.\source\main;.\source\RTT;.\source\rt_thread\include;.\source\rt_thread;.\source\soft;.\source\task;.\source\dev;.\source\eth;.\source\lwip-1.4.1\src\include;.\source\lwip-1.4.1\port\STM32F4x7;.\source\lwip-1.4.1\src\include\ipv4;.\source\codec
+ .\source\interface;.\source\core;.\source\stm32lib\inc;.\source\main;.\source\RTT;.\source\rt_thread\include;.\source\rt_thread;.\source\soft;.\source\task;.\source\dev;.\source\eth;.\source\lwip-1.4.1\src\include;.\source\lwip-1.4.1\port\STM32F4x7;.\source\lwip-1.4.1\src\include\ipv4;.\source\codec;.\source\coder
@@ -751,6 +751,21 @@
+
+ rtt
+
+
+ SEGGER_RTT.c
+ 1
+ .\source\RTT\SEGGER_RTT.c
+
+
+ SEGGER_RTT_printf.c
+ 1
+ .\source\RTT\SEGGER_RTT_printf.c
+
+
+
rt_thread
@@ -851,222 +866,6 @@
-
- soft
-
-
- buff.c
- 1
- .\source\soft\buff.c
-
-
- mystring.c
- 1
- .\source\soft\mystring.c
-
-
- mystdlib.c
- 1
- .\source\soft\mystdlib.c
-
-
- list.c
- 1
- .\source\soft\list.c
-
-
- signal.c
- 1
- .\source\soft\signal.c
-
-
- bytearray.c
- 1
- .\source\soft\bytearray.c
-
-
- sort.c
- 1
- .\source\soft\sort.c
-
-
- cJSON.c
- 1
- .\source\soft\cJSON.c
-
-
- debug.c
- 1
- .\source\soft\debug.c
-
-
- crc.c
- 1
- .\source\soft\crc.c
-
-
- mymisc.c
- 1
- .\source\soft\mymisc.c
-
-
-
-
- task
-
-
- prot_mcu.c
- 1
- .\source\task\prot_mcu.c
-
-
- prot_uc.c
- 1
- .\source\task\prot_uc.c
-
-
- moter.c
- 1
- .\source\task\moter.c
-
-
- commend.c
- 1
- .\source\task\commend.c
-
-
- transmit.c
- 1
- .\source\task\transmit.c
-
-
- tran_for_checker.c
- 1
- .\source\task\tran_for_checker.c
-
-
- tran_for_coder.c
- 1
- .\source\task\tran_for_coder.c
-
-
- 2
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
-
-
-
- tran_for_coder2.c
- 1
- .\source\task\tran_for_coder2.c
-
-
- handle.c
- 1
- .\source\task\handle.c
-
-
- handle_for_checker.c
- 1
- .\source\task\handle_for_checker.c
-
-
- handle_for_coder.c
- 1
- .\source\task\handle_for_coder.c
-
-
- tcp.c
- 1
- .\source\task\tcp.c
-
-
- log.c
- 1
- .\source\task\log.c
-
-
- udp.c
- 1
- .\source\task\udp.c
-
-
- mod_signals.c
- 1
- .\source\task\mod_signals.c
-
-
-
-
- codec
-
-
- codec.c
- 1
- .\source\codec\codec.c
-
-
-
-
- rtt
-
-
- SEGGER_RTT.c
- 1
- .\source\RTT\SEGGER_RTT.c
-
-
- SEGGER_RTT_printf.c
- 1
- .\source\RTT\SEGGER_RTT_printf.c
-
-
-
eth
@@ -1323,6 +1122,227 @@
+
+ soft
+
+
+ buff.c
+ 1
+ .\source\soft\buff.c
+
+
+ mystring.c
+ 1
+ .\source\soft\mystring.c
+
+
+ mystdlib.c
+ 1
+ .\source\soft\mystdlib.c
+
+
+ list.c
+ 1
+ .\source\soft\list.c
+
+
+ signal.c
+ 1
+ .\source\soft\signal.c
+
+
+ bytearray.c
+ 1
+ .\source\soft\bytearray.c
+
+
+ sort.c
+ 1
+ .\source\soft\sort.c
+
+
+ cJSON.c
+ 1
+ .\source\soft\cJSON.c
+
+
+ debug.c
+ 1
+ .\source\soft\debug.c
+
+
+ crc.c
+ 1
+ .\source\soft\crc.c
+
+
+ mymisc.c
+ 1
+ .\source\soft\mymisc.c
+
+
+
+
+ task
+
+
+ prot_mcu.c
+ 1
+ .\source\task\prot_mcu.c
+
+
+ prot_uc.c
+ 1
+ .\source\task\prot_uc.c
+
+
+ moter.c
+ 1
+ .\source\task\moter.c
+
+
+ commend.c
+ 1
+ .\source\task\commend.c
+
+
+ transmit.c
+ 1
+ .\source\task\transmit.c
+
+
+ tran_for_checker.c
+ 1
+ .\source\task\tran_for_checker.c
+
+
+ tran_for_coder.c
+ 1
+ .\source\task\tran_for_coder.c
+
+
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 11
+
+
+ 1
+
+
+
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+
+
+
+
+
+
+
+
+
+
+
+ tran_for_coder2.c
+ 1
+ .\source\task\tran_for_coder2.c
+
+
+ handle.c
+ 1
+ .\source\task\handle.c
+
+
+ handle_for_checker.c
+ 1
+ .\source\task\handle_for_checker.c
+
+
+ handle_for_coder.c
+ 1
+ .\source\task\handle_for_coder.c
+
+
+ tcp.c
+ 1
+ .\source\task\tcp.c
+
+
+ log.c
+ 1
+ .\source\task\log.c
+
+
+ udp.c
+ 1
+ .\source\task\udp.c
+
+
+ mod_signals.c
+ 1
+ .\source\task\mod_signals.c
+
+
+
+
+ codec
+
+
+ codec.c
+ 1
+ .\source\codec\codec.c
+
+
+
+
+ coder
+
+
+ PSDGenerate.c
+ 1
+ .\source\coder\PSDGenerate.c
+
+
+ UIDGenerate.c
+ 1
+ .\source\coder\UIDGenerate.c
+
+
+ coder_lib.c
+ 1
+ .\source\coder\coder_lib.c
+
+
+
readme
@@ -2131,6 +2151,21 @@
+
+ rtt
+
+
+ SEGGER_RTT.c
+ 1
+ .\source\RTT\SEGGER_RTT.c
+
+
+ SEGGER_RTT_printf.c
+ 1
+ .\source\RTT\SEGGER_RTT_printf.c
+
+
+
rt_thread
@@ -3085,6 +3120,349 @@
+
+ eth
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 11
+
+
+ 1
+
+
+
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+
+
+
+
+
+
+
+
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+
+
+
+
+
+
+
+
+
+
+
+ netconf.c
+ 1
+ .\source\eth\netconf.c
+
+
+ stm32f4x7_eth.c
+ 1
+ .\source\eth\stm32f4x7_eth.c
+
+
+ stm32f4x7_eth_bsp.c
+ 1
+ .\source\eth\stm32f4x7_eth_bsp.c
+
+
+ ethernetif.c
+ 1
+ .\source\eth\ethernetif.c
+
+
+
+
+ lwip
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 11
+
+
+ 1
+
+
+
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+
+
+
+
+
+
+
+
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+
+
+
+
+
+
+
+
+
+
+
+ api_lib.c
+ 1
+ .\source\lwip-1.4.1\src\api\api_lib.c
+
+
+ api_msg.c
+ 1
+ .\source\lwip-1.4.1\src\api\api_msg.c
+
+
+ err.c
+ 1
+ .\source\lwip-1.4.1\src\api\err.c
+
+
+ netbuf.c
+ 1
+ .\source\lwip-1.4.1\src\api\netbuf.c
+
+
+ netdb.c
+ 1
+ .\source\lwip-1.4.1\src\api\netdb.c
+
+
+ netifapi.c
+ 1
+ .\source\lwip-1.4.1\src\api\netifapi.c
+
+
+ sockets.c
+ 1
+ .\source\lwip-1.4.1\src\api\sockets.c
+
+
+ tcpip.c
+ 1
+ .\source\lwip-1.4.1\src\api\tcpip.c
+
+
+ autoip.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\autoip.c
+
+
+ icmp.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\icmp.c
+
+
+ igmp.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\igmp.c
+
+
+ inet.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\inet.c
+
+
+ inet_chksum.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\inet_chksum.c
+
+
+ ip.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\ip.c
+
+
+ ip_addr.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\ip_addr.c
+
+
+ ip_frag.c
+ 1
+ .\source\lwip-1.4.1\src\core\ipv4\ip_frag.c
+
+
+ def.c
+ 1
+ .\source\lwip-1.4.1\src\core\def.c
+
+
+ dhcp.c
+ 1
+ .\source\lwip-1.4.1\src\core\dhcp.c
+
+
+ dns.c
+ 1
+ .\source\lwip-1.4.1\src\core\dns.c
+
+
+ init.c
+ 1
+ .\source\lwip-1.4.1\src\core\init.c
+
+
+ mem.c
+ 1
+ .\source\lwip-1.4.1\src\core\mem.c
+
+
+ memp.c
+ 1
+ .\source\lwip-1.4.1\src\core\memp.c
+
+
+ netif.c
+ 1
+ .\source\lwip-1.4.1\src\core\netif.c
+
+
+ pbuf.c
+ 1
+ .\source\lwip-1.4.1\src\core\pbuf.c
+
+
+ raw.c
+ 1
+ .\source\lwip-1.4.1\src\core\raw.c
+
+
+ stats.c
+ 1
+ .\source\lwip-1.4.1\src\core\stats.c
+
+
+ tcp.c
+ 1
+ .\source\lwip-1.4.1\src\core\tcp.c
+
+
+ tcp_in.c
+ 1
+ .\source\lwip-1.4.1\src\core\tcp_in.c
+
+
+ tcp_out.c
+ 1
+ .\source\lwip-1.4.1\src\core\tcp_out.c
+
+
+ timers.c
+ 1
+ .\source\lwip-1.4.1\src\core\timers.c
+
+
+ udp.c
+ 1
+ .\source\lwip-1.4.1\src\core\udp.c
+
+
+ etharp.c
+ 1
+ .\source\lwip-1.4.1\src\netif\etharp.c
+
+
+ ethernetif.c
+ 1
+ .\source\lwip-1.4.1\src\netif\ethernetif.c
+
+
+ sys.c
+ 1
+ .\source\lwip-1.4.1\src\core\sys.c
+
+
+ sys_arch.c
+ 1
+ .\source\lwip-1.4.1\port\STM32F4x7\arch\sys_arch.c
+
+
+
soft
@@ -3782,360 +4160,22 @@
- rtt
+ coder
- SEGGER_RTT.c
+ PSDGenerate.c
1
- .\source\RTT\SEGGER_RTT.c
+ .\source\coder\PSDGenerate.c
- SEGGER_RTT_printf.c
+ UIDGenerate.c
1
- .\source\RTT\SEGGER_RTT_printf.c
-
-
-
-
- eth
-
-
- 0
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
-
-
-
- netconf.c
- 1
- .\source\eth\netconf.c
+ .\source\coder\UIDGenerate.c
- stm32f4x7_eth.c
+ coder_lib.c
1
- .\source\eth\stm32f4x7_eth.c
-
-
- stm32f4x7_eth_bsp.c
- 1
- .\source\eth\stm32f4x7_eth_bsp.c
-
-
- ethernetif.c
- 1
- .\source\eth\ethernetif.c
-
-
-
-
- lwip
-
-
- 0
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
-
-
-
- api_lib.c
- 1
- .\source\lwip-1.4.1\src\api\api_lib.c
-
-
- api_msg.c
- 1
- .\source\lwip-1.4.1\src\api\api_msg.c
-
-
- err.c
- 1
- .\source\lwip-1.4.1\src\api\err.c
-
-
- netbuf.c
- 1
- .\source\lwip-1.4.1\src\api\netbuf.c
-
-
- netdb.c
- 1
- .\source\lwip-1.4.1\src\api\netdb.c
-
-
- netifapi.c
- 1
- .\source\lwip-1.4.1\src\api\netifapi.c
-
-
- sockets.c
- 1
- .\source\lwip-1.4.1\src\api\sockets.c
-
-
- tcpip.c
- 1
- .\source\lwip-1.4.1\src\api\tcpip.c
-
-
- autoip.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\autoip.c
-
-
- icmp.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\icmp.c
-
-
- igmp.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\igmp.c
-
-
- inet.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\inet.c
-
-
- inet_chksum.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\inet_chksum.c
-
-
- ip.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\ip.c
-
-
- ip_addr.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\ip_addr.c
-
-
- ip_frag.c
- 1
- .\source\lwip-1.4.1\src\core\ipv4\ip_frag.c
-
-
- def.c
- 1
- .\source\lwip-1.4.1\src\core\def.c
-
-
- dhcp.c
- 1
- .\source\lwip-1.4.1\src\core\dhcp.c
-
-
- dns.c
- 1
- .\source\lwip-1.4.1\src\core\dns.c
-
-
- init.c
- 1
- .\source\lwip-1.4.1\src\core\init.c
-
-
- mem.c
- 1
- .\source\lwip-1.4.1\src\core\mem.c
-
-
- memp.c
- 1
- .\source\lwip-1.4.1\src\core\memp.c
-
-
- netif.c
- 1
- .\source\lwip-1.4.1\src\core\netif.c
-
-
- pbuf.c
- 1
- .\source\lwip-1.4.1\src\core\pbuf.c
-
-
- raw.c
- 1
- .\source\lwip-1.4.1\src\core\raw.c
-
-
- stats.c
- 1
- .\source\lwip-1.4.1\src\core\stats.c
-
-
- tcp.c
- 1
- .\source\lwip-1.4.1\src\core\tcp.c
-
-
- tcp_in.c
- 1
- .\source\lwip-1.4.1\src\core\tcp_in.c
-
-
- tcp_out.c
- 1
- .\source\lwip-1.4.1\src\core\tcp_out.c
-
-
- timers.c
- 1
- .\source\lwip-1.4.1\src\core\timers.c
-
-
- udp.c
- 1
- .\source\lwip-1.4.1\src\core\udp.c
-
-
- etharp.c
- 1
- .\source\lwip-1.4.1\src\netif\etharp.c
-
-
- ethernetif.c
- 1
- .\source\lwip-1.4.1\src\netif\ethernetif.c
-
-
- sys.c
- 1
- .\source\lwip-1.4.1\src\core\sys.c
-
-
- sys_arch.c
- 1
- .\source\lwip-1.4.1\port\STM32F4x7\arch\sys_arch.c
+ .\source\coder\coder_lib.c
diff --git a/source/ReadMe.txt b/source/ReadMe.txt
index c438aef..5894cec 100644
--- a/source/ReadMe.txt
+++ b/source/ReadMe.txt
@@ -88,4 +88,6 @@
bootloader在启动app之前会初始化系统参数
tran使用回调的方式接收handle的返回
注码指令自动回读结果
+2023.6.13
+ 适配3码互转算法
\ No newline at end of file
diff --git a/source/coder/PSDGenerate.c b/source/coder/PSDGenerate.c
new file mode 100644
index 0000000..8a9eea6
--- /dev/null
+++ b/source/coder/PSDGenerate.c
@@ -0,0 +1,60 @@
+#include "PSDGenerate.h"
+
+/********************************************************************************************************************
+ * 新版密码支持BCD码 *
+********************************************************************************************************************/
+
+uint64_t Scramble(uint64_t number, uint64_t max)
+{
+ int i = 0;
+ // some random values
+ uint64_t scramblers[] = { 3, 5, 7, 31, 343, 2348, 89897 };
+ number += (max / 7) + 6;
+ number %= max;
+ // shuffle according to divisibility
+ for (i = 0; i < 7; i++)
+ {
+ if (scramblers[i] >= max / 3) break;
+ number = ((number * scramblers[i]) % max)
+ + ((number * scramblers[i]) / max);
+ }
+
+
+ return number % max;
+}
+
+int GetPasswordByUidCode(const uint8_t *uidcode,uint8_t* psd)
+{
+ uint64_t val = 0,val1 = 0;
+ int i= 0;
+ uint64_t ulBCDPsd = 0;
+
+ for(i=2;i<10;i++)
+ {
+ val *=10;
+ val += uidcode[i]-0x30;
+ }
+ val += uidcode[10];
+
+ for(i=11;i<16;i++)
+ {
+ val1 *=10;
+ val1 += uidcode[i]-0x30;
+ }
+ val = val + val1;
+ ulBCDPsd = Scramble(val, 0xFFFFFFFF);
+
+
+ psd[0] = (ulBCDPsd&0xFF000000)>>24;
+ psd[1] = (ulBCDPsd&0x00FF0000)>>16;
+ psd[2] = (ulBCDPsd&0x0000FF00)>>8;
+ psd[3] = ulBCDPsd&0x000000FF;
+
+ return 0;
+}
+
+
+
+
+
+
diff --git a/source/coder/PSDGenerate.h b/source/coder/PSDGenerate.h
new file mode 100644
index 0000000..969b613
--- /dev/null
+++ b/source/coder/PSDGenerate.h
@@ -0,0 +1,13 @@
+#ifndef __PSDGENERATE_H__
+#define __PSDGENERATE_H__
+#include
+#include
+#include "stdint.h"
+
+
+
+int GetPasswordByUidCode(const uint8_t *uidcode,uint8_t* psd);
+
+
+
+#endif
diff --git a/source/coder/UIDGenerate.c b/source/coder/UIDGenerate.c
new file mode 100644
index 0000000..4c4aa85
--- /dev/null
+++ b/source/coder/UIDGenerate.c
@@ -0,0 +1,303 @@
+#include "UIDGenerate.h"
+#include "string.h"
+
+
+//static u8 _CalcCrc8(u8 *Ptr,u8 num);
+
+static uint32_t UINT32_ENDIAN_CHANGE(uint32_t val);
+
+static bool YMUid_Valid_check(uint8_t *u8ArrayYMUid);
+
+static uint8_t CalcCrc8(uint8_t *Ptr,uint8_t num);
+
+static void string2hex(char* src,size_t srclen,char* dst,size_t *dstlen);
+static bool byte2String(uint8_t *src, size_t srcoffset, size_t srclen, char* dst, size_t dstoffset, size_t *dstlen);
+
+
+
+bool UidCode_JQ2YM(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID)
+{
+ UNION_VALUE_CHANGE_TYPEDEF stDate;
+ UNION_VALUE_CHANGE_TYPEDEF stSerialCode ;
+ uint8_t i=0;
+ uint16_t u16Year = 0;
+ uint16_t u16Month = 0;
+ uint8_t u8Day = 0;
+ uint16_t u16Date =0;
+ ST_JQUID_TYPEDEF _stJQUID;
+
+ uint16_t sum=0;
+
+ for(i=0;i<8;i++)
+ {
+ sum=sum+pstJQUID->u8ArrayJQUidCode[i];
+ _stJQUID.u8ArrayJQUidCode[7-i]=pstJQUID->u8ArrayJQUidCode[i]; //逆序detid
+ }
+ memcpy(pstJQUID->u8ArrayJQUidCode,_stJQUID.u8ArrayJQUidCode,8);
+
+ if(sum == 0) //全0时,CRC码也为0,所以需要避免这种情况
+ return 0;
+
+
+ if(pstJQUID->u8ArrayJQUidCode[7] != CalcCrc8(pstJQUID->u8ArrayJQUidCode,7))
+ return false;
+
+ pstYMUID->ucArrayYMUidCode[0] = pstJQUID->u8ArrayJQUidCode[0]/10+0x30;
+ pstYMUID->ucArrayYMUidCode[1] = pstJQUID->u8ArrayJQUidCode[0]%10+0x30;
+
+
+
+ pstYMUID->ucArrayYMUidCode[4] = pstJQUID->u8ArrayJQUidCode[1];//特征码
+
+ u16Date = pstJQUID->u8ArrayJQUidCode[2];
+ u16Date = u16Date<<8 | pstJQUID->u8ArrayJQUidCode[3];
+
+ u16Year = (u16Date>>9)&0x7F;
+ u16Month = (u16Date>>5)&0x0F;
+ u8Day = u16Date&0x1F;
+
+ pstYMUID->ucArrayYMUidCode[2] = u16Year/10+0x30;
+ pstYMUID->ucArrayYMUidCode[3] = u16Year%10+0x30;
+
+ pstYMUID->ucArrayYMUidCode[5] = u16Month/10+0x30;
+ pstYMUID->ucArrayYMUidCode[6] = u16Month%10+0x30;
+
+ pstYMUID->ucArrayYMUidCode[7] = u8Day/10+0x30;
+ pstYMUID->ucArrayYMUidCode[8] = u8Day%10+0x30;
+
+
+ memcpy(stSerialCode.u8Val+1,pstJQUID->u8ArrayJQUidCode+4,3);
+ stSerialCode.u32Value = UINT32_ENDIAN_CHANGE( stSerialCode.u32Value);
+
+ pstYMUID->ucArrayYMUidCode[DEF_YM_SPECIALCODE_INDEX] = (stSerialCode.u32Value>>17) & 0x7F;
+ stSerialCode.u32Value = stSerialCode.u32Value&0x1FFFF;
+
+ for(i=14;i>=10;i--)
+ {
+ pstYMUID->ucArrayYMUidCode[i] = (stSerialCode.u32Value%10+0x30);
+ stSerialCode.u32Value = stSerialCode.u32Value/10;
+
+ }
+
+
+ if(!YMUid_Valid_check(pstYMUID->ucArrayYMUidCode))
+ return false;
+
+ return true;
+}
+
+bool UidCode_JQ2YM_NoBackwardSequence(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID)
+{
+ uint8_t i=0;
+ uint8_t ucYear = 0;
+ uint8_t ucMonth = 0;
+ uint8_t ucDay = 0;
+ uint32_t ulNumber =0;
+ uint8_t ucTeZhengMa = 0;
+ uint16_t usBoxCode = 0;
+ uint8_t ucIndexCode = 0;
+ size_t len = 16;
+
+ if(pstJQUID->u8ArrayJQUidCode[7] != CalcCrc8(pstJQUID->u8ArrayJQUidCode,7))
+ return false;
+
+ byte2String(pstJQUID->u8ArrayJQUidCode,0,2,(char *)pstYMUID->ucArrayYMUidCode,0,&len);//AD58
+ pstYMUID->ucArrayYMUidCode[4] = pstYMUID->ucArrayYMUidCode[2];
+ pstYMUID->ucArrayYMUidCode[5] = pstYMUID->ucArrayYMUidCode[3];
+
+
+ ucYear = pstJQUID->u8ArrayJQUidCode[2]>>1;
+ pstYMUID->ucArrayYMUidCode[2] = ucYear/10+0x30;
+ pstYMUID->ucArrayYMUidCode[3] = ucYear%10+0x30;
+
+ ucMonth = ((pstJQUID->u8ArrayJQUidCode[2]&0x01)<<3)|((pstJQUID->u8ArrayJQUidCode[3]>>5));
+ pstYMUID->ucArrayYMUidCode[6] = ucMonth/10+0x30;
+ pstYMUID->ucArrayYMUidCode[7] = ucMonth%10+0x30;
+
+ ucDay = (pstJQUID->u8ArrayJQUidCode[3]&0x1F);
+ pstYMUID->ucArrayYMUidCode[8] = ucDay/10+0x30;
+ pstYMUID->ucArrayYMUidCode[9] = ucDay%10+0x30;
+
+ ulNumber = pstJQUID->u8ArrayJQUidCode[4];
+ ulNumber <<= 8;
+ ulNumber |= pstJQUID->u8ArrayJQUidCode[5];
+ ulNumber <<= 8;
+ ulNumber |= pstJQUID->u8ArrayJQUidCode[6];
+
+ ucTeZhengMa = ulNumber/100000;
+ pstYMUID->ucArrayYMUidCode[10] = ucTeZhengMa;
+
+ ulNumber = ulNumber%100000;
+ usBoxCode = ulNumber/100;
+ pstYMUID->ucArrayYMUidCode[11] = usBoxCode/100 + 0x30;
+ usBoxCode%=100;
+ pstYMUID->ucArrayYMUidCode[12] = usBoxCode/10+0x30;
+ pstYMUID->ucArrayYMUidCode[13] = usBoxCode%10 + 0x30;
+
+ ucIndexCode = ulNumber%100;
+ pstYMUID->ucArrayYMUidCode[14] = ucIndexCode/10+0x30;
+ pstYMUID->ucArrayYMUidCode[15] = ucIndexCode%10 + 0x30;
+
+ if(!YMUid_Valid_check(pstYMUID->ucArrayYMUidCode))
+ return false;
+
+ return true;
+}
+
+
+
+bool UidCode_YM2JQ(PST_JQUID_TYPEDEF pstJQUID,const PST_YMUID_TYPEDEF pstYMUID)
+{
+
+ uint8_t i=0;
+ uint16_t usYear = 0;
+ uint16_t usMonth = 0;
+ uint16_t usDay = 0;
+ uint32_t ulNumber =0;
+ uint16_t usBoxCode = 0;
+ uint8_t ucIndexCode = 0;
+ size_t dataLen = 0;
+
+ if(!YMUid_Valid_check(pstYMUID->ucArrayYMUidCode))
+ return false;
+
+ string2hex((char *)pstYMUID->ucArrayYMUidCode,6,(char *)pstJQUID->u8ArrayJQUidCode,&dataLen); //0xAD 0x23 0x58
+
+ pstJQUID->u8ArrayJQUidCode[1] = pstJQUID->u8ArrayJQUidCode[2];//0xAD 0x58
+
+ //转换 年 月 日
+ usYear = (pstYMUID->ucArrayYMUidCode[2]-0x30)*10 + (pstYMUID->ucArrayYMUidCode[3]-0x30);
+ usMonth = (pstYMUID->ucArrayYMUidCode[6]-0x30)*10 + (pstYMUID->ucArrayYMUidCode[7]-0x30);
+ usDay = (pstYMUID->ucArrayYMUidCode[8]-0x30)*10 + (pstYMUID->ucArrayYMUidCode[9]-0x30);
+
+ usYear = usYear<<9|usMonth<<5|usDay;
+
+ pstJQUID->u8ArrayJQUidCode[2] = (usYear&0xFF00)>>8;
+ pstJQUID->u8ArrayJQUidCode[3] = (usYear&0xFF);
+
+
+
+ ulNumber = pstYMUID->ucArrayYMUidCode[10]*100000;
+ usBoxCode = (pstYMUID->ucArrayYMUidCode[11]-0x30)*100+ (pstYMUID->ucArrayYMUidCode[12]-0x30)*10+(pstYMUID->ucArrayYMUidCode[13]-0x30);
+ ucIndexCode = (pstYMUID->ucArrayYMUidCode[14]-0x30)*10+(pstYMUID->ucArrayYMUidCode[15]-0x30);
+
+ ulNumber += usBoxCode*100+ucIndexCode;
+
+ pstJQUID->u8ArrayJQUidCode[4] = (ulNumber&0xFF0000)>>16;
+ pstJQUID->u8ArrayJQUidCode[5] = (ulNumber&0xFF00)>>8;
+ pstJQUID->u8ArrayJQUidCode[6] = (ulNumber&0xFF);
+
+
+ pstJQUID->u8ArrayJQUidCode[7] = CalcCrc8(pstJQUID->u8ArrayJQUidCode,7);
+
+ return true;
+}
+
+
+static bool YMUid_Valid_check(uint8_t *u8ArrayYMUid)
+{
+ uint8_t i=0;
+ uint8_t u8ValidDataCounter = 0;
+
+ for(i=0;i<16;i++)
+ {
+ if(u8ArrayYMUid[i] >= '0' && u8ArrayYMUid[i] <= '9')
+ {
+ u8ValidDataCounter++;
+ continue;
+ }
+ if(u8ArrayYMUid[i] >= 'A' && u8ArrayYMUid[i] <= 'Z')
+ {
+ u8ValidDataCounter++;
+ continue;
+ }
+ if(u8ArrayYMUid[i] >= 'a' && u8ArrayYMUid[i] <= 'z')
+ {
+ u8ValidDataCounter++;
+ continue;
+ }
+ }
+
+ if(u8ValidDataCounter < 7)
+ return false;
+ return true;
+}
+
+static uint32_t UINT32_ENDIAN_CHANGE(uint32_t val)
+{
+
+ return ((( val & 0x000000ff)<< 24 ) | ( ( val & 0x0000ff00 ) << 8 ) | ( ( val & 0x00ff0000 ) >> 8 ) | ( ( val & 0xff000000 ) >> 24 ));
+}
+
+static void string2hex(char* src,size_t srclen,char* dst,size_t *dstlen)
+{
+ size_t i=0;
+ uint8_t tmp1=0,tmp2=0;
+ for(;i *dstlen-dstoffset)
+ return false;
+
+ dst += dstoffset;
+
+ for(i=srcoffset;i>4];
+ *dst++ = MatirxHex[src[i]&0x0F];
+ }
+
+ *dstlen = (i-1)*2;
+
+ return true;
+}
+
+//============================================================================//
+//8位CRC效验计算,只计算缓存区前6个字节
+//输入参数:需要计算数据缓存区头指针
+//返 回 值:效验值
+//============================================================================//
+static uint8_t CalcCrc8(uint8_t *Ptr,uint8_t num)
+{
+ uint8_t i,j,crc = 0;
+
+ for (j = 0; j < num; j++)
+ {
+ crc ^= *(Ptr+j);
+ for ( i = 0; i < 8; i++)
+ {
+ if ((crc & 0x01) != 0)
+ {
+ crc >>= 1;
+ crc ^= 0x8c;
+ }
+ else
+ {
+ crc >>= 1;
+ }
+ }
+ }
+ return crc;
+}
+
+
+
+
diff --git a/source/coder/UIDGenerate.h b/source/coder/UIDGenerate.h
new file mode 100644
index 0000000..bb9c92b
--- /dev/null
+++ b/source/coder/UIDGenerate.h
@@ -0,0 +1,37 @@
+#ifndef __UIDGENERATE_H__
+#define __UIDGENERATE_H__
+#include
+#include
+#include "stdint.h"
+
+
+
+#define DEF_YM_SPECIALCODE_INDEX 9
+
+#pragma pack(1)
+typedef struct
+{
+ unsigned char ucArrayYMUidCode[16];
+}ST_YMUID_TYPEDEF,*PST_YMUID_TYPEDEF;
+
+typedef struct
+{
+ uint8_t u8ArrayJQUidCode[8];
+}ST_JQUID_TYPEDEF,*PST_JQUID_TYPEDEF;
+
+typedef union
+{
+ uint32_t u32Value;
+ uint8_t u8Val[4];
+}UNION_VALUE_CHANGE_TYPEDEF,*PST_VALUE_CHANGE_TYPEDEF;
+
+#pragma pack()
+
+bool UidCode_YM2JQ(PST_JQUID_TYPEDEF pstJQUID,const PST_YMUID_TYPEDEF pstYMUID);
+
+bool UidCode_JQ2YM(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID);
+
+bool UidCode_JQ2YM_NoBackwardSequence(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID);
+
+#endif
+
diff --git a/source/coder/coder_lib.c b/source/coder/coder_lib.c
new file mode 100644
index 0000000..c04cb58
--- /dev/null
+++ b/source/coder/coder_lib.c
@@ -0,0 +1,202 @@
+#include "coder_lib.h"
+#include "string.h"
+#include "mystring.h"
+#include "crc.h"
+#include "stdio.h"
+
+/*
++-----------------------------------------------------------------------+
+| 管壳码格式(ascii) |
++-----------------------------------------------------------------------+
+| 13byte |
++-----------------------------------------------------------------------+
+| 雷管厂代号 | 生产年份 | 生产月份 | 生产日 | 特征号 | 流水号 |
++------------+------------+------------+----------+----------+----------+
+| 2byte | 1byte | 2byte | 2byte | 1byte | 5byte |
++-----------------------------------------------------------------------+
+
+
+
++-----------------------------------------------------------------------+
+| UID码格式(ascii) |
++-----------------------------------------------------------------------+
+| 16byte |
++-----------------------------------------------------------------------+
+| 芯片厂代号 | 生产年份 | 雷管厂代号 | 月 | 日 | 特征码 | 盒号 | 序号 |
++------------+----------+------------+-----+-----+--------+------+------+
+| 2byte | 2byte | 2byte |2byte|2byte| 1byte | 3byte| 2byte|
++-----------------------------------------------------------------------+
+
+
+
++-----------------------------------------------------------------------+
+| UID码存储格式(hex) |
++-----------------------------------------------------------------------+
+| 8byte |
++-----------------------------------------------------------------------+
+| 芯片厂代号 | 雷管厂代号 | 年月日 | 特征码盒号序号 | crc8 |
++------------+------------+------------------+-------------------+------+
+| 1byte | 1byte | 2byte(大端) | 3byte(大端) | 1byte|
++-----------------------------------------------------------------------+
+
+
+
+年月日(ascii)->年月日(hex)
+年(y),月(m),日(d)
+time=((((y[0]-'0')*10)+(y[1]-'0'))<<9)|\
+ ((((m[0]-'0')*10)+(m[1]-'0'))<<5)|\
+ (((d[0]-'0')*10)+(d[1]-'0'))
+
+特征码盒号序号(ascii)->特征码盒号序号(hex)
+特征码(c),盒号(b),序号(i)
+code=c*10000+((b[0]-'0')*100+(b[1]-'0')*10+(b[2]-'0'))*100+\
+ ((i[1]-'0')*10+(i[2]-'0'))
+
+
+*/
+
+
+
+
+
+// 根据管壳码和年份信息生成uid的年份信息
+static int coder_calc_year(const char *year,const char shell_year,char *uid_year)
+{
+ int y=0;
+ for(int i=0;i<4;i++)
+ {
+ y*=10;y+=year[i]-'0';
+ }
+ // year是实时数据,鉴于12月31生产的雷管,year可能不同
+ // 此时year-1来保证与uid码上的相同
+ if(year[3]!=shell_year)
+ y--;
+ uid_year[1]=y%100/10+'0';
+ uid_year[0]=y%10+'0';
+ if(uid_year[0]==shell_year)
+ return 0;
+ else
+ return -1;
+}
+
+
+
+// 管壳码转uid码
+int coder_shell_to_uid(const char *year,const char *shell_code,char *uid_code)
+{
+ int ret=0;
+ memset(uid_code,0,16);
+ // 添加芯片企业代号(2byte)
+ memcpy(&uid_code[0],"AD",2);
+ // 添加年份(2y=byte)
+ ret=coder_calc_year(year,shell_code[2],&uid_code[2]);
+ // 添加雷管厂代号(2byte)
+ memcpy(&uid_code[4],&shell_code[0],2);
+ // 添加月日特征码流水号
+ memcpy(&uid_code[6], &shell_code[3],10);
+
+ return ret;
+}
+
+
+
+// 转换hex字符串为一个byte
+static int coder_strhex_to_byte(const char *str_hex)
+{
+ char buff[3]={0};
+ buff[0]=str_hex[0];
+ buff[1]=str_hex[1];
+ return str_ahextoi(buff);
+}
+// 转换int字符串为一个整形
+static int coder_strint_to_byte(const char *str_int,int len)
+{
+ char buff[10]={0};
+ if(len>10) return 0;
+ memcpy(buff,str_int,len);
+ return str_atoi(buff);
+}
+
+// uid码转存储码
+int coder_uid_to_save(const char *uid_code,uint8_t *save_code)
+{
+ uint16_t ymd=0;
+ uint32_t feature=0;
+ save_code[0]=coder_strhex_to_byte(&uid_code[0]);
+ save_code[1]=coder_strhex_to_byte(&uid_code[4]);
+ ymd=coder_strint_to_byte(&uid_code[2],2)<<9;
+ ymd|=coder_strint_to_byte(&uid_code[6],2)<<5;
+ ymd|=coder_strint_to_byte(&uid_code[8],2);
+ save_code[2]=ymd>>8;
+ save_code[3]=ymd&0xff;
+ feature=uid_code[10]*10000;
+ feature+=coder_strint_to_byte(&uid_code[11],3)*100;
+ feature+=coder_strint_to_byte(&uid_code[13],2);
+ save_code[4]=feature>>16;
+ save_code[5]=feature>>8;
+ save_code[6]=feature&0xff;
+ save_code[7]=crc_crc8(save_code,7);
+ return 0;
+}
+
+// 转换byte为hex字符串
+static int coder_byte_to_strhex(const uint8_t byte,char *str_hex)
+{
+ char buff[10]={0};
+ sprintf(buff,"%02X",byte);
+ str_hex[0]=buff[0];
+ str_hex[1]=buff[1];
+ return 0;
+}
+// 转换int为int字符串
+static int coder_int_to_strint(const int n,char *str_int,int len)
+{
+ char buff[10]={0};
+ sprintf(buff,"%05d",n);
+ memcpy(str_int,buff+(strlen(buff)-len),len);
+ return 0;
+}
+
+// 存储码转uid
+int coder_save_to_uid(const uint8_t *save_code,char *uid_code)
+{
+ uint16_t ymd=0;
+ uint32_t feature=0;
+ int ret=0;
+ if(save_code[7]!=crc_crc8(save_code,7))
+ {
+ return -1;
+ }
+ ret|=coder_byte_to_strhex(save_code[0],&uid_code[0]);
+ ret|=coder_byte_to_strhex(save_code[1],&uid_code[4]);
+ ymd=(save_code[2]<<8)|save_code[3];
+ feature=(save_code[4]<<16)|(save_code[5]<<8)|(save_code[6]);
+ ret|=coder_int_to_strint(ymd>>9,&uid_code[2],2);
+ ret|=coder_int_to_strint((ymd>>5)&0x0f,&uid_code[6],2);
+ ret|=coder_int_to_strint((ymd)&0x1f,&uid_code[8],2);
+ uid_code[10]=feature/10000;
+ ret|=coder_int_to_strint(feature%10000/100,&uid_code[11],3);
+ ret|=coder_int_to_strint(feature%100,&uid_code[14],2);
+ return ret;
+}
+
+
+
+// uid码转管壳码
+int coder_uid_to_shell(const char *uid_code,char *shell_code)
+{
+ memset(shell_code,0,13);
+ // 添加雷管厂代号
+ memcpy(&shell_code[0],&uid_code[4],2);
+ // 添加生产年份
+ memcpy(&shell_code[2],&uid_code[3],1);
+ // 添加月日特征码流水号
+ memcpy(&shell_code[3],&uid_code[6],10);
+
+ return 0;
+}
+
+
+
+
+
diff --git a/source/coder/coder_lib.h b/source/coder/coder_lib.h
new file mode 100644
index 0000000..4dcabb5
--- /dev/null
+++ b/source/coder/coder_lib.h
@@ -0,0 +1,36 @@
+#ifndef coder_lib_h__
+#define coder_lib_h__
+
+
+#include "stdint.h"
+
+
+
+
+
+
+
+// 管壳码转uid码
+int coder_shell_to_uid(const char *year,const char *shell_code,char *uid_code);
+
+// uid码转存储码
+int coder_uid_to_save(const char *uid_code,uint8_t *save_code);
+
+// 存储码转uid
+int coder_save_to_uid(const uint8_t *save_code,char *uid_code);
+
+// uid码转管壳码
+int coder_uid_to_shell(const char *uid_code,char *shell_code);
+
+
+
+
+
+
+
+
+
+
+
+#endif
+
diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h
index 21247f9..a6097a8 100644
--- a/source/main/compiler_info.h
+++ b/source/main/compiler_info.h
@@ -6,7 +6,7 @@
-#define BUILD_DATE "2023-06-09 18:00:05"
+#define BUILD_DATE "2023-06-13 17:34:13"
diff --git a/source/soft/mystring.c b/source/soft/mystring.c
index ae6be68..9e41bb5 100644
--- a/source/soft/mystring.c
+++ b/source/soft/mystring.c
@@ -137,7 +137,7 @@ static int str_ainttoi(const char *s)
}
return ret*sig;
}
-static int str_ahextoi(const char *s)
+int str_ahextoi(const char *s)
{
int ret=0;
while(*s)
@@ -164,7 +164,7 @@ static int str_ahextoi(const char *s)
}
int str_atoi(const char *s)
{
- if(s[0]=='0'&&s[1]=='x'){
+ if(s[0]=='0'&&((s[1]=='x')||(s[1]=='X'))){
return str_ahextoi(&s[2]);
}else{
return str_ainttoi(s);
diff --git a/source/soft/mystring.h b/source/soft/mystring.h
index 054906d..411bab4 100644
--- a/source/soft/mystring.h
+++ b/source/soft/mystring.h
@@ -12,6 +12,7 @@ extern "C" {
const char *str_find_char_right(const char *s, char c);
const char *str_find_char_right_p(const char *s,const char *const p, char c);
const char *str_find_char_left(const char *const p,const char *s, char c);
+int str_ahextoi(const char *s);
int str_atoi(const char *s);
int str_len(const char *s);
int str_cpystr(char *s1, const char *s2, char c);
diff --git a/source/task/handle_for_coder.c b/source/task/handle_for_coder.c
index 83765cd..69c1c06 100644
--- a/source/task/handle_for_coder.c
+++ b/source/task/handle_for_coder.c
@@ -55,7 +55,7 @@ static void code_dolater(handle_def *h,uint8_t src,uint8_t cmd,array_def *data,c
port_set_busy(h->p,0);
port_timer_stop(h->p);
DBG_LOG("slave:%d, start failed",port_get_addr(h->p));
- emit port_end_signal(h->p,h->p,0,0,"start failed");
+ emit port_end_signal(h->p,h->p,0,-1,"start failed");
}
}else if(cmd==0x18)
{
diff --git a/source/task/tran_for_coder2.c b/source/task/tran_for_coder2.c
index 46e0b9c..1b69c03 100644
--- a/source/task/tran_for_coder2.c
+++ b/source/task/tran_for_coder2.c
@@ -8,18 +8,27 @@
#include "prot_uc.h"
#include "handle_for_coder.h"
#include "handle_for_checker.h"
-
+#include "coder_lib.h"
+#include "PSDGenerate.h"
// 这个文件解析跟赋码仪相关的命令
+
+
+
typedef struct{
ucport_def u;
uint8_t addrs_num;
char year[10];
- char uid[10][20];
- uint8_t ack[380];
+ struct{
+ char shell_code[20];
+ char uid_code[20];
+ char password[10];
+ uint8_t uid_pw_hex[15];
+ }item[10];
+ uint8_t ack[390];
uint8_t ack_num;
void (*doexert)(ucport_def *u);
}write_uid_def;
@@ -35,14 +44,25 @@ static void write_uid_end(ucport_def *u,port_mcu *src,void *data,int ack,char *e
DBG_WARN("addr err:%d",addr);
return;
}
- w->ack[addr-1]=ack;
+ uint8_t *d=&w->ack[(addr-1)*39];
w->ack_num++;
+ d[0]=addr-1;
+ d[1]=ack;
+ if(ack==0)
+ {
+ memcpy(&d[2],w->item[addr-1].shell_code,13);
+ memcpy(&d[2+13],w->item[addr-1].uid_code,16);
+ memcpy(&d[2+13+16],w->item[addr-1].password,8);
+ }else{
+ // 失败的数据全部填充'0'
+ memset(&d[2],'0',37);
+ }
if(w->ack_num>=10)
{
array_def *a=arr_creat();
arr_append(a,w->addrs_num);
- arr_appends(a,w->ack,380);
- emit tran_send_signal(w->u.p,0x81,arr_temp(a));
+ arr_appends(a,w->ack,390);
+ emit tran_send_signal(w->u.p,0x82,arr_temp(a));
tran_set_busy(w->u.p,0);
}
}
@@ -60,9 +80,9 @@ static void write_uid_return_ok(void *p)
{
arr_append(a,i);
arr_append(a,0);
- arr_append_num(a,36,0);
+ arr_append_num(a,37,'0');
}
- emit tran_send_signal(u->u.p,0x81,arr_temp(a));
+ emit tran_send_signal(u->u.p,0x82,arr_temp(a));
tran_set_busy(u->u.p,0);
}
@@ -88,13 +108,22 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
// 数据固定140字节,如果不检测某通道,则该通道填充占位符
for(int i=0;i<10;i++)
{
- memcpy(u->uid[i],arr_data(data)+1+i*14,14);
+ memcpy(u->item[i].shell_code,arr_data(data)+1+i*14,14);
+ // 生成uid码
+ coder_shell_to_uid(u->year,u->item[i].shell_code,u->item[i].uid_code);
+ // 生成存储码
+ coder_uid_to_save(u->item[i].uid_code,u->item[i].uid_pw_hex);
+ // 生成密码
+ GetPasswordByUidCode((uint8_t *)u->item[i].uid_code,&u->item[i].uid_pw_hex[8]);
+ // 生成密码字符串
+ sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[8],
+ u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[11]);
}
// 默认失败
for(int i=0;i<10;i++)
{
- u->ack[i*38+0]=i;
- u->ack[i*38+1]=1;
+ u->ack[i*39+0]=i;
+ u->ack[i*39+1]=1;
}
tran_set_busy(t,1);
for(int i=0;i<10;i++)
@@ -103,7 +132,7 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
port_mcu *mcu=tran_get_portm(u->u.p,i);
// 这里打开赋码操作
if(mcu){
- //port_start(mcu,code_creat(15,8,&u->uid[i]));
+ port_start(mcu,code_creat(8,4,u->item[i].uid_pw_hex));
}
}
}
@@ -114,7 +143,7 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
emit tran_reply_signal(u->u.p,arr_temp(a));
// test:稍后返回成功
- later_execute(write_uid_return_ok,u,500);
+ //later_execute(write_uid_return_ok,u,500);
return (ucport_def *)u;
}
@@ -124,6 +153,101 @@ transmit_export(ym_checker,0x02,write_uid)
+// 复检完成
+static void write_uid2_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_str)
+{
+ write_uid_def *w=(write_uid_def *)u;
+ uint8_t addr=port_get_addr(src);
+ if(addr<=0||addr>10){
+ DBG_WARN("addr err:%d",addr);
+ return;
+ }
+ uint8_t *d=&w->ack[(addr-1)*39];
+ w->ack_num++;
+ d[0]=addr-1;
+ d[1]=ack;
+ if(ack==0)
+ {
+ memcpy(&d[2],w->item[addr-1].shell_code,13);
+ memcpy(&d[2+13],w->item[addr-1].uid_code,16);
+ memcpy(&d[2+13+16],w->item[addr-1].password,8);
+ }else{
+ // 失败的数据全部填充'0'
+ memset(&d[2],'0',37);
+ }
+ if(w->ack_num>=10)
+ {
+ array_def *a=arr_creat();
+ arr_append(a,w->addrs_num);
+ for(int i=0;i<10;i++)
+ {
+ uint8_t *d=&w->ack[i*39];
+ arr_appends(a,d,2);
+ }
+ emit tran_send_signal(w->u.p,0x83,arr_temp(a));
+ tran_set_busy(w->u.p,0);
+ }
+}
+
+static ucport_def *write_uid2(tran_def *t, uint8_t cmd,array_def *data)
+{
+ if(arr_length(data)<242){
+ DBG_WARN("cmd format err.");
+ return 0;
+ }
+ write_uid_def *u=calloc(1,sizeof(write_uid_def));
+ u->u.p=t;
+ u->u.del=write_del;
+ u->u.doend=write_uid2_end;
+ u->addrs_num=arr_get(data,0);
+ memcpy(u->year,arr_data(data)+1,4);
+ // 数据固定140字节,如果不检测某通道,则该通道填充占位符
+ for(int i=0;i<10;i++)
+ {
+ memcpy(u->item[i].shell_code,arr_data(data)+1+i*14,14);
+ // 生成uid码
+ coder_shell_to_uid(u->year,u->item[i].shell_code,u->item[i].uid_code);
+ // 生成存储码
+ coder_uid_to_save(u->item[i].uid_code,u->item[i].uid_pw_hex);
+ // 生成密码
+ GetPasswordByUidCode((uint8_t *)u->item[i].uid_code,&u->item[i].uid_pw_hex[8]);
+ // 生成密码字符串
+ sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[8],
+ u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[11]);
+ }
+ // 默认失败
+ for(int i=0;i<10;i++)
+ {
+ u->ack[i*39+0]=i;
+ u->ack[i*39+1]=1;
+ }
+ tran_set_busy(t,1);
+ for(int i=0;i<10;i++)
+ {
+ if(1){
+ port_mcu *mcu=tran_get_portm(u->u.p,i);
+ // 这里打开赋码操作
+ if(mcu){
+ port_start(mcu,code_creat(8,4,u->item[i].uid_pw_hex));
+ }
+ }
+ }
+
+ array_def *a=arr_creat();
+ arr_append(a,u->addrs_num);
+ arr_append(a,0);
+ emit tran_reply_signal(u->u.p,arr_temp(a));
+
+ // test:稍后返回成功
+ //later_execute(write_uid_return_ok,u,500);
+
+ return (ucport_def *)u;
+}
+
+// 复检,与注码动作相同,但返回值不同
+transmit_export(ym_checker,0x03,write_uid2)
+
+
@@ -152,8 +276,10 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
return;
}
uint8_t *ack_d=&w->ack[(addr-1)*6];
+ ack_d[0]=addr-1;
ack_d[1]=ack;
// TODO: 还有4字节数据
+
w->ack_num++;
if(w->ack_num>=10)
{
@@ -216,9 +342,9 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
if(1){
port_mcu *mcu=tran_get_portm(u->u.p,i);
// 这里打开检测
-// if(mcu){
-// port_start(mcu,check_creat(check_scheme()));
-// }
+ if(mcu){
+ port_start(mcu,check_creat(check_scheme()));
+ }
}
}
@@ -229,7 +355,7 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
emit tran_reply_signal(u->u.p,arr_temp(a));
// test:稍后返回成功
- later_execute(check_return_ok,u,500);
+ //later_execute(check_return_ok,u,500);
return (ucport_def *)u;
}