Чет работает

This commit is contained in:
2025-12-16 17:57:59 +03:00
commit 260a6416ad
2906 changed files with 982301 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
LATEX_CMD?=pdflatex
MKIDX_CMD?=makeindex
BIBTEX_CMD?=bibtex
LATEX_COUNT?=8
MANUAL_FILE?=refman
all: $(MANUAL_FILE).pdf
pdf: $(MANUAL_FILE).pdf
$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex
$(LATEX_CMD) $(MANUAL_FILE) || \
if [ $$? != 0 ] ; then \
\echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \
false; \
fi
$(MKIDX_CMD) $(MANUAL_FILE).idx
$(LATEX_CMD) $(MANUAL_FILE) || \
if [ $$? != 0 ] ; then \
\echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \
false; \
fi
latex_count=$(LATEX_COUNT) ; \
while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\
do \
echo "Rerunning latex...." ;\
$(LATEX_CMD) $(MANUAL_FILE) || \
if [ $$? != 0 ] ; then \
\echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \
false; \
fi; \
latex_count=`expr $$latex_count - 1` ;\
done
$(MKIDX_CMD) $(MANUAL_FILE).idx
$(LATEX_CMD) $(MANUAL_FILE) || \
if [ $$? != 0 ] ; then \
\echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \
false; \
fi
clean:
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf

View File

@@ -0,0 +1,122 @@
\doxysection{\+\_\+\+\_\+crc\+\_\+algs.\+c}
\hypertarget{____crc__algs_8c_source}{}\label{____crc__algs_8c_source}\index{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Src/\_\_crc\_algs.c@{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Src/\_\_crc\_algs.c}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00001}00001\ \textcolor{preprocessor}{\#include\ "{}\_\_crc\_algs.h"{}}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00002}00002\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00003}00003\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00004}00004\ uint32\_t\ CRC\_calc;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00005}00005\ uint32\_t\ CRC\_ref;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00006}00006\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00007}00007\ \textcolor{comment}{//uint16\_t\ CRC\_calc;}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00008}00008\ \textcolor{comment}{//uint16\_t\ CRC\_ref;}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00009}00009\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00010}00010\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00011}00011\ \textcolor{comment}{//\ left\ this\ global\ for\ debug}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00012}00012\ uint8\_t\ uchCRCHi\ =\ 0xFF;\ \ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00013}00013\ uint8\_t\ uchCRCLo\ =\ 0xFF;\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00014}00014\ \textcolor{keywordtype}{unsigned}\ uIndex;\ \ \ \ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00015}00015\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00016}00016\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00017}00017\ uint32\_t\ crc32(uint8\_t\ *data,\ uint32\_t\ data\_size)}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00018}00018\ \{}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00019}00019\ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ crc32\_table[]\ =}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00020}00020\ \{}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00021}00021\ \ \ 0x00000000,\ 0x77073096,\ 0xEE0E612C,\ 0x990951BA,\ 0x076DC419,\ 0x706AF48F,\ 0xE963A535,\ 0x9E6495A3,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00022}00022\ \ \ 0x0EDB8832,\ 0x79DCB8A4,\ 0xE0D5E91E,\ 0x97D2D988,\ 0x09B64C2B,\ 0x7EB17CBD,\ 0xE7B82D07,\ 0x90BF1D91,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00023}00023\ \ \ 0x1DB71064,\ 0x6AB020F2,\ 0xF3B97148,\ 0x84BE41DE,\ 0x1ADAD47D,\ 0x6DDDE4EB,\ 0xF4D4B551,\ 0x83D385C7,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00024}00024\ \ \ 0x136C9856,\ 0x646BA8C0,\ 0xFD62F97A,\ 0x8A65C9EC,\ 0x14015C4F,\ 0x63066CD9,\ 0xFA0F3D63,\ 0x8D080DF5,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00025}00025\ \ \ 0x3B6E20C8,\ 0x4C69105E,\ 0xD56041E4,\ 0xA2677172,\ 0x3C03E4D1,\ 0x4B04D447,\ 0xD20D85FD,\ 0xA50AB56B,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00026}00026\ \ \ 0x35B5A8FA,\ 0x42B2986C,\ 0xDBBBC9D6,\ 0xACBCF940,\ 0x32D86CE3,\ 0x45DF5C75,\ 0xDCD60DCF,\ 0xABD13D59,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00027}00027\ \ \ 0x26D930AC,\ 0x51DE003A,\ 0xC8D75180,\ 0xBFD06116,\ 0x21B4F4B5,\ 0x56B3C423,\ 0xCFBA9599,\ 0xB8BDA50F,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00028}00028\ \ \ 0x2802B89E,\ 0x5F058808,\ 0xC60CD9B2,\ 0xB10BE924,\ 0x2F6F7C87,\ 0x58684C11,\ 0xC1611DAB,\ 0xB6662D3D,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00029}00029\ \ \ 0x76DC4190,\ 0x01DB7106,\ 0x98D220BC,\ 0xEFD5102A,\ 0x71B18589,\ 0x06B6B51F,\ 0x9FBFE4A5,\ 0xE8B8D433,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00030}00030\ \ \ 0x7807C9A2,\ 0x0F00F934,\ 0x9609A88E,\ 0xE10E9818,\ 0x7F6A0DBB,\ 0x086D3D2D,\ 0x91646C97,\ 0xE6635C01,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00031}00031\ \ \ 0x6B6B51F4,\ 0x1C6C6162,\ 0x856530D8,\ 0xF262004E,\ 0x6C0695ED,\ 0x1B01A57B,\ 0x8208F4C1,\ 0xF50FC457,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00032}00032\ \ \ 0x65B0D9C6,\ 0x12B7E950,\ 0x8BBEB8EA,\ 0xFCB9887C,\ 0x62DD1DDF,\ 0x15DA2D49,\ 0x8CD37CF3,\ 0xFBD44C65,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00033}00033\ \ \ 0x4DB26158,\ 0x3AB551CE,\ 0xA3BC0074,\ 0xD4BB30E2,\ 0x4ADFA541,\ 0x3DD895D7,\ 0xA4D1C46D,\ 0xD3D6F4FB,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00034}00034\ \ \ 0x4369E96A,\ 0x346ED9FC,\ 0xAD678846,\ 0xDA60B8D0,\ 0x44042D73,\ 0x33031DE5,\ 0xAA0A4C5F,\ 0xDD0D7CC9,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00035}00035\ \ \ 0x5005713C,\ 0x270241AA,\ 0xBE0B1010,\ 0xC90C2086,\ 0x5768B525,\ 0x206F85B3,\ 0xB966D409,\ 0xCE61E49F,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00036}00036\ \ \ 0x5EDEF90E,\ 0x29D9C998,\ 0xB0D09822,\ 0xC7D7A8B4,\ 0x59B33D17,\ 0x2EB40D81,\ 0xB7BD5C3B,\ 0xC0BA6CAD,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00037}00037\ \ \ 0xEDB88320,\ 0x9ABFB3B6,\ 0x03B6E20C,\ 0x74B1D29A,\ 0xEAD54739,\ 0x9DD277AF,\ 0x04DB2615,\ 0x73DC1683,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00038}00038\ \ \ 0xE3630B12,\ 0x94643B84,\ 0x0D6D6A3E,\ 0x7A6A5AA8,\ 0xE40ECF0B,\ 0x9309FF9D,\ 0x0A00AE27,\ 0x7D079EB1,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00039}00039\ \ \ 0xF00F9344,\ 0x8708A3D2,\ 0x1E01F268,\ 0x6906C2FE,\ 0xF762575D,\ 0x806567CB,\ 0x196C3671,\ 0x6E6B06E7,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00040}00040\ \ \ 0xFED41B76,\ 0x89D32BE0,\ 0x10DA7A5A,\ 0x67DD4ACC,\ 0xF9B9DF6F,\ 0x8EBEEFF9,\ 0x17B7BE43,\ 0x60B08ED5,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00041}00041\ \ \ 0xD6D6A3E8,\ 0xA1D1937E,\ 0x38D8C2C4,\ 0x4FDFF252,\ 0xD1BB67F1,\ 0xA6BC5767,\ 0x3FB506DD,\ 0x48B2364B,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00042}00042\ \ \ 0xD80D2BDA,\ 0xAF0A1B4C,\ 0x36034AF6,\ 0x41047A60,\ 0xDF60EFC3,\ 0xA867DF55,\ 0x316E8EEF,\ 0x4669BE79,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00043}00043\ \ \ 0xCB61B38C,\ 0xBC66831A,\ 0x256FD2A0,\ 0x5268E236,\ 0xCC0C7795,\ 0xBB0B4703,\ 0x220216B9,\ 0x5505262F,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00044}00044\ \ \ 0xC5BA3BBE,\ 0xB2BD0B28,\ 0x2BB45A92,\ 0x5CB36A04,\ 0xC2D7FFA7,\ 0xB5D0CF31,\ 0x2CD99E8B,\ 0x5BDEAE1D,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00045}00045\ \ \ 0x9B64C2B0,\ 0xEC63F226,\ 0x756AA39C,\ 0x026D930A,\ 0x9C0906A9,\ 0xEB0E363F,\ 0x72076785,\ 0x05005713,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00046}00046\ \ \ 0x95BF4A82,\ 0xE2B87A14,\ 0x7BB12BAE,\ 0x0CB61B38,\ 0x92D28E9B,\ 0xE5D5BE0D,\ 0x7CDCEFB7,\ 0x0BDBDF21,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00047}00047\ \ \ 0x86D3D2D4,\ 0xF1D4E242,\ 0x68DDB3F8,\ 0x1FDA836E,\ 0x81BE16CD,\ 0xF6B9265B,\ 0x6FB077E1,\ 0x18B74777,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00048}00048\ \ \ 0x88085AE6,\ 0xFF0F6A70,\ 0x66063BCA,\ 0x11010B5C,\ 0x8F659EFF,\ 0xF862AE69,\ 0x616BFFD3,\ 0x166CCF45,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00049}00049\ \ \ 0xA00AE278,\ 0xD70DD2EE,\ 0x4E048354,\ 0x3903B3C2,\ 0xA7672661,\ 0xD06016F7,\ 0x4969474D,\ 0x3E6E77DB,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00050}00050\ \ \ 0xAED16A4A,\ 0xD9D65ADC,\ 0x40DF0B66,\ 0x37D83BF0,\ 0xA9BCAE53,\ 0xDEBB9EC5,\ 0x47B2CF7F,\ 0x30B5FFE9,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00051}00051\ \ \ 0xBDBDF21C,\ 0xCABAC28A,\ 0x53B39330,\ 0x24B4A3A6,\ 0xBAD03605,\ 0xCDD70693,\ 0x54DE5729,\ 0x23D967BF,\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00052}00052\ \ \ 0xB3667A2E,\ 0xC4614AB8,\ 0x5D681B02,\ 0x2A6F2B94,\ 0xB40BBE37,\ 0xC30C8EA1,\ 0x5A05DF1B,\ 0x2D02EF8D}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00053}00053\ \};\ \ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00054}00054\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ crc\ =\ 0xFFFFFFFF;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00055}00055\ \ \ \textcolor{keywordflow}{while}\ (data\_size-\/-\/)}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00056}00056\ \ \ \ \ \{}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00057}00057\ \ \ \ \ \ \ crc\ =\ (crc\ >>\ 8)\ \string^\ crc32\_table[(crc\ \string^\ *data)\ \&\ 255];}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00058}00058\ \ \ \ \ \ \ data++;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00059}00059\ \ \ \ \ \}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00060}00060\ \ \ \textcolor{keywordflow}{return}\ crc\string^0xFFFFFFFF;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00061}00061\ \}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00062}00062\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00063}00063\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00064}00064\ uint16\_t\ crc16(uint8\_t\ *data,\ uint32\_t\ data\_size)}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00065}00065\ \{\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00066}00066\ \ \ \textcolor{comment}{/*Table\ of\ CRC\ values\ for\ high\ order\ byte*/}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00067}00067\ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char}\ auchCRCHi[]=}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00068}00068\ \ \ \{}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00069}00069\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00070}00070\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00071}00071\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00072}00072\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00073}00073\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00074}00074\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00075}00075\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00076}00076\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00077}00077\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00078}00078\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00079}00079\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00080}00080\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00081}00081\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00082}00082\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00083}00083\ \ \ \ \ \ \ 0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00084}00084\ \ \ \ \ \ \ 0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00085}00085\ \ \ \};}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00086}00086\ \ \ \textcolor{comment}{/*Table\ of\ CRC\ values\ for\ low\ order\ byte*/}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00087}00087\ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{char}\ auchCRCLo[]\ =}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00088}00088\ \ \ \{}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00089}00089\ \ \ \ \ \ \ \ \ \ \ 0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00090}00090\ \ \ \ \ \ \ \ \ \ \ 0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00091}00091\ \ \ \ \ \ \ \ \ \ \ 0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00092}00092\ \ \ \ \ \ \ \ \ \ \ 0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00093}00093\ \ \ \ \ \ \ \ \ \ \ 0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00094}00094\ \ \ \ \ \ \ \ \ \ \ 0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00095}00095\ \ \ \ \ \ \ \ \ \ \ 0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00096}00096\ \ \ \ \ \ \ \ \ \ \ 0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00097}00097\ \ \ \ \ \ \ \ \ \ \ 0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00098}00098\ \ \ \ \ \ \ \ \ \ \ 0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00099}00099\ \ \ \ \ \ \ \ \ \ \ 0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00100}00100\ \ \ \ \ \ \ \ \ \ \ 0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00101}00101\ \ \ \ \ \ \ \ \ \ \ 0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00102}00102\ \ \ \ \ \ \ \ \ \ \ 0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00103}00103\ \ \ \ \ \ \ \ \ \ \ 0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00104}00104\ \ \ \ \ \ \ \ \ \ \ 0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40,}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00105}00105\ \ \ \ \ \ \ \};}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00106}00106\ \ \ uchCRCHi\ =\ 0xFF;\ \ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00107}00107\ \ \ uchCRCLo\ =\ 0xFF;\ \ \ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00108}00108\ \ \ \ \ \textcolor{comment}{/*\ CRC\ Generation\ Function\ */}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00109}00109\ \ \ \textcolor{keywordflow}{while}(\ data\_size-\/-\/)\ \textcolor{comment}{/*\ pass\ through\ message\ buffer\ */}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00110}00110\ \ \ \{}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00111}00111\ \ \ \ \ uIndex\ =\ uchCRCHi\ \string^\ *data++;\ \textcolor{comment}{/*\ calculate\ the\ CRC\ */}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00112}00112\ \ \ \ \ uchCRCHi\ =\ uchCRCLo\ \string^\ auchCRCHi[uIndex];}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00113}00113\ \ \ \ \ uchCRCLo\ =\ auchCRCLo[uIndex];}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00114}00114\ \ \ \}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00115}00115\ \ \ \textcolor{keywordflow}{return}\ uchCRCHi\ |\ uchCRCLo<<8;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8c_source_l00116}00116\ \}\ }
\end{DoxyCode}

View File

@@ -0,0 +1,15 @@
\doxysection{\+\_\+\+\_\+crc\+\_\+algs.\+h}
\hypertarget{____crc__algs_8h_source}{}\label{____crc__algs_8h_source}\index{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Inc/\_\_crc\_algs.h@{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Inc/\_\_crc\_algs.h}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00001}00001\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{modbus__config_8h}{modbus\_config.h}}"{}}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00002}00002\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00003}00003\ \textcolor{comment}{//\ extern\ here\ to\ use\ in\ bootloader.c}}
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00004}00004\ \textcolor{keyword}{extern}\ uint32\_t\ CRC\_calc;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00005}00005\ \textcolor{keyword}{extern}\ uint32\_t\ CRC\_ref;}
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00006}00006\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00007}00007\ }
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00008}00008\ uint16\_t\ crc16(uint8\_t\ *data,\ uint32\_t\ data\_size);}
\DoxyCodeLine{\Hypertarget{____crc__algs_8h_source_l00009}00009\ uint32\_t\ crc32(uint8\_t\ *data,\ uint32\_t\ data\_size);}
\end{DoxyCode}

View File

@@ -0,0 +1,24 @@
\doxysection{E\+:/.WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\+\_\+\+\_\+modbus\+\_\+compat.c File Reference}
\hypertarget{____modbus__compat_8c}{}\label{____modbus__compat_8c}\index{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Src/\_\_modbus\_compat.c@{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Src/\_\_modbus\_compat.c}}
Модуль для совместимости библиотеки MODBUS.
{\ttfamily \#include "{}modbus.\+h"{}}\newline
Include dependency graph for \+\_\+\+\_\+modbus\+\_\+compat.\+c\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{____modbus__compat_8c__incl}
\end{center}
\end{figure}
\doxysubsection{Detailed Description}
Модуль для совместимости библиотеки MODBUS.
Definition in file \mbox{\hyperlink{____modbus__compat_8c_source}{\+\_\+\+\_\+modbus\+\_\+compat.\+c}}.

View File

@@ -0,0 +1 @@
cb67cd7f9499693ebe32a59bddc436f7

View File

@@ -0,0 +1,13 @@
\doxysection{\+\_\+\+\_\+modbus\+\_\+compat.\+c}
\hypertarget{____modbus__compat_8c_source}{}\label{____modbus__compat_8c_source}\index{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Src/\_\_modbus\_compat.c@{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Src/\_\_modbus\_compat.c}}
\mbox{\hyperlink{____modbus__compat_8c}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8c_source_l00001}00001\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8c_source_l00002}00002\ \textcolor{comment}{*******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8c_source_l00003}00003\ \textcolor{comment}{*\ @file\ \_\_modbus\_compat.c}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8c_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Модуль\ для\ совместимости\ библиотеки\ MODBUS.}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8c_source_l00005}00005\ \textcolor{comment}{*******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8c_source_l00006}00006\ \textcolor{comment}{******************************************************************************/}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8c_source_l00007}00007\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{modbus_8h}{modbus.h}}"{}}}
\end{DoxyCode}

View File

@@ -0,0 +1,31 @@
\doxysection{E\+:/.WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\+\_\+\+\_\+modbus\+\_\+compat.h File Reference}
\hypertarget{____modbus__compat_8h}{}\label{____modbus__compat_8h}\index{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Inc/\_\_modbus\_compat.h@{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Inc/\_\_modbus\_compat.h}}
Модуль для совместимости библиотеки MODBUS.
{\ttfamily \#include "{}modbus\+\_\+core.\+h"{}}\newline
Include dependency graph for \+\_\+\+\_\+modbus\+\_\+compat.\+h\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=298pt]{____modbus__compat_8h__incl}
\end{center}
\end{figure}
This graph shows which files directly or indirectly include this file\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{____modbus__compat_8h__dep__incl}
\end{center}
\end{figure}
\doxysubsection{Detailed Description}
Модуль для совместимости библиотеки MODBUS.
Файл содержит API старых функций, а также заглушки для отключенных модулей\+:
Definition in file \mbox{\hyperlink{____modbus__compat_8h_source}{\+\_\+\+\_\+modbus\+\_\+compat.\+h}}.

View File

@@ -0,0 +1 @@
708122c828e1b48aefbac0e76f738749

View File

@@ -0,0 +1 @@
274484ae78d0695f8d4a4ef17d474eaf

View File

