Compare commits
3 Commits
aca260ba54
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| f40c422684 | |||
| d08ca726df | |||
| 26e48126c8 |
@@ -135,7 +135,7 @@
|
|||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>JL2CM3</Key>
|
<Key>JL2CM3</Key>
|
||||||
<Name>-U4294967295 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)</Name>
|
<Name>-U12345678 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
@@ -250,7 +250,7 @@
|
|||||||
<DebugFlag>
|
<DebugFlag>
|
||||||
<trace>0</trace>
|
<trace>0</trace>
|
||||||
<periodic>1</periodic>
|
<periodic>1</periodic>
|
||||||
<aLwin>1</aLwin>
|
<aLwin>0</aLwin>
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>0</aSer1>
|
<aSer1>0</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
@@ -410,7 +410,7 @@
|
|||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>JL2CM3</Key>
|
<Key>JL2CM3</Key>
|
||||||
<Name>-U4294967295 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO14 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)</Name>
|
<Name>-U12345678 -O78 -S4 -ZTIFSpeedSel2000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO14 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_otp.FLM -FS03000C00 -FL03FC -FP0($$Device:HC32F460KETA$FlashARM\HC32F460_otp.FLM) -FF1HC32F460_512K.FLM -FS10 -FL180000 -FP1($$Device:HC32F460KETA$FlashARM\HC32F460_512K.FLM)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
@@ -428,40 +428,7 @@
|
|||||||
<Name></Name>
|
<Name></Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint>
|
<Breakpoint/>
|
||||||
<Bp>
|
|
||||||
<Number>0</Number>
|
|
||||||
<Type>0</Type>
|
|
||||||
<LineNumber>1004</LineNumber>
|
|
||||||
<EnabledFlag>1</EnabledFlag>
|
|
||||||
<Address>0</Address>
|
|
||||||
<ByteObject>0</ByteObject>
|
|
||||||
<HtxType>0</HtxType>
|
|
||||||
<ManyObjects>0</ManyObjects>
|
|
||||||
<SizeOfObject>0</SizeOfObject>
|
|
||||||
<BreakByAccess>0</BreakByAccess>
|
|
||||||
<BreakIfRCount>0</BreakIfRCount>
|
|
||||||
<Filename>..\source\User\Src\Public.c</Filename>
|
|
||||||
<ExecCommand></ExecCommand>
|
|
||||||
<Expression></Expression>
|
|
||||||
</Bp>
|
|
||||||
<Bp>
|
|
||||||
<Number>1</Number>
|
|
||||||
<Type>0</Type>
|
|
||||||
<LineNumber>1006</LineNumber>
|
|
||||||
<EnabledFlag>1</EnabledFlag>
|
|
||||||
<Address>0</Address>
|
|
||||||
<ByteObject>0</ByteObject>
|
|
||||||
<HtxType>0</HtxType>
|
|
||||||
<ManyObjects>0</ManyObjects>
|
|
||||||
<SizeOfObject>0</SizeOfObject>
|
|
||||||
<BreakByAccess>0</BreakByAccess>
|
|
||||||
<BreakIfRCount>0</BreakIfRCount>
|
|
||||||
<Filename>..\source\User\Src\Public.c</Filename>
|
|
||||||
<ExecCommand></ExecCommand>
|
|
||||||
<Expression></Expression>
|
|
||||||
</Bp>
|
|
||||||
</Breakpoint>
|
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>0</count>
|
<count>0</count>
|
||||||
@@ -513,7 +480,7 @@
|
|||||||
<DebugFlag>
|
<DebugFlag>
|
||||||
<trace>0</trace>
|
<trace>0</trace>
|
||||||
<periodic>1</periodic>
|
<periodic>1</periodic>
|
||||||
<aLwin>1</aLwin>
|
<aLwin>0</aLwin>
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>0</aSer1>
|
<aSer1>0</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
@@ -729,6 +696,18 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>14</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\source\User\Src\EthTask.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>EthTask.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
@@ -739,7 +718,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>14</FileNumber>
|
<FileNumber>15</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -751,7 +730,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>15</FileNumber>
|
<FileNumber>16</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -763,7 +742,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>16</FileNumber>
|
<FileNumber>17</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -775,7 +754,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>17</FileNumber>
|
<FileNumber>18</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -787,7 +766,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>18</FileNumber>
|
<FileNumber>19</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -799,7 +778,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>19</FileNumber>
|
<FileNumber>20</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -811,7 +790,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>20</FileNumber>
|
<FileNumber>21</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -823,7 +802,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>21</FileNumber>
|
<FileNumber>22</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -835,7 +814,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>22</FileNumber>
|
<FileNumber>23</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -847,7 +826,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>23</FileNumber>
|
<FileNumber>24</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -859,7 +838,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>24</FileNumber>
|
<FileNumber>25</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -871,7 +850,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>25</FileNumber>
|
<FileNumber>26</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -883,7 +862,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>26</FileNumber>
|
<FileNumber>27</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -895,7 +874,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>27</FileNumber>
|
<FileNumber>28</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -907,7 +886,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>28</FileNumber>
|
<FileNumber>29</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -919,7 +898,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>29</FileNumber>
|
<FileNumber>30</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -931,7 +910,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>30</FileNumber>
|
<FileNumber>31</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -951,7 +930,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>4</GroupNumber>
|
<GroupNumber>4</GroupNumber>
|
||||||
<FileNumber>31</FileNumber>
|
<FileNumber>32</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -971,7 +950,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>32</FileNumber>
|
<FileNumber>33</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -983,7 +962,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>33</FileNumber>
|
<FileNumber>34</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -1003,7 +982,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>34</FileNumber>
|
<FileNumber>35</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -1015,7 +994,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>35</FileNumber>
|
<FileNumber>36</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -1027,7 +1006,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>36</FileNumber>
|
<FileNumber>37</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -1039,7 +1018,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>37</FileNumber>
|
<FileNumber>38</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -1059,7 +1038,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>38</FileNumber>
|
<FileNumber>39</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@@ -1089,7 +1068,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>::RTOS</GroupName>
|
<GroupName>::RTOS</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>1</RteFlg>
|
<RteFlg>1</RteFlg>
|
||||||
|
|||||||
@@ -493,6 +493,11 @@
|
|||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\source\User\Src\utils.c</FilePath>
|
<FilePath>..\source\User\Src\utils.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>EthTask.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\source\User\Src\EthTask.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
@@ -1419,6 +1424,11 @@
|
|||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\source\User\Src\utils.c</FilePath>
|
<FilePath>..\source\User\Src\utils.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>EthTask.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\source\User\Src\EthTask.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
#include <rthw.h>
|
#include <rthw.h>
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
extern GateWayPara_t GateWay;
|
||||||
|
|
||||||
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
|
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
|
||||||
/*
|
/*
|
||||||
@@ -73,16 +76,24 @@ void rt_hw_board_init(void)
|
|||||||
static int uart_init(void)
|
static int uart_init(void)
|
||||||
{
|
{
|
||||||
//#error "TODO 2: Enable the hardware uart and config baudrate."
|
//#error "TODO 2: Enable the hardware uart and config baudrate."
|
||||||
DbgUart_Config(500000);
|
DbgOrCat1Uart_Config(500000);
|
||||||
|
// RS485Ch1_Config(500000);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
INIT_BOARD_EXPORT(uart_init);
|
INIT_BOARD_EXPORT(uart_init);
|
||||||
|
|
||||||
void rt_hw_console_output(const char *str)
|
void rt_hw_console_output(const char *str)
|
||||||
{
|
{
|
||||||
//#error "TODO 3: Output the string 'str' through the uart."
|
|
||||||
rt_enter_critical();
|
rt_enter_critical();
|
||||||
DebugUartSend((uint8_t *)str, strlen(str));
|
if(GateWay.ConfigPara.DebugChannel == DEBUG_CH_RS485_1) {
|
||||||
|
RS485Ch1UartSend((uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
else if(GateWay.ConfigPara.DebugChannel == DEBUG_CH_RS485_2) {
|
||||||
|
RS485Ch2UartSend((uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DebugOrCat1UartSend((uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
rt_exit_critical();
|
rt_exit_critical();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
#include "CatOneTask.h"
|
#include "CatOneTask.h"
|
||||||
|
#include "EthTask.h"
|
||||||
#include "RS485Task.h"
|
#include "RS485Task.h"
|
||||||
#include "Public.h"
|
#include "Public.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -9,7 +10,7 @@
|
|||||||
|
|
||||||
#define DBG_RX_LEN_MAX 128
|
#define DBG_RX_LEN_MAX 128
|
||||||
//#define DBG_LOG(...) rt_kprintf(__VA_ARGS__)
|
//#define DBG_LOG(...) rt_kprintf(__VA_ARGS__)
|
||||||
#define DEBUG_CMD_CNT 31
|
#define DEBUG_CMD_CNT 29
|
||||||
#define DEBUG_BUFF_SIZE_MAX 512
|
#define DEBUG_BUFF_SIZE_MAX 512
|
||||||
|
|
||||||
#define DEBUG_BUFSIZE 200
|
#define DEBUG_BUFSIZE 200
|
||||||
@@ -52,10 +53,10 @@ void vcom_Print(uint8_t sLen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: Debug_Printf
|
* 函数名称: Debug_Printf
|
||||||
* 功能描述: RS485通道1任务函数
|
* 功能描述: RS485通道1任务函数
|
||||||
* 参 数: 任务参数入口
|
* 参 数: 任务参数入口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void Debug_Printf(char *format, ...)
|
void Debug_Printf(char *format, ...)
|
||||||
{
|
{
|
||||||
@@ -92,10 +93,10 @@ void Debug_Printf(char *format, ...)
|
|||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485Ch2_Thread_Entry
|
* 函数名称: RS485Ch2_Thread_Entry
|
||||||
* 功能描述: RS485通道1任务函数
|
* 功能描述: RS485通道1任务函数
|
||||||
* 参 数: 任务参数入口
|
* 参 数: 任务参数入口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void Debug_Thread_Entry(void *parameter)
|
void Debug_Thread_Entry(void *parameter)
|
||||||
{
|
{
|
||||||
@@ -106,7 +107,7 @@ void Debug_Thread_Entry(void *parameter)
|
|||||||
if(DebugRev_Sem == RT_NULL) {
|
if(DebugRev_Sem == RT_NULL) {
|
||||||
rt_kprintf("DebugRev Sem Create Failed!\r\n");
|
rt_kprintf("DebugRev Sem Create Failed!\r\n");
|
||||||
}
|
}
|
||||||
rt_kprintf("DebugRev Thread is running!\r\n");
|
rt_kprintf("DebugRev Thread is running!\r\n");
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
result = rt_sem_take(DebugRev_Sem, RT_WAITING_FOREVER);
|
result = rt_sem_take(DebugRev_Sem, RT_WAITING_FOREVER);
|
||||||
@@ -119,13 +120,18 @@ void Debug_Thread_Entry(void *parameter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485Ch2RxIrqCallback
|
* 函数名称: DbgOrCat1RxIrqCallback
|
||||||
* 功能描述: RS485通道1中断处理回调函数
|
* 功能描述: 调试和Cat1中断处理回调函数
|
||||||
* 参 数: rData 接收到的数据
|
* 参 数: rData 接收到的数据
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DbgRxIrqCallback(uint8_t rData)
|
void DbgOrCat1RxIrqCallback(uint8_t rData)
|
||||||
{
|
{
|
||||||
|
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
|
||||||
|
Cat1IrqCallback(rData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(DebugRxTimeOut1mSCnt == 0)
|
if(DebugRxTimeOut1mSCnt == 0)
|
||||||
DebugRxLen = 0;
|
DebugRxLen = 0;
|
||||||
|
|
||||||
@@ -136,8 +142,13 @@ void DbgRxIrqCallback(uint8_t rData)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DebugRxOverhandler(void)
|
void DebugOrCat1RxOverhandler(void)
|
||||||
{
|
{
|
||||||
|
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
|
||||||
|
Cat1OverHandler();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(DebugRxTimeOut1mSCnt > 0)
|
if(DebugRxTimeOut1mSCnt > 0)
|
||||||
DebugRxTimeOut1mSCnt--;
|
DebugRxTimeOut1mSCnt--;
|
||||||
|
|
||||||
@@ -148,12 +159,12 @@ void DebugRxOverhandler(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugAnalyze
|
* 函数名称: DebugAnalyze
|
||||||
* 功能描述: 调试指令解析
|
* 功能描述: 调试指令解析
|
||||||
* 参 数: GateWay, 网关参数句柄
|
* 参 数: GateWay, 网关参数句柄
|
||||||
rData,输入数据
|
rData,输入数据
|
||||||
rLen, 输入数据长度
|
rLen, 输入数据长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
void DebugAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
||||||
{
|
{
|
||||||
@@ -186,17 +197,17 @@ void DebugAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
for(int i = 0; i < DEBUG_CMD_CNT; i++) {
|
for(int i = 0; i < DEBUG_CMD_CNT; i++) {
|
||||||
if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0) {
|
if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0) {
|
||||||
DebugFun[i].DBGExec(argc, argv);
|
DebugFun[i].DBGExec(argc, argv);
|
||||||
break; // 添加break避免继续匹配
|
break; // 添加break避免继续匹配
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdMainOnOff
|
* 函数名称: DebugCmdMainOnOff
|
||||||
* 功能描述: 主调试信息开关
|
* 功能描述: 主调试信息开关
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdMainOnOff(int argc, char *argv[])
|
void DebugCmdMainOnOff(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -220,11 +231,11 @@ void DebugCmdMainOnOff(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdCat1OnOff
|
* 函数名称: DebugCmdCat1OnOff
|
||||||
* 功能描述: CAT1调试信息开关
|
* 功能描述: CAT1调试信息开关
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdCat1OnOff(int argc, char *argv[])
|
void DebugCmdCat1OnOff(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -247,12 +258,33 @@ void DebugCmdCat1OnOff(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DebugCmdEthOnOff(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
DBG_LOG("\r\n");
|
||||||
|
if(argc < 2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(strcmp(argv[1], "?") == 0) {
|
||||||
|
DBG_LOG("Debug Cmd: eth arg1\r\n");
|
||||||
|
DBG_LOG(" brief --> Turn the Eth_DBG on or off.\r\n");
|
||||||
|
DBG_LOG(" arg1 --> on/off\r\n\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcmp(argv[1], "on") == 0) {
|
||||||
|
ETHOnOff(true);
|
||||||
|
}
|
||||||
|
else if(strcmp(argv[1], "off") == 0) {
|
||||||
|
ETHOnOff(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdCat1OnOff
|
* 函数名称: DebugCmdCat1OnOff
|
||||||
* 功能描述: CAT1调试信息开关
|
* 功能描述: CAT1调试信息开关
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdRS485Ctrl(int argc, char *argv[])
|
void DebugCmdRS485Ctrl(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -408,11 +440,11 @@ void DebugCmdRS485Ctrl(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdDelCommUnit
|
* 函数名称: DebugCmdDelCommUnit
|
||||||
* 功能描述: 删除已注册的通讯单元
|
* 功能描述: 删除已注册的通讯单元
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdDelCommUnit(int argc, char *argv[])
|
void DebugCmdDelCommUnit(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -459,11 +491,11 @@ void DebugCmdDelCommUnit(int argc, char *argv[])
|
|||||||
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdLsCommUnit
|
* 函数名称: DebugCmdLsCommUnit
|
||||||
* 功能描述: 查看通讯单元信息
|
* 功能描述: 查看通讯单元信息
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdLsCommUnit(int argc, char *argv[])
|
void DebugCmdLsCommUnit(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -525,11 +557,11 @@ void DebugCmdLsCommUnit(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdExclCommUnit
|
* 函数名称: DebugCmdExclCommUnit
|
||||||
* 功能描述: 排除指定的通讯单元MAC
|
* 功能描述: 排除指定的通讯单元MAC
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdExclCommUnit(int argc, char *argv[])
|
void DebugCmdExclCommUnit(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -560,7 +592,7 @@ void DebugCmdExclCommUnit(int argc, char *argv[])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {//寻找空位
|
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {//寻找空位
|
||||||
if(GateWay->ConfigPara.ExclCommUnit[i].ExclFlag == false){
|
if(GateWay->ConfigPara.ExclCommUnit[i].ExclFlag == false){
|
||||||
GateWay->ConfigPara.ExclCommUnit[i].ExclFlag = true;
|
GateWay->ConfigPara.ExclCommUnit[i].ExclFlag = true;
|
||||||
memcpy(&GateWay->ConfigPara.ExclCommUnit[i].ExclMac, &mac[0], 6);
|
memcpy(&GateWay->ConfigPara.ExclCommUnit[i].ExclMac, &mac[0], 6);
|
||||||
@@ -568,7 +600,7 @@ void DebugCmdExclCommUnit(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = CheckCommUnitReg(GateWay, mac);//删除注册信息
|
ret = CheckCommUnitReg(GateWay, mac);//删除注册信息
|
||||||
if(ret > -1) {
|
if(ret > -1) {
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].RegFlag = false;
|
GateWay->ConfigPara.CommUnitArray[ret].RegFlag = false;
|
||||||
}
|
}
|
||||||
@@ -577,11 +609,11 @@ void DebugCmdExclCommUnit(int argc, char *argv[])
|
|||||||
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdDelExclCommUnit
|
* 函数名称: DebugCmdDelExclCommUnit
|
||||||
* 功能描述: 删除指定的被排除的通信单元MAC
|
* 功能描述: 删除指定的被排除的通信单元MAC
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdDelExclCommUnit(int argc, char *argv[])
|
void DebugCmdDelExclCommUnit(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -628,11 +660,11 @@ void DebugCmdDelExclCommUnit(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdLsExclCommUnit
|
* 函数名称: DebugCmdLsExclCommUnit
|
||||||
* 功能描述: 查看被排除的通讯单元信息
|
* 功能描述: 查看被排除的通讯单元信息
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdLsExclCommUnit(int argc, char *argv[])
|
void DebugCmdLsExclCommUnit(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -662,11 +694,11 @@ void DebugCmdLsExclCommUnit(int argc, char *argv[])
|
|||||||
DBG_LOG("\r\n\r\n");
|
DBG_LOG("\r\n\r\n");
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdSetComm
|
* 函数名称: DebugCmdSetComm
|
||||||
* 功能描述: 设置网关与服务通讯方式
|
* 功能描述: 设置网关与服务通讯方式
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdSetComm(int argc, char *argv[])
|
void DebugCmdSetComm(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -682,9 +714,15 @@ void DebugCmdSetComm(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(strcmp(argv[1], "cat1") == 0) {
|
if(strcmp(argv[1], "cat1") == 0) {
|
||||||
|
if(GateWay->ConfigPara.DebugChannel == DEBUG_CH_DBG) {
|
||||||
|
DBG_LOG("dch is dbg, USART1 occupied. Please switch dch to ch1/ch2 first.\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
GateWay->SvrRegFlag = false;
|
GateWay->SvrRegFlag = false;
|
||||||
GateWay->ConfigPara.Comm = CATONE_COMM;
|
GateWay->ConfigPara.Comm = CATONE_COMM;
|
||||||
ETHStop();
|
ETHStop();
|
||||||
|
ETH_OFF();
|
||||||
|
DbgOrCat1Uart_Config(115200);
|
||||||
CAT1_ON();
|
CAT1_ON();
|
||||||
CatOneReset();
|
CatOneReset();
|
||||||
DBG_LOG("Set the communication method to Cat1.\r\n");
|
DBG_LOG("Set the communication method to Cat1.\r\n");
|
||||||
@@ -697,9 +735,11 @@ void DebugCmdSetComm(int argc, char *argv[])
|
|||||||
CatOneStop();
|
CatOneStop();
|
||||||
rt_thread_delay(3000);
|
rt_thread_delay(3000);
|
||||||
CAT1_PWR_KEY_SET();
|
CAT1_PWR_KEY_SET();
|
||||||
|
DBG_ON();
|
||||||
}
|
}
|
||||||
GateWay->SvrRegFlag = false;
|
GateWay->SvrRegFlag = false;
|
||||||
GateWay->ConfigPara.Comm = ETH_COMM;
|
GateWay->ConfigPara.Comm = ETH_COMM;
|
||||||
|
DbgOrCat1Uart_Config(500000);
|
||||||
ETH_ON();
|
ETH_ON();
|
||||||
ETHReset();
|
ETHReset();
|
||||||
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
||||||
@@ -707,41 +747,11 @@ void DebugCmdSetComm(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdSetCollTime
|
* 函数名称: DebugCmdReadHisData
|
||||||
* 功能描述: 设置数据采集间隔
|
* 功能描述: 读取历史数据
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
|
||||||
void DebugCmdSetCollTime(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
DBG_LOG("\r\n");
|
|
||||||
if(argc < 2)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(strcmp(argv[1], "?") == 0) {
|
|
||||||
DBG_LOG("Debug Cmd: sct para\r\n");
|
|
||||||
DBG_LOG(" brief --> Set the data collection interval.\r\n");
|
|
||||||
DBG_LOG(" arg1 --> para: (10~3600),Set the range from 10 to 3600 seconds.\r\n\r\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int time = atoi(argv[1]);
|
|
||||||
if(time < 10 && time > 7200) {
|
|
||||||
DBG_LOG("RS485 Cmd Para Error!\r\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
GateWay->ConfigPara.CommUnitReadInterval = time;
|
|
||||||
DBG_LOG("Set the collection time interval to %d seconds.\r\n", time);
|
|
||||||
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************************
|
|
||||||
* 函数名称: DebugCmdReadHisData
|
|
||||||
* 功能描述: 读取历史数据
|
|
||||||
* 参 数: argc, 输入参数数量
|
|
||||||
argv, 输入参数
|
|
||||||
* 返 回 值: 无
|
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdReadHisData(int argc, char *argv[])
|
void DebugCmdReadHisData(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -816,11 +826,11 @@ void DebugCmdReadHisData(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdDelHisData
|
* 函数名称: DebugCmdDelHisData
|
||||||
* 功能描述: 删除历史数据
|
* 功能描述: 删除历史数据
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdDelHisData(int argc, char *argv[])
|
void DebugCmdDelHisData(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -836,11 +846,11 @@ void DebugCmdDelHisData(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdGetHisInfo
|
* 函数名称: DebugCmdGetHisInfo
|
||||||
* 功能描述: 获取历史数据信息
|
* 功能描述: 获取历史数据信息
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdGetHisInfo(int argc, char *argv[])
|
void DebugCmdGetHisInfo(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -877,11 +887,11 @@ void DebugCmdGetHisInfo(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdRestoreFactory
|
* 函数名称: DebugCmdRestoreFactory
|
||||||
* 功能描述: 恢复出厂设置
|
* 功能描述: 恢复出厂设置
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdRestoreFactory(int argc, char *argv[])
|
void DebugCmdRestoreFactory(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -907,11 +917,11 @@ void DebugCmdRestoreFactory(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdUpload
|
* 函数名称: DebugCmdUpload
|
||||||
* 功能描述: 上传当前网关状态
|
* 功能描述: 上传当前网关状态
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugCmdUpload(int argc, char *argv[])
|
static void DebugCmdUpload(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -946,11 +956,11 @@ static void DebugCmdUpload(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdRegister
|
* 函数名称: DebugCmdRegister
|
||||||
* 功能描述: 重新向上位机发起注册
|
* 功能描述: 重新向上位机发起注册
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugCmdRegister(int argc, char *argv[])
|
static void DebugCmdRegister(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -977,11 +987,11 @@ static void DebugCmdRegister(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdRestoreFactory
|
* 函数名称: DebugCmdRestoreFactory
|
||||||
* 功能描述: 恢复出厂设置
|
* 功能描述: 恢复出厂设置
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdReboot(int argc, char *argv[])
|
void DebugCmdReboot(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -999,11 +1009,11 @@ void DebugCmdReboot(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdSetSensorCollectTime
|
* 函数名称: DebugCmdSetSensorCollectTime
|
||||||
* 功能描述: 设置采集时间
|
* 功能描述: 设置采集时间
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdSetCollectTime(int argc, char *argv[])
|
void DebugCmdSetCollectTime(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1024,7 +1034,7 @@ void DebugCmdSetCollectTime(int argc, char *argv[])
|
|||||||
|
|
||||||
int IntervalTime = atoi(argv[2]);
|
int IntervalTime = atoi(argv[2]);
|
||||||
|
|
||||||
if(IntervalTime < 10 && IntervalTime > 7200) {
|
if(IntervalTime < 10 || IntervalTime > 7200) {
|
||||||
DBG_LOG("SCT Cmd Para Error!\r\n");
|
DBG_LOG("SCT Cmd Para Error!\r\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1065,11 +1075,11 @@ void DebugCmdSetCollectTime(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdTimeSync
|
* 函数名称: DebugCmdTimeSync
|
||||||
* 功能描述: 时间同步
|
* 功能描述: 时间同步
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdTimeSync(int argc, char *argv[])
|
void DebugCmdTimeSync(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1107,11 +1117,11 @@ void DebugCmdTimeSync(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdTimeSync
|
* 函数名称: DebugCmdTimeSync
|
||||||
* 功能描述: 查询内置通讯单元传感器
|
* 功能描述: 查询内置通讯单元传感器
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
extern SensorCommPara_t SComm1Para;
|
extern SensorCommPara_t SComm1Para;
|
||||||
extern SensorCommPara_t SComm2Para;
|
extern SensorCommPara_t SComm2Para;
|
||||||
@@ -1142,11 +1152,11 @@ void DebugCmdQuerySensor(int argc, char *argv[])
|
|||||||
|
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdSelDebugChannel
|
* 函数名称: DebugCmdSelDebugChannel
|
||||||
* 功能描述: 选择调试信息输出通道,
|
* 功能描述: 选择调试信息输出通道,
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdSelDebugChannel(int argc, char *argv[])
|
void DebugCmdSelDebugChannel(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1166,7 +1176,12 @@ void DebugCmdSelDebugChannel(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(strcmp(argv[1], "dbg") == 0) {
|
if(strcmp(argv[1], "dbg") == 0) {
|
||||||
|
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
|
||||||
|
DBG_LOG("comm is cat1, USART1 occupied. Please switch comm to eth first.\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
DBG_LOG("Select Debug Channel is dbg\r\n");
|
DBG_LOG("Select Debug Channel is dbg\r\n");
|
||||||
|
DbgOrCat1Uart_Config(500000);
|
||||||
GateWay->ConfigPara.DebugChannel = DEBUG_CH_DBG;
|
GateWay->ConfigPara.DebugChannel = DEBUG_CH_DBG;
|
||||||
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
||||||
}
|
}
|
||||||
@@ -1198,11 +1213,11 @@ void DebugCmdSelDebugChannel(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdSetLTENet
|
* 函数名称: DebugCmdSetLTENet
|
||||||
* 功能描述: 设置Cat1/4G服务器的地址和端口
|
* 功能描述: 设置Cat1/4G服务器的地址和端口
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugCmdSetLTENet(int argc, char *argv[])
|
static void DebugCmdSetLTENet(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1249,11 +1264,11 @@ static void DebugCmdSetLTENet(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdSetMac
|
* 函数名称: DebugCmdSetMac
|
||||||
* 功能描述: 设置MAC地址
|
* 功能描述: 设置MAC地址
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugCmdSetMac(int argc, char *argv[])
|
static void DebugCmdSetMac(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1291,11 +1306,11 @@ static void DebugCmdSetMac(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdGetPara
|
* 函数名称: DebugCmdGetPara
|
||||||
* 功能描述: 查看参数
|
* 功能描述: 查看参数
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugCmdGetPara(int argc, char *argv[])
|
static void DebugCmdGetPara(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1366,11 +1381,11 @@ static void DebugCmdGetPara(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdCali
|
* 函数名称: DebugCmdCali
|
||||||
* 功能描述: 校准传感器
|
* 功能描述: 校准传感器
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugCmdCali(int argc, char *argv[])
|
static void DebugCmdCali(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1423,12 +1438,12 @@ static void DebugCmdCali(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < COMMUNIT_NUM_MAX; i++)//参数遍历
|
for(int i = 0; i < COMMUNIT_NUM_MAX; i++)//参数遍历
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true)
|
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true)
|
||||||
GateWay->ConfigPara.CommUnitArray[i].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[i].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
||||||
}
|
}
|
||||||
//Sx1276LoRaSendBuffer(CommUnitCmd, sizeof(CommUnitFrameHeader_t) + 2);//低功耗模式下不用下发
|
//Sx1276LoRaSendBuffer(CommUnitCmd, sizeof(CommUnitFrameHeader_t) + 2);//低功耗模式下不用下发
|
||||||
|
|
||||||
DBG_LOG("Calibrate all communication units.\r\n");
|
DBG_LOG("Calibrate all communication units.\r\n");
|
||||||
return;
|
return;
|
||||||
@@ -1471,14 +1486,14 @@ static void DebugCmdCali(int argc, char *argv[])
|
|||||||
CommUnitCmd[sizeof(CommUnitFrameHeader_t)] = crc16 & 0x00ff;
|
CommUnitCmd[sizeof(CommUnitFrameHeader_t)] = crc16 & 0x00ff;
|
||||||
CommUnitCmd[sizeof(CommUnitFrameHeader_t) + 1] = (crc16 >> 8) & 0x00ff;
|
CommUnitCmd[sizeof(CommUnitFrameHeader_t) + 1] = (crc16 >> 8) & 0x00ff;
|
||||||
|
|
||||||
if(mac[2] == 0x01) { //LORA通讯
|
if(mac[2] == 0x01) { //LORA通讯
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].RegFlag == true)
|
if(GateWay->ConfigPara.CommUnitArray[ret].RegFlag == true)
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[ret].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
||||||
DBG_LOG("Wait for the device to respond. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
DBG_LOG("Wait for the device to respond. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
||||||
CUFrame->DevMac[0], CUFrame->DevMac[1], CUFrame->DevMac[2], CUFrame->DevMac[3], CUFrame->DevMac[4], CUFrame->DevMac[5]);
|
CUFrame->DevMac[0], CUFrame->DevMac[1], CUFrame->DevMac[2], CUFrame->DevMac[3], CUFrame->DevMac[4], CUFrame->DevMac[5]);
|
||||||
//Sx1276LoRaSendBuffer(CommUnitCmd, sizeof(CommUnitFrameHeader_t) + 2);
|
//Sx1276LoRaSendBuffer(CommUnitCmd, sizeof(CommUnitFrameHeader_t) + 2);
|
||||||
}
|
}
|
||||||
else if(mac[2] == 0x02) { //RS485通讯
|
else if(mac[2] == 0x02) { //RS485通讯
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) {
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) {
|
||||||
GateWay->ConfigPara.Rs485Ch1.RS485Send(Rs485Cmd, sizeof(CommUnitFrameHeader_t) + 2);
|
GateWay->ConfigPara.Rs485Ch1.RS485Send(Rs485Cmd, sizeof(CommUnitFrameHeader_t) + 2);
|
||||||
DBG_LOG("Calibrate CommUnit: %s!\r\n", argv[1]);
|
DBG_LOG("Calibrate CommUnit: %s!\r\n", argv[1]);
|
||||||
@@ -1493,11 +1508,11 @@ static void DebugCmdCali(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugLaserConfig
|
* 函数名称: DebugLaserConfig
|
||||||
* 功能描述: 激光控制
|
* 功能描述: 激光控制
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugLaserConfig(int argc, char *argv[])
|
static void DebugLaserConfig(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1588,12 +1603,12 @@ static void DebugLaserConfig(int argc, char *argv[])
|
|||||||
CommUnitCmd[len++] = crc16 & 0x00ff;
|
CommUnitCmd[len++] = crc16 & 0x00ff;
|
||||||
CommUnitCmd[len++] = (crc16 >> 8) & 0x00ff;
|
CommUnitCmd[len++] = (crc16 >> 8) & 0x00ff;
|
||||||
|
|
||||||
if(mac[2] == 0x01) { //LORA通讯,低功耗模式不用主动下发
|
if(mac[2] == 0x01) { //LORA通讯,低功耗模式不用主动下发
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].RegFlag == true)
|
if(GateWay->ConfigPara.CommUnitArray[ret].RegFlag == true)
|
||||||
{
|
{
|
||||||
if(onoff == true)
|
if(onoff == true)
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
||||||
DBG_LOG("Wait for the device to respond. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
DBG_LOG("Wait for the device to respond. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
||||||
CUFrame->DevMac[0], CUFrame->DevMac[1], CUFrame->DevMac[2], CUFrame->DevMac[3], CUFrame->DevMac[4], CUFrame->DevMac[5]);
|
CUFrame->DevMac[0], CUFrame->DevMac[1], CUFrame->DevMac[2], CUFrame->DevMac[3], CUFrame->DevMac[4], CUFrame->DevMac[5]);
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = onoff;
|
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = onoff;
|
||||||
@@ -1602,11 +1617,11 @@ static void DebugLaserConfig(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = false;
|
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = false;
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = onoff;
|
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = onoff;
|
||||||
Sx1276LoRaSendBuffer(CommUnitCmd, len);//直接发
|
Sx1276LoRaSendBuffer(CommUnitCmd, len);//直接发
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(mac[2] == 0x02) { //RS485通讯
|
else if(mac[2] == 0x02) { //RS485通讯
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) {
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable) {
|
||||||
GateWay->ConfigPara.Rs485Ch1.RS485Send(Rs485Cmd, len);
|
GateWay->ConfigPara.Rs485Ch1.RS485Send(Rs485Cmd, len);
|
||||||
DBG_LOG("Control RS485 laser CommUnit: %s!\r\n", argv[1]);
|
DBG_LOG("Control RS485 laser CommUnit: %s!\r\n", argv[1]);
|
||||||
@@ -1622,19 +1637,19 @@ static void DebugLaserConfig(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdLPConfig
|
* 函数名称: DebugCmdLPConfig
|
||||||
* 功能描述: 低功耗参数配置
|
* 功能描述: 低功耗参数配置
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugCmdLPConfig(int argc, char *argv[])
|
static void DebugCmdLPConfig(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
DBG_LOG("\r\n");
|
DBG_LOG("\r\n");
|
||||||
uint16_t CollectInterval; //采集时间间隔
|
uint16_t CollectInterval; //采集时间间隔
|
||||||
uint16_t ReportInterval; //上报时间间隔
|
uint16_t ReportInterval; //上报时间间隔
|
||||||
uint8_t ERInterval; //紧急上报时间间隔
|
uint8_t ERInterval; //紧急上报时间间隔
|
||||||
uint8_t ERTime; //紧急上报时长
|
uint8_t ERTime; //紧急上报时长
|
||||||
|
|
||||||
if(strcmp(argv[1], "?") == 0) {
|
if(strcmp(argv[1], "?") == 0) {
|
||||||
DBG_LOG("Debug Cmd: lpcfg arg1 arg2 arg3 arg4\r\n");
|
DBG_LOG("Debug Cmd: lpcfg arg1 arg2 arg3 arg4\r\n");
|
||||||
@@ -1688,11 +1703,11 @@ static void DebugCmdLPConfig(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdLPConfig
|
* 函数名称: DebugCmdLPConfig
|
||||||
* 功能描述: Lora参数配置
|
* 功能描述: Lora参数配置
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void DebugLoraConfig(int argc, char *argv[])
|
static void DebugLoraConfig(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1819,11 +1834,11 @@ static void DebugLoraConfig(int argc, char *argv[])
|
|||||||
|
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: DebugCmdHelp
|
* 函数名称: DebugCmdHelp
|
||||||
* 功能描述: 调试命令帮助信息
|
* 功能描述: 调试命令帮助信息
|
||||||
* 参 数: argc, 输入参数数量
|
* 参 数: argc, 输入参数数量
|
||||||
argv, 输入参数
|
argv, 输入参数
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void DebugCmdHelp(int argc, char *argv[])
|
void DebugCmdHelp(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -1948,6 +1963,7 @@ const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
|
|||||||
"help", DebugCmdHelp,
|
"help", DebugCmdHelp,
|
||||||
"main", DebugCmdMainOnOff,
|
"main", DebugCmdMainOnOff,
|
||||||
"cat1", DebugCmdCat1OnOff,
|
"cat1", DebugCmdCat1OnOff,
|
||||||
|
"eth", DebugCmdEthOnOff,
|
||||||
"rs485", DebugCmdRS485Ctrl,
|
"rs485", DebugCmdRS485Ctrl,
|
||||||
"cudel", DebugCmdDelCommUnit,
|
"cudel", DebugCmdDelCommUnit,
|
||||||
"culs", DebugCmdLsCommUnit,
|
"culs", DebugCmdLsCommUnit,
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
#define __DEBUG_CMD_H
|
#define __DEBUG_CMD_H
|
||||||
|
|
||||||
void Debug_Thread_Entry(void *parameter);
|
void Debug_Thread_Entry(void *parameter);
|
||||||
void DebugRxOverhandler(void);
|
void DebugOrCat1RxOverhandler(void);
|
||||||
void Debug_Printf(char *format, ...);
|
void Debug_Printf(char *format, ...);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ typedef struct stc_sdmmc_resp_card_status
|
|||||||
uint32_t ERASE_SEQ_ERR :1; ///< An error in the sequence of erase commands occurred.
|
uint32_t ERASE_SEQ_ERR :1; ///< An error in the sequence of erase commands occurred.
|
||||||
uint32_t BLOCK_LEN_ERR :1; ///< The transferred block length is not allowed for this card, or the number of transferred bytes does not match the block length.
|
uint32_t BLOCK_LEN_ERR :1; ///< The transferred block length is not allowed for this card, or the number of transferred bytes does not match the block length.
|
||||||
uint32_t ADDRESS_ERROR :1; ///< A misaligned address which did not match the block length was used in the command.
|
uint32_t ADDRESS_ERROR :1; ///< A misaligned address which did not match the block length was used in the command.
|
||||||
uint32_t OUT_OF_RANGE :1; ///< The command’s argument was out of the allowed range for this card.
|
uint32_t OUT_OF_RANGE :1; ///< The command鈥檚 argument was out of the allowed range for this card.
|
||||||
} stc_sdmmc_resp_card_status_t;
|
} stc_sdmmc_resp_card_status_t;
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ void Sx1276LoRaInit(DataRevCallBack RxCallBack)
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
SX1276LoRaSetNbTrigPeaks(3);
|
SX1276LoRaSetNbTrigPeaks(3);
|
||||||
SX1276LoRaSetLowDatarateOptimize(false); //低数据速率设置
|
SX1276LoRaSetLowDatarateOptimize(false); //低数据速率设置
|
||||||
}
|
}
|
||||||
LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | LoRaPara.SpreadFactor;
|
LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | LoRaPara.SpreadFactor;
|
||||||
//PacketCrcOn
|
//PacketCrcOn
|
||||||
@@ -463,8 +463,8 @@ void Sx1276LoRaWakeup(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
//配置本层参数的函数
|
//配置本层参数的函数
|
||||||
//频道表
|
//频道表
|
||||||
const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={
|
const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={
|
||||||
FREQ_CENT-FREQ_DEV*8, FREQ_CENT-FREQ_DEV*7, FREQ_CENT-FREQ_DEV*6, FREQ_CENT-FREQ_DEV*5,
|
FREQ_CENT-FREQ_DEV*8, FREQ_CENT-FREQ_DEV*7, FREQ_CENT-FREQ_DEV*6, FREQ_CENT-FREQ_DEV*5,
|
||||||
FREQ_CENT-FREQ_DEV*4, FREQ_CENT-FREQ_DEV*3, FREQ_CENT-FREQ_DEV*2, FREQ_CENT-FREQ_DEV*1,
|
FREQ_CENT-FREQ_DEV*4, FREQ_CENT-FREQ_DEV*3, FREQ_CENT-FREQ_DEV*2, FREQ_CENT-FREQ_DEV*1,
|
||||||
|
|||||||
@@ -638,7 +638,7 @@ typedef enum{
|
|||||||
SX1276_IH_ON= (1)
|
SX1276_IH_ON= (1)
|
||||||
}Sx1276ImplicitHeaderOnType;
|
}Sx1276ImplicitHeaderOnType;
|
||||||
|
|
||||||
//可变速率
|
//可变速率
|
||||||
typedef struct _AutoSfType{
|
typedef struct _AutoSfType{
|
||||||
Sx1276SpreadFactorType Sf;
|
Sx1276SpreadFactorType Sf;
|
||||||
uint8_t ucRssiMin, ucRssiMax;
|
uint8_t ucRssiMin, ucRssiMax;
|
||||||
@@ -747,20 +747,20 @@ typedef struct {
|
|||||||
//Down Link:
|
//Down Link:
|
||||||
//CH0-47:500.3-509.7MHz
|
//CH0-47:500.3-509.7MHz
|
||||||
|
|
||||||
#define USE_915MHZ 0//=1使用915 =0使用433
|
#define USE_915MHZ 0//=1使用915 =0使用433
|
||||||
|
|
||||||
#if (USE_915MHZ == 1)
|
#if (USE_915MHZ == 1)
|
||||||
//中心频率,不定义则默认为449000000Hz
|
//中心频率,不定义则默认为449000000Hz
|
||||||
#define FREQ_CENT 915000000ul
|
#define FREQ_CENT 915000000ul
|
||||||
//860MHz-1GHz使用PA功放,不定义则默认不使用
|
//860MHz-1GHz使用PA功放,不定义则默认不使用
|
||||||
//SX127x不定义,HOPERF模块需要定义
|
//SX127x不定义,HOPERF模块需要定义
|
||||||
#define USE_LORA_860_PA
|
#define USE_LORA_860_PA
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
中心频率配置:433100000ul + 200000*N
|
中心频率配置:433100000ul + 200000*N
|
||||||
*/
|
*/
|
||||||
#define CH0 (433100000ul + 0) //测试频率
|
#define CH0 (433100000ul + 0) //测试频率
|
||||||
#define CH1 (433100000ul + 200000)
|
#define CH1 (433100000ul + 200000)
|
||||||
#define CH2 (433100000ul + 400000)
|
#define CH2 (433100000ul + 400000)
|
||||||
#define CH3 (433100000ul + 600000)
|
#define CH3 (433100000ul + 600000)
|
||||||
|
|||||||
@@ -6,40 +6,23 @@
|
|||||||
#define CAT_ONE_REV_TIMEOUT_MAX (10 * 60 * 1000)
|
#define CAT_ONE_REV_TIMEOUT_MAX (10 * 60 * 1000)
|
||||||
#define CAT_ONE_REV_LEN_MAX 512
|
#define CAT_ONE_REV_LEN_MAX 512
|
||||||
|
|
||||||
#define CAT_ONE_POW_ON() CAT1_POW_ON()
|
|
||||||
#define CAT_ONE_POW_OFF() CAT1_POW_OFF()
|
|
||||||
|
|
||||||
#define CAT_ONE_LINKA_GET() CAT1_LINKA_GET()
|
|
||||||
#define CAT_ONE_LINKB_GET() CAT1_LINKB_GET()
|
|
||||||
|
|
||||||
#define CAT_ONE_DELAY_1MS(X)
|
|
||||||
|
|
||||||
// ETH状态机相关宏定义
|
|
||||||
#define ETH_RESET_DELAY_TIME_MAX (5 * 60 * 1000)
|
|
||||||
#define ETH_LINK_WAIT_TIME_MAX (10 * 1000)
|
|
||||||
#define ETH_REG_TIMEOUT_MAX (30 * 1000)
|
|
||||||
#define ETH_SEND_TIMEOUT_MAX (5 * 1000)
|
|
||||||
#define ETH_RECV_TIMEOUT_MAX (60 * 1000)
|
|
||||||
#define ETH_SEND_RETRY_MAX 3
|
|
||||||
#define ETH_FIRST_REG_DELAY (5 * 1000)
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CAT_ONE_AT_NULL,
|
CAT_ONE_AT_NULL,
|
||||||
CAT_ONE_AT, //开机检测
|
CAT_ONE_AT, //开机检测
|
||||||
CAT_ONE_ATE0, //关回显
|
CAT_ONE_ATE0, //关回显
|
||||||
CAT_ONE_CPIN, //识卡
|
CAT_ONE_CPIN, //识卡
|
||||||
CAT_ONE_IMEI,
|
CAT_ONE_IMEI,
|
||||||
CAT_ONE_LCCID, //读卡
|
CAT_ONE_LCCID, //读卡
|
||||||
CAT_ONE_CEREG, //查询注册状态
|
CAT_ONE_CEREG, //查询注册状态
|
||||||
CAT_ONE_CGPADDR, //查询IP地址
|
CAT_ONE_CGPADDR, //查询IP地址
|
||||||
CAT_ONE_CSQ, //查询信号强度
|
CAT_ONE_CSQ, //查询信号强度
|
||||||
CAT_ONE_LDNSGIP, //域名解析
|
CAT_ONE_LDNSGIP, //域名解析
|
||||||
CAT_ONE_LBS, //获取基站定位信息
|
CAT_ONE_LBS, //获取基站定位信息
|
||||||
CAT_ONE_LIPOPEN, //设置TCP服务器地址和端口
|
CAT_ONE_LIPOPEN, //设置TCP服务器地址和端口
|
||||||
CAT_ONE_LIPSEND, //发送数据
|
CAT_ONE_LIPSEND, //发送数据
|
||||||
CAT_ONE_LTPCLOSE, //断开连接
|
CAT_ONE_LTPCLOSE, //断开连接
|
||||||
CAT_ONE_LBSPARA,
|
CAT_ONE_LBSPARA,
|
||||||
CAT_ONE_CCLK, //获取时间
|
CAT_ONE_CCLK, //获取时间
|
||||||
CAT_ONE_AT_CMD_END,
|
CAT_ONE_AT_CMD_END,
|
||||||
}CatOneATCMD_m;
|
}CatOneATCMD_m;
|
||||||
|
|
||||||
@@ -58,17 +41,6 @@ typedef enum {
|
|||||||
CAT_ONE_CLOSE_TCP,
|
CAT_ONE_CLOSE_TCP,
|
||||||
}CatOneStatus_m;
|
}CatOneStatus_m;
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
ETH_IDEL,
|
|
||||||
ETH_RESET,
|
|
||||||
ETH_WAIT_LINK,
|
|
||||||
ETH_REG_SVR,
|
|
||||||
ETH_WAIT_SEND,
|
|
||||||
ETH_SEND_DATA,
|
|
||||||
ETH_WAIT_RECV,
|
|
||||||
ETH_OFF,
|
|
||||||
}EthStatus_m;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CAT_ONE_RET_NULL,
|
CAT_ONE_RET_NULL,
|
||||||
CAT_ONE_RET_OK,
|
CAT_ONE_RET_OK,
|
||||||
@@ -110,30 +82,18 @@ typedef struct {
|
|||||||
|
|
||||||
GateWayPara GateWay;
|
GateWayPara GateWay;
|
||||||
DataRevCallBack CatOneRevCallBack;
|
DataRevCallBack CatOneRevCallBack;
|
||||||
|
|
||||||
// ETH状态机相关字段
|
|
||||||
EthStatus_m EthStatus;
|
|
||||||
uint32_t EthResetDelayCnt;
|
|
||||||
uint32_t EthLinkWaitCnt;
|
|
||||||
uint32_t EthRecvTimeoutCnt;
|
|
||||||
uint8_t EthSendRetryCnt;
|
|
||||||
bool EthFirstRegFlag;
|
|
||||||
}CatOne_t, *pCatOne_t;
|
}CatOne_t, *pCatOne_t;
|
||||||
|
|
||||||
CatOneRetStatus_m CatOneSend(uint8_t *sData, uint16_t sLen);
|
|
||||||
void CatOneStart(void);
|
|
||||||
void CatOneStop(void);
|
void CatOneStop(void);
|
||||||
void CatOneReset(void);
|
void CatOneReset(void);
|
||||||
void ETHStop(void);
|
|
||||||
void ETHReset(void);
|
|
||||||
void Cat1DBGOnOff(bool OnOff);
|
void Cat1DBGOnOff(bool OnOff);
|
||||||
void CatOneGetLocationInfo(int *Longitude, int *Latitude);
|
void CatOneGetLocationInfo(int *Longitude, int *Latitude);
|
||||||
void CatOneGetIMEIAndSIM(char *Imei, char *Sim);
|
void CatOneGetIMEIAndSIM(char *Imei, char *Sim);
|
||||||
bool CatOneGetStatus(void);
|
bool CatOneGetStatus(void);
|
||||||
bool CatOneEthSendQueue(uint8_t *sData, uint16_t sLen);
|
bool CatOneEthSendQueue(uint8_t *sData, uint16_t sLen);
|
||||||
void CatOneTriggerRegister(void);
|
void CatOneTriggerRegister(void);
|
||||||
void ETHTriggerRegister(void);
|
void CatOne_Thread_Entry(void *parameter);
|
||||||
void CatOne_Eth_Thread_Entry(void *parameter);
|
void Cat1IrqCallback(uint8_t rData);
|
||||||
void EthRxOverhandler(void);
|
void Cat1OverHandler(void);
|
||||||
void CatReadImeiOrSim(char *Imei, char *Sim);
|
void CatReadImeiOrSim(char *Imei, char *Sim);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
#ifndef __ETH_TASK_H
|
||||||
|
#define __ETH_TASK_H
|
||||||
|
#include "main.h"
|
||||||
|
#include "Public.h"
|
||||||
|
|
||||||
|
#define ETH_RX_LEN_MAX 512
|
||||||
|
|
||||||
|
#define ETH_RESET_DELAY_TIME_MAX (5 * 60 * 1000)
|
||||||
|
#define ETH_LINK_WAIT_TIME_MAX (10 * 1000)
|
||||||
|
#define ETH_RECV_TIMEOUT_MAX (60 * 1000)
|
||||||
|
#define ETH_SEND_RETRY_MAX 3
|
||||||
|
#define ETH_FIRST_REG_DELAY (5 * 1000)
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
ETH_IDEL,
|
||||||
|
ETH_RESET,
|
||||||
|
ETH_WAIT_LINK,
|
||||||
|
ETH_REG_SVR,
|
||||||
|
ETH_WAIT_SEND,
|
||||||
|
ETH_SEND_DATA,
|
||||||
|
ETH_WAIT_RECV,
|
||||||
|
ETH_OFF,
|
||||||
|
} EthStatus_m;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
EthStatus_m Status;
|
||||||
|
uint32_t ResetDelayCnt;
|
||||||
|
uint32_t LinkWaitCnt;
|
||||||
|
uint32_t RecvTimeoutCnt;
|
||||||
|
uint8_t SendRetryCnt;
|
||||||
|
bool FirstRegFlag;
|
||||||
|
|
||||||
|
GateWayPara GateWay;
|
||||||
|
|
||||||
|
uint8_t TxBuff[ETH_RX_LEN_MAX];
|
||||||
|
uint16_t TxLen;
|
||||||
|
uint8_t Payload[ETH_RX_LEN_MAX];
|
||||||
|
char SendASCII[ETH_RX_LEN_MAX * 2];
|
||||||
|
} EthTask_t;
|
||||||
|
|
||||||
|
void Eth_Thread_Entry(void *parameter);
|
||||||
|
void EthIrqCallbackHandler(uint8_t rData);
|
||||||
|
void EthOverHandler(void);
|
||||||
|
void ETHStop(void);
|
||||||
|
void ETHReset(void);
|
||||||
|
void ETHTriggerRegister(void);
|
||||||
|
#endif
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
|
|
||||||
#define LORA_LOWPOWER //LORA低功耗设备,采用主动上报方式
|
#define LORA_LOWPOWER //LORA低功耗设备,采用主动上报方式
|
||||||
|
|
||||||
#define SENSOR_DATA_LEN_MAX 50
|
#define SENSOR_DATA_LEN_MAX 50
|
||||||
#define SENSOR_NUM_MAX 16
|
#define SENSOR_NUM_MAX 16
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
#define REGISTER_INTERVAL_MAX (2 * 60)
|
#define REGISTER_INTERVAL_MAX (2 * 60)
|
||||||
#define COMMUNIT_READ_SENSOR_INTERVAL_MAX (1 * 60)
|
#define COMMUNIT_READ_SENSOR_INTERVAL_MAX (1 * 60)
|
||||||
|
|
||||||
#define LORA_ERR_RESET_DLY_MAX (10 * 60) //LORA接收超时复位延时,单位秒
|
#define LORA_ERR_RESET_DLY_MAX (10 * 60) //LORA接收超时复位延时,单位秒
|
||||||
#define CAT1_ERR_RESET_DLY_MAX (60 * 60) //CAT1接收超时复位延时,单位秒
|
#define CAT1_ERR_RESET_DLY_MAX (60 * 60) //CAT1接收超时复位延时,单位秒
|
||||||
|
|
||||||
typedef struct GateWay_t GateWayPara_t, *GateWayPara;
|
typedef struct GateWay_t GateWayPara_t, *GateWayPara;
|
||||||
|
|
||||||
@@ -55,8 +55,8 @@ typedef enum {
|
|||||||
COMM_UNIT_CMD_READ,
|
COMM_UNIT_CMD_READ,
|
||||||
COMM_UNIT_CMD_SET_SENSOR_COLL_TIME = 5,
|
COMM_UNIT_CMD_SET_SENSOR_COLL_TIME = 5,
|
||||||
COMM_UNIT_CMD_TIME_SYNC,
|
COMM_UNIT_CMD_TIME_SYNC,
|
||||||
COMM_UNIT_CMD_CONT_LASER = 8,//激光独有指令
|
COMM_UNIT_CMD_CONT_LASER = 8,//激光独有指令
|
||||||
COMM_UNIT_CMD_GET_SIGNAL, //0x09 查询Lora信号质量
|
COMM_UNIT_CMD_GET_SIGNAL, //0x09 查询Lora信号质量
|
||||||
COMM_UNIT_CMD_END,
|
COMM_UNIT_CMD_END,
|
||||||
}CommUnitCmd_m;
|
}CommUnitCmd_m;
|
||||||
|
|
||||||
@@ -71,41 +71,41 @@ typedef enum {
|
|||||||
NET_COMM_CMD_ADD_UNIT,
|
NET_COMM_CMD_ADD_UNIT,
|
||||||
NET_COMM_CMD_LP_DEV_CONFIG,
|
NET_COMM_CMD_LP_DEV_CONFIG,
|
||||||
NET_COMM_CMD_ALARM,
|
NET_COMM_CMD_ALARM,
|
||||||
NET_COMM_CMD_CONT_LASER,//激光独有指令
|
NET_COMM_CMD_CONT_LASER,//激光独有指令
|
||||||
NET_COMM_CMD_END,
|
NET_COMM_CMD_END,
|
||||||
}NetCommCmd_m;
|
}NetCommCmd_m;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SENSOR_TYPE_NULL, //0x0000 空设备
|
SENSOR_TYPE_NULL, //0x0000 空设备
|
||||||
FORCE_6D, //0x0001 六维应力
|
FORCE_6D, //0x0001 六维应力
|
||||||
OSMOTIC_PRESSURE, //0x0002 渗透压
|
OSMOTIC_PRESSURE, //0x0002 渗透压
|
||||||
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
|
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
|
||||||
DIELECTRIC_MASS, //0x0004 介电质普
|
DIELECTRIC_MASS, //0x0004 介电质普
|
||||||
VIBRATE_SENSOR, //0x0005 微振动传感器
|
VIBRATE_SENSOR, //0x0005 微振动传感器
|
||||||
CONT_DEFOR_3D, //0x0006 三维连续变形
|
CONT_DEFOR_3D, //0x0006 三维连续变形
|
||||||
COMM_UNIT, //0x0007 通讯单元
|
COMM_UNIT, //0x0007 通讯单元
|
||||||
FORCE_3D, //0x0008 三维应力
|
FORCE_3D, //0x0008 三维应力
|
||||||
LASER_TRACING, //0x0009 激光示踪
|
LASER_TRACING, //0x0009 激光示踪
|
||||||
WATER_LEVEL, //0x000A 水位计
|
WATER_LEVEL, //0x000A 水位计
|
||||||
_0x000B, //0x000B 保留
|
_0x000B, //0x000B 保留
|
||||||
_0x000C, //0x000C 保留
|
_0x000C, //0x000C 保留
|
||||||
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
|
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
|
||||||
CRACK_DETECTION, //0x000E 裂缝仪
|
CRACK_DETECTION, //0x000E 裂缝仪
|
||||||
_0x000F, //0x000F 保留
|
_0x000F, //0x000F 保留
|
||||||
ATTITUDE_MONITOR, //0x0010 姿态检测
|
ATTITUDE_MONITOR, //0x0010 姿态检测
|
||||||
LASER_DISPLACE, //0x0011 激光位移
|
LASER_DISPLACE, //0x0011 激光位移
|
||||||
REBAR_STRESS, //0x0012 钢筋应力
|
REBAR_STRESS, //0x0012 钢筋应力
|
||||||
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
|
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
|
||||||
SURFACE_STRESS, //0x0014 表面应力
|
SURFACE_STRESS, //0x0014 表面应力
|
||||||
PRESSURE, //0x0015 压力
|
PRESSURE, //0x0015 压力
|
||||||
MICROWAVE_DISPLACE, //0x0016 微波位移
|
MICROWAVE_DISPLACE, //0x0016 微波位移
|
||||||
DISPLACEMENT = 0x0020, //0x0020 位移监测传感器
|
DISPLACEMENT = 0x0020, //0x0020 位移监测传感器
|
||||||
}SensorType_m;
|
}SensorType_m;
|
||||||
|
|
||||||
typedef struct {//主设备固定包头
|
typedef struct {//主设备固定包头
|
||||||
uint8_t BatLevel; //电池电量
|
uint8_t BatLevel; //电池电量
|
||||||
int8_t RSSI; //信号强度
|
int8_t RSSI; //信号强度
|
||||||
int8_t Nsr; //信噪比
|
int8_t Nsr; //信噪比
|
||||||
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
|
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -122,19 +122,19 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MasterDev_T MasterDev;
|
MasterDev_T MasterDev;
|
||||||
int16_t PitchAngle; //俯仰角偏斜 (范围±900)单位0.1°
|
int16_t PitchAngle; //俯仰角偏斜 (范围±900)单位0.1°
|
||||||
int16_t RollAngle; //横滚角偏斜 (范围±900)单位0.1°
|
int16_t RollAngle; //横滚角偏斜 (范围±900)单位0.1°
|
||||||
int16_t YawAngle; //偏航角偏斜 (范围0~3600)单位0.1°
|
int16_t YawAngle; //偏航角偏斜 (范围0~3600)单位0.1°
|
||||||
}__attribute__((packed))LaserTracingType_T;
|
}__attribute__((packed))LaserTracingType_T;
|
||||||
|
|
||||||
typedef struct {//0x0020 位移计
|
typedef struct {//0x0020 位移计
|
||||||
MasterDev_T MasterDev;
|
MasterDev_T MasterDev;
|
||||||
int16_t PitchAngle; //俯仰角偏斜(范围±900)单位0.1°
|
int16_t PitchAngle; //俯仰角偏斜(范围±900)单位0.1°
|
||||||
int16_t RollAngle; //横滚角偏斜(范围±900)单位0.1°
|
int16_t RollAngle; //横滚角偏斜(范围±900)单位0.1°
|
||||||
int16_t YawAngle; //偏航角偏斜(范围0~3600)单位0.1°
|
int16_t YawAngle; //偏航角偏斜(范围0~3600)单位0.1°
|
||||||
float Temp; //温度
|
float Temp; //温度
|
||||||
float Altitude; //海拔()单位cm
|
float Altitude; //海拔()单位cm
|
||||||
int16_t Distance; //1轴应力值转位移(范围±300,单位0.1mm)
|
int16_t Distance; //1轴应力值转位移(范围±300,单位0.1mm)
|
||||||
}__attribute__ ((packed))Displacement_T,*DisplacementDp;
|
}__attribute__ ((packed))Displacement_T,*DisplacementDp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -142,11 +142,11 @@ typedef struct {
|
|||||||
}__attribute__((packed))LaserDistanceSensorType_t;
|
}__attribute__((packed))LaserDistanceSensorType_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t CommDevAddr[6]; //通讯单元地址
|
uint8_t CommDevAddr[6]; //通讯单元地址
|
||||||
uint16_t CollectInterval; //采集时间间隔
|
uint16_t CollectInterval; //采集时间间隔
|
||||||
uint16_t ReportInterval; //上报时间间隔
|
uint16_t ReportInterval; //上报时间间隔
|
||||||
uint8_t ERInterval; //紧急上报时间间隔
|
uint8_t ERInterval; //紧急上报时间间隔
|
||||||
uint8_t ERTime; //紧急上报时长
|
uint8_t ERTime; //紧急上报时长
|
||||||
}__attribute__((packed))SvrDownLPDevConfigPara_t;
|
}__attribute__((packed))SvrDownLPDevConfigPara_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -155,47 +155,47 @@ typedef struct {
|
|||||||
uint8_t AlarmPara;
|
uint8_t AlarmPara;
|
||||||
}__attribute__((packed))GateWayAlarmType_t;
|
}__attribute__((packed))GateWayAlarmType_t;
|
||||||
|
|
||||||
#define LW_DEV_COLLECT_INTERVAL_MAX 300//默认300秒
|
#define LW_DEV_COLLECT_INTERVAL_MAX 300//默认300秒
|
||||||
#define LW_DEV_REPORT_INTERVAL_MAX 20//20分钟
|
#define LW_DEV_REPORT_INTERVAL_MAX 20//20分钟
|
||||||
#define LW_DEV_ER_INTERVAL_MAX 2//2分钟
|
#define LW_DEV_ER_INTERVAL_MAX 2//2分钟
|
||||||
#define LW_DEV_ER_TIME_MAX 20//20分钟
|
#define LW_DEV_ER_TIME_MAX 20//20分钟
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t CollectInterval; //采集时间间隔
|
uint16_t CollectInterval; //采集时间间隔
|
||||||
uint16_t ReportInterval; //上报时间间隔
|
uint16_t ReportInterval; //上报时间间隔
|
||||||
uint8_t ERInterval; //紧急上报时间间隔
|
uint8_t ERInterval; //紧急上报时间间隔
|
||||||
uint8_t ERTime; //紧急上报时长
|
uint8_t ERTime; //紧急上报时长
|
||||||
uint32_t TimeStamp; //时间戳
|
uint32_t TimeStamp; //时间戳
|
||||||
}__attribute__((packed))LPDevConfigPara_t;
|
}__attribute__((packed))LPDevConfigPara_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool RegFlag;
|
bool RegFlag;
|
||||||
bool RevNewDataFlag;
|
bool RevNewDataFlag;
|
||||||
bool CommStatus; //通讯状态,1-在线,0-离线
|
bool CommStatus; //通讯状态,1-在线,0-离线
|
||||||
bool CailFlag; //校准标志(低功耗)
|
bool CailFlag; //校准标志(低功耗)
|
||||||
bool TimeSyncFlag; //时间同步标志(低功耗)
|
bool TimeSyncFlag; //时间同步标志(低功耗)
|
||||||
bool ContLaser; //激光控制标志(低功耗)
|
bool ContLaser; //激光控制标志(低功耗)
|
||||||
bool LaserOnOff; //激光状态(低功耗)
|
bool LaserOnOff; //激光状态(低功耗)
|
||||||
uint32_t CommErrCnt;
|
uint32_t CommErrCnt;
|
||||||
uint8_t MasterMac[6];
|
uint8_t MasterMac[6];
|
||||||
uint8_t Mac[SENSOR_NUM_MAX][6];//第一位是主设备,后面全是子设备
|
uint8_t Mac[SENSOR_NUM_MAX][6];//第一位是主设备,后面全是子设备
|
||||||
uint8_t BatLevel;
|
uint8_t BatLevel;
|
||||||
int8_t RSSI; //信号强度
|
int8_t RSSI; //信号强度
|
||||||
int8_t Nsr; //信噪比
|
int8_t Nsr; //信噪比
|
||||||
uint16_t CUType;
|
uint16_t CUType;
|
||||||
uint8_t SensorN;
|
uint8_t SensorN;
|
||||||
uint16_t SensorType[SENSOR_NUM_MAX];
|
uint16_t SensorType[SENSOR_NUM_MAX];
|
||||||
//低功耗设备配置信息
|
//低功耗设备配置信息
|
||||||
bool ConfigFlag; //配置标志,为1表示有新配置,应答低功耗设备时需要附带发送
|
bool ConfigFlag; //配置标志,为1表示有新配置,应答低功耗设备时需要附带发送
|
||||||
uint16_t CollectInterval; //采集时间间隔
|
uint16_t CollectInterval; //采集时间间隔
|
||||||
uint16_t ReportInterval; //上报时间间隔
|
uint16_t ReportInterval; //上报时间间隔
|
||||||
uint8_t ERInterval; //紧急上报时间间隔
|
uint8_t ERInterval; //紧急上报时间间隔
|
||||||
uint8_t ERTime; //紧急上报时长
|
uint8_t ERTime; //紧急上报时长
|
||||||
}__attribute__((packed))CommUnitPara_t, *CommUnitPara;
|
}__attribute__((packed))CommUnitPara_t, *CommUnitPara;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool ExclFlag;
|
bool ExclFlag;
|
||||||
uint8_t ExclMac[6];//需要排除的通讯单元MAC
|
uint8_t ExclMac[6];//需要排除的通讯单元MAC
|
||||||
}__attribute__((packed))ExclCommUnit_t, *ExclCommUnit;
|
}__attribute__((packed))ExclCommUnit_t, *ExclCommUnit;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -207,10 +207,10 @@ typedef struct {
|
|||||||
}__attribute__((packed))CommUnit_t, *CommUnit;
|
}__attribute__((packed))CommUnit_t, *CommUnit;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool Enable; //串口使能
|
bool Enable; //串口使能
|
||||||
bool CommUnitEnable; //通讯单元使能,开启(使用内部通讯单元功能,直接和传感器通讯),关闭(直接和RS485类型的通讯单元通讯)
|
bool CommUnitEnable; //通讯单元使能,开启(使用内部通讯单元功能,直接和传感器通讯),关闭(直接和RS485类型的通讯单元通讯)
|
||||||
bool QuerySensorFlag; //查询传感器标志
|
bool QuerySensorFlag; //查询传感器标志
|
||||||
bool UpgradeEnable;//升级功能使能
|
bool UpgradeEnable;//升级功能使能
|
||||||
uint8_t Power;
|
uint8_t Power;
|
||||||
uint32_t BaudRate;
|
uint32_t BaudRate;
|
||||||
SendData RS485Send;
|
SendData RS485Send;
|
||||||
@@ -252,56 +252,56 @@ typedef struct {
|
|||||||
}LoraPara_t, *pLoraPara;
|
}LoraPara_t, *pLoraPara;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t DestAddr[4]; //目的服务器地址
|
uint8_t DestAddr[4]; //目的服务器地址
|
||||||
uint16_t DestPort; //目的服务器端口
|
uint16_t DestPort; //目的服务器端口
|
||||||
uint8_t LocalAddr[4]; //本地客户端地址(预留)
|
uint8_t LocalAddr[4]; //本地客户端地址(预留)
|
||||||
uint16_t LocalPort; //本地客户端端口(预留)
|
uint16_t LocalPort; //本地客户端端口(预留)
|
||||||
}LTENetPara_t, *pLTENetPara;
|
}LTENetPara_t, *pLTENetPara;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t IpMode; //IP模式:DHCP/静态
|
uint8_t IpMode; //IP模式:DHCP/静态
|
||||||
uint8_t IpAddr[4]; //本地IP地址
|
uint8_t IpAddr[4]; //本地IP地址
|
||||||
uint16_t IpPort; //本地端口
|
uint16_t IpPort; //本地端口
|
||||||
uint8_t WorkMode; //工作模式
|
uint8_t WorkMode; //工作模式
|
||||||
uint8_t SubnetMask[4]; //子网掩码
|
uint8_t SubnetMask[4]; //子网掩码
|
||||||
uint8_t Gateway[4]; //网关
|
uint8_t Gateway[4]; //网关
|
||||||
uint8_t DestIp[4]; //目的IP地址
|
uint8_t DestIp[4]; //目的IP地址
|
||||||
uint16_t DestPort; //目的端口
|
uint16_t DestPort; //目的端口
|
||||||
}EthNetPara_t, *pEthNetPara;
|
}EthNetPara_t, *pEthNetPara;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t SavFlag; //存储标志
|
uint32_t SavFlag; //存储标志
|
||||||
CommType_m Comm; //网关通讯方式
|
CommType_m Comm; //网关通讯方式
|
||||||
uint8_t GwMac[6]; //网关mac
|
uint8_t GwMac[6]; //网关mac
|
||||||
LTENetPara_t LTENet; //Cat1/4G服务器参数
|
LTENetPara_t LTENet; //Cat1/4G服务器参数
|
||||||
EthNetPara_t EthNet; //以太网网络参数
|
EthNetPara_t EthNet; //以太网网络参数
|
||||||
uint32_t CommUnitReadInterval; //通讯单元读取时间间隔,单位S
|
uint32_t CommUnitReadInterval; //通讯单元读取时间间隔,单位S
|
||||||
CommUnitPara_t CommUnitArray[COMMUNIT_NUM_MAX]; //注册的通讯单元信息
|
CommUnitPara_t CommUnitArray[COMMUNIT_NUM_MAX]; //注册的通讯单元信息
|
||||||
ExclCommUnit_t ExclCommUnit[COMMUNIT_NUM_MAX]; //排除的通讯单元信息
|
ExclCommUnit_t ExclCommUnit[COMMUNIT_NUM_MAX]; //排除的通讯单元信息
|
||||||
RS485Para_t Rs485Ch1; //RS485通道1配置
|
RS485Para_t Rs485Ch1; //RS485通道1配置
|
||||||
RS485Para_t Rs485Ch2; //RS485通道2配置
|
RS485Para_t Rs485Ch2; //RS485通道2配置
|
||||||
uint8_t DebugChannel; //调试通道
|
uint8_t DebugChannel; //调试通道
|
||||||
LoraPara_t Lora; //Lora配置
|
LoraPara_t Lora; //Lora配置
|
||||||
bool OutageFlag; //断电报警标志
|
bool OutageFlag; //断电报警标志
|
||||||
uint16_t crc16;
|
uint16_t crc16;
|
||||||
}__attribute__((packed))GWConfigPara_t, *GWConfigPara;
|
}__attribute__((packed))GWConfigPara_t, *GWConfigPara;
|
||||||
|
|
||||||
struct GateWay_t{
|
struct GateWay_t{
|
||||||
bool TimeSyncFlag; //时间同步标志
|
bool TimeSyncFlag; //时间同步标志
|
||||||
bool SvrRegFlag; //服务器注册标志
|
bool SvrRegFlag; //服务器注册标志
|
||||||
uint8_t SvrMac[6]; //服务器mac
|
uint8_t SvrMac[6]; //服务器mac
|
||||||
GWConfigPara_t ConfigPara; //配置参数
|
GWConfigPara_t ConfigPara; //配置参数
|
||||||
CommUnitData_t CUDataArray[COMMUNIT_NUM_MAX];
|
CommUnitData_t CUDataArray[COMMUNIT_NUM_MAX];
|
||||||
uint8_t Battery; //电池电量
|
uint8_t Battery; //电池电量
|
||||||
uint16_t UploadInterval; //上传间隔
|
uint16_t UploadInterval; //上传间隔
|
||||||
uint32_t HistoryNum; //历史数据数量
|
uint32_t HistoryNum; //历史数据数量
|
||||||
DataRevCallBack SvrRevCallBack; //接收到服务器回调
|
DataRevCallBack SvrRevCallBack; //接收到服务器回调
|
||||||
DataRevResCallBack CommUnitRevCallBack; //通讯单元接收回调
|
DataRevResCallBack CommUnitRevCallBack; //通讯单元接收回调
|
||||||
rt_mq_t NetSendData_MQ; //网络发送数据队列,第一个字节用于存储消息长度, 第二字节存储命令字,后为数据
|
rt_mq_t NetSendData_MQ; //网络发送数据队列,第一个字节用于存储消息长度, 第二字节存储命令字,后为数据
|
||||||
rt_mq_t LoraRev_MQ; //Lora接收消息队列,第一个字节用于存储消息长度,后为数据
|
rt_mq_t LoraRev_MQ; //Lora接收消息队列,第一个字节用于存储消息长度,后为数据
|
||||||
rt_mutex_t UartRevMutex;
|
rt_mutex_t UartRevMutex;
|
||||||
|
|
||||||
uint8_t BatteryReadDlyCnt; //读取电压延时,单位秒,防止4G发送拉低电池电压,造成断电误报
|
uint8_t BatteryReadDlyCnt; //读取电压延时,单位秒,防止4G发送拉低电池电压,造成断电误报
|
||||||
};
|
};
|
||||||
|
|
||||||
int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen);
|
int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ typedef enum {
|
|||||||
RS485_SENSOR_CMD_END,
|
RS485_SENSOR_CMD_END,
|
||||||
}RS485SensorCmd_m;
|
}RS485SensorCmd_m;
|
||||||
|
|
||||||
//´«¸ÐÆ÷Êý¾Ý·¢ËͽṹÌå
|
//传感器数据发送结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool SendFlag;
|
bool SendFlag;
|
||||||
uint8_t SensorCnt;
|
uint8_t SensorCnt;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
//#define BOOT_PARA_ADDRESS (FLASH_SIZE - FLASH_SECTOR_SIZE)
|
//#define BOOT_PARA_ADDRESS (FLASH_SIZE - FLASH_SECTOR_SIZE)
|
||||||
//#define BOOT_PARA_SIZE (FLASH_SECTOR_SIZE)
|
//#define BOOT_PARA_SIZE (FLASH_SECTOR_SIZE)
|
||||||
|
|
||||||
/* flash rom map 存储分区*/
|
/* flash rom map 存储分区*/
|
||||||
//boot 16k
|
//boot 16k
|
||||||
#define FLASH_BASE ((uint32_t)0x00000000)
|
#define FLASH_BASE ((uint32_t)0x00000000)
|
||||||
#define FLASH_SECTOR_SIZE 0x2000ul
|
#define FLASH_SECTOR_SIZE 0x2000ul
|
||||||
@@ -63,36 +63,62 @@
|
|||||||
|
|
||||||
#define RTC_IRQn Int001_IRQn
|
#define RTC_IRQn Int001_IRQn
|
||||||
|
|
||||||
#define LORA_DIO0_IRQn Int005_IRQn
|
|
||||||
|
|
||||||
#define DBGUART_IRQn Int006_IRQn
|
|
||||||
#define DBGUART_EI_IRQn Int007_IRQn
|
|
||||||
|
|
||||||
#define RS485CH1_UART_IRQn Int008_IRQn
|
|
||||||
#define RS485CH1_UART_EI_IRQn Int009_IRQn
|
|
||||||
|
|
||||||
#define RS485CH2_UART_IRQn Int010_IRQn
|
|
||||||
#define RS485CH2_UART_EI_IRQn Int011_IRQn
|
|
||||||
|
|
||||||
#define ETH_OR_CAT1_UART_IRQn Int012_IRQn
|
|
||||||
#define ETH_OR_CAT1_UART_EI_IRQn Int013_IRQn
|
|
||||||
|
|
||||||
#define DBG_RXPIN_IRQn Int002_IRQn
|
#define DBG_RXPIN_IRQn Int002_IRQn
|
||||||
|
|
||||||
|
#define LORA_DIO0_IRQn Int005_IRQn
|
||||||
|
|
||||||
//DEBUG
|
#define DBG_OR_CAT1_UART_IRQn Int006_IRQn
|
||||||
#define DBG_USART_CH (M4_USART1)
|
#define DBG_OR_CAT1_UART_EI_IRQn Int007_IRQn
|
||||||
#define DBG_USART_RX_PORT (PortA)
|
|
||||||
#define DBG_USART_RX_PIN (Pin11)
|
#define ETH_UART_IRQn Int008_IRQn
|
||||||
#define DBG_USART_TX_PORT (PortA)
|
#define ETH_UART_EI_IRQn Int009_IRQn
|
||||||
#define DBG_USART_TX_PIN (Pin12)
|
|
||||||
#define DBG_USART_RX_FUNC (Func_Usart1_Rx)
|
#define RS485CH1_UART_IRQn Int010_IRQn
|
||||||
#define DBG_USART_TX_FUNC (Func_Usart1_Tx)
|
#define RS485CH1_UART_EI_IRQn Int011_IRQn
|
||||||
#define DBG_USART_RI_NUM (INT_USART1_RI)
|
|
||||||
#define DBG_USART_EI_NUM (INT_USART1_EI)
|
#define RS485CH2_UART_IRQn Int012_IRQn
|
||||||
#define DBG_USART_TI_NUM (INT_USART1_TI)
|
#define RS485CH2_UART_EI_IRQn Int013_IRQn
|
||||||
#define DBG_USART_TCI_NUM (INT_USART1_TCI)
|
|
||||||
#define DBG_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1)
|
|
||||||
|
//DEBUG or CAT1
|
||||||
|
#define DBG_OR_CAT1_USART_CH (M4_USART1)
|
||||||
|
#define DBG_OR_CAT1_USART_RX_PORT (PortA)
|
||||||
|
#define DBG_OR_CAT1_USART_RX_PIN (Pin11)
|
||||||
|
#define DBG_OR_CAT1_USART_TX_PORT (PortA)
|
||||||
|
#define DBG_OR_CAT1_USART_TX_PIN (Pin12)
|
||||||
|
#define DBG_OR_CAT1_USART_RX_FUNC (Func_Usart1_Rx)
|
||||||
|
#define DBG_OR_CAT1_USART_TX_FUNC (Func_Usart1_Tx)
|
||||||
|
#define DBG_OR_CAT1_USART_RI_NUM (INT_USART1_RI)
|
||||||
|
#define DBG_OR_CAT1_USART_EI_NUM (INT_USART1_EI)
|
||||||
|
#define DBG_OR_CAT1_USART_TI_NUM (INT_USART1_TI)
|
||||||
|
#define DBG_OR_CAT1_USART_TCI_NUM (INT_USART1_TCI)
|
||||||
|
#define DBG_OR_CAT1_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1)
|
||||||
|
|
||||||
|
#define DBG_OR_CAT1_CTRL_PORT (PortB)
|
||||||
|
#define DBG_OR_CAT1_CTRL_PIN (Pin08)
|
||||||
|
|
||||||
|
#if (HARDWARE_VERSION == 12)
|
||||||
|
#define DBG_ON() PORT_SetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
|
||||||
|
#define CAT1_ON() PORT_ResetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
|
||||||
|
#elif (HARDWARE_VERSION >= 13)
|
||||||
|
#define DBG_ON() PORT_ResetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
|
||||||
|
#define CAT1_ON() PORT_SetBits(DBG_OR_CAT1_CTRL_PORT, DBG_OR_CAT1_CTRL_PIN)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CAT1_PWR_KEY_PORT (PortA)
|
||||||
|
#define CAT1_PWR_KEY_PIN (Pin03)
|
||||||
|
#define CAT1_PWR_KEY_CLR() PORT_SetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
|
||||||
|
#define CAT1_PWR_KEY_SET() PORT_ResetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
|
||||||
|
|
||||||
|
#define CAT1_RESET_PORT (PortA)
|
||||||
|
#define CAT1_RESET_PIN (Pin00)
|
||||||
|
#define CAT1_RESET_CLR() PORT_SetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
|
||||||
|
#define CAT1_RESET_SET() PORT_ResetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
|
||||||
|
|
||||||
|
#define CAT1_WAKEUP_PORT (PortA)
|
||||||
|
#define CAT1_WAKEUP_PIN (Pin02)
|
||||||
|
#define CAT1_WAKEUP_CLR() PORT_SetBits(CAT1_WAKEUP_PORT, CAT1_WAKEUP_PIN)
|
||||||
|
#define CAT1_WAKEUP_SET() PORT_ResetBits(CAT1_WAKEUP_PORT, CAT1_WAKEUP_PIN)
|
||||||
|
|
||||||
//RS485 Ch1
|
//RS485 Ch1
|
||||||
#define RS485_CH1_USART_CH (M4_USART2)
|
#define RS485_CH1_USART_CH (M4_USART2)
|
||||||
@@ -152,45 +178,22 @@
|
|||||||
//#define RS485_CH2_VOL_5V() PORT_SetBits(RS485_CH2_VOL_CTRL_PORT, RS485_CH2_VOL_CTRL_PIN)
|
//#define RS485_CH2_VOL_5V() PORT_SetBits(RS485_CH2_VOL_CTRL_PORT, RS485_CH2_VOL_CTRL_PIN)
|
||||||
//#define RS485_CH2_VOL_12V() PORT_ResetBits(RS485_CH2_VOL_CTRL_PORT, RS485_CH2_VOL_CTRL_PIN)
|
//#define RS485_CH2_VOL_12V() PORT_ResetBits(RS485_CH2_VOL_CTRL_PORT, RS485_CH2_VOL_CTRL_PIN)
|
||||||
|
|
||||||
//ETH OR CAT1
|
//ETH
|
||||||
#define ETH_OR_CAT1_USART_CH (M4_USART4)
|
#define ETH_USART_CH (M4_USART4)
|
||||||
#define ETH_OR_CAT1_USART_RX_PORT (PortB)
|
#define ETH_USART_RX_PORT (PortB)
|
||||||
#define ETH_OR_CAT1_USART_RX_PIN (Pin09)
|
#define ETH_USART_RX_PIN (Pin09)
|
||||||
#define ETH_OR_CAT1_USART_TX_PORT (PortC)
|
#define ETH_USART_TX_PORT (PortC)
|
||||||
#define ETH_OR_CAT1_USART_TX_PIN (Pin13)
|
#define ETH_USART_TX_PIN (Pin13)
|
||||||
#define ETH_OR_CAT1_USART_RX_FUNC (Func_Usart4_Rx)
|
#define ETH_USART_RX_FUNC (Func_Usart4_Rx)
|
||||||
#define ETH_OR_CAT1_USART_TX_FUNC (Func_Usart4_Tx)
|
#define ETH_USART_TX_FUNC (Func_Usart4_Tx)
|
||||||
#define ETH_OR_CAT1_USART_RI_NUM (INT_USART4_RI)
|
#define ETH_USART_RI_NUM (INT_USART4_RI)
|
||||||
#define ETH_OR_CAT1_USART_EI_NUM (INT_USART4_EI)
|
#define ETH_USART_EI_NUM (INT_USART4_EI)
|
||||||
#define ETH_OR_CAT1_USART_TI_NUM (INT_USART4_TI)
|
#define ETH_USART_TI_NUM (INT_USART4_TI)
|
||||||
#define ETH_OR_CAT1_USART_TCI_NUM (INT_USART4_TCI)
|
#define ETH_USART_TCI_NUM (INT_USART4_TCI)
|
||||||
#define ETH_OR_CAT1_FCG1_PERIPH (PWC_FCG1_PERIPH_USART4)
|
#define ETH_FCG1_PERIPH (PWC_FCG1_PERIPH_USART4)
|
||||||
|
|
||||||
#define ETH_OR_CAT1_CTRL_PORT (PortB)
|
#define ETH_ON() ETH_RESET_SET()
|
||||||
#define ETH_OR_CAT1_CTRL_PIN (Pin08)
|
#define ETH_OFF() ETH_RESET_CLR()
|
||||||
|
|
||||||
#if (HARDWARE_VERSION == 12)
|
|
||||||
#define ETH_ON() PORT_SetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
|
|
||||||
#define CAT1_ON() PORT_ResetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
|
|
||||||
#elif (HARDWARE_VERSION >= 13)
|
|
||||||
#define ETH_ON() PORT_ResetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
|
|
||||||
#define CAT1_ON() PORT_SetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//#define ETH_OR_CAT1_TX_CTRL_PORT (PortH)
|
|
||||||
//#define ETH_OR_CAT1_TX_CTRL_PIN (Pin02)
|
|
||||||
//#define ETH_ON() { PORT_SetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN); PORT_SetBits(ETH_OR_CAT1_TX_CTRL_PORT, ETH_OR_CAT1_TX_CTRL_PIN); }
|
|
||||||
//#define CAT1_ON() { PORT_ResetBits(ETH_OR_CAT1_CTRL_PORT, ETH_OR_CAT1_CTRL_PIN); PORT_ResetBits(ETH_OR_CAT1_TX_CTRL_PORT, ETH_OR_CAT1_TX_CTRL_PIN);}
|
|
||||||
|
|
||||||
#define CAT1_PWR_KEY_PORT (PortA)
|
|
||||||
#define CAT1_PWR_KEY_PIN (Pin03)
|
|
||||||
#define CAT1_PWR_KEY_CLR() PORT_SetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
|
|
||||||
#define CAT1_PWR_KEY_SET() PORT_ResetBits(CAT1_PWR_KEY_PORT, CAT1_PWR_KEY_PIN)
|
|
||||||
|
|
||||||
#define CAT1_RESET_PORT (PortA)
|
|
||||||
#define CAT1_RESET_PIN (Pin00)
|
|
||||||
#define CAT1_RESET_CLR() PORT_SetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
|
|
||||||
#define CAT1_RESET_SET() PORT_ResetBits(CAT1_RESET_PORT, CAT1_RESET_PIN)
|
|
||||||
|
|
||||||
#define ETH_RESET_PORT (PortB)
|
#define ETH_RESET_PORT (PortB)
|
||||||
#define ETH_RESET_PIN (Pin05)
|
#define ETH_RESET_PIN (Pin05)
|
||||||
@@ -337,7 +340,7 @@ bool SDCardWriteBlocks(uint32_t u32BlkStartAddr, uint32_t u32BlkEndAddr, uint8_t
|
|||||||
|
|
||||||
#define BAT_COLL_ADC_CH (ADC1_CH1)
|
#define BAT_COLL_ADC_CH (ADC1_CH1)
|
||||||
|
|
||||||
//帧头结构体
|
//帧头结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t Header;
|
uint8_t Header;
|
||||||
uint8_t SlvAddr;
|
uint8_t SlvAddr;
|
||||||
@@ -345,20 +348,20 @@ typedef struct {
|
|||||||
uint8_t PayloadLen;
|
uint8_t PayloadLen;
|
||||||
}update_protocol_hd_t;
|
}update_protocol_hd_t;
|
||||||
|
|
||||||
//主机下发升级请求载荷结构体
|
//主机下发升级请求载荷结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t PackageNum;
|
uint16_t PackageNum;
|
||||||
uint32_t AppSize;
|
uint32_t AppSize;
|
||||||
uint32_t AppCrc32;
|
uint32_t AppCrc32;
|
||||||
}__attribute__ ((packed))update_protocol_req_t;
|
}__attribute__ ((packed))update_protocol_req_t;
|
||||||
|
|
||||||
//从机请求下发结构体
|
//从机请求下发结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t PackageIndex;
|
uint16_t PackageIndex;
|
||||||
uint32_t PackageNum;
|
uint32_t PackageNum;
|
||||||
}__attribute__ ((packed))update_protocol_get_t;
|
}__attribute__ ((packed))update_protocol_get_t;
|
||||||
|
|
||||||
//主机应答下发数据结构体
|
//主机应答下发数据结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t PackageIndex;
|
uint16_t PackageIndex;
|
||||||
uint16_t PackageNum;
|
uint16_t PackageNum;
|
||||||
@@ -377,9 +380,10 @@ typedef struct {
|
|||||||
|
|
||||||
void BSP_Init(void);
|
void BSP_Init(void);
|
||||||
|
|
||||||
void DbgUart_Config(uint32_t BaudRate);
|
void DbgOrCat1Uart_Config(uint32_t BaudRate);
|
||||||
void DebugUartSend(uint8_t *sData, uint16_t sLen);
|
void DebugOrCat1UartSend(uint8_t *sData, uint16_t sLen);
|
||||||
void DbgRxIrqCallback(uint8_t rData);
|
void DbgOrCat1RxIrqCallback(uint8_t rData);
|
||||||
|
void Cat1RxIrqCallback(uint8_t rData);
|
||||||
|
|
||||||
void RS485Ch1_Config(uint32_t BaudRate);
|
void RS485Ch1_Config(uint32_t BaudRate);
|
||||||
void RS485Ch1UartSend(uint8_t *sData, uint16_t sLen);
|
void RS485Ch1UartSend(uint8_t *sData, uint16_t sLen);
|
||||||
@@ -389,8 +393,9 @@ void RS485Ch2_Config(uint32_t BaudRate);
|
|||||||
void RS485Ch2UartSend(uint8_t *sData, uint16_t sLen);
|
void RS485Ch2UartSend(uint8_t *sData, uint16_t sLen);
|
||||||
void RS485Ch2RxIrqCallback(uint8_t rData);
|
void RS485Ch2RxIrqCallback(uint8_t rData);
|
||||||
|
|
||||||
void EthOrCat1UartSend(uint8_t *sData, uint16_t sLen);
|
void Eth_Config(uint32_t BaudRate);
|
||||||
void EthOrCat1RxIrqCallback(uint8_t rData);
|
void EthUartSend(uint8_t *sData, uint16_t sLen);
|
||||||
|
void EthIrqCallbackHandler(uint8_t rData);
|
||||||
|
|
||||||
void LoraTxRxIrqCallback(void);
|
void LoraTxRxIrqCallback(void);
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#include "Public.h"
|
#include "Public.h"
|
||||||
#include "DebugCmd.h"
|
#include "DebugCmd.h"
|
||||||
|
|
||||||
#define MAC_ADDR_TYPE 0//0为测试服务器
|
#define MAC_ADDR_TYPE 0//0为测试服务器
|
||||||
|
|
||||||
extern bool MainDispEn;
|
extern bool MainDispEn;
|
||||||
#define MAIN_DBG_LOG(...) { if(MainDispEn) Debug_Printf(__VA_ARGS__);}
|
#define MAIN_DBG_LOG(...) { if(MainDispEn) Debug_Printf(__VA_ARGS__);}
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
#define PROTOCOL_HEAD (0x527A)
|
#define PROTOCOL_HEAD (0x527A)
|
||||||
|
|
||||||
#define PROTOCOL_FRAME_HEAD_SIZE (7) // 最小帧长:头(2) + 地址(2) + 命令(1) + 长度(2) + CRC(2)
|
#define PROTOCOL_FRAME_HEAD_SIZE (7) // 最小帧长:头(2) + 地址(2) + 命令(1) + 长度(2) + CRC(2)
|
||||||
|
|
||||||
#define PROTOCOL_FRAME_MIN_SIZE (9) // 最小帧长:头(2) + 地址(2) + 命令(1) + 长度(2) + CRC(2)
|
#define PROTOCOL_FRAME_MIN_SIZE (9) // 最小帧长:头(2) + 地址(2) + 命令(1) + 长度(2) + CRC(2)
|
||||||
// 错误码定义
|
// 错误码定义
|
||||||
typedef enum {
|
typedef enum {
|
||||||
PROTOCOL_SUCCESS = 0,
|
PROTOCOL_SUCCESS = 0,
|
||||||
PROTOCOL_ERR_INVALID_PARAM,
|
PROTOCOL_ERR_INVALID_PARAM,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* @brief 环形缓冲区管理(参考linux/kfifo)
|
* @brief 环形缓冲区管理(参考linux/kfifo)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2016~2020, <morro_luo@163.com>
|
* Copyright (c) 2016~2020, <morro_luo@163.com>
|
||||||
*
|
*
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2016-05-30 Morro 初版完成
|
* 2016-05-30 Morro 初版完成
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef _RING_BUF_H_
|
#ifndef _RING_BUF_H_
|
||||||
@@ -19,12 +19,12 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*环形缓冲区管理器*/
|
/*环形缓冲区管理器*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned char *buf; /*环形缓冲区 */
|
unsigned char *buf; /*环形缓冲区 */
|
||||||
unsigned int size; /*环形缓冲区 */
|
unsigned int size; /*环形缓冲区 */
|
||||||
unsigned int front; /*头指针 */
|
unsigned int front; /*头指针 */
|
||||||
unsigned int rear; /*尾指针 */
|
unsigned int rear; /*尾指针 */
|
||||||
}ring_buf_t;
|
}ring_buf_t;
|
||||||
|
|
||||||
bool ring_buf_init(ring_buf_t *r,unsigned char *buf,unsigned int size);
|
bool ring_buf_init(ring_buf_t *r,unsigned char *buf,unsigned int size);
|
||||||
|
|||||||
@@ -42,20 +42,20 @@ uint32_t SpiFlashReadId(void);
|
|||||||
|
|
||||||
//#if (LORA_MODULE == WH_LR36_L)
|
//#if (LORA_MODULE == WH_LR36_L)
|
||||||
//#define LOG_SAV_SIZE 78
|
//#define LOG_SAV_SIZE 78
|
||||||
//#define LOG_SAV_NUM_SECTOR 52 //每扇区存储数量
|
//#define LOG_SAV_NUM_SECTOR 52 //每扇区存储数量
|
||||||
//#else
|
//#else
|
||||||
//#define LOG_SAV_SIZE 78 //150
|
//#define LOG_SAV_SIZE 78 //150
|
||||||
//#define LOG_SAV_NUM_SECTOR 52 //27 //每扇区存储数量
|
//#define LOG_SAV_NUM_SECTOR 52 //27 //每扇区存储数量
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
#define LOG_SAV_SIZE_MAX 256
|
#define LOG_SAV_SIZE_MAX 256
|
||||||
#define LOG_SAV_NUM_MAX ((SPIFLASH_SECTOR_NUM - LOG_SAV_START_SECTOR) * LOG_SAV_NUM_SECTOR)
|
#define LOG_SAV_NUM_MAX ((SPIFLASH_SECTOR_NUM - LOG_SAV_START_SECTOR) * LOG_SAV_NUM_SECTOR)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t LogSavFlag; //日志存储标志
|
uint32_t LogSavFlag; //日志存储标志
|
||||||
uint32_t LogIdx; //日志序号
|
uint32_t LogIdx; //日志序号
|
||||||
uint32_t LogEndAddr; //日志结束地址
|
uint32_t LogEndAddr; //日志结束地址
|
||||||
uint32_t TimeStamp; //存储时间
|
uint32_t TimeStamp; //存储时间
|
||||||
}LogHeader_t, *LogHeader;
|
}LogHeader_t, *LogHeader;
|
||||||
|
|
||||||
void SavMMC5983Calib(uint8_t *wData, uint32_t wLen);
|
void SavMMC5983Calib(uint8_t *wData, uint32_t wLen);
|
||||||
|
|||||||
@@ -4,71 +4,45 @@
|
|||||||
|
|
||||||
static rt_sem_t CatOneRev_Sem = RT_NULL;
|
static rt_sem_t CatOneRev_Sem = RT_NULL;
|
||||||
static rt_sem_t CatOneIRQ_Sem = RT_NULL;
|
static rt_sem_t CatOneIRQ_Sem = RT_NULL;
|
||||||
static rt_sem_t EthIRQ_Sem = RT_NULL;
|
|
||||||
static rt_thread_t Cat1Rev_Thread = RT_NULL;
|
static rt_thread_t Cat1Rev_Thread = RT_NULL;
|
||||||
|
|
||||||
static uint8_t CAT1DispEn = false;
|
static uint8_t CAT1DispEn = false;
|
||||||
static CatOne_t CatOne;
|
static CatOne_t CatOne;
|
||||||
|
|
||||||
static char CatOneEthRxBuff[CAT_ONE_REV_LEN_MAX];
|
static char CatOneRxBuff[CAT_ONE_REV_LEN_MAX];
|
||||||
static uint16_t CatOneEthRxLen;
|
static uint16_t CatOneRxLen;
|
||||||
|
|
||||||
static uint8_t CatOneEthTxBuff[CAT_ONE_REV_LEN_MAX];
|
static uint8_t CatOneTxBuff[CAT_ONE_REV_LEN_MAX];
|
||||||
static uint16_t CatOneEthTxLen;
|
static uint16_t CatOneTxLen;
|
||||||
|
|
||||||
static uint8_t Payload[CAT_ONE_REV_LEN_MAX];
|
static uint8_t Payload[CAT_ONE_REV_LEN_MAX];
|
||||||
static char CommUnitSendASCII[CAT_ONE_REV_LEN_MAX * 2];
|
static char CommUnitSendASCII[CAT_ONE_REV_LEN_MAX * 2];
|
||||||
|
|
||||||
static uint8_t EthRevTimeOutCnt;
|
static uint8_t Cat1RevTimeOutCnt;
|
||||||
|
|
||||||
static uint16_t CatSendErrCnt = 0;
|
static uint16_t CatSendErrCnt = 0;
|
||||||
|
|
||||||
// ETH状态机相关变量已移至 CatOne_t 结构体中
|
|
||||||
|
|
||||||
#define CAT1_DBG_LOG(...) { if(CAT1DispEn) Debug_Printf(__VA_ARGS__);}
|
#define CAT1_DBG_LOG(...) { if(CAT1DispEn) Debug_Printf(__VA_ARGS__);}
|
||||||
//#define CAT1_DBG_ARRAY(ARRAY, SIZE) { if(CAT1DispEn) {DBG_ARRAY(ARRAY,SIZE)}}
|
|
||||||
|
|
||||||
#define CATONE_RESET_DELAY_TIME_MAX (5 * 60 * 1000)
|
#define CATONE_RESET_DELAY_TIME_MAX (5 * 60 * 1000)
|
||||||
|
|
||||||
//const char *CatOneATCmdStr[16] = {
|
|
||||||
// "NULL",
|
|
||||||
// "AT\r\n", //开机检测
|
|
||||||
// "ATE0\r\n", //关回显
|
|
||||||
// "AT+CPIN?\r\n", //识卡
|
|
||||||
//// "AT+CIMI\r\n", //IMEI
|
|
||||||
// "AT+CGSN=1\r\n",
|
|
||||||
// "AT+LCCID\r\n", //读卡号
|
|
||||||
// "AT+CEREG?\r\n", //查询注册状态
|
|
||||||
// "AT+CGPADDR=1\r\n", //查询IP地址
|
|
||||||
// "AT+CSQ\r\n", //查询信号强度
|
|
||||||
// "AT+LDNSGIP=gxjt.cui635.cn\r\n",
|
|
||||||
// "AT+LBS=0\r\n", //获取基站定位信息
|
|
||||||
// "AT+LIPOPEN=", //设置TCP服务器地址和端口,AT+LIPOPEN="TCP","114.55.52.96",6803
|
|
||||||
// "AT+LIPSEND=", //发送数据, AT+LIPSEND=0,1,20,"31313131313131323232323232"
|
|
||||||
// "AT+LIPCLOSE=0\r\n",//断开连接
|
|
||||||
// "AT+LBSPARA=http://locator-aep.xiot.senthink.com:80/locator/v0.1/locate,B84E427D95B1DF4A3F49B18DDF714C72\r\n",
|
|
||||||
// "AT+CCLK?\r\n", //获取时间
|
|
||||||
//};
|
|
||||||
|
|
||||||
const char *CatOneATCmdStr[16] = {
|
const char *CatOneATCmdStr[16] = {
|
||||||
"NULL",
|
"NULL",
|
||||||
"AT\r\n", //开机检测
|
"AT\r\n", //开机检测
|
||||||
"ATE0\r\n", //关回显
|
"ATE0\r\n", //关回显
|
||||||
"AT+CPIN?\r\n", //识卡
|
"AT+CPIN?\r\n", //识卡
|
||||||
// "AT+CIMI\r\n", //IMEI
|
|
||||||
"AT+CGSN=1\r\n",
|
"AT+CGSN=1\r\n",
|
||||||
"AT+QCCID\r\n", //读卡号
|
"AT+QCCID\r\n", //读卡号
|
||||||
"AT+CEREG?\r\n", //查询注册状态
|
"AT+CEREG?\r\n", //查询注册状态
|
||||||
"AT+CGPADDR=1\r\n", //查询IP地址
|
"AT+CGPADDR=1\r\n", //查询IP地址
|
||||||
"AT+CSQ\r\n", //查询信号强度
|
"AT+CSQ\r\n", //查询信号强度
|
||||||
"AT+LDNSGIP=gxjt.cui635.cn\r\n",
|
"AT+LDNSGIP=gxjt.cui635.cn\r\n",
|
||||||
"AT+QLBS\r\n", //获取基站定位信息
|
"AT+QLBS\r\n", //获取基站定位信息
|
||||||
"AT+QIOPEN=", //设置TCP服务器地址和端口,AT+LIPOPEN="TCP","114.55.52.96",6803
|
"AT+QIOPEN=", //设置TCP服务器地址和端口
|
||||||
"AT+QISEND=", //发送数据, AT+LIPSEND=0,1,20,"31313131313131323232323232"
|
"AT+QISEND=", //发送数据
|
||||||
"AT+QICLOSE=0\r\n",//断开连接
|
"AT+QICLOSE=0\r\n", //断开连接
|
||||||
"AT+QLBSCFG=\"server\",http://locator-aep.xiot.senthink.com:80/locator/v0.1/locate\r\n",
|
"AT+QLBSCFG=\"server\",http://locator-aep.xiot.senthink.com:80/locator/v0.1/locate\r\n",
|
||||||
"AT+QLBSCFG=\"token\",45B516D3078467E84DD2CFBF3532A4CB\r\n",
|
"AT+QLBSCFG=\"token\",45B516D3078467E84DD2CFBF3532A4CB\r\n",
|
||||||
"AT+CCLK?\r\n", //获取时间
|
"AT+CCLK?\r\n", //获取时间
|
||||||
};
|
};
|
||||||
|
|
||||||
void Cat1DBGOnOff(bool OnOff)
|
void Cat1DBGOnOff(bool OnOff)
|
||||||
@@ -84,50 +58,20 @@ const CatOneATCMD_m CatOneModeSetCmdArray[] = {
|
|||||||
CAT_ONE_AT_NULL,
|
CAT_ONE_AT_NULL,
|
||||||
CAT_ONE_AT,
|
CAT_ONE_AT,
|
||||||
CAT_ONE_ATE0,
|
CAT_ONE_ATE0,
|
||||||
//CAT_ONE_LBSPARA,
|
|
||||||
CAT_ONE_LCCID,
|
CAT_ONE_LCCID,
|
||||||
CAT_ONE_IMEI,
|
CAT_ONE_IMEI,
|
||||||
CAT_ONE_CPIN,
|
CAT_ONE_CPIN,
|
||||||
CAT_ONE_CEREG,
|
CAT_ONE_CEREG,
|
||||||
CAT_ONE_CSQ,
|
CAT_ONE_CSQ,
|
||||||
//CAT_ONE_LDNSGIP,
|
|
||||||
//CAT_ONE_LBS,
|
|
||||||
CAT_ONE_CCLK,
|
CAT_ONE_CCLK,
|
||||||
CAT_ONE_AT_CMD_END
|
CAT_ONE_AT_CMD_END
|
||||||
};
|
};
|
||||||
|
|
||||||
//CatOneRetStatus_m CatOneSend(uint8_t *sData, uint16_t sLen)
|
|
||||||
//{
|
|
||||||
// rt_err_t result;
|
|
||||||
//
|
|
||||||
// if(CatOne.Cat1Status != CAT_ONE_IDEL && CatOne.Cat1Status != CAT_ONE_WAIT_SEND)
|
|
||||||
// return CAT_ONE_RET_ERR;
|
|
||||||
//
|
|
||||||
// //CatOne.Cat1Status = CAT_ONE_RESET;
|
|
||||||
// result = rt_mq_send(CatOneRev_MQ, sData, sLen);
|
|
||||||
// if(result != RT_EOK) {
|
|
||||||
// CAT1_DBG_LOG("CatOne MQ Send ERR...\r\n");
|
|
||||||
// return CAT_ONE_RET_ERR;
|
|
||||||
// }
|
|
||||||
// CAT1_DBG_LOG("CatOne Send Message: \r\n", sData);
|
|
||||||
// return CAT_ONE_RET_OK;
|
|
||||||
//}
|
|
||||||
|
|
||||||
void CatOneStop(void)
|
void CatOneStop(void)
|
||||||
{
|
{
|
||||||
CatOne.Cat1Status = CAT_ONE_OFF;
|
CatOne.Cat1Status = CAT_ONE_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ETHStop(void)
|
|
||||||
{
|
|
||||||
CatOne.EthStatus = ETH_OFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ETHReset(void)
|
|
||||||
{
|
|
||||||
CatOne.EthStatus = ETH_RESET;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CatOneGetLocationInfo(int *Longitude, int *Latitude)
|
void CatOneGetLocationInfo(int *Longitude, int *Latitude)
|
||||||
{
|
{
|
||||||
if(CatOne.LBSFlag) {
|
if(CatOne.LBSFlag) {
|
||||||
@@ -146,7 +90,6 @@ void CatOneGetIMEIAndSIM(char *Imei, char *Sim)
|
|||||||
memcpy(Sim, CatOne.SIM, 20);
|
memcpy(Sim, CatOne.SIM, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
//返回true-busy, false-Idle
|
|
||||||
bool CatOneGetStatus(void)
|
bool CatOneGetStatus(void)
|
||||||
{
|
{
|
||||||
if(CatOne.Cat1Status == CAT_ONE_IDEL)
|
if(CatOne.Cat1Status == CAT_ONE_IDEL)
|
||||||
@@ -229,10 +172,6 @@ void CatOneAtCmdAnalyze(char *RxBuff)
|
|||||||
else {
|
else {
|
||||||
memset(CatOne.IMEI, 0, 15);
|
memset(CatOne.IMEI, 0, 15);
|
||||||
}
|
}
|
||||||
// ret = sscanf(p, "+CGSN: \"%s\"\r\n", CatOne.IMEI);
|
|
||||||
// if(ret != 1) {
|
|
||||||
// memset(CatOne.IMEI, 0, 15);
|
|
||||||
// }
|
|
||||||
CatOne.IMEI[15] = 0;
|
CatOne.IMEI[15] = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -354,8 +293,7 @@ void CatOneAtCmdAnalyze(char *RxBuff)
|
|||||||
else {
|
else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
|
rt_sem_release(CatOneRev_Sem);
|
||||||
rt_sem_release(CatOneRev_Sem);//接收任务
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -377,8 +315,8 @@ void CatOneAtCmdSend(CatOneATCMD_m Cmd, uint32_t Dly, CatOneStatus_m NextStatus)
|
|||||||
{
|
{
|
||||||
CatOne.AtCmd = Cmd;
|
CatOne.AtCmd = Cmd;
|
||||||
if(CatOne.AtCmd == CAT_ONE_LIPSEND) {
|
if(CatOne.AtCmd == CAT_ONE_LIPSEND) {
|
||||||
HexToAscii(CatOneEthTxBuff, CommUnitSendASCII, CatOneEthTxLen);
|
HexToAscii(CatOneTxBuff, CommUnitSendASCII, CatOneTxLen);
|
||||||
sprintf(CatOne.CatOneSendBuff,"AT+LIPSEND=0,1,%d,\"%s\"\r\n",CatOneEthTxLen * 2, CommUnitSendASCII);
|
sprintf(CatOne.CatOneSendBuff,"AT+LIPSEND=0,1,%d,\"%s\"\r\n",CatOneTxLen * 2, CommUnitSendASCII);
|
||||||
CatOne.GateWay->BatteryReadDlyCnt = 30;
|
CatOne.GateWay->BatteryReadDlyCnt = 30;
|
||||||
}
|
}
|
||||||
else if(CatOne.AtCmd == CAT_ONE_LIPOPEN) {
|
else if(CatOne.AtCmd == CAT_ONE_LIPOPEN) {
|
||||||
@@ -393,14 +331,14 @@ void CatOneAtCmdSend(CatOneATCMD_m Cmd, uint32_t Dly, CatOneStatus_m NextStatus)
|
|||||||
strcpy(CatOne.CatOneSendBuff, CatOneATCmdStr[CatOne.AtCmd]);
|
strcpy(CatOne.CatOneSendBuff, CatOneATCmdStr[CatOne.AtCmd]);
|
||||||
}
|
}
|
||||||
CAT1_DBG_LOG(CatOne.CatOneSendBuff);
|
CAT1_DBG_LOG(CatOne.CatOneSendBuff);
|
||||||
EthRevTimeOutCnt = 0;
|
Cat1RevTimeOutCnt = 0;
|
||||||
EthOrCat1UartSend((uint8_t *)CatOne.CatOneSendBuff, strlen(CatOne.CatOneSendBuff));
|
DebugOrCat1UartSend((uint8_t *)CatOne.CatOneSendBuff, strlen(CatOne.CatOneSendBuff));
|
||||||
CatOne.CatOne1mSDelayCnt = Dly;
|
CatOne.CatOne1mSDelayCnt = Dly;
|
||||||
CatOne.Cat1Status = CAT_ONE_WAIT_REV;
|
CatOne.Cat1Status = CAT_ONE_WAIT_REV;
|
||||||
CatOne.NextStatus = NextStatus;
|
CatOne.NextStatus = NextStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GateWayRegister(uint8_t *TxBuff)
|
static int GateWayRegister(uint8_t *TxBuff)
|
||||||
{
|
{
|
||||||
uint16_t UnitCommCnt = 0;
|
uint16_t UnitCommCnt = 0;
|
||||||
uint8_t *p = &TxBuff[0];
|
uint8_t *p = &TxBuff[0];
|
||||||
@@ -459,7 +397,7 @@ void CatOneLoopHandler(void)
|
|||||||
CatOneAtCmdSend(CatOne.AtCmd, 2000, CatOne.NextStatus);
|
CatOneAtCmdSend(CatOne.AtCmd, 2000, CatOne.NextStatus);
|
||||||
CAT1_DBG_LOG("Cat1 Ret TimeOut, ReSend(%d)...\r\n", CatOne.AtCmdResendCnt);
|
CAT1_DBG_LOG("Cat1 Ret TimeOut, ReSend(%d)...\r\n", CatOne.AtCmdResendCnt);
|
||||||
}
|
}
|
||||||
else { //3次错误,关机
|
else {
|
||||||
CAT1_DBG_LOG("Cat1 error, Close!\r\n");
|
CAT1_DBG_LOG("Cat1 error, Close!\r\n");
|
||||||
if(CatOne.AtCmd == CAT_ONE_LIPSEND)
|
if(CatOne.AtCmd == CAT_ONE_LIPSEND)
|
||||||
CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
|
CatOne.Cat1Status = CAT_ONE_CLOSE_TCP;
|
||||||
@@ -499,9 +437,9 @@ void CatOneLoopHandler(void)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAT_ONE_REG_SVR: //注册服务器
|
case CAT_ONE_REG_SVR:
|
||||||
ret = GateWayRegister(CatOneEthTxBuff);
|
ret = GateWayRegister(CatOneTxBuff);
|
||||||
rt_mq_send(CatOne.GateWay->NetSendData_MQ, CatOneEthTxBuff, ret);
|
rt_mq_send(CatOne.GateWay->NetSendData_MQ, CatOneTxBuff, ret);
|
||||||
CatOne.Cat1Status = CAT_ONE_WAIT_SEND;
|
CatOne.Cat1Status = CAT_ONE_WAIT_SEND;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -509,11 +447,11 @@ void CatOneLoopHandler(void)
|
|||||||
result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 1000);
|
result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 1000);
|
||||||
if(result == RT_EOK) {
|
if(result == RT_EOK) {
|
||||||
CatSendErrCnt = 0;
|
CatSendErrCnt = 0;
|
||||||
CatOneEthTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneEthTxBuff);
|
CatOneTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneTxBuff);
|
||||||
CatOne.Cat1Status = CAT_ONE_SEND_DATA;
|
CatOne.Cat1Status = CAT_ONE_SEND_DATA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(CatOne.Cat1Status == CAT_ONE_RESET || CatOne.Cat1Status == CAT_ONE_OFF) //外部命令执行,状态改变
|
if(CatOne.Cat1Status == CAT_ONE_RESET || CatOne.Cat1Status == CAT_ONE_OFF)
|
||||||
return;
|
return;
|
||||||
if(!CatOne.TcpConnFlag) {
|
if(!CatOne.TcpConnFlag) {
|
||||||
CatOne.Cat1Status = CAT_ONE_OFF;
|
CatOne.Cat1Status = CAT_ONE_OFF;
|
||||||
@@ -554,7 +492,7 @@ void CatOneLoopHandler(void)
|
|||||||
else {
|
else {
|
||||||
Cat1RevErrCnt = 0;
|
Cat1RevErrCnt = 0;
|
||||||
}
|
}
|
||||||
if(CatOne.GateWay->SvrRegFlag == false) //设备没注册,关闭4G,等待下一次重新注册
|
if(CatOne.GateWay->SvrRegFlag == false)
|
||||||
CatOne.Cat1Status = CAT_ONE_OFF;
|
CatOne.Cat1Status = CAT_ONE_OFF;
|
||||||
else
|
else
|
||||||
CatOne.Cat1Status = CAT_ONE_WAIT_SEND;
|
CatOne.Cat1Status = CAT_ONE_WAIT_SEND;
|
||||||
@@ -566,7 +504,6 @@ void CatOneLoopHandler(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CAT_ONE_OFF:
|
case CAT_ONE_OFF:
|
||||||
//CAT1_POW_OFF();
|
|
||||||
CAT1_RESET_SET();
|
CAT1_RESET_SET();
|
||||||
CAT1_PWR_KEY_CLR();
|
CAT1_PWR_KEY_CLR();
|
||||||
rt_thread_delay(3000);
|
rt_thread_delay(3000);
|
||||||
@@ -576,15 +513,16 @@ void CatOneLoopHandler(void)
|
|||||||
CAT1_DBG_LOG("Cat1 Power Off!\r\n");
|
CAT1_DBG_LOG("Cat1 Power Off!\r\n");
|
||||||
CatOne.Cat1Status = CAT_ONE_IDEL;
|
CatOne.Cat1Status = CAT_ONE_IDEL;
|
||||||
CatOne.ResetDelayCnt = CATONE_RESET_DELAY_TIME_MAX;
|
CatOne.ResetDelayCnt = CATONE_RESET_DELAY_TIME_MAX;
|
||||||
|
DBG_ON();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAT_ONE_RESET:
|
case CAT_ONE_RESET:
|
||||||
CatSendErrCnt = 0;
|
CatSendErrCnt = 0;
|
||||||
CatOne.GateWay->SvrRegFlag = false;
|
CatOne.GateWay->SvrRegFlag = false;
|
||||||
CAT1_DBG_LOG("Cat1 Reset!\r\n");
|
CAT1_DBG_LOG("Cat1 Reset!\r\n");
|
||||||
|
CAT1_ON();
|
||||||
CAT1_RESET_CLR();
|
CAT1_RESET_CLR();
|
||||||
CAT1_PWR_KEY_SET();
|
CAT1_PWR_KEY_SET();
|
||||||
//CAT1_POW_ON();
|
|
||||||
rt_thread_delay(50);
|
rt_thread_delay(50);
|
||||||
CAT1_RESET_SET();
|
CAT1_RESET_SET();
|
||||||
CAT1_PWR_KEY_CLR();
|
CAT1_PWR_KEY_CLR();
|
||||||
@@ -598,156 +536,6 @@ void CatOneLoopHandler(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EthLoopHandler(void)
|
|
||||||
{
|
|
||||||
rt_err_t result;
|
|
||||||
|
|
||||||
switch(CatOne.EthStatus) {
|
|
||||||
case ETH_IDEL:
|
|
||||||
rt_thread_delay(1);
|
|
||||||
if(CatOne.EthResetDelayCnt > 0) {
|
|
||||||
CatOne.EthResetDelayCnt--;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CatOne.EthStatus = ETH_RESET;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ETH_RESET:
|
|
||||||
CAT1_DBG_LOG("ETH Reset!\r\n");
|
|
||||||
ETH_RESET_CLR();
|
|
||||||
rt_thread_delay(10);
|
|
||||||
ETH_RESET_SET();
|
|
||||||
rt_thread_delay(2000); // 延长复位后稳定时间到2秒
|
|
||||||
CatOne.EthStatus = ETH_WAIT_LINK;
|
|
||||||
CatOne.EthLinkWaitCnt = 0;
|
|
||||||
CatOne.EthFirstRegFlag = true; // 重置首次注册标志
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ETH_WAIT_LINK:
|
|
||||||
if(CatOne.EthLinkWaitCnt == 0) {
|
|
||||||
/* 首次进入等待链路状态,等待模块完全启动 */
|
|
||||||
CAT1_DBG_LOG("ETH Waiting for module ready...\r\n");
|
|
||||||
rt_thread_delay(2000);
|
|
||||||
}
|
|
||||||
if(ETH_LINK_GET() == Reset) {
|
|
||||||
CAT1_DBG_LOG("ETH Link OK!\r\n");
|
|
||||||
if(CatOne.GateWay->SvrRegFlag == false) {
|
|
||||||
CatOne.EthStatus = ETH_REG_SVR;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CatOne.EthStatus = ETH_WAIT_SEND;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CatOne.EthLinkWaitCnt++;
|
|
||||||
if(CatOne.EthLinkWaitCnt >= ETH_LINK_WAIT_TIME_MAX) {
|
|
||||||
CAT1_DBG_LOG("ETH Link Timeout, Reset!\r\n");
|
|
||||||
CatOne.EthStatus = ETH_OFF;
|
|
||||||
}
|
|
||||||
rt_thread_delay(1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ETH_REG_SVR:
|
|
||||||
{
|
|
||||||
// 首次注册时添加延迟,等待系统稳定
|
|
||||||
if(CatOne.EthFirstRegFlag) {
|
|
||||||
CAT1_DBG_LOG("ETH First Register, waiting for system stable...\r\n");
|
|
||||||
rt_thread_delay(ETH_FIRST_REG_DELAY);
|
|
||||||
CatOne.EthFirstRegFlag = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t ret = GateWayRegister(CatOneEthTxBuff);
|
|
||||||
rt_mq_send(CatOne.GateWay->NetSendData_MQ, CatOneEthTxBuff, ret);
|
|
||||||
CAT1_DBG_LOG("ETH Register Server...\r\n");
|
|
||||||
CatOne.EthStatus = ETH_WAIT_SEND;
|
|
||||||
CatOne.EthSendRetryCnt = 0; // 重置重试计数器
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ETH_WAIT_SEND:
|
|
||||||
result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 100);
|
|
||||||
if(result == RT_EOK) {
|
|
||||||
CatOneEthTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneEthTxBuff);
|
|
||||||
CatOne.EthStatus = ETH_SEND_DATA;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(CatOne.EthStatus == ETH_RESET || CatOne.EthStatus == ETH_OFF)
|
|
||||||
return;
|
|
||||||
if(ETH_LINK_GET() != Reset) {
|
|
||||||
CAT1_DBG_LOG("ETH Link Lost!\r\n");
|
|
||||||
CatOne.EthStatus = ETH_OFF;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rt_thread_delay(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ETH_SEND_DATA:
|
|
||||||
HexToAscii(CatOneEthTxBuff, CommUnitSendASCII, CatOneEthTxLen);
|
|
||||||
EthRevTimeOutCnt = 0;
|
|
||||||
EthOrCat1UartSend((uint8_t *)CommUnitSendASCII, CatOneEthTxLen * 2);
|
|
||||||
CommUnitSendASCII[CatOneEthTxLen * 2] = 0;
|
|
||||||
CAT1_DBG_LOG("Eth Send: %s\r\n", CommUnitSendASCII);
|
|
||||||
|
|
||||||
CatOne.EthStatus = ETH_WAIT_RECV;
|
|
||||||
CatOne.EthRecvTimeoutCnt = 0;
|
|
||||||
CatOne.EthSendRetryCnt = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ETH_WAIT_RECV:
|
|
||||||
rt_thread_delay(1);
|
|
||||||
CatOne.EthRecvTimeoutCnt++;
|
|
||||||
|
|
||||||
if(CatOne.EthRecvTimeoutCnt >= ETH_RECV_TIMEOUT_MAX) {
|
|
||||||
CAT1_DBG_LOG("ETH Recv Timeout!\r\n");
|
|
||||||
CatOne.EthSendRetryCnt++;
|
|
||||||
if(CatOne.EthSendRetryCnt >= ETH_SEND_RETRY_MAX) {
|
|
||||||
CAT1_DBG_LOG("ETH Send Retry Max, Reset!\r\n");
|
|
||||||
CatOne.EthStatus = ETH_OFF;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(CatOne.GateWay->SvrRegFlag == false) {
|
|
||||||
CatOne.EthStatus = ETH_REG_SVR;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CatOne.EthStatus = ETH_WAIT_SEND;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ETH_LINK_GET() != Reset) {
|
|
||||||
CAT1_DBG_LOG("ETH Link Lost During Wait!\r\n");
|
|
||||||
CatOne.EthStatus = ETH_OFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(CatOne.GateWay->SvrRegFlag == true) {
|
|
||||||
CAT1_DBG_LOG("ETH Register Success!\r\n");
|
|
||||||
CatOne.EthStatus = ETH_WAIT_SEND;
|
|
||||||
CatOne.EthRecvTimeoutCnt = 0;
|
|
||||||
CatOne.EthSendRetryCnt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ETH_OFF:
|
|
||||||
CAT1_DBG_LOG("ETH Power Off!\r\n");
|
|
||||||
CatOne.GateWay->SvrRegFlag = false;
|
|
||||||
//ETH_RESET_CLR();
|
|
||||||
//rt_thread_delay(3000);
|
|
||||||
//ETH_RESET_SET();
|
|
||||||
CatOne.EthStatus = ETH_IDEL;
|
|
||||||
CatOne.EthResetDelayCnt = ETH_RESET_DELAY_TIME_MAX;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
CatOne.EthStatus = ETH_RESET;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CatOneEthSendQueue(uint8_t *sData, uint16_t sLen)
|
bool CatOneEthSendQueue(uint8_t *sData, uint16_t sLen)
|
||||||
{
|
{
|
||||||
if(CatOne.GateWay->SvrRegFlag == false)
|
if(CatOne.GateWay->SvrRegFlag == false)
|
||||||
@@ -764,70 +552,44 @@ static void CatOneInit(GateWayPara GateWay)
|
|||||||
CatOne.CatOneRevCallBack = GateWay->SvrRevCallBack;
|
CatOne.CatOneRevCallBack = GateWay->SvrRevCallBack;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CatOneEthRev_Thread_Entry(void *parameter)
|
void CatOneRev_Thread_Entry(void *parameter)
|
||||||
{
|
{
|
||||||
rt_err_t result;
|
rt_err_t result;
|
||||||
char RxBuffTemp[CAT_ONE_REV_LEN_MAX];
|
char RxBuffTemp[CAT_ONE_REV_LEN_MAX];
|
||||||
uint8_t HexData[CAT_ONE_REV_LEN_MAX / 2];
|
|
||||||
|
|
||||||
GateWayPara GateWay = (GateWayPara)parameter;
|
GateWayPara GateWay = (GateWayPara)parameter;
|
||||||
|
|
||||||
rt_kprintf("CatOneTthRev Thread is running!\r\n");
|
rt_kprintf("CatOneRev Thread is running!\r\n");
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
if(GateWay->ConfigPara.Comm == CATONE_COMM) {
|
|
||||||
result = rt_sem_take(CatOneIRQ_Sem, 500);
|
result = rt_sem_take(CatOneIRQ_Sem, 500);
|
||||||
if(result == RT_EOK) {
|
if(result == RT_EOK) {
|
||||||
memcpy(RxBuffTemp, CatOneEthRxBuff, CatOneEthRxLen);
|
memcpy(RxBuffTemp, CatOneRxBuff, CatOneRxLen);
|
||||||
RxBuffTemp[CatOneEthRxLen] = 0;
|
RxBuffTemp[CatOneRxLen] = 0;
|
||||||
CatOneAtCmdAnalyze(RxBuffTemp);
|
CatOneAtCmdAnalyze(RxBuffTemp);
|
||||||
memset(CatOneEthRxBuff, 0x00, CAT_ONE_REV_LEN_MAX);
|
memset(CatOneRxBuff, 0x00, CAT_ONE_REV_LEN_MAX);
|
||||||
CatOneEthRxLen = 0;
|
CatOneRxLen = 0;
|
||||||
}
|
|
||||||
//CatOneEthRxLen = 0;
|
|
||||||
}
|
|
||||||
else if(GateWay->ConfigPara.Comm == ETH_COMM) {
|
|
||||||
result = rt_sem_take(EthIRQ_Sem, 500);
|
|
||||||
if(result == RT_EOK) {
|
|
||||||
memcpy(RxBuffTemp, CatOneEthRxBuff, CatOneEthRxLen);
|
|
||||||
RxBuffTemp[CatOneEthRxLen] = 0;
|
|
||||||
CAT1_DBG_LOG("Eth Rev: %s\r\n",RxBuffTemp);
|
|
||||||
memset(HexData, 0x00, CatOneEthRxLen / 2);
|
|
||||||
uint8_t ret = AsciiToHex(RxBuffTemp, HexData, CatOneEthRxLen);
|
|
||||||
if(ret > 0)
|
|
||||||
GateWay->SvrRevCallBack(GateWay, HexData, ret);
|
|
||||||
memset(CatOneEthRxBuff, 0x00, CAT_ONE_REV_LEN_MAX);
|
|
||||||
CatOneEthRxLen = 0;
|
|
||||||
}
|
|
||||||
//CatOneEthRxLen = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CatOne_Eth_Thread_Entry(void *parameter)
|
void CatOne_Thread_Entry(void *parameter)
|
||||||
{
|
{
|
||||||
GateWayPara GateWay = (GateWayPara)parameter;
|
GateWayPara GateWay = (GateWayPara)parameter;
|
||||||
|
|
||||||
CatOneRev_Sem = rt_sem_create("cat1r_sem", 0, RT_IPC_FLAG_FIFO);
|
CatOneRev_Sem = rt_sem_create("cat1r_sem", 0, RT_IPC_FLAG_FIFO);
|
||||||
if(CatOneRev_Sem == RT_NULL) {
|
if(CatOneRev_Sem == RT_NULL) {
|
||||||
rt_kprintf("CatOne Sem Create Failed!\r\n");
|
rt_kprintf("CatOneRev Sem Create Failed!\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
EthIRQ_Sem = rt_sem_create("eth_sem", 0, RT_IPC_FLAG_FIFO);
|
CatOneIRQ_Sem = rt_sem_create("cat1i_sem", 0, RT_IPC_FLAG_FIFO);
|
||||||
if(EthIRQ_Sem == RT_NULL) {
|
|
||||||
rt_kprintf("Eth Sem Create Failed!\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
CatOneIRQ_Sem = rt_sem_create("cat1_sem", 0, RT_IPC_FLAG_FIFO);
|
|
||||||
if(CatOneIRQ_Sem == RT_NULL) {
|
if(CatOneIRQ_Sem == RT_NULL) {
|
||||||
rt_kprintf("CatOneIRQ Sem Create Failed!\r\n");
|
rt_kprintf("CatOneIRQ Sem Create Failed!\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
CatOneInit(GateWay);
|
CatOneInit(GateWay);
|
||||||
ETH_RESET_CLR();
|
|
||||||
rt_thread_delay(10);
|
Cat1Rev_Thread = rt_thread_create("Cat1Rev", CatOneRev_Thread_Entry, parameter, 3000, 3, 20);
|
||||||
ETH_RESET_SET();
|
|
||||||
Cat1Rev_Thread = rt_thread_create("Cat1Rev", CatOneEthRev_Thread_Entry, parameter, 3000, 3, 20);
|
|
||||||
if (Cat1Rev_Thread != RT_NULL) {
|
if (Cat1Rev_Thread != RT_NULL) {
|
||||||
rt_thread_startup(Cat1Rev_Thread);
|
rt_thread_startup(Cat1Rev_Thread);
|
||||||
}
|
}
|
||||||
@@ -835,44 +597,37 @@ void CatOne_Eth_Thread_Entry(void *parameter)
|
|||||||
rt_kprintf("CatOneRev Thread Create Failed! Exit...\r\n");
|
rt_kprintf("CatOneRev Thread Create Failed! Exit...\r\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rt_kprintf("CatOne Thread is running!\r\n");
|
rt_kprintf("CatOne Thread is running!\r\n");
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
//rt_mutex_take(GateWay->UartRevMutex, RT_WAITING_FOREVER);
|
if(GateWay->ConfigPara.Comm != CATONE_COMM) {
|
||||||
if(GateWay->ConfigPara.Comm == CATONE_COMM)
|
rt_thread_delay(100);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
CatOneLoopHandler();
|
CatOneLoopHandler();
|
||||||
else if(GateWay->ConfigPara.Comm == ETH_COMM)
|
|
||||||
EthLoopHandler();
|
|
||||||
else
|
|
||||||
rt_thread_delay(1);
|
|
||||||
//rt_mutex_release(GateWay->UartRevMutex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Cat1IrqCallback(uint8_t rData)
|
||||||
void EthOrCat1RxIrqCallback(uint8_t rData)
|
|
||||||
{
|
{
|
||||||
if(EthRevTimeOutCnt == 0)
|
if(Cat1RevTimeOutCnt == 0)
|
||||||
CatOneEthRxLen = 0;
|
CatOneRxLen = 0;
|
||||||
|
|
||||||
if(CatOneEthRxLen < CAT_ONE_REV_LEN_MAX) {
|
if(CatOneRxLen < CAT_ONE_REV_LEN_MAX) {
|
||||||
CatOneEthRxBuff[CatOneEthRxLen++] = rData;
|
CatOneRxBuff[CatOneRxLen++] = rData;
|
||||||
}
|
}
|
||||||
|
|
||||||
EthRevTimeOutCnt = 3;
|
Cat1RevTimeOutCnt = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EthRxOverhandler(void)
|
void Cat1OverHandler(void)
|
||||||
{
|
{
|
||||||
if(EthRevTimeOutCnt > 0)
|
if(Cat1RevTimeOutCnt > 0)
|
||||||
EthRevTimeOutCnt--;
|
Cat1RevTimeOutCnt--;
|
||||||
|
|
||||||
if(CatOneEthRxLen > 5 && EthRevTimeOutCnt == 0) {
|
if(CatOneRxLen > 5 && Cat1RevTimeOutCnt == 0) {
|
||||||
EthRevTimeOutCnt = 20;
|
Cat1RevTimeOutCnt = 20;
|
||||||
if(CatOne.GateWay->ConfigPara.Comm == CATONE_COMM)
|
|
||||||
rt_sem_release(CatOneIRQ_Sem);
|
rt_sem_release(CatOneIRQ_Sem);
|
||||||
else
|
|
||||||
rt_sem_release(EthIRQ_Sem);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -890,12 +645,7 @@ void CatReadImeiOrSim(char *Imei, char *Sim)
|
|||||||
|
|
||||||
void CatOneTriggerRegister(void)
|
void CatOneTriggerRegister(void)
|
||||||
{
|
{
|
||||||
ETHStop();
|
CatOneStop();
|
||||||
CAT1_ON();
|
CAT1_ON();
|
||||||
CatOneReset();
|
CatOneReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ETHTriggerRegister(void)
|
|
||||||
{
|
|
||||||
CatOne.EthStatus = ETH_REG_SVR;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "encryption.h"
|
#include "encryption.h"
|
||||||
|
|
||||||
//从机加密表
|
//从机加密表
|
||||||
const unsigned char EPT_Table[32][6] = {
|
const unsigned char EPT_Table[32][6] = {
|
||||||
{1, 6, 4, 2, 3, 5}, {2, 4, 6, 3, 5, 1}, {3, 5, 6, 2, 1, 4}, {5, 3, 2, 1, 4, 6},
|
{1, 6, 4, 2, 3, 5}, {2, 4, 6, 3, 5, 1}, {3, 5, 6, 2, 1, 4}, {5, 3, 2, 1, 4, 6},
|
||||||
{4, 2, 3, 1, 5, 6}, {6, 3, 5, 1, 4, 2}, {3, 5, 2, 6, 4, 1}, {2, 5, 4, 3, 1, 6},
|
{4, 2, 3, 1, 5, 6}, {6, 3, 5, 1, 4, 2}, {3, 5, 2, 6, 4, 1}, {2, 5, 4, 3, 1, 6},
|
||||||
@@ -12,7 +12,7 @@ const unsigned char EPT_Table[32][6] = {
|
|||||||
{3, 6, 5, 4, 2, 1}, {1, 2, 6, 3, 5, 4}, {4, 6, 5, 3, 2, 1}, {5, 3, 4, 2, 6, 1}
|
{3, 6, 5, 4, 2, 1}, {1, 2, 6, 3, 5, 4}, {4, 6, 5, 3, 2, 1}, {5, 3, 4, 2, 6, 1}
|
||||||
};
|
};
|
||||||
|
|
||||||
//从机解密表:
|
//从机解密表:
|
||||||
const unsigned char DPT_Table[32][5] ={
|
const unsigned char DPT_Table[32][5] ={
|
||||||
{1, 4, 2, 3, 5}, {2, 4, 3, 5, 1}, {3, 5, 2, 1, 4}, {5, 3, 2, 1, 4},
|
{1, 4, 2, 3, 5}, {2, 4, 3, 5, 1}, {3, 5, 2, 1, 4}, {5, 3, 2, 1, 4},
|
||||||
{4, 2, 3, 1, 5}, {3, 5, 1, 4, 2}, {3, 5, 2, 4, 1}, {2, 5, 4, 3, 1},
|
{4, 2, 3, 1, 5}, {3, 5, 1, 4, 2}, {3, 5, 2, 4, 1}, {2, 5, 4, 3, 1},
|
||||||
@@ -24,7 +24,7 @@ const unsigned char DPT_Table[32][5] ={
|
|||||||
{3, 5, 4, 2, 1}, {1, 2, 3, 5, 4}, {4, 5, 3, 2, 1}, {5, 3, 4, 2, 1}
|
{3, 5, 4, 2, 1}, {1, 2, 3, 5, 4}, {4, 5, 3, 2, 1}, {5, 3, 4, 2, 1}
|
||||||
};
|
};
|
||||||
|
|
||||||
//数据位加密表:
|
//数据位加密表:
|
||||||
const unsigned char EPT_D[32] = {
|
const unsigned char EPT_D[32] = {
|
||||||
0x23, 0x4c, 0x92, 0x38, 0x52, 0xa4, 0x9a, 0x61,
|
0x23, 0x4c, 0x92, 0x38, 0x52, 0xa4, 0x9a, 0x61,
|
||||||
0x86, 0xc8, 0x70, 0x16, 0x32, 0x58, 0x62, 0x83,
|
0x86, 0xc8, 0x70, 0x16, 0x32, 0x58, 0x62, 0x83,
|
||||||
@@ -33,11 +33,11 @@ const unsigned char EPT_D[32] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
/* 加密函数 */
|
/* 加密函数 */
|
||||||
/* */
|
/* */
|
||||||
/*函数入口: *data,未加密的普通协议数据 */
|
/*函数入口: *data,未加密的普通协议数据 */
|
||||||
/* */
|
/* */
|
||||||
/*函数出口: *EPT_data,生成的加密协议 */
|
/*函数出口: *EPT_data,生成的加密协议 */
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) {
|
void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) {
|
||||||
unsigned char Edata[6];
|
unsigned char Edata[6];
|
||||||
@@ -60,11 +60,11 @@ void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
/* 解密函数 */
|
/* 解密函数 */
|
||||||
/* */
|
/* */
|
||||||
/*函数入口: *EPT_data,需要解密的加密协议 */
|
/*函数入口: *EPT_data,需要解密的加密协议 */
|
||||||
/* */
|
/* */
|
||||||
/*函数出口: *DPT_data,生成的普通协议 */
|
/*函数出口: *DPT_data,生成的普通协议 */
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
void Decrypt_Code(unsigned char *EPT_data,unsigned char *DPT_data) {
|
void Decrypt_Code(unsigned char *EPT_data,unsigned char *DPT_data) {
|
||||||
unsigned char data[5];
|
unsigned char data[5];
|
||||||
|
|||||||
@@ -0,0 +1,311 @@
|
|||||||
|
#include "EthTask.h"
|
||||||
|
#include "Public.h"
|
||||||
|
#include "DebugCmd.h"
|
||||||
|
|
||||||
|
static rt_sem_t EthIRQ_Sem = RT_NULL;
|
||||||
|
static rt_thread_t EthRev_Thread = RT_NULL;
|
||||||
|
|
||||||
|
static EthTask_t Eth;
|
||||||
|
|
||||||
|
static char EthRxBuff[ETH_RX_LEN_MAX];
|
||||||
|
static uint16_t EthRxLen;
|
||||||
|
static uint8_t EthRevTimeOutCnt;
|
||||||
|
|
||||||
|
static uint8_t Payload[ETH_RX_LEN_MAX];
|
||||||
|
static char CommUnitSendASCII[ETH_RX_LEN_MAX * 2];
|
||||||
|
|
||||||
|
static bool EthDispEn = false;
|
||||||
|
|
||||||
|
#define ETH_DBG_LOG(...) { if(EthDispEn) Debug_Printf(__VA_ARGS__);}
|
||||||
|
|
||||||
|
void ETHOnOff(bool OnOff)
|
||||||
|
{
|
||||||
|
EthDispEn = OnOff;
|
||||||
|
if(OnOff)
|
||||||
|
Debug_Printf("\r\nEth Display Enable!\r\n\r\n");
|
||||||
|
else
|
||||||
|
Debug_Printf("\r\nEth Display Disable!\r\n\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ETHStop(void)
|
||||||
|
{
|
||||||
|
Eth.Status = ETH_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ETHReset(void)
|
||||||
|
{
|
||||||
|
Eth.Status = ETH_RESET;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ETHTriggerRegister(void)
|
||||||
|
{
|
||||||
|
Eth.Status = ETH_REG_SVR;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int GateWayRegister(uint8_t *TxBuff)
|
||||||
|
{
|
||||||
|
uint16_t UnitCommCnt = 0;
|
||||||
|
uint8_t *p = &TxBuff[0];
|
||||||
|
uint16_t len = 5;
|
||||||
|
|
||||||
|
if(Eth.GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true && Eth.GateWay->ConfigPara.Rs485Ch1.Enable == true) {
|
||||||
|
UnitCommCnt++;
|
||||||
|
memcpy(&p[len], Eth.GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0], 6);
|
||||||
|
len += 6;
|
||||||
|
}
|
||||||
|
if(Eth.GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true && Eth.GateWay->ConfigPara.Rs485Ch2.Enable == true) {
|
||||||
|
UnitCommCnt++;
|
||||||
|
memcpy(&p[len], Eth.GateWay->ConfigPara.Rs485Ch2.CUPara.Para.Mac[0], 6);
|
||||||
|
len += 6;
|
||||||
|
}
|
||||||
|
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {
|
||||||
|
if(Eth.GateWay->ConfigPara.CommUnitArray[i].RegFlag == true) {
|
||||||
|
for(int j = 0; j < Eth.GateWay->ConfigPara.CommUnitArray[i].SensorN; j++)
|
||||||
|
{
|
||||||
|
memcpy(&p[len], Eth.GateWay->ConfigPara.CommUnitArray[i].Mac[j], 6);
|
||||||
|
len += 6;
|
||||||
|
UnitCommCnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TxBuff[0] = (len - 3) & 0x00ff;
|
||||||
|
TxBuff[1] = ((len - 3) >> 8) & 0x00ff;
|
||||||
|
TxBuff[2] = NET_COMM_CMD_REG;
|
||||||
|
TxBuff[3] = UnitCommCnt & 0x00ff;
|
||||||
|
TxBuff[4] = (UnitCommCnt >> 8) & 0x00ff;
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EthLoopHandler(void)
|
||||||
|
{
|
||||||
|
rt_err_t result;
|
||||||
|
|
||||||
|
switch(Eth.Status) {
|
||||||
|
case ETH_IDEL:
|
||||||
|
rt_thread_delay(1);
|
||||||
|
if(Eth.ResetDelayCnt > 0) {
|
||||||
|
Eth.ResetDelayCnt--;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Eth.Status = ETH_RESET;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETH_RESET:
|
||||||
|
ETH_DBG_LOG("ETH Reset!\r\n");
|
||||||
|
ETH_RESET_CLR();
|
||||||
|
rt_thread_delay(10);
|
||||||
|
ETH_RESET_SET();
|
||||||
|
rt_thread_delay(2000);
|
||||||
|
Eth.Status = ETH_WAIT_LINK;
|
||||||
|
Eth.LinkWaitCnt = 0;
|
||||||
|
Eth.FirstRegFlag = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETH_WAIT_LINK:
|
||||||
|
if(Eth.LinkWaitCnt == 0) {
|
||||||
|
ETH_DBG_LOG("ETH Waiting for module ready...\r\n");
|
||||||
|
rt_thread_delay(2000);
|
||||||
|
}
|
||||||
|
if(ETH_LINK_GET() == Reset) {
|
||||||
|
ETH_DBG_LOG("ETH Link OK!\r\n");
|
||||||
|
if(Eth.GateWay->SvrRegFlag == false) {
|
||||||
|
Eth.Status = ETH_REG_SVR;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Eth.Status = ETH_WAIT_SEND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Eth.LinkWaitCnt++;
|
||||||
|
if(Eth.LinkWaitCnt >= ETH_LINK_WAIT_TIME_MAX) {
|
||||||
|
ETH_DBG_LOG("ETH Link Timeout, Reset!\r\n");
|
||||||
|
Eth.Status = ETH_OFF;
|
||||||
|
}
|
||||||
|
rt_thread_delay(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETH_REG_SVR:
|
||||||
|
{
|
||||||
|
if(Eth.FirstRegFlag) {
|
||||||
|
ETH_DBG_LOG("ETH First Register, waiting for system stable...\r\n");
|
||||||
|
rt_thread_delay(ETH_FIRST_REG_DELAY);
|
||||||
|
Eth.FirstRegFlag = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t ret = GateWayRegister(Eth.TxBuff);
|
||||||
|
rt_mq_send(Eth.GateWay->NetSendData_MQ, Eth.TxBuff, ret);
|
||||||
|
ETH_DBG_LOG("ETH Register Server...\r\n");
|
||||||
|
Eth.Status = ETH_WAIT_SEND;
|
||||||
|
Eth.SendRetryCnt = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETH_WAIT_SEND:
|
||||||
|
result = rt_mq_recv(Eth.GateWay->NetSendData_MQ, Payload, ETH_RX_LEN_MAX, 100);
|
||||||
|
if(result == RT_EOK) {
|
||||||
|
Eth.TxLen = NetCommOrgData(Eth.GateWay, Payload, Eth.TxBuff);
|
||||||
|
Eth.Status = ETH_SEND_DATA;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(Eth.Status == ETH_RESET || Eth.Status == ETH_OFF)
|
||||||
|
return;
|
||||||
|
if(ETH_LINK_GET() != Reset) {
|
||||||
|
ETH_DBG_LOG("ETH Link Lost!\r\n");
|
||||||
|
Eth.Status = ETH_OFF;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rt_thread_delay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETH_SEND_DATA:
|
||||||
|
HexToAscii(Eth.TxBuff, CommUnitSendASCII, Eth.TxLen);
|
||||||
|
EthRevTimeOutCnt = 0;
|
||||||
|
EthUartSend((uint8_t *)CommUnitSendASCII, Eth.TxLen * 2);
|
||||||
|
CommUnitSendASCII[Eth.TxLen * 2] = 0;
|
||||||
|
ETH_DBG_LOG("Eth Send: %s\r\n", CommUnitSendASCII);
|
||||||
|
|
||||||
|
Eth.Status = ETH_WAIT_RECV;
|
||||||
|
Eth.RecvTimeoutCnt = 0;
|
||||||
|
Eth.SendRetryCnt = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETH_WAIT_RECV:
|
||||||
|
rt_thread_delay(1);
|
||||||
|
Eth.RecvTimeoutCnt++;
|
||||||
|
|
||||||
|
if(Eth.RecvTimeoutCnt >= ETH_RECV_TIMEOUT_MAX) {
|
||||||
|
ETH_DBG_LOG("ETH Recv Timeout!\r\n");
|
||||||
|
Eth.SendRetryCnt++;
|
||||||
|
if(Eth.SendRetryCnt >= ETH_SEND_RETRY_MAX) {
|
||||||
|
ETH_DBG_LOG("ETH Send Retry Max, Reset!\r\n");
|
||||||
|
Eth.Status = ETH_OFF;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(Eth.GateWay->SvrRegFlag == false) {
|
||||||
|
Eth.Status = ETH_REG_SVR;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Eth.Status = ETH_WAIT_SEND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ETH_LINK_GET() != Reset) {
|
||||||
|
ETH_DBG_LOG("ETH Link Lost During Wait!\r\n");
|
||||||
|
Eth.Status = ETH_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Eth.GateWay->SvrRegFlag == true) {
|
||||||
|
ETH_DBG_LOG("ETH Register Success!\r\n");
|
||||||
|
Eth.Status = ETH_WAIT_SEND;
|
||||||
|
Eth.RecvTimeoutCnt = 0;
|
||||||
|
Eth.SendRetryCnt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETH_OFF:
|
||||||
|
ETH_DBG_LOG("ETH Power Off!\r\n");
|
||||||
|
Eth.GateWay->SvrRegFlag = false;
|
||||||
|
Eth.Status = ETH_IDEL;
|
||||||
|
Eth.ResetDelayCnt = ETH_RESET_DELAY_TIME_MAX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Eth.Status = ETH_RESET;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EthInit(GateWayPara GateWay)
|
||||||
|
{
|
||||||
|
memset(&Eth, 0x00, sizeof(EthTask_t));
|
||||||
|
Eth.Status = ETH_RESET;
|
||||||
|
Eth.GateWay = GateWay;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EthIrqCallbackHandler(uint8_t rData)
|
||||||
|
{
|
||||||
|
if(EthRevTimeOutCnt == 0)
|
||||||
|
EthRxLen = 0;
|
||||||
|
|
||||||
|
if(EthRxLen < ETH_RX_LEN_MAX) {
|
||||||
|
EthRxBuff[EthRxLen++] = rData;
|
||||||
|
}
|
||||||
|
|
||||||
|
EthRevTimeOutCnt = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EthOverHandler(void)
|
||||||
|
{
|
||||||
|
if(EthRevTimeOutCnt > 0)
|
||||||
|
EthRevTimeOutCnt--;
|
||||||
|
|
||||||
|
if(EthRxLen > 5 && EthRevTimeOutCnt == 0) {
|
||||||
|
EthRevTimeOutCnt = 20;
|
||||||
|
rt_sem_release(EthIRQ_Sem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EthRev_Thread_Entry(void *parameter)
|
||||||
|
{
|
||||||
|
rt_err_t result;
|
||||||
|
char RxBuffTemp[ETH_RX_LEN_MAX];
|
||||||
|
uint8_t HexData[ETH_RX_LEN_MAX / 2];
|
||||||
|
|
||||||
|
GateWayPara GateWay = (GateWayPara)parameter;
|
||||||
|
|
||||||
|
rt_kprintf("EthRev Thread is running!\r\n");
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
result = rt_sem_take(EthIRQ_Sem, 500);
|
||||||
|
if(result == RT_EOK) {
|
||||||
|
memcpy(RxBuffTemp, EthRxBuff, EthRxLen);
|
||||||
|
RxBuffTemp[EthRxLen] = 0;
|
||||||
|
ETH_DBG_LOG("Eth Rev: %s\r\n", RxBuffTemp);
|
||||||
|
memset(HexData, 0x00, EthRxLen / 2);
|
||||||
|
uint8_t ret = AsciiToHex(RxBuffTemp, HexData, EthRxLen);
|
||||||
|
if(ret > 0)
|
||||||
|
GateWay->SvrRevCallBack(GateWay, HexData, ret);
|
||||||
|
memset(EthRxBuff, 0x00, ETH_RX_LEN_MAX);
|
||||||
|
EthRxLen = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Eth_Thread_Entry(void *parameter)
|
||||||
|
{
|
||||||
|
GateWayPara GateWay = (GateWayPara)parameter;
|
||||||
|
|
||||||
|
EthIRQ_Sem = rt_sem_create("ethi_sem", 0, RT_IPC_FLAG_FIFO);
|
||||||
|
if(EthIRQ_Sem == RT_NULL) {
|
||||||
|
rt_kprintf("EthIRQ Sem Create Failed!\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
EthInit(GateWay);
|
||||||
|
ETH_RESET_CLR();
|
||||||
|
rt_thread_delay(10);
|
||||||
|
ETH_RESET_SET();
|
||||||
|
|
||||||
|
EthRev_Thread = rt_thread_create("EthRev", EthRev_Thread_Entry, parameter, 3000, 3, 20);
|
||||||
|
if (EthRev_Thread != RT_NULL) {
|
||||||
|
rt_thread_startup(EthRev_Thread);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rt_kprintf("EthRev Thread Create Failed! Exit...\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rt_kprintf("Eth Thread is running!\r\n");
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
if(GateWay->ConfigPara.Comm != ETH_COMM) {
|
||||||
|
rt_thread_delay(100);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
EthLoopHandler();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
#include "CatOneTask.h"
|
#include "CatOneTask.h"
|
||||||
#include "DebugCmd.h"
|
#include "DebugCmd.h"
|
||||||
|
|
||||||
#define UC_OFFLINE_TIME_INTERVAL_MAX (2 * 60 * 60)//离线判断最大时间间隔,单位秒
|
#define UC_OFFLINE_TIME_INTERVAL_MAX (2 * 60 * 60)//离线判断最大时间间隔,单位秒
|
||||||
|
|
||||||
static rt_sem_t LoraDioIRQ_Sem = RT_NULL;
|
static rt_sem_t LoraDioIRQ_Sem = RT_NULL;
|
||||||
static rt_thread_t LoraIRQ_Thread = RT_NULL;
|
static rt_thread_t LoraIRQ_Thread = RT_NULL;
|
||||||
@@ -14,7 +14,7 @@ void LoraSend(uint8_t* pucBuff, uint8_t ucLen)
|
|||||||
Sx1276LoRaSendBuffer(pucBuff, ucLen);
|
Sx1276LoRaSendBuffer(pucBuff, ucLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Lora接收消息统一放到消息队列,由接收任务处理
|
//Lora接收消息统一放到消息队列,由接收任务处理
|
||||||
int LoraRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
int LoraRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
||||||
{
|
{
|
||||||
uint8_t *sData;
|
uint8_t *sData;
|
||||||
@@ -41,7 +41,7 @@ void LoraIRQ_Thread_Entry(void *parameter)
|
|||||||
rt_err_t result;
|
rt_err_t result;
|
||||||
static uint16_t LoraErrCnt = 0;
|
static uint16_t LoraErrCnt = 0;
|
||||||
|
|
||||||
Debug_Printf("LoraRev Thread is running!\r\n");
|
Debug_Printf("LoraRev Thread is running!\r\n");
|
||||||
while(1) {
|
while(1) {
|
||||||
if(GateWay->ConfigPara.Lora.OnOff == false) {
|
if(GateWay->ConfigPara.Lora.OnOff == false) {
|
||||||
rt_thread_delay(100);
|
rt_thread_delay(100);
|
||||||
@@ -55,9 +55,9 @@ void LoraIRQ_Thread_Entry(void *parameter)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LoraErrCnt++;
|
LoraErrCnt++;
|
||||||
if(LoraErrCnt > LORA_ERR_RESET_DLY_MAX) { //15分钟内没有收到lora数据重启lora模块
|
if(LoraErrCnt > LORA_ERR_RESET_DLY_MAX) { //15分钟内没有收到lora数据重启lora模块
|
||||||
LoraErrCnt = 0;
|
LoraErrCnt = 0;
|
||||||
Debug_Printf("Lora Reset!\r\n");
|
Debug_Printf("Lora Reset!\r\n");
|
||||||
Sx1276LoRaInit(LoraRevCallBack);
|
Sx1276LoRaInit(LoraRevCallBack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@ void Lora_Thread_Entry(void *parameter)
|
|||||||
rt_thread_startup(LoraIRQ_Thread);
|
rt_thread_startup(LoraIRQ_Thread);
|
||||||
|
|
||||||
Sx1276LoRaInit(LoraRevCallBack);
|
Sx1276LoRaInit(LoraRevCallBack);
|
||||||
Debug_Printf("Lora Thread is running!\r\n");
|
Debug_Printf("Lora Thread is running!\r\n");
|
||||||
#ifdef LORA_LOWPOWER
|
#ifdef LORA_LOWPOWER
|
||||||
while(1) {
|
while(1) {
|
||||||
if(GateWay->ConfigPara.Lora.OnOff == false) {
|
if(GateWay->ConfigPara.Lora.OnOff == false) {
|
||||||
@@ -108,10 +108,10 @@ void Lora_Thread_Entry(void *parameter)
|
|||||||
result = rt_mq_recv(GateWay->LoraRev_MQ, Payload, 256, 1000);
|
result = rt_mq_recv(GateWay->LoraRev_MQ, Payload, 256, 1000);
|
||||||
if(result == RT_EOK) {
|
if(result == RT_EOK) {
|
||||||
int ret = GateWay->CommUnitRevCallBack(GateWay, &Payload[1], Payload[0], LoRaSendBuffer);
|
int ret = GateWay->CommUnitRevCallBack(GateWay, &Payload[1], Payload[0], LoRaSendBuffer);
|
||||||
if(ret == 0xff) //注册信息
|
if(ret == 0xff) //注册信息
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else { //离线判断
|
else { //离线判断
|
||||||
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {
|
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {
|
||||||
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true) {
|
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true) {
|
||||||
if(GateWay->ConfigPara.CommUnitArray[i].CommErrCnt < UC_OFFLINE_TIME_INTERVAL_MAX) {
|
if(GateWay->ConfigPara.CommUnitArray[i].CommErrCnt < UC_OFFLINE_TIME_INTERVAL_MAX) {
|
||||||
@@ -131,7 +131,7 @@ void Lora_Thread_Entry(void *parameter)
|
|||||||
GateWay->ConfigPara.CommUnitArray[i].Mac[0][3],
|
GateWay->ConfigPara.CommUnitArray[i].Mac[0][3],
|
||||||
GateWay->ConfigPara.CommUnitArray[i].Mac[0][4],
|
GateWay->ConfigPara.CommUnitArray[i].Mac[0][4],
|
||||||
GateWay->ConfigPara.CommUnitArray[i].Mac[0][5]);
|
GateWay->ConfigPara.CommUnitArray[i].Mac[0][5]);
|
||||||
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,7 +171,7 @@ void Lora_Thread_Entry(void *parameter)
|
|||||||
result = rt_mq_recv(GateWay->LoraRev_MQ, Payload, 256, 1000);
|
result = rt_mq_recv(GateWay->LoraRev_MQ, Payload, 256, 1000);
|
||||||
if(result == RT_EOK) {
|
if(result == RT_EOK) {
|
||||||
int ret = GateWay->CommUnitRevCallBack(GateWay, &Payload[1], Payload[0], Sx1276LoRaSendBuffer);
|
int ret = GateWay->CommUnitRevCallBack(GateWay, &Payload[1], Payload[0], Sx1276LoRaSendBuffer);
|
||||||
if(ret == 0xff) //注册信息
|
if(ret == 0xff) //注册信息
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(UnitCommSendFlag && GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].RevNewDataFlag) {
|
if(UnitCommSendFlag && GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].RevNewDataFlag) {
|
||||||
@@ -179,7 +179,7 @@ void Lora_Thread_Entry(void *parameter)
|
|||||||
SendUnitCommIdx++;
|
SendUnitCommIdx++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(UnitCommSendFlag) { //离线判断
|
else if(UnitCommSendFlag) { //离线判断
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommErrCnt++;
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommErrCnt++;
|
||||||
if(GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommErrCnt == 10) {
|
if(GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommErrCnt == 10) {
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommErrCnt = 0;
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommErrCnt = 0;
|
||||||
@@ -190,7 +190,7 @@ void Lora_Thread_Entry(void *parameter)
|
|||||||
MegData[2] = COMM_UNIT_CMD_READ;
|
MegData[2] = COMM_UNIT_CMD_READ;
|
||||||
memcpy(&MegData[3], GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0], 6);
|
memcpy(&MegData[3], GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0], 6);
|
||||||
MegData[9] = GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommStatus;
|
MegData[9] = GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].CommStatus;
|
||||||
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UnitCommSendFlag = false;
|
UnitCommSendFlag = false;
|
||||||
|
|||||||
@@ -7,50 +7,50 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "sx127x.h"
|
#include "sx127x.h"
|
||||||
|
|
||||||
//传感器对应的数据长度
|
//传感器对应的数据长度
|
||||||
const uint8_t SensorTypeDataLen[] = {
|
const uint8_t SensorTypeDataLen[] = {
|
||||||
0, //0x0000-保留
|
0, //0x0000-保留
|
||||||
30, //0x0001-应力场检测单元
|
30, //0x0001-应力场检测单元
|
||||||
12, //0x0002-渗透压检测单元
|
12, //0x0002-渗透压检测单元
|
||||||
14, //0x0003-弹性波导检测单元
|
14, //0x0003-弹性波导检测单元
|
||||||
10, //0x0004-介电质普检测单元
|
10, //0x0004-介电质普检测单元
|
||||||
6, //0x0005-微振动
|
6, //0x0005-微振动
|
||||||
6, //0x0006-三维连续变形检测单元
|
6, //0x0006-三维连续变形检测单元
|
||||||
3, //0x0007-通讯单元
|
3, //0x0007-通讯单元
|
||||||
18, //0x0008-三维应力检测单元
|
18, //0x0008-三维应力检测单元
|
||||||
9, //0x0009-激光示踪(主设备)
|
9, //0x0009-激光示踪(主设备)
|
||||||
12, //0x000A-水位计
|
12, //0x000A-水位计
|
||||||
0, //0x000B-保留
|
0, //0x000B-保留
|
||||||
0, //0x000C-保留
|
0, //0x000C-保留
|
||||||
14, //0x000D-二维应力场检测单元
|
14, //0x000D-二维应力场检测单元
|
||||||
9, //0x000E-裂缝检测单元
|
9, //0x000E-裂缝检测单元
|
||||||
0, //0x000F-预留
|
0, //0x000F-预留
|
||||||
8, //0x0010-姿态检测单元
|
8, //0x0010-姿态检测单元
|
||||||
4, //0x0011-激光位移检测单元
|
4, //0x0011-激光位移检测单元
|
||||||
4, //0x0012-表面应力传感器
|
4, //0x0012-表面应力传感器
|
||||||
4, //0x0013-压力传感器
|
4, //0x0013-压力传感器
|
||||||
4, //0x0014-微波测距传感器
|
4, //0x0014-微波测距传感器
|
||||||
0, //0x0015-表贴式结冰传感器
|
0, //0x0015-表贴式结冰传感器
|
||||||
0, //0x0016-埋入式结冰传感器
|
0, //0x0016-埋入式结冰传感器
|
||||||
4, //0x0017-单通道钢筋应力传感器
|
4, //0x0017-单通道钢筋应力传感器
|
||||||
4, //0x0018-单通道锚杆轴力传感器
|
4, //0x0018-单通道锚杆轴力传感器
|
||||||
32, //0x0019-8通道钢筋拉压力传感器
|
32, //0x0019-8通道钢筋拉压力传感器
|
||||||
32, //0x001A-8通道锚杆轴力传感器
|
32, //0x001A-8通道锚杆轴力传感器
|
||||||
0, //0x001B-16通道钢筋应力传感器
|
0, //0x001B-16通道钢筋应力传感器
|
||||||
0, //0x001C-16通道锚杆轴力传感器
|
0, //0x001C-16通道锚杆轴力传感器
|
||||||
0, //0x001D-爆炸冲击传感器
|
0, //0x001D-爆炸冲击传感器
|
||||||
0, //0x001E-随行支架传感器
|
0, //0x001E-随行支架传感器
|
||||||
0, //0x001F-冻融循环传感器
|
0, //0x001F-冻融循环传感器
|
||||||
19, //0x0020-位移计
|
19, //0x0020-位移计
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CRC_Modbus
|
* 函数名称: CRC_Modbus
|
||||||
* 功能描述: CRC16计算函数
|
* 功能描述: CRC16计算函数
|
||||||
* 参 数: wBase, 多项式
|
* 参 数: wBase, 多项式
|
||||||
Para,校验数据入口
|
Para,校验数据入口
|
||||||
Data, 校验数据长度入口
|
Data, 校验数据长度入口
|
||||||
* 返 回 值: crc16校验值
|
* 返 回 值: crc16校验值
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
uint16_t CRC_Modbus(uint16_t wBase, __IO uint8_t *para, uint16_t length)
|
uint16_t CRC_Modbus(uint16_t wBase, __IO uint8_t *para, uint16_t length)
|
||||||
{
|
{
|
||||||
@@ -73,12 +73,12 @@ uint16_t CRC_Modbus(uint16_t wBase, __IO uint8_t *para, uint16_t length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: HexToAscii
|
* 函数名称: HexToAscii
|
||||||
* 功能描述: HEX转换为ASCII字符串函数
|
* 功能描述: HEX转换为ASCII字符串函数
|
||||||
* 参 数: HexData, 16进制数据入口
|
* 参 数: HexData, 16进制数据入口
|
||||||
ASCData,转换后的ASCII数据
|
ASCData,转换后的ASCII数据
|
||||||
sLen, 需要转的16进制数据长度
|
sLen, 需要转的16进制数据长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen)
|
void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen)
|
||||||
{
|
{
|
||||||
@@ -105,12 +105,12 @@ void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: AsciiToHex
|
* 函数名称: AsciiToHex
|
||||||
* 功能描述: AscII字符串转换为16进制数组
|
* 功能描述: AscII字符串转换为16进制数组
|
||||||
* 参 数: ASCData, AscII字符串入口
|
* 参 数: ASCData, AscII字符串入口
|
||||||
HexData,转换后的数据
|
HexData,转换后的数据
|
||||||
sLen, 需要转的字符串长度
|
sLen, 需要转的字符串长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
uint8_t AsciiToHex(char *ASCData, uint8_t *HexData, uint8_t sLen)
|
uint8_t AsciiToHex(char *ASCData, uint8_t *HexData, uint8_t sLen)
|
||||||
{
|
{
|
||||||
@@ -142,11 +142,11 @@ uint8_t AsciiToHex(char *ASCData, uint8_t *HexData, uint8_t sLen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: ReadHistoryData
|
* 函数名称: ReadHistoryData
|
||||||
* 功能描述: 读取历史数据
|
* 功能描述: 读取历史数据
|
||||||
* 参 数: rData,输入数据
|
* 参 数: rData,输入数据
|
||||||
rLen, 输入数据长度
|
rLen, 输入数据长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int ReadHistoryData(LogHeader LogH, uint8_t **Data, int Idx)
|
int ReadHistoryData(LogHeader LogH, uint8_t **Data, int Idx)
|
||||||
{
|
{
|
||||||
@@ -154,11 +154,11 @@ int ReadHistoryData(LogHeader LogH, uint8_t **Data, int Idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: NetCommOrgData
|
* 函数名称: NetCommOrgData
|
||||||
* 功能描述: 上报数据组织
|
* 功能描述: 上报数据组织
|
||||||
* 参 数: MegData, 消息队列数据
|
* 参 数: MegData, 消息队列数据
|
||||||
OutData, 输出数据出口
|
OutData, 输出数据出口
|
||||||
* 返 回 值: 数据长度
|
* 返 回 值: 数据长度
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int NetCommOrgData(GateWayPara GateWay, uint8_t *MegData, uint8_t *OutData)
|
int NetCommOrgData(GateWayPara GateWay, uint8_t *MegData, uint8_t *OutData)
|
||||||
{
|
{
|
||||||
@@ -197,11 +197,11 @@ int NetCommOrgData(GateWayPara GateWay, uint8_t *MegData, uint8_t *OutData)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CheckCommUnitReg
|
* 函数名称: CheckCommUnitReg
|
||||||
* 功能描述: 检查设备是否注册
|
* 功能描述: 检查设备是否注册
|
||||||
* 参 数: GateWay,网关句柄
|
* 参 数: GateWay,网关句柄
|
||||||
CommUnitMac, 待检查的设备MAC
|
CommUnitMac, 待检查的设备MAC
|
||||||
* 返 回 值: 已注册返回非0,没注册返回-1
|
* 返 回 值: 已注册返回非0,没注册返回-1
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int CheckCommUnitReg(GateWayPara GateWay, uint8_t *CommUnitMac)
|
int CheckCommUnitReg(GateWayPara GateWay, uint8_t *CommUnitMac)
|
||||||
{
|
{
|
||||||
@@ -214,15 +214,15 @@ int CheckCommUnitReg(GateWayPara GateWay, uint8_t *CommUnitMac)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CheckCommUnitExcl
|
* 函数名称: CheckCommUnitExcl
|
||||||
* 功能描述: 检查设备是否排除
|
* 功能描述: 检查设备是否排除
|
||||||
* 参 数: GateWay,网关句柄
|
* 参 数: GateWay,网关句柄
|
||||||
CommUnitMac, 待检查的设备MAC
|
CommUnitMac, 待检查的设备MAC
|
||||||
* 返 回 值: 已排除返回非0,没排除返回-1
|
* 返 回 值: 已排除返回非0,没排除返回-1
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int CheckCommUnitExcl(GateWayPara GateWay, uint8_t *CommUnitMac)
|
int CheckCommUnitExcl(GateWayPara GateWay, uint8_t *CommUnitMac)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {//判断是否被排除
|
for(int i = 0; i < COMMUNIT_NUM_MAX; i++) {//判断是否被排除
|
||||||
if(memcmp(GateWay->ConfigPara.ExclCommUnit[i].ExclMac, CommUnitMac, 6) == 0) {
|
if(memcmp(GateWay->ConfigPara.ExclCommUnit[i].ExclMac, CommUnitMac, 6) == 0) {
|
||||||
if(GateWay->ConfigPara.ExclCommUnit[i].ExclFlag == true)
|
if(GateWay->ConfigPara.ExclCommUnit[i].ExclFlag == true)
|
||||||
return i;
|
return i;
|
||||||
@@ -231,14 +231,14 @@ int CheckCommUnitExcl(GateWayPara GateWay, uint8_t *CommUnitMac)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CommUnitSendCmd
|
* 函数名称: CommUnitSendCmd
|
||||||
* 功能描述: 网关下发通讯单元指令函数
|
* 功能描述: 网关下发通讯单元指令函数
|
||||||
* 参 数: GateWay, 网关句柄
|
* 参 数: GateWay, 网关句柄
|
||||||
CommUnitMac,通讯单元MAC地址
|
CommUnitMac,通讯单元MAC地址
|
||||||
Cmd, 命令字
|
Cmd, 命令字
|
||||||
Payload, 下发数据
|
Payload, 下发数据
|
||||||
PayloadLen, 下发数据长度
|
PayloadLen, 下发数据长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void CommUnitCmdSend(GateWayPara GateWay, uint8_t *CommUnitMac, CommUnitCmd_m Cmd, uint8_t *Payload, uint16_t PayloadLen, SendData Send)
|
void CommUnitCmdSend(GateWayPara GateWay, uint8_t *CommUnitMac, CommUnitCmd_m Cmd, uint8_t *Payload, uint16_t PayloadLen, SendData Send)
|
||||||
{
|
{
|
||||||
@@ -279,12 +279,12 @@ void CommUnitCmdSend(GateWayPara GateWay, uint8_t *CommUnitMac, CommUnitCmd_m Cm
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CommUintOrgData
|
* 函数名称: CommUintOrgData
|
||||||
* 功能描述: 上传传感器数据函数
|
* 功能描述: 上传传感器数据函数
|
||||||
* 参 数: CUPara, 通讯单元参数
|
* 参 数: CUPara, 通讯单元参数
|
||||||
CUData, 通讯单元数据
|
CUData, 通讯单元数据
|
||||||
sData, 数据入口
|
sData, 数据入口
|
||||||
* 返 回 值: 数据长度
|
* 返 回 值: 数据长度
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int CommUintOrgData(GateWayPara GateWay, CommUnitPara CUPara, CommUnitData CUData, uint8_t *sData)
|
int CommUintOrgData(GateWayPara GateWay, CommUnitPara CUPara, CommUnitData CUData, uint8_t *sData)
|
||||||
{
|
{
|
||||||
@@ -468,11 +468,11 @@ void DebugDisplaySensorData(int SensorIdx, uint16_t SensorType, uint8_t *SensorD
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CommUnitAnalyze
|
* 函数名称: CommUnitAnalyze
|
||||||
* 功能描述: 通讯单元数据解析,使用于LORA和RS485通讯
|
* 功能描述: 通讯单元数据解析,使用于LORA和RS485通讯
|
||||||
* 参 数: rData,输入数据
|
* 参 数: rData,输入数据
|
||||||
rLen, 输入数据长度
|
rLen, 输入数据长度
|
||||||
* 返 回 值: 返回接收到的通讯单元序号,错误返回-1
|
* 返 回 值: 返回接收到的通讯单元序号,错误返回-1
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData Response)
|
int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData Response)
|
||||||
{
|
{
|
||||||
@@ -500,12 +500,12 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
if((CUHeader->Cmd != COMM_UNIT_CMD_REG && CUHeader->Cmd != COMM_UNIT_CMD_GET_SIGNAL) && (memcmp(GateWay->ConfigPara.GwMac, CUHeader->GWMac, 6) != 0))
|
if((CUHeader->Cmd != COMM_UNIT_CMD_REG && CUHeader->Cmd != COMM_UNIT_CMD_GET_SIGNAL) && (memcmp(GateWay->ConfigPara.GwMac, CUHeader->GWMac, 6) != 0))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
CommUnitIdx = CheckCommUnitReg(GateWay, CUHeader->DevMac);//判断是否是已注册的设备
|
CommUnitIdx = CheckCommUnitReg(GateWay, CUHeader->DevMac);//判断是否是已注册的设备
|
||||||
if(CommUnitIdx < 0) {
|
if(CommUnitIdx < 0) {
|
||||||
if(CUHeader->Cmd != COMM_UNIT_CMD_REG && CUHeader->Cmd != COMM_UNIT_CMD_GET_SIGNAL){//判断是否是注册请求
|
if(CUHeader->Cmd != COMM_UNIT_CMD_REG && CUHeader->Cmd != COMM_UNIT_CMD_GET_SIGNAL){//判断是否是注册请求
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ExclCommUnit = CheckCommUnitExcl(GateWay, CUHeader->DevMac);//判断是否是被排除的设备
|
ExclCommUnit = CheckCommUnitExcl(GateWay, CUHeader->DevMac);//判断是否是被排除的设备
|
||||||
if(ExclCommUnit > -1) {
|
if(ExclCommUnit > -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -520,7 +520,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
// if(CUHeader->PayloadLen < 2)
|
// if(CUHeader->PayloadLen < 2)
|
||||||
// return -1;
|
// return -1;
|
||||||
|
|
||||||
if(CommUnitIdx >= 0) { //设备存在
|
if(CommUnitIdx >= 0) { //设备存在
|
||||||
MAIN_DBG_LOG("\r\nCommUnit has already been registered! Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
MAIN_DBG_LOG("\r\nCommUnit has already been registered! Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
||||||
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5]);
|
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5]);
|
||||||
uint8_t ret = 1;
|
uint8_t ret = 1;
|
||||||
@@ -544,7 +544,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
GateWay->ConfigPara.CommUnitArray[i].ContLaser = false;
|
GateWay->ConfigPara.CommUnitArray[i].ContLaser = false;
|
||||||
GateWay->ConfigPara.CommUnitArray[i].LaserOnOff = false;
|
GateWay->ConfigPara.CommUnitArray[i].LaserOnOff = false;
|
||||||
|
|
||||||
GateWay->ConfigPara.CommUnitArray[i].CUType = DEV_TYPE_EXT_COMMUNIT;//外置通讯单元
|
GateWay->ConfigPara.CommUnitArray[i].CUType = DEV_TYPE_EXT_COMMUNIT;//外置通讯单元
|
||||||
MAIN_DBG_LOG("\r\nCommUnit register succeed!\r\n");
|
MAIN_DBG_LOG("\r\nCommUnit register succeed!\r\n");
|
||||||
|
|
||||||
memcpy(GateWay->ConfigPara.CommUnitArray[i].MasterMac, &PayLoad[1], 6);
|
memcpy(GateWay->ConfigPara.CommUnitArray[i].MasterMac, &PayLoad[1], 6);
|
||||||
@@ -570,7 +570,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
uint8_t ret = 1;
|
uint8_t ret = 1;
|
||||||
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_REG, &ret, 1, Response);
|
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_REG, &ret, 1, Response);
|
||||||
|
|
||||||
if(GateWay->SvrRegFlag) { //网关已注册,向服务发送新设备添加指令
|
if(GateWay->SvrRegFlag) { //网关已注册,向服务发送新设备添加指令
|
||||||
PayLoadLen = (GateWay->ConfigPara.CommUnitArray[i].SensorN * 6) + 2;
|
PayLoadLen = (GateWay->ConfigPara.CommUnitArray[i].SensorN * 6) + 2;
|
||||||
MegData = rt_malloc(PayLoadLen + 3);
|
MegData = rt_malloc(PayLoadLen + 3);
|
||||||
MegData[0] = PayLoadLen & 0x00ff;;
|
MegData[0] = PayLoadLen & 0x00ff;;
|
||||||
@@ -578,9 +578,9 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
MegData[2] = NET_COMM_CMD_ADD_UNIT;
|
MegData[2] = NET_COMM_CMD_ADD_UNIT;
|
||||||
MegData[3] = (GateWay->ConfigPara.CommUnitArray[i].SensorN) & 0x00ff;;
|
MegData[3] = (GateWay->ConfigPara.CommUnitArray[i].SensorN) & 0x00ff;;
|
||||||
MegData[4] = (GateWay->ConfigPara.CommUnitArray[i].SensorN >> 8) & 0x00ff;
|
MegData[4] = (GateWay->ConfigPara.CommUnitArray[i].SensorN >> 8) & 0x00ff;
|
||||||
for(uint8_t i = 0; i < GateWay->ConfigPara.CommUnitArray[i].SensorN; i++)
|
for(uint8_t k = 0; k < GateWay->ConfigPara.CommUnitArray[i].SensorN; k++)
|
||||||
{
|
{
|
||||||
memcpy(&MegData[5], GateWay->ConfigPara.CommUnitArray[i].Mac[i], 6);
|
memcpy(&MegData[5], GateWay->ConfigPara.CommUnitArray[i].Mac[k], 6);
|
||||||
}
|
}
|
||||||
CatOneEthSendQueue(MegData, PayLoadLen+5);
|
CatOneEthSendQueue(MegData, PayLoadLen+5);
|
||||||
rt_free(MegData);
|
rt_free(MegData);
|
||||||
@@ -618,7 +618,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
||||||
{//打开激光
|
{//打开激光
|
||||||
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
||||||
}
|
}
|
||||||
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
||||||
@@ -653,7 +653,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
// int16_t Rssi;
|
// int16_t Rssi;
|
||||||
// int8_t Snr;
|
// int8_t Snr;
|
||||||
// SX1276LoCalcRssiSnr(&Rssi, &Snr);
|
// SX1276LoCalcRssiSnr(&Rssi, &Snr);
|
||||||
MAIN_DBG_LOG("\r\nCUMac:%02X-%02X-%02X-%02X-%02X-%02X, Bat: %d%, SN: %d,Rssi:%d, Snr:%d\r\n",
|
MAIN_DBG_LOG("\r\nCUMac:%02X-%02X-%02X-%02X-%02X-%02X, Bat: %d%, SN: %d, Rssi:%d, Snr:%d\r\n",
|
||||||
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5],
|
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5],
|
||||||
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].BatLevel,
|
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].BatLevel,
|
||||||
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorN,
|
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorN,
|
||||||
@@ -661,7 +661,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].Nsr);
|
GateWay->ConfigPara.CommUnitArray[CommUnitIdx].Nsr);
|
||||||
for(int i = 0; i < GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorN; i++) {
|
for(int i = 0; i < GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorN; i++) {
|
||||||
memcpy(GateWay->CUDataArray[CommUnitIdx].Data[i], &PayLoad[0], SensorTypeDataLen[GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorType[i]]);
|
memcpy(GateWay->CUDataArray[CommUnitIdx].Data[i], &PayLoad[0], SensorTypeDataLen[GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorType[i]]);
|
||||||
//显示传感器数据
|
//显示传感器数据
|
||||||
DebugDisplaySensorData(i, GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorType[i], GateWay->CUDataArray[CommUnitIdx].Data[i]);
|
DebugDisplaySensorData(i, GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorType[i], GateWay->CUDataArray[CommUnitIdx].Data[i]);
|
||||||
len += SensorTypeDataLen[GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorType[i]];
|
len += SensorTypeDataLen[GateWay->ConfigPara.CommUnitArray[CommUnitIdx].SensorType[i]];
|
||||||
}
|
}
|
||||||
@@ -701,7 +701,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
||||||
{//打开激光
|
{//打开激光
|
||||||
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
||||||
}
|
}
|
||||||
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
||||||
@@ -753,7 +753,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
||||||
{//打开激光
|
{//打开激光
|
||||||
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
||||||
}
|
}
|
||||||
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
||||||
@@ -773,7 +773,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
|
|
||||||
case COMM_UNIT_CMD_CONT_LASER:{
|
case COMM_UNIT_CMD_CONT_LASER:{
|
||||||
if(PayLoad[0] == 0) {
|
if(PayLoad[0] == 0) {
|
||||||
//应答服务器
|
//应答服务器
|
||||||
MegData = rt_malloc(10);
|
MegData = rt_malloc(10);
|
||||||
MegData[0] = 7;
|
MegData[0] = 7;
|
||||||
MegData[1] = 0;
|
MegData[1] = 0;
|
||||||
@@ -792,7 +792,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5]);
|
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5]);
|
||||||
}
|
}
|
||||||
else if(PayLoad[0] == 1){
|
else if(PayLoad[0] == 1){
|
||||||
//应答服务器
|
//应答服务器
|
||||||
MegData = rt_malloc(10);
|
MegData = rt_malloc(10);
|
||||||
MegData[0] = 7;
|
MegData[0] = 7;
|
||||||
MegData[1] = 0;
|
MegData[1] = 0;
|
||||||
@@ -825,7 +825,7 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
else if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].ContLaser == true)
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
if(GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff == true)
|
||||||
{//打开激光
|
{//打开激光
|
||||||
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[CommUnitIdx].LaserOnOff, 1, Response);
|
||||||
}
|
}
|
||||||
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
MAIN_DBG_LOG("Issue laser control commands.\r\n");
|
||||||
@@ -863,11 +863,11 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: Cat1RevCallBack
|
* 函数名称: Cat1RevCallBack
|
||||||
* 功能描述: 4G接收回调函数
|
* 功能描述: 4G接收回调函数
|
||||||
* 参 数: rData,数据输入接口
|
* 参 数: rData,数据输入接口
|
||||||
rLen, 数据长度输入接口
|
rLen, 数据长度输入接口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
||||||
{
|
{
|
||||||
@@ -909,7 +909,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
|
|
||||||
memcpy(&CommUintMac[0], Data, 6);
|
memcpy(&CommUintMac[0], Data, 6);
|
||||||
|
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
||||||
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, (uint8_t *)&NCHeader->Timestamp, 4, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, (uint8_t *)&NCHeader->Timestamp, 4, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
||||||
else
|
else
|
||||||
@@ -921,18 +921,18 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
else
|
else
|
||||||
RS485CmdSend(GateWay, 2, &SCPara);
|
RS485CmdSend(GateWay, 2, &SCPara);
|
||||||
}
|
}
|
||||||
for(int i = 0; i < COMMUNIT_NUM_MAX; i++)//参数遍历
|
for(int i = 0; i < COMMUNIT_NUM_MAX; i++)//参数遍历
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true)
|
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true)
|
||||||
GateWay->ConfigPara.CommUnitArray[i].TimeSyncFlag = true;//校时置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[i].TimeSyncFlag = true;//校时置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
||||||
}
|
}
|
||||||
//校准其他通讯网关
|
//校准其他通讯网关
|
||||||
//CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, &rData[14], 4, Sx1276LoRaSendBuffer);
|
//CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, &rData[14], 4, Sx1276LoRaSendBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(NCHeader->Cmd) {
|
switch(NCHeader->Cmd) {
|
||||||
case NET_COMM_CMD_REG:{
|
case NET_COMM_CMD_REG:{
|
||||||
if(*Data == 1) { //注册成功
|
if(*Data == 1) { //注册成功
|
||||||
GateWay->SvrRegFlag = true;
|
GateWay->SvrRegFlag = true;
|
||||||
//memcpy(GateWay->SvrMac, NCHeader->SvrMac, 6);
|
//memcpy(GateWay->SvrMac, NCHeader->SvrMac, 6);
|
||||||
memset(GateWay->SvrMac, 0x00, 6);
|
memset(GateWay->SvrMac, 0x00, 6);
|
||||||
@@ -947,7 +947,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
break;}
|
break;}
|
||||||
|
|
||||||
case NET_COMM_CMD_CAIL:{
|
case NET_COMM_CMD_CAIL:{
|
||||||
//应答服务器
|
//应答服务器
|
||||||
MegData = rt_malloc(4);
|
MegData = rt_malloc(4);
|
||||||
MegData[0] = 1;
|
MegData[0] = 1;
|
||||||
MegData[1] = 0;
|
MegData[1] = 0;
|
||||||
@@ -956,16 +956,16 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
sLen = 4;
|
sLen = 4;
|
||||||
CatOneEthSendQueue(MegData, sLen);
|
CatOneEthSendQueue(MegData, sLen);
|
||||||
rt_free(MegData);
|
rt_free(MegData);
|
||||||
//开始校准
|
//开始校准
|
||||||
memcpy(&CommUintMac[0], Data, 6);
|
memcpy(&CommUintMac[0], Data, 6);
|
||||||
if(memcmp(CommUintMac, Data, 6) == 0) { //校准所有传感器
|
if(memcmp(CommUintMac, Data, 6) == 0) { //校准所有传感器
|
||||||
SensorCommPara_t SCPara;
|
SensorCommPara_t SCPara;
|
||||||
SCPara.Cmd = RS485_SENSOR_CMD_CAIL;
|
SCPara.Cmd = RS485_SENSOR_CMD_CAIL;
|
||||||
SCPara.SensorAddr = 0x00;
|
SCPara.SensorAddr = 0x00;
|
||||||
//SCPara.SensorType = 0x00;
|
//SCPara.SensorType = 0x00;
|
||||||
SCPara.CmdParaLen = 0;
|
SCPara.CmdParaLen = 0;
|
||||||
SCPara.CmdPara = NULL;
|
SCPara.CmdPara = NULL;
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
||||||
RS485CmdSend(GateWay, 1, &SCPara);
|
RS485CmdSend(GateWay, 1, &SCPara);
|
||||||
else
|
else
|
||||||
@@ -978,12 +978,12 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < COMMUNIT_NUM_MAX; i++)//参数遍历
|
for(int i = 0; i < COMMUNIT_NUM_MAX; i++)//参数遍历
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true)
|
if(GateWay->ConfigPara.CommUnitArray[i].RegFlag == true)
|
||||||
GateWay->ConfigPara.CommUnitArray[i].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[i].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
||||||
}
|
}
|
||||||
//校准其他通讯网关
|
//校准其他通讯网关
|
||||||
//CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, Sx1276LoRaSendBuffer);
|
//CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, Sx1276LoRaSendBuffer);
|
||||||
MAIN_DBG_LOG("Calibrate all device.\r\n");
|
MAIN_DBG_LOG("Calibrate all device.\r\n");
|
||||||
}
|
}
|
||||||
@@ -993,15 +993,15 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
return -1;
|
return -1;
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].CUType != DEV_TYPE_EXT_COMMUNIT)
|
if(GateWay->ConfigPara.CommUnitArray[ret].CUType != DEV_TYPE_EXT_COMMUNIT)
|
||||||
return -1;
|
return -1;
|
||||||
if((GateWay->ConfigPara.CommUnitArray[ret].Mac[0][3] / 0x80) != 1) {//判断是否为通讯单元(主设备)
|
if((GateWay->ConfigPara.CommUnitArray[ret].Mac[0][3] / 0x80) != 1) {//判断是否为通讯单元(主设备)
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 1)//判断通讯类型
|
if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 1)//判断通讯类型
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[ret].CailFlag = true;//校准置位,等待下次此MAC主设备上传数据时下发校准指令(低功耗)
|
||||||
//CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, Sx1276LoRaSendBuffer);//查询模式
|
//CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, Sx1276LoRaSendBuffer);//查询模式
|
||||||
MAIN_DBG_LOG("Calibrate Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
MAIN_DBG_LOG("Calibrate Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
||||||
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
||||||
}
|
}
|
||||||
else if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 2)//判断通讯类型
|
else if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 2)//判断通讯类型
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable)
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable)
|
||||||
{
|
{
|
||||||
@@ -1024,7 +1024,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
MegData = rt_malloc(512);
|
MegData = rt_malloc(512);
|
||||||
uint16_t SensorCnt = 0;
|
uint16_t SensorCnt = 0;
|
||||||
sLen = 5;
|
sLen = 5;
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) {
|
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true) {
|
||||||
SensorCnt++;
|
SensorCnt++;
|
||||||
memcpy(&MegData[sLen], GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0], 6);
|
memcpy(&MegData[sLen], GateWay->ConfigPara.Rs485Ch1.CUPara.Para.Mac[0], 6);
|
||||||
@@ -1055,9 +1055,9 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
MegData[sLen++] = (GateWay->HistoryNum >> 8) & 0x00ff;
|
MegData[sLen++] = (GateWay->HistoryNum >> 8) & 0x00ff;
|
||||||
MegData[sLen++] = (GateWay->HistoryNum >> 16) & 0x00ff;
|
MegData[sLen++] = (GateWay->HistoryNum >> 16) & 0x00ff;
|
||||||
MegData[sLen++] = (GateWay->HistoryNum >> 24) & 0x00ff;
|
MegData[sLen++] = (GateWay->HistoryNum >> 24) & 0x00ff;
|
||||||
MegData[0] = (sLen - 3) & 0x00ff;//数据体长度
|
MegData[0] = (sLen - 3) & 0x00ff;//数据体长度
|
||||||
MegData[1] = ((sLen - 3) >> 8) & 0x00ff;//数据体长度
|
MegData[1] = ((sLen - 3) >> 8) & 0x00ff;//数据体长度
|
||||||
MegData[2] = NET_COMM_CMD_READ_GW_INFO;//指令
|
MegData[2] = NET_COMM_CMD_READ_GW_INFO;//指令
|
||||||
MegData[3] = SensorCnt&0xFF;
|
MegData[3] = SensorCnt&0xFF;
|
||||||
MegData[4] = (SensorCnt >> 8)&0xFF;
|
MegData[4] = (SensorCnt >> 8)&0xFF;
|
||||||
CatOneEthSendQueue(MegData, sLen);
|
CatOneEthSendQueue(MegData, sLen);
|
||||||
@@ -1066,7 +1066,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case NET_COMM_CMD_GW_PARA_CONFIG:{
|
case NET_COMM_CMD_GW_PARA_CONFIG:{
|
||||||
//应答服务器
|
//应答服务器
|
||||||
MegData = rt_malloc(4);
|
MegData = rt_malloc(4);
|
||||||
MegData[0] = 1;
|
MegData[0] = 1;
|
||||||
MegData[1] = 0;
|
MegData[1] = 0;
|
||||||
@@ -1116,7 +1116,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case NET_COMM_CMD_ADD_UNIT:{
|
case NET_COMM_CMD_ADD_UNIT:{
|
||||||
if(*Data == 1) { //录入成功
|
if(*Data == 1) { //录入成功
|
||||||
MAIN_DBG_LOG("Adding CommUnit succeeded...\r\n");
|
MAIN_DBG_LOG("Adding CommUnit succeeded...\r\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1125,7 +1125,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
break;}
|
break;}
|
||||||
|
|
||||||
case NET_COMM_CMD_LP_DEV_CONFIG: {
|
case NET_COMM_CMD_LP_DEV_CONFIG: {
|
||||||
//开始配置
|
//开始配置
|
||||||
SvrDownLPDevConfigPara_t *LPDevConfig;
|
SvrDownLPDevConfigPara_t *LPDevConfig;
|
||||||
LPDevConfig = (SvrDownLPDevConfigPara_t *)Data;
|
LPDevConfig = (SvrDownLPDevConfigPara_t *)Data;
|
||||||
int ret = memcmp(CommUintMac, LPDevConfig->CommDevAddr, 6);
|
int ret = memcmp(CommUintMac, LPDevConfig->CommDevAddr, 6);
|
||||||
@@ -1156,7 +1156,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
MAIN_DBG_LOG("Main equipment parameter configuration. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
MAIN_DBG_LOG("Main equipment parameter configuration. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
||||||
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
||||||
}
|
}
|
||||||
//应答服务器
|
//应答服务器
|
||||||
MegData = rt_malloc(4);
|
MegData = rt_malloc(4);
|
||||||
MegData[0] = 1;
|
MegData[0] = 1;
|
||||||
MegData[1] = 0;
|
MegData[1] = 0;
|
||||||
@@ -1174,32 +1174,32 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
return -1;
|
return -1;
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].CUType != DEV_TYPE_EXT_COMMUNIT)
|
if(GateWay->ConfigPara.CommUnitArray[ret].CUType != DEV_TYPE_EXT_COMMUNIT)
|
||||||
return -1;
|
return -1;
|
||||||
if((GateWay->ConfigPara.CommUnitArray[ret].Mac[0][3] / 0x80) != 1) {//判断是否为通讯单元(主设备)
|
if((GateWay->ConfigPara.CommUnitArray[ret].Mac[0][3] / 0x80) != 1) {//判断是否为通讯单元(主设备)
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 1)//判断通讯类型
|
if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 1)//判断通讯类型
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = Data[6];//服务器下发打开或者关闭激光
|
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = Data[6];//服务器下发打开或者关闭激光
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == true)
|
if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == true)
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制激光,等待下次此MAC主设备上传数据时下发打开激光指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制激光,等待下次此MAC主设备上传数据时下发打开激光指令(低功耗)
|
||||||
MAIN_DBG_LOG("Waiting for the laser response. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
MAIN_DBG_LOG("Waiting for the laser response. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
||||||
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
||||||
}
|
}
|
||||||
else if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == false)
|
else if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == false)
|
||||||
{//直接发送
|
{//直接发送
|
||||||
MAIN_DBG_LOG("Waiting for the laser response. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
MAIN_DBG_LOG("Waiting for the laser response. Mac:%02X-%02X-%02X-%02X-%02X-%02X\r\n",
|
||||||
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
CommUintMac[0], CommUintMac[1], CommUintMac[2], CommUintMac[3], CommUintMac[4], CommUintMac[5]);
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = false;
|
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = false;
|
||||||
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff, 1, Sx1276LoRaSendBuffer);//查询模式
|
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CONT_LASER, (uint8_t *)&GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff, 1, Sx1276LoRaSendBuffer);//查询模式
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 2)//判断通讯类型
|
else if(GateWay->ConfigPara.CommUnitArray[ret].Mac[0][2] == 2)//判断通讯类型
|
||||||
{
|
{
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable)
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true && !GateWay->ConfigPara.Rs485Ch1.CommUnitEnable)
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = Data[6];//服务器下发打开或者关闭激光
|
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = Data[6];//服务器下发打开或者关闭激光
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == true)
|
if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == true)
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制激光,等待下次此MAC主设备上传数据时下发打开激光指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制激光,等待下次此MAC主设备上传数据时下发打开激光指令(低功耗)
|
||||||
}
|
}
|
||||||
else if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == false)
|
else if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == false)
|
||||||
{
|
{
|
||||||
@@ -1208,10 +1208,10 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
}
|
}
|
||||||
else if(GateWay->ConfigPara.Rs485Ch2.Enable == true && !GateWay->ConfigPara.Rs485Ch2.CommUnitEnable)
|
else if(GateWay->ConfigPara.Rs485Ch2.Enable == true && !GateWay->ConfigPara.Rs485Ch2.CommUnitEnable)
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = Data[6];//服务器下发打开或者关闭激光
|
GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff = Data[6];//服务器下发打开或者关闭激光
|
||||||
if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == true)
|
if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == true)
|
||||||
{
|
{
|
||||||
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制激光,等待下次此MAC主设备上传数据时下发打开激光指令(低功耗)
|
GateWay->ConfigPara.CommUnitArray[ret].ContLaser = true;//控制激光,等待下次此MAC主设备上传数据时下发打开激光指令(低功耗)
|
||||||
}
|
}
|
||||||
else if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == false)
|
else if(GateWay->ConfigPara.CommUnitArray[ret].LaserOnOff == false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ SensorCommPara_t SComm2Para;
|
|||||||
const uint8_t RS485SensorCmdPayLoadLen[RS485_SENSOR_CMD_END] = {0, 0, 0, 1, 0};
|
const uint8_t RS485SensorCmdPayLoadLen[RS485_SENSOR_CMD_END] = {0, 0, 0, 1, 0};
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: SavSensorData
|
* 函数名称: SavSensorData
|
||||||
* 功能描述: 记录传感器数据
|
* 功能描述: 记录传感器数据
|
||||||
* 参 数: SensorIdx, 传感器序号
|
* 参 数: SensorIdx, 传感器序号
|
||||||
Para,传感器结构指针
|
Para,传感器结构指针
|
||||||
Data, 传感器数据
|
Data, 传感器数据
|
||||||
Len, 传感器数据长度
|
Len, 传感器数据长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void SavSensorData(uint8_t SensorIdx, CommUnitData CUData, uint8_t *Data, uint8_t Len)
|
static void SavSensorData(uint8_t SensorIdx, CommUnitData CUData, uint8_t *Data, uint8_t Len)
|
||||||
{
|
{
|
||||||
@@ -36,13 +36,13 @@ static void SavSensorData(uint8_t SensorIdx, CommUnitData CUData, uint8_t *Data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485Analyze
|
* 函数名称: RS485Analyze
|
||||||
* 功能描述: 485数据解析
|
* 功能描述: 485数据解析
|
||||||
* 参 数: SCPara, 传感器发送参数
|
* 参 数: SCPara, 传感器发送参数
|
||||||
Para, 传感器结构指针
|
Para, 传感器结构指针
|
||||||
rData, 传感器数据入口
|
rData, 传感器数据入口
|
||||||
rLen, 传感器数据长度
|
rLen, 传感器数据长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void RS485Analyze(GateWayPara GateWay, SensorCommPara SCPara, CommUnit Para, uint8_t *rData, uint8_t rLen)
|
void RS485Analyze(GateWayPara GateWay, SensorCommPara SCPara, CommUnit Para, uint8_t *rData, uint8_t rLen)
|
||||||
{
|
{
|
||||||
@@ -121,13 +121,13 @@ static void update_on_start(uint8_t* frame, int len, uint8_t* pload, int size)
|
|||||||
cfg.PackageNum = pReq->PackageNum;
|
cfg.PackageNum = pReq->PackageNum;
|
||||||
cfg.AppSize = pReq->AppSize;
|
cfg.AppSize = pReq->AppSize;
|
||||||
/**
|
/**
|
||||||
操作FALSH ,写升级参数
|
操作FALSH ,写升级参数
|
||||||
**/
|
**/
|
||||||
dev_boot_write_param(cfg);
|
dev_boot_write_param(cfg);
|
||||||
|
|
||||||
update_send_cmd(0x01, 1, pReq->PackageNum);
|
update_send_cmd(0x01, 1, pReq->PackageNum);
|
||||||
|
|
||||||
//重启进入BOOT
|
//重启进入BOOT
|
||||||
NVIC_SystemReset();
|
NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,10 +179,10 @@ static int update_process(void* frame, int len)
|
|||||||
|
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485SensorCmdSend
|
* 函数名称: RS485SensorCmdSend
|
||||||
* 功能描述: 下发传感器指令函数
|
* 功能描述: 下发传感器指令函数
|
||||||
* 参 数: Para,通讯参数入口
|
* 参 数: Para,通讯参数入口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static void RS485SensorCmdSend(GateWayPara GateWay, SensorCommPara SensorComm)
|
static void RS485SensorCmdSend(GateWayPara GateWay, SensorCommPara SensorComm)
|
||||||
{
|
{
|
||||||
@@ -217,17 +217,17 @@ static void RS485SensorCmdSend(GateWayPara GateWay, SensorCommPara SensorComm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485SensorCmdSend
|
* 函数名称: RS485SensorCmdSend
|
||||||
* 功能描述: 下发传感器指令函数
|
* 功能描述: 下发传感器指令函数
|
||||||
* 参 数: CommUintAddr, 通讯单元地址
|
* 参 数: CommUintAddr, 通讯单元地址
|
||||||
Para,通讯参数入口
|
Para,通讯参数入口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void RS485CmdSend(GateWayPara GateWay, uint8_t CommUintAddr, SensorCommPara SensorComm)
|
void RS485CmdSend(GateWayPara GateWay, uint8_t CommUintAddr, SensorCommPara SensorComm)
|
||||||
{
|
{
|
||||||
SensorCommPara SC;
|
SensorCommPara SC;
|
||||||
|
|
||||||
if(CommUintAddr)
|
if(CommUintAddr == 1)
|
||||||
SC = &SComm1Para;
|
SC = &SComm1Para;
|
||||||
else
|
else
|
||||||
SC = &SComm2Para;
|
SC = &SComm2Para;
|
||||||
@@ -243,12 +243,12 @@ void RS485CmdSend(GateWayPara GateWay, uint8_t CommUintAddr, SensorCommPara Sens
|
|||||||
|
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485LoopHandler
|
* 函数名称: RS485LoopHandler
|
||||||
* 功能描述: RS485循环处理函数
|
* 功能描述: RS485循环处理函数
|
||||||
* 参 数: GateWay, 网关参数句柄
|
* 参 数: GateWay, 网关参数句柄
|
||||||
RS485Ch, RS485通道句柄
|
RS485Ch, RS485通道句柄
|
||||||
SCPara, RS485通讯句柄
|
SCPara, RS485通讯句柄
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static uint8_t CommUintData[512];
|
static uint8_t CommUintData[512];
|
||||||
int test = 0;
|
int test = 0;
|
||||||
@@ -266,8 +266,8 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(RS485Ch->CommUnitEnable == true) { //使用内置通讯单元
|
if(RS485Ch->CommUnitEnable == true) { //使用内置通讯单元
|
||||||
if(RS485Ch->QuerySensorFlag == true) { //开机查找传感器
|
if(RS485Ch->QuerySensorFlag == true) { //开机查找传感器
|
||||||
if(SCPara->SensorCnt < SENSOR_NUM_MAX) {
|
if(SCPara->SensorCnt < SENSOR_NUM_MAX) {
|
||||||
rt_thread_delay(50);
|
rt_thread_delay(50);
|
||||||
SCPara->Cmd = RS485_SENSOR_CMD_QUERY;
|
SCPara->Cmd = RS485_SENSOR_CMD_QUERY;
|
||||||
@@ -328,7 +328,7 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { //读取外置通讯单元
|
else { //读取外置通讯单元
|
||||||
if(SCPara->RS485CommUnitReadTimeDelay >= (GateWay->ConfigPara.CommUnitReadInterval * 5) && SCPara->SendFlag == false) {
|
if(SCPara->RS485CommUnitReadTimeDelay >= (GateWay->ConfigPara.CommUnitReadInterval * 5) && SCPara->SendFlag == false) {
|
||||||
if(SCPara->SendUnitCommIdx < COMMUNIT_NUM_MAX) {
|
if(SCPara->SendUnitCommIdx < COMMUNIT_NUM_MAX) {
|
||||||
if(GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].RegFlag &&
|
if(GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].RegFlag &&
|
||||||
@@ -365,10 +365,10 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
RxLenTemp = SCPara->RS485RxLen;
|
RxLenTemp = SCPara->RS485RxLen;
|
||||||
// memset(SCPara->RS485RxBuff, 0x00, RS485_RX_BUFF_LEN_MAX);
|
// memset(SCPara->RS485RxBuff, 0x00, RS485_RX_BUFF_LEN_MAX);
|
||||||
SCPara->RS485RxLen = 0;
|
SCPara->RS485RxLen = 0;
|
||||||
if(RxBuffTemp[0] == 0x7A && RS485Ch->UpgradeEnable == true) { //升级
|
if(RxBuffTemp[0] == 0x7A && RS485Ch->UpgradeEnable == true) { //升级
|
||||||
update_process(RxBuffTemp,RxLenTemp);
|
update_process(RxBuffTemp,RxLenTemp);
|
||||||
}
|
}
|
||||||
else if(RxBuffTemp[0] == 0x7A && RS485Ch->CommUnitEnable == true) { //内置通讯单元数据解析
|
else if(RxBuffTemp[0] == 0x7A && RS485Ch->CommUnitEnable == true) { //内置通讯单元数据解析
|
||||||
if(SCPara->SendFlag == false) {
|
if(SCPara->SendFlag == false) {
|
||||||
SCPara->RS485RxLen = 0;
|
SCPara->RS485RxLen = 0;
|
||||||
return;
|
return;
|
||||||
@@ -376,12 +376,12 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
RS485Analyze(GateWay, SCPara, &RS485Ch->CUData, RxBuffTemp, RxLenTemp);
|
RS485Analyze(GateWay, SCPara, &RS485Ch->CUData, RxBuffTemp, RxLenTemp);
|
||||||
//rt_mutex_release(GateWay->UartRevMutex);
|
//rt_mutex_release(GateWay->UartRevMutex);
|
||||||
}
|
}
|
||||||
else if(RxBuffTemp[0] == 0x7B && RS485Ch->CommUnitEnable == false){ //读取外部通讯单元数据解析
|
else if(RxBuffTemp[0] == 0x7B && RS485Ch->CommUnitEnable == false){ //读取外部通讯单元数据解析
|
||||||
if(SCPara == &SComm1Para)
|
if(SCPara == &SComm1Para)
|
||||||
ret = GateWay->CommUnitRevCallBack(GateWay, RxBuffTemp, RxLenTemp, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
ret = GateWay->CommUnitRevCallBack(GateWay, RxBuffTemp, RxLenTemp, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
||||||
else
|
else
|
||||||
ret = GateWay->CommUnitRevCallBack(GateWay, RxBuffTemp, RxLenTemp, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
ret = GateWay->CommUnitRevCallBack(GateWay, RxBuffTemp, RxLenTemp, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
||||||
if(ret == 0xff) { //注册信息
|
if(ret == 0xff) { //注册信息
|
||||||
SCPara->RS485RxLen = 0;
|
SCPara->RS485RxLen = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -393,7 +393,7 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { //调试命令解析
|
else { //调试命令解析
|
||||||
DebugAnalyze(GateWay, RxBuffTemp, RxLenTemp);
|
DebugAnalyze(GateWay, RxBuffTemp, RxLenTemp);
|
||||||
}
|
}
|
||||||
SCPara->RS485RxLen = 0;
|
SCPara->RS485RxLen = 0;
|
||||||
@@ -426,7 +426,7 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
MegData[2] = COMM_UNIT_CMD_READ;
|
MegData[2] = COMM_UNIT_CMD_READ;
|
||||||
memcpy(&MegData[3], GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].Mac[0], 6);
|
memcpy(&MegData[3], GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].Mac[0], 6);
|
||||||
MegData[9] = GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus;
|
MegData[9] = GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus;
|
||||||
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SCPara->SendUnitCommIdx++;
|
SCPara->SendUnitCommIdx++;
|
||||||
@@ -436,10 +436,10 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485Ch1_Thread_Entry
|
* 函数名称: RS485Ch1_Thread_Entry
|
||||||
* 功能描述: RS485通道1任务函数
|
* 功能描述: RS485通道1任务函数
|
||||||
* 参 数: 任务参数入口
|
* 参 数: 任务参数入口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void RS485Ch1_Thread_Entry(void *parameter)
|
void RS485Ch1_Thread_Entry(void *parameter)
|
||||||
{
|
{
|
||||||
@@ -469,7 +469,7 @@ void RS485Ch1_Thread_Entry(void *parameter)
|
|||||||
if(SCPara->RS485Rev_Sem == RT_NULL) {
|
if(SCPara->RS485Rev_Sem == RT_NULL) {
|
||||||
Debug_Printf("RS485Ch1Rev Sem Create Failed!\r\n");
|
Debug_Printf("RS485Ch1Rev Sem Create Failed!\r\n");
|
||||||
}
|
}
|
||||||
Debug_Printf("RS485Ch1Rev Thread is running!\r\n");
|
Debug_Printf("RS485Ch1Rev Thread is running!\r\n");
|
||||||
|
|
||||||
rt_thread_delay(3000);
|
rt_thread_delay(3000);
|
||||||
SCPara->InitOverFlag = true;
|
SCPara->InitOverFlag = true;
|
||||||
@@ -483,10 +483,10 @@ void RS485Ch1_Thread_Entry(void *parameter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485Ch1RxIrqCallback
|
* 函数名称: RS485Ch1RxIrqCallback
|
||||||
* 功能描述: RS485通道1中断处理回调函数
|
* 功能描述: RS485通道1中断处理回调函数
|
||||||
* 参 数: rData 接收到的数据
|
* 参 数: rData 接收到的数据
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void RS485Ch1RxIrqCallback(uint8_t rData)
|
void RS485Ch1RxIrqCallback(uint8_t rData)
|
||||||
{
|
{
|
||||||
@@ -500,10 +500,10 @@ void RS485Ch1RxIrqCallback(uint8_t rData)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485Ch2_Thread_Entry
|
* 函数名称: RS485Ch2_Thread_Entry
|
||||||
* 功能描述: RS485通道1任务函数
|
* 功能描述: RS485通道1任务函数
|
||||||
* 参 数: 任务参数入口
|
* 参 数: 任务参数入口
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void RS485Ch2_Thread_Entry(void *parameter)
|
void RS485Ch2_Thread_Entry(void *parameter)
|
||||||
{
|
{
|
||||||
@@ -533,7 +533,7 @@ void RS485Ch2_Thread_Entry(void *parameter)
|
|||||||
if(SCPara->RS485Rev_Sem == RT_NULL) {
|
if(SCPara->RS485Rev_Sem == RT_NULL) {
|
||||||
Debug_Printf("RS485Ch2Rev Sem Create Failed!\r\n");
|
Debug_Printf("RS485Ch2Rev Sem Create Failed!\r\n");
|
||||||
}
|
}
|
||||||
Debug_Printf("RS485Ch2Rev Thread is running!\r\n");
|
Debug_Printf("RS485Ch2Rev Thread is running!\r\n");
|
||||||
rt_thread_delay(3000);
|
rt_thread_delay(3000);
|
||||||
SCPara->InitOverFlag = true;
|
SCPara->InitOverFlag = true;
|
||||||
while(1) {
|
while(1) {
|
||||||
@@ -543,10 +543,10 @@ void RS485Ch2_Thread_Entry(void *parameter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: RS485Ch2RxIrqCallback
|
* 函数名称: RS485Ch2RxIrqCallback
|
||||||
* 功能描述: RS485通道1中断处理回调函数
|
* 功能描述: RS485通道1中断处理回调函数
|
||||||
* 参 数: rData 接收到的数据
|
* 参 数: rData 接收到的数据
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void RS485Ch2RxIrqCallback(uint8_t rData)
|
void RS485Ch2RxIrqCallback(uint8_t rData)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
数据通信任务
|
数据通信任务
|
||||||
*/
|
*/
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ static void rs485_rx_cb(uint8_t data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
返回值:成功:len,失败: 0
|
返回值:成功:len,失败: 0
|
||||||
***/
|
***/
|
||||||
static int recive_frame(void)
|
static int recive_frame(void)
|
||||||
{
|
{
|
||||||
@@ -76,7 +76,7 @@ static void update_on_start(uint8_t* frame, int len, uint8_t* pload, int size)
|
|||||||
|
|
||||||
update_send_cmd(0x01, 1, pReq->PackageNum);
|
update_send_cmd(0x01, 1, pReq->PackageNum);
|
||||||
|
|
||||||
//重启进入BOOT
|
//重启进入BOOT
|
||||||
NVIC_SystemReset();
|
NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ static void comm_process(uint8_t* frame, int len)
|
|||||||
uint8_t frame_data[64] = {0};
|
uint8_t frame_data[64] = {0};
|
||||||
uint16_t frame_data_len = 0;
|
uint16_t frame_data_len = 0;
|
||||||
|
|
||||||
/***数据解码***/
|
/***数据解码***/
|
||||||
int err = -1;
|
int err = -1;
|
||||||
|
|
||||||
err= protocol_unpack_frame(frame, len, &slave_addr, &frame_cmd, frame_data, &frame_data_len);
|
err= protocol_unpack_frame(frame, len, &slave_addr, &frame_cmd, frame_data, &frame_data_len);
|
||||||
@@ -152,7 +152,7 @@ static void comm_process(uint8_t* frame, int len)
|
|||||||
if (err != PROTOCOL_SUCCESS)
|
if (err != PROTOCOL_SUCCESS)
|
||||||
return ;
|
return ;
|
||||||
|
|
||||||
//TODO:获取本机地址
|
//TODO:获取本机地址
|
||||||
uint8_t local_addr = 0;
|
uint8_t local_addr = 0;
|
||||||
dev_cfg_get_devid(&local_addr);
|
dev_cfg_get_devid(&local_addr);
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ static void comm_process(uint8_t* frame, int len)
|
|||||||
|
|
||||||
memcpy( &tp_data,&tp_info.tp_datas,sizeof(tp_data));
|
memcpy( &tp_data,&tp_info.tp_datas,sizeof(tp_data));
|
||||||
|
|
||||||
//兼容旧协议,没有用到的通道,填充无效数据
|
//兼容旧协议,没有用到的通道,填充无效数据
|
||||||
for(int i=0; i <8-TP_SENSOR_NUM; i++){
|
for(int i=0; i <8-TP_SENSOR_NUM; i++){
|
||||||
|
|
||||||
tp_data.channels[i+TP_SENSOR_NUM].status =1;
|
tp_data.channels[i+TP_SENSOR_NUM].status =1;
|
||||||
@@ -244,7 +244,7 @@ static void comm_process(uint8_t* frame, int len)
|
|||||||
|
|
||||||
app_collect_ad_get(&ad_data);
|
app_collect_ad_get(&ad_data);
|
||||||
|
|
||||||
//兼容旧协议,没有用到的通道,填充无效数据
|
//兼容旧协议,没有用到的通道,填充无效数据
|
||||||
for(int i=0; i <8-YB_SENSOR_NUM; i++){
|
for(int i=0; i <8-YB_SENSOR_NUM; i++){
|
||||||
|
|
||||||
ad_data.channels[i+5].status =1;
|
ad_data.channels[i+5].status =1;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,14 +2,14 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "CatOneTask.h"
|
#include "CatOneTask.h"
|
||||||
|
#include "EthTask.h"
|
||||||
#include "LoraTask.h"
|
#include "LoraTask.h"
|
||||||
#include "CatOneTask.h"
|
|
||||||
#include "RS485Task.h"
|
#include "RS485Task.h"
|
||||||
#include "DebugCmd.h"
|
#include "DebugCmd.h"
|
||||||
#include "spiflash.h"
|
#include "spiflash.h"
|
||||||
|
|
||||||
|
|
||||||
//雅下: 81-00-00-06-00-01
|
//雅下: 81-00-00-06-00-01
|
||||||
// 81-00-00-06-00-02
|
// 81-00-00-06-00-02
|
||||||
// 81-00-00-06-00-03
|
// 81-00-00-06-00-03
|
||||||
// 81-00-00-06-00-04
|
// 81-00-00-06-00-04
|
||||||
@@ -34,7 +34,8 @@ static const uint8_t GateWayMac_BL10[6] = {0x81, 0x00, 0x00, 0x06, 0x00, 0x0A};
|
|||||||
bool MainDispEn = true;
|
bool MainDispEn = true;
|
||||||
|
|
||||||
static rt_thread_t Lora_Thread = RT_NULL;
|
static rt_thread_t Lora_Thread = RT_NULL;
|
||||||
static rt_thread_t Cat1Eth_Thread = RT_NULL;
|
static rt_thread_t Cat1_Thread = RT_NULL;
|
||||||
|
static rt_thread_t Eth_Thread = RT_NULL;
|
||||||
static rt_thread_t RS485Ch1_Thread = RT_NULL;
|
static rt_thread_t RS485Ch1_Thread = RT_NULL;
|
||||||
static rt_thread_t RS485Ch2_Thread = RT_NULL;
|
static rt_thread_t RS485Ch2_Thread = RT_NULL;
|
||||||
static rt_thread_t Debug_Thread = RT_NULL;
|
static rt_thread_t Debug_Thread = RT_NULL;
|
||||||
@@ -60,10 +61,10 @@ int toPercentage(int voltage)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: MainDBGOnOff
|
* 函数名称: MainDBGOnOff
|
||||||
* 功能描述: 主调试信息开关函数
|
* 功能描述: 主调试信息开关函数
|
||||||
* 参 数: OnOff,开关
|
* 参 数: OnOff,开关
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void MainDBGOnOff(bool OnOff)
|
void MainDBGOnOff(bool OnOff)
|
||||||
{
|
{
|
||||||
@@ -92,35 +93,6 @@ void SDCardTest(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void InfTest(void)
|
|
||||||
{
|
|
||||||
uint8_t sData[10] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A};
|
|
||||||
RS485_CH1_RX();
|
|
||||||
RS485_CH1_POW_ON();
|
|
||||||
rt_thread_delay(100);
|
|
||||||
RS485_CH1_POW_OFF();
|
|
||||||
|
|
||||||
RS485_CH2_POW_ON();
|
|
||||||
rt_thread_delay(100);
|
|
||||||
RS485_CH2_POW_OFF();
|
|
||||||
|
|
||||||
POWER_LED_OFF();
|
|
||||||
POWER_LED_ON();
|
|
||||||
LORA_RX_LED_SET();
|
|
||||||
LORA_RX_LED_CLR();
|
|
||||||
RS485_CH1_TX();
|
|
||||||
RS485_CH2_RX();
|
|
||||||
RS485Ch1_Config(500000);
|
|
||||||
RS485Ch2_Config(500000);
|
|
||||||
RS485Ch1UartSend(sData, 10);
|
|
||||||
rt_thread_delay(100);
|
|
||||||
|
|
||||||
RS485_CH2_TX();
|
|
||||||
RS485_CH1_RX();
|
|
||||||
RS485Ch2UartSend(sData, 10);
|
|
||||||
rt_thread_delay(100);
|
|
||||||
// SDCardTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
void GateWayInit(void)
|
void GateWayInit(void)
|
||||||
{
|
{
|
||||||
@@ -143,7 +115,7 @@ void GateWayInit(void)
|
|||||||
memset((uint8_t *)&GateWay.ConfigPara, 0x00, sizeof(GWConfigPara_t));
|
memset((uint8_t *)&GateWay.ConfigPara, 0x00, sizeof(GWConfigPara_t));
|
||||||
GateWay.ConfigPara.SavFlag = LOG_SAV_FLAG;
|
GateWay.ConfigPara.SavFlag = LOG_SAV_FLAG;
|
||||||
GateWay.ConfigPara.Comm = CATONE_COMM;
|
GateWay.ConfigPara.Comm = CATONE_COMM;
|
||||||
#if MAC_ADDR_TYPE == 0//测试服务器
|
#if MAC_ADDR_TYPE == 0//测试服务器
|
||||||
GateWay.ConfigPara.LTENet.DestAddr[0] = 39;
|
GateWay.ConfigPara.LTENet.DestAddr[0] = 39;
|
||||||
GateWay.ConfigPara.LTENet.DestAddr[1] = 106;
|
GateWay.ConfigPara.LTENet.DestAddr[1] = 106;
|
||||||
GateWay.ConfigPara.LTENet.DestAddr[2] = 103;
|
GateWay.ConfigPara.LTENet.DestAddr[2] = 103;
|
||||||
@@ -157,7 +129,7 @@ void GateWayInit(void)
|
|||||||
GateWay.ConfigPara.LTENet.DestPort = 12111;
|
GateWay.ConfigPara.LTENet.DestPort = 12111;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GateWay.ConfigPara.CommUnitReadInterval = COMMUNIT_READ_SENSOR_INTERVAL_MAX;//非低功耗设备
|
GateWay.ConfigPara.CommUnitReadInterval = COMMUNIT_READ_SENSOR_INTERVAL_MAX;//非低功耗设备
|
||||||
memset(GateWay.ConfigPara.CommUnitArray, 0x00, sizeof(CommUnitData_t) * COMMUNIT_NUM_MAX);
|
memset(GateWay.ConfigPara.CommUnitArray, 0x00, sizeof(CommUnitData_t) * COMMUNIT_NUM_MAX);
|
||||||
GateWay.ConfigPara.Rs485Ch1.Enable = true;
|
GateWay.ConfigPara.Rs485Ch1.Enable = true;
|
||||||
GateWay.ConfigPara.Rs485Ch1.CommUnitEnable = false;
|
GateWay.ConfigPara.Rs485Ch1.CommUnitEnable = false;
|
||||||
@@ -186,8 +158,7 @@ void GateWayInit(void)
|
|||||||
|
|
||||||
#if MAC_ADDR_TYPE == 0
|
#if MAC_ADDR_TYPE == 0
|
||||||
memcpy(GateWay.ConfigPara.GwMac, GateWayMac_Test, 6);
|
memcpy(GateWay.ConfigPara.GwMac, GateWayMac_Test, 6);
|
||||||
// GateWay.ConfigPara.DebugChannel = DEBUG_CH_RS485_1;
|
GateWay.ConfigPara.DebugChannel = DEBUG_CH_RS485_1;
|
||||||
GateWay.ConfigPara.DebugChannel = DEBUG_CH_DBG;
|
|
||||||
#elif MAC_ADDR_TYPE == 1
|
#elif MAC_ADDR_TYPE == 1
|
||||||
memcpy(GateWay.ConfigPara.GwMac, GateWayMac_BL1, 6);
|
memcpy(GateWay.ConfigPara.GwMac, GateWayMac_BL1, 6);
|
||||||
GateWay.ConfigPara.DebugChannel = DEBUG_CH_RS485_1;
|
GateWay.ConfigPara.DebugChannel = DEBUG_CH_RS485_1;
|
||||||
@@ -318,9 +289,11 @@ void GateWayInit(void)
|
|||||||
else
|
else
|
||||||
rt_kprintf("History Num: 0\r\n");
|
rt_kprintf("History Num: 0\r\n");
|
||||||
if(GateWay.ConfigPara.Comm == CATONE_COMM) {
|
if(GateWay.ConfigPara.Comm == CATONE_COMM) {
|
||||||
|
DbgOrCat1Uart_Config(115200);
|
||||||
CAT1_ON();
|
CAT1_ON();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
DBG_ON();
|
||||||
ETH_ON();
|
ETH_ON();
|
||||||
rt_thread_delay(1000);
|
rt_thread_delay(1000);
|
||||||
ETHReset();
|
ETHReset();
|
||||||
@@ -340,16 +313,16 @@ void OutageUpdate(uint8_t AlarmType, bool AlarmState, uint8_t Batt)
|
|||||||
Alarm->AlarmType = AlarmType;
|
Alarm->AlarmType = AlarmType;
|
||||||
Alarm->AlarmState = AlarmState;
|
Alarm->AlarmState = AlarmState;
|
||||||
Alarm->AlarmPara = Batt;
|
Alarm->AlarmPara = Batt;
|
||||||
CatOneEthSendQueue(MegData, 6); //发送报警信息
|
CatOneEthSendQueue(MegData, 6); //发送报警信息
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: main
|
* 函数名称: main
|
||||||
* 功能描述: 主函数
|
* 功能描述: 主函数
|
||||||
* 参 数: 无
|
* 参 数: 无
|
||||||
* 返 回 值: 运行错误返回-1
|
* 返 回 值: 运行错误返回-1
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
static uint8_t LastBattery = 0xff; //上一次电池电压
|
static uint8_t LastBattery = 0xff; //上一次电池电压
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
uint16_t OneSecondDlyCnt = 0;
|
uint16_t OneSecondDlyCnt = 0;
|
||||||
@@ -413,14 +386,20 @@ int main(void)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
Debug_Thread = rt_thread_create("DebugUart", Debug_Thread_Entry, &GateWay, 2048, 3, 20);
|
Debug_Thread = rt_thread_create("DebugUart", Debug_Thread_Entry, &GateWay, 2048, 3, 20);
|
||||||
if (RS485Ch2_Thread != RT_NULL)
|
if (Debug_Thread != RT_NULL)
|
||||||
rt_thread_startup(Debug_Thread);
|
rt_thread_startup(Debug_Thread);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
Cat1Eth_Thread = rt_thread_create("Cat1Eth", CatOne_Eth_Thread_Entry, &GateWay, 4096, 3, 20);
|
Cat1_Thread = rt_thread_create("Cat1", CatOne_Thread_Entry, &GateWay, 4096, 3, 20);
|
||||||
if (Cat1Eth_Thread != RT_NULL)
|
if (Cat1_Thread != RT_NULL)
|
||||||
rt_thread_startup(Cat1Eth_Thread);
|
rt_thread_startup(Cat1_Thread);
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
Eth_Thread = rt_thread_create("Eth", Eth_Thread_Entry, &GateWay, 4096, 3, 20);
|
||||||
|
if (Eth_Thread != RT_NULL)
|
||||||
|
rt_thread_startup(Eth_Thread);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -437,9 +416,9 @@ int main(void)
|
|||||||
POWER_LED_OFF();
|
POWER_LED_OFF();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EthRxOverhandler();
|
EthOverHandler();
|
||||||
RS485RxOverhandler();
|
RS485RxOverhandler();
|
||||||
DebugRxOverhandler();
|
DebugOrCat1RxOverhandler();
|
||||||
if(OneSecondDlyCnt % 200 == 0) {
|
if(OneSecondDlyCnt % 200 == 0) {
|
||||||
FeedDog();
|
FeedDog();
|
||||||
LORA_RX_TOGGLE();
|
LORA_RX_TOGGLE();
|
||||||
@@ -456,15 +435,15 @@ int main(void)
|
|||||||
|
|
||||||
uint16_t ADValue = GetADCBuffPoint();
|
uint16_t ADValue = GetADCBuffPoint();
|
||||||
//V = (AD * 3.3 / 4096) * (R1+R2) / R1; R1 = 200, R2 = 120
|
//V = (AD * 3.3 / 4096) * (R1+R2) / R1; R1 = 200, R2 = 120
|
||||||
//计算出常数为0.0021484375,扩大1000倍
|
//计算出常数为0.0021484375,扩大1000倍
|
||||||
float Voltage = ADValue * 2.1484375;
|
float Voltage = ADValue * 2.1484375;
|
||||||
GateWay.Battery = toPercentage(Voltage);
|
GateWay.Battery = toPercentage(Voltage);
|
||||||
|
|
||||||
//上电判断电量
|
//上电判断电量
|
||||||
if(LastBattery == 0xff) {
|
if(LastBattery == 0xff) {
|
||||||
LastBattery = GateWay.Battery;
|
LastBattery = GateWay.Battery;
|
||||||
|
|
||||||
if(GateWay.ConfigPara.OutageFlag == true) { //有报警
|
if(GateWay.ConfigPara.OutageFlag == true) { //有报警
|
||||||
AlarmType = 1;
|
AlarmType = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -474,7 +453,7 @@ int main(void)
|
|||||||
BatteryUpdateDlyCnt = 10;
|
BatteryUpdateDlyCnt = 10;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(GateWay.ConfigPara.OutageFlag == false) { //没有告警,判断电池电压是否降低
|
if(GateWay.ConfigPara.OutageFlag == false) { //没有告警,判断电池电压是否降低
|
||||||
if(GateWay.Battery <= LastBattery) {
|
if(GateWay.Battery <= LastBattery) {
|
||||||
if(LastBattery <= 5) {
|
if(LastBattery <= 5) {
|
||||||
GateWay.ConfigPara.OutageFlag = true;
|
GateWay.ConfigPara.OutageFlag = true;
|
||||||
@@ -495,7 +474,7 @@ int main(void)
|
|||||||
BatteryUpdateDlyCnt = 20 * 60;
|
BatteryUpdateDlyCnt = 20 * 60;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { //充电,更新上一次电池电压
|
else { //充电,更新上一次电池电压
|
||||||
LastBattery = GateWay.Battery;
|
LastBattery = GateWay.Battery;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -522,14 +501,14 @@ int main(void)
|
|||||||
AlarmType = 0;
|
AlarmType = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { //电池继续放电,更新上一次电池电压
|
else { //电池继续放电,更新上一次电池电压
|
||||||
LastBattery = GateWay.Battery;
|
LastBattery = GateWay.Battery;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BatteryUpdateDlyCnt--;
|
BatteryUpdateDlyCnt--;
|
||||||
if(BatteryUpdateDlyCnt == 0) {
|
if(BatteryUpdateDlyCnt == 0) {
|
||||||
if(GateWay.ConfigPara.OutageFlag) { //有报警
|
if(GateWay.ConfigPara.OutageFlag) { //有报警
|
||||||
BatteryUpdateDlyCnt = 20 * 60;
|
BatteryUpdateDlyCnt = 20 * 60;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ int protocol_pack_frame(
|
|||||||
uint16_t *packed_len)
|
uint16_t *packed_len)
|
||||||
{
|
{
|
||||||
|
|
||||||
// 构建基础帧头
|
// 构建基础帧头
|
||||||
|
|
||||||
buffer[0] = PROTOCOL_HEAD & 0xFF;
|
buffer[0] = PROTOCOL_HEAD & 0xFF;
|
||||||
buffer[1] = (PROTOCOL_HEAD >> 8) & 0xFF;
|
buffer[1] = (PROTOCOL_HEAD >> 8) & 0xFF;
|
||||||
@@ -23,21 +23,21 @@ int protocol_pack_frame(
|
|||||||
buffer[5] = payload_len & 0xFF;
|
buffer[5] = payload_len & 0xFF;
|
||||||
buffer[6] = (payload_len >> 8) & 0xFF;
|
buffer[6] = (payload_len >> 8) & 0xFF;
|
||||||
|
|
||||||
// 复制有效载荷(保持小端格式)
|
// 复制有效载荷(保持小端格式)
|
||||||
if (payload_len > 0 && payload != NULL) {
|
if (payload_len > 0 && payload != NULL) {
|
||||||
memcpy(buffer + PROTOCOL_FRAME_HEAD_SIZE , payload, payload_len);
|
memcpy(buffer + PROTOCOL_FRAME_HEAD_SIZE , payload, payload_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置实际长度
|
// 设置实际长度
|
||||||
int fram_len = PROTOCOL_FRAME_MIN_SIZE + payload_len;
|
int fram_len = PROTOCOL_FRAME_MIN_SIZE + payload_len;
|
||||||
|
|
||||||
|
|
||||||
// 计算CRC(覆盖地址、命令、长度和有效载荷)
|
// 计算CRC(覆盖地址、命令、长度和有效载荷)
|
||||||
uint16_t crc = 0xFFFF;
|
uint16_t crc = 0xFFFF;
|
||||||
|
|
||||||
crc = modbus_crc16(buffer,fram_len -2);
|
crc = modbus_crc16(buffer,fram_len -2);
|
||||||
|
|
||||||
// 写入CRC(保持小端格式)
|
// 写入CRC(保持小端格式)
|
||||||
|
|
||||||
buffer[fram_len-2] = (uint8_t)(crc & 0xFF);
|
buffer[fram_len-2] = (uint8_t)(crc & 0xFF);
|
||||||
buffer[fram_len-1] = (uint8_t)(crc >> 8);
|
buffer[fram_len-1] = (uint8_t)(crc >> 8);
|
||||||
@@ -56,15 +56,19 @@ int protocol_unpack_frame(
|
|||||||
uint8_t *payload,
|
uint8_t *payload,
|
||||||
uint16_t *payload_len
|
uint16_t *payload_len
|
||||||
) {
|
) {
|
||||||
// 参数校验
|
// 参数校验
|
||||||
if (frame == NULL || slave_addr == NULL || command == NULL || payload_len == NULL) {
|
if (frame == NULL || slave_addr == NULL || command == NULL || payload_len == NULL) {
|
||||||
return PROTOCOL_ERR_INVALID_PARAM;
|
return PROTOCOL_ERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
if (frame_len > 64) {
|
||||||
|
return PROTOCOL_ERR_BUFFER_OVERFLOW;
|
||||||
|
}
|
||||||
|
|
||||||
if (frame_len < PROTOCOL_FRAME_MIN_SIZE) {
|
if (frame_len < PROTOCOL_FRAME_MIN_SIZE) {
|
||||||
return PROTOCOL_ERR_INVALID_PARAM;
|
return PROTOCOL_ERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 帧头校验
|
// 帧头校验
|
||||||
uint16_t header = (frame[0] | frame[1] <<8);
|
uint16_t header = (frame[0] | frame[1] <<8);
|
||||||
|
|
||||||
if (header != PROTOCOL_HEAD) {
|
if (header != PROTOCOL_HEAD) {
|
||||||
@@ -72,7 +76,7 @@ int protocol_unpack_frame(
|
|||||||
return PROTOCOL_ERR_INVALID_PARAM;
|
return PROTOCOL_ERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 基础字段解析
|
// 基础字段解析
|
||||||
*slave_addr = (frame[2] | frame[3] << 8);
|
*slave_addr = (frame[2] | frame[3] << 8);
|
||||||
|
|
||||||
|
|
||||||
@@ -81,7 +85,7 @@ int protocol_unpack_frame(
|
|||||||
|
|
||||||
*payload_len = (frame[5] | frame[6] << 8);
|
*payload_len = (frame[5] | frame[6] << 8);
|
||||||
|
|
||||||
// 数据完整性校验
|
// 数据完整性校验
|
||||||
if (*payload_len > (frame_len - PROTOCOL_FRAME_MIN_SIZE)) {
|
if (*payload_len > (frame_len - PROTOCOL_FRAME_MIN_SIZE)) {
|
||||||
|
|
||||||
return PROTOCOL_ERR_BUFFER_OVERFLOW;
|
return PROTOCOL_ERR_BUFFER_OVERFLOW;
|
||||||
@@ -93,7 +97,7 @@ int protocol_unpack_frame(
|
|||||||
|
|
||||||
calc_crc = modbus_crc16((uint8_t *)frame, frame_size -2 );
|
calc_crc = modbus_crc16((uint8_t *)frame, frame_size -2 );
|
||||||
|
|
||||||
// 校验CRC(保持小端格式)
|
// 校验CRC(保持小端格式)
|
||||||
union{
|
union{
|
||||||
|
|
||||||
uint16_t value;
|
uint16_t value;
|
||||||
@@ -111,7 +115,7 @@ int protocol_unpack_frame(
|
|||||||
return PROTOCOL_ERR_CRC;
|
return PROTOCOL_ERR_CRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 复制有效载荷(保持小端格式)
|
// 复制有效载荷(保持小端格式)
|
||||||
if (*payload_len > 0 && payload != NULL) {
|
if (*payload_len > 0 && payload != NULL) {
|
||||||
memcpy(payload, frame + PROTOCOL_FRAME_HEAD_SIZE, *payload_len);
|
memcpy(payload, frame + PROTOCOL_FRAME_HEAD_SIZE, *payload_len);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* @brief 环形缓冲区管理(参考linux/kfifo)
|
* @brief 环形缓冲区管理(参考linux/kfifo)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2016~2020, <morro_luo@163.com>
|
* Copyright (c) 2016~2020, <morro_luo@163.com>
|
||||||
*
|
*
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2016-05-30 Morro 初版完成
|
* 2016-05-30 Morro 初版完成
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "ringbuffer.h"
|
#include "ringbuffer.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -16,10 +16,10 @@
|
|||||||
#define min(a,b) ( (a) < (b) )? (a):(b)
|
#define min(a,b) ( (a) < (b) )? (a):(b)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*@brief 构造一个空环形缓冲区
|
*@brief 构造一个空环形缓冲区
|
||||||
*@param[in] r - 环形缓冲区管理器
|
*@param[in] r - 环形缓冲区管理器
|
||||||
*@param[in] buf - 数据缓冲区
|
*@param[in] buf - 数据缓冲区
|
||||||
*@param[in] len - buf长度(必须是2的N次幂)
|
*@param[in] len - buf长度(必须是2的N次幂)
|
||||||
*@retval bool
|
*@retval bool
|
||||||
*/
|
*/
|
||||||
bool ring_buf_init(ring_buf_t *r,unsigned char *buf, unsigned int len)
|
bool ring_buf_init(ring_buf_t *r,unsigned char *buf, unsigned int len)
|
||||||
@@ -31,8 +31,8 @@ bool ring_buf_init(ring_buf_t *r,unsigned char *buf, unsigned int len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*@brief 清空环形缓冲区
|
*@brief 清空环形缓冲区
|
||||||
*@param[in] r - 待清空的环形缓冲区
|
*@param[in] r - 待清空的环形缓冲区
|
||||||
*@retval none
|
*@retval none
|
||||||
*/
|
*/
|
||||||
void ring_buf_clr(ring_buf_t *r)
|
void ring_buf_clr(ring_buf_t *r)
|
||||||
@@ -41,8 +41,8 @@ void ring_buf_clr(ring_buf_t *r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*@brief 获取环形缓冲区数据长度
|
*@brief 获取环形缓冲区数据长度
|
||||||
*@retval 环形缓冲区中有效字节数
|
*@retval 环形缓冲区中有效字节数
|
||||||
*/
|
*/
|
||||||
int ring_buf_len(ring_buf_t *r)
|
int ring_buf_len(ring_buf_t *r)
|
||||||
{
|
{
|
||||||
@@ -50,10 +50,10 @@ int ring_buf_len(ring_buf_t *r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*@brief 将指定长度的数据放到环形缓冲区中
|
*@brief 将指定长度的数据放到环形缓冲区中
|
||||||
*@param[in] buf - 数据缓冲区
|
*@param[in] buf - 数据缓冲区
|
||||||
* len - 缓冲区长度
|
* len - 缓冲区长度
|
||||||
*@retval 实际放到中的数据
|
*@retval 实际放到中的数据
|
||||||
*/
|
*/
|
||||||
int ring_buf_put(ring_buf_t *r,unsigned char *buf,unsigned int len)
|
int ring_buf_put(ring_buf_t *r,unsigned char *buf,unsigned int len)
|
||||||
{
|
{
|
||||||
@@ -70,10 +70,10 @@ int ring_buf_put(ring_buf_t *r,unsigned char *buf,unsigned int len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*@brief 从环形缓冲区中读取指定长度的数据
|
*@brief 从环形缓冲区中读取指定长度的数据
|
||||||
*@param[in] len - 读取长度
|
*@param[in] len - 读取长度
|
||||||
*@param[out] buf - 输出数据缓冲区
|
*@param[out] buf - 输出数据缓冲区
|
||||||
*@retval 实际读取长度
|
*@retval 实际读取长度
|
||||||
*/
|
*/
|
||||||
int ring_buf_get(ring_buf_t *r,unsigned char *buf,unsigned int len)
|
int ring_buf_get(ring_buf_t *r,unsigned char *buf,unsigned int len)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ static void SpiFlashWaitForWriteEnd(void)
|
|||||||
SpiFlashSetNss();
|
SpiFlashSetNss();
|
||||||
}
|
}
|
||||||
|
|
||||||
//扇区擦除
|
//扇区擦除
|
||||||
void SpiFlashEraseSector(uint32_t SectorAddr)
|
void SpiFlashEraseSector(uint32_t SectorAddr)
|
||||||
{
|
{
|
||||||
#ifdef FLASH_TEST
|
#ifdef FLASH_TEST
|
||||||
@@ -57,7 +57,7 @@ void SpiFlashEraseSector(uint32_t SectorAddr)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//整片擦除
|
//整片擦除
|
||||||
void SpiFlashEraseChip(void)
|
void SpiFlashEraseChip(void)
|
||||||
{
|
{
|
||||||
SpiFlashWriteEnable();
|
SpiFlashWriteEnable();
|
||||||
@@ -67,7 +67,7 @@ void SpiFlashEraseChip(void)
|
|||||||
SpiFlashWaitForWriteEnd();
|
SpiFlashWaitForWriteEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
//写数据
|
//写数据
|
||||||
void SpiFlashWriteData(uint8_t* wData, uint32_t wAddr, uint16_t wLen)
|
void SpiFlashWriteData(uint8_t* wData, uint32_t wAddr, uint16_t wLen)
|
||||||
{
|
{
|
||||||
#ifdef FLASH_TEST
|
#ifdef FLASH_TEST
|
||||||
@@ -89,15 +89,15 @@ void SpiFlashWriteData(uint8_t* wData, uint32_t wAddr, uint16_t wLen)
|
|||||||
|
|
||||||
void SpiFlashWriteAnyLengthData(uint8_t* wData, uint32_t wAddr, uint16_t wLen)
|
void SpiFlashWriteAnyLengthData(uint8_t* wData, uint32_t wAddr, uint16_t wLen)
|
||||||
{
|
{
|
||||||
uint16_t PageCnt; //需要写入页数
|
uint16_t PageCnt; //需要写入页数
|
||||||
uint16_t FirstPageWriteSize; //在起始地址不为页起始地址的情况下,先写入当前页剩余空间
|
uint16_t FirstPageWriteSize; //在起始地址不为页起始地址的情况下,先写入当前页剩余空间
|
||||||
uint16_t LastPageWriteSize; //最后一页写入长度
|
uint16_t LastPageWriteSize; //最后一页写入长度
|
||||||
uint32_t AddrOffset = 0;
|
uint32_t AddrOffset = 0;
|
||||||
uint32_t WriteAddr;
|
uint32_t WriteAddr;
|
||||||
LogHeader LogH;
|
LogHeader LogH;
|
||||||
WriteAddr = wAddr;
|
WriteAddr = wAddr;
|
||||||
|
|
||||||
//写入的长度超出最大空间,从起始开始写起
|
//写入的长度超出最大空间,从起始开始写起
|
||||||
if((WriteAddr + wLen) > SPIFLASH_SIZE) {
|
if((WriteAddr + wLen) > SPIFLASH_SIZE) {
|
||||||
LogH = (LogHeader)wData;
|
LogH = (LogHeader)wData;
|
||||||
WriteAddr = LOG_SAV_START_SECTOR * SPIFLASH_SECTORSIZE;
|
WriteAddr = LOG_SAV_START_SECTOR * SPIFLASH_SECTORSIZE;
|
||||||
@@ -106,21 +106,21 @@ void SpiFlashWriteAnyLengthData(uint8_t* wData, uint32_t wAddr, uint16_t wLen)
|
|||||||
|
|
||||||
uint16_t FirstPageRemainSpace = SPIFLASH_PAGESIZE - (WriteAddr % SPIFLASH_PAGESIZE);
|
uint16_t FirstPageRemainSpace = SPIFLASH_PAGESIZE - (WriteAddr % SPIFLASH_PAGESIZE);
|
||||||
|
|
||||||
// //判断是否跨扇区,跨扇区需要先擦除下一扇区
|
// //判断是否跨扇区,跨扇区需要先擦除下一扇区
|
||||||
CheckDelSecter(wAddr, wLen);
|
CheckDelSecter(wAddr, wLen);
|
||||||
|
|
||||||
if(wLen < FirstPageRemainSpace) {
|
if(wLen < FirstPageRemainSpace) {
|
||||||
FirstPageWriteSize = wLen; //计算首页写入长度
|
FirstPageWriteSize = wLen; //计算首页写入长度
|
||||||
PageCnt = 0;
|
PageCnt = 0;
|
||||||
LastPageWriteSize = 0;
|
LastPageWriteSize = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// FirstPageWriteSize = FirstPageRemainSpace % SPIFLASH_PAGESIZE;
|
// FirstPageWriteSize = FirstPageRemainSpace % SPIFLASH_PAGESIZE;
|
||||||
// PageCnt = (wLen - (FirstPageWriteSize % SPIFLASH_PAGESIZE)) / SPIFLASH_PAGESIZE; //计算需要写入多少整页
|
// PageCnt = (wLen - (FirstPageWriteSize % SPIFLASH_PAGESIZE)) / SPIFLASH_PAGESIZE; //计算需要写入多少整页
|
||||||
// LastPageWriteSize = (wLen - (FirstPageWriteSize % SPIFLASH_PAGESIZE)) % SPIFLASH_PAGESIZE; //计算剩余需要写入的长度
|
// LastPageWriteSize = (wLen - (FirstPageWriteSize % SPIFLASH_PAGESIZE)) % SPIFLASH_PAGESIZE; //计算剩余需要写入的长度
|
||||||
FirstPageWriteSize = FirstPageRemainSpace;
|
FirstPageWriteSize = FirstPageRemainSpace;
|
||||||
PageCnt = (wLen - FirstPageWriteSize) / SPIFLASH_PAGESIZE; //计算需要写入多少整页
|
PageCnt = (wLen - FirstPageWriteSize) / SPIFLASH_PAGESIZE; //计算需要写入多少整页
|
||||||
LastPageWriteSize = (wLen - FirstPageWriteSize) % SPIFLASH_PAGESIZE; //计算剩余需要写入的长度
|
LastPageWriteSize = (wLen - FirstPageWriteSize) % SPIFLASH_PAGESIZE; //计算剩余需要写入的长度
|
||||||
}
|
}
|
||||||
|
|
||||||
if(FirstPageWriteSize > 0) {
|
if(FirstPageWriteSize > 0) {
|
||||||
@@ -170,17 +170,17 @@ uint32_t SpiFlashReadId(void)
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t Flag;
|
uint16_t Flag;
|
||||||
uint16_t LoopSavFlag; //循环存储标志
|
uint16_t LoopSavFlag; //循环存储标志
|
||||||
uint32_t LogCnt; //日志最大数量
|
uint32_t LogCnt; //日志最大数量
|
||||||
uint32_t FirstLogStartAddr; //第一个数据的起始地址
|
uint32_t FirstLogStartAddr; //第一个数据的起始地址
|
||||||
uint32_t LastLogEndAddr; //最后一个数据的结束地址
|
uint32_t LastLogEndAddr; //最后一个数据的结束地址
|
||||||
}LogNumSav_t;
|
}LogNumSav_t;
|
||||||
|
|
||||||
static LogNumSav_t LogNumArray[256];
|
static LogNumSav_t LogNumArray[256];
|
||||||
static __IO uint32_t gLogCnt = 0;
|
static __IO uint32_t gLogCnt = 0;
|
||||||
static __IO uint32_t FirstLogStartAddr = 0; //第一个日志起始地址
|
static __IO uint32_t FirstLogStartAddr = 0; //第一个日志起始地址
|
||||||
static __IO uint32_t LastLogEndAddr = 0; //最后一个日志结束地址
|
static __IO uint32_t LastLogEndAddr = 0; //最后一个日志结束地址
|
||||||
static __IO uint16_t LoopSavFlag = 0; //循环存储标志
|
static __IO uint16_t LoopSavFlag = 0; //循环存储标志
|
||||||
static uint16_t LogNumIdx;
|
static uint16_t LogNumIdx;
|
||||||
|
|
||||||
uint16_t ReadLoopSavFlag(void)
|
uint16_t ReadLoopSavFlag(void)
|
||||||
@@ -235,7 +235,7 @@ void LogInit(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(LogNumIdx == 0xffff) { //256条记录满,读最后一条记录
|
if(LogNumIdx == 0xffff) { //256条记录满,读最后一条记录
|
||||||
LogNumIdx = 0;
|
LogNumIdx = 0;
|
||||||
SetLogNum(LogNumArray[255].LogCnt);
|
SetLogNum(LogNumArray[255].LogCnt);
|
||||||
SetLoopSavFlag(LogNumArray[255].LoopSavFlag);
|
SetLoopSavFlag(LogNumArray[255].LoopSavFlag);
|
||||||
@@ -243,7 +243,7 @@ void LogInit(void)
|
|||||||
SetLastLogEndAddr(LogNumArray[255].LastLogEndAddr);
|
SetLastLogEndAddr(LogNumArray[255].LastLogEndAddr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(LogNumIdx == 0) { //没有记录
|
if(LogNumIdx == 0) { //没有记录
|
||||||
LogNumIdx = 0;
|
LogNumIdx = 0;
|
||||||
SetLogNum(0);
|
SetLogNum(0);
|
||||||
SetLoopSavFlag(0);
|
SetLoopSavFlag(0);
|
||||||
@@ -286,17 +286,17 @@ void SavLogNum(uint32_t LogNum)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: CheckDelSecter
|
* 函数名称: CheckDelSecter
|
||||||
* 功能描述: 检查需要删除的扇区,跨扇区删除下一扇区,如果到了删除最后一个扇区,循环到起始扇区
|
* 功能描述: 检查需要删除的扇区,跨扇区删除下一扇区,如果到了删除最后一个扇区,循环到起始扇区
|
||||||
* 参 数: wAddr, 写入地址
|
* 参 数: wAddr, 写入地址
|
||||||
wLen, 写入长度
|
wLen, 写入长度
|
||||||
* 返 回 值: 返回写入起始地址
|
* 返 回 值: 返回写入起始地址
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
uint8_t LogBuff[LOG_SAV_SIZE_MAX];
|
uint8_t LogBuff[LOG_SAV_SIZE_MAX];
|
||||||
const uint8_t SavFlag[4] ={0xAA, 0x55, 0x55, 0xAA};
|
const uint8_t SavFlag[4] ={0xAA, 0x55, 0x55, 0xAA};
|
||||||
void CheckDelSecter(uint32_t wAddr, uint16_t wLen)
|
void CheckDelSecter(uint32_t wAddr, uint16_t wLen)
|
||||||
{
|
{
|
||||||
uint32_t DelOffsetAddr, FindFirstLogAddr; //存储起始地址
|
uint32_t DelOffsetAddr, FindFirstLogAddr; //存储起始地址
|
||||||
uint32_t DelSectorNum = 0;
|
uint32_t DelSectorNum = 0;
|
||||||
uint32_t SurplusSpace = SPIFLASH_SECTORSIZE - (wAddr % SPIFLASH_SECTORSIZE);
|
uint32_t SurplusSpace = SPIFLASH_SECTORSIZE - (wAddr % SPIFLASH_SECTORSIZE);
|
||||||
|
|
||||||
@@ -308,7 +308,7 @@ void CheckDelSecter(uint32_t wAddr, uint16_t wLen)
|
|||||||
FindFirstLogAddr = DelOffsetAddr + SPIFLASH_SECTORSIZE;
|
FindFirstLogAddr = DelOffsetAddr + SPIFLASH_SECTORSIZE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(wLen < SurplusSpace) { //长度没有超过扇区剩余容量
|
if(wLen < SurplusSpace) { //长度没有超过扇区剩余容量
|
||||||
SetLastLogEndAddr(wAddr + wLen);
|
SetLastLogEndAddr(wAddr + wLen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -332,7 +332,7 @@ void CheckDelSecter(uint32_t wAddr, uint16_t wLen)
|
|||||||
while(1) {
|
while(1) {
|
||||||
SpiFlashReadAnyLengthData(LogBuff, ReadAddr, LOG_SAV_SIZE_MAX);
|
SpiFlashReadAnyLengthData(LogBuff, ReadAddr, LOG_SAV_SIZE_MAX);
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < LOG_SAV_SIZE_MAX; i++) {
|
for(i = 0; i <= LOG_SAV_SIZE_MAX - 4; i++) {
|
||||||
if(memcmp(&LogBuff[i], SavFlag, 4) == 0) {
|
if(memcmp(&LogBuff[i], SavFlag, 4) == 0) {
|
||||||
SetFirstLogStartAddr(ReadAddr + i);
|
SetFirstLogStartAddr(ReadAddr + i);
|
||||||
return;;
|
return;;
|
||||||
@@ -340,7 +340,7 @@ void CheckDelSecter(uint32_t wAddr, uint16_t wLen)
|
|||||||
}
|
}
|
||||||
if(i == LOG_SAV_SIZE_MAX) {
|
if(i == LOG_SAV_SIZE_MAX) {
|
||||||
ReadAddr += LOG_SAV_SIZE_MAX;
|
ReadAddr += LOG_SAV_SIZE_MAX;
|
||||||
if(ReadAddr >= SPIFLASH_SIZE) { //找不到下一条数据,重置flash
|
if(ReadAddr >= SPIFLASH_SIZE) { //找不到下一条数据,重置flash
|
||||||
Debug_Printf("Add LOG Error, Next Data No Find!\r\n");
|
Debug_Printf("Add LOG Error, Next Data No Find!\r\n");
|
||||||
SetLogNum(0);
|
SetLogNum(0);
|
||||||
SetLoopSavFlag(0);
|
SetLoopSavFlag(0);
|
||||||
@@ -381,7 +381,7 @@ void AddLog(uint8_t *wData, uint32_t wLen)
|
|||||||
LogH->TimeStamp = TimeTs();
|
LogH->TimeStamp = TimeTs();
|
||||||
memcpy(&LogBuffTemp[sizeof(LogHeader_t)], wData, wLen);
|
memcpy(&LogBuffTemp[sizeof(LogHeader_t)], wData, wLen);
|
||||||
|
|
||||||
//判断是否跨扇区,跨扇区需要先擦除下一扇区
|
//判断是否跨扇区,跨扇区需要先擦除下一扇区
|
||||||
CheckDelSecter(LLEndAddr, LogSize);
|
CheckDelSecter(LLEndAddr, LogSize);
|
||||||
if(LogH->LogEndAddr > SPIFLASH_SIZE) {
|
if(LogH->LogEndAddr > SPIFLASH_SIZE) {
|
||||||
LLEndAddr = LOG_SAV_START_SECTOR * SPIFLASH_SECTORSIZE;
|
LLEndAddr = LOG_SAV_START_SECTOR * SPIFLASH_SECTORSIZE;
|
||||||
@@ -395,13 +395,13 @@ void AddLog(uint8_t *wData, uint32_t wLen)
|
|||||||
|
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: ReadLog
|
* 函数名称: ReadLog
|
||||||
* 功能描述: 读取日志
|
* 功能描述: 读取日志
|
||||||
* 参 数: Header, 上一包日志头信息,连续读取时传入上一包数据信息,缩短日志遍历时间,
|
* 参 数: Header, 上一包日志头信息,连续读取时传入上一包数据信息,缩短日志遍历时间,
|
||||||
Header->LogEndAddr为0读取第一包数据,LogIdx数据无效
|
Header->LogEndAddr为0读取第一包数据,LogIdx数据无效
|
||||||
rData, 日志出口,需要释放
|
rData, 日志出口,需要释放
|
||||||
LogIdx, 读取的日志的序号,为0读取Header->LogEndAddr对应日志
|
LogIdx, 读取的日志的序号,为0读取Header->LogEndAddr对应日志
|
||||||
* 返 回 值: 返回数据长度
|
* 返 回 值: 返回数据长度
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int ReadLog(LogHeader Header, uint8_t **rData, uint32_t LogIdx)
|
int ReadLog(LogHeader Header, uint8_t **rData, uint32_t LogIdx)
|
||||||
{
|
{
|
||||||
@@ -426,7 +426,7 @@ int ReadLog(LogHeader Header, uint8_t **rData, uint32_t LogIdx)
|
|||||||
while(1) {
|
while(1) {
|
||||||
SpiFlashReadAnyLengthData((uint8_t *)Header, FSAddr, sizeof(LogHeader_t));
|
SpiFlashReadAnyLengthData((uint8_t *)Header, FSAddr, sizeof(LogHeader_t));
|
||||||
if(Header->LogSavFlag != LOG_SAV_FLAG) {
|
if(Header->LogSavFlag != LOG_SAV_FLAG) {
|
||||||
if((SPIFLASH_SIZE - FSAddr) < LOG_SAV_SIZE_MAX) { //判断是否到片尾
|
if((SPIFLASH_SIZE - FSAddr) < LOG_SAV_SIZE_MAX) { //判断是否到片尾
|
||||||
FSAddr = LOG_SAV_START_SECTOR * SPIFLASH_SECTOR_NUM;
|
FSAddr = LOG_SAV_START_SECTOR * SPIFLASH_SECTOR_NUM;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -461,15 +461,15 @@ int ReadLog(LogHeader Header, uint8_t **rData, uint32_t LogIdx)
|
|||||||
|
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: ReadPara
|
* 函数名称: ReadPara
|
||||||
* 功能描述: 读取参数
|
* 功能描述: 读取参数
|
||||||
* 参 数: Para, 网关参数
|
* 参 数: Para, 网关参数
|
||||||
ParaLen, 参数长度
|
ParaLen, 参数长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int ReadPara(uint8_t *Para, uint32_t ParaLen)
|
int ReadPara(uint8_t *Para, uint32_t ParaLen)
|
||||||
{
|
{
|
||||||
SpiFlashReadAnyLengthData(Para, GATEWEY_PARA_SAV_ADDR, ParaLen); //读取片尾数据
|
SpiFlashReadAnyLengthData(Para, GATEWEY_PARA_SAV_ADDR, ParaLen); //读取片尾数据
|
||||||
uint16_t Check = CRC_Modbus(0xA001, Para, ParaLen - 2);
|
uint16_t Check = CRC_Modbus(0xA001, Para, ParaLen - 2);
|
||||||
GWConfigPara CfgPara = (GWConfigPara)Para;
|
GWConfigPara CfgPara = (GWConfigPara)Para;
|
||||||
if(CfgPara->crc16 != Check)
|
if(CfgPara->crc16 != Check)
|
||||||
@@ -478,11 +478,11 @@ int ReadPara(uint8_t *Para, uint32_t ParaLen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
* 函数名称: WritePara
|
* 函数名称: WritePara
|
||||||
* 功能描述: 写入参数
|
* 功能描述: 写入参数
|
||||||
* 参 数: Para, 网关参数
|
* 参 数: Para, 网关参数
|
||||||
ParaLen, 参数长度
|
ParaLen, 参数长度
|
||||||
* 返 回 值: 无
|
* 返 回 值: 无
|
||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
int WritePara(uint8_t *Para, uint32_t ParaLen)
|
int WritePara(uint8_t *Para, uint32_t ParaLen)
|
||||||
{
|
{
|
||||||
@@ -491,7 +491,7 @@ int WritePara(uint8_t *Para, uint32_t ParaLen)
|
|||||||
uint16_t Check = CRC_Modbus(0xA001, Para, ParaLen - 2);
|
uint16_t Check = CRC_Modbus(0xA001, Para, ParaLen - 2);
|
||||||
GWConfigPara CfgPara = (GWConfigPara)Para;
|
GWConfigPara CfgPara = (GWConfigPara)Para;
|
||||||
CfgPara->crc16 = Check;
|
CfgPara->crc16 = Check;
|
||||||
SpiFlashWriteAnyLengthData(Para, GATEWEY_PARA_SAV_ADDR, ParaLen); //读取片尾数据
|
SpiFlashWriteAnyLengthData(Para, GATEWEY_PARA_SAV_ADDR, ParaLen); //读取片尾数据
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
生成多项式 (x^16 + x^15 + x^2 + 1)
|
鐢熸垚澶氶」寮?(x^16 + x^15 + x^2 + 1锛?
|
||||||
*/
|
*/
|
||||||
uint16_t modbus_crc16(uint8_t* data, int length)
|
uint16_t modbus_crc16(uint8_t* data, int length)
|
||||||
{
|
{
|
||||||
|
|
||||||
uint16_t crc = 0xFFFF; // 初始值FFFF
|
uint16_t crc = 0xFFFF; // 鍒濆鍊糉FFF
|
||||||
uint16_t polynomial = 0x8005; // 多项式8005
|
uint16_t polynomial = 0x8005; // 澶氶」寮?005
|
||||||
|
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
// 输入反转(REFIN):对每个字节进行位反转
|
// 杈撳叆鍙嶈浆(REFIN)锛氬姣忎釜瀛楄妭杩涜浣嶅弽杞?
|
||||||
uint8_t byte = data[i];
|
uint8_t byte = data[i];
|
||||||
uint8_t reversed_byte = 0;
|
uint8_t reversed_byte = 0;
|
||||||
|
|
||||||
@@ -19,10 +19,10 @@ uint16_t modbus_crc16(uint8_t* data, int length)
|
|||||||
byte >>= 1;
|
byte >>= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
crc ^= (reversed_byte << 8); // 与高字节异或
|
crc ^= (reversed_byte << 8); // 涓庨珮瀛楄妭寮傛垨
|
||||||
|
|
||||||
for (int j = 0; j < 8; j++) {
|
for (int j = 0; j < 8; j++) {
|
||||||
if (crc & 0x8000) { // 检查最高位
|
if (crc & 0x8000) { // 妫€鏌ユ渶楂樹綅
|
||||||
crc = (crc << 1) ^ polynomial;
|
crc = (crc << 1) ^ polynomial;
|
||||||
} else {
|
} else {
|
||||||
crc <<= 1;
|
crc <<= 1;
|
||||||
@@ -30,7 +30,7 @@ uint16_t modbus_crc16(uint8_t* data, int length)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 输出反转(REFOUT):对16位CRC结果进行位反转
|
// 杈撳嚭鍙嶈浆(REFOUT)锛氬16浣岰RC缁撴灉杩涜浣嶅弽杞?
|
||||||
uint16_t reversed_crc = 0;
|
uint16_t reversed_crc = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
@@ -38,6 +38,6 @@ uint16_t modbus_crc16(uint8_t* data, int length)
|
|||||||
crc >>= 1;
|
crc >>= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 结果异或值(XOROUT):0000(实际不变)
|
// 缁撴灉寮傛垨鍊?XOROUT)锛?000锛堝疄闄呬笉鍙橈級
|
||||||
return reversed_crc ^ 0x0000;
|
return reversed_crc ^ 0x0000;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user