@@ -0,0 +1,124 @@
\doxysection{\+\_\+\+\_\+modbus\+\_\+compat.\+h}
\hypertarget{____modbus__compat_8h_source}{}\label{____modbus__compat_8h_source}\index{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Inc/\_\_modbus\_compat.h@{E:/.WORK/STM32/Diod\_Test/diode\_tester/Core/Modbus/Inc/\_\_modbus\_compat.h}}
\mbox{\hyperlink{____modbus__compat_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00001}00001\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00002}00002\ \textcolor{comment}{*******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ \_\_modbus\_compat.h}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Модуль\ для\ совместимости\ библиотеки\ MODBUS.}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00005}00005\ \textcolor{comment}{*******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00006}00006\ \textcolor{comment}{*\ @details\ Файл\ содержит\ API\ старых\ функций,\ а\ также\ заглушки\ для\ отключенных\ модулей:}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00007}00007\ \textcolor{comment}{******************************************************************************/}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00008}00008\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{modbus__core_8h}{modbus\_core.h}}"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00009}00009\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00010}00010\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00011}00011\ \textcolor{comment}{/**\ @addtogroup\ MODBUS\_LEGACY\_API\ Legacy\ API\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00012}00012\ \textcolor{comment}{\ \ *\ @ingroup\ MODBUS\_FUNCTIONS}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00013}00013\ \textcolor{comment}{\ \ *\ @brief\ Старые\ API\ функций,\ сохранённые\ для\ обратной\ совместимости.}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00014}00014\ \textcolor{comment}{\ \ *\ @note\ \ \ Не\ используйте\ эти\ функции\ в\ новом\ коде.\ Они\ могут\ быть\ удалены\ в\ будущих\ версиях.}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00015}00015\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ Вместо\ них\ используйте\ функции\ из\ основных\ групп\ MODBUS\ API.}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00016}00016\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00017}00017\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00018}00018\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00019}00019\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00020}00020\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00021}00021\ \textcolor{comment}{/**\ MODBUS\_LEGACY\_API}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00022}00022\ \textcolor{comment}{\ \ *\ @\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00023}00023\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00024}00024\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00025}00025\ \textcolor{comment}{/**\ @cond\ Заглушки\ отключенных\ модулей\ */}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00026}00026\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00027}00027\ \textcolor{preprocessor}{\#ifndef\ MODBUS\_ENABLE\_COILS}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00028}00028\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Coil\_Write\_Global(Addr,\ WriteVal)\ ET\_ILLEGAL\_FUNCTION}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00029}00029\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Coil\_Read\_Global(Addr,\ Exception)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00030}00030\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Read\_Coils(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00031}00031\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Write\_Single\_Coil(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00032}00032\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Write\_Miltuple\_Coils(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00033}00033\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00034}00034\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00035}00035\ \textcolor{preprocessor}{\#ifndef\ MODBUS\_ENABLE\_HOLDINGS}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00036}00036\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Holding\_Write\_Global(Addr,\ WriteVal)\ ET\_ILLEGAL\_FUNCTION}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00037}00037\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Holding\_Read\_Global(Addr,\ Exception)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00038}00038\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Read\_Hold\_Regs(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00039}00039\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Write\_Single\_Reg(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00040}00040\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Write\_Miltuple\_Regs(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00041}00041\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00042}00042\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00043}00043\ \textcolor{preprocessor}{\#ifndef\ MODBUS\_ENABLE\_INPUTS}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00044}00044\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Input\_Write\_Global(Addr,\ WriteVal)\ ET\_ILLEGAL\_FUNCTION}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00045}00045\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Input\_Read\_Global(Addr,\ Exception)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00046}00046\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Read\_Input\_Regs(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00047}00047\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00048}00048\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00049}00049\ \textcolor{preprocessor}{\#ifndef\ MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00050}00050\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_WriteSingleObjectToMessage(mbdata,\ ind,\ obj)\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00051}00051\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_WriteObjectsToMessage(modbus\_msg,\ maxidofobj)\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00052}00052\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Read\_Device\_Identifications(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00053}00053\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_DeviceInentificationInit()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00054}00054\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00055}00055\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00056}00056\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00057}00057\ \textcolor{preprocessor}{\#ifndef\ MODBUS\_ENABLE\_DIAGNOSTICS}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00058}00058\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_DiagnosticsInit()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00059}00059\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_WriteBit(bit\_num,\ bit\_state)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00060}00060\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_GetBit(bit\_num)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00061}00061\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Process\_Diagnostics(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00062}00062\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_BusMessageCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00063}00063\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_CommunicationErrorCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00064}00064\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_ExceptionErrorCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00065}00065\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_CharacterOverrunCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00066}00066\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_SlaveMessageCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00067}00067\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_SlaveNoResponseCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00068}00068\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_SlaveNAKCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00069}00069\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Diagnostics\_SlaveBusyCnt()\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00070}00070\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_GetDeviceMode(void)\ MODBUS\_NORMAL\_MODE}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00071}00071\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00072}00072\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00073}00073\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00074}00074\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00075}00075\ \textcolor{preprocessor}{\#ifndef\ MODBUS\_ENABLE\_MASTER}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00076}00076\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_RespGet\_RegisterValue(modbus\_msg,\ reg\_addr,\ reg\_value)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00077}00077\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_RespGet\_CoilState(modbus\_msg,\ coil\_addr,\ coil\_state)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00078}00078\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_RespGet\_NumberOfObjects(modbus\_msg)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00079}00079\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_RespGet\_ObjectById(modbus\_msg,\ obj\_id,\ obj\_data,\ obj\_length)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00080}00080\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_RespGet\_ObjectByIndex(modbus\_msg,\ index,\ obj\_id,\ obj\_data,\ obj\_length)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00081}00081\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_RespGet\_Diagnostic(modbus\_msg,\ data)\ 0}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00082}00082\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_COILS(slave\_addr,\ start\_addr,\ quantity)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00083}00083\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_DISCRETE\_INPUTS(slave\_addr,\ start\_addr,\ quantity)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00084}00084\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_HOLDING\_REGS(slave\_addr,\ start\_addr,\ quantity)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00085}00085\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_INPUT\_REGS(slave\_addr,\ start\_addr,\ quantity)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00086}00086\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_WRITE\_SINGLE\_COIL(slave\_addr,\ coil\_addr,\ value)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00087}00087\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_WRITE\_SINGLE\_REG(slave\_addr,\ reg\_addr,\ value)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00088}00088\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_WRITE\_MULTIPLE\_COILS(slave\_addr,\ start\_addr,\ quantity,\ coils\_data)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00089}00089\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_WRITE\_MULTIPLE\_REGS(slave\_addr,\ start\_addr,\ quantity,\ regs\_data)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00090}00090\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_DIAGNOSTIC\_QUERY(slave\_addr,\ sub\_function,\ data)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00091}00091\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_QUERY\_DATA(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00092}00092\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RESTART\_COMMUNICATIONS(slave\_addr,\ data)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00093}00093\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_DIAGNOSTIC\_REGISTER(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00094}00094\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_FORCE\_LISTEN\_ONLY\_MODE(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00095}00095\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_CLEAR\_COUNTERS\_AND\_DIAGNOSTIC\_REGISTER(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00096}00096\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_BUS\_MESSAGE\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00097}00097\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_BUS\_COMMUNICATION\_ERROR\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00098}00098\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_SLAVE\_EXCEPTION\_ERROR\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00099}00099\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_SLAVE\_MESSAGE\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00100}00100\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_SLAVE\_NO\_RESPONSE\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00101}00101\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_SLAVE\_NAK\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00102}00102\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_SLAVE\_BUSY\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00103}00103\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_RETURN\_BUS\_CHARACTER\_OVERRUN\_COUNT(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00104}00104\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_DEVICE\_ID\_BASIC(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00105}00105\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_DEVICE\_ID\_REGULAR(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00106}00106\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_DEVICE\_ID\_EXTENDED(slave\_addr)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00107}00107\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_REQUEST\_READ\_DEVICE\_ID\_SPECIFIC(slave\_addr,\ object\_id)\ \{0\}}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00108}00108\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Master\_Collect\_Message(hmodbus,\ modbus\_msg,\ modbus\_uart\_buff)\ RS\_ERR}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00109}00109\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Master\_Parse\_Message(hmodbus,\ modbus\_msg,\ modbus\_uart\_buff)\ RS\_ERR}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00110}00110\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00111}00111\ }
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00112}00112\ \textcolor{preprocessor}{\#ifndef\ \ MODBUS\_ENABLE\_SLAVE}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00113}00113\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Slave\_Response(hmodbus,\ modbus\_msg)\ RS\_ERR}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00114}00114\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Slave\_Collect\_Message(hmodbus,\ modbus\_msg,\ modbus\_uart\_buff)\ RS\_ERR}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00115}00115\ \textcolor{preprocessor}{\ \ \ \ \#define\ MB\_Slave\_Parse\_Message(hmodbus,\ modbus\_msg,\ modbus\_uart\_buff)\ RS\_ERR}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00116}00116\ \textcolor{preprocessor}{\#endif\ }}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00117}00117\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__compat_8h_source_l00118}00118\ \textcolor{comment}{/**\ @endcond\ */}}
\end{DoxyCode}

View File

@@ -0,0 +1,76 @@
\doxysection{E\+:/.WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+\_\+\+\_\+modbus\+\_\+config.h}
\hypertarget{____modbus__config_8h_source}{}\label{____modbus__config_8h_source}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00001}00001\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00002}00002\ \textcolor{comment}{******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ modbus\_config.h}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Конфигурационные\ параметры\ Modbus\ устройства}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00005}00005\ \textcolor{comment}{******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00006}00006\ \textcolor{comment}{@addtogroup\ MODBUS\_CONFIGS\ Modbus\ configs}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00007}00007\ \textcolor{comment}{@ingroup\ \ \ \ MODBUS}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00008}00008\ \textcolor{comment}{@brief\ Конфигурация\ библиотеки}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00009}00009\ \textcolor{comment}{@\{}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00010}00010\ \textcolor{comment}{******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00011}00011\ \textcolor{comment}{*\ @details}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00012}00012\ \textcolor{comment}{Файл\ содержит\ настройки\ для\ работы\ Modbus:}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00013}00013\ \textcolor{comment}{-\/\ Подключение\ библиотек\ контроллера}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00014}00014\ \textcolor{comment}{-\/\ ID\ устройства\ и\ таймауты}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00015}00015\ \textcolor{comment}{-\/\ Строковые\ идентификаторы\ (Vendor,\ Product,\ Revision)}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00016}00016\ \textcolor{comment}{-\/\ Настройки\ периферии\ (UART,\ TIMER)}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00017}00017\ \textcolor{comment}{-\/\ Подключение\ модулей\ Modbus}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00018}00018\ \textcolor{comment}{-\/\ Опциональные\ функции\ (переключение\ команд\ 0x03/0x04)}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00019}00019\ \textcolor{comment}{******************************************************************************/}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00020}00020\ \textcolor{preprocessor}{\#ifndef\ \_MODBUS\_CONFIG\_H\_}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00021}00021\ \textcolor{preprocessor}{\#define\ \_MODBUS\_CONFIG\_H\_}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00022}00022\ \textcolor{preprocessor}{\#include\ "{}stm32f1xx\_hal.h"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00023}00023\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00024}00024\ \textcolor{comment}{//\ Общие\ параметры}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00025}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gab9b18e108b98b225a52c5ccca58e7f2b}{00025}}\ \textcolor{preprocessor}{\#define\ MODBUS\_DEVICE\_ID\ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ }\textcolor{comment}{///<\ Адрес\ устройства\ в\ сети\ Modbus}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00026}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga66f7c59a25c8cca6d5b0991895c26b69}{00026}}\ \textcolor{preprocessor}{\#define\ MODBUS\_TIMEOUT\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 5000\ \ \ \ }\textcolor{comment}{///<\ Таймаут\ в\ тиках\ таймера}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00027}00027\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00028}00028\ \textcolor{comment}{//\ Строковые\ идентификаторы\ устройства}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00029}00029\ \textcolor{preprocessor}{\#define\ MODBUS\_VENDOR\_NAME\ \ \ \ \ \ \ \ \ \ \ \ "{}NIO-\/12"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00030}00030\ \textcolor{preprocessor}{\#define\ MODBUS\_PRODUCT\_CODE\ \ \ \ \ \ \ \ \ \ \ "{}"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00031}00031\ \textcolor{preprocessor}{\#define\ MODBUS\_REVISION\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00032}00032\ \textcolor{preprocessor}{\#define\ MODBUS\_VENDOR\_URL\ \ \ \ \ \ \ \ \ \ \ \ \ "{}"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00033}00033\ \textcolor{preprocessor}{\#define\ MODBUS\_PRODUCT\_NAME\ \ \ \ \ \ \ \ \ \ \ "{}"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00034}00034\ \textcolor{preprocessor}{\#define\ MODBUS\_MODEL\_NAME\ \ \ \ \ \ \ \ \ \ \ \ \ "{}"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00035}00035\ \textcolor{preprocessor}{\#define\ MODBUS\_USER\_APPLICATION\_NAME\ \ "{}"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00036}00036\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00037}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5c7e9c2180ceac1208f4b791d7b70a0a}{00037}}\ \textcolor{preprocessor}{\#define\ MODBUS\_NUMB\_OF\_USEROBJECTS\ \ \ \ 0\ \ \ }\textcolor{comment}{///<\ Количество\ пользовательских\ объектов}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00038}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gac3b162e9af2731742eb3ca8317b37397}{00038}}\ \textcolor{preprocessor}{\#define\ MODBUS\_USEROBJECT\_0\_NAME\ \ \ \ \ \ "{}"{}\ \ }\textcolor{comment}{///<\ Строка\ пользовательского\ идентификатора\ 0.\ По\ аналогии\ можно\ определить\ строки\ до\ <=128\ USEROBJECT}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00039}00039\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00040}00040\ \textcolor{comment}{//\ Периферия\ (опционально)}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00041}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga370986118b8227cb6cb33c6b748fbbcb}{00041}}\ \textcolor{preprocessor}{\#define\ mb\_huart\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ huart1\ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Удобный\ дефайн\ для\ модбасовского\ uart}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00042}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga6723a1608946a4f86cd7c9c7e614d04e}{00042}}\ \textcolor{preprocessor}{\#define\ mb\_htim\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ htim3\ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Удобный\ дефайн\ для\ модбасовского\ таймера}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00043}00043\ \textcolor{comment}{//\#define\ RS\_EnableReceive()\ \ \ \ \ \ \ \ \ \ ///<\ Функция\ изменения\ направления\ передачи\ на\ ПРИЕМ\ для\ RS-\/485}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00044}00044\ \textcolor{comment}{//\#define\ RS\_EnableTransmit()\ \ \ \ \ \ \ \ \ ///<\ Функция\ изменения\ направления\ передачи\ на\ ПЕРЕДАЧУ\ для\ RS-\/485}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00045}00045\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00046}00046\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00047}00047\ \textcolor{comment}{//\ Модули\ modbus}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00048}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae11f9ed7ca5e75d332a1187d2a213f9c}{00048}}\ \textcolor{preprocessor}{\#define\ MODBUS\_ENABLE\_SLAVE\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ обработку\ СЛЕЙВ\ режима}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00049}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae4fc30421556e1ee530f13a4b3924f5a}{00049}}\ \textcolor{preprocessor}{\#define\ MODBUS\_ENABLE\_MASTER\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ обработку\ МАСТЕР\ режима}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00050}00050\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00051}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga29ce22b8b7f0622bc23171c6ae2dc8d1}{00051}}\ \textcolor{preprocessor}{\#define\ MODBUS\_ENABLE\_COILS\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ обработку\ коилов}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00052}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gaf6a8dfc090b3915d668d78ee19585344}{00052}}\ \textcolor{preprocessor}{\#define\ MODBUS\_ENABLE\_HOLDINGS\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ обработку\ регистров\ хранения}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00053}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga23d7073c81bedb80a302140afd0d79c0}{00053}}\ \textcolor{preprocessor}{\#define\ MODBUS\_ENABLE\_INPUTS\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ обработку\ входных\ регистров}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00054}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5bf9f305bd863b10f1b350c5004ddda7}{00054}}\ \textcolor{preprocessor}{\#define\ MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS\ \ }\textcolor{comment}{///<\ Включить\ обработку\ идентификаторы\ устройства}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00055}\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae68222efbcf3199706bfaef46af97bf8}{00055}}\ \textcolor{preprocessor}{\#define\ MODBUS\_ENABLE\_DIAGNOSTICS\ \ \ \ \ \ \ \ \ \ \ \ \ }\textcolor{comment}{///<\ Включить\ обработку\ диагностики\ модбас}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00056}00056\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00057}00057\ \textcolor{comment}{//\#define\ MODBUS\_PROTOCOL\_TCP\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ///<\ Включить\ TCP-\/протокол,\ иначе\ -\/\ RTU}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00058}00058\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00059}00059\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00060}00060\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ Поменять\ комманды\ 0x03\ и\ 0x04\ местами\ (для\ LabView\ терминалки\ от\ двигателей)}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00061}00061\ \textcolor{comment}{\ \ *\ @details\ \ Терминалка\ от\ двигателей\ использует\ для\ чтения\ регистров\ комманду\ R\_HOLD\_REGS\ вместо\ R\_IN\_REGS}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00062}00062\ \textcolor{comment}{\ \ *\ \ \ \ \ \ \ \ \ \ \ Поэтому\ чтобы\ считывать\ Input\ Regs\ -\/\ надо\ поменять\ их\ местами.}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00063}00063\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00064}00064\ \textcolor{comment}{//\#define\ MODBUS\_SWITCH\_COMMAND\_R\_IN\_REGS\_AND\_R\_HOLD\_REGS}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00065}00065\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00066}00066\ \textcolor{comment}{/////////////////////////////////////////////////////////////////////}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00067}00067\ \textcolor{comment}{/////////////////////////-\/-\/-\/CALC\ DEFINES-\/-\/-\///////////////////////////}}
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00068}00068\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00069}00069\ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00070}00070\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__config_8h_source_l00071}00071\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_MODBUS\_CONFIG\_H\_}}
\end{DoxyCode}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,164 @@
\doxysection{E\+:/.WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+\_\+\+\_\+modbus\+\_\+data.h}
\hypertarget{____modbus__data_8h_source}{}\label{____modbus__data_8h_source}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00001}00001\ \textcolor{comment}{/**}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00002}00002\ \textcolor{comment}{******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00003}00003\ \textcolor{comment}{*\ @file\ modbus\_data.h}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00004}00004\ \textcolor{comment}{*\ @brief\ Определения\ структур\ данных\ Modbus\ устройства}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00005}00005\ \textcolor{comment}{******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00006}00006\ \textcolor{comment}{@defgroup\ MODBUS\_DATA\ Modbus\ Registers\ Map}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00007}00007\ \textcolor{comment}{@ingroup\ MODBUS}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00008}00008\ \textcolor{comment}{@brief\ Определение\ карты\ регистров\ и\ коилов}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00009}00009\ \textcolor{comment}{******************************************************************************}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00010}00010\ \textcolor{comment}{*\ @details}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00011}00011\ \textcolor{comment}{Файл\ содержит\ объявления\ структур\ данных,\ доступных\ через\ Modbus:}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00012}00012\ \textcolor{comment}{-\/\ Holding\ Registers\ (R/W)\ -\/\ регистры\ хранения}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00013}00013\ \textcolor{comment}{-\/\ Input\ Registers\ (R/O)\ -\/\ входные\ регистры\ \ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00014}00014\ \textcolor{comment}{-\/\ Coils\ (R/W)\ -\/\ дискретные\ выходы}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00015}00015\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00016}00016\ \textcolor{comment}{@section\ datinit\ Базовая\ настройка\ под\ устройство:}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00017}00017\ \textcolor{comment}{1.\ Настроить\ диапазоны\ адресов}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00018}00018\ \textcolor{comment}{\ \ -\/\ @ref\ R\_INPUT\_ADDR\ и\ @ref\ R\_INPUT\_QNT\ для\ входных\ регистров}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00019}00019\ \textcolor{comment}{\ \ -\/\ @ref\ R\_HOLDING\_ADDR\ и\ @ref\ R\_HOLDING\_QNT\ для\ регистров\ хр\ анения}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00020}00020\ \textcolor{comment}{\ \ -\/\ @ref\ C\_COILS\_ADDR\ и\ @ref\ C\_COILS\_ADDR\ для\ коилов}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00021}00021\ \textcolor{comment}{3.\ Настроить\ структуры\ данных:}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00022}00022\ \textcolor{comment}{\ \ -\/\ @ref\ MB\_DataInRegsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00023}00023\ \textcolor{comment}{\ \ -\/\ @ref\ MB\_DataHoldRegsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00024}00024\ \textcolor{comment}{\ \ -\/\ @ref\ MB\_DataCoilsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00025}00025\ \textcolor{comment}{\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00026}00026\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00027}00027\ \textcolor{comment}{@section\ datexpert\ Расширенная\ настройка\ под\ устройство:}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00028}00028\ \textcolor{comment}{1.\ Добавить\ новый\ массив\ с\ нужными\ данными.}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00029}00029\ \textcolor{comment}{2.\ Добавить\ дефайны\ для\ определения\ его\ начального\ адреса\ и\ количества\ элементов}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00030}00030\ \textcolor{comment}{3.\ Добавить\ проверку\ адресов\ в\ MB\_DefineRegistersAddress/MB\_DefineCoilsAddress.\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00031}00031\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00032}00032\ \textcolor{comment}{\ \ \ Пример:}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00033}00033\ \textcolor{comment}{\ \ \ @code}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00034}00034\ \textcolor{comment}{\ \ \ \ \#define\ \ \ R\_USER\_ADDR\ \ \ \ \ \ \ \ 555}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00035}00035\ \textcolor{comment}{\ \ \ \ \#define\ \ \ R\_USER\_QNT\ \ \ \ \ \ \ \ \ 16}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00036}00036\ \textcolor{comment}{\ \ \ \ uint16\_t\ \ user\_regs[16];}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00037}00037\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00038}00038\ \textcolor{comment}{\ \ \ \ //...}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00039}00039\ \textcolor{comment}{\ \ \ \ else\ if(MB\_Check\_Address\_For\_Arr(Addr,\ Qnt,\ R\_USER\_ADDR,\ R\_USER\_QNT)\ ==\ ET\_NO\_ERRORS)}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00040}00040\ \textcolor{comment}{\ \ \ \ \{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00041}00041\ \textcolor{comment}{\ \ \ \ \ \ *pRegs\ =\ MB\_Set\_Register\_Ptr(\&user\_regs,\ Addr-\/R\_USER\_ADDR);\ //\ ВАЖНО!}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00042}00042\ \textcolor{comment}{\ \ \ \ \ \ //\ -\/R\_USER\_ADDR\ нужен\ чтобы\ взять\ адрес\ относительно\ начала\ массива}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00043}00043\ \textcolor{comment}{\ \ \ \ \}}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00044}00044\ \textcolor{comment}{\ \ \ \ else\ \ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00045}00045\ \textcolor{comment}{\ \ \ \ \{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00046}00046\ \textcolor{comment}{\ \ \ \ \ \ return\ ET\_ILLEGAL\_DATA\_ADDRESS;}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00047}00047\ \textcolor{comment}{\ \ \ \ \}}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00048}00048\ \textcolor{comment}{\ \ \ @endcode}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00049}00049\ \textcolor{comment}{******************************************************************************/}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00050}00050\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00051}00051\ \textcolor{preprocessor}{\#ifndef\ \_MODBUS\_DATA\_H\_}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00052}00052\ \textcolor{preprocessor}{\#define\ \_MODBUS\_DATA\_H\_}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00053}00053\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00054}00054\ \textcolor{preprocessor}{\#include\ "{}stdint.h"{}}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00055}00055\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00056}00056\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00057}00057\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00058}00058\ \textcolor{comment}{//-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/SIZES\ OF\ DATA-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00059}00059\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00060}00060\ \textcolor{comment}{//\ DEFINES\ FOR\ INPUT\ REGISTERS\ ARRAYS}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00061}00061\ \textcolor{preprocessor}{\#define\ \ \ R\_INPUT\_ADDR\ \ \ \ \ \ \ \ 0\ \ \ }\textcolor{comment}{///<\ Начальный\ адрес\ входных\ регистров}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00062}00062\ \textcolor{preprocessor}{\#define\ \ \ R\_INPUT\_QNT\ \ \ \ \ \ \ \ \ 16\ \ }\textcolor{comment}{///<\ Количество\ входных\ регистров}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00063}00063\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00064}00064\ \textcolor{comment}{//\ DEFINES\ FOR\ HOLDING\ REGISTERS\ ARRAYS}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00065}00065\ \textcolor{preprocessor}{\#define\ \ \ R\_HOLDING\_ADDR\ \ \ \ \ \ 0\ \ \ }\textcolor{comment}{///<\ Начальный\ адрес\ регистров\ хранения}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00066}00066\ \textcolor{preprocessor}{\#define\ \ \ R\_HOLDING\_QNT\ \ \ \ \ \ \ 16\ \ }\textcolor{comment}{///<\ Количество\ регистров\ хранения}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00067}00067\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00068}00068\ \textcolor{comment}{//\ DEFINES\ FOR\ COIL\ ARRAYS}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00069}00069\ \textcolor{preprocessor}{\#define\ \ \ C\_COILS\_ADDR\ \ \ \ \ \ \ \ 0\ \ \ }\textcolor{comment}{///<\ Начальный\ адрес\ коилов}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00070}00070\ \textcolor{preprocessor}{\#define\ \ \ C\_COILS\_QNT\ \ \ \ \ \ \ \ \ 16\ \ }\textcolor{comment}{///<\ Количество\ регистров\ коилов}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00071}00071\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00072}00072\ \textcolor{comment}{//-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/DEFINES\ FOR\ REGISTERS-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00073}00073\ \textcolor{comment}{//\ DEFINES\ FOR\ ARRAYS}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00074}00074\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00075}00075\ \textcolor{comment}{\ \ *\ @addtogroup\ MODBUS\_DATA\_RERISTERS\_DEFINES\ Registers\ structures}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00076}00076\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MODBUS\_DATA}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00077}00077\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Стуруктура\ регистров\ (входных\ и\ хранения)}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00078}00078\ \textcolor{comment}{\ \ @code\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00079}00079\ \textcolor{comment}{\ \ Для\ массивов\ регистров:}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00080}00080\ \textcolor{comment}{\ \ \ \ R\_<NAME\_ARRAY>\_ADDR\ \ \ -\/\ \ модбас\ адресс\ первого\ регистра\ в\ массиве}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00081}00081\ \textcolor{comment}{\ \ \ \ R\_<NAME\_ARRAY>\_QNT\ \ \ \ -\/\ \ количество\ регистров\ в\ массиве}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00082}00082\ \textcolor{comment}{\ \ @endcode}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00083}00083\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00084}00084\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00085}00085\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00086}00086\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00087}00087\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00088}00088\ \textcolor{comment}{\ \ *\ @brief\ Регистры\ хранения}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00089}00089\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00090}\mbox{\hyperlink{struct_m_b___data_in_regs_type_def}{00090}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\textcolor{comment}{//MB\_DataInRegsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00091}00091\ \{}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00092}00092\ \ \ uint16\_t\ in[16];}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00093}00093\ \}\mbox{\hyperlink{struct_m_b___data_in_regs_type_def}{MB\_DataInRegsTypeDef}};}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00094}00094\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00095}00095\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00096}00096\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00097}00097\ \textcolor{comment}{\ \ *\ @brief\ Входные\ регистры\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00098}00098\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00099}\mbox{\hyperlink{struct_m_b___data_hold_regs_type_def}{00099}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\textcolor{comment}{//MB\_DataInRegsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00100}00100\ \{}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00101}00101\ \ \ uint16\_t\ out[16];}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00102}00102\ \}\mbox{\hyperlink{struct_m_b___data_hold_regs_type_def}{MB\_DataHoldRegsTypeDef}};}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00103}00103\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00104}00104\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00105}00105\ \textcolor{comment}{/**\ MODBUS\_DATA\_RERISTERS\_DEFINES}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00106}00106\ \textcolor{comment}{\ \ *\ @\}\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00107}00107\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00108}00108\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00109}00109\ \textcolor{comment}{//-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/DEFINES\ FOR\ COILS-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00110}00110\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00111}00111\ \textcolor{comment}{\ \ *\ @addtogroup\ MODBUS\_DATA\_COILS\_DEFINES\ Coils\ Structure}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00112}00112\ \textcolor{comment}{\ \ *\ @ingroup\ \ \ \ MODBUS\_DATA}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00113}00113\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ \ Структура\ коилов}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00114}00114\ \textcolor{comment}{\ \ @code\ \ \ \ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00115}00115\ \textcolor{comment}{\ \ Структура\ дефайна}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00116}00116\ \textcolor{comment}{\ \ Для\ массивов\ коилов:}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00117}00117\ \textcolor{comment}{\ \ \ \ C\_<NAME\_ARRAY>\_ADDR\ \ \ -\/\ модбас\ адресс\ первого\ коила\ в\ массиве}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00118}00118\ \textcolor{comment}{\ \ \ \ C\_<NAME\_ARRAY>\_QNT\ \ \ \ -\/\ количество\ коилов\ в\ массиве\ (минимум\ 16)}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00119}00119\ \textcolor{comment}{\ \ @endcode}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00120}00120\ \textcolor{comment}{\ \ *\ @\{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00121}00121\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00122}00122\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00123}00123\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00124}00124\ \ \ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00125}00125\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00126}00126\ \textcolor{comment}{\ \ *\ @brief\ \ \ \ \ Коилы}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00127}00127\ \textcolor{comment}{\ \ *\ @details\ \ \ Желательно\ с\ помощью\ reserved\ делать\ стркутуру\ кратной\ 16-\/битам}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00128}00128\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00129}\mbox{\hyperlink{struct_m_b___data_coils_type_def}{00129}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\textcolor{comment}{//MB\_DataCoilsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00130}00130\ \{}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00131}00131\ \ \ \textcolor{keywordtype}{unsigned}\ reserved:16;}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00132}00132\ \}\mbox{\hyperlink{struct_m_b___data_coils_type_def}{MB\_DataCoilsTypeDef}};}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00133}00133\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00134}00134\ \textcolor{comment}{/**\ MODBUS\_DATA\_COILS\_DEFINES}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00135}00135\ \textcolor{comment}{\ \ *\ @\}\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00136}00136\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00137}00137\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00138}00138\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00139}00139\ \textcolor{comment}{//-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/MODBUS\ DEVICE\ DATA\ SETTING-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00140}00140\ \textcolor{comment}{//\ MODBUS\ DATA\ STRUCTTURE}\textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00141}00141\ \textcolor{comment}{/**\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00142}00142\ \textcolor{comment}{\ \ *\ @brief\ Структура\ со\ всеми\ регистрами\ и\ коилами\ модбас\ }}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00143}00143\ \textcolor{comment}{\ \ *\ @ingroup\ \ MODBUS\_DATA}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00144}00144\ \textcolor{comment}{\ \ */}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00145}\mbox{\hyperlink{struct_m_b___data_structure_type_def}{00145}}\ \textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\textcolor{comment}{//\ tester\ modbus\ data}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00146}00146\ \{}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00147}\mbox{\hyperlink{struct_m_b___data_structure_type_def_ac0bf877607c54c79c1d09c4530fdcbca}{00147}}\ \ \ \mbox{\hyperlink{struct_m_b___data_in_regs_type_def}{MB\_DataInRegsTypeDef}}\ \ \ \ \ \ \mbox{\hyperlink{struct_m_b___data_structure_type_def_ac0bf877607c54c79c1d09c4530fdcbca}{InRegs}};\ \ \ \ \ \textcolor{comment}{///<\ Modbus\ input\ registers\ @ref\ MB\_DataInRegsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00148}00148\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00149}\mbox{\hyperlink{struct_m_b___data_structure_type_def_a349e19f82ba85cb29a911468ceee76b2}{00149}}\ \ \ \mbox{\hyperlink{struct_m_b___data_coils_type_def}{MB\_DataCoilsTypeDef}}\ \ \ \ \ \ \ \mbox{\hyperlink{struct_m_b___data_structure_type_def_a349e19f82ba85cb29a911468ceee76b2}{Coils}};\ \ \ \ \ \ \textcolor{comment}{///<\ Modbus\ coils\ @ref\ MB\_DataCoilsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00150}00150\ \ \ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00151}\mbox{\hyperlink{struct_m_b___data_structure_type_def_a27d12400f322702e9d87c492e9628313}{00151}}\ \ \ \mbox{\hyperlink{struct_m_b___data_hold_regs_type_def}{MB\_DataHoldRegsTypeDef}}\ \ \ \ \mbox{\hyperlink{struct_m_b___data_structure_type_def_a27d12400f322702e9d87c492e9628313}{HoldRegs}};\ \ \ \textcolor{comment}{///<\ Modbus\ holding\ registers\ @ref\ MB\_DataHoldRegsTypeDef}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00152}00152\ \}\mbox{\hyperlink{struct_m_b___data_structure_type_def}{MB\_DataStructureTypeDef}};}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00153}00153\ \textcolor{keyword}{extern}\ \mbox{\hyperlink{struct_m_b___data_structure_type_def}{MB\_DataStructureTypeDef}}\ MB\_DATA;}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00154}00154\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00155}00155\ }
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00156}00156\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\_MODBUS\_DATA\_H\_}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00157}00157\ \textcolor{comment}{}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00158}00158\ \textcolor{comment}{/////////////////////////////////////////////////////////////}}
\DoxyCodeLine{\Hypertarget{____modbus__data_8h_source_l00159}00159\ \textcolor{comment}{///////////////////////TEMP/OUTDATE/OTHER////////////////////}}
\end{DoxyCode}

View File

@@ -0,0 +1,14 @@
\doxysection{Class List}
Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___data_coils_type_def}{MB\+\_\+\+Data\+Coils\+Type\+Def}} \\*Коилы }{\pageref{struct_m_b___data_coils_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___data_hold_regs_type_def}{MB\+\_\+\+Data\+Hold\+Regs\+Type\+Def}} \\*Входные регистры }{\pageref{struct_m_b___data_hold_regs_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___data_in_regs_type_def}{MB\+\_\+\+Data\+In\+Regs\+Type\+Def}} \\*Регистры хранения }{\pageref{struct_m_b___data_in_regs_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___data_structure_type_def}{MB\+\_\+\+Data\+Structure\+Type\+Def}} \\*Структура со всеми регистрами и коилами модбас }{\pageref{struct_m_b___data_structure_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___device_identifications_type_def}{MB\+\_\+\+Device\+Identifications\+Type\+Def}} \\*Структура со идентификаторами устройства модбас }{\pageref{struct_m_b___device_identifications_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___device_object_type_def}{MB\+\_\+\+Device\+Object\+Type\+Def}} \\*Структура для объекта (идентификатора устройства модбас) }{\pageref{struct_m_b___device_object_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___dev_id_msg_type_def}{MB\+\_\+\+Dev\+Id\+Msg\+Type\+Def}} \\*Structure for device identifications message type }{\pageref{struct_m_b___dev_id_msg_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_m_b___diagnostics_info_type_def}{MB\+\_\+\+Diagnostics\+Info\+Type\+Def}} \\*Структура со диагностической информацией устройства модбас }{\pageref{struct_m_b___diagnostics_info_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_r_s___flags_type_def}{RS\+\_\+\+Flags\+Type\+Def}} \\*Struct for flags RS }{\pageref{struct_r_s___flags_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_r_s___handle_type_def}{RS\+\_\+\+Handle\+Type\+Def}} \\*Handle for RS communication }{\pageref{struct_r_s___handle_type_def}}{}
\item\contentsline{section}{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \\*Structure for modbus messsage }{\pageref{struct_r_s___msg_type_def}}{}
\end{DoxyCompactList}

View File

@@ -0,0 +1,745 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doxygen}
% Packages used by this style file
\RequirePackage{alltt}
%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
\RequirePackage{calc}
\RequirePackage{float}
%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
\RequirePackage{verbatim}
\RequirePackage[table]{xcolor}
\RequirePackage{longtable_doxygen}
\RequirePackage{tabu_doxygen}
\RequirePackage{fancyvrb}
\RequirePackage{tabularx}
\RequirePackage{multicol}
\RequirePackage{multirow}
\RequirePackage{hanging}
\RequirePackage{ifpdf}
\RequirePackage{adjustbox}
\RequirePackage{amssymb}
\RequirePackage{stackengine}
\RequirePackage{enumitem}
\RequirePackage{alphalph}
\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis
%---------- Internal commands used in this style file ----------------
\newcommand{\ensurespace}[1]{%
\begingroup%
\setlength{\dimen@}{#1}%
\vskip\z@\@plus\dimen@%
\penalty -100\vskip\z@\@plus -\dimen@%
\vskip\dimen@%
\penalty 9999%
\vskip -\dimen@%
\vskip\z@skip% hide the previous |\vskip| from |\addvspace|
\endgroup%
}
\newcommand{\DoxyHorRuler}[1]{%
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
\ifthenelse{#1=0}%
{%
\hrule%
}%
{%
\hrulefilll%
}%
}
\newcommand{\DoxyLabelFont}{}
\newcommand{\entrylabel}[1]{%
{%
\parbox[b]{\labelwidth-4pt}{%
\makebox[0pt][l]{\DoxyLabelFont#1}%
\vspace{1.5\baselineskip}%
}%
}%
}
\newenvironment{DoxyDesc}[1]{%
\ensurespace{4\baselineskip}%
\begin{list}{}{%
\settowidth{\labelwidth}{20pt}%
%\setlength{\parsep}{0pt}%
\setlength{\itemsep}{0pt}%
\setlength{\leftmargin}{\labelwidth+\labelsep}%
\renewcommand{\makelabel}{\entrylabel}%
}%
\item[#1]%
}{%
\end{list}%
}
\newsavebox{\xrefbox}
\newlength{\xreflength}
\newcommand{\xreflabel}[1]{%
\sbox{\xrefbox}{#1}%
\setlength{\xreflength}{\wd\xrefbox}%
\ifthenelse{\xreflength>\labelwidth}{%
\begin{minipage}{\textwidth}%
\setlength{\parindent}{0pt}%
\hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
\end{minipage}%
}{%
\parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
}%
}
%---------- Commands used by doxygen LaTeX output generator ----------
% Used by <pre> ... </pre>
\newenvironment{DoxyPre}{%
\small%
\begin{alltt}%
}{%
\end{alltt}%
\normalsize%
}
% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output.
\newlength{\CodeWidthChar}
\newlength{\CodeHeightChar}
\settowidth{\CodeWidthChar}{?}
\settoheight{\CodeHeightChar}{?}
% Necessary for hanging indent
\newlength{\DoxyCodeWidth}
\newcommand\DoxyCodeLine[1]{
\ifthenelse{\equal{\detokenize{#1}}{}}
{
\vspace*{\baselineskip}
}
{
\hangpara{\DoxyCodeWidth}{1}{#1}\par
}
}
\newcommand\NiceSpace{%
\discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}%
}
% Used by @code ... @endcode
\newenvironment{DoxyCode}[1]{%
\par%
\vspace{2pt}%
\scriptsize%
\normalfont\ttfamily%
\rightskip0pt plus 1fil%
\settowidth{\DoxyCodeWidth}{000000}%
\settowidth{\CodeWidthChar}{?}%
\settoheight{\CodeHeightChar}{?}%
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
\ifthenelse{\equal{#1}{0}}%
{%
{\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
}%
{%
{\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
}%
\vspace{2pt}%
}{%
\normalfont%
\normalsize%
\settowidth{\CodeWidthChar}{?}%
\settoheight{\CodeHeightChar}{?}%
}
% Redefining not defined characters, i.e. "Replacement Character" in tex output.
\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{%
\textcolor{white}{\sffamily\bfseries\small ?}}{%
\rotatebox{45}{$\blacksquare$}}}}
% Used by @example, @include, @includelineno and @dontinclude
\newenvironment{DoxyCodeInclude}[1]{%
\DoxyCode{#1}%
}{%
\endDoxyCode%
}
% Used by @verbatim ... @endverbatim
\newenvironment{DoxyVerb}{%
\par%
\footnotesize%
\verbatim%
}{%
\endverbatim%
\normalsize%
}
% Used by @verbinclude
\newenvironment{DoxyVerbInclude}{%
\DoxyVerb%
}{%
\endDoxyVerb%
}
% Used by numbered lists (using '-#' or <ol> ... </ol>)
\setlistdepth{12}
\newlist{DoxyEnumerate}{enumerate}{12}
\setlist[DoxyEnumerate,1]{label=\arabic*.}
\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)}
\setlist[DoxyEnumerate,3]{label=\roman*.}
\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.}
\setlist[DoxyEnumerate,5]{label=\arabic*.}
\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)}
\setlist[DoxyEnumerate,7]{label=\roman*.}
\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.}
\setlist[DoxyEnumerate,9]{label=\arabic*.}
\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)}
\setlist[DoxyEnumerate,11]{label=\roman*.}
\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.}
% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
\setlistdepth{12}
\newlist{DoxyItemize}{itemize}{12}
\setlist[DoxyItemize]{label=\textperiodcentered}
\setlist[DoxyItemize,1]{label=\textbullet}
\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash}
\setlist[DoxyItemize,3]{label=\textasteriskcentered}
\setlist[DoxyItemize,4]{label=\textperiodcentered}
% Used for check boxes
\newcommand{\DoxyUnchecked}{$\square$}
\newcommand{\DoxyChecked}{\rlap{\raisebox{0.3ex}{\hspace{0.4ex}\tiny \checkmark}}$\square$}
% Used by description lists (using <dl> ... </dl>)
\newenvironment{DoxyDescription}{%
\description%
}{%
\enddescription%
}
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
% (only if caption is specified)
\newenvironment{DoxyImage}{%
\begin{figure}[H]%
\centering%
}{%
\end{figure}%
}
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
% (only if no caption is specified)
\newenvironment{DoxyImageNoCaption}{%
\begin{center}%
}{%
\end{center}%
}
% Used by @image
% (only if inline is specified)
\newenvironment{DoxyInlineImage}{%
}{%
}
% Used by @attention
\newenvironment{DoxyAttention}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @important
\newenvironment{DoxyImportant}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @author and @authors
\newenvironment{DoxyAuthor}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @date
\newenvironment{DoxyDate}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @invariant
\newenvironment{DoxyInvariant}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @note
\newenvironment{DoxyNote}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @post
\newenvironment{DoxyPostcond}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @pre
\newenvironment{DoxyPrecond}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @copyright
\newenvironment{DoxyCopyright}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @remark
\newenvironment{DoxyRemark}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @return and @returns
\newenvironment{DoxyReturn}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @since
\newenvironment{DoxySince}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @see
\newenvironment{DoxySeeAlso}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @version
\newenvironment{DoxyVersion}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @warning
\newenvironment{DoxyWarning}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @par and @paragraph
\newenvironment{DoxyParagraph}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by parameter lists
\newenvironment{DoxyParams}[2][]{%
\tabulinesep=1mm%
\par%
\ifthenelse{\equal{#1}{}}%
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
{\ifthenelse{\equal{#1}{1}}%
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
}
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for fields of simple structs
\newenvironment{DoxyFields}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for fields simple class style enums
\newenvironment{DoxyEnumFields}[2][]{%
\tabulinesep=1mm%
\par%
\ifthenelse{\equal{#1}{2}}%
{\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}}%
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,r]|X[-1,l]|}}% with init value
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for parameters within a detailed function description
\newenvironment{DoxyParamCaption}{%
\renewcommand{\item}[3][]{\\ \hspace*{2.0cm} ##1 {\em ##2}##3}%
}{%
}
% Used by return value lists
\newenvironment{DoxyRetVals}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used by exception lists
\newenvironment{DoxyExceptions}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used by template parameter lists
\newenvironment{DoxyTemplParams}[1]{%
\tabulinesep=1mm%
\par%
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endfirsthead%
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
\hline%
\endhead%
}{%
\end{longtabu*}%
\vspace{6pt}%
}
% Used for member lists
\newenvironment{DoxyCompactItemize}{%
\begin{itemize}%
\setlength{\itemsep}{-3pt}%
\setlength{\parsep}{0pt}%
\setlength{\topsep}{0pt}%
\setlength{\partopsep}{0pt}%
}{%
\end{itemize}%
}
% Used for member descriptions
\newenvironment{DoxyCompactList}{%
\begin{list}{}{%
\setlength{\leftmargin}{0.5cm}%
\setlength{\itemsep}{0pt}%
\setlength{\parsep}{0pt}%
\setlength{\topsep}{0pt}%
\renewcommand{\makelabel}{\hfill}%
}%
}{%
\end{list}%
}
% Used for reference lists (@bug, @deprecated, @todo, etc.)
\newenvironment{DoxyRefList}{%
\begin{list}{}{%
\setlength{\labelwidth}{10pt}%
\setlength{\leftmargin}{\labelwidth}%
\addtolength{\leftmargin}{\labelsep}%
\renewcommand{\makelabel}{\xreflabel}%
}%
}{%
\end{list}%
}
% Used by @bug, @deprecated, @todo, etc.
\newenvironment{DoxyRefDesc}[1]{%
\begin{list}{}{%
\renewcommand\makelabel[1]{\textbf{##1}}%
\settowidth\labelwidth{\makelabel{#1}}%
\setlength\leftmargin{\labelwidth+\labelsep}%
}%
}{%
\end{list}%
}
% Used by parameter lists and simple sections
\newenvironment{Desc}
{\begin{list}{}{%
\settowidth{\labelwidth}{20pt}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{0pt}%
\setlength{\leftmargin}{\labelwidth+\labelsep}%
\renewcommand{\makelabel}{\entrylabel}%
}
}{%
\end{list}%
}
% Used by tables
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
\newenvironment{TabularC}[1]%
{\tabulinesep=1mm
\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}%
{\end{longtabu*}\par}%
\newenvironment{TabularNC}[1]%
{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}%
{\end{tabu}\par}%
% Used for member group headers
\newenvironment{Indent}{%
\begin{list}{}{%
\setlength{\leftmargin}{0.5cm}%
}%
\item[]\ignorespaces%
}{%
\unskip%
\end{list}%
}
% Used when hyperlinks are turned on
\newcommand{\doxylink}[2]{%
\mbox{\hyperlink{#1}{#2}}%
}
% Used for the cite command
\newcommand{\DoxyCite}[3]{%
\ifthenelse{#3=1}% 1 with square parenthesis
{
\ifthenelse{\equal{#2}{number}}%
{ \cite{#1} }%
{%
\ifthenelse{\equal{#2}{shortauthor}}%
{ \citetext{\citeauthor{#1}} }%
{%
\ifthenelse{\equal{#2}{year}}%
{ \citeyearpar{#1} }%
{}%
}%
}%
}%
{%
\ifthenelse{\equal{#2}{number}}%
{ \citealp{#1} }%
{%
\ifthenelse{\equal{#2}{shortauthor}}%
{ \citeauthor{#1} }%
{%
\ifthenelse{\equal{#2}{year}}%
{ \citeyear{#1} }%
{}%
}%
}%
}%
}
% Used when hyperlinks are turned on
% Third argument is the SectionType, see the doxygen internal
% documentation for the values (relevant: Page ... Subsubsection).
\newcommand{\doxysectlink}[3]{%
\mbox{\hyperlink{#1}{#2}}%
}
% Used when hyperlinks are turned off
\newcommand{\doxyref}[3]{%
\textbf{#1} (\textnormal{#2}\,\pageref{#3})%
}
% Used when hyperlinks are turned off
% Fourth argument is the SectionType, see the doxygen internal
% documentation for the values (relevant: Page ... Subsubsection).
\newcommand{\doxysectref}[4]{%
\textbf{#1} (\textnormal{#2}\,\pageref{#3})%
}
% Used to link to a table when hyperlinks are turned on
\newcommand{\doxytablelink}[2]{%
\ref{#1}%
}
% Used to link to a table when hyperlinks are turned off
\newcommand{\doxytableref}[3]{%
\ref{#3}%
}
% Used by @addindex
\newcommand{\lcurly}{\{}
\newcommand{\rcurly}{\}}
% Colors used for syntax highlighting
\definecolor{comment}{rgb}{0.5,0.0,0.0}
\definecolor{keyword}{rgb}{0.0,0.5,0.0}
\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
\definecolor{xmlcdata}{rgb}{0.0,0.0,0.0}
\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
% Color used for table heading
\newcommand{\tableheadbgcolor}{lightgray}%
% Version of hypertarget with correct landing location
\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
% possibility to have sections etc. be within the margins
% unfortunately had to copy part of book.cls and add \raggedright
\makeatletter
\newcounter{subsubsubsection}[subsubsection]
\newcounter{subsubsubsubsection}[subsubsubsection]
\newcounter{subsubsubsubsubsection}[subsubsubsubsection]
\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection]
\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}}
\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}}
\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}}
\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}}
\newcommand{\subsubsubsectionmark}[1]{}
\newcommand{\subsubsubsubsectionmark}[1]{}
\newcommand{\subsubsubsubsubsectionmark}[1]{}
\newcommand{\subsubsubsubsubsubsectionmark}[1]{}
\def\toclevel@subsubsubsection{4}
\def\toclevel@subsubsubsubsection{5}
\def\toclevel@subsubsubsubsubsection{6}
\def\toclevel@subsubsubsubsubsubsection{7}
\def\toclevel@paragraph{8}
\def\toclevel@subparagraph{9}
\newcommand\doxysection{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\raggedright\normalfont\Large\bfseries}}
\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\large\bfseries}}
\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\raggedright\normalfont\normalsize\bfseries}}
\newcommand\l@subsubsubsection{\@dottedtocline{4}{10.0em}{7.8em}}
\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{13.0em}{9.4em}}
\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{15.0em}{11em}}
\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{18.0em}{12.6em}}
\renewcommand\l@paragraph{\@dottedtocline{8}{21.0em}{14.2em}}
\renewcommand\l@subparagraph{\@dottedtocline{9}{24.0em}{15.8em}}
\makeatother
% the sectsty doesn't look to be maintained but gives, in our case, some warning like:
% LaTeX Warning: Command \underline has changed.
% Check if current package is valid.
% unfortunately had to copy the relevant part
\newcommand*{\doxypartfont} [1]
{\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1}
\gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}}
\newcommand*{\doxychapterfont} [1]
{\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1}
\gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}}
\newcommand*{\doxysectionfont} [1]
{\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}}
\newcommand*{\doxysubsectionfont} [1]
{\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}}
\newcommand*{\doxysubsubsectionfont} [1]
{\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}}
\newcommand*{\doxyparagraphfont} [1]
{\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}}
\newcommand*{\doxysubparagraphfont} [1]
{\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}}
\newcommand*{\doxyminisecfont} [1]
{\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}}
\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}%
\doxychapterfont{#1}%
\doxysectionfont{#1}%
\doxysubsectionfont{#1}%
\doxysubsubsectionfont{#1}%
\doxyparagraphfont{#1}%
\doxysubparagraphfont{#1}%
\doxyminisecfont{#1}}%
% Define caption that is also suitable in a table
% for usage with hyperlinks
\makeatletter
\def\doxyfigcaption{%
\H@refstepcounter{figure}%
\@dblarg{\@caption{figure}}}
% for usage without hyperlinks
\def\doxyfigcaptionnolink{%
\refstepcounter{figure}%
\@dblarg{\@caption{figure}}}
\makeatother
% Define alpha enumarative names for counters > 26
\makeatletter
\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname}
\def\@enumalphalphcnt#1{\alphalph{#1}}
\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname}
\def\@enumAlphAlphcnt#1{\AlphAlph{#1}}
\makeatother
\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa}
\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA}

View File

@@ -0,0 +1,2178 @@
%%
%% This is file etoc_doxygen.sty
%%
%% Apart from this header notice and the renaming from etoc to
%% etoc_doxygen (also in \ProvidesPackage) it is an identical
%% copy of
%%
%% etoc.sty
%%
%% at version 1.2b of 2023/07/01.
%%
%% This file has been provided to Doxygen team courtesy of the
%% author for benefit of users having a LaTeX installation not
%% yet providing version 1.2a or later of etoc, whose
%% deeplevels feature is required.
%%
%% The original source etoc.dtx (only of the latest version at
%% any given time) is available at
%%
%% https://ctan.org/pkg/etoc
%%
%% and contains the terms for copying and modification as well
%% as author contact information.
%%
%% In brief any modified versions of this file must be renamed
%% with new filenames distinct from etoc.sty.
%%
%% Package: etoc
%% Version: 1.2b
%% License: LPPL 1.3c
%% Copyright (C) 2012-2023 Jean-Francois B. <user jfbu at github>
\NeedsTeXFormat{LaTeX2e}[2003/12/01]
\ProvidesPackage{etoc_doxygen}[2023/07/01 v1.2b Completely customisable TOCs (JFB)]
\newif\ifEtoc@oldLaTeX
\@ifl@t@r\fmtversion{2020/10/01}
{}
{\Etoc@oldLaTeXtrue
\PackageInfo{etoc}{Old LaTeX (\fmtversion) detected!\MessageBreak
Since 1.1a (2023/01/14), etoc prefers LaTeX at least\MessageBreak
as recent as 2020-10-01, for reasons of the .toc file,\MessageBreak
and used to require it (from 1.1a to 1.2).\MessageBreak
This etoc (1.2b) does not *require* it, but has not been\MessageBreak
tested thoroughly on old LaTeX (especially if document\MessageBreak
does not use hyperref) and retrofitting was done only\MessageBreak
on basis of author partial remembrances of old context.\MessageBreak
Reported}}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{prefix=Etoc@}
\newif\ifEtoc@lof
\DeclareVoidOption{lof}{\Etoc@loftrue
\PackageInfo{etoc}{Experimental support for \string\locallistoffigures.\MessageBreak
Barely tested, use at own risk}%
}
\newif\ifEtoc@lot
\DeclareVoidOption{lot}{\Etoc@lottrue
\PackageInfo{etoc}{Experimental support for \string\locallistoftables.\MessageBreak
Barely tested, use at own risk}%
}
\@ifclassloaded{memoir}{
\PackageInfo{etoc}
{As this is with memoir class, all `...totoc' options\MessageBreak
are set true by default. Reported}
\DeclareBoolOption[true]{maintoctotoc}
\DeclareBoolOption[true]{localtoctotoc}
\DeclareBoolOption[true]{localloftotoc}
\DeclareBoolOption[true]{locallottotoc}
}{
\DeclareBoolOption[false]{maintoctotoc}
\DeclareBoolOption[false]{localtoctotoc}
\DeclareBoolOption[false]{localloftotoc}
\DeclareBoolOption[false]{locallottotoc}
}
\DeclareBoolOption[true]{ouroboros}
\DeclareBoolOption[false]{deeplevels}
\DeclareDefaultOption{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}}
\ProcessKeyvalOptions*
\DisableKeyvalOption[action=error,package=etoc]{etoc}{lof}
\DisableKeyvalOption[action=error,package=etoc]{etoc}{lot}
\DisableKeyvalOption[action=error,package=etoc]{etoc}{deeplevels}
\def\etocsetup#1{\setkeys{etoc}{#1}}
\def\etocifmaintoctotoc{\ifEtoc@maintoctotoc
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\def\etociflocaltoctotoc{\ifEtoc@localtoctotoc
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\def\etociflocalloftotoc{\ifEtoc@localloftotoc
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\def\etociflocallottotoc{\ifEtoc@locallottotoc
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\RequirePackage{multicol}
\def\etoc@{\etoc@}
\long\def\Etoc@gobtoetoc@ #1\etoc@{}
\newtoks\Etoc@toctoks
\def\Etoc@par{\par}
\def\etocinline{\def\Etoc@par{}}
\let\etocnopar\etocinline
\def\etocdisplay{\def\Etoc@par{\par}}
\let\Etoc@global\@empty
\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global}
\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty}
\newif\ifEtoc@numbered
\newif\ifEtoc@hyperref
\newif\ifEtoc@parskip
\newif\ifEtoc@tocwithid
\newif\ifEtoc@standardlines
\newif\ifEtoc@etocstyle
\newif\ifEtoc@classstyle
\newif\ifEtoc@keeporiginaltoc
\newif\ifEtoc@skipprefix
\newif\ifEtoc@isfirst
\newif\ifEtoc@localtoc
\newif\ifEtoc@skipthisone
\newif\ifEtoc@stoptoc
\newif\ifEtoc@notactive
\newif\ifEtoc@mustclosegroup
\newif\ifEtoc@isemptytoc
\newif\ifEtoc@checksemptiness
\def\etocchecksemptiness {\Etoc@checksemptinesstrue }
\def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse }
\newif\ifEtoc@notocifnotoc
\def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue }
\newcounter{etoc@tocid}
\def\Etoc@tocext{toc}
\def\Etoc@lofext{lof}
\def\Etoc@lotext{lot}
\let\Etoc@currext\Etoc@tocext
\def\etocifislocal{\ifEtoc@localtoc\expandafter\@firstoftwo\else
\expandafter\@secondoftwo\fi
}
\def\etocifislocaltoc{\etocifislocal{\ifx\Etoc@currext\Etoc@tocext
\expandafter\@firstoftwo\else
\expandafter\@secondoftwo\fi}%
{\@secondoftwo}%
}
\def\etocifislocallof{\etocifislocal{\ifx\Etoc@currext\Etoc@lofext
\expandafter\@firstoftwo\else
\expandafter\@secondoftwo\fi}%
{\@secondoftwo}%
}
\def\etocifislocallot{\etocifislocal{\ifx\Etoc@currext\Etoc@lotext
\expandafter\@firstoftwo\else
\expandafter\@secondoftwo\fi}%
{\@secondoftwo}%
}
\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@}
\expandafter\def\csname Etoc@-2@@\endcsname {-\tw@}
\expandafter\let\csname Etoc@-1@@\endcsname \m@ne
\expandafter\let\csname Etoc@0@@\endcsname \z@
\expandafter\let\csname Etoc@1@@\endcsname \@ne
\expandafter\let\csname Etoc@2@@\endcsname \tw@
\expandafter\let\csname Etoc@3@@\endcsname \thr@@
\expandafter\chardef\csname Etoc@4@@\endcsname 4
\expandafter\chardef\csname Etoc@5@@\endcsname 5
\expandafter\chardef\csname Etoc@6@@\endcsname 6
\ifEtoc@deeplevels
\expandafter\chardef\csname Etoc@7@@\endcsname 7
\expandafter\chardef\csname Etoc@8@@\endcsname 8
\expandafter\chardef\csname Etoc@9@@\endcsname 9
\expandafter\chardef\csname Etoc@10@@\endcsname 10
\expandafter\chardef\csname Etoc@11@@\endcsname 11
\expandafter\chardef\csname Etoc@12@@\endcsname 12
\fi
\expandafter\let\expandafter\Etoc@maxlevel
\csname Etoc@\ifEtoc@deeplevels12\else6\fi @@\endcsname
\edef\etocthemaxlevel{\number\Etoc@maxlevel}
\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}}
\let\Etoc@none@@ \Etoc@minf
\expandafter\let\expandafter\Etoc@all@@
\csname Etoc@\ifEtoc@deeplevels11\else5\fi @@\endcsname
\let\Etoc@dolevels\@empty
\def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@dolevels\expandafter
{\Etoc@dolevels\Etoc@do{#1}}}
\ifdefined\expanded
\def\etocsetlevel#1#2{\expanded{\noexpand\etoc@setlevel{#1}{#2}}}%
\else
\def\etocsetlevel#1#2{{\edef\Etoc@tmp{\noexpand\etoc@setlevel{#1}{#2}}\expandafter}\Etoc@tmp}%
\fi
\def\etoc@setlevel#1#2{%
\edef\Etoc@tmp{\the\numexpr#2}%
\if1\ifnum\Etoc@tmp>\Etoc@maxlevel0\fi\unless\ifnum\Etoc@minf<\Etoc@tmp;\fi1%
\ifEtoc@deeplevels
\in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,%
.7,.8,.9,.10,.11,.12,}%
\else
\in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,}%
\fi
\ifin@\else\if\@car#1\@nil @\in@true\fi\fi
\ifin@
\PackageWarning{etoc}
{Sorry, but `#1' is forbidden as level name.\MessageBreak
\if\@car#1\@nil @%
(because of the @ as first character)\MessageBreak\fi
Reported}%
\else
\etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}%
\expandafter\let\csname Etoc@#1@@\expandafter\endcsname
\csname Etoc@\Etoc@tmp @@\endcsname
\expandafter\edef\csname Etoc@@#1@@\endcsname
{\expandafter\noexpand\csname Etoc@#1@@\endcsname}%
\expandafter\edef\csname toclevel@@#1\endcsname
{\expandafter\noexpand\csname toclevel@#1\endcsname}%
\fi
\else
\PackageWarning{etoc}
{Argument `\detokenize{#2}' of \string\etocsetlevel\space should
represent one of\MessageBreak
\ifnum\Etoc@minf=-\thr@@-2, \fi-1, 0, 1, 2, \ifEtoc@deeplevels ...\else3, 4\fi,
\the\numexpr\Etoc@maxlevel-1, or \number\Etoc@maxlevel\space
but evaluates to \Etoc@tmp.\MessageBreak
The level of `#1' will be set to \number\Etoc@maxlevel.\MessageBreak
Tables of contents will ignore `#1' as long\MessageBreak
as its level is \number\Etoc@maxlevel\space (=\string\etocthemaxlevel).%
\MessageBreak
Reported}%
\etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}%
\expandafter\let\csname Etoc@#1@@\endcsname\Etoc@maxlevel
\fi
}
\def\etoclevel#1{\csname Etoc@#1@@\endcsname}
\def\etocthelevel#1{\number\csname Etoc@#1@@\endcsname}
\def\etocifunknownlevelTF#1{\@ifundefined{Etoc@#1@@}}
\@ifclassloaded{memoir}{\etocsetlevel{book}{-2}}{}
\etocsetlevel{part}{-1}
\etocsetlevel{chapter}{0}
\etocsetlevel{section}{1}
\etocsetlevel{subsection}{2}
\etocsetlevel{subsubsection}{3}
\etocsetlevel{paragraph}{4}
\etocsetlevel{subparagraph}{5}
\ifdefined\c@chapter
\etocsetlevel{appendix}{0}
\else
\etocsetlevel{appendix}{1}
\fi
\def\Etoc@do#1{\@namedef{l@@#1}{\csname l@#1\endcsname}}
\Etoc@dolevels
\let\Etoc@figure@@\Etoc@maxlevel
\let\Etoc@table@@ \Etoc@maxlevel
\let\Etoc@gobblethreeorfour\@gobblefour
\ifdefined\@gobblethree
\let\Etoc@gobblethree\@gobblethree
\else
\long\def\Etoc@gobblethree#1#2#3{}%
\fi
\AtBeginDocument{%
\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}%
\@ifpackageloaded{hyperref}
{\Etoc@hyperreftrue}
{\ifEtoc@oldLaTeX
\let\Etoc@gobblethreeorfour\Etoc@gobblethree
\let\Etoc@etoccontentsline@fourargs\Etoc@etoccontentsline@
\long\def\Etoc@etoccontentsline@#1#2#3{%
\Etoc@etoccontentsline@fourargs{#1}{#2}{#3}{}%
}%
\fi
}%
}
\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue }
\def\Etoc@updatestackofends#1\etoc@{\gdef\Etoc@stackofends{#1}}
\def\Etoc@stackofends{{-3}{}}
\def\Etoc@doendsandbegin{%
\expandafter\Etoc@traversestackofends\Etoc@stackofends\etoc@
}
\def\Etoc@traversestackofends#1{%
\ifnum#1>\Etoc@level
\csname Etoc@end@#1\endcsname
\expandafter\Etoc@traversestackofends
\else
\Etoc@traversestackofends@done{#1}%
\fi
}
\def\Etoc@traversestackofends@done#1#2{#2%
\ifnum#1<\Etoc@level
\csname Etoc@begin@\the\numexpr\Etoc@level\endcsname
\Etoc@global\Etoc@isfirsttrue
\edef\Etoc@tmp{{\the\numexpr\Etoc@level}}%
\else
\Etoc@global\Etoc@isfirstfalse
\let\Etoc@tmp\@empty
\fi
\expandafter\Etoc@updatestackofends\Etoc@tmp{#1}%
}
\def\Etoc@etoccontentsline #1{%
\let\Etoc@next\Etoc@gobblethreeorfour
\ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel
\else
\Etoc@skipthisonefalse
\global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname
\if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi
\ifEtoc@localtoc
\ifEtoc@stoptoc
\Etoc@skipthisonetrue
\else
\ifEtoc@notactive
\Etoc@skipthisonetrue
\else
\unless\ifnum\Etoc@level>\etoclocaltop
\Etoc@skipthisonetrue
\global\Etoc@stoptoctrue
\fi
\fi
\fi
\fi
\ifEtoc@skipthisone
\else
\unless\ifnum\Etoc@level>\c@tocdepth
\ifEtoc@standardlines
\let\Etoc@next\Etoc@savedcontentsline
\else
\let\Etoc@next\Etoc@etoccontentsline@
\fi
\fi
\fi
\fi
\Etoc@next{#1}%
}
\def\Etoc@etoccontentsline@ #1#2#3#4{%
\Etoc@doendsandbegin
\Etoc@global\edef\Etoc@prefix {\expandafter\noexpand
\csname Etoc@prefix@\the\numexpr\Etoc@level\endcsname }%
\Etoc@global\edef\Etoc@contents{\expandafter\noexpand
\csname Etoc@contents@\the\numexpr\Etoc@level\endcsname }%
\ifEtoc@skipprefix \Etoc@global\def\Etoc@prefix{\@empty}\fi
\global\Etoc@skipprefixfalse
\Etoc@lxyz{#2}{#3}{#4}%
\Etoc@prefix
\Etoc@contents
}
\def\Etoc@lxyz #1#2#3{%
\ifEtoc@hyperref
\Etoc@global\def\etocthelink##1{\hyperlink{#3}{##1}}%
\else
\Etoc@global\let\etocthelink\@firstofone
\fi
\Etoc@global\def\etocthepage {#2}%
\ifEtoc@hyperref
\ifx\etocthepage\@empty
\Etoc@global\let\etocthelinkedpage\@empty
\else
\Etoc@global\def\etocthelinkedpage{\hyperlink {#3}{#2}}%
\fi
\else
\Etoc@global\let\etocthelinkedpage\etocthepage
\fi
\Etoc@global\def\etocthename{#1}%
\futurelet\Etoc@getnb@token\Etoc@@getnb #1\hspace\etoc@
\ifEtoc@hyperref
\def\Etoc@tmp##1##2{\Etoc@global\def##2{\hyperlink{#3}{##1}}}%
\expandafter\Etoc@tmp\expandafter{\etocthename}\etocthelinkedname
\ifEtoc@numbered
\expandafter\Etoc@tmp\expandafter{\etocthenumber}\etocthelinkednumber
\else
\Etoc@global\let\etocthelinkednumber\@empty
\fi
\else
\Etoc@global\let\etocthelinkedname \etocthename
\Etoc@global\let\etocthelinkednumber\etocthenumber
\fi
\Etoc@global\expandafter\let\csname etoclink \endcsname \etocthelink
\Etoc@global\expandafter\let\csname etocname \endcsname \etocthename
\Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthenumber
\Etoc@global\expandafter\let\csname etocpage \endcsname \etocthepage
\ifEtoc@hyperref
\Etoc@lxyz@linktoc
\fi
}
\def\Etoc@lxyz@linktoc{%
\ifcase\Hy@linktoc
\or
\Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname
\Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber
\or % page
\Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage
\else % all
\Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname
\Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber
\Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage
\fi
}
\def\Etoc@@getnb {%
\let\Etoc@next\Etoc@getnb
\ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nonbr\fi
\ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@nonbr\fi
\Etoc@next
}
\def\Etoc@getnb #1{%
\in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}%
\ifin@
\let\Etoc@next\Etoc@getnb@nmbrd
\else
\ifnum\Etoc@level=\m@ne
\let\Etoc@next\Etoc@@getit
\else
\let\Etoc@next\Etoc@getnb@nonbr
\fi
\in@{#1}{\nonumberline}%
\ifin@
\let\Etoc@next\Etoc@getnb@nonumberline
\fi
\fi
\Etoc@next #1%
}
\def\Etoc@getnb@nmbrd #1#2{%
\Etoc@global\Etoc@numberedtrue
\Etoc@global\def\etocthenumber {#2}%
\Etoc@getnb@nmbrd@getname\@empty
}%
\def\Etoc@getnb@nmbrd@getname #1\hspace\etoc@ {%
\Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}%
}
\def\Etoc@getnb@nonbr #1\etoc@ {%
\Etoc@global\Etoc@numberedfalse
\Etoc@global\let\etocthenumber \@empty
}
\def\Etoc@getnb@nonumberline #1\hspace\etoc@ {%
\Etoc@global\Etoc@numberedfalse
\Etoc@global\let\etocthenumber \@empty
\Etoc@global\expandafter\def\expandafter\etocthename\expandafter{\@gobble#1}%
}
\def\Etoc@@getit #1\hspace#2{%
\ifx\etoc@#2%
\Etoc@global\Etoc@numberedfalse
\Etoc@global\let\etocthenumber \@empty
\else
\Etoc@global\Etoc@numberedtrue
\Etoc@global\def\etocthenumber {#1}%
\expandafter\Etoc@getit@getname \expandafter\@empty
\fi
}
\def\Etoc@getit@getname #1\hspace\etoc@ {%
\Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}%
}
\let\etocthename \@empty
\let\etocthenumber \@empty
\let\etocthepage \@empty
\let\etocthelinkedname \@empty
\let\etocthelinkednumber \@empty
\let\etocthelinkedpage \@empty
\let\etocthelink \@firstofone
\DeclareRobustCommand*{\etocname} {}
\DeclareRobustCommand*{\etocnumber}{}
\DeclareRobustCommand*{\etocpage} {}
\DeclareRobustCommand*{\etoclink} {\@firstofone}
\DeclareRobustCommand*{\etocifnumbered}
{\ifEtoc@numbered\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname
\DeclareRobustCommand*{\etociffirst}
{\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname
\def\Etoc@readtoc {%
\ifeof \Etoc@tf
\else
\read \Etoc@tf to \Etoc@buffer
\Etoc@toctoks=\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}%
\expandafter\Etoc@readtoc
\fi
}
\Etoc@toctoks {}% (superfluous, but for clarity)
\AtBeginDocument{\IfFileExists{\jobname.toc}
{{\endlinechar=\m@ne
\makeatletter
\newread\Etoc@tf
\openin\Etoc@tf\@filef@und
\Etoc@readtoc
\global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}%
\closein\Etoc@tf}}
{\typeout{No file \jobname.toc.}}}
\def\Etoc@openouttoc{%
\ifEtoc@hyperref
\ifx\hyper@last\@undefined
\IfFileExists{\jobname .toc}
{\Hy@WarningNoLine
{old toc file detected; run LaTeX again (cheers from `etoc')}%
\global\Etoc@toctoks={}%
}
{}%
\fi
\fi
\if@filesw
\newwrite \tf@toc
\immediate \openout \tf@toc \jobname .toc\relax
\fi
\global\let\Etoc@openouttoc\empty
}
\def\Etoc@toctoc{%
\gdef\Etoc@stackofends{{-3}{}}%
\global\let\Etoc@level\Etoc@minf
\global\let\Etoc@virtualtop\Etoc@minf
\the\Etoc@toctoks
\ifEtoc@notactive
\else
\gdef\Etoc@level{-\thr@@}%
\Etoc@doendsandbegin
\fi
}
\def\Etoc@@startlocaltoc#1#2{%
\ifEtoc@localtoc
\ifnum #1=#2\relax
\global\let\etoclocaltop\Etoc@virtualtop
\Etoc@@startlocaltochook
\etoclocaltableofcontentshook
\ifEtoc@etocstyle
\etocetoclocaltocmaketitle
\fi
\ifx\Etoc@aftertitlehook\@empty
\else
\ifEtoc@localtoctotoc
\ifEtoc@ouroboros
\else
\let\Etoc@tmp\contentsline
\def\contentsline{\let\contentsline\Etoc@tmp\Etoc@gobblethreeorfour}%
\fi
\fi
\fi
\global\Etoc@notactivefalse
\fi
\fi
}
\let\etoc@startlocaltoc\@gobble
\let\Etoc@@startlocaltoc@toc\Etoc@@startlocaltoc
\let\Etoc@@startlocaltochook\@empty
\unless\ifEtoc@deeplevels
\def\etocdivisionnameatlevel#1{%
\ifcase\numexpr#1\relax
\ifdefined\c@chapter chapter\else section\fi%
\or section%
\or subsection%
\or subsubsection%
\or paragraph%
\or subparagraph%
\or empty%
\else\ifnum\numexpr#1<\m@ne
book%
\else
part%
\fi
\fi
}
\else
\def\etocdivisionnameatlevel#1{%
\ifcase\numexpr#1\relax
\ifdefined\c@chapter chapter\else section\fi%
\or section%
\or subsection%
\or subsubsection%
\or subsubsubsection%
\or subsubsubsubsection%
\or subsubsubsubsubsection%
\or subsubsubsubsubsubsection%
\or paragraph%
\or subparagraph%
\else\ifnum\numexpr#1>\z@
empty%
\else\ifnum\numexpr#1=\m@ne
part%
\else
book%
\fi\fi
\fi
}
\fi
\def\etoclocalheadtotoc#1#2{\addcontentsline{toc}{@#1}{#2}}
\def\etocglobalheadtotoc{\addcontentsline{toc}}
\providecommand*\UseName{\@nameuse}
\def\etocetoclocaltocmaketitle{%
\UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\localcontentsname}%
\if@noskipsec\leavevmode\par\fi
\etociflocaltoctotoc
{\etocifisstarred
{}% star variant, do not add to toc
{\etoclocalheadtotoc
{\etocdivisionnameatlevel{\etoclocaltop+1}}%
{\localcontentsname}%
}%
}%
{}%
}%
\def\localcontentsname {\contentsname}%
\let\etoclocaltableofcontentshook\@empty
\if1\ifEtoc@lof0\fi\ifEtoc@lot0\fi1%
\else
\AtBeginDocument{%
\let\Etoc@originaladdcontentsline\addcontentsline
\def\addcontentsline{\Etoc@hackedaddcontentsline}%
}%
\fi
\ifEtoc@lof
\ifEtoc@lot
\def\Etoc@hackedaddcontentsline#1{%
\expanded{\noexpand\in@{.#1,}}{.lof,.lot,}%
\ifin@\expandafter\Etoc@hackedaddcontentsline@i
\else\expandafter\Etoc@originaladdcontentsline
\fi {#1}}
\else
\def\Etoc@hackedaddcontentsline#1{%
\expanded{\noexpand\in@{.#1,}}{.lof,}%
\ifin@\expandafter\Etoc@hackedaddcontentsline@i
\else\expandafter\Etoc@originaladdcontentsline
\fi {#1}}
\fi
\else
\def\Etoc@hackedaddcontentsline#1{%
\expanded{\noexpand\in@{.#1,}}{.lot,}%
\ifin@\expandafter\Etoc@hackedaddcontentsline@i
\else\expandafter\Etoc@originaladdcontentsline
\fi {#1}}
\fi
\def\Etoc@hackedaddcontentsline@i#1#2#3{%
\expanded{\noexpand\in@{.#1;#2,}}{.lof;figure,.lot;table,}%
\ifin@
\addtocontents {toc}{%
\protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}%
\ifdefined\protected@file@percent\protected@file@percent\fi
}%
\fi
\Etoc@originaladdcontentsline{#1}{#2}{#3}%
}
\unless\ifdefined\expanded
\def\Etoc@hackedaddcontentsline#1{%
{\edef\Etoc@tmp{\noexpand\in@{.#1,}{\ifEtoc@lof.lof,\fi\ifEtoc@lot.lot,\fi}}\expandafter}%
\Etoc@tmp
\ifin@\expandafter\Etoc@hackedaddcontentsline@i
\else\expandafter\Etoc@originaladdcontentsline
\fi {#1}%
}
\def\Etoc@hackedaddcontentsline@i#1#2#3{%
{\edef\Etoc@tmp{\noexpand\in@{.#1;#2,}}\expandafter}%
\Etoc@tmp{.lof;figure,.lot;table,}%
\ifin@
\addtocontents {toc}{%
\protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}%
\ifdefined\protected@file@percent\protected@file@percent\fi
}%
\fi
\Etoc@originaladdcontentsline{#1}{#2}{#3}%
}
\fi
\def\Etoc@@startlocallistof#1#2#3{%
\ifEtoc@localtoc
\ifnum #2=#3\relax
\global\let\etoclocaltop\Etoc@virtualtop
\global\Etoc@notactivefalse
\Etoc@@startlocaltochook
\csname etoclocallistof#1shook\endcsname
\ifEtoc@etocstyle
\csname etocetoclistof#1smaketitle\endcsname
\fi
\fi
\fi
}
\def\Etoc@@startlocallistof@setlevels#1{%
\ifnum\etoclocaltop<\z@
\expandafter\let\csname Etoc@#1@@\endcsname\@ne
\else
\expandafter\let\csname Etoc@#1@@\expandafter\endcsname
\csname Etoc@\the\numexpr\etoclocaltop+\@ne @@\endcsname
\fi
\def\Etoc@do##1{%
\ifnum\etoclevel{##1}>\etoclocaltop
\expandafter\let\csname Etoc@##1@@\endcsname\Etoc@maxlevel
\fi}%
\Etoc@dolevels
}
\def\etoclocallistoffigureshook{\etocstandardlines}
\def\etoclocallistoftableshook {\etocstandardlines}
\def\locallistfigurename{\listfigurename}
\def\locallisttablename {\listtablename}
\def\etocetoclistoffiguresmaketitle{%
\UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallistfigurename}%
\ifnum\etoclocaltop>\tw@\mbox{}\par\fi
\etociflocalloftotoc
{\etocifisstarred
{}% star variant, do not add to toc
{\etoclocalheadtotoc
{\etocdivisionnameatlevel{\etoclocaltop+1}}%
{\locallistfigurename}%
}%
}%
{}%
}%
\def\etocetoclistoftablesmaketitle{%
\UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallisttablename}%
\ifnum\etoclocaltop>\tw@\mbox{}\par\fi
\etociflocallottotoc
{\etocifisstarred
{}% star variant, do not add to toc
{\etoclocalheadtotoc
{\etocdivisionnameatlevel{\etoclocaltop+1}}%
{\locallisttablename}%
}%
}%
{}%
}%
\let\Etoc@listofreset\@empty
\ifEtoc@lof
\def\locallistoffigures{%
\def\Etoc@listofreset{%
\let\Etoc@currext\Etoc@tocext
\let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc
\let\Etoc@@startlocaltochook\@empty
\let\Etoc@listofreset\@empty
\let\Etoc@listofhook\@empty
}%
\let\Etoc@currext\Etoc@lofext
\def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{figure}}%
\def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{figure}}%
\def\Etoc@listofhook{%
\def\Etoc@do####1{%
\expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel
}%
\Etoc@dolevels
}%
\localtableofcontents
}
\else
\def\locallistoffigures{%
\PackageError{etoc}{%
\string\locallistoffigures \on@line\space but\MessageBreak
package was loaded without `lof' option}%
{Try again with \string\usepackage[lof]{etoc}}%
}
\fi
\ifEtoc@lot
\def\locallistoftables{%
\def\Etoc@listofreset{%
\let\Etoc@currext\Etoc@tocext
\let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc
\let\Etoc@@startlocaltochook\@empty
\let\Etoc@listofreset\@empty
\let\Etoc@listofhook\@empty
}%
\let\Etoc@currext\Etoc@lotext
\def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{table}}%
\def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{table}}%
\def\Etoc@listofhook{%
\def\Etoc@do####1{%
\expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel
}%
\Etoc@dolevels
}%
\localtableofcontents
}
\else
\def\locallistoftables{%
\PackageError{etoc}{%
\string\locallistoftable \on@line\space but\MessageBreak
package was loaded without `lot' option}%
{Try again with \string\usepackage[lot]{etoc}}%
}
\fi
\def\Etoc@checkifempty {%
\global\Etoc@isemptytoctrue
\global\Etoc@stoptocfalse
\global\let\Etoc@level\Etoc@minf
\global\let\Etoc@virtualtop\Etoc@minf
\gdef\Etoc@stackofends{{-3}{}}%
\begingroup
\ifEtoc@localtoc
\def\etoc@startlocaltoc##1{%
\ifnum##1=\Etoc@tocid\relax
\global\let\etoclocaltop\Etoc@virtualtop
\Etoc@@startlocaltochook
\global\Etoc@notactivefalse
\fi
}%
\let\contentsline\Etoc@testingcontentslinelocal
\else
\let\contentsline\Etoc@testingcontentsline
\fi
\Etoc@storetocdepth
\let\Etoc@setlocaltop@doendsandbegin\@empty
\the\Etoc@toctoks
\Etoc@restoretocdepth
\endgroup
}
\DeclareRobustCommand*\etocifwasempty
{\ifEtoc@isemptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi }
\expandafter\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname
\def\Etoc@testingcontentslinelocal #1{%
\ifEtoc@stoptoc
\else
\ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel
\else
\global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname
\if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi
\ifEtoc@notactive
\else
\ifnum\Etoc@level>\etoclocaltop
\unless\ifnum\Etoc@level>\c@tocdepth
\global\Etoc@isemptytocfalse
\global\Etoc@stoptoctrue
\fi
\else
\global\Etoc@stoptoctrue
\fi
\fi
\fi
\fi
\Etoc@gobblethreeorfour{}%
}
\def\Etoc@testingcontentsline #1{%
\ifEtoc@stoptoc
\else
\ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel
\else
\unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth
\global\Etoc@isemptytocfalse
\global\Etoc@stoptoctrue
\fi
\fi
\fi
\Etoc@gobblethreeorfour{}%
}
\def\Etoc@localtableofcontents#1{%
\gdef\etoclocaltop{-\@m}%
\Etoc@localtoctrue
\global\Etoc@isemptytocfalse
\edef\Etoc@tocid{#1}%
\ifnum\Etoc@tocid<\@ne
\setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. \space Rerun LaTeX}}%
\global\Etoc@stoptoctrue
\gdef\etoclocaltop{-\thr@@}%
\Etoc@tableofcontents
\expandafter\Etoc@gobtoetoc@
\fi
\global\Etoc@notactivetrue
\ifEtoc@checksemptiness
\Etoc@checkifempty
\fi
\ifEtoc@isemptytoc
\ifEtoc@notactive
\setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. \space Rerun LaTeX}}%
\global\Etoc@isemptytocfalse
\global\Etoc@stoptoctrue
\gdef\etoclocaltop{-\thr@@}%
\Etoc@tableofcontents
\expandafter\expandafter\expandafter\Etoc@gobtoetoc@
\fi
\else
\global\Etoc@stoptocfalse
\global\Etoc@notactivetrue
\edef\etoc@startlocaltoc##1%
{\noexpand\Etoc@@startlocaltoc{##1}{\Etoc@tocid}}%
\Etoc@tableofcontents
\fi
\@gobble\etoc@
\endgroup\ifEtoc@mustclosegroup\endgroup\fi
\Etoc@tocdepthreset
\Etoc@listofreset
\etocaftertochook
}% \Etoc@localtableofcontents
\def\Etoc@getref #1{%
\@ifundefined{r@#1}
{0}
{\expandafter\Etoc@getref@i\romannumeral-`0%
\expandafter\expandafter\expandafter
\@car\csname r@#1\endcsname0\@nil\@etoc
}%
}
\def\Etoc@getref@i#1#2\@etoc{\ifnum9<1\string#1 #1#2\else 0\fi}
\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}}
\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents}
\def\Etoc@dothis #1#2\etoc@ {\fi #1}
\def\Etoc@t@bleofcontents{%
\gdef\etoclocaltop{-\@M}%
\ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi
\ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi
\ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi
\ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi
\global\Etoc@isemptytocfalse
\ifEtoc@checksemptiness\Etoc@checkifempty\fi
\ifEtoc@isemptytoc
\ifEtoc@notocifnotoc
\expandafter\expandafter\expandafter\@gobble
\fi
\fi
\Etoc@tableofcontents
\endgroup
\ifEtoc@mustclosegroup\endgroup\fi
\Etoc@tocdepthreset
\Etoc@listofreset
\etocaftertochook
\@gobble\etoc@
}% \Etoc@t@bleofcontents
\def\Etoc@table@fcontents{%
\refstepcounter{etoc@tocid}%
\Etoc@tocwithidfalse
\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents
}
\def\Etoc@localtable@fcontents{%
\refstepcounter{etoc@tocid}%
\addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}%
\Etoc@tocwithidtrue
\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents
}
\def\etoctableofcontents{%
\Etoc@openouttoc
\Etoc@tocdepthset
\begingroup
\@ifstar
{\let\Etoc@aftertitlehook\@empty\Etoc@table@fcontents}
{\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@table@fcontents}%
}% \etoctableofcontents
\def\etocifisstarred{\ifx\Etoc@aftertitlehook\@empty
\expandafter\@firstoftwo\else
\expandafter\@secondoftwo
\fi}
\let\etocoriginaltableofcontents\tableofcontents
\let\tableofcontents\etoctableofcontents
\let\Etoc@listofhook\@empty
\newcommand*\localtableofcontents{%
\Etoc@openouttoc
\Etoc@tocdepthset
\begingroup
\Etoc@listofhook
\@ifstar
{\let\Etoc@aftertitlehook\@empty\Etoc@localtable@fcontents}
{\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@localtable@fcontents}%
}% \localtableofcontents
\newcommand*\localtableofcontentswithrelativedepth[1]{%
\def\Etoc@@startlocaltochook{%
\global\c@tocdepth\numexpr\etoclocaltop+#1\relax
}%
\def\Etoc@listofreset{\let\Etoc@@startlocaltochook\@empty
\let\Etoc@listofreset\@empty}%
\localtableofcontents
}% \localtableofcontentswithrelativedepth
\newcommand\etocsettocstyle[2]{%
\Etoc@etocstylefalse
\Etoc@classstylefalse
\def\Etoc@tableofcontents@user@before{#1}%
\def\Etoc@tableofcontents@user@after {#2}%
}%
\def\etocstoretocstyleinto#1{%
%% \@ifdefinable#1{%
\edef#1{\noexpand\Etoc@etocstylefalse\noexpand\Etoc@classstylefalse
\def\noexpand\Etoc@tableofcontents@user@before{%
\unexpanded\expandafter{\Etoc@tableofcontents@user@before}%
}%
\def\noexpand\Etoc@tableofcontents@user@after{%
\unexpanded\expandafter{\Etoc@tableofcontents@user@after}%
}%
}%
%% }%
}%
\def\Etoc@tableofcontents {%
\Etoc@tableofcontents@etoc@before
\ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi
\Etoc@tableofcontents@user@before
\Etoc@tableofcontents@contents
\ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi
\Etoc@tableofcontents@user@after
\Etoc@tableofcontents@etoc@after
\@gobble\etoc@
}
\def\Etoc@tableofcontents@etoc@before{%
\ifnum\c@tocdepth>\Etoc@minf
\else
\expandafter\Etoc@gobtoetoc@
\fi
\Etoc@par
\Etoc@beforetitlehook
\etocbeforetitlehook
\Etoc@storetocdepth
\let\Etoc@savedcontentsline\contentsline
\let\contentsline\Etoc@etoccontentsline
\ifEtoc@standardlines
\else
\def\Etoc@do##1{%
\expandafter\def\csname etocsaved##1tocline\endcsname
{\PackageError{etoc}{%
\expandafter\string\csname etocsaved##1tocline\endcsname\space
has been deprecated\MessageBreak
at 1.1a and is removed at 1.2.\MessageBreak
Use \expandafter\string\csname l@##1\endcsname\space directly.\MessageBreak
Reported \on@line}%
{I will use \expandafter\string
\csname l@##1\endcsname\space myself for this time.%
}%
\csname l@##1\endcsname
}%
}%
\Etoc@dolevels
\fi
}%
\def\Etoc@tableofcontents@contents{%
\Etoc@tocdepthset
\ifEtoc@parskip\parskip\z@skip\fi
\Etoc@aftertitlehook
\gdef\etoclocaltop{-\thr@@}%
\Etoc@toctoc
\etocaftercontentshook
}%
\def\Etoc@tableofcontents@etoc@after{%
\@nobreakfalse
\Etoc@restoretocdepth
\ifx\Etoc@global\global
\@ifundefined{tof@finish}
{}
{\ifx\tof@finish\@empty
\else
\global\let\contentsline\Etoc@savedcontentsline
\fi
}%
\fi
}
\def\etocsetstyle#1{\ifcsname Etoc@#1@@\endcsname
\expandafter\Etoc@setstyle@a
\else
\expandafter\Etoc@setstyle@error
\fi {#1}%
}
\def\Etoc@setstyle@error #1{%
\PackageWarning{etoc}{`#1' is unknown to etoc. \space Did you\MessageBreak
forget some \string\etocsetlevel{#1}{<level>}?\MessageBreak
Reported}%
\@gobblefour
}
\def\Etoc@setstyle@a #1{%
\edef\Etoc@tmp{\the\numexpr\csname Etoc@#1@@\endcsname}%
\if1\unless\ifnum\Etoc@tmp<\Etoc@maxlevel 0\fi
\unless\ifnum\Etoc@tmp>\Etoc@minf 0\fi1%
\Etoc@standardlinesfalse
\expandafter\Etoc@setstyle@b\expandafter\Etoc@tmp
\else
\ifnum\Etoc@tmp=\Etoc@maxlevel
\in@{.#1,}{.figure,.table,}%
\ifin@
\PackageWarning{etoc}
{You can not use \string\etocsetstyle\space with `#1'.\MessageBreak
Check the package documentation (in particular about\MessageBreak
\string\etoclocallistoffigureshook/\string\etoclocallistoftableshook)%
\MessageBreak on how to customize
figure and table entries in local\MessageBreak lists. Reported}%
\else
\PackageInfo{etoc}
{Attempt to set the style of `#1',\MessageBreak
whose level is currently the maximal one \etocthemaxlevel,\MessageBreak
which is never displayed. \space This will be ignored\MessageBreak
but note that we do quit compatibility mode.\MessageBreak
Reported}%
\Etoc@standardlinesfalse
\fi
\else
\PackageWarning{etoc}{This should not happen. Reported}%
\fi
\expandafter\@gobblefour
\fi
}
\long\def\Etoc@setstyle@b#1#2#3#4#5{%
\expandafter\def\csname Etoc@begin@#1\endcsname {#2}%
\expandafter\def\csname Etoc@prefix@#1\endcsname {#3}%
\expandafter\def\csname Etoc@contents@#1\endcsname {#4}%
\expandafter\def\csname Etoc@end@#1\endcsname {#5}%
}
\def\Etoc@setstyle@e#1{%
\expandafter\let\csname Etoc@begin@#1\endcsname \@empty
\expandafter\let\csname Etoc@prefix@#1\endcsname \@empty
\expandafter\let\csname Etoc@contents@#1\endcsname \@empty
\expandafter\let\csname Etoc@end@#1\endcsname \@empty
}
\def\Etoc@storelines@a#1{%
\noexpand\Etoc@setstyle@b{#1}%
{\expandafter\Etoc@expandonce\csname Etoc@begin@#1\endcsname}%
{\expandafter\Etoc@expandonce\csname Etoc@prefix@#1\endcsname}%
{\expandafter\Etoc@expandonce\csname Etoc@contents@#1\endcsname}%
{\expandafter\Etoc@expandonce\csname Etoc@end@#1\endcsname}%
}
\def\Etoc@expandonce#1{\unexpanded\expandafter{#1}}
\def\etocstorelinestylesinto#1{%
\edef#1{\Etoc@storelines@a{-2}\Etoc@storelines@a{-1}\Etoc@storelines@a{0}%
\Etoc@storelines@a {1}\Etoc@storelines@a {2}\Etoc@storelines@a{3}%
\Etoc@storelines@a {4}\Etoc@storelines@a {5}%
\ifEtoc@deeplevels
\Etoc@storelines@a{6}\Etoc@storelines@a{7}\Etoc@storelines@a{8}%
\Etoc@storelines@a{9}\Etoc@storelines@a{10}\Etoc@storelines@a{11}%
\fi
}%
}
\def\etocstorethislinestyleinto#1#2{%
\edef#2{\expandafter\Etoc@storelines@a\expandafter{\number\etoclevel{#1}}}%
}%
\def\etocfontminustwo {\normalfont \LARGE \bfseries}
\def\etocfontminusone {\normalfont \large \bfseries}
\def\etocfontzero {\normalfont \large \bfseries}
\def\etocfontone {\normalfont \normalsize \bfseries}
\def\etocfonttwo {\normalfont \normalsize}
\def\etocfontthree {\normalfont \footnotesize}
\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex}
\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex}
\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex}
\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex}
\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex}
\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex}
\def\etocbaselinespreadminustwo {1}
\def\etocbaselinespreadminusone {1}
\def\etocbaselinespreadzero {1}
\def\etocbaselinespreadone {1}
\def\etocbaselinespreadtwo {1}
\def\etocbaselinespreadthree {.9}
\def\etocminustwoleftmargin {1.5em plus 0.5fil}
\def\etocminustworightmargin {1.5em plus -0.5fil}
\def\etocminusoneleftmargin {1em}
\def\etocminusonerightmargin {1em}
\def\etoctoclineleaders
{\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}}
\def\etocabbrevpagename {p.~}
\def\etocpartname {Part}
\def\etocbookname {Book}
\def\etocdefaultlines{%
\Etoc@standardlinesfalse
\etocdefaultlines@setbook
\etocdefaultlines@setpart
\etocdefaultlines@setchapter
\etocdefaultlines@setsection
\etocdefaultlines@setsubsection
\etocdefaultlines@setsubsubsection
\etocdefaultlines@setdeeperones
}
\def\etocnoprotrusion{\leavevmode\kern-\p@\kern\p@}
\@ifclassloaded{memoir}{%
\def\etocdefaultlines@setbook{%
\Etoc@setstyle@b
{-2}%
{\addpenalty\@M\etocskipfirstprefix}
{\addpenalty\@secpenalty}
{\begingroup
\etocfontminustwo
\addvspace{\etocsepminustwo}%
\parindent \z@
\leftskip \etocminustwoleftmargin
\rightskip \etocminustworightmargin
\parfillskip \@flushglue
\vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}%
\etocname
\baselineskip\etocbaselinespreadminustwo\baselineskip
\par}%
\addpenalty\@M\addvspace{\etocsepminusone}%
\endgroup}
{}%
}
}{\let\etocdefaultlines@setbook\@empty}
\def\etocdefaultlines@setpart{%
\Etoc@setstyle@b
{-1}%
{\addpenalty\@M\etocskipfirstprefix}
{\addpenalty\@secpenalty}
{\begingroup
\etocfontminusone
\addvspace{\etocsepminusone}%
\parindent \z@
\leftskip \etocminusoneleftmargin
\rightskip \etocminusonerightmargin
\parfillskip \@flushglue
\vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}%
\etocname
\baselineskip\etocbaselinespreadminusone\baselineskip
\par}%
\addpenalty\@M\addvspace{\etocsepzero}%
\endgroup}
{}%
}
\def\etocdefaultlines@setchapter{%
\Etoc@setstyle@b
{0}%
{\addpenalty\@M\etocskipfirstprefix}
{\addpenalty\@itempenalty}
{\begingroup
\etocfontzero
\addvspace{\etocsepzero}%
\parindent \z@ \parfillskip \@flushglue
\vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname
\baselineskip\etocbaselinespreadzero\baselineskip
\par}%
\endgroup}
{\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}%
}
\def\etocdefaultlines@setsection{%
\Etoc@setstyle@b
{1}%
{\addpenalty\@M\etocskipfirstprefix}
{\addpenalty\@itempenalty}
{\begingroup
\etocfontone
\addvspace{\etocsepone}%
\parindent \z@ \parfillskip \z@
\setbox\z@\vbox{\parfillskip\@flushglue
\etocname\par
\setbox\tw@\lastbox
\global\setbox\@ne\hbox{\unhbox\tw@\ }}%
\dimen\z@=\wd\@ne
\setbox\z@=\etoctoclineleaders
\advance\dimen\z@\wd\z@
\etocifnumbered
{\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}}
{\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}%
\advance\dimen\z@\wd\tw@
\ifdim\dimen\z@ < \linewidth
\vbox{\etocname~%
\leaders\box\z@\hfil\box\tw@
\baselineskip\etocbaselinespreadone\baselineskip
\par}%
\else
\vbox{\etocname~%
\leaders\copy\z@\hfil\break
\hbox{}\leaders\box\z@\hfil\box\tw@
\baselineskip\etocbaselinespreadone\baselineskip
\par}%
\fi
\endgroup}
{\addpenalty\@secpenalty\addvspace{\etocsepzero}}%
}
\def\etocdefaultlines@setsubsection{%
\Etoc@setstyle@b
{2}%
{\addpenalty\@medpenalty\etocskipfirstprefix}
{\addpenalty\@itempenalty}
{\begingroup
\etocfonttwo
\addvspace{\etocseptwo}%
\parindent \z@ \parfillskip \z@
\setbox\z@\vbox{\parfillskip\@flushglue
\etocname\par\setbox\tw@\lastbox
\global\setbox\@ne\hbox{\unhbox\tw@}}%
\dimen\z@=\wd\@ne
\setbox\z@=\etoctoclineleaders
\advance\dimen\z@\wd\z@
\etocifnumbered
{\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}}
{\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}%
\advance\dimen\z@\wd\tw@
\ifdim\dimen\z@ < \linewidth
\vbox{\etocname~%
\leaders\box\z@\hfil\box\tw@
\baselineskip\etocbaselinespreadtwo\baselineskip
\par}%
\else
\vbox{\etocname~%
\leaders\copy\z@\hfil\break
\hbox{}\leaders\box\z@\hfil\box\tw@
\baselineskip\etocbaselinespreadtwo\baselineskip
\par}%
\fi
\endgroup}
{\addpenalty\@secpenalty\addvspace{\etocsepone}}%
}
\def\etocdefaultlines@setsubsubsection{%
\Etoc@setstyle@b
{3}%
{\addpenalty\@M
\etocfontthree
\vspace{\etocsepthree}%
\noindent
\etocskipfirstprefix}
{\allowbreak\,--\,}
{\etocname}
{.\hfil
\begingroup
\baselineskip\etocbaselinespreadthree\baselineskip
\par
\endgroup
\addpenalty{-\@highpenalty}}
}
\def\etocdefaultlines@setdeeperones{%
\Etoc@setstyle@e{4}%
\Etoc@setstyle@e{5}%
\ifEtoc@deeplevels
\Etoc@setstyle@e{6}%
\Etoc@setstyle@e{7}%
\Etoc@setstyle@e{8}%
\Etoc@setstyle@e{9}%
\Etoc@setstyle@e{10}%
\Etoc@setstyle@e{11}%
\fi
}
\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex}
\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex}
\def\etoccolumnsep{2em}
\def\etocmulticolsep{0ex}
\def\etocmulticolpretolerance{-1}
\def\etocmulticoltolerance{200}
\def\etocdefaultnbcol{2}
\def\etocinnertopsep{2ex}
\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{%
\etocsettocstyle
{\let\etocoldpar\par
\addvspace{\etocabovetocskip}%
\ifnum #1>\@ne
\expandafter\@firstoftwo
\else \expandafter\@secondoftwo
\fi
{\multicolpretolerance\etocmulticolpretolerance
\multicoltolerance\etocmulticoltolerance
\setlength{\columnsep}{\etoccolumnsep}%
\setlength{\multicolsep}{\etocmulticolsep}%
\begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]}
{#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip
\@@par\endgroup
\fi
\nobreak\addvspace{\etocinnertopsep}%
\pretolerance\etocmulticolpretolerance
\tolerance\etocmulticoltolerance}%
}%
{\ifnum #1>\@ne
\expandafter\@firstofone
\else \expandafter\@gobble
\fi
{\end{multicols}}%
\addvspace{\etocbelowtocskip}}%
}
\def\etocinnerbottomsep{3.5ex}
\def\etocinnerleftsep{2em}
\def\etocinnerrightsep{2em}
\def\etoctoprule{\hrule}
\def\etocleftrule{\vrule}
\def\etocrightrule{\vrule}
\def\etocbottomrule{\hrule}
\def\etoctoprulecolorcmd{\relax}
\def\etocbottomrulecolorcmd{\relax}
\def\etocleftrulecolorcmd{\relax}
\def\etocrightrulecolorcmd{\relax}
\def\etoc@ruledheading #1{%
\hb@xt@\linewidth{\color@begingroup
\hss #1\hss\hskip-\linewidth
\etoctoprulecolorcmd\leaders\etoctoprule\hss
\phantom{#1}%
\leaders\etoctoprule\hss\color@endgroup}%
\nointerlineskip\nobreak\vskip\etocinnertopsep}
\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{%
\etocsettocstyle
{\addvspace{\etocabovetocskip}%
\ifnum #1>\@ne
\expandafter\@firstoftwo
\else \expandafter\@secondoftwo
\fi
{\multicolpretolerance\etocmulticolpretolerance
\multicoltolerance\etocmulticoltolerance
\setlength{\columnsep}{\etoccolumnsep}%
\setlength{\multicolsep}{\etocmulticolsep}%
\begin{multicols}{#1}[\etoc@ruledheading{#2}]}
{\etoc@ruledheading{#2}%
\pretolerance\etocmulticolpretolerance
\tolerance\etocmulticoltolerance}}
{\ifnum #1>\@ne\expandafter\@firstofone
\else \expandafter\@gobble
\fi
{\end{multicols}}%
\addvspace{\etocbelowtocskip}}}
\def\etocframedmphook{\relax}
\long\def\etocbkgcolorcmd{\relax}
\long\def\Etoc@relax{\relax}
\newbox\etoc@framed@titlebox
\newbox\etoc@framed@contentsbox
\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{%
\etocsettocstyle{%
\addvspace{\etocabovetocskip}%
\sbox\z@{#2}%
\dimen\z@\dp\z@
\ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi
\setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup
\hss
\ifx\etocbkgcolorcmd\Etoc@relax
\else
\sbox\tw@{\color{white}%
\vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}%
\ifdim\wd\z@<\linewidth \dp\tw@\z@\fi
\box\tw@
\hskip-\wd\z@
\fi
\copy\z@
\hss
\hskip-\linewidth
\etoctoprulecolorcmd\leaders\etoctoprule\hss
\hskip\wd\z@
\etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}%
\setbox\z@\hbox{\etocleftrule\etocrightrule}%
\dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@
\advance\dimen\tw@-\etocinnerleftsep
\advance\dimen\tw@-\etocinnerrightsep
\setbox\etoc@framed@contentsbox=\vbox\bgroup
\hsize\dimen\tw@
\kern\dimen\z@
\vskip\etocinnertopsep
\hbox\bgroup
\begin{minipage}{\hsize}%
\etocframedmphook
\ifnum #1>\@ne
\expandafter\@firstoftwo
\else \expandafter\@secondoftwo
\fi
{\multicolpretolerance\etocmulticolpretolerance
\multicoltolerance\etocmulticoltolerance
\setlength{\columnsep}{\etoccolumnsep}%
\setlength{\multicolsep}{\etocmulticolsep}%
\begin{multicols}{#1}}
{\pretolerance\etocmulticolpretolerance
\tolerance\etocmulticoltolerance}}
{\ifnum #1>\@ne\expandafter\@firstofone
\else \expandafter\@gobble
\fi
{\end{multicols}\unskip }%
\end{minipage}%
\egroup
\vskip\etocinnerbottomsep
\egroup
\vbox{\hsize\linewidth
\ifx\etocbkgcolorcmd\Etoc@relax
\else
\kern\ht\etoc@framed@titlebox
\kern\dp\etoc@framed@titlebox
\hb@xt@\linewidth{\color@begingroup
\etocleftrulecolorcmd\etocleftrule
\etocbkgcolorcmd
\leaders\vrule
\@height\ht\etoc@framed@contentsbox
\@depth\dp\etoc@framed@contentsbox
\hss
\etocrightrulecolorcmd\etocrightrule
\color@endgroup}\nointerlineskip
\vskip-\dp\etoc@framed@contentsbox
\vskip-\ht\etoc@framed@contentsbox
\vskip-\dp\etoc@framed@titlebox
\vskip-\ht\etoc@framed@titlebox
\fi
\box\etoc@framed@titlebox\nointerlineskip
\hb@xt@\linewidth{\color@begingroup
{\etocleftrulecolorcmd\etocleftrule}%
\hss\box\etoc@framed@contentsbox\hss
\etocrightrulecolorcmd\etocrightrule\color@endgroup}
\nointerlineskip
\vskip\ht\etoc@framed@contentsbox
\vskip\dp\etoc@framed@contentsbox
\hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd
\leaders\etocbottomrule\hss\color@endgroup}}
\addvspace{\etocbelowtocskip}}}
\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{%
\etocmulticolstyle[#1]{#2}%
\tableofcontents}
\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{%
\etocmulticolstyle[#1]{#2}%
\tableofcontents*}
\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{%
\etocmulticolstyle[#1]{#2}%
\localtableofcontents}
\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{%
\etocmulticolstyle[#1]{#2}%
\localtableofcontents*}
\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{%
\etocruledstyle[#1]{#2}%
\tableofcontents}
\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{%
\etocruledstyle[#1]{#2}%
\tableofcontents*}
\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{%
\etocruledstyle[#1]{#2}%
\localtableofcontents}
\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{%
\etocruledstyle[#1]{#2}%
\localtableofcontents*}
\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{%
\etocframedstyle[#1]{#2}%
\tableofcontents}
\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{%
\etocframedstyle[#1]{#2}%
\tableofcontents*}
\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{%
\etocframedstyle[#1]{#2}%
\localtableofcontents}
\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{%
\etocframedstyle[#1]{#2}%
\localtableofcontents*}
\def\etocmulticol{\begingroup
\Etoc@mustclosegrouptrue
\@ifstar
{\etoc@multicoltoci}
{\etoc@multicoltoc}}
\def\etocruled{\begingroup
\Etoc@mustclosegrouptrue
\@ifstar
{\etoc@ruledtoci}
{\etoc@ruledtoc}}
\def\etocframed{\begingroup
\Etoc@mustclosegrouptrue
\@ifstar
{\etoc@framedtoci}
{\etoc@framedtoc}}
\def\etoclocalmulticol{\begingroup
\Etoc@mustclosegrouptrue
\@ifstar
{\etoc@local@multicoltoci}
{\etoc@local@multicoltoc}}
\def\etoclocalruled{\begingroup
\Etoc@mustclosegrouptrue
\@ifstar
{\etoc@local@ruledtoci}
{\etoc@local@ruledtoc}}
\def\etoclocalframed{\begingroup
\Etoc@mustclosegrouptrue
\@ifstar
{\etoc@local@framedtoci}
{\etoc@local@framedtoc}}
\def\etocmemoirtoctotocfmt #1#2{%
\PackageWarning{etoc}
{\string\etocmemoirtoctotocfmt\space is deprecated.\MessageBreak
Use in its place \string\etocsettoclineforclasstoc,\MessageBreak
and \string\etocsettoclineforclasslistof{toc} (or {lof}, {lot}).
I will do this now.\MessageBreak
Reported}%
\etocsettoclineforclasstoc{#1}{#2}%
\etocsettoclineforclasslistof{toc}{#1}{#2}%
}
\def\etocsettoclineforclasstoc #1#2{%
\def\etocclassmaintocaddtotoc{\etocglobalheadtotoc{#1}{#2}}%
}
\def\etocsettoclineforclasslistof #1#2#3{%
\@namedef{etocclasslocal#1addtotoc}{\etoclocalheadtotoc{#2}{#3}}%
}
\let\etocclasslocaltocaddtotoc\@empty
\let\etocclasslocallofaddtotoc\@empty
\let\etocclasslocallotaddtotoc\@empty
\ifdefined\c@chapter
\def\etocclasslocaltocmaketitle{\section*{\localcontentsname}}
\def\etocclasslocallofmaketitle{\section*{\locallistfigurename}}
\def\etocclasslocallotmaketitle{\section*{\locallisttablename}}
\etocsettoclineforclasstoc {chapter}{\contentsname}
\etocsettoclineforclasslistof{toc}{section}{\localcontentsname}
\etocsettoclineforclasslistof{lof}{section}{\locallistfigurename}
\etocsettoclineforclasslistof{lot}{section}{\locallisttablename}
\else
\def\etocclasslocaltocmaketitle{\subsection*{\localcontentsname}}%
\def\etocclasslocallofmaketitle{\subsection*{\locallistfigurename}}%
\def\etocclasslocallotmaketitle{\subsection*{\locallisttablename}}%
\etocsettoclineforclasstoc {section}{\contentsname}
\etocsettoclineforclasslistof{toc}{subsection}{\localcontentsname}
\etocsettoclineforclasslistof{lof}{subsection}{\locallistfigurename}
\etocsettoclineforclasslistof{lot}{subsection}{\locallisttablename}
\fi
\def\etocclasslocalperhapsaddtotoc #1{%
\etocifisstarred
{}
{\csname ifEtoc@local#1totoc\endcsname
\csname etocclasslocal#1addtotoc\endcsname
\fi
}%
}
\def\etocarticlestyle{%
\etocsettocstyle
{\ifEtoc@localtoc
\@nameuse{etocclasslocal\Etoc@currext maketitle}%
\etocclasslocalperhapsaddtotoc\Etoc@currext
\else
\section *{\contentsname
\@mkboth {\MakeUppercase \contentsname}
{\MakeUppercase \contentsname}}%
\etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
\fi
}
{}%
}
\def\etocarticlestylenomarks{%
\etocsettocstyle
{\ifEtoc@localtoc
\@nameuse{etocclasslocal\Etoc@currext maketitle}%
\etocclasslocalperhapsaddtotoc\Etoc@currext
\else
\section *{\contentsname}%
\etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
\fi
}
{}%
}
\def\etocbookstyle{%
\etocsettocstyle
{\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
\ifEtoc@localtoc
\@nameuse{etocclasslocal\Etoc@currext maketitle}%
\etocclasslocalperhapsaddtotoc\Etoc@currext
\else
\chapter *{\contentsname
\@mkboth {\MakeUppercase \contentsname}
{\MakeUppercase \contentsname}}%
\etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
\fi
}%
{\if@restonecol \twocolumn \fi}%
}
\def\etocbookstylenomarks{%
\etocsettocstyle
{\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi
\ifEtoc@localtoc
\@nameuse{etocclasslocal\Etoc@currext maketitle}%
\etocclasslocalperhapsaddtotoc\Etoc@currext
\else
\chapter *{\contentsname}%
\etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}%
\fi
}%
{\if@restonecol \twocolumn \fi}%
}
\let\etocreportstyle\etocbookstyle
\let\etocreportstylenomarks\etocbookstylenomarks
\def\etocmemoirstyle{%
\etocsettocstyle
{\ensureonecol \par \begingroup \phantomsection
\ifx\Etoc@aftertitlehook\@empty
\else
\ifmem@em@starred@listof
\else
\ifEtoc@localtoc
\etocclasslocalperhapsaddtotoc\Etoc@currext
\else
\ifEtoc@maintoctotoc
\etocclassmaintocaddtotoc
\fi
\fi
\fi
\fi
\ifEtoc@localtoc
\@namedef{@\Etoc@currext maketitle}{%
\@nameuse{etocclasslocal\Etoc@currext maketitle}%
}%
\fi
\@nameuse {@\Etoc@currext maketitle} %<< space token here from memoir code
\ifx\Etoc@aftertitlehook\@empty
\else
\Etoc@aftertitlehook \let \Etoc@aftertitlehook \relax
\fi
\parskip \cftparskip \@nameuse {cft\Etoc@currext beforelisthook}%
}%
{\@nameuse {cft\Etoc@currext afterlisthook}%
\endgroup\restorefromonecol
}%
}
\let\Etoc@beforetitlehook\@empty
\if1\@ifclassloaded{scrartcl}0{\@ifclassloaded{scrbook}0{\@ifclassloaded{scrreprt}01}}%
\expandafter\@gobble
\else
\ifdefined\setuptoc
\def\Etoc@beforetitlehook{%
\ifEtoc@localtoc
\etocclasslocalperhapsaddtotoc\Etoc@currext
\setuptoc{\Etoc@currext}{leveldown}%
\else
\etocifisstarred{}{\etocifmaintoctotoc{\setuptoc{toc}{totoc}}}%
\fi
}%
\fi
\expandafter\@firstofone
\fi
{\def\etocclasslocalperhapsaddtotoc #1{%
\etocifisstarred
{}%
{\csname ifEtoc@local#1totoc\endcsname
\setuptoc{\Etoc@currext}{totoc}%
\fi
}%
}%
}
\ifdefined\Iftocfeature
\def\etoc@Iftocfeature{\Iftocfeature}%
\else
\def\etoc@Iftocfeature{\iftocfeature}%
\fi
\def\etocscrartclstyle{%
\etocsettocstyle
{\ifx\Etoc@currext\Etoc@tocext
\expandafter\@firstofone
\else
\expandafter\@gobble
\fi
{\let\if@dynlist\if@tocleft}%
\edef\@currext{\Etoc@currext}%
\@ifundefined{listof\@currext name}%
{\def\list@fname{\listofname~\@currext}}%
{\expandafter\let\expandafter\list@fname
\csname listof\@currext name\endcsname}%
\etoc@Iftocfeature {\@currext}{onecolumn}
{\etoc@Iftocfeature {\@currext}{leveldown}
{}
{\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }}
{}%
\etoc@Iftocfeature {\@currext}{numberline}%
{\def \nonumberline {\numberline {}}}{}%
\expandafter\tocbasic@listhead\expandafter {\list@fname}%
\begingroup \expandafter \expandafter \expandafter
\endgroup \expandafter
\ifx
\csname microtypesetup\endcsname \relax
\else
\etoc@Iftocfeature {\@currext}{noprotrusion}{}
{\microtypesetup {protrusion=false}%
\PackageInfo {tocbasic}%
{character protrusion at \@currext\space deactivated}}%
\fi
\etoc@Iftocfeature{\@currext}{noparskipfake}{}{%
\ifvmode \@tempskipa\lastskip \vskip-\lastskip
\addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\fi
}%
\setlength {\parskip }{\z@ }%
\setlength {\parindent }{\z@ }%
\setlength {\parfillskip }{\z@ \@plus 1fil}%
\csname tocbasic@@before@hook\endcsname
\csname tb@\@currext @before@hook\endcsname
}% end of before_toc
{% start of after_toc
\providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file
\edef\@currext{\Etoc@currext}%
\csname tb@\@currext @after@hook\endcsname
\csname tocbasic@@after@hook\endcsname
}% end of after_toc
}
\let\etocscrbookstyle\etocscrartclstyle
\let\etocscrreprtstyle\etocscrartclstyle
\def\etocclasstocstyle{\etocarticlestyle}
\newcommand*\etocmarkboth[1]{%
\@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}
\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}}
\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]%
{\csname #1\endcsname *{#3}}}
\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]%
{\csname #1\endcsname *{#3\etocmarkboth{#4}}}}
\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]%
{\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}}
\def\Etoc@redefetocstylesforchapters{%
\renewcommand\etoctocstylewithmarks[4][chapter]{%
\etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkboth{##4}}}%
}
\renewcommand\etoctocstylewithmarksnouc[4][chapter]{%
\etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}%
}
\renewcommand\etoctocstyle[3][chapter]{%
\etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}}
}
}
\@ifclassloaded{scrartcl}
{\renewcommand*\etocclasstocstyle{\etocscrartclstyle}}{}
\@ifclassloaded{book}
{\renewcommand*\etocfontone{\normalfont\normalsize}
\renewcommand*\etocclasstocstyle{\etocbookstyle}
\Etoc@redefetocstylesforchapters}{}
\@ifclassloaded{report}
{\renewcommand*\etocfontone{\normalfont\normalsize}
\renewcommand*\etocclasstocstyle{\etocreportstyle}
\Etoc@redefetocstylesforchapters}{}
\@ifclassloaded{scrbook}
{\renewcommand*\etocfontone{\normalfont\normalsize}
\renewcommand*\etocclasstocstyle{\etocscrbookstyle}
\Etoc@redefetocstylesforchapters}{}
\@ifclassloaded{scrreprt}
{\renewcommand*\etocfontone{\normalfont\normalsize}
\renewcommand*\etocclasstocstyle{\etocscrreprtstyle}
\Etoc@redefetocstylesforchapters}{}
\@ifclassloaded{memoir}
{\renewcommand*\etocfontone{\normalfont\normalsize}
\renewcommand*\etocclasstocstyle{\etocmemoirstyle}
\Etoc@redefetocstylesforchapters}{}
\def\etoctocloftstyle {%
\etocsettocstyle{%
\@cfttocstart
\par
\begingroup
\parindent\z@ \parskip\cftparskip
\@nameuse{@cftmake\Etoc@currext title}%
\ifEtoc@localtoc
\etoctocloftlocalperhapsaddtotoc\Etoc@currext
\else
\etocifisstarred {}{\ifEtoc@maintoctotoc\@cftdobibtoc\fi}%
\fi
}%
{%
\endgroup
\@cfttocfinish
}%
}
\def\etoctocloftlocalperhapsaddtotoc#1{%
\etocifisstarred
{}%
{\csname ifEtoc@local#1totoc\endcsname
\ifdefined\c@chapter\def\@tocextra{@section}\else\def\@tocextra{@subsection}\fi
\csname @cftdobib#1\endcsname
\fi
}%
}
\def\etoctocbibindstyle {%
\etocsettocstyle {%
\toc@start
\ifEtoc@localtoc
\@nameuse{etocclasslocal\Etoc@currext maketitle}%
\etocclasslocalperhapsaddtotoc\Etoc@currext
\else
\etoc@tocbibind@dotoctitle
\fi
}%
{\toc@finish}%
}
\def\etoc@tocbibind@dotoctitle {%
\if@bibchapter
\etocifisstarred
{\chapter*{\contentsname}\prw@mkboth{\contentsname} % id.
}%
{\ifEtoc@maintoctotoc
\toc@chapter{\contentsname} %<-space from original
\else
\chapter*{\contentsname}\prw@mkboth{\contentsname} % id.
\fi
}%
\else
\etocifisstarred
{\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} %<-space
}
{\ifEtoc@maintoctotoc
\toc@section{\@tocextra}{\contentsname} %<-space from original
\else
\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} % id.
\fi
}%
\fi
}%
\@ifclassloaded{memoir}
{}
{% memoir not loaded
\@ifpackageloaded{tocloft}
{\if@cftnctoc\else
\ifEtoc@keeporiginaltoc
\else
\AtBeginDocument{\let\tableofcontents\etoctableofcontents}%
\fi
\fi }
{\AtBeginDocument
{\@ifpackageloaded{tocloft}
{\if@cftnctoc\else
\PackageWarningNoLine {etoc}
{Package `tocloft' was loaded after `etoc'.\MessageBreak
To prevent it from overwriting \protect\tableofcontents, it will\MessageBreak
be tricked into believing to have been loaded with its\MessageBreak
option `titles'. \space But this will cause the `tocloft'\MessageBreak
customization of the titles of the main list of figures\MessageBreak
and list of tables to not apply either.\MessageBreak
You should load `tocloft' before `etoc'.}%
\AtEndDocument{\PackageWarning{etoc}
{Please load `tocloft' before `etoc'!\@gobbletwo}}%
\fi
\@cftnctoctrue }%
{}%
}%
}%
}
\@ifclassloaded{memoir}
{}
{% memoir not loaded
\AtBeginDocument{%
\@ifpackageloaded{tocloft}
{%
\def\etocclasstocstyle{%
\etoctocloftstyle
\Etoc@classstyletrue
}%
\ifEtoc@etocstyle
\ifEtoc@classstyle
\etocclasstocstyle
\Etoc@etocstyletrue
\fi
\else
\ifEtoc@classstyle
\etocclasstocstyle
\fi
\fi
}%
{% no tocloft
\@ifpackageloaded {tocbibind}
{\if@dotoctoc
\def\etocclasstocstyle{%
\etoctocbibindstyle
\Etoc@classstyletrue
}%
\ifEtoc@etocstyle
\ifEtoc@classstyle
\etocclasstocstyle
\Etoc@etocstyletrue
\fi
\else
\ifEtoc@classstyle
\etocclasstocstyle
\fi
\fi
\ifEtoc@keeporiginaltoc
\else
\let\tableofcontents\etoctableofcontents
\fi
}%
{}%
}%
\@ifpackageloaded{tocbibind}
{% tocbibind, perhaps with tocloft
\if@dotoctoc
\ifEtoc@keeporiginaltoc
\else
\let\tableofcontents\etoctableofcontents
\fi
\etocsetup{maintoctotoc,localtoctotoc}%
\PackageInfo{etoc}{%
Setting (or re-setting) the options `maintoctotoc' and\MessageBreak
`localtoctotoc' to true as tocbibind was detected and\MessageBreak
found to be configured for `TOC to toc'.\MessageBreak
Reported at begin document}%
\fi
\if@dotoclof
\ifEtoc@lof
\etocsetup{localloftotoc}%
\PackageInfo{etoc}{%
Setting (or re-setting) `localloftotoc=true' as the\MessageBreak
package tocbibind was detected and is configured for\MessageBreak
`LOF to toc'. Reported at begin document}%
\fi
\fi
\if@dotoclot
\ifEtoc@lot
\etocsetup{locallottotoc}%
\PackageInfo{etoc}{%
Setting (or re-setting) `locallottotoc=true' as the\MessageBreak
package tocbibind was detected and is configured for\MessageBreak
`LOT to toc'. Reported at begin document}%
\fi
\fi
}% end of tocbibind branch
{}%
}% end of at begin document
}% end of not with memoir branch
\def\Etoc@addtocontents #1#2{%
\addtocontents {toc}{%
\protect\contentsline{#1}{#2}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}%
\ifdefined\protected@file@percent\protected@file@percent\fi
}%
}
\def\Etoc@addcontentsline@ #1#2#3{%
\@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}%
}
\DeclareRobustCommand*{\etoctoccontentsline}
{\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}}
\def\Etoc@addtocontents@immediately#1#2{%
\begingroup
\let\Etoc@originalwrite\write
\def\write{\immediate\Etoc@originalwrite}%
\Etoc@addtocontents{#1}{#2}%
\endgroup
}
\def\Etoc@addcontentsline@@immediately#1#2#3{%
\begingroup
\let\Etoc@originalwrite\write
\def\write{\immediate\Etoc@originalwrite}%
\Etoc@addcontentsline@{#1}{#2}{#3}%
\endgoroup
}
\DeclareRobustCommand*{\etocimmediatetoccontentsline}
{\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}}
\def\Etoc@storetocdepth {\xdef\Etoc@savedtocdepth{\number\c@tocdepth}}
\def\Etoc@restoretocdepth {\global\c@tocdepth\Etoc@savedtocdepth\relax}
\def\etocobeytoctocdepth {\def\etoc@settocdepth
{\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}}
\def\Etoc@@nottoodeep {\ifnum\Etoc@savedtocdepth<\c@tocdepth
\global\c@tocdepth\Etoc@savedtocdepth\relax\fi }
\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble }
\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth }
\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup
\expandafter\Etoc@set@tocdepth@
\else\expandafter\Etoc@set@toctocdepth
\fi }
\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@}
{\PackageWarning{etoc}
{Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}}
{\global\c@tocdepth\csname Etoc@#1@@\endcsname}%
}
\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ }
\def\Etoc@set@toctocdepth@ #1{%
\@ifundefined{Etoc@#1@@}%
{\PackageWarning{etoc}
{Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}%
{\addtocontents {toc}
{\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}%
}
\def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately}
\def\Etoc@set@toctocdepth@immediately #1{%
\@ifundefined{Etoc@#1@@}%
{\PackageWarning{etoc}
{Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}%
{\begingroup
\let\Etoc@originalwrite\write
\def\write{\immediate\Etoc@originalwrite}%
\addtocontents {toc}
{\protect\etoc@settocdepth\expandafter\protect
\csname Etoc@#1@@\endcsname}%
\endgroup
}%
}
\def\etocdepthtag #1#{\Etoc@depthtag }
\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}}
\def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately }
\def\Etoc@depthtag@immediately #1{%
\begingroup
\let\Etoc@originalwrite\write
\def\write{\immediate\Etoc@originalwrite}%
\addtocontents {toc}{\protect\etoc@depthtag {#1}}%
\endgroup
}
\def\etocignoredepthtags {\let\etoc@depthtag \@gobble }
\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ }
\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}%
{}% ignore in silence if tag has no associated depth
{\afterassignment\Etoc@@nottoodeep
\global\c@tocdepth\csname Etoc@depthof@#1\endcsname}%
}
\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}%
{\PackageWarning{etoc}
{Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}%
{\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}%
}
\def\Etoc@tocvsec@err #1{\PackageError {etoc}
{The command \protect#1\space is incompatible with `etoc'}
{Use \protect\etocsettocdepth.toc as replacement}%
}%
\AtBeginDocument {%
\@ifclassloaded{memoir}
{\PackageInfo {etoc}
{Regarding `memoir' class command \protect\settocdepth, consider\MessageBreak
\protect\etocsettocdepth.toc as a drop-in replacement with more\MessageBreak
capabilities (see `etoc' manual). \space
Also, \protect\etocsettocdepth\MessageBreak
and \protect\etocsetnexttocdepth\space should be used in place of\MessageBreak
`memoir' command \protect\maxtocdepth\@gobble}%
}%
{\@ifpackageloaded {tocvsec2}{%
\def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }%
\def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }%
\def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }%
{\Etoc@tocvsec@err \resettocdepth }%
}%
\def\save@tocdepth #1#2#3{}%
\let\reset@tocdepth\relax
\let\remax@tocdepth\relax
\let\tableofcontents\etoctableofcontents
\PackageWarningNoLine {etoc}
{Package `tocvsec2' detected and its modification of\MessageBreak
\protect\tableofcontents\space reverted. \space Use
\protect\etocsettocdepth.toc\MessageBreak as a replacement
for `tocvsec2' toc-related commands}%
}% tocvsec2 loaded
{}% tocvsec2 not loaded
}%
}%
\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }%
\def\invisiblelocaltableofcontents
{\etocsetnexttocdepth {-3}\localtableofcontents }%
\def\etocsetnexttocdepth #1{%
\@ifundefined{Etoc@#1@@}
{\PackageWarning{etoc}
{Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}}
{\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}%
}%
\def\Etoc@setnexttocdepth#1{%
\def\Etoc@tocdepthset{%
\Etoc@tocdepthreset
\edef\Etoc@tocdepthreset {%
\global\c@tocdepth\the\c@tocdepth\space
\global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty
}%
\global\c@tocdepth#1%
\global\let\Etoc@tocdepthset\@empty
}%
}%
\let\Etoc@tocdepthreset\@empty
\let\Etoc@tocdepthset \@empty
\def\etocsetlocaltop #1#{\Etoc@set@localtop}%
\def\Etoc@set@localtop #1{%
\@ifundefined{Etoc@#1@@}%
{\PackageWarning{etoc}
{Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}%
{\addtocontents {toc}
{\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}%
}%
\def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}%
\def\Etoc@set@localtop@immediately #1{%
\@ifundefined{Etoc@#1@@}%
{\PackageWarning{etoc}
{Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}%
{\begingroup
\let\Etoc@originalwrite\write
\def\write{\immediate\Etoc@originalwrite}%
\addtocontents {toc}
{\protect\etoc@setlocaltop\expandafter\protect
\csname Etoc@#1@@\endcsname}%
\endgroup
}%
}%
\def\etoc@setlocaltop #1{%
\ifnum#1=\Etoc@maxlevel
\Etoc@skipthisonetrue
\else
\Etoc@skipthisonefalse
\global\let\Etoc@level #1%
\global\let\Etoc@virtualtop #1%
\ifEtoc@localtoc
\ifEtoc@stoptoc
\Etoc@skipthisonetrue
\else
\ifEtoc@notactive
\Etoc@skipthisonetrue
\else
\unless\ifnum\Etoc@level>\etoclocaltop
\Etoc@skipthisonetrue
\global\Etoc@stoptoctrue
\fi
\fi
\fi
\fi
\fi
\let\Etoc@next\@empty
\ifEtoc@skipthisone
\else
\ifnum\Etoc@level>\c@tocdepth
\else
\ifEtoc@standardlines
\else
\let\Etoc@next\Etoc@setlocaltop@doendsandbegin
\fi
\fi
\fi
\Etoc@next
}%
\def\Etoc@setlocaltop@doendsandbegin{%
\Etoc@doendsandbegin
\global\Etoc@skipprefixfalse
}
\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}%
{\let\protect\etoc@startlocaltoc\protect\@gobble
\let\protect\etoc@settocdepth\protect\@gobble
\let\protect\etoc@depthtag\protect\@gobble
\let\protect\etoc@setlocaltop\protect\@gobble}{}}%
\def\etocstandardlines {\Etoc@standardlinestrue}
\def\etoctoclines {\Etoc@standardlinesfalse}
\etocdefaultlines
\etocstandardlines
\def\etocstandarddisplaystyle{%
\PackageWarningNoLine{etoc}{%
\string\etocstandarddisplaystyle \on@line\MessageBreak
is deprecated. \space Please use \string\etocclasstocstyle}%
}
\expandafter\def\expandafter\etocclasstocstyle\expandafter{%
\etocclasstocstyle
\Etoc@classstyletrue
}
\def\etocetoclocaltocstyle{\Etoc@etocstyletrue}
\def\etocusertocstyle{\Etoc@etocstylefalse}
\etocclasstocstyle
\etocetoclocaltocstyle
\etocobeytoctocdepth
\etocobeydepthtags
\let\etocbeforetitlehook \@empty
\let\etocaftertitlehook \@empty
\let\etocaftercontentshook \@empty
\let\etocaftertochook \@empty
\def\etockeeporiginaltableofcontents
{\Etoc@keeporiginaltoctrue\let\tableofcontents\etocoriginaltableofcontents}%
\endinput
%%
%% End of file `etoc.sty'.

View File

@@ -0,0 +1,30 @@
\doxysection{File List}
Here is a list of all documented files with brief descriptions\+:\begin{DoxyCompactList}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\mbox{\hyperlink{____modbus__data_8c_source}{\+\_\+\+\_\+modbus\+\_\+data.\+c}} }{\pageref{____modbus__data_8c_source}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\mbox{\hyperlink{modbus__config_8h}{modbus\+\_\+config.\+h}} \\*Конфигурационные параметры Modbus устройства }{\pageref{modbus__config_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\mbox{\hyperlink{modbus__data_8h}{modbus\+\_\+data.\+h}} \\*Определения структур данных Modbus устройства }{\pageref{modbus__data_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{____crc__algs_8h_source}{\+\_\+\+\_\+crc\+\_\+algs.\+h}} }{\pageref{____crc__algs_8h_source}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{____modbus__compat_8h}{\+\_\+\+\_\+modbus\+\_\+compat.\+h}} \\*Модуль для совместимости библиотеки MODBUS }{\pageref{____modbus__compat_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus_8h}{modbus.\+h}} \\*Главный заголовочный файл Modbus библиотеки }{\pageref{modbus_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__coils_8h}{modbus\+\_\+coils.\+h}} \\*Работа с коилами Modbus }{\pageref{modbus__coils_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__core_8h}{modbus\+\_\+core.\+h}} \\*Ядро Modbus протокола -\/ определения и структуры }{\pageref{modbus__core_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__devid_8h}{modbus\+\_\+devid.\+h}} \\*Идентификаторы устройства Modbus }{\pageref{modbus__devid_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__diag_8h}{modbus\+\_\+diag.\+h}} \\*Диагностика устройства Modbus }{\pageref{modbus__diag_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__holdregs_8h}{modbus\+\_\+holdregs.\+h}} \\*Работа с регистрами хранения Modbus }{\pageref{modbus__holdregs_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__inputregs_8h}{modbus\+\_\+inputregs.\+h}} \\*Работа с входными регистрами Modbus }{\pageref{modbus__inputregs_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__master_8h}{modbus\+\_\+master.\+h}} \\*Главный заголовочный файл Modbus библиотеки }{\pageref{modbus__master_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{modbus__slave_8h}{modbus\+\_\+slave.\+h}} \\*Главный заголовочный файл Modbus библиотеки }{\pageref{modbus__slave_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Inc/\mbox{\hyperlink{rs__message_8h}{rs\+\_\+message.\+h}} \\*Библиотека обмена сообщениями по RS-\/интерфейсу }{\pageref{rs__message_8h}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{____crc__algs_8c_source}{\+\_\+\+\_\+crc\+\_\+algs.\+c}} }{\pageref{____crc__algs_8c_source}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{____modbus__compat_8c}{\+\_\+\+\_\+modbus\+\_\+compat.\+c}} \\*Модуль для совместимости библиотеки MODBUS }{\pageref{____modbus__compat_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus_8c}{modbus.\+c}} \\*Модуль для реализации MODBUS }{\pageref{modbus_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__coils_8c}{modbus\+\_\+coils.\+c}} \\*Реализация работы с коилами Modbus }{\pageref{modbus__coils_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__core_8c}{modbus\+\_\+core.\+c}} \\*Базовая реализация ядра Modbus }{\pageref{modbus__core_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__devid_8c}{modbus\+\_\+devid.\+c}} \\*Реализация идентификаторов устройства Modbus }{\pageref{modbus__devid_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__diag_8c}{modbus\+\_\+diag.\+c}} \\*Реализация диагностики устройства Modbus }{\pageref{modbus__diag_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__holdregs_8c}{modbus\+\_\+holdregs.\+c}} \\*Реализация работы с регистрами хранения Modbus }{\pageref{modbus__holdregs_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__inputregs_8c}{modbus\+\_\+inputregs.\+c}} \\*Реализация работы с входными регистрами Modbus }{\pageref{modbus__inputregs_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__master_8c}{modbus\+\_\+master.\+c}} \\*Модуль для реализации мастера MODBUS }{\pageref{modbus__master_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{modbus__slave_8c}{modbus\+\_\+slave.\+c}} \\*Модуль для реализации слейв MODBUS }{\pageref{modbus__slave_8c}}{}
\item\contentsline{section}{E\+:/.\+WORK/\+STM32/\+Diod\+\_\+\+Test/diode\+\_\+tester/\+Core/\+Modbus/\+Src/\mbox{\hyperlink{rs__message_8c}{rs\+\_\+message.\+c}} \\*Реализация протоколов обмена по RS/\+UART }{\pageref{rs__message_8c}}{}
\end{DoxyCompactList}

View File

@@ -0,0 +1 @@
22930d42a6214fed2ba88471ba491dc9

Binary file not shown.

View File

@@ -0,0 +1,34 @@
\doxysection{Modbus tools }
\hypertarget{group___m_o_d_b_u_s}{}\label{group___m_o_d_b_u_s}\index{Modbus tools@{Modbus tools}}
Библиотека реализующая протокол Modbus.
Collaboration diagram for Modbus tools\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=308pt]{group___m_o_d_b_u_s}
\end{center}
\end{figure}
\doxysubsubsection*{Topics}
\begin{DoxyCompactItemize}
\item
\mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a}{Modbus Registers Map}}
\begin{DoxyCompactList}\small\item\em Определение карты регистров и коилов \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___f_u_n_c_t_i_o_n_s}{Main API for Modbus Library}}
\begin{DoxyCompactList}\small\item\em Публичные функции библиотеки \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___i_n_t_e_r_n_a_l}{Modbus Internal Tools}}
\begin{DoxyCompactList}\small\item\em Внутренние штуки библиотеки \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s}{Modbus configs}}
\begin{DoxyCompactList}\small\item\em Конфигурация библиотеки \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection{Detailed Description}
Библиотека реализующая протокол Modbus.
\input{group___m_o_d_b_u_s___d_a_t_a}
\input{group___m_o_d_b_u_s___f_u_n_c_t_i_o_n_s}
\input{group___m_o_d_b_u_s___i_n_t_e_r_n_a_l}
\input{group___m_o_d_b_u_s___c_o_n_f_i_g_s}

View File

@@ -0,0 +1 @@
a49e80383e9c0836a654c6c6f00fa3e9

View File

@@ -0,0 +1,350 @@
\doxysubsubsection{Internal Process Functions }
\hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s}{}\label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s}\index{Internal Process Functions@{Internal Process Functions}}
Функции обработки запросов модбас
Collaboration diagram for Internal Process Functions\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s}
\end{center}
\end{figure}
\doxysubsubsubsubsection*{Topics}
\begin{DoxyCompactItemize}
\item
\mbox{\hyperlink{group___m_o_d_b_u_s___m_a_s_t_e_r}{Modbus master funtions}}
\begin{DoxyCompactList}\small\item\em Функции для работы в режиме Master. \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___s_l_a_v_e}{Modbus slave funtions}}
\begin{DoxyCompactList}\small\item\em Функции для работы в режиме Slave. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga39a02e8e4911a74a619d2ef29adcbad8}{MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Coils}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Read Coils (01 -\/ 0x01). \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga918102931c9125a5e44a30e103d17e14}{MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Single\+\_\+\+Coil}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Write Single Coils (05 -\/ 0x05). \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga6f4498cec8634820025aaa9c4623ba55}{MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Miltuple\+\_\+\+Coils}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Write Multiple Coils (15 -\/ 0x0F). \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga278ca9791c69aef8adeb9e7c4b273c50}{MB\+\_\+\+Check\+\_\+\+Address\+\_\+\+For\+\_\+\+Arr}} (uint16\+\_\+t Addr, uint16\+\_\+t Qnt, uint16\+\_\+t R\+\_\+\+ARR\+\_\+\+ADDR, uint16\+\_\+t R\+\_\+\+ARR\+\_\+\+NUMB)
\begin{DoxyCompactList}\small\item\em Check is address valid for certain array. \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga1e90bb28a4cf997250daab6470d5ffe3}{MB\+\_\+\+Define\+Registers\+Address}} (uint16\+\_\+t \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}p\+Regs, uint16\+\_\+t Addr, uint16\+\_\+t Qnt, uint8\+\_\+t Register\+Type)
\begin{DoxyCompactList}\small\item\em Define Address Origin for Input/\+Holding Registers. \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gade717a6829a062a8a198bd933c8b2221}{MB\+\_\+\+Define\+Coils\+Address}} (uint16\+\_\+t \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}p\+Coils, uint16\+\_\+t Addr, uint16\+\_\+t Qnt, uint16\+\_\+t \texorpdfstring{$\ast$}{*}start\+\_\+shift, uint8\+\_\+t Write\+Flag)
\begin{DoxyCompactList}\small\item\em Define Address Origin for coils. \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga279ce6d9d175a43714862dc6661e7096}{MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Device\+\_\+\+Identifications}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Read Device Identifications (43/14 -\/ 0x2\+B/0E). \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga6bbfc53b20b4698a08d79851b5db65f0}{MB\+\_\+\+Process\+\_\+\+Diagnostics}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Diagnostics (Serial Line only) (0x08) \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gac28127757ba25fe0b611612a785f663b}{MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Hold\+\_\+\+Regs}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Read Holding Registers (03 -\/ 0x03). \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga02e192a3d9f31737c45f074a04b37648}{MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Single\+\_\+\+Reg}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Write Single Register (06 -\/ 0x06). \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga9c6ab159edb8dda6548b2228773ce919}{MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Miltuple\+\_\+\+Regs}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Write Multiple Registers (16 -\/ 0x10). \end{DoxyCompactList}\item
uint8\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gad13d010f43c7ab08a85667b9e1906b7d}{MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Input\+\_\+\+Regs}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg)
\begin{DoxyCompactList}\small\item\em Обработать функцию Read Input Registers (04 -\/ 0x04). \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsection{Detailed Description}
Функции обработки запросов модбас
\label{doc-func-members}
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_doc-func-members}
\doxysubsubsubsection{Function Documentation}
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga39a02e8e4911a74a619d2ef29adcbad8}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Read\_Coils@{MB\_Process\_Read\_Coils}}
\index{MB\_Process\_Read\_Coils@{MB\_Process\_Read\_Coils}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Read\_Coils()}{MB\_Process\_Read\_Coils()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga39a02e8e4911a74a619d2ef29adcbad8}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Coils (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Read Coils (01 -\/ 0x01).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Read Coils.
Definition at line \mbox{\hyperlink{modbus__coils_8c_source_l00103}{103}} of file \mbox{\hyperlink{modbus__coils_8c_source}{modbus\+\_\+coils.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga918102931c9125a5e44a30e103d17e14}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Write\_Single\_Coil@{MB\_Process\_Write\_Single\_Coil}}
\index{MB\_Process\_Write\_Single\_Coil@{MB\_Process\_Write\_Single\_Coil}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Write\_Single\_Coil()}{MB\_Process\_Write\_Single\_Coil()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga918102931c9125a5e44a30e103d17e14}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Single\+\_\+\+Coil (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Write Single Coils (05 -\/ 0x05).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Write Single Coils.
Definition at line \mbox{\hyperlink{modbus__coils_8c_source_l00156}{156}} of file \mbox{\hyperlink{modbus__coils_8c_source}{modbus\+\_\+coils.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga6f4498cec8634820025aaa9c4623ba55}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Write\_Miltuple\_Coils@{MB\_Process\_Write\_Miltuple\_Coils}}
\index{MB\_Process\_Write\_Miltuple\_Coils@{MB\_Process\_Write\_Miltuple\_Coils}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Write\_Miltuple\_Coils()}{MB\_Process\_Write\_Miltuple\_Coils()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga6f4498cec8634820025aaa9c4623ba55}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Miltuple\+\_\+\+Coils (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Write Multiple Coils (15 -\/ 0x0F).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Write Multiple Coils.
Definition at line \mbox{\hyperlink{modbus__coils_8c_source_l00187}{187}} of file \mbox{\hyperlink{modbus__coils_8c_source}{modbus\+\_\+coils.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga278ca9791c69aef8adeb9e7c4b273c50}\index{Internal Process Functions@{Internal Process Functions}!MB\_Check\_Address\_For\_Arr@{MB\_Check\_Address\_For\_Arr}}
\index{MB\_Check\_Address\_For\_Arr@{MB\_Check\_Address\_For\_Arr}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Check\_Address\_For\_Arr()}{MB\_Check\_Address\_For\_Arr()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga278ca9791c69aef8adeb9e7c4b273c50}
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} MB\+\_\+\+Check\+\_\+\+Address\+\_\+\+For\+\_\+\+Arr (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{Addr}{, }\item[{uint16\+\_\+t}]{Qnt}{, }\item[{uint16\+\_\+t}]{R\+\_\+\+ARR\+\_\+\+ADDR}{, }\item[{uint16\+\_\+t}]{R\+\_\+\+ARR\+\_\+\+NUMB}{}\end{DoxyParamCaption})}
Check is address valid for certain array.
\begin{DoxyParams}{Parameters}
{\em Addr} & Начальный адресс. \\
\hline
{\em Qnt} & Количество запрашиваемых элементов. \\
\hline
{\em R\+\_\+\+ARR\+\_\+\+ADDR} & Начальный адресс массива R\+\_\+\+ARR. \\
\hline
{\em R\+\_\+\+ARR\+\_\+\+NUMB} & Количество элементов в массиве R\+\_\+\+ARR. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Exception\+Code -\/ ET\+\_\+\+ILLEGAL\+\_\+\+DATA\+\_\+\+ADRESS если адресс недействителен, и ET\+\_\+\+NO\+\_\+\+ERRORS если все ок.
\end{DoxyReturn}
Позволяет определить, принадлежит ли адресс Addr массиву R\+\_\+\+ARR\+: Если адресс Addr находится в диапазоне адрессов массива R\+\_\+\+ARR, то возвращаем NO\+\_\+\+ERROR. Если адресс Addr находится за пределами адрессов массива R\+\_\+\+ARR -\/ ET\+\_\+\+ILLEGAL\+\_\+\+DATA\+\_\+\+ADDRESSю.
Definition at line \mbox{\hyperlink{____modbus__data_8c_source_l00038}{38}} of file \mbox{\hyperlink{____modbus__data_8c_source}{\+\_\+\+\_\+modbus\+\_\+data.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga1e90bb28a4cf997250daab6470d5ffe3}\index{Internal Process Functions@{Internal Process Functions}!MB\_DefineRegistersAddress@{MB\_DefineRegistersAddress}}
\index{MB\_DefineRegistersAddress@{MB\_DefineRegistersAddress}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_DefineRegistersAddress()}{MB\_DefineRegistersAddress()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga1e90bb28a4cf997250daab6470d5ffe3}
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} MB\+\_\+\+Define\+Registers\+Address (\begin{DoxyParamCaption}\item[{uint16\+\_\+t \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}}]{p\+Regs}{, }\item[{uint16\+\_\+t}]{Addr}{, }\item[{uint16\+\_\+t}]{Qnt}{, }\item[{uint8\+\_\+t}]{Register\+Type}{}\end{DoxyParamCaption})}
Define Address Origin for Input/\+Holding Registers.
\begin{DoxyParams}{Parameters}
{\em p\+Regs} & Указатель на указатель регистров. \\
\hline
{\em Addr} & Адрес начального регистра. \\
\hline
{\em Qnt} & Количество запрашиваемых регистров. \\
\hline
{\em Write\+Flag} & Флаг регистр нужны для чтения или записи. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Exception\+Code Код исключения если есть, и ET\+\_\+\+NO\+\_\+\+ERRORS если нет.
\end{DoxyReturn}
Определение адреса начального регистра. \begin{DoxyNote}{Note}
Write\+Flag пока не используется.
\end{DoxyNote}
Definition at line \mbox{\hyperlink{____modbus__data_8c_source_l00066}{66}} of file \mbox{\hyperlink{____modbus__data_8c_source}{\+\_\+\+\_\+modbus\+\_\+data.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gade717a6829a062a8a198bd933c8b2221}\index{Internal Process Functions@{Internal Process Functions}!MB\_DefineCoilsAddress@{MB\_DefineCoilsAddress}}
\index{MB\_DefineCoilsAddress@{MB\_DefineCoilsAddress}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_DefineCoilsAddress()}{MB\_DefineCoilsAddress()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gade717a6829a062a8a198bd933c8b2221}
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} MB\+\_\+\+Define\+Coils\+Address (\begin{DoxyParamCaption}\item[{uint16\+\_\+t \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}}]{p\+Coils}{, }\item[{uint16\+\_\+t}]{Addr}{, }\item[{uint16\+\_\+t}]{Qnt}{, }\item[{uint16\+\_\+t \texorpdfstring{$\ast$}{*}}]{start\+\_\+shift}{, }\item[{uint8\+\_\+t}]{Write\+Flag}{}\end{DoxyParamCaption})}
Define Address Origin for coils.
\begin{DoxyParams}{Parameters}
{\em p\+Coils} & Указатель на указатель коилов. \\
\hline
{\em Addr} & Адресс начального коила. \\
\hline
{\em Qnt} & Количество запрашиваемых коилов. \\
\hline
{\em start\+\_\+shift} & Указатель на переменную содержащую сдвиг внутри регистра для начального коила. \\
\hline
{\em Write\+Flag} & Флаг коилы нужны для чтения или записи. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Exception\+Code Код исключения если есть, и ET\+\_\+\+NO\+\_\+\+ERRORS если нет.
\end{DoxyReturn}
Определение адреса начального регистра запрашиваемых коилов. \begin{DoxyNote}{Note}
Write\+Flag используется для определния регистров GPIO\+: ODR или IDR.
\end{DoxyNote}
Definition at line \mbox{\hyperlink{____modbus__data_8c_source_l00119}{119}} of file \mbox{\hyperlink{____modbus__data_8c_source}{\+\_\+\+\_\+modbus\+\_\+data.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga279ce6d9d175a43714862dc6661e7096}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Read\_Device\_Identifications@{MB\_Process\_Read\_Device\_Identifications}}
\index{MB\_Process\_Read\_Device\_Identifications@{MB\_Process\_Read\_Device\_Identifications}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Read\_Device\_Identifications()}{MB\_Process\_Read\_Device\_Identifications()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga279ce6d9d175a43714862dc6661e7096}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Device\+\_\+\+Identifications (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Read Device Identifications (43/14 -\/ 0x2\+B/0E).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Write Single Register.
Definition at line \mbox{\hyperlink{modbus__devid_8c_source_l00112}{112}} of file \mbox{\hyperlink{modbus__devid_8c_source}{modbus\+\_\+devid.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga6bbfc53b20b4698a08d79851b5db65f0}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Diagnostics@{MB\_Process\_Diagnostics}}
\index{MB\_Process\_Diagnostics@{MB\_Process\_Diagnostics}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Diagnostics()}{MB\_Process\_Diagnostics()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga6bbfc53b20b4698a08d79851b5db65f0}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Diagnostics (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Diagnostics (Serial Line only) (0x08)
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру сообщения modbus \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус обработки команды
\end{DoxyReturn}
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00075}{75}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gac28127757ba25fe0b611612a785f663b}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Read\_Hold\_Regs@{MB\_Process\_Read\_Hold\_Regs}}
\index{MB\_Process\_Read\_Hold\_Regs@{MB\_Process\_Read\_Hold\_Regs}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Read\_Hold\_Regs()}{MB\_Process\_Read\_Hold\_Regs()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gac28127757ba25fe0b611612a785f663b}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Hold\+\_\+\+Regs (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Read Holding Registers (03 -\/ 0x03).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Read Holding Registers.
Definition at line \mbox{\hyperlink{modbus__holdregs_8c_source_l00092}{92}} of file \mbox{\hyperlink{modbus__holdregs_8c_source}{modbus\+\_\+holdregs.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga02e192a3d9f31737c45f074a04b37648}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Write\_Single\_Reg@{MB\_Process\_Write\_Single\_Reg}}
\index{MB\_Process\_Write\_Single\_Reg@{MB\_Process\_Write\_Single\_Reg}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Write\_Single\_Reg()}{MB\_Process\_Write\_Single\_Reg()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga02e192a3d9f31737c45f074a04b37648}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Single\+\_\+\+Reg (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Write Single Register (06 -\/ 0x06).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Write Single Register.
Definition at line \mbox{\hyperlink{modbus__holdregs_8c_source_l00120}{120}} of file \mbox{\hyperlink{modbus__holdregs_8c_source}{modbus\+\_\+holdregs.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga9c6ab159edb8dda6548b2228773ce919}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Write\_Miltuple\_Regs@{MB\_Process\_Write\_Miltuple\_Regs}}
\index{MB\_Process\_Write\_Miltuple\_Regs@{MB\_Process\_Write\_Miltuple\_Regs}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Write\_Miltuple\_Regs()}{MB\_Process\_Write\_Miltuple\_Regs()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga9c6ab159edb8dda6548b2228773ce919}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Write\+\_\+\+Miltuple\+\_\+\+Regs (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Write Multiple Registers (16 -\/ 0x10).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Write Multiple Registers.
Definition at line \mbox{\hyperlink{modbus__holdregs_8c_source_l00139}{139}} of file \mbox{\hyperlink{modbus__holdregs_8c_source}{modbus\+\_\+holdregs.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gad13d010f43c7ab08a85667b9e1906b7d}\index{Internal Process Functions@{Internal Process Functions}!MB\_Process\_Read\_Input\_Regs@{MB\_Process\_Read\_Input\_Regs}}
\index{MB\_Process\_Read\_Input\_Regs@{MB\_Process\_Read\_Input\_Regs}!Internal Process Functions@{Internal Process Functions}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Process\_Read\_Input\_Regs()}{MB\_Process\_Read\_Input\_Regs()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_gad13d010f43c7ab08a85667b9e1906b7d}
uint8\+\_\+t MB\+\_\+\+Process\+\_\+\+Read\+\_\+\+Input\+\_\+\+Regs (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{}\end{DoxyParamCaption})}
Обработать функцию Read Input Registers (04 -\/ 0x04).
\begin{DoxyParams}{Parameters}
{\em modbus\+\_\+msg} & Указатель на структуру собщения modbus. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
f\+Message\+Handled Статус о результате обработки комманды.
\end{DoxyReturn}
Обработка команды Read Input Registers.
Definition at line \mbox{\hyperlink{modbus__inputregs_8c_source_l00087}{87}} of file \mbox{\hyperlink{modbus__inputregs_8c_source}{modbus\+\_\+inputregs.\+c}}.
\input{group___m_o_d_b_u_s___m_a_s_t_e_r}
\input{group___m_o_d_b_u_s___s_l_a_v_e}

View File

@@ -0,0 +1 @@
0530937d9612ea6231affb7b2e7d4fcf

View File

@@ -0,0 +1,35 @@
\doxysubsubsection{Coils Tools }
\hypertarget{group___m_o_d_b_u_s___c_o_i_l_s}{}\label{group___m_o_d_b_u_s___c_o_i_l_s}\index{Coils Tools@{Coils Tools}}
Функции для работы с коилами
Collaboration diagram for Coils Tools\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=291pt]{group___m_o_d_b_u_s___c_o_i_l_s}
\end{center}
\end{figure}
Функции для работы с коилами
Модуль для доступа к coils внутри программы\+:
\begin{DoxyItemize}
\item Функции для доступа к coils по глобальным адресам
\item Макросы для доступа к coils по локальным адресам
\end{DoxyItemize}
Модуль предоставляет функции и макросы для работы с битовыми данными\+:
\begin{DoxyItemize}
\item Чтение coils (0x01) Упаковка битов в байты
\item Запись одиночного coil (0x05) Установка/сброс бита
\item Запись множественных coils (0x0F) -\/ распаковка байтов в биты
\end{DoxyItemize}\hypertarget{group___m_o_d_b_u_s___c_o_i_l_s_cbits}{}\doxysubsubsubsection{\texorpdfstring{Организация битовых данных\+:}{Организация битовых данных\+:}}\label{group___m_o_d_b_u_s___c_o_i_l_s_cbits}
Coils упакованы в 16-\/битные слова для эффективного использования памяти. Биты нумеруются от младшего к старшему внутри каждого слова.\hypertarget{group___m_o_d_b_u_s___c_o_i_l_s_caddr}{}\doxysubsubsubsection{\texorpdfstring{Адресация\+:}{Адресация\+:}}\label{group___m_o_d_b_u_s___c_o_i_l_s_caddr}
\begin{DoxyItemize}
\item Глобальная -\/ абсолютный адрес в пространстве Modbus
\item Локальная -\/ относительный адрес внутри массива coils
\item Макросы автоматически вычисляют смещения и маски
\end{DoxyItemize}

View File

@@ -0,0 +1 @@
6116efb3628704afb3d3a5646e669147

View File

@@ -0,0 +1,327 @@
\doxysubsection{Modbus configs }
\hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s}{}\label{group___m_o_d_b_u_s___c_o_n_f_i_g_s}\index{Modbus configs@{Modbus configs}}
Конфигурация библиотеки
Collaboration diagram for Modbus configs\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=276pt]{group___m_o_d_b_u_s___c_o_n_f_i_g_s}
\end{center}
\end{figure}
\doxysubsubsubsection*{Macros}
\begin{DoxyCompactItemize}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gab9b18e108b98b225a52c5ccca58e7f2b}{MODBUS\+\_\+\+DEVICE\+\_\+\+ID}}~1
\begin{DoxyCompactList}\small\item\em Адрес устройства в сети Modbus. \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga66f7c59a25c8cca6d5b0991895c26b69}{MODBUS\+\_\+\+TIMEOUT}}~5000
\begin{DoxyCompactList}\small\item\em Таймаут в тиках таймера \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga0e01f19c79d049b745b28cc708ba0c2f}{MODBUS\+\_\+\+VENDOR\+\_\+\+NAME}}~"{}NIO-\/12"{}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga6e8dea7833243443899787fd7186ab36}{MODBUS\+\_\+\+PRODUCT\+\_\+\+CODE}}~"{}"{}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga270858b2ee3dc5de6666e05ba0b7044a}{MODBUS\+\_\+\+REVISION}}~"{}"{}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga0d4f8c7ad821f1e47c06fca438cc2065}{MODBUS\+\_\+\+VENDOR\+\_\+\+URL}}~"{}"{}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga272ac8bc7eb92d40e731954cc627e28b}{MODBUS\+\_\+\+PRODUCT\+\_\+\+NAME}}~"{}"{}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga94dff4b6008db9de88a18f80507b745c}{MODBUS\+\_\+\+MODEL\+\_\+\+NAME}}~"{}"{}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga197c776ad1235d5f4fa17318e60628a9}{MODBUS\+\_\+\+USER\+\_\+\+APPLICATION\+\_\+\+NAME}}~"{}"{}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5c7e9c2180ceac1208f4b791d7b70a0a}{MODBUS\+\_\+\+NUMB\+\_\+\+OF\+\_\+\+USEROBJECTS}}~0
\begin{DoxyCompactList}\small\item\em Количество пользовательских объектов \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gac3b162e9af2731742eb3ca8317b37397}{MODBUS\+\_\+\+USEROBJECT\+\_\+0\+\_\+\+NAME}}~"{}"{}
\begin{DoxyCompactList}\small\item\em Строка пользовательского идентификатора 0. По аналогии можно определить строки до \texorpdfstring{$<$}{<}=128 USEROBJECT. \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga370986118b8227cb6cb33c6b748fbbcb}{mb\+\_\+huart}}~huart1
\begin{DoxyCompactList}\small\item\em Удобный дефайн для модбасовского uart. \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga6723a1608946a4f86cd7c9c7e614d04e}{mb\+\_\+htim}}~htim3
\begin{DoxyCompactList}\small\item\em Удобный дефайн для модбасовского таймера \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae11f9ed7ca5e75d332a1187d2a213f9c}{MODBUS\+\_\+\+ENABLE\+\_\+\+SLAVE}}
\begin{DoxyCompactList}\small\item\em Включить обработку СЛЕЙВ режима \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae4fc30421556e1ee530f13a4b3924f5a}{MODBUS\+\_\+\+ENABLE\+\_\+\+MASTER}}
\begin{DoxyCompactList}\small\item\em Включить обработку МАСТЕР режима \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga29ce22b8b7f0622bc23171c6ae2dc8d1}{MODBUS\+\_\+\+ENABLE\+\_\+\+COILS}}
\begin{DoxyCompactList}\small\item\em Включить обработку коилов \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gaf6a8dfc090b3915d668d78ee19585344}{MODBUS\+\_\+\+ENABLE\+\_\+\+HOLDINGS}}
\begin{DoxyCompactList}\small\item\em Включить обработку регистров хранения \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga23d7073c81bedb80a302140afd0d79c0}{MODBUS\+\_\+\+ENABLE\+\_\+\+INPUTS}}
\begin{DoxyCompactList}\small\item\em Включить обработку входных регистров \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5bf9f305bd863b10f1b350c5004ddda7}{MODBUS\+\_\+\+ENABLE\+\_\+\+DEVICE\+\_\+\+IDENTIFICATIONS}}
\begin{DoxyCompactList}\small\item\em Включить обработку идентификаторы устройства \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae68222efbcf3199706bfaef46af97bf8}{MODBUS\+\_\+\+ENABLE\+\_\+\+DIAGNOSTICS}}
\begin{DoxyCompactList}\small\item\em Включить обработку диагностики модбас \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection{Detailed Description}
Конфигурация библиотеки
Файл содержит настройки для работы Modbus\+:
\begin{DoxyItemize}
\item Подключение библиотек контроллера
\item ID устройства и таймауты
\item Строковые идентификаторы (Vendor, Product, Revision)
\item Настройки периферии (UART, TIMER)
\item Подключение модулей Modbus
\item Опциональные функции (переключение команд 0x03/0x04)
\end{DoxyItemize}
\label{doc-define-members}
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_doc-define-members}
\doxysubsubsection{Macro Definition Documentation}
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gab9b18e108b98b225a52c5ccca58e7f2b}\index{Modbus configs@{Modbus configs}!MODBUS\_DEVICE\_ID@{MODBUS\_DEVICE\_ID}}
\index{MODBUS\_DEVICE\_ID@{MODBUS\_DEVICE\_ID}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_DEVICE\_ID}{MODBUS\_DEVICE\_ID}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gab9b18e108b98b225a52c5ccca58e7f2b}
\#define MODBUS\+\_\+\+DEVICE\+\_\+\+ID~1}
Адрес устройства в сети Modbus.
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00025}{25}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga66f7c59a25c8cca6d5b0991895c26b69}\index{Modbus configs@{Modbus configs}!MODBUS\_TIMEOUT@{MODBUS\_TIMEOUT}}
\index{MODBUS\_TIMEOUT@{MODBUS\_TIMEOUT}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_TIMEOUT}{MODBUS\_TIMEOUT}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga66f7c59a25c8cca6d5b0991895c26b69}
\#define MODBUS\+\_\+\+TIMEOUT~5000}
Таймаут в тиках таймера
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00026}{26}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga0e01f19c79d049b745b28cc708ba0c2f}\index{Modbus configs@{Modbus configs}!MODBUS\_VENDOR\_NAME@{MODBUS\_VENDOR\_NAME}}
\index{MODBUS\_VENDOR\_NAME@{MODBUS\_VENDOR\_NAME}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_VENDOR\_NAME}{MODBUS\_VENDOR\_NAME}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga0e01f19c79d049b745b28cc708ba0c2f}
\#define MODBUS\+\_\+\+VENDOR\+\_\+\+NAME~"{}NIO-\/12"{}}
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00029}{29}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga6e8dea7833243443899787fd7186ab36}\index{Modbus configs@{Modbus configs}!MODBUS\_PRODUCT\_CODE@{MODBUS\_PRODUCT\_CODE}}
\index{MODBUS\_PRODUCT\_CODE@{MODBUS\_PRODUCT\_CODE}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_PRODUCT\_CODE}{MODBUS\_PRODUCT\_CODE}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga6e8dea7833243443899787fd7186ab36}
\#define MODBUS\+\_\+\+PRODUCT\+\_\+\+CODE~"{}"{}}
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00030}{30}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga270858b2ee3dc5de6666e05ba0b7044a}\index{Modbus configs@{Modbus configs}!MODBUS\_REVISION@{MODBUS\_REVISION}}
\index{MODBUS\_REVISION@{MODBUS\_REVISION}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_REVISION}{MODBUS\_REVISION}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga270858b2ee3dc5de6666e05ba0b7044a}
\#define MODBUS\+\_\+\+REVISION~"{}"{}}
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00031}{31}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga0d4f8c7ad821f1e47c06fca438cc2065}\index{Modbus configs@{Modbus configs}!MODBUS\_VENDOR\_URL@{MODBUS\_VENDOR\_URL}}
\index{MODBUS\_VENDOR\_URL@{MODBUS\_VENDOR\_URL}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_VENDOR\_URL}{MODBUS\_VENDOR\_URL}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga0d4f8c7ad821f1e47c06fca438cc2065}
\#define MODBUS\+\_\+\+VENDOR\+\_\+\+URL~"{}"{}}
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00032}{32}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga272ac8bc7eb92d40e731954cc627e28b}\index{Modbus configs@{Modbus configs}!MODBUS\_PRODUCT\_NAME@{MODBUS\_PRODUCT\_NAME}}
\index{MODBUS\_PRODUCT\_NAME@{MODBUS\_PRODUCT\_NAME}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_PRODUCT\_NAME}{MODBUS\_PRODUCT\_NAME}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga272ac8bc7eb92d40e731954cc627e28b}
\#define MODBUS\+\_\+\+PRODUCT\+\_\+\+NAME~"{}"{}}
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00033}{33}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga94dff4b6008db9de88a18f80507b745c}\index{Modbus configs@{Modbus configs}!MODBUS\_MODEL\_NAME@{MODBUS\_MODEL\_NAME}}
\index{MODBUS\_MODEL\_NAME@{MODBUS\_MODEL\_NAME}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_MODEL\_NAME}{MODBUS\_MODEL\_NAME}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga94dff4b6008db9de88a18f80507b745c}
\#define MODBUS\+\_\+\+MODEL\+\_\+\+NAME~"{}"{}}
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00034}{34}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga197c776ad1235d5f4fa17318e60628a9}\index{Modbus configs@{Modbus configs}!MODBUS\_USER\_APPLICATION\_NAME@{MODBUS\_USER\_APPLICATION\_NAME}}
\index{MODBUS\_USER\_APPLICATION\_NAME@{MODBUS\_USER\_APPLICATION\_NAME}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_USER\_APPLICATION\_NAME}{MODBUS\_USER\_APPLICATION\_NAME}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga197c776ad1235d5f4fa17318e60628a9}
\#define MODBUS\+\_\+\+USER\+\_\+\+APPLICATION\+\_\+\+NAME~"{}"{}}
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00035}{35}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5c7e9c2180ceac1208f4b791d7b70a0a}\index{Modbus configs@{Modbus configs}!MODBUS\_NUMB\_OF\_USEROBJECTS@{MODBUS\_NUMB\_OF\_USEROBJECTS}}
\index{MODBUS\_NUMB\_OF\_USEROBJECTS@{MODBUS\_NUMB\_OF\_USEROBJECTS}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_NUMB\_OF\_USEROBJECTS}{MODBUS\_NUMB\_OF\_USEROBJECTS}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5c7e9c2180ceac1208f4b791d7b70a0a}
\#define MODBUS\+\_\+\+NUMB\+\_\+\+OF\+\_\+\+USEROBJECTS~0}
Количество пользовательских объектов
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00037}{37}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gac3b162e9af2731742eb3ca8317b37397}\index{Modbus configs@{Modbus configs}!MODBUS\_USEROBJECT\_0\_NAME@{MODBUS\_USEROBJECT\_0\_NAME}}
\index{MODBUS\_USEROBJECT\_0\_NAME@{MODBUS\_USEROBJECT\_0\_NAME}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_USEROBJECT\_0\_NAME}{MODBUS\_USEROBJECT\_0\_NAME}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gac3b162e9af2731742eb3ca8317b37397}
\#define MODBUS\+\_\+\+USEROBJECT\+\_\+0\+\_\+\+NAME~"{}"{}}
Строка пользовательского идентификатора 0. По аналогии можно определить строки до \texorpdfstring{$<$}{<}=128 USEROBJECT.
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00038}{38}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga370986118b8227cb6cb33c6b748fbbcb}\index{Modbus configs@{Modbus configs}!mb\_huart@{mb\_huart}}
\index{mb\_huart@{mb\_huart}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{mb\_huart}{mb\_huart}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga370986118b8227cb6cb33c6b748fbbcb}
\#define mb\+\_\+huart~huart1}
Удобный дефайн для модбасовского uart.
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00041}{41}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga6723a1608946a4f86cd7c9c7e614d04e}\index{Modbus configs@{Modbus configs}!mb\_htim@{mb\_htim}}
\index{mb\_htim@{mb\_htim}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{mb\_htim}{mb\_htim}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga6723a1608946a4f86cd7c9c7e614d04e}
\#define mb\+\_\+htim~htim3}
Удобный дефайн для модбасовского таймера
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00042}{42}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae11f9ed7ca5e75d332a1187d2a213f9c}\index{Modbus configs@{Modbus configs}!MODBUS\_ENABLE\_SLAVE@{MODBUS\_ENABLE\_SLAVE}}
\index{MODBUS\_ENABLE\_SLAVE@{MODBUS\_ENABLE\_SLAVE}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_ENABLE\_SLAVE}{MODBUS\_ENABLE\_SLAVE}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae11f9ed7ca5e75d332a1187d2a213f9c}
\#define MODBUS\+\_\+\+ENABLE\+\_\+\+SLAVE}
Включить обработку СЛЕЙВ режима
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00048}{48}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae4fc30421556e1ee530f13a4b3924f5a}\index{Modbus configs@{Modbus configs}!MODBUS\_ENABLE\_MASTER@{MODBUS\_ENABLE\_MASTER}}
\index{MODBUS\_ENABLE\_MASTER@{MODBUS\_ENABLE\_MASTER}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_ENABLE\_MASTER}{MODBUS\_ENABLE\_MASTER}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae4fc30421556e1ee530f13a4b3924f5a}
\#define MODBUS\+\_\+\+ENABLE\+\_\+\+MASTER}
Включить обработку МАСТЕР режима
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00049}{49}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga29ce22b8b7f0622bc23171c6ae2dc8d1}\index{Modbus configs@{Modbus configs}!MODBUS\_ENABLE\_COILS@{MODBUS\_ENABLE\_COILS}}
\index{MODBUS\_ENABLE\_COILS@{MODBUS\_ENABLE\_COILS}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_ENABLE\_COILS}{MODBUS\_ENABLE\_COILS}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga29ce22b8b7f0622bc23171c6ae2dc8d1}
\#define MODBUS\+\_\+\+ENABLE\+\_\+\+COILS}
Включить обработку коилов
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00051}{51}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gaf6a8dfc090b3915d668d78ee19585344}\index{Modbus configs@{Modbus configs}!MODBUS\_ENABLE\_HOLDINGS@{MODBUS\_ENABLE\_HOLDINGS}}
\index{MODBUS\_ENABLE\_HOLDINGS@{MODBUS\_ENABLE\_HOLDINGS}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_ENABLE\_HOLDINGS}{MODBUS\_ENABLE\_HOLDINGS}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gaf6a8dfc090b3915d668d78ee19585344}
\#define MODBUS\+\_\+\+ENABLE\+\_\+\+HOLDINGS}
Включить обработку регистров хранения
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00052}{52}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga23d7073c81bedb80a302140afd0d79c0}\index{Modbus configs@{Modbus configs}!MODBUS\_ENABLE\_INPUTS@{MODBUS\_ENABLE\_INPUTS}}
\index{MODBUS\_ENABLE\_INPUTS@{MODBUS\_ENABLE\_INPUTS}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_ENABLE\_INPUTS}{MODBUS\_ENABLE\_INPUTS}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga23d7073c81bedb80a302140afd0d79c0}
\#define MODBUS\+\_\+\+ENABLE\+\_\+\+INPUTS}
Включить обработку входных регистров
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00053}{53}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5bf9f305bd863b10f1b350c5004ddda7}\index{Modbus configs@{Modbus configs}!MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS@{MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS}}
\index{MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS@{MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS}{MODBUS\_ENABLE\_DEVICE\_IDENTIFICATIONS}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_ga5bf9f305bd863b10f1b350c5004ddda7}
\#define MODBUS\+\_\+\+ENABLE\+\_\+\+DEVICE\+\_\+\+IDENTIFICATIONS}
Включить обработку идентификаторы устройства
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00054}{54}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae68222efbcf3199706bfaef46af97bf8}\index{Modbus configs@{Modbus configs}!MODBUS\_ENABLE\_DIAGNOSTICS@{MODBUS\_ENABLE\_DIAGNOSTICS}}
\index{MODBUS\_ENABLE\_DIAGNOSTICS@{MODBUS\_ENABLE\_DIAGNOSTICS}!Modbus configs@{Modbus configs}}
\doxysubsubsubsection{\texorpdfstring{MODBUS\_ENABLE\_DIAGNOSTICS}{MODBUS\_ENABLE\_DIAGNOSTICS}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___c_o_n_f_i_g_s_gae68222efbcf3199706bfaef46af97bf8}
\#define MODBUS\+\_\+\+ENABLE\+\_\+\+DIAGNOSTICS}
Включить обработку диагностики модбас
Definition at line \mbox{\hyperlink{modbus__config_8h_source_l00055}{55}} of file \mbox{\hyperlink{modbus__config_8h_source}{modbus\+\_\+config.\+h}}.

View File

@@ -0,0 +1 @@
61c9835afeea22bde934d75b01e2746f

View File

@@ -0,0 +1,80 @@
\doxysubsection{Modbus Registers Map }
\hypertarget{group___m_o_d_b_u_s___d_a_t_a}{}\label{group___m_o_d_b_u_s___d_a_t_a}\index{Modbus Registers Map@{Modbus Registers Map}}
Определение карты регистров и коилов
Collaboration diagram for Modbus Registers Map\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{group___m_o_d_b_u_s___d_a_t_a}
\end{center}
\end{figure}
\doxysubsubsubsection*{Topics}
\begin{DoxyCompactItemize}
\item
\mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___r_e_r_i_s_t_e_r_s___d_e_f_i_n_e_s}{Registers structures}}
\begin{DoxyCompactList}\small\item\em Стуруктура регистров (входных и хранения) \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___c_o_i_l_s___d_e_f_i_n_e_s}{Coils Structure}}
\begin{DoxyCompactList}\small\item\em Структура коилов \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item
struct \mbox{\hyperlink{struct_m_b___data_structure_type_def}{MB\+\_\+\+Data\+Structure\+Type\+Def}}
\begin{DoxyCompactList}\small\item\em Структура со всеми регистрами и коилами модбас \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection{Detailed Description}
Определение карты регистров и коилов
Файл содержит объявления структур данных, доступных через Modbus\+:
\begin{DoxyItemize}
\item Holding Registers (R/W) -\/ регистры хранения
\item Input Registers (R/O) -\/ входные регистры ~\newline
\item Coils (R/W) -\/ дискретные выходы
\end{DoxyItemize}\hypertarget{group___m_o_d_b_u_s___d_a_t_a_datinit}{}\doxysubsubsection{\texorpdfstring{Базовая настройка под устройство\+:}{Базовая настройка под устройство\+:}}\label{group___m_o_d_b_u_s___d_a_t_a_datinit}
\begin{DoxyEnumerate}
\item Настроить диапазоны адресов
\begin{DoxyItemize}
\item \doxylink{modbus__data_8h_a22bd1273e01d32f90a279b517d1737b6}{R\+\_\+\+INPUT\+\_\+\+ADDR} и \doxylink{modbus__data_8h_a97c0b1e20498bca34f6dfe0ac0d97b30}{R\+\_\+\+INPUT\+\_\+\+QNT} для входных регистров
\item \doxylink{modbus__data_8h_a791dfd31cc06338acdd8a2eb3b7032e6}{R\+\_\+\+HOLDING\+\_\+\+ADDR} и \doxylink{modbus__data_8h_acf40437374a3227e661db1a18bcef7d7}{R\+\_\+\+HOLDING\+\_\+\+QNT} для регистров хр анения
\item \doxylink{modbus__data_8h_a5057c379abcae88db30ad094eceb952d}{C\+\_\+\+COILS\+\_\+\+ADDR} и \doxylink{modbus__data_8h_a5057c379abcae88db30ad094eceb952d}{C\+\_\+\+COILS\+\_\+\+ADDR} для коилов
\end{DoxyItemize}
\item Настроить структуры данных\+:
\begin{DoxyItemize}
\item \doxylink{struct_m_b___data_in_regs_type_def}{MB\+\_\+\+Data\+In\+Regs\+Type\+Def}
\item \doxylink{struct_m_b___data_hold_regs_type_def}{MB\+\_\+\+Data\+Hold\+Regs\+Type\+Def}
\item \doxylink{struct_m_b___data_coils_type_def}{MB\+\_\+\+Data\+Coils\+Type\+Def}
\end{DoxyItemize}
\end{DoxyEnumerate}\hypertarget{group___m_o_d_b_u_s___d_a_t_a_datexpert}{}\doxysubsubsection{\texorpdfstring{Расширенная настройка под устройство\+:}{Расширенная настройка под устройство\+:}}\label{group___m_o_d_b_u_s___d_a_t_a_datexpert}
\begin{DoxyEnumerate}
\item Добавить новый массив с нужными данными.
\item Добавить дефайны для определения его начального адреса и количества элементов
\item Добавить проверку адресов в MB\+\_\+\+Define\+Registers\+Address/\+MB\+\_\+\+Define\+Coils\+Address.
Пример\+:
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ \ \ R\_USER\_ADDR\ \ \ \ \ \ \ \ 555}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ \ \ R\_USER\_QNT\ \ \ \ \ \ \ \ \ 16}}
\DoxyCodeLine{uint16\_t\ \ user\_regs[16];}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{comment}{//...}}
\DoxyCodeLine{\textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}(\mbox{\hyperlink{group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_ga278ca9791c69aef8adeb9e7c4b273c50}{MB\_Check\_Address\_For\_Arr}}(Addr,\ Qnt,\ R\_USER\_ADDR,\ R\_USER\_QNT)\ ==\ \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74}{ET\_NO\_ERRORS}})}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ *pRegs\ =\ \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga938b632e20454741b2a7f97928583776}{MB\_Set\_Register\_Ptr}}(\&user\_regs,\ Addr-\/R\_USER\_ADDR);\ \textcolor{comment}{//\ ВАЖНО!}}
\DoxyCodeLine{\ \ \textcolor{comment}{//\ -\/R\_USER\_ADDR\ нужен\ чтобы\ взять\ адрес\ относительно\ начала\ массива}}
\DoxyCodeLine{\}}
\DoxyCodeLine{\textcolor{keywordflow}{else}\ \ }
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425}{ET\_ILLEGAL\_DATA\_ADDRESS}};}
\DoxyCodeLine{\}}
\end{DoxyCode}
\end{DoxyEnumerate}\input{group___m_o_d_b_u_s___d_a_t_a___r_e_r_i_s_t_e_r_s___d_e_f_i_n_e_s}
\input{group___m_o_d_b_u_s___d_a_t_a___c_o_i_l_s___d_e_f_i_n_e_s}

View File

@@ -0,0 +1 @@
267e24e8cddb8bf32b8b2ec633d10e2d

View File

@@ -0,0 +1,530 @@
\doxysubsubsection{API for Data Access }
\hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s}{}\label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s}\index{API for Data Access@{API for Data Access}}
API для доступа к данным модбас внутри программы
Collaboration diagram for API for Data Access\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=330pt]{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s}
\end{center}
\end{figure}
\doxysubsubsubsubsection*{Macros}
\begin{DoxyCompactItemize}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga0f8474120df77dc5f334d60d6a5f6f8f}{MB\+\_\+\+Coil\+\_\+\+Read\+\_\+\+Local}}(\+\_\+parr\+\_\+, \+\_\+coil\+\_\+)
\begin{DoxyCompactList}\small\item\em Считать коил по локальному адресу. \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga635a6c4fbce49bd1e6797642b36dae7e}{MB\+\_\+\+Coil\+\_\+\+Set\+\_\+\+Local}}(\+\_\+parr\+\_\+, \+\_\+coil\+\_\+)
\begin{DoxyCompactList}\small\item\em Выставить коил по локальному адресу. \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gabc4efb5e2a6aaa021ef5fe6c69476927}{MB\+\_\+\+Coil\+\_\+\+Reset\+\_\+\+Local}}(\+\_\+parr\+\_\+, \+\_\+coil\+\_\+)
\begin{DoxyCompactList}\small\item\em Сбросить коил по локальному адресу. \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gac5f409526055c3d98458ada3d3ab630c}{MB\+\_\+\+Coil\+\_\+\+Toogle\+\_\+\+Local}}(\+\_\+parr\+\_\+, \+\_\+coil\+\_\+)
\begin{DoxyCompactList}\small\item\em Переключить состояние коила по локальному адресу. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item
enum \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8ccf569b78a17a10ac7c80d52730753a}{MB\+\_\+\+Coils\+Op\+Type\+Def}} \{ {\bfseries SET\+\_\+\+COIL}
, {\bfseries RESET\+\_\+\+COIL}
, {\bfseries TOOGLE\+\_\+\+COIL}
\}
\begin{DoxyCompactList}\small\item\em Enum for coils operation. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae9b8595911d93cfbf8597f3356a494cc}{MB\+\_\+\+Coil\+\_\+\+Write\+\_\+\+Global}} (uint16\+\_\+t Addr, \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8ccf569b78a17a10ac7c80d52730753a}{MB\+\_\+\+Coils\+Op\+Type\+Def}} Write\+Val)
\begin{DoxyCompactList}\small\item\em Выставить/сбросить коил по глобальному адресу. \end{DoxyCompactList}\item
uint16\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga82334048256e266170a4b3373be59b59}{MB\+\_\+\+Coil\+\_\+\+Read\+\_\+\+Global}} (uint16\+\_\+t Addr, \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \texorpdfstring{$\ast$}{*}Exception)
\begin{DoxyCompactList}\small\item\em Считать коил по глобальному адресу. \end{DoxyCompactList}\item
int \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gab1237f28e2db2cd2e8a93b31cd9a61be}{MB\+\_\+\+Diagnostics\+\_\+\+Write\+Bit}} (int bit\+\_\+num, int bit\+\_\+state)
\begin{DoxyCompactList}\small\item\em Выставить бит в регистре диагностике \end{DoxyCompactList}\item
int \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga5588ddb15ee2580e7659701e5e671e8f}{MB\+\_\+\+Diagnostics\+\_\+\+Get\+Bit}} (int bit\+\_\+num)
\begin{DoxyCompactList}\small\item\em Прочитать состояние бита диагностического регистра \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___d_i_a_g_ga9d139168bb88bfa1ba1597eeff9ebf6a}{MB\+\_\+\+Device\+Mode\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae7b613f24e9e3d9d95a789c404a3a485}{MB\+\_\+\+Get\+Device\+Mode}} (void)
\begin{DoxyCompactList}\small\item\em Получение текущего режима устройства \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae379458fa9cea50d5e313a68e716cb83}{MB\+\_\+\+Diagnostics\+\_\+\+Bus\+Message\+Cnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик сообщений на шине \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga10f9e4dd9f3dda4bb0f66c323d6b29d7}{MB\+\_\+\+Diagnostics\+\_\+\+Communication\+Error\+Cnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик ошибок связи \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga82e0bf0c4452c25bf3f05a20abb7cc74}{MB\+\_\+\+Diagnostics\+\_\+\+Exception\+Error\+Cnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик исключений \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gaff7c464d7d66399232770bac78b653a4}{MB\+\_\+\+Diagnostics\+\_\+\+Character\+Overrun\+Cnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик переполнения символов \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga22a48a04ef64f74b5974c4fdb1445936}{MB\+\_\+\+Diagnostics\+\_\+\+Slave\+Message\+Cnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик отсутствия ответов \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gabf80c0e24a0ed3736338218c003d001d}{MB\+\_\+\+Diagnostics\+\_\+\+Slave\+No\+Response\+Cnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик отсутствия ответов \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga2585ebac184f7fa56059c81419c614b9}{MB\+\_\+\+Diagnostics\+\_\+\+Slave\+NAKCnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик NAK ответов \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga4baad1102ba3f09cf3cc121b8d548ddb}{MB\+\_\+\+Diagnostics\+\_\+\+Slave\+Busy\+Cnt}} (void)
\begin{DoxyCompactList}\small\item\em Увеличивает счетчик занятости устройства \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8b7134e2fc1b65111d536c5590321b80}{MB\+\_\+\+Holding\+\_\+\+Write\+\_\+\+Global}} (uint16\+\_\+t Addr, uint16\+\_\+t Write\+Val)
\begin{DoxyCompactList}\small\item\em Записать регистр хранения по глобальному адресу. \end{DoxyCompactList}\item
uint16\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga0198b337d6944329b78c59521baf5738}{MB\+\_\+\+Holding\+\_\+\+Read\+\_\+\+Global}} (uint16\+\_\+t Addr, \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \texorpdfstring{$\ast$}{*}Exception)
\begin{DoxyCompactList}\small\item\em Считать регистр хранения по глобальному адресу. \end{DoxyCompactList}\item
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gafb57a29488a549d1c585234945549f2e}{MB\+\_\+\+Input\+\_\+\+Write\+\_\+\+Global}} (uint16\+\_\+t Addr, uint16\+\_\+t Write\+Val)
\begin{DoxyCompactList}\small\item\em Записать входной регистр по глобальному адресу. \end{DoxyCompactList}\item
uint16\+\_\+t \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga28d00cd1df2a46a7a9a6a1b1fce99826}{MB\+\_\+\+Input\+\_\+\+Read\+\_\+\+Global}} (uint16\+\_\+t Addr, \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \texorpdfstring{$\ast$}{*}Exception)
\begin{DoxyCompactList}\small\item\em Считать входной регистр по глобальному адресу. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsection{Detailed Description}
API для доступа к данным модбас внутри программы
\label{doc-define-members}
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_doc-define-members}
\doxysubsubsubsection{Macro Definition Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga0f8474120df77dc5f334d60d6a5f6f8f}\index{API for Data Access@{API for Data Access}!MB\_Coil\_Read\_Local@{MB\_Coil\_Read\_Local}}
\index{MB\_Coil\_Read\_Local@{MB\_Coil\_Read\_Local}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Coil\_Read\_Local}{MB\_Coil\_Read\_Local}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga0f8474120df77dc5f334d60d6a5f6f8f}
\#define MB\+\_\+\+Coil\+\_\+\+Read\+\_\+\+Local(\begin{DoxyParamCaption}\item[{}]{\+\_\+parr\+\_\+}{, }\item[{}]{\+\_\+coil\+\_\+}{}\end{DoxyParamCaption})}
{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{((\ \ *\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga9648b00f955b16e107b901812031cee3}{MB\_Set\_Coil\_Reg\_Ptr}}(\_parr\_,\ \_coil\_)\ \ \&\ \ \ \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga6ab08ed18663bc72f80e4e60b30ab429}{MB\_Set\_Coil\_Mask}}(\_coil\_)\ )\ >>\ (\_coil\_))}
\end{DoxyCode}
Считать коил по локальному адресу.
\begin{DoxyParams}{Parameters}
{\em \+\_\+parr\+\_\+} & -\/ массив коилов. \\
\hline
{\em \+\_\+coil\+\_\+} & -\/ Номер коила от начала массива {\itshape arr}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
uint16\+\_\+t Возвращает запрошенный коил на 0м бите.
\end{DoxyReturn}
Позволяет обратиться к коилу по адресу относительно {\itshape arr}.
Definition at line \mbox{\hyperlink{modbus__coils_8h_source_l00071}{71}} of file \mbox{\hyperlink{modbus__coils_8h_source}{modbus\+\_\+coils.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga635a6c4fbce49bd1e6797642b36dae7e}\index{API for Data Access@{API for Data Access}!MB\_Coil\_Set\_Local@{MB\_Coil\_Set\_Local}}
\index{MB\_Coil\_Set\_Local@{MB\_Coil\_Set\_Local}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Coil\_Set\_Local}{MB\_Coil\_Set\_Local}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga635a6c4fbce49bd1e6797642b36dae7e}
\#define MB\+\_\+\+Coil\+\_\+\+Set\+\_\+\+Local(\begin{DoxyParamCaption}\item[{}]{\+\_\+parr\+\_\+}{, }\item[{}]{\+\_\+coil\+\_\+}{}\end{DoxyParamCaption})}
{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{*\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga9648b00f955b16e107b901812031cee3}{MB\_Set\_Coil\_Reg\_Ptr}}(\_parr\_,\ \_coil\_)\ \ |=\ \ \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga6ab08ed18663bc72f80e4e60b30ab429}{MB\_Set\_Coil\_Mask}}(\_coil\_)}
\end{DoxyCode}
Выставить коил по локальному адресу.
\begin{DoxyParams}{Parameters}
{\em \+\_\+parr\+\_\+} & Указатель на массив коилов. \\
\hline
{\em \+\_\+coil\+\_\+} & -\/ Номер коила от начала массива {\itshape arr}.\\
\hline
\end{DoxyParams}
Позволяет обратиться к коилу по адресу относительно {\itshape arr}.
Definition at line \mbox{\hyperlink{modbus__coils_8h_source_l00079}{79}} of file \mbox{\hyperlink{modbus__coils_8h_source}{modbus\+\_\+coils.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gabc4efb5e2a6aaa021ef5fe6c69476927}\index{API for Data Access@{API for Data Access}!MB\_Coil\_Reset\_Local@{MB\_Coil\_Reset\_Local}}
\index{MB\_Coil\_Reset\_Local@{MB\_Coil\_Reset\_Local}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Coil\_Reset\_Local}{MB\_Coil\_Reset\_Local}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gabc4efb5e2a6aaa021ef5fe6c69476927}
\#define MB\+\_\+\+Coil\+\_\+\+Reset\+\_\+\+Local(\begin{DoxyParamCaption}\item[{}]{\+\_\+parr\+\_\+}{, }\item[{}]{\+\_\+coil\+\_\+}{}\end{DoxyParamCaption})}
{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{*\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga9648b00f955b16e107b901812031cee3}{MB\_Set\_Coil\_Reg\_Ptr}}(\_parr\_,\ \_coil\_)\ \ \&=\ \string~(\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga6ab08ed18663bc72f80e4e60b30ab429}{MB\_Set\_Coil\_Mask}}(\_coil\_))}
\end{DoxyCode}
Сбросить коил по локальному адресу.
\begin{DoxyParams}{Parameters}
{\em \+\_\+parr\+\_\+} & Указатель на массив коилов. \\
\hline
{\em \+\_\+coil\+\_\+} & -\/ Номер коила от начала массива {\itshape arr}.\\
\hline
\end{DoxyParams}
Позволяет обратиться к коилу по адресу относительно {\itshape arr}.
Definition at line \mbox{\hyperlink{modbus__coils_8h_source_l00087}{87}} of file \mbox{\hyperlink{modbus__coils_8h_source}{modbus\+\_\+coils.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gac5f409526055c3d98458ada3d3ab630c}\index{API for Data Access@{API for Data Access}!MB\_Coil\_Toogle\_Local@{MB\_Coil\_Toogle\_Local}}
\index{MB\_Coil\_Toogle\_Local@{MB\_Coil\_Toogle\_Local}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Coil\_Toogle\_Local}{MB\_Coil\_Toogle\_Local}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gac5f409526055c3d98458ada3d3ab630c}
\#define MB\+\_\+\+Coil\+\_\+\+Toogle\+\_\+\+Local(\begin{DoxyParamCaption}\item[{}]{\+\_\+parr\+\_\+}{, }\item[{}]{\+\_\+coil\+\_\+}{}\end{DoxyParamCaption})}
{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{*\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga9648b00f955b16e107b901812031cee3}{MB\_Set\_Coil\_Reg\_Ptr}}(\_parr\_,\ \_coil\_)\ \ \string^=\ \ \mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga6ab08ed18663bc72f80e4e60b30ab429}{MB\_Set\_Coil\_Mask}}(\_coil\_)}
\end{DoxyCode}
Переключить состояние коила по локальному адресу.
\begin{DoxyParams}{Parameters}
{\em \+\_\+parr\+\_\+} & Указатель на массив коилов. \\
\hline
{\em \+\_\+coil\+\_\+} & -\/ Номер коила от начала массива {\itshape arr}.\\
\hline
\end{DoxyParams}
Позволяет обратиться к коилу по адресу относительно {\itshape arr}.
Definition at line \mbox{\hyperlink{modbus__coils_8h_source_l00095}{95}} of file \mbox{\hyperlink{modbus__coils_8h_source}{modbus\+\_\+coils.\+h}}.
\label{doc-enum-members}
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_doc-enum-members}
\doxysubsubsubsection{Enumeration Type Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8ccf569b78a17a10ac7c80d52730753a}\index{API for Data Access@{API for Data Access}!MB\_CoilsOpTypeDef@{MB\_CoilsOpTypeDef}}
\index{MB\_CoilsOpTypeDef@{MB\_CoilsOpTypeDef}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_CoilsOpTypeDef}{MB\_CoilsOpTypeDef}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8ccf569b78a17a10ac7c80d52730753a}
enum \mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8ccf569b78a17a10ac7c80d52730753a}{MB\+\_\+\+Coils\+Op\+Type\+Def}}}
Enum for coils operation.
Definition at line \mbox{\hyperlink{modbus__coils_8h_source_l00056}{56}} of file \mbox{\hyperlink{modbus__coils_8h_source}{modbus\+\_\+coils.\+h}}.
\label{doc-func-members}
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_doc-func-members}
\doxysubsubsubsection{Function Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae9b8595911d93cfbf8597f3356a494cc}\index{API for Data Access@{API for Data Access}!MB\_Coil\_Write\_Global@{MB\_Coil\_Write\_Global}}
\index{MB\_Coil\_Write\_Global@{MB\_Coil\_Write\_Global}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Coil\_Write\_Global()}{MB\_Coil\_Write\_Global()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae9b8595911d93cfbf8597f3356a494cc}
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} MB\+\_\+\+Coil\+\_\+\+Write\+\_\+\+Global (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{Addr}{, }\item[{\mbox{\hyperlink{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8ccf569b78a17a10ac7c80d52730753a}{MB\+\_\+\+Coils\+Op\+Type\+Def}}}]{Write\+Val}{}\end{DoxyParamCaption})}
Выставить/сбросить коил по глобальному адресу.
\begin{DoxyParams}{Parameters}
{\em Addr} & Адрес коила. \\
\hline
{\em Write\+Val} & Что записать в коил\+: 0 или 1. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Exception\+Code Код исключения если коила по адресу не существует, и ET\+\_\+\+NO\+\_\+\+ERRORS если все ок.
\end{DoxyReturn}
Позволяет обратиться к любому коилу по его глобальному адрессу. Вне зависимости от того как коилы размещены в памяти.
Definition at line \mbox{\hyperlink{modbus__coils_8c_source_l00034}{34}} of file \mbox{\hyperlink{modbus__coils_8c_source}{modbus\+\_\+coils.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga82334048256e266170a4b3373be59b59}\index{API for Data Access@{API for Data Access}!MB\_Coil\_Read\_Global@{MB\_Coil\_Read\_Global}}
\index{MB\_Coil\_Read\_Global@{MB\_Coil\_Read\_Global}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Coil\_Read\_Global()}{MB\_Coil\_Read\_Global()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga82334048256e266170a4b3373be59b59}
uint16\+\_\+t MB\+\_\+\+Coil\+\_\+\+Read\+\_\+\+Global (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{Addr}{, }\item[{\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{Exception}{}\end{DoxyParamCaption})}
Считать коил по глобальному адресу.
\begin{DoxyParams}{Parameters}
{\em Addr} & Адрес коила. \\
\hline
{\em Exception} & Указатель на переменную для кода исключения, в случае неудачи при чтении. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
uint16\+\_\+t Возвращает весь регистр с маской на запрошенном коиле.
\end{DoxyReturn}
Позволяет обратиться к любому коилу по его глобальному адрессу. Вне зависимости от того как коилы размещены в памяти.
Definition at line \mbox{\hyperlink{modbus__coils_8c_source_l00074}{74}} of file \mbox{\hyperlink{modbus__coils_8c_source}{modbus\+\_\+coils.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gab1237f28e2db2cd2e8a93b31cd9a61be}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_WriteBit@{MB\_Diagnostics\_WriteBit}}
\index{MB\_Diagnostics\_WriteBit@{MB\_Diagnostics\_WriteBit}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_WriteBit()}{MB\_Diagnostics\_WriteBit()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gab1237f28e2db2cd2e8a93b31cd9a61be}
int MB\+\_\+\+Diagnostics\+\_\+\+Write\+Bit (\begin{DoxyParamCaption}\item[{int}]{bit\+\_\+num}{, }\item[{int}]{bit\+\_\+state}{}\end{DoxyParamCaption})}
Выставить бит в регистре диагностике
\begin{DoxyParams}{Parameters}
{\em bit\+\_\+num} & Номер бита для выставления (1-\/15, 0 бит нельзя выставить) \\
\hline
{\em bit\+\_\+state} & Состояние бита для выставления (Выставить/Сбросить) \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\texorpdfstring{$>$}{>}0 -\/ номер выставленного бита, 0 -\/ ошибка
\end{DoxyReturn}
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00045}{45}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga5588ddb15ee2580e7659701e5e671e8f}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_GetBit@{MB\_Diagnostics\_GetBit}}
\index{MB\_Diagnostics\_GetBit@{MB\_Diagnostics\_GetBit}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_GetBit()}{MB\_Diagnostics\_GetBit()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga5588ddb15ee2580e7659701e5e671e8f}
int MB\+\_\+\+Diagnostics\+\_\+\+Get\+Bit (\begin{DoxyParamCaption}\item[{int}]{bit\+\_\+num}{}\end{DoxyParamCaption})}
Прочитать состояние бита диагностического регистра
\begin{DoxyParams}{Parameters}
{\em bit\+\_\+num} & Номер бита (0-\/15) \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 -\/ бит установлен, 0 -\/ бит сброшен или ошибка
\end{DoxyReturn}
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00062}{62}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae7b613f24e9e3d9d95a789c404a3a485}\index{API for Data Access@{API for Data Access}!MB\_GetDeviceMode@{MB\_GetDeviceMode}}
\index{MB\_GetDeviceMode@{MB\_GetDeviceMode}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_GetDeviceMode()}{MB\_GetDeviceMode()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae7b613f24e9e3d9d95a789c404a3a485}
\mbox{\hyperlink{group___m_o_d_b_u_s___d_i_a_g_ga9d139168bb88bfa1ba1597eeff9ebf6a}{MB\+\_\+\+Device\+Mode\+Type\+Def}} MB\+\_\+\+Get\+Device\+Mode (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Получение текущего режима устройства
\begin{DoxyReturn}{Returns}
Текущий режим работы устройства
\end{DoxyReturn}
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00291}{291}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae379458fa9cea50d5e313a68e716cb83}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_BusMessageCnt@{MB\_Diagnostics\_BusMessageCnt}}
\index{MB\_Diagnostics\_BusMessageCnt@{MB\_Diagnostics\_BusMessageCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_BusMessageCnt()}{MB\_Diagnostics\_BusMessageCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gae379458fa9cea50d5e313a68e716cb83}
void MB\+\_\+\+Diagnostics\+\_\+\+Bus\+Message\+Cnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик сообщений на шине
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00215}{215}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga10f9e4dd9f3dda4bb0f66c323d6b29d7}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_CommunicationErrorCnt@{MB\_Diagnostics\_CommunicationErrorCnt}}
\index{MB\_Diagnostics\_CommunicationErrorCnt@{MB\_Diagnostics\_CommunicationErrorCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_CommunicationErrorCnt()}{MB\_Diagnostics\_CommunicationErrorCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga10f9e4dd9f3dda4bb0f66c323d6b29d7}
void MB\+\_\+\+Diagnostics\+\_\+\+Communication\+Error\+Cnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик ошибок связи
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00223}{223}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga82e0bf0c4452c25bf3f05a20abb7cc74}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_ExceptionErrorCnt@{MB\_Diagnostics\_ExceptionErrorCnt}}
\index{MB\_Diagnostics\_ExceptionErrorCnt@{MB\_Diagnostics\_ExceptionErrorCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_ExceptionErrorCnt()}{MB\_Diagnostics\_ExceptionErrorCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga82e0bf0c4452c25bf3f05a20abb7cc74}
void MB\+\_\+\+Diagnostics\+\_\+\+Exception\+Error\+Cnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик исключений
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00232}{232}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gaff7c464d7d66399232770bac78b653a4}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_CharacterOverrunCnt@{MB\_Diagnostics\_CharacterOverrunCnt}}
\index{MB\_Diagnostics\_CharacterOverrunCnt@{MB\_Diagnostics\_CharacterOverrunCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_CharacterOverrunCnt()}{MB\_Diagnostics\_CharacterOverrunCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gaff7c464d7d66399232770bac78b653a4}
void MB\+\_\+\+Diagnostics\+\_\+\+Character\+Overrun\+Cnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик переполнения символов
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00241}{241}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga22a48a04ef64f74b5974c4fdb1445936}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_SlaveMessageCnt@{MB\_Diagnostics\_SlaveMessageCnt}}
\index{MB\_Diagnostics\_SlaveMessageCnt@{MB\_Diagnostics\_SlaveMessageCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_SlaveMessageCnt()}{MB\_Diagnostics\_SlaveMessageCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga22a48a04ef64f74b5974c4fdb1445936}
void MB\+\_\+\+Diagnostics\+\_\+\+Slave\+Message\+Cnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик отсутствия ответов
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00254}{254}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gabf80c0e24a0ed3736338218c003d001d}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_SlaveNoResponseCnt@{MB\_Diagnostics\_SlaveNoResponseCnt}}
\index{MB\_Diagnostics\_SlaveNoResponseCnt@{MB\_Diagnostics\_SlaveNoResponseCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_SlaveNoResponseCnt()}{MB\_Diagnostics\_SlaveNoResponseCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gabf80c0e24a0ed3736338218c003d001d}
void MB\+\_\+\+Diagnostics\+\_\+\+Slave\+No\+Response\+Cnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик отсутствия ответов
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00263}{263}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga2585ebac184f7fa56059c81419c614b9}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_SlaveNAKCnt@{MB\_Diagnostics\_SlaveNAKCnt}}
\index{MB\_Diagnostics\_SlaveNAKCnt@{MB\_Diagnostics\_SlaveNAKCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_SlaveNAKCnt()}{MB\_Diagnostics\_SlaveNAKCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga2585ebac184f7fa56059c81419c614b9}
void MB\+\_\+\+Diagnostics\+\_\+\+Slave\+NAKCnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик NAK ответов
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00272}{272}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga4baad1102ba3f09cf3cc121b8d548ddb}\index{API for Data Access@{API for Data Access}!MB\_Diagnostics\_SlaveBusyCnt@{MB\_Diagnostics\_SlaveBusyCnt}}
\index{MB\_Diagnostics\_SlaveBusyCnt@{MB\_Diagnostics\_SlaveBusyCnt}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Diagnostics\_SlaveBusyCnt()}{MB\_Diagnostics\_SlaveBusyCnt()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga4baad1102ba3f09cf3cc121b8d548ddb}
void MB\+\_\+\+Diagnostics\+\_\+\+Slave\+Busy\+Cnt (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Увеличивает счетчик занятости устройства
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00281}{281}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8b7134e2fc1b65111d536c5590321b80}\index{API for Data Access@{API for Data Access}!MB\_Holding\_Write\_Global@{MB\_Holding\_Write\_Global}}
\index{MB\_Holding\_Write\_Global@{MB\_Holding\_Write\_Global}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Holding\_Write\_Global()}{MB\_Holding\_Write\_Global()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga8b7134e2fc1b65111d536c5590321b80}
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} MB\+\_\+\+Holding\+\_\+\+Write\+\_\+\+Global (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{Addr}{, }\item[{uint16\+\_\+t}]{Write\+Val}{}\end{DoxyParamCaption})}
Записать регистр хранения по глобальному адресу.
\begin{DoxyParams}{Parameters}
{\em Addr} & Адрес регистра. \\
\hline
{\em Write\+Val} & Число для записи. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Exception\+Code Код исключения если регистра по адресу не существует, и ET\+\_\+\+NO\+\_\+\+ERRORS если все ок.
\end{DoxyReturn}
Позволяет обратиться к любому регистру по его глобальному адрессу. Вне зависимости от того как регистры размещены в памяти.
Definition at line \mbox{\hyperlink{modbus__holdregs_8c_source_l00036}{36}} of file \mbox{\hyperlink{modbus__holdregs_8c_source}{modbus\+\_\+holdregs.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga0198b337d6944329b78c59521baf5738}\index{API for Data Access@{API for Data Access}!MB\_Holding\_Read\_Global@{MB\_Holding\_Read\_Global}}
\index{MB\_Holding\_Read\_Global@{MB\_Holding\_Read\_Global}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Holding\_Read\_Global()}{MB\_Holding\_Read\_Global()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga0198b337d6944329b78c59521baf5738}
uint16\+\_\+t MB\+\_\+\+Holding\+\_\+\+Read\+\_\+\+Global (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{Addr}{, }\item[{\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{Exception}{}\end{DoxyParamCaption})}
Считать регистр хранения по глобальному адресу.
\begin{DoxyParams}{Parameters}
{\em Addr} & Адрес регистра. \\
\hline
{\em Exception} & Указатель на переменную для кода исключения, в случае неудачи при чтении. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
uint16\+\_\+t Возвращает значение регистра.
\end{DoxyReturn}
Позволяет обратиться к любому регистру по его глобальному адрессу. Вне зависимости от того как регистры размещены в памяти.
Definition at line \mbox{\hyperlink{modbus__holdregs_8c_source_l00061}{61}} of file \mbox{\hyperlink{modbus__holdregs_8c_source}{modbus\+\_\+holdregs.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gafb57a29488a549d1c585234945549f2e}\index{API for Data Access@{API for Data Access}!MB\_Input\_Write\_Global@{MB\_Input\_Write\_Global}}
\index{MB\_Input\_Write\_Global@{MB\_Input\_Write\_Global}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Input\_Write\_Global()}{MB\_Input\_Write\_Global()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_gafb57a29488a549d1c585234945549f2e}
\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} MB\+\_\+\+Input\+\_\+\+Write\+\_\+\+Global (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{Addr}{, }\item[{uint16\+\_\+t}]{Write\+Val}{}\end{DoxyParamCaption})}
Записать входной регистр по глобальному адресу.
\begin{DoxyParams}{Parameters}
{\em Addr} & Адрес регистра. \\
\hline
{\em Write\+Val} & Число для записи. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Exception\+Code Код исключения если регистра по адресу не существует, и ET\+\_\+\+NO\+\_\+\+ERRORS если все ок.
\end{DoxyReturn}
Позволяет обратиться к любому регистру по его глобальному адрессу. Вне зависимости от того как регистры размещены в памяти.
Definition at line \mbox{\hyperlink{modbus__inputregs_8c_source_l00032}{32}} of file \mbox{\hyperlink{modbus__inputregs_8c_source}{modbus\+\_\+inputregs.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga28d00cd1df2a46a7a9a6a1b1fce99826}\index{API for Data Access@{API for Data Access}!MB\_Input\_Read\_Global@{MB\_Input\_Read\_Global}}
\index{MB\_Input\_Read\_Global@{MB\_Input\_Read\_Global}!API for Data Access@{API for Data Access}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_Input\_Read\_Global()}{MB\_Input\_Read\_Global()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_ga28d00cd1df2a46a7a9a6a1b1fce99826}
uint16\+\_\+t MB\+\_\+\+Input\+\_\+\+Read\+\_\+\+Global (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{Addr}{, }\item[{\mbox{\hyperlink{group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_ga4ade64cb3fabf37f010c1e297489980c}{MB\+\_\+\+Exception\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{Exception}{}\end{DoxyParamCaption})}
Считать входной регистр по глобальному адресу.
\begin{DoxyParams}{Parameters}
{\em Addr} & Адрес регистра. \\
\hline
{\em Exception} & Указатель на переменную для кода исключения, в случае неудачи при чтении. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
uint16\+\_\+t Возвращает значение регистра.
\end{DoxyReturn}
Позволяет обратиться к любому регистру по его глобальному адрессу. Вне зависимости от того как регистры размещены в памяти.
Definition at line \mbox{\hyperlink{modbus__inputregs_8c_source_l00057}{57}} of file \mbox{\hyperlink{modbus__inputregs_8c_source}{modbus\+\_\+inputregs.\+c}}.

View File

@@ -0,0 +1 @@
4d1ce3cd7bbd24ad05d65c90615e896d

View File

@@ -0,0 +1,33 @@
\doxysubsubsection{Coils Structure }
\hypertarget{group___m_o_d_b_u_s___d_a_t_a___c_o_i_l_s___d_e_f_i_n_e_s}{}\label{group___m_o_d_b_u_s___d_a_t_a___c_o_i_l_s___d_e_f_i_n_e_s}\index{Coils Structure@{Coils Structure}}
Структура коилов
Collaboration diagram for Coils Structure\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=315pt]{group___m_o_d_b_u_s___d_a_t_a___c_o_i_l_s___d_e_f_i_n_e_s}
\end{center}
\end{figure}
\doxysubsubsubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item
struct \mbox{\hyperlink{struct_m_b___data_coils_type_def}{MB\+\_\+\+Data\+Coils\+Type\+Def}}
\begin{DoxyCompactList}\small\item\em Коилы \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsection{Detailed Description}
Структура коилов
\begin{DoxyCode}{0}
\DoxyCodeLine{Структура\ дефайна}
\DoxyCodeLine{Для\ массивов\ коилов:}
\DoxyCodeLine{\ \ C\_<NAME\_ARRAY>\_ADDR\ \ \ -\/\ модбас\ адресс\ первого\ коила\ в\ массиве}
\DoxyCodeLine{\ \ C\_<NAME\_ARRAY>\_QNT\ \ \ \ -\/\ количество\ коилов\ в\ массиве\ (минимум\ 16)}
\end{DoxyCode}

View File

@@ -0,0 +1 @@
d321a96090790becf038d85695ade05b

View File

@@ -0,0 +1,34 @@
\doxysubsubsection{Registers structures }
\hypertarget{group___m_o_d_b_u_s___d_a_t_a___r_e_r_i_s_t_e_r_s___d_e_f_i_n_e_s}{}\label{group___m_o_d_b_u_s___d_a_t_a___r_e_r_i_s_t_e_r_s___d_e_f_i_n_e_s}\index{Registers structures@{Registers structures}}
Стуруктура регистров (входных и хранения)
Collaboration diagram for Registers structures\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=338pt]{group___m_o_d_b_u_s___d_a_t_a___r_e_r_i_s_t_e_r_s___d_e_f_i_n_e_s}
\end{center}
\end{figure}
\doxysubsubsubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item
struct \mbox{\hyperlink{struct_m_b___data_in_regs_type_def}{MB\+\_\+\+Data\+In\+Regs\+Type\+Def}}
\begin{DoxyCompactList}\small\item\em Регистры хранения \end{DoxyCompactList}\item
struct \mbox{\hyperlink{struct_m_b___data_hold_regs_type_def}{MB\+\_\+\+Data\+Hold\+Regs\+Type\+Def}}
\begin{DoxyCompactList}\small\item\em Входные регистры \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsection{Detailed Description}
Стуруктура регистров (входных и хранения)
\begin{DoxyCode}{0}
\DoxyCodeLine{Для\ массивов\ регистров:}
\DoxyCodeLine{\ \ R\_<NAME\_ARRAY>\_ADDR\ \ \ -\/\ \ модбас\ адресс\ первого\ регистра\ в\ массиве}
\DoxyCodeLine{\ \ R\_<NAME\_ARRAY>\_QNT\ \ \ \ -\/\ \ количество\ регистров\ в\ массиве}
\end{DoxyCode}

View File

@@ -0,0 +1 @@
76871839154cae8b0fbbd5c157281dbd

View File

@@ -0,0 +1,197 @@
\doxysubsubsection{Device Identifications Tools }
\hypertarget{group___m_o_d_b_u_s___d_e_v_i_d}{}\label{group___m_o_d_b_u_s___d_e_v_i_d}\index{Device Identifications Tools@{Device Identifications Tools}}
Функции для работы с идентификаторами устройства
Collaboration diagram for Device Identifications Tools\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=338pt]{group___m_o_d_b_u_s___d_e_v_i_d}
\end{center}
\end{figure}
\doxysubsubsubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item
struct \mbox{\hyperlink{struct_m_b___device_object_type_def}{MB\+\_\+\+Device\+Object\+Type\+Def}}
\begin{DoxyCompactList}\small\item\em Структура для объекта (идентификатора устройства модбас) \end{DoxyCompactList}\item
struct \mbox{\hyperlink{struct_m_b___device_identifications_type_def}{MB\+\_\+\+Device\+Identifications\+Type\+Def}}
\begin{DoxyCompactList}\small\item\em Структура со идентификаторами устройства модбас \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Macros}
\begin{DoxyCompactItemize}
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_gaaa2e116d48e6ffb2fa17b4be128930a9}{MODBUS\+\_\+\+DEVICE\+\_\+\+CONFORMITY}}~0x82
\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_gae5e66049f0dc66382999cf52cdeba38e}{MB\+\_\+\+Object\+Init}}(\+\_\+p\+\_\+obj\+\_\+, \+\_\+userstring\+\_\+)
\begin{DoxyCompactList}\small\item\em Инициализация объектов \end{DoxyCompactList}\item
\#define \mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_ga090d04bdaee6827a9a620d149efd4978}{MB\+\_\+\+User\+Object\+Init}}(\+\_\+pinfostruct\+\_\+, \+\_\+user\+\_\+numb\+\_\+)
\begin{DoxyCompactList}\small\item\em Инициализация пользовательских объектов \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_ga2b93352920bf3c6da0f67cfbaef3d572}{MB\+\_\+\+Device\+Inentification\+Init}} (void)
\begin{DoxyCompactList}\small\item\em Инициализация идентификаторов. \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_ga7c0638d252c74d0c1ef047ff23e43b3f}{MB\+\_\+\+Write\+Single\+Object\+To\+Message}} (char \texorpdfstring{$\ast$}{*}mbdata, unsigned \texorpdfstring{$\ast$}{*}ind, \mbox{\hyperlink{struct_m_b___device_object_type_def}{MB\+\_\+\+Device\+Object\+Type\+Def}} \texorpdfstring{$\ast$}{*}obj)
\begin{DoxyCompactList}\small\item\em Записать Один Объект Идентификатора в массив данных \end{DoxyCompactList}\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_gaf864599c95934d63f854a038e3bdccb0}{MB\+\_\+\+Write\+Objects\+To\+Message}} (\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}modbus\+\_\+msg, unsigned maxidofobj)
\begin{DoxyCompactList}\small\item\em Записать Массив Объектов Идентификатора в массив данных \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Variables}
\begin{DoxyCompactItemize}
\item
\mbox{\hyperlink{struct_m_b___device_identifications_type_def}{MB\+\_\+\+Device\+Identifications\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_ga0aaf735fcb26fa61af6f7f4895802b90}{MB\+\_\+\+DEVID}}
\begin{DoxyCompactList}\small\item\em Глобальная структура идентификаторов устройства \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsection{Detailed Description}
Функции для работы с идентификаторами устройства
Модуль реализации функции Read Device Identifications (0x2B)\+:
\begin{DoxyItemize}
\item Базовая идентификация (Vendor, Product, Revision)
\item Расширенная идентификация (URL, Model, User fields)
\item Поддержка потоковой передачи больших объектов
\end{DoxyItemize}\hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_devobj}{}\doxysubsubsubsection{\texorpdfstring{Объекты идентификации\+:}{Объекты идентификации\+:}}\label{group___m_o_d_b_u_s___d_e_v_i_d_devobj}
\begin{DoxyItemize}
\item Vendor\+Name, Product\+Code, Revision -\/ обязательные
\item Vendor\+Url, Product\+Name, Model\+Name -\/ опциональные
\item User objects -\/ пользовательские поля
\item Поддержка до 128 пользовательских объектов
\end{DoxyItemize}
\label{doc-define-members}
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_doc-define-members}
\doxysubsubsubsection{Macro Definition Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_gaaa2e116d48e6ffb2fa17b4be128930a9}\index{Device Identifications Tools@{Device Identifications Tools}!MODBUS\_DEVICE\_CONFORMITY@{MODBUS\_DEVICE\_CONFORMITY}}
\index{MODBUS\_DEVICE\_CONFORMITY@{MODBUS\_DEVICE\_CONFORMITY}!Device Identifications Tools@{Device Identifications Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MODBUS\_DEVICE\_CONFORMITY}{MODBUS\_DEVICE\_CONFORMITY}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_e_v_i_d_gaaa2e116d48e6ffb2fa17b4be128930a9}
\#define MODBUS\+\_\+\+DEVICE\+\_\+\+CONFORMITY~0x82}
Definition at line \mbox{\hyperlink{modbus__devid_8h_source_l00038}{38}} of file \mbox{\hyperlink{modbus__devid_8h_source}{modbus\+\_\+devid.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_gae5e66049f0dc66382999cf52cdeba38e}\index{Device Identifications Tools@{Device Identifications Tools}!MB\_ObjectInit@{MB\_ObjectInit}}
\index{MB\_ObjectInit@{MB\_ObjectInit}!Device Identifications Tools@{Device Identifications Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_ObjectInit}{MB\_ObjectInit}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_e_v_i_d_gae5e66049f0dc66382999cf52cdeba38e}
\#define MB\+\_\+\+Object\+Init(\begin{DoxyParamCaption}\item[{}]{\+\_\+p\+\_\+obj\+\_\+}{, }\item[{}]{\+\_\+userstring\+\_\+}{}\end{DoxyParamCaption})}
{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{(\_p\_obj\_)-\/>length\ \ =\ \textcolor{keyword}{sizeof}(\_userstring\_);\(\backslash\)}
\DoxyCodeLine{(\_p\_obj\_)-\/>name\ \ \ \ =\ \_userstring\_;}
\end{DoxyCode}
Инициализация объектов
С помозью этого дефайна инициализируются объекты в \doxylink{group___m_o_d_b_u_s___d_e_v_i_d_ga2b93352920bf3c6da0f67cfbaef3d572}{MB\+\_\+\+Device\+Inentification\+Init}
Definition at line \mbox{\hyperlink{modbus__devid_8h_source_l00075}{75}} of file \mbox{\hyperlink{modbus__devid_8h_source}{modbus\+\_\+devid.\+h}}.
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_ga090d04bdaee6827a9a620d149efd4978}\index{Device Identifications Tools@{Device Identifications Tools}!MB\_UserObjectInit@{MB\_UserObjectInit}}
\index{MB\_UserObjectInit@{MB\_UserObjectInit}!Device Identifications Tools@{Device Identifications Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_UserObjectInit}{MB\_UserObjectInit}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_e_v_i_d_ga090d04bdaee6827a9a620d149efd4978}
\#define MB\+\_\+\+User\+Object\+Init(\begin{DoxyParamCaption}\item[{}]{\+\_\+pinfostruct\+\_\+}{, }\item[{}]{\+\_\+user\+\_\+numb\+\_\+}{}\end{DoxyParamCaption})}
{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\mbox{\hyperlink{group___m_o_d_b_u_s___d_e_v_i_d_gae5e66049f0dc66382999cf52cdeba38e}{MB\_ObjectInit}}(\&(\_pinfostruct\_)-\/>User[\_user\_numb\_],\ MODBUS\_USEROBJECT\#\#\_user\_numb\_\#\#\_NAME)}
\end{DoxyCode}
Инициализация пользовательских объектов
С помозью этого дефайна инициализируются пользовательские объекты в MB\+\_\+\+Device\+Inentification\+Init
Definition at line \mbox{\hyperlink{modbus__devid_8h_source_l00082}{82}} of file \mbox{\hyperlink{modbus__devid_8h_source}{modbus\+\_\+devid.\+h}}.
\label{doc-func-members}
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_doc-func-members}
\doxysubsubsubsection{Function Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_ga2b93352920bf3c6da0f67cfbaef3d572}\index{Device Identifications Tools@{Device Identifications Tools}!MB\_DeviceInentificationInit@{MB\_DeviceInentificationInit}}
\index{MB\_DeviceInentificationInit@{MB\_DeviceInentificationInit}!Device Identifications Tools@{Device Identifications Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_DeviceInentificationInit()}{MB\_DeviceInentificationInit()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_e_v_i_d_ga2b93352920bf3c6da0f67cfbaef3d572}
void MB\+\_\+\+Device\+Inentification\+Init (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Инициализация идентификаторов.
Definition at line \mbox{\hyperlink{modbus__devid_8c_source_l00177}{177}} of file \mbox{\hyperlink{modbus__devid_8c_source}{modbus\+\_\+devid.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_ga7c0638d252c74d0c1ef047ff23e43b3f}\index{Device Identifications Tools@{Device Identifications Tools}!MB\_WriteSingleObjectToMessage@{MB\_WriteSingleObjectToMessage}}
\index{MB\_WriteSingleObjectToMessage@{MB\_WriteSingleObjectToMessage}!Device Identifications Tools@{Device Identifications Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_WriteSingleObjectToMessage()}{MB\_WriteSingleObjectToMessage()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_e_v_i_d_ga7c0638d252c74d0c1ef047ff23e43b3f}
void MB\+\_\+\+Write\+Single\+Object\+To\+Message (\begin{DoxyParamCaption}\item[{char \texorpdfstring{$\ast$}{*}}]{mbdata}{, }\item[{unsigned \texorpdfstring{$\ast$}{*}}]{ind}{, }\item[{\mbox{\hyperlink{struct_m_b___device_object_type_def}{MB\+\_\+\+Device\+Object\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{obj}{}\end{DoxyParamCaption})}
Записать Один Объект Идентификатора в массив данных
\begin{DoxyParams}{Parameters}
{\em mbdata} & Указатель на массив данных в структуре \doxylink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
obj Объект для записи.
\end{DoxyReturn}
Definition at line \mbox{\hyperlink{modbus__devid_8c_source_l00031}{31}} of file \mbox{\hyperlink{modbus__devid_8c_source}{modbus\+\_\+devid.\+c}}.
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_gaf864599c95934d63f854a038e3bdccb0}\index{Device Identifications Tools@{Device Identifications Tools}!MB\_WriteObjectsToMessage@{MB\_WriteObjectsToMessage}}
\index{MB\_WriteObjectsToMessage@{MB\_WriteObjectsToMessage}!Device Identifications Tools@{Device Identifications Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_WriteObjectsToMessage()}{MB\_WriteObjectsToMessage()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_e_v_i_d_gaf864599c95934d63f854a038e3bdccb0}
void MB\+\_\+\+Write\+Objects\+To\+Message (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}} \texorpdfstring{$\ast$}{*}}]{modbus\+\_\+msg}{, }\item[{unsigned}]{maxidofobj}{}\end{DoxyParamCaption})}
Записать Массив Объектов Идентификатора в массив данных
\begin{DoxyParams}{Parameters}
{\em mbdata} & Указатель на массив данных в структуре \doxylink{struct_r_s___msg_type_def}{RS\+\_\+\+Msg\+Type\+Def}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
obj Объект для записи.
\end{DoxyReturn}
Definition at line \mbox{\hyperlink{modbus__devid_8c_source_l00046}{46}} of file \mbox{\hyperlink{modbus__devid_8c_source}{modbus\+\_\+devid.\+c}}.
\label{doc-var-members}
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_doc-var-members}
\doxysubsubsubsection{Variable Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_e_v_i_d_ga0aaf735fcb26fa61af6f7f4895802b90}\index{Device Identifications Tools@{Device Identifications Tools}!MB\_DEVID@{MB\_DEVID}}
\index{MB\_DEVID@{MB\_DEVID}!Device Identifications Tools@{Device Identifications Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_DEVID}{MB\_DEVID}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_e_v_i_d_ga0aaf735fcb26fa61af6f7f4895802b90}
\mbox{\hyperlink{struct_m_b___device_identifications_type_def}{MB\+\_\+\+Device\+Identifications\+Type\+Def}} MB\+\_\+\+DEVID\hspace{0.3cm}{\ttfamily [extern]}}
Глобальная структура идентификаторов устройства
Definition at line \mbox{\hyperlink{modbus__devid_8c_source_l00021}{21}} of file \mbox{\hyperlink{modbus__devid_8c_source}{modbus\+\_\+devid.\+c}}.

View File

@@ -0,0 +1 @@
93d8ecdbae6295dcdba35fcc34fc59b2

View File

@@ -0,0 +1,104 @@
\doxysubsubsection{Diagnostics Tools }
\hypertarget{group___m_o_d_b_u_s___d_i_a_g}{}\label{group___m_o_d_b_u_s___d_i_a_g}\index{Diagnostics Tools@{Diagnostics Tools}}
Функции для работы с диагностикой
Collaboration diagram for Diagnostics Tools\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=321pt]{group___m_o_d_b_u_s___d_i_a_g}
\end{center}
\end{figure}
\doxysubsubsubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item
struct \mbox{\hyperlink{struct_m_b___diagnostics_info_type_def}{MB\+\_\+\+Diagnostics\+Info\+Type\+Def}}
\begin{DoxyCompactList}\small\item\em Структура со диагностической информацией устройства модбас \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item
enum \mbox{\hyperlink{group___m_o_d_b_u_s___d_i_a_g_ga9d139168bb88bfa1ba1597eeff9ebf6a}{MB\+\_\+\+Device\+Mode\+Type\+Def}} \{ {\bfseries MODBUS\+\_\+\+NORMAL\+\_\+\+MODE} = 0
, {\bfseries MODBUS\+\_\+\+LISTEN\+\_\+\+ONLY\+\_\+\+MODE} = 1
\}
\begin{DoxyCompactList}\small\item\em Режимы работы устройства \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item
void \mbox{\hyperlink{group___m_o_d_b_u_s___d_i_a_g_ga9b61a6d4139bac318868e93f03cd82c7}{MB\+\_\+\+Diagnostics\+Init}} (void)
\begin{DoxyCompactList}\small\item\em Инициализация диагностических счетчиков \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsubsection*{Variables}
\begin{DoxyCompactItemize}
\item
\mbox{\hyperlink{struct_m_b___diagnostics_info_type_def}{MB\+\_\+\+Diagnostics\+Info\+Type\+Def}} \mbox{\hyperlink{group___m_o_d_b_u_s___d_i_a_g_ga4ba6111ac80e342396f9703239323936}{MB\+\_\+\+DIAG}}
\begin{DoxyCompactList}\small\item\em Глобальная структура диагностики \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsubsection{Detailed Description}
Функции для работы с диагностикой
Модуль реализации Diagnostics (Serial Line only) (0x08)\+:
\begin{DoxyItemize}
\item Полная поддержка всех подфункций диагностики
\item Возможность выставить/сбросить любой бит в диагностическом регистре
\item Сбор статистики работы устройства
\item Управление режимами работы
\end{DoxyItemize}
\label{doc-enum-members}
\Hypertarget{group___m_o_d_b_u_s___d_i_a_g_doc-enum-members}
\doxysubsubsubsection{Enumeration Type Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_i_a_g_ga9d139168bb88bfa1ba1597eeff9ebf6a}\index{Diagnostics Tools@{Diagnostics Tools}!MB\_DeviceModeTypeDef@{MB\_DeviceModeTypeDef}}
\index{MB\_DeviceModeTypeDef@{MB\_DeviceModeTypeDef}!Diagnostics Tools@{Diagnostics Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_DeviceModeTypeDef}{MB\_DeviceModeTypeDef}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_i_a_g_ga9d139168bb88bfa1ba1597eeff9ebf6a}
enum \mbox{\hyperlink{group___m_o_d_b_u_s___d_i_a_g_ga9d139168bb88bfa1ba1597eeff9ebf6a}{MB\+\_\+\+Device\+Mode\+Type\+Def}}}
Режимы работы устройства
Definition at line \mbox{\hyperlink{modbus__diag_8h_source_l00030}{30}} of file \mbox{\hyperlink{modbus__diag_8h_source}{modbus\+\_\+diag.\+h}}.
\label{doc-func-members}
\Hypertarget{group___m_o_d_b_u_s___d_i_a_g_doc-func-members}
\doxysubsubsubsection{Function Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_i_a_g_ga9b61a6d4139bac318868e93f03cd82c7}\index{Diagnostics Tools@{Diagnostics Tools}!MB\_DiagnosticsInit@{MB\_DiagnosticsInit}}
\index{MB\_DiagnosticsInit@{MB\_DiagnosticsInit}!Diagnostics Tools@{Diagnostics Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_DiagnosticsInit()}{MB\_DiagnosticsInit()}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_i_a_g_ga9b61a6d4139bac318868e93f03cd82c7}
void MB\+\_\+\+Diagnostics\+Init (\begin{DoxyParamCaption}\item[{void}]{}{}\end{DoxyParamCaption})}
Инициализация диагностических счетчиков
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00022}{22}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.
\label{doc-var-members}
\Hypertarget{group___m_o_d_b_u_s___d_i_a_g_doc-var-members}
\doxysubsubsubsection{Variable Documentation}
\Hypertarget{group___m_o_d_b_u_s___d_i_a_g_ga4ba6111ac80e342396f9703239323936}\index{Diagnostics Tools@{Diagnostics Tools}!MB\_DIAG@{MB\_DIAG}}
\index{MB\_DIAG@{MB\_DIAG}!Diagnostics Tools@{Diagnostics Tools}}
\doxysubsubsubsubsection{\texorpdfstring{MB\_DIAG}{MB\_DIAG}}
{\footnotesize\ttfamily \label{group___m_o_d_b_u_s___d_i_a_g_ga4ba6111ac80e342396f9703239323936}
\mbox{\hyperlink{struct_m_b___diagnostics_info_type_def}{MB\+\_\+\+Diagnostics\+Info\+Type\+Def}} MB\+\_\+\+DIAG\hspace{0.3cm}{\ttfamily [extern]}}
Глобальная структура диагностики
Definition at line \mbox{\hyperlink{modbus__diag_8c_source_l00017}{17}} of file \mbox{\hyperlink{modbus__diag_8c_source}{modbus\+\_\+diag.\+c}}.

Some files were not shown because too many files have changed in this diff Show More