{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033 {\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} {\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;} } {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;} {\stylesheet {\widctlpar\adjustright \fs20\cgrid \snext0 Normal;} {\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect} {\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;} {\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;} {\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;} {\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;} {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;} {\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;} {\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;} {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;} {\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;} {\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;} {\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;} {\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;} {\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;} {\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;} {\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;} {\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;} {\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;} {\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;} {\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;} {\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;} {\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;} {\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;} {\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;} {\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;} {\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;} {\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;} {\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;} {\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;} {\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;} {\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;} {\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;} {\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;} {\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;} {\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;} {\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;} {\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;} {\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;} {\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;} {\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;} {\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;} {\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;} {\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;} {\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;} {\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;} {\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;} {\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;} {\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;} {\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;} {\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;} {\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;} {\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;} {\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;} {\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;} {\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;} {\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;} {\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;} {\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;} {\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;} {\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;} {\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;} {\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;} {\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;} {\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;} {\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;} {\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;} {\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;} {\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;} {\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;} {\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;} {\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;} {\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;} {\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;} {\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;} {\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;} {\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;} {\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;} {\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;} {\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;} {\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;} {\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;} {\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;} {\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;} {\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;} {\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;} {\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;} {\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;} {\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;} {\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;} {\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;} {\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;} {\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;} {\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;} {\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;} {\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;} {\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;} {\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;} } {\info {\title {\comment \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6 {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 0.1alpha \par }}\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6} {\comment Generated by doxygen 1.10.0.} }\pard\plain \sectd\pgnlcrm {\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}} \pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \vertalc\qc\par\par\par\par\par\par\par \pard\plain \s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\field\fldedit {\*\fldinst TITLE \\*MERGEFORMAT}{\fldrslt \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6}}\par \pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \par \par\par\par\par\par\par\par\par\par\par\par\par \pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid {\field\fldedit {\*\fldinst AUTHOR \\*MERGEFORMAT}{\fldrslt AUTHOR}}\par Version 0.1alpha\par\page\page\vertalt \pard\plain \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Table of Contents\par \pard\plain \par {\field\fldedit {\*\fldinst TOC \\f \\*MERGEFORMAT}{\fldrslt Table of contents}}\par \pard\plain \sect \sbkpage \pgndec \pgnrestart \sect \sectd \sbknone {\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}} \par \pard\plain \par \pard\plain \pard\plain \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Deprecated List\par \pard\plain {\tc\tcl1 \v Deprecated List} {\xe \v Deprecated List} {\bkmkstart AAAAAAAAAV} {\bkmkend AAAAAAAAAV} { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Global {\b FSMDataLoader} \par } {\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\bkmkstart AAAAAAAAAW} {\bkmkend AAAAAAAAAW} \'E9\'A2\'84\'E8\'A3\'85\'E8\'BD\'BD\'E5\'99\'A8\'E5\'BC\'83\'E7\'94\'A8 \par} {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Global {\b FSMPrivateVars::preloader} \par } {\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\bkmkstart AAAAAAAAAX} {\bkmkend AAAAAAAAAX} \'E5\'BC\'83\'E7\'94\'A8 \par} {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Global {\b FSMPureVtbl::initDataLoader} )(FSM *pFSM)\par } {\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\bkmkstart AAAAAAAAAY} {\bkmkend AAAAAAAAAY} \'E5\'92\'8C\'E9\'A2\'84\'E8\'A3\'85\'E8\'BD\'BD\'E5\'99\'A8\'E7\'9B\'B8\'E5\'85\'B3 \par} {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Global {\b FSMPureVtbl::loadExternalData} )(void *extData)\par } {\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\bkmkstart AAAAAAAAAZ} {\bkmkend AAAAAAAAAZ} \'E6\'9A\'82\'E6\'97\'B6\'E6\'B2\'A1\'E7\'94\'A8\'EF\'BC\'8C\'E5\'90\'8E\'E7\'BB\'AD\'E5\'8F\'AF\'E8\'83\'BD\'E8\'80\'83\'E8\'99\'91\'E5\'A4\'96\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE\'E6\'98\'AF\'E5\'90\'A6\'E5\'85\'81\'E8\'AE\'B8\'E9\'9A\'8F\'E6\'97\'B6\'E4\'BF\'AE\'E6\'94\'B9 \par} }} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Data Structure Index\par \pard\plain {\tc \v Data Structure Index} \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Data Structures\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here are the data structures with brief descriptions:} { \par \pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid {\b {\b _templateFSMExternalData} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E5\'A4\'96\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABA \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b _templateFSMInnerData} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E5\'86\'85\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABB \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b FSMDataLoader} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABC \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b FSMHandler} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABD \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b FSMPrivateVars} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'9F\'BA\'E7\'B1\'BB\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'E5\'92\'8C\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'8D\'E5\'8F\'AF\'E7\'9B\'B4\'E6\'8E\'A5\'E8\'AE\'BF\'E9\'97\'AE })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABF \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b FSMPureVtbl} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'BA\'AF\'E8\'99\'9A\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E5\'BF\'85\'E9\'A1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'EF\'BC\'8C\'E7\'88\'B6\'E7\'B1\'BB\'E6\'9E\'84\'E9\'80\'A0\'E5\'87\'BD\'E6\'95\'B0\'E4\'B8\'8D\'E4\'BC\'9A\'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96 })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABK \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b FSMSignals} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'94\'A8\'E7\'9A\'84\'E4\'BF\'A1\'E5\'8F\'B7\'EF\'BC\'8Cprotected\'E5\'AD\'90\'E7\'B1\'BB\'E5\'8F\'AF\'E4\'BB\'A5\'E8\'AE\'BF\'E9\'97\'AE })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABR \\*MERGEFORMAT}{\fldrslt pagenum}} \par \par} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid File Index\par \pard\plain {\tc \v File Index} \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid File List\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here is a list of all documented files with brief descriptions:} { \par \pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid {\b FSM_OOP/baseFSM/{\b FSM_private.h} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'EF\'BC\'8C\'E5\'8F\'AA\'E8\'83\'BD\'E5\'9C\'A8\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E5\'86\'85\'E4\'BD\'BF\'E7\'94\'A8\'E3\'80\'82 })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAK \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/baseFSM/{\b FSM_protected.h} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84protected\'E5\'87\'BD\'E6\'95\'B0\'E5\'92\'8C\'E5\'8F\'98\'E9\'87\'8F\'EF\'BC\'8C\'E5\'9C\'A8\'E7\'BB\'A7\'E6\'89\'BF\'E7\'9A\'84\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'AD\'E5\'8F\'AF\'E4\'BD\'BF\'E7\'94\'A8\'EF\'BC\'8C\'E5\'9C\'A8\'E5\'A4\'96\'E7\'95\'8C\'E4\'B8\'8D\'E5\'8F\'AF\'E4\'BD\'BF\'E7\'94\'A8 })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAP \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/baseFSM/{\b FSM_public.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAC \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/childtest/{\b childFSM.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAD \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/childtest/{\b childFSM_private.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAE \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/childtest/{\b parentFSM.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAF \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/keytest/{\b keyFSM.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAG \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/keytest/{\b keyFSM_private.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAH \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/template/{\b templateFSM.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAI \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b FSM_OOP/template/{\b templateFSM_private.h} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAJ \\*MERGEFORMAT}{\fldrslt pagenum}} \par \par} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Data Structure Documentation{\tc \v Data Structure Documentation} \par \pard\plain \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid _templateFSMExternalData Struct Reference\par \pard\plain {\tc\tcl2 \v _templateFSMExternalData} {\xe \v _templateFSMExternalData} {\bkmkstart AAAAAAAABA} {\bkmkend AAAAAAAABA} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E5\'A4\'96\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE }}\par { {\f2 #include }}\par {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E5\'A4\'96\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE \par }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid _templateFSMInnerData Struct Reference\par \pard\plain {\tc\tcl2 \v _templateFSMInnerData} {\xe \v _templateFSMInnerData} {\bkmkstart AAAAAAAABB} {\bkmkend AAAAAAAABB} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E5\'86\'85\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE }}\par { {\f2 #include }}\par {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E5\'86\'85\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE \par }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSMDataLoader Struct Reference\par \pard\plain {\tc\tcl2 \v FSMDataLoader} {\xe \v FSMDataLoader} {\bkmkstart AAAAAAAABC} {\bkmkend AAAAAAAABC} \par { {\f2 #include }}\par {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Deprecated:\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \'E9\'A2\'84\'E8\'A3\'85\'E8\'BD\'BD\'E5\'99\'A8\'E5\'BC\'83\'E7\'94\'A8\par } }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSMHandler Struct Reference\par \pard\plain {\tc\tcl2 \v FSMHandler} {\xe \v FSMHandler} {\bkmkstart AAAAAAAABD} {\bkmkend AAAAAAAABD} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 }}\par { {\f2 #include }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Data Fields\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid int(** {\b selectNextState} )(void *data, {\b FSMSignals} *signals)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'BF\'99\'E4\'B8\'AA\'E7\'BB\'93\'E6\'9E\'84\'E4\'BD\'93\'E6\'9A\'B4\'E9\'9C\'B2\'E7\'BB\'99protect\'E6\'96\'87\'E4\'BB\'B6\'EF\'BC\'8C\'E6\'96\'B9\'E4\'BE\'BF\'E5\'9C\'A8\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'AD\'E6\'B7\'BB\'E5\'8A\'A0\'E5\'87\'BD\'E6\'95\'B0\'E3\'80\'82\'E4\'B8\'8D\'E7\'84\'B6\'E6\'B7\'BB\'E5\'8A\'A0\'E5\'87\'BD\'E6\'95\'B0\'E5\'BE\'97\'E5\'86\'8D\'E5\'86\'99\'E4\'B8\'AA\'E5\'87\'BD\'E6\'95\'B0\'E6\'B7\'BB\'E5\'8A\'A0\'EF\'BC\'8C \'E6\'9C\'89\'E7\'82\'B9\'E9\'BA\'BB\'E7\'83\'A6 \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Field Documentation\par \pard\plain {\xe \v selectNextState\:FSMHandler} {\xe \v FSMHandler\:selectNextState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b int(** FSMHandler::selectNextState) (void *data, {\b FSMSignals} *signals)}} \par {\bkmkstart AAAAAAAABE} {\bkmkend AAAAAAAABE} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E6\'AF\'8F\'E4\'B8\'AA\'E7\'8A\'B6\'E6\'80\'81\'E9\'85\'8D\'E7\'BD\'AE\'E7\'9A\'84\'E7\'8A\'B6\'E6\'80\'81\'E9\'80\'89\'E6\'8B\'A9\'E5\'87\'BD\'E6\'95\'B0 \par }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSMPrivateVars Struct Reference\par \pard\plain {\tc\tcl2 \v FSMPrivateVars} {\xe \v FSMPrivateVars} {\bkmkstart AAAAAAAABF} {\bkmkend AAAAAAAABF} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'9F\'BA\'E7\'B1\'BB\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'E5\'92\'8C\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'8D\'E5\'8F\'AF\'E7\'9B\'B4\'E6\'8E\'A5\'E8\'AE\'BF\'E9\'97\'AE }}\par { {\f2 #include }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Data Fields\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid int {\b defaultState}\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid int {\b nextState}\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid int {\b index}\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b FSMDataLoader} {\b preloader}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'9F\'BA\'E7\'B1\'BB\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'E5\'92\'8C\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'8D\'E5\'8F\'AF\'E7\'9B\'B4\'E6\'8E\'A5\'E8\'AE\'BF\'E9\'97\'AE \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Field Documentation\par \pard\plain {\xe \v defaultState\:FSMPrivateVars} {\xe \v FSMPrivateVars\:defaultState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b int FSMPrivateVars::defaultState}} \par {\bkmkstart AAAAAAAABG} {\bkmkend AAAAAAAABG} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Idle\'E7\'8A\'B6\'E6\'80\'81\'E4\'B8\'8D\'E8\'83\'BD\'E5\'81\'9C\'E7\'95\'99\'EF\'BC\'8C\'E5\'BF\'85\'E9\'A1\'BB\'E6\'8C\'87\'E5\'AE\'9A\'E4\'B8\'80\'E4\'B8\'AA\'E5\'88\'9D\'E5\'A7\'8B\'E7\'8A\'B6\'E6\'80\'81 \par }} {\xe \v nextState\:FSMPrivateVars} {\xe \v FSMPrivateVars\:nextState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b int FSMPrivateVars::nextState}} \par {\bkmkstart AAAAAAAABH} {\bkmkend AAAAAAAABH} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid nextState\'E4\'B8\'BAIdle\'E4\'BB\'A3\'E8\'A1\'A8\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E4\'B8\'8D\'E5\'8F\'91\'E7\'94\'9F\'E5\'8F\'98\'E5\'8C\'96 \par }} {\xe \v index\:FSMPrivateVars} {\xe \v FSMPrivateVars\:index} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b int FSMPrivateVars::index}} \par {\bkmkstart AAAAAAAABI} {\bkmkend AAAAAAAABI} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E8\'BD\'AC\'E7\'A7\'BB\'E5\'87\'BD\'E6\'95\'B0\'E8\'A1\'A8\'E5\'AF\'B9\'E5\'BA\'94\'E7\'9A\'84\'E6\'A0\'87\'E5\'8F\'B7 \par }} {\xe \v preloader\:FSMPrivateVars} {\xe \v FSMPrivateVars\:preloader} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b FSMDataLoader} FSMPrivateVars::preloader}} \par {\bkmkstart AAAAAAAABJ} {\bkmkend AAAAAAAABJ} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Deprecated:\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid \'E5\'BC\'83\'E7\'94\'A8 \par } }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSMPureVtbl Struct Reference\par \pard\plain {\tc\tcl2 \v FSMPureVtbl} {\xe \v FSMPureVtbl} {\bkmkstart AAAAAAAABK} {\bkmkend AAAAAAAABK} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'BA\'AF\'E8\'99\'9A\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E5\'BF\'85\'E9\'A1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'EF\'BC\'8C\'E7\'88\'B6\'E7\'B1\'BB\'E6\'9E\'84\'E9\'80\'A0\'E5\'87\'BD\'E6\'95\'B0\'E4\'B8\'8D\'E4\'BC\'9A\'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96 }}\par { {\f2 #include }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Data Fields\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void(* {\b setupHandler} )({\b FSMHandler} *fcns)\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void(* {\b initData} )(FSM *pFSM)\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void(* {\b loadExternalData} )(void *extData)\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void(* {\b initDataLoader} )(FSM *pFSM)\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void(* {\b initSignals} )(FSM *pFSM)\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void(* {\b resetSignals} )({\b FSMSignals} *signalRegs, void *data)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'BA\'AF\'E8\'99\'9A\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E5\'BF\'85\'E9\'A1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'EF\'BC\'8C\'E7\'88\'B6\'E7\'B1\'BB\'E6\'9E\'84\'E9\'80\'A0\'E5\'87\'BD\'E6\'95\'B0\'E4\'B8\'8D\'E4\'BC\'9A\'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96 \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Field Documentation\par \pard\plain {\xe \v setupHandler\:FSMPureVtbl} {\xe \v FSMPureVtbl\:setupHandler} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void(* FSMPureVtbl::setupHandler) ({\b FSMHandler} *fcns)}} \par {\bkmkstart AAAAAAAABL} {\bkmkend AAAAAAAABL} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'AE\'BE\'E7\'BD\'AE\'E6\'89\'80\'E6\'9C\'89\'E7\'9A\'84FSMHandler\'EF\'BC\'8C\'E5\'BF\'85\'E9\'A1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0 \par }} {\xe \v initData\:FSMPureVtbl} {\xe \v FSMPureVtbl\:initData} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void(* FSMPureVtbl::initData) (FSM *pFSM)}} \par {\bkmkstart AAAAAAAABM} {\bkmkend AAAAAAAABM} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'94\'A8\'E6\'95\'B0\'E6\'8D\'AE\'EF\'BC\'8C\'E5\'8C\'85\'E6\'8B\'AC\'E5\'86\'85\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE\'E5\'92\'8C\'E5\'A4\'96\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE \par }} {\xe \v loadExternalData\:FSMPureVtbl} {\xe \v FSMPureVtbl\:loadExternalData} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void(* FSMPureVtbl::loadExternalData) (void *extData)}} \par {\bkmkstart AAAAAAAABN} {\bkmkend AAAAAAAABN} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Deprecated:\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid \'E6\'9A\'82\'E6\'97\'B6\'E6\'B2\'A1\'E7\'94\'A8\'EF\'BC\'8C\'E5\'90\'8E\'E7\'BB\'AD\'E5\'8F\'AF\'E8\'83\'BD\'E8\'80\'83\'E8\'99\'91\'E5\'A4\'96\'E9\'83\'A8\'E6\'95\'B0\'E6\'8D\'AE\'E6\'98\'AF\'E5\'90\'A6\'E5\'85\'81\'E8\'AE\'B8\'E9\'9A\'8F\'E6\'97\'B6\'E4\'BF\'AE\'E6\'94\'B9 \par } }} {\xe \v initDataLoader\:FSMPureVtbl} {\xe \v FSMPureVtbl\:initDataLoader} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void(* FSMPureVtbl::initDataLoader) (FSM *pFSM)}} \par {\bkmkstart AAAAAAAABO} {\bkmkend AAAAAAAABO} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Deprecated:\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid \'E5\'92\'8C\'E9\'A2\'84\'E8\'A3\'85\'E8\'BD\'BD\'E5\'99\'A8\'E7\'9B\'B8\'E5\'85\'B3 \par } }} {\xe \v initSignals\:FSMPureVtbl} {\xe \v FSMPureVtbl\:initSignals} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void(* FSMPureVtbl::initSignals) (FSM *pFSM)}} \par {\bkmkstart AAAAAAAABP} {\bkmkend AAAAAAAABP} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E4\'BF\'A1\'E5\'8F\'B7 \par }} {\xe \v resetSignals\:FSMPureVtbl} {\xe \v FSMPureVtbl\:resetSignals} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void(* FSMPureVtbl::resetSignals) ({\b FSMSignals} *signalRegs, void *data)}} \par {\bkmkstart AAAAAAAABQ} {\bkmkend AAAAAAAABQ} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E6\'A0\'B9\'E6\'8D\'AE\'E6\'9D\'A1\'E4\'BB\'B6\'E9\'87\'8D\'E7\'BD\'AE\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E4\'BF\'A1\'E5\'8F\'B7 \par }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSMSignals Struct Reference\par \pard\plain {\tc\tcl2 \v FSMSignals} {\xe \v FSMSignals} {\bkmkstart AAAAAAAABR} {\bkmkend AAAAAAAABR} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'94\'A8\'E7\'9A\'84\'E4\'BF\'A1\'E5\'8F\'B7\'EF\'BC\'8Cprotected\'E5\'AD\'90\'E7\'B1\'BB\'E5\'8F\'AF\'E4\'BB\'A5\'E8\'AE\'BF\'E9\'97\'AE }}\par { {\f2 #include }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Data Fields\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Uint16 {\b external}\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Uint16 {\b lastTriggeredSignal}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'94\'A8\'E7\'9A\'84\'E4\'BF\'A1\'E5\'8F\'B7\'EF\'BC\'8Cprotected\'E5\'AD\'90\'E7\'B1\'BB\'E5\'8F\'AF\'E4\'BB\'A5\'E8\'AE\'BF\'E9\'97\'AE \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Field Documentation\par \pard\plain {\xe \v external\:FSMSignals} {\xe \v FSMSignals\:external} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b Uint16 FSMSignals::external}} \par {\bkmkstart AAAAAAAABS} {\bkmkend AAAAAAAABS} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'A4\'96\'E9\'83\'A8\'E4\'BF\'A1\'E5\'8F\'B7 \par }} {\xe \v lastTriggeredSignal\:FSMSignals} {\xe \v FSMSignals\:lastTriggeredSignal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b Uint16 FSMSignals::lastTriggeredSignal}} \par {\bkmkstart AAAAAAAABT} {\bkmkend AAAAAAAABT} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E4\'B8\'8A\'E4\'B8\'80\'E6\'AC\'A1\'E8\'A7\'A6\'E5\'8F\'91\'E7\'9A\'84\'E5\'A4\'96\'E9\'83\'A8\'E4\'BF\'A1\'E5\'8F\'B7 \par }} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid File Documentation{\tc \v File Documentation} \par \pard\plain \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSM_OOP/baseFSM/FSM_private.h File Reference\par \pard\plain {\tc\tcl2 \v FSM_OOP/baseFSM/FSM_private.h} {\xe \v FSM_OOP/baseFSM/FSM_private.h} {\bkmkstart AAAAAAAAAK} {\bkmkend AAAAAAAAAK} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'EF\'BC\'8C\'E5\'8F\'AA\'E8\'83\'BD\'E5\'9C\'A8\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E5\'86\'85\'E4\'BD\'BF\'E7\'94\'A8\'E3\'80\'82 }}\par { \pard\plain \s18\widctlpar\fs22\cgrid {\f2 #include }\par {\f2 #include "FSM_protected.h"}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Data Structures\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid struct {\b FSMDataLoader}\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid struct {\b FSMPrivateVars}\par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'9F\'BA\'E7\'B1\'BB\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'E5\'92\'8C\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'8D\'E5\'8F\'AF\'E7\'9B\'B4\'E6\'8E\'A5\'E8\'AE\'BF\'E9\'97\'AE }}\par} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Typedefs\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef struct FSMHandler {\b FSMHandler}\par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 }{ }\par }\par} \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef struct FSMSignals {\b FSMSignals}{\bkmkstart AAAAAAAAAL} {\bkmkend AAAAAAAAAL} \par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'94\'A8\'E7\'9A\'84\'E4\'BF\'A1\'E5\'8F\'B7\'EF\'BC\'8Cprotected\'E5\'AD\'90\'E7\'B1\'BB\'E5\'8F\'AF\'E4\'BB\'A5\'E8\'AE\'BF\'E9\'97\'AE }{ }\par }\par} \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef struct FSMDataLoader {\b FSMDataLoader}\par \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef struct FSMPrivateVars {\b FSMPrivateVars}{\bkmkstart AAAAAAAAAM} {\bkmkend AAAAAAAAAM} \par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'9F\'BA\'E7\'B1\'BB\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'E5\'92\'8C\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'8D\'E5\'8F\'AF\'E7\'9B\'B4\'E6\'8E\'A5\'E8\'AE\'BF\'E9\'97\'AE }{ }\par }\par} } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84\'E7\'A7\'81\'E6\'9C\'89\'E5\'8F\'98\'E9\'87\'8F\'EF\'BC\'8C\'E5\'8F\'AA\'E8\'83\'BD\'E5\'9C\'A8\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E5\'86\'85\'E4\'BD\'BF\'E7\'94\'A8\'E3\'80\'82 \par }{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Author\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 \'E5\'A4\'A9\'E7\'A5\'9E ({\f2 dalaoshi@stu.xjtu.edu.cn}) \par }}{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Version\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 2.1 \par }}{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Date\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 2024-05-07\par }}{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Copyright\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 \'E5\'A4\'A9\'E7\'A5\'9E\'E5\'88\'9B\'E6\'84\'8F\'E6\'97\'A0\'E9\'99\'90\'E5\'85\'AC\'E5\'8F\'B8 2024 \par }}}} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Typedef Documentation\par \pard\plain {\xe \v FSMHandler\:FSM_private.h} {\xe \v FSM_private.h\:FSMHandler} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef struct FSMHandler FSMHandler}} \par {\bkmkstart AAAAAAAAAN} {\bkmkend AAAAAAAAAN} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'BF\'99\'E4\'B8\'AA\'E7\'BB\'93\'E6\'9E\'84\'E4\'BD\'93\'E6\'9A\'B4\'E9\'9C\'B2\'E7\'BB\'99protect\'E6\'96\'87\'E4\'BB\'B6\'EF\'BC\'8C\'E6\'96\'B9\'E4\'BE\'BF\'E5\'9C\'A8\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'AD\'E6\'B7\'BB\'E5\'8A\'A0\'E5\'87\'BD\'E6\'95\'B0\'E3\'80\'82\'E4\'B8\'8D\'E7\'84\'B6\'E6\'B7\'BB\'E5\'8A\'A0\'E5\'87\'BD\'E6\'95\'B0\'E5\'BE\'97\'E5\'86\'8D\'E5\'86\'99\'E4\'B8\'AA\'E5\'87\'BD\'E6\'95\'B0\'E6\'B7\'BB\'E5\'8A\'A0\'EF\'BC\'8C \'E6\'9C\'89\'E7\'82\'B9\'E9\'BA\'BB\'E7\'83\'A6 \par }} {\xe \v FSMDataLoader\:FSM_private.h} {\xe \v FSM_private.h\:FSMDataLoader} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef struct FSMDataLoader FSMDataLoader}} \par {\bkmkstart AAAAAAAAAO} {\bkmkend AAAAAAAAAO} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Deprecated:\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid \'E9\'A2\'84\'E8\'A3\'85\'E8\'BD\'BD\'E5\'99\'A8\'E5\'BC\'83\'E7\'94\'A8\par } }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSM_private.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/baseFSM/FSM_private.h} {\xe \v FSM_OOP/baseFSM/FSM_private.h} {\bkmkstart AAAAAAAAAA} {\bkmkend AAAAAAAAAA} Go to the documentation of this file.\par { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 \par 13 {\cf21 #ifndef __FSM_PRIVATE_H_}\par 14 {\cf21 #define __FSM_PRIVATE_H_}\par 15 \par 16 {\cf21 #include }\par 17 {\cf21 #include "FSM_protected.h"}\par 18 \par 19 {\cf17 typedef} {\cf17 struct }FSMHandler FSMHandler;\par 20 {\cf17 typedef} {\cf17 struct }FSM FSM;\par 21 {\cf17 typedef} {\cf17 struct }FSMSignals FSMSignals;\par 22 \par 23 {\cf20 /* -------------------------------------------------------------------------- */}\par 24 {\cf20 /* private\'E6\'95\'B0\'E6\'8D\'AE\'E7\'B1\'BB\'E5\'9E\'8B */}\par 25 {\cf20 /* -------------------------------------------------------------------------- */}\par 31 {\cf17 typedef} {\cf17 struct }FSMDataLoader\par 32 \{ \par 33 {\cf18 void} *shadowData;\par 34 {\cf18 int} isReady;\par 35 {\cf18 int} isOverflow;\par 36 {\cf18 size_t} size;\par 37 \}FSMDataLoader;\par 38 \par 39 \par 44 {\cf17 typedef} {\cf17 struct }FSMPrivateVars\par 45 \{\par 46 {\cf18 int} numState; \par 47 {\cf18 int} defaultState; \par 49 {\cf18 int} curState; \par 50 {\cf18 int} nextState; \par 51 {\cf18 int} index; \par 53 FSMHandler fcns; \par 54 \par 55 {\cf18 int} numChild;\par 56 FSM **childFSM;\par 57 \par 58 FSMDataLoader preloader; \par 60 \}FSMPrivateVars;\par 61 \par 62 FSMPrivateVars* newFMSPrivateVars({\cf18 int} numState, {\cf18 int} defaultState)\{\par 63 {\cf17 typedef} void (*StateFuncPtr)({\cf18 void} *); \par 64 {\cf17 typedef} void (*ChildFSMStepFuncPtr)(FSM **); \par 65 {\cf17 typedef} int (*TransitionFuncPtr)({\cf18 void} *, {\cf18 int} *);\par 66 {\cf17 typedef} int (*SelectNextStateFcnPtr)({\cf18 void} *, FSMSignals *);\par 67 \par 68 FSMPrivateVars *privateVars = calloc(1, {\cf17 sizeof}(FSMPrivateVars));\par 69 privateVars->numState = numState;\par 70 privateVars->defaultState = defaultState;\par 71 privateVars->curState = 0;\par 72 privateVars->nextState = 0;\par 73 privateVars->numChild = 0;\par 74 \par 75 privateVars->preloader.isReady = 0;\par 76 \par 77 privateVars->fcns.duringActionTable = calloc(numState, {\cf17 sizeof}(StateFuncPtr));\par 78 privateVars->fcns.enterActionTable = calloc(numState, {\cf17 sizeof}(StateFuncPtr));\par 79 privateVars->fcns.exitActionTable = calloc(numState, {\cf17 sizeof}(StateFuncPtr));\par 80 \par 81 privateVars->fcns.selectNextState = calloc(numState, {\cf17 sizeof}(SelectNextStateFcnPtr));\par 82 privateVars->fcns.transitionTable = calloc(numState * numState, {\cf17 sizeof}(TransitionFuncPtr));\par 83 privateVars->fcns.transitionGeneralAction = calloc(1, {\cf17 sizeof}(StateFuncPtr));\par 84 \par 85 privateVars->fcns.childFSMStepTable = calloc(numState * numState, {\cf17 sizeof}(ChildFSMStepFuncPtr));\par 86 \par 87 {\cf19 return} privateVars;\par 88 \par 89 \}\par 90 \par 91 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSM_OOP/baseFSM/FSM_protected.h File Reference\par \pard\plain {\tc\tcl2 \v FSM_OOP/baseFSM/FSM_protected.h} {\xe \v FSM_OOP/baseFSM/FSM_protected.h} {\bkmkstart AAAAAAAAAP} {\bkmkend AAAAAAAAAP} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84protected\'E5\'87\'BD\'E6\'95\'B0\'E5\'92\'8C\'E5\'8F\'98\'E9\'87\'8F\'EF\'BC\'8C\'E5\'9C\'A8\'E7\'BB\'A7\'E6\'89\'BF\'E7\'9A\'84\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'AD\'E5\'8F\'AF\'E4\'BD\'BF\'E7\'94\'A8\'EF\'BC\'8C\'E5\'9C\'A8\'E5\'A4\'96\'E7\'95\'8C\'E4\'B8\'8D\'E5\'8F\'AF\'E4\'BD\'BF\'E7\'94\'A8 }}\par { \pard\plain \s18\widctlpar\fs22\cgrid {\f2 #include "FSM_public.h"}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Data Structures\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid struct {\b FSMHandler}{ \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 }}\par} \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid struct {\b FSMSignals}{ \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'94\'A8\'E7\'9A\'84\'E4\'BF\'A1\'E5\'8F\'B7\'EF\'BC\'8Cprotected\'E5\'AD\'90\'E7\'B1\'BB\'E5\'8F\'AF\'E4\'BB\'A5\'E8\'AE\'BF\'E9\'97\'AE }}\par} \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid struct {\b FSMPureVtbl}{ \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'BA\'AF\'E8\'99\'9A\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E5\'BF\'85\'E9\'A1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'EF\'BC\'8C\'E7\'88\'B6\'E7\'B1\'BB\'E6\'9E\'84\'E9\'80\'A0\'E5\'87\'BD\'E6\'95\'B0\'E4\'B8\'8D\'E4\'BC\'9A\'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96 }}\par} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Macros\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid #define {\b Idle_Signal}\~ 0\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Typedefs\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef struct FSMHandler {\b FSMHandler}\par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 }{ }\par }\par} \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef struct FSMSignals {\b FSMSignals}{\bkmkstart AAAAAAAAAQ} {\bkmkend AAAAAAAAAQ} \par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E7\'94\'A8\'E7\'9A\'84\'E4\'BF\'A1\'E5\'8F\'B7\'EF\'BC\'8Cprotected\'E5\'AD\'90\'E7\'B1\'BB\'E5\'8F\'AF\'E4\'BB\'A5\'E8\'AE\'BF\'E9\'97\'AE }{ }\par }\par} \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef struct FSMPureVtbl {\b FSMPureVtbl}{\bkmkstart AAAAAAAAAR} {\bkmkend AAAAAAAAAR} \par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'BA\'AF\'E8\'99\'9A\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E5\'BF\'85\'E9\'A1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'EF\'BC\'8C\'E7\'88\'B6\'E7\'B1\'BB\'E6\'9E\'84\'E9\'80\'A0\'E5\'87\'BD\'E6\'95\'B0\'E4\'B8\'8D\'E4\'BC\'9A\'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96 }{ }\par }\par} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Functions\par \pard\plain { \pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b stepBaseFSM} (FSM *pFSM)\par { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'BF\'90\'E8\'A1\'8C\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'EF\'BC\'8C\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84\'E6\'A0\'B8\'E5\'BF\'83\'E5\'87\'BD\'E6\'95\'B0 }{ }\par }\par} } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84protected\'E5\'87\'BD\'E6\'95\'B0\'E5\'92\'8C\'E5\'8F\'98\'E9\'87\'8F\'EF\'BC\'8C\'E5\'9C\'A8\'E7\'BB\'A7\'E6\'89\'BF\'E7\'9A\'84\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'AD\'E5\'8F\'AF\'E4\'BD\'BF\'E7\'94\'A8\'EF\'BC\'8C\'E5\'9C\'A8\'E5\'A4\'96\'E7\'95\'8C\'E4\'B8\'8D\'E5\'8F\'AF\'E4\'BD\'BF\'E7\'94\'A8 \par }{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Author\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 \'E5\'A4\'A9\'E7\'A5\'9E ({\f2 dalaoshi@stu.xjtu.edu.cn}) \par }}{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Version\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 2.1 \par }}{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Date\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 2024-05-07\par }}{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Copyright\par}\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 \'E5\'A4\'A9\'E7\'A5\'9E\'E5\'88\'9B\'E6\'84\'8F\'E6\'97\'A0\'E9\'99\'90\'E5\'85\'AC\'E5\'8F\'B8 2024 \par }}}} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Macro Definition Documentation\par \pard\plain {\xe \v Idle_Signal\:FSM_protected.h} {\xe \v FSM_protected.h\:Idle_Signal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b #define Idle_Signal\~ 0}} \par {\bkmkstart AAAAAAAAAS} {\bkmkend AAAAAAAAAS} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'95\'A5\'E6\'84\'8F\'E6\'80\'9D\'EF\'BC\'9F \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Typedef Documentation\par \pard\plain {\xe \v FSMHandler\:FSM_protected.h} {\xe \v FSM_protected.h\:FSMHandler} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef struct FSMHandler FSMHandler}} \par {\bkmkstart AAAAAAAAAT} {\bkmkend AAAAAAAAAT} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E7\'8A\'B6\'E6\'80\'81\'E5\'A4\'84\'E7\'90\'86\'E5\'87\'BD\'E6\'95\'B0\'E9\'9B\'86\'E5\'90\'88\'EF\'BC\'8C\'E5\'85\'A8\'E9\'83\'A8\'E9\'9C\'80\'E8\'A6\'81\'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'A1\'AB\'E5\'85\'85\'E5\'86\'85\'E5\'AE\'B9 }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'BF\'99\'E4\'B8\'AA\'E7\'BB\'93\'E6\'9E\'84\'E4\'BD\'93\'E6\'9A\'B4\'E9\'9C\'B2\'E7\'BB\'99protect\'E6\'96\'87\'E4\'BB\'B6\'EF\'BC\'8C\'E6\'96\'B9\'E4\'BE\'BF\'E5\'9C\'A8\'E5\'AD\'90\'E7\'B1\'BB\'E4\'B8\'AD\'E6\'B7\'BB\'E5\'8A\'A0\'E5\'87\'BD\'E6\'95\'B0\'E3\'80\'82\'E4\'B8\'8D\'E7\'84\'B6\'E6\'B7\'BB\'E5\'8A\'A0\'E5\'87\'BD\'E6\'95\'B0\'E5\'BE\'97\'E5\'86\'8D\'E5\'86\'99\'E4\'B8\'AA\'E5\'87\'BD\'E6\'95\'B0\'E6\'B7\'BB\'E5\'8A\'A0\'EF\'BC\'8C \'E6\'9C\'89\'E7\'82\'B9\'E9\'BA\'BB\'E7\'83\'A6 \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Function Documentation\par \pard\plain {\xe \v stepBaseFSM\:FSM_protected.h} {\xe \v FSM_protected.h\:stepBaseFSM} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void stepBaseFSM (FSM * {\i pFSM})}} \par {\bkmkstart AAAAAAAAAU} {\bkmkend AAAAAAAAAU} { \pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E8\'BF\'90\'E8\'A1\'8C\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'EF\'BC\'8C\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'A1\'86\'E6\'9E\'B6\'E7\'9A\'84\'E6\'A0\'B8\'E5\'BF\'83\'E5\'87\'BD\'E6\'95\'B0 }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \'E5\'85\'B1\'E5\'88\'86\'E4\'B8\'BA\'E4\'B8\'89\'E9\'83\'A8\'E9\'A6\'96\'E5\'85\'88\'E5\'88\'A4\'E6\'96\'AD\'E6\'98\'AF\'E5\'90\'A6\'E6\'9C\'89\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E5\'88\'87\'E6\'8D\'A2\'EF\'BC\'8C {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters\par} \pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i pFSM} \cell }{\'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E5\'9F\'BA\'E7\'B1\'BB\'E6\'8C\'87\'E9\'92\'88 \cell } {\row } } }} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSM_protected.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/baseFSM/FSM_protected.h} {\xe \v FSM_OOP/baseFSM/FSM_protected.h} {\bkmkstart AAAAAAAAAB} {\bkmkend AAAAAAAAAB} Go to the documentation of this file.\par { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 \par 12 {\cf21 #ifndef __FSM_PROTECTED_H_}\par 13 {\cf21 #define __FSM_PROTECTED_H_}\par 14 \par 15 {\cf21 #include "FSM_public.h"}\par 16 \par 17 {\cf20 // #define DSP28377}\par 18 {\cf21 #ifdef DSP28377}\par 19 {\cf21 #define NDEBUG}\par 20 {\cf21 #else}\par 21 {\cf21 #define FSM_LOG_ON}\par 22 {\cf21 #endif}\par 23 \par 24 \par 25 {\cf21 #ifdef FSM_LOG_ON}\par 26 {\cf21 #define FSM_LOG(...) printf(__VA_ARGS__)}\par 27 {\cf21 #else}\par 28 {\cf21 #define FSM_LOG(...) ((void)0)}\par 29 {\cf21 #endif}\par 30 \par 31 {\cf21 #define during during}\par 32 {\cf21 #define enter enter}\par 33 {\cf21 #define exit exit}\par 34 \par 35 {\cf21 #define selectNextStateFcn(curstate) curstate##_##selectNextState}\par 36 {\cf21 #define transitionHandler(curstate, nextstate) curstate##2##nextstate##Handler}\par 37 {\cf21 #define actionFcn(action, curstate) curstate##_##action##Action}\par 38 {\cf21 #define index(curstate, nextstate) (curstate*Count_State + nextstate)}\par 39 \par 40 {\cf21 #define addSelectNextStateFcn(curstate) fcns->selectNextState[curstate] = (Avoid_WARNING_SelectNextState)selectNextStateFcn(curstate)}\par 41 {\cf21 #define addStateActionFcn(type, state) fcns->type##ActionTable[state] = (Avoid_WARNING_State_Fcns)actionFcn(type, state)}\par 42 {\cf21 #define addTransitionHandler(curstate, nextstate) fcns->transitionTable[index(curstate, nextstate)] = (Avoid_WARNING_Transition_Handler)transitionHandler(curstate, nextstate)}\par 43 \par 44 \par 45 \par 46 {\cf17 typedef} {\cf17 struct }FSMHandler FSMHandler;\par 47 {\cf17 typedef} {\cf17 struct }FSM FSM;\par 48 {\cf17 typedef} {\cf17 struct }FSMSignals FSMSignals;\par 49 {\cf17 typedef} {\cf17 struct }FSMPrivateVars FSMPrivateVars;\par 50 \par 51 {\cf17 typedef} void (*Avoid_WARNING_State_Fcns)({\cf18 void} *data, FSM **childFSM);\par 52 {\cf17 typedef} void (*Avoid_WARNING_General_Handlers)({\cf18 void} *data);\par 53 {\cf17 typedef} void (*Avoid_WARNING_Transition_Handler)({\cf18 void} *data);\par 54 {\cf17 typedef} void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFSM);\par 55 {\cf17 typedef} void (*Avoid_WARNING_ResetSignals_Fcns)(FSMSignals* signals, {\cf18 void} *);\par 56 {\cf17 typedef} void (*Avoid_WARNING_loadData_Fcns)({\cf18 void}*);\par 57 {\cf17 typedef} int (*Avoid_WARNING_SelectNextState)({\cf18 void} *data, FSMSignals* signals);\par 58 {\cf17 typedef} void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);\par 59 \par 60 \par 67 {\cf17 typedef} {\cf17 struct }FSMHandler\{\par 68 int (**selectNextState)({\cf18 void} *data, FSMSignals* signals); \par 70 void (**transitionTable)({\cf18 void} *data);\par 71 void (*transitionGeneralAction)({\cf18 void} *data);\par 72 \par 73 void (**enterActionTable)({\cf18 void} *data, FSM **cFSM);\par 74 void (**duringActionTable)({\cf18 void} *data, FSM **cFSM);\par 75 void (**exitActionTable)({\cf18 void} *data, FSM **cFSM);\par 76 \par 77 void (**childFSMStepTable)(FSM **cFSM);\par 78 \}FSMHandler;\par 79 \par 84 {\cf17 typedef} {\cf17 struct }FSMSignals\par 85 \{\par 86 Uint16 external; \par 87 Uint16 lastTriggeredSignal; \par 88 \}FSMSignals;\par 89 {\cf21 #define Idle_Signal 0 }\par 91 {\cf20 /* -------------------------------------------------------------------------- */}\par 92 {\cf20 /* \'E7\'BA\'AF\'E8\'99\'9A\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E5\'BF\'85\'E9\'A1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'EF\'BC\'8C\'E7\'88\'B6\'E7\'B1\'BB\'E6\'9E\'84\'E9\'80\'A0\'E5\'87\'BD\'E6\'95\'B0\'E4\'B8\'8D\'E4\'BC\'9A\'E5\'88\'9D\'E5\'A7\'8B\'E5\'8C\'96 */}\par 93 {\cf20 /* -------------------------------------------------------------------------- */}\par 94 \par 99 {\cf17 typedef} {\cf17 struct }FSMPureVtbl \{\par 100 {\cf20 // \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E6\'8E\'A7\'E5\'88\'B6}\par 101 void (*setupHandler)(FSMHandler *fcns); \par 103 void (*initData)(FSM *pFSM); \par 104 void (*loadExternalData)({\cf18 void} *extData); \par 106 void (*initDataLoader)(FSM *pFSM); \par 108 void (*initSignals)(FSM *pFSM); \par 109 void (*resetSignals)(FSMSignals *signalRegs, {\cf18 void} *data); \par 110 \}FSMPureVtbl;\par 111 \par 112 \par 113 \par 114 {\cf20 /* -------------------------------------------------------------------------- */}\par 115 {\cf20 /* \'E5\'9F\'BA\'E7\'B1\'BB\'E5\'AE\'9A\'E4\'B9\'89\'EF\'BC\'8C\'E7\'BA\'AF\'E8\'99\'9A\'E7\'B1\'BB */}\par 116 {\cf20 /* -------------------------------------------------------------------------- */}\par 117 {\cf17 typedef} {\cf17 struct }FSM\par 118 \{\par 119 {\cf20 // public functions}\par 120 void (*step)(FSM *pFSM); {\cf20 // \'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'E5\'8F\'AF\'E4\'BB\'A5\'E6\'B7\'BB\'E5\'8A\'A0\'E4\'B8\'80\'E4\'BA\'9B\'E6\'89\'93\'E5\'8D\'B0\'E4\'BF\'A1\'E6\'81\'AF}\par 121 void (*reset)(FSM *pFSM); {\cf20 // \'E5\'AD\'90\'E7\'B1\'BB\'E9\'87\'8D\'E6\'96\'B0\'E5\'AE\'9E\'E7\'8E\'B0\'E5\'8F\'AF\'E4\'BB\'A5\'E6\'B7\'BB\'E5\'8A\'A0\'E4\'B8\'80\'E4\'BA\'9B\'E6\'89\'93\'E5\'8D\'B0\'E4\'BF\'A1\'E6\'81\'AF}\par 122 \par 123 {\cf20 // protected}\par 124 FSMPureVtbl pureVtbl;\par 125 \par 126 {\cf18 void} *data;\par 127 FSMSignals signals;\par 128 {\cf20 // private}\par 129 FSMPrivateVars* privateVars; \par 130 \} FSM;\par 131 \par 132 \par 133 {\cf20 /* -------------------------------------------------------------------------- */}\par 134 {\cf20 /* protected\'E5\'87\'BD\'E6\'95\'B0\'EF\'BC\'8C\'E5\'AD\'90\'E7\'B1\'BB\'E8\'83\'BD\'E7\'94\'A8\'E5\'A4\'96\'E7\'95\'8C\'E7\'94\'A8\'E4\'B8\'8D\'E4\'BA\'86 */}\par 135 {\cf20 /* -------------------------------------------------------------------------- */}\par 136 {\cf18 void} stepBaseFSM(FSM *pFSM);\par 137 {\cf18 void} constructFSM(FSM* pFSM);\par 138 FSM* newBaseFSM({\cf18 int} numState, {\cf18 int} defaultState);\par 139 {\cf18 void} resetBaseFSM(FSM *pFSM);\par 140 \par 141 \par 142 {\cf20 /* -------------------------------------------------------------------------- */}\par 143 {\cf20 /* \'E5\'86\'85\'E8\'81\'94\'E5\'87\'BD\'E6\'95\'B0 */}\par 144 {\cf20 /* -------------------------------------------------------------------------- */}\par 145 {\cf17 static} {\cf17 inline} {\cf18 void} clearSignal(FSMSignals *signals, Uint16 signalFlag)\{\par 146 signals->external &= ~(1 << signalFlag);\par 147 \}\par 148 {\cf17 static} {\cf17 inline} Uint16 getSignal(FSMSignals *signals, Uint16 signalFlag)\{\par 149 {\cf19 return} (signals->external >> signalFlag) & 1;\par 150 \}\par 151 {\cf17 static} {\cf17 inline} {\cf18 void} clearAllSignals(FSMSignals *signals)\{\par 152 signals->external = 0;\par 153 \}\par 154 \par 155 \par 156 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid FSM_public.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/baseFSM/FSM_public.h} {\xe \v FSM_OOP/baseFSM/FSM_public.h} {\bkmkstart AAAAAAAAAC} {\bkmkend AAAAAAAAAC} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf20 /*}\par 2 {\cf20 * @Author: godcreator02 qq974980621@gmail.com}\par 3 {\cf20 * @Date: 2024-04-20 18:52:14}\par 4 {\cf20 * @LastEditors: godcreator02 qq974980621@gmail.com}\par 5 {\cf20 * @LastEditTime: 2024-04-23 21:51:55}\par 6 {\cf20 * @FilePath: \\vscode\\FSM_OOP\\baseFSM\\FSM_public.h}\par 7 {\cf20 * @Description: \'E8\'BF\'99\'E6\'98\'AF\'E9\'BB\'98\'E8\'AE\'A4\'E8\'AE\'BE\'E7\'BD\'AE,\'E8\'AF\'B7\'E8\'AE\'BE\'E7\'BD\'AE`customMade`, \'E6\'89\'93\'E5\'BC\'80koroFileHeader\'E6\'9F\'A5\'E7\'9C\'8B\'E9\'85\'8D\'E7\'BD\'AE \'E8\'BF\'9B\'E8\'A1\'8C\'E8\'AE\'BE\'E7\'BD\'AE: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE}\par 8 {\cf20 */}\par 9 {\cf21 #ifndef __FSM_PUBLIC_H_}\par 10 {\cf21 #define __FSM_PUBLIC_H_}\par 11 \par 12 {\cf17 typedef} {\cf18 unsigned} {\cf18 int} Uint16;\par 13 {\cf17 typedef} {\cf18 unsigned} {\cf18 long} Uint32;\par 14 \par 15 {\cf21 #define BASE_FSM(ptr) ((FSM *)(ptr))}\par 16 {\cf21 #define BASE_PTR (FSM *)}\par 17 \par 18 {\cf17 typedef} {\cf17 struct }FSM FSM;\par 19 \par 20 {\cf20 /* -------------------------------- \'E9\'81\'BF\'E5\'85\'8D\'E8\'AD\'A6\'E5\'91\'8A\'E7\'9A\'84\'E5\'87\'BD\'E6\'95\'B0\'E5\'AE\'9A\'E4\'B9\'89 ------------------------------- */}\par 21 {\cf21 #define Step(pFSM) _stepFSM((FSM *)pFSM)}\par 22 {\cf21 #define PreloaderGetReady(pFSM) _preloaderGetReady((FSM *)pFSM);}\par 23 {\cf21 #define GetPreloaderOverFlag(pFSM) _getPreloaderOverFlag((FSM *)pFSM)}\par 24 {\cf21 #define ClearPreloaderOverFlag(pFSM) _clearPreloaderOverFlag((FSM *)pFSM)}\par 25 {\cf21 #define GetData(pFSM) _getData((FSM*)pFSM)}\par 26 {\cf21 #define SetSignal(pFSM, signal) _setSignal((FSM*)pFSM, signal)}\par 27 \par 28 \par 29 \par 30 {\cf18 void} _stepFSM(FSM *pFSM);\par 31 {\cf20 /* --------------------------------- \'E7\'8A\'B6\'E6\'80\'81\'E6\'9C\'BA\'E4\'BF\'A1\'E6\'81\'AF\'E8\'8E\'B7\'E5\'8F\'96 -------------------------------- */}\par 32 {\cf18 int} getFSMCurState(FSM *pFSM);\par 33 {\cf18 int} getFSMNextState(FSM *pFSM);\par 34 {\cf18 void} setChildNum(FSM *pFSM, {\cf18 int} num);\par 35 {\cf18 void} registerChildFSM(FSM *parent, FSM *child, {\cf18 int} index);\par 36 \par 37 {\cf20 /* ------------------------------ Data\'E5\'92\'8CSignals ------------------------------ */}\par 38 {\cf17 const} {\cf18 void} *_getData(FSM* pFSM);\par 39 {\cf18 void} _setSignal(FSM *pFSM, Uint16 signalFlag);\par 40 \par 41 {\cf20 /* ---------------------------------- \'E9\'A2\'84\'E8\'A3\'85\'E8\'BD\'BD\'E5\'99\'A8 ---------------------------------- */}\par 42 {\cf18 void} *_preloadIn(FSM *pFSM);\par 43 {\cf18 void} _preloaderGetReady(FSM *pFSM);\par 44 {\cf18 int} _getPreloaderOverFlag(FSM *pFSM);\par 45 {\cf18 void} _clearPreloaderOverFlag(FSM *pFSM);\par 46 \par 47 \par 48 \par 49 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid childFSM.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/childtest/childFSM.h} {\xe \v FSM_OOP/childtest/childFSM.h} {\bkmkstart AAAAAAAAAD} {\bkmkend AAAAAAAAAD} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf21 #ifndef __CHILD_FSM_H_}\par 2 {\cf21 #define __CHILD_FSM_H_}\par 3 \par 4 {\cf21 #define ChildFSM_Input(pFSM) ((ChildFSMData *)_preloadIn((FSM *)pFSM))}\par 5 \par 6 {\cf17 typedef} {\cf17 struct }_childFSMData\par 7 \{\par 8 {\cf18 int} arrindex;\par 9 \}ChildFSMData;\par 10 \par 11 {\cf17 typedef} {\cf17 struct }_ChildFSM ChildFSM;\par 12 \par 13 ChildFSM *createChildFSM();\par 14 \par 15 \par 16 \par 17 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid childFSM_private.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/childtest/childFSM_private.h} {\xe \v FSM_OOP/childtest/childFSM_private.h} {\bkmkstart AAAAAAAAAE} {\bkmkend AAAAAAAAAE} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf21 #ifndef __CHILD_PRIVATE_FSM_H_}\par 2 {\cf21 #define __CHILD_PRIVATE_FSM_H_}\par 3 \par 4 {\cf21 #include "FSM_protected.h"}\par 5 {\cf21 #include "childFSM.h"}\par 6 {\cf21 #include }\par 7 \par 8 \par 9 {\cf20 /* }\par 10 {\cf20 \'E7\'BB\'A7\'E6\'89\'BF\'E5\'9F\'BA\'E7\'B1\'BB}\par 11 {\cf20 */}\par 12 {\cf17 typedef} {\cf17 struct }_ChildFSM\par 13 \{ \par 14 {\cf20 // \'E7\'BB\'A7\'E6\'89\'BF\'E7\'88\'B6\'E7\'B1\'BB}\par 15 FSM base;\par 16 \}ChildFSM;\par 17 \par 18 {\cf20 /* }\par 19 {\cf20 \'E7\'8A\'B6\'E6\'80\'81\'E5\'92\'8C\'E5\'AF\'B9\'E5\'BA\'94\'E7\'9A\'84 action, exit, during \'E5\'87\'BD\'E6\'95\'B0}\par 20 {\cf20 */}\par 21 \par 22 {\cf17 typedef} {\cf17 enum} _State\par 23 \{\par 24 Idle,\par 25 D,\par 26 E,\par 27 \par 28 Count_State,\par 29 \} State;\par 30 {\cf21 #define DEFAULT_STATE E}\par 31 \par 32 {\cf18 void} actionFcn(enter, D)()\par 33 \{\par 34 FSM_LOG({\cf22 " enterD "});\par 35 \}\par 36 {\cf18 void} actionFcn(during, D)()\par 37 \{\par 38 FSM_LOG({\cf22 " duringD "});\par 39 \}\par 40 {\cf18 void} actionFcn(exit, D)()\par 41 \{\par 42 FSM_LOG({\cf22 " exitD "});\par 43 \}\par 44 \par 45 {\cf18 void} actionFcn(enter, E)()\par 46 \{\par 47 FSM_LOG({\cf22 " enterE "});\par 48 \}\par 49 {\cf18 void} actionFcn(during, E)()\par 50 \{\par 51 FSM_LOG({\cf22 " duringE "});\par 52 \}\par 53 {\cf18 void} actionFcn(exit, E)()\par 54 \{\par 55 FSM_LOG({\cf22 " exitE "});\par 56 \}\par 57 \par 58 {\cf20 /* }\par 59 {\cf20 \'E4\'BA\'8B\'E4\'BB\'B6\'E5\'92\'8C\'E5\'AF\'B9\'E5\'BA\'94\'E7\'9A\'84\'E8\'BD\'AC\'E7\'A7\'BB\'E5\'87\'BD\'E6\'95\'B0}\par 60 {\cf20 */}\par 61 \par 62 {\cf17 typedef} {\cf17 enum} _Event\{\par 63 Idle_Event,\par 64 Idle2D,\par 65 Idle2E,\par 66 D2E,\par 67 E2D,\par 68 \par 69 Count_Event,\par 70 \}Event;\par 71 \par 72 \par 73 State transitionHandler(Idle2D)()\par 74 \{\par 75 FSM_LOG({\cf22 " Idle2D "});\par 76 {\cf19 return} D;\par 77 \}\par 78 \par 79 State transitionHandler(Idle2E)()\par 80 \{\par 81 FSM_LOG({\cf22 " Idle2E "});\par 82 {\cf19 return} E;\par 83 \}\par 84 \par 85 State transitionHandler(D2E)()\par 86 \{\par 87 FSM_LOG({\cf22 " D2E "});\par 88 {\cf19 return} E;\par 89 \}\par 90 \par 91 State transitionHandler(E2D)()\par 92 \{\par 93 FSM_LOG({\cf22 " E2D "});\par 94 {\cf19 return} D;\par 95 \}\par 96 \par 97 \par 98 \par 99 \par 100 {\cf20 /* }\par 101 {\cf20 \'E7\'94\'A8\'E6\'88\'B7\'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E4\'BA\'8B\'E4\'BB\'B6\'E9\'80\'89\'E6\'8B\'A9\'E9\'80\'BB\'E8\'BE\'91\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94begin }\par 102 {\cf20 */}\par 103 {\cf17 const} {\cf17 static} {\cf18 char} *stateStr[] = \{\par 104 {\cf22 "Idle"},\par 105 {\cf22 "D"},\par 106 {\cf22 "E"},\par 107 \};\par 108 {\cf17 const} {\cf17 static} {\cf18 char} *eventStr[] = \{\par 109 {\cf22 "Idle"},\par 110 {\cf22 "Idle2D"},\par 111 {\cf22 "Idle2E"},\par 112 {\cf22 "D2E"},\par 113 {\cf22 "E2D"},\par 114 \};\par 115 {\cf17 static} {\cf18 void} printFSM(ChildFSM* pFSM)\{\par 116 FSM_LOG({\cf22 " \\t\\tChildFSM: "});\par 117 FSM_LOG({\cf22 "\'E5\'BD\'93\'E5\'89\'8D\'E7\'8A\'B6\'E6\'80\'81:%s, \'E5\'BD\'93\'E5\'89\'8D\'E4\'BA\'8B\'E4\'BB\'B6:%s, \'E5\'8A\'A8\'E4\'BD\'9C\'EF\'BC\'9A"}, stateStr[getFSMCurState((FSM *)pFSM)], eventStr[getFSMCurEvent((FSM *)pFSM)]);\par 118 \}\par 119 \par 120 \par 121 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid parentFSM.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/childtest/parentFSM.h} {\xe \v FSM_OOP/childtest/parentFSM.h} {\bkmkstart AAAAAAAAAF} {\bkmkend AAAAAAAAAF} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf21 #ifndef __PARENT_FSM_H_}\par 2 {\cf21 #define __PARENT_FSM_H_}\par 3 \par 4 {\cf21 #define ParentFSM_Input(pFSM) ((ParentFSMData *)_preloadIn((FSM *)pFSM))}\par 5 \par 6 {\cf17 typedef} {\cf17 struct }_parentFSMData\par 7 \{\par 8 {\cf18 int} arrindex;\par 9 \}ParentFSMData;\par 10 {\cf17 typedef} {\cf17 struct }_ParentFSM ParentFSM;\par 11 \par 12 ParentFSM *createParentFSM();\par 13 \par 14 \par 15 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid keyFSM.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/keytest/keyFSM.h} {\xe \v FSM_OOP/keytest/keyFSM.h} {\bkmkstart AAAAAAAAAG} {\bkmkend AAAAAAAAAG} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf21 #ifndef __KEY_FSM_H_}\par 2 {\cf21 #define __KEY_FSM_H_}\par 3 \par 4 \par 5 {\cf21 #define KeyFSM_Input(pFSM) (KeyIn *)_preloadIn((FSM *)pFSM)}\par 6 \par 7 {\cf17 typedef} {\cf17 enum} _keyIn\{\par 8 pUp,\par 9 pDown,\par 10 \}KeyIn;\par 11 \par 12 \par 13 {\cf17 typedef} {\cf17 enum} _keyOut\{\par 14 Idle,\par 15 Down,\par 16 Hold,\par 17 Down_2times,\par 18 Down_3times,\par 19 \}KeyOut;\par 20 \par 21 {\cf17 const} {\cf17 static} {\cf18 char} *keyStr[] = \par 22 \{\par 23 {\cf22 "Idle"},\par 24 {\cf22 "Down"},\par 25 {\cf22 "Hold"},\par 26 {\cf22 "Down_2times"},\par 27 {\cf22 "Down_3times"},\par 28 \};\par 29 \par 30 {\cf17 typedef} {\cf17 struct }_keyFSMExternalData\par 31 \{\par 32 KeyIn in;\par 33 \}KeyFSMExternalData;\par 34 \par 35 {\cf17 typedef} {\cf17 struct }_keyFSMInternalData\par 36 \{\par 37 {\cf18 int} countDelay;\par 38 {\cf18 int} countMultiDown;\par 39 KeyOut out;\par 40 \par 41 \}KeyFSMInternalData;\par 42 \par 43 {\cf17 typedef} {\cf17 struct }_keyFSMData\par 44 \{\par 45 KeyFSMExternalData external;\par 46 KeyFSMInternalData internal;\par 47 \}KeyFSMData;\par 48 \par 49 {\cf17 typedef} {\cf17 struct }_KeyFSM KeyFSM;\par 50 \par 51 KeyFSM *createKeyFSM();\par 52 \par 53 \par 54 \par 55 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid keyFSM_private.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/keytest/keyFSM_private.h} {\xe \v FSM_OOP/keytest/keyFSM_private.h} {\bkmkstart AAAAAAAAAH} {\bkmkend AAAAAAAAAH} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf21 #ifndef __KEY_PRIVATE_FSM_H_}\par 2 {\cf21 #define __KEY_PRIVATE_FSM_H_}\par 3 \par 4 {\cf21 #include "FSM_protected.h"}\par 5 {\cf21 #include "keyFSM.h"}\par 6 {\cf21 #include }\par 7 {\cf21 #include }\par 8 \par 9 {\cf17 extern} KeyIn keystat;\par 10 \par 11 \par 12 {\cf20 /* }\par 13 {\cf20 \'E7\'BB\'A7\'E6\'89\'BF\'E5\'9F\'BA\'E7\'B1\'BB}\par 14 {\cf20 */}\par 15 {\cf17 typedef} {\cf17 struct }_KeyFSM\par 16 \{ \par 17 {\cf20 // \'E7\'BB\'A7\'E6\'89\'BF\'E7\'88\'B6\'E7\'B1\'BB}\par 18 FSM base;\par 19 \}KeyFSM;\par 20 \par 21 {\cf20 /* }\par 22 {\cf20 \'E7\'8A\'B6\'E6\'80\'81\'E5\'92\'8C\'E5\'AF\'B9\'E5\'BA\'94\'E7\'9A\'84 action, exit, during \'E5\'87\'BD\'E6\'95\'B0}\par 23 {\cf20 */}\par 24 \par 25 {\cf17 typedef} {\cf17 enum} _State\par 26 \{\par 27 Idle_State,\par 28 Waiting,\par 29 DownDebouncing,\par 30 Downing,\par 31 Holding,\par 32 HoldUpDebouncing,\par 33 UpDebouncing,\par 34 MultiDownWaiting,\par 35 MultiDowning,\par 36 MultiDownDebouncing,\par 37 \par 38 Count_State,\par 39 \} State;\par 40 {\cf21 #define DEFAULT_STATE Waiting}\par 41 \par 42 {\cf20 /* -------------------------------------------------------------------------- */}\par 43 {\cf20 /* \'E4\'B8\'8B\'E4\'B8\'80\'E4\'B8\'AA\'E7\'8A\'B6\'E6\'80\'81\'E9\'80\'89\'E6\'8B\'A9\'E5\'87\'BD\'E6\'95\'B0 */}\par 44 {\cf20 /* -------------------------------------------------------------------------- */}\par 45 {\cf17 static} State selectNextStateFcn(Waiting)(KeyFSMData *data)\{\par 46 \par 47 {\cf19 if}(data->external.in == Down)\{\par 48 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'8C\'89\'E4\'B8\'8B "});\par 49 {\cf19 return} DownDebouncing;\par 50 \}\par 51 {\cf19 return} Idle_State;\par 52 \}\par 53 \par 54 {\cf17 static} State selectNextStateFcn(DownDebouncing)(KeyFSMData *data)\{\par 55 {\cf19 if}(data->external.in == pUp)\{\par 56 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'9D\'BE\'E5\'BC\'80 "});\par 57 {\cf19 return} Waiting;\par 58 \}\par 59 \par 60 {\cf19 else} {\cf19 if}(data->internal.countDelay == 5)\{\par 61 {\cf19 return} Downing;\par 62 \}\par 63 {\cf19 return} Idle_State;\par 64 \}\par 65 \par 66 {\cf17 static} State selectNextStateFcn(Downing)(KeyFSMData *data)\{\par 67 {\cf19 if}(data->external.in == pUp)\{\par 68 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'9D\'BE\'E5\'BC\'80 "});\par 69 {\cf19 return} UpDebouncing;\par 70 \}\par 71 {\cf19 else} {\cf19 if}(data->internal.countDelay == 10)\{\par 72 {\cf19 return} Holding;\par 73 \}\par 74 {\cf19 return} Idle_State;\par 75 \}\par 76 \par 77 {\cf17 static} State selectNextStateFcn(Holding)(KeyFSMData *data)\{\par 78 {\cf19 if}(data->external.in == pUp)\{\par 79 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'9D\'BE\'E5\'BC\'80 "});\par 80 {\cf19 return} HoldUpDebouncing;\par 81 \}\par 82 {\cf19 return} Idle_State;\par 83 \}\par 84 \par 85 {\cf17 static} State selectNextStateFcn(HoldUpDebouncing)(KeyFSMData *data)\{\par 86 {\cf19 if}(data->external.in == Down)\{\par 87 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'8C\'89\'E4\'B8\'8B "});\par 88 {\cf19 return} Holding;\par 89 \}\par 90 {\cf19 else} {\cf19 if}(data->internal.countDelay == 5)\{\par 91 {\cf19 return} Waiting;\par 92 \}\par 93 {\cf19 return} Idle_State;\par 94 \}\par 95 \par 96 {\cf17 static} State selectNextStateFcn(UpDebouncing)(KeyFSMData *data)\{\par 97 {\cf19 if}(data->external.in == Down)\{\par 98 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'8C\'89\'E4\'B8\'8B "});\par 99 {\cf19 if}(data->internal.countMultiDown)\{\par 100 {\cf19 return} MultiDowning;\par 101 \}\par 102 {\cf19 else}\{\par 103 {\cf19 return} Downing;\par 104 \}\par 105 \}\par 106 {\cf19 else} {\cf19 if}(data->internal.countDelay == 5)\{\par 107 {\cf19 return} MultiDownWaiting;\par 108 \}\par 109 \par 110 {\cf19 return} Idle_State;\par 111 \}\par 112 \par 113 {\cf17 static} State selectNextStateFcn(MultiDownWaiting)(KeyFSMData *data)\{\par 114 {\cf19 if}(data->external.in == Down)\{\par 115 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'8C\'89\'E4\'B8\'8B "});\par 116 {\cf19 return} MultiDownDebouncing;\par 117 \}\par 118 {\cf19 else} {\cf19 if}(data->internal.countDelay == 5)\{\par 119 {\cf19 return} Waiting;\par 120 \}\par 121 {\cf19 return} Idle_State;\par 122 \}\par 123 \par 124 {\cf17 static} State selectNextStateFcn(MultiDowning)(KeyFSMData *data)\{\par 125 {\cf19 if}(data->external.in == pUp)\{\par 126 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'9D\'BE\'E5\'BC\'80 "});\par 127 {\cf19 return} UpDebouncing;\par 128 \}\par 129 {\cf19 return} Idle_State;\par 130 \}\par 131 \par 132 {\cf17 static} State selectNextStateFcn(MultiDownDebouncing)(KeyFSMData *data)\{\par 133 {\cf19 if}(data->external.in == pUp)\{\par 134 FSM_LOG({\cf22 " \'E7\'89\'A9\'E7\'90\'86\'E6\'8C\'89\'E9\'94\'AE\'E6\'9D\'BE\'E5\'BC\'80 "});\par 135 {\cf19 return} MultiDownWaiting;\par 136 \}\par 137 {\cf19 else} {\cf19 if}(data->internal.countDelay == 5)\{\par 138 {\cf19 return} MultiDowning;\par 139 \}\par 140 {\cf19 return} Idle_State;\par 141 \}\par 142 \par 143 {\cf20 /* -------------------------------------------------------------------------- */}\par 144 {\cf20 /* \'E5\'AF\'B9\'E5\'BA\'94\'E7\'9A\'84 action, exit, during \'E5\'87\'BD\'E6\'95\'B0 */}\par 145 {\cf20 /* -------------------------------------------------------------------------- */}\par 146 {\cf17 static} {\cf18 void} actionFcn(enter, Waiting)(KeyFSMData* data)\{\par 147 data->internal.out = Idle;\par 148 data->internal.countDelay = 0;\par 149 data->internal.countMultiDown = 0;\par 150 \}\par 151 \par 152 \par 153 {\cf17 static} {\cf18 void} actionFcn(during, DownDebouncing)(KeyFSMData* data)\par 154 \{\par 155 data->internal.countDelay++;\par 156 FSM_LOG({\cf22 " during\'E5\'BC\'80\'E5\'90\'AF\'E6\'B6\'88\'E6\'8A\'96 "});\par 157 \}\par 158 \par 159 {\cf17 static} {\cf18 void} actionFcn(during, Downing)(KeyFSMData* data)\par 160 \{\par 161 \par 162 data->internal.countDelay++;\par 163 data->internal.out = Idle;\par 164 \}\par 165 \par 166 \par 167 \par 168 {\cf17 static} {\cf18 void} actionFcn(during, UpDebouncing)(KeyFSMData* data)\{\par 169 \par 170 data->internal.countDelay++;\par 171 FSM_LOG({\cf22 " during\'E6\'9D\'BE\'E5\'BC\'80\'E6\'B6\'88\'E6\'8A\'96 "});\par 172 \}\par 173 \par 174 \par 175 {\cf17 static} {\cf18 void} actionFcn(during, Holding)(KeyFSMData* data)\{\par 176 data->internal.out = Idle;\par 177 data->internal.countDelay++;\par 178 {\cf19 if}(data->internal.countDelay == 2)\{\par 179 data->internal.out = Hold;\par 180 data->internal.countDelay = 0;\par 181 \}\par 182 \}\par 183 \par 184 {\cf17 static} {\cf18 void} actionFcn(exit, Holding)(KeyFSMData* data)\{\par 185 data->internal.out = Idle;\par 186 \}\par 187 \par 188 \par 189 \par 190 {\cf17 static} {\cf18 void} actionFcn(during, MultiDownWaiting)(KeyFSMData* data)\{\par 191 data->internal.countDelay++;\par 192 FSM_LOG({\cf22 " during\'E5\'A4\'9A\'E5\'87\'BB\'E7\'AD\'89\'E5\'BE\'85 "});\par 193 \}\par 194 \par 195 \par 196 \par 197 {\cf17 static} {\cf18 void} actionFcn(during, HoldUpDebouncing)(KeyFSMData* data)\par 198 \{\par 199 data->internal.countDelay++;\par 200 \}\par 201 \par 202 \par 203 {\cf17 static} {\cf18 void} actionFcn(during, MultiDownDebouncing)(KeyFSMData* data)\par 204 \{\par 205 data->internal.countDelay++;\par 206 \}\par 207 \par 208 \par 209 {\cf20 /* -------------------------------------------------------------------------- */}\par 210 {\cf20 /* \'E8\'BD\'AC\'E7\'A7\'BB\'E5\'87\'BD\'E6\'95\'B0 */}\par 211 {\cf20 /* -------------------------------------------------------------------------- */}\par 212 {\cf18 void} transitionGeneralAction(KeyFSMData *data)\{\par 213 data->internal.countDelay = 0;\par 214 \}\par 215 \par 216 {\cf17 static} State transitionHandler(DownDebouncing, Downing)(KeyFSMData* data)\{\par 217 data->internal.out = Down;\par 218 \}\par 219 \par 220 \par 221 {\cf17 static} State transitionHandler(UpDebouncing, MultiDownWaiting)(KeyFSMData* data)\{\par 222 data->internal.out = Idle;\par 223 data->internal.countMultiDown++;\par 224 \}\par 225 \par 226 {\cf17 static} State transitionHandler(MultiDownDebouncing, MultiDowning)(KeyFSMData* data)\{\par 227 {\cf19 switch} (data->internal.countMultiDown + 1)\par 228 \{\par 229 {\cf19 case} 2:\par 230 data->internal.out = Down_2times;\par 231 {\cf19 break};\par 232 {\cf19 case} 3:\par 233 data->internal.out = Down_3times;\par 234 {\cf19 break};\par 235 \par 236 {\cf19 default}:\par 237 printf({\cf22 "reach MultiDown Limit!\\n"});\par 238 {\cf19 break};\par 239 \}\par 240 FSM_LOG({\cf22 " \'E5\'A4\'9A\'E5\'87\'BB%d "}, data->internal.countMultiDown+1);\par 241 \}\par 242 \par 243 \par 244 {\cf17 static} State transitionHandler(Downing, Holding)(KeyFSMData* data)\{\par 245 data->internal.out = Hold;\par 246 \}\par 247 \par 248 {\cf17 static} State transitionHandler(MultiDownWaiting, Waiting)(KeyFSMData* data)\{\par 249 data->internal.countMultiDown = 0;\par 250 \}\par 251 \par 252 \par 253 \par 254 {\cf20 /* }\par 255 {\cf20 \'E7\'94\'A8\'E6\'88\'B7\'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E4\'BA\'8B\'E4\'BB\'B6\'E9\'80\'89\'E6\'8B\'A9\'E9\'80\'BB\'E8\'BE\'91\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94\'E2\'80\'94begin }\par 256 {\cf20 */}\par 257 {\cf17 const} {\cf17 static} {\cf18 char} *stateStr[] = \{\par 258 {\cf22 "Idle"},\par 259 {\cf22 "Waiting"},\par 260 {\cf22 "DownDebouncing"},\par 261 {\cf22 "Downing"},\par 262 {\cf22 "Holding"},\par 263 {\cf22 "HoldUpDebouncing"},\par 264 {\cf22 "UpDebouncing"},\par 265 {\cf22 "MultiDownWaiting"},\par 266 {\cf22 "MultiDowning"},\par 267 {\cf22 "MultiDownDebouncing"},\par 268 \};\par 269 \par 270 {\cf17 static} {\cf18 void} printFSM(KeyFSM* pFSM)\{\par 271 KeyFSMData* data = pFSM->base.data;\par 272 FSM_LOG({\cf22 "KeyFSM: "});\par 273 FSM_LOG({\cf22 "%d, \'E5\'BD\'93\'E5\'89\'8D\'E7\'8A\'B6\'E6\'80\'81:%s, \\t\'E4\'B8\'8A\'E4\'B8\'80\'E4\'B8\'AA\'E4\'B8\'8B\'E6\'AC\'A1\'E4\'BA\'8B\'E4\'BB\'B6:%s \\t\'E8\'BD\'AC\'E7\'A7\'BB\'EF\'BC\'9A"}, data->internal.countDelay, stateStr[getFSMCurState((FSM *)pFSM)], stateStr[getFSMNextState((FSM *)pFSM)]);\par 274 \}\par 275 \par 276 \par 277 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid templateFSM.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/template/templateFSM.h} {\xe \v FSM_OOP/template/templateFSM.h} {\bkmkstart AAAAAAAAAI} {\bkmkend AAAAAAAAAI} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf21 #ifndef __TEMPLATE_FSM_H_}\par 2 {\cf21 #define __TEMPLATE_FSM_H_}\par 3 \par 4 {\cf20 /* -------------------------------------------------------------------------- */}\par 5 {\cf20 /* \'E6\'8F\'90\'E5\'89\'8D\'E5\'81\'9A\'E7\'B1\'BB\'E5\'9E\'8B\'E5\'A3\'B0\'E6\'98\'8E */}\par 6 {\cf20 /* -------------------------------------------------------------------------- */}\par 7 \par 8 \par 9 {\cf20 /* -------------------------------------------------------------------------- */}\par 10 {\cf20 /* \'E8\'87\'AA\'E5\'AE\'9A\'E4\'B9\'89\'E6\'95\'B0\'E6\'8D\'AE\'E5\'92\'8C\'E4\'BF\'A1\'E5\'8F\'B7 */}\par 11 {\cf20 /* -------------------------------------------------------------------------- */}\par 16 {\cf17 enum} TemplateFSMSignals\{\par 17 Signal_A = 1, \par 18 Signal_B,\par 19 \};\par 20 \par 25 {\cf17 typedef} {\cf17 struct }_templateFSMExternalData\par 26 \{\par 27 {\cf18 int} arrindex;\par 28 {\cf18 int} x;\par 29 \}TemplateFSMExternalData;\par 30 \par 31 \par 36 {\cf17 typedef} {\cf17 struct }_templateFSMInnerData\par 37 \{\par 38 {\cf18 int} y1;\par 39 {\cf18 int} inner1;\par 40 \}TemplateFSMInnerData;\par 41 \par 42 {\cf20 /* -------------------------------------------------------------------------- */}\par 43 {\cf20 /* \'E4\'B8\'8B\'E9\'9D\'A2\'E7\'9A\'84\'E6\'94\'B9\'E4\'B8\'AA\'E5\'90\'8D\'E5\'AD\'97\'E5\'B0\'B1\'E8\'A1\'8C\'E4\'BA\'86 */}\par 44 {\cf20 /* -------------------------------------------------------------------------- */}\par 45 {\cf21 #define TemplateFSM_Input(pFSM) ((TemplateFSMExternalData *)_preloadIn((FSM *)pFSM))}\par 46 \par 47 {\cf17 typedef} {\cf17 struct }_templateFSMData\par 48 \{\par 49 TemplateFSMExternalData external;\par 50 TemplateFSMInnerData internal;\par 51 \}TemplateFSMData;\par 52 \par 53 {\cf17 typedef} {\cf17 struct }_TemplateFSM TemplateFSM;\par 54 TemplateFSM *createTemplateFSM();\par 55 \par 56 \par 57 {\cf21 #endif}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid templateFSM_private.h\par \pard\plain {\tc\tcl2 \v FSM_OOP/template/templateFSM_private.h} {\xe \v FSM_OOP/template/templateFSM_private.h} {\bkmkstart AAAAAAAAAJ} {\bkmkend AAAAAAAAAJ} { \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid 1 {\cf21 #ifdef __TEMPLATE_PRIVATE_FSM_H_}\par 2 {\cf21 #error This file can only be included once!!!}\par 3 \par 4 {\cf21 #else}\par 5 {\cf21 #define __TEMPLATE_PRIVATE_FSM_H_}\par 6 \par 7 {\cf21 #include "FSM_protected.h"}\par 8 {\cf21 #include "templateFSM.h"}\par 9 {\cf21 #include }\par 10 \par 11 {\cf20 /* -------------------------------------------------------------------------- */}\par 12 {\cf20 /* \'E7\'94\'A8\'E5\'88\'B0\'E7\'9A\'84\'E5\'A4\'96\'E9\'83\'A8\'E5\'8F\'98\'E9\'87\'8F */}\par 13 {\cf20 /* -------------------------------------------------------------------------- */}\par 14 {\cf17 extern} {\cf18 int} arrindex;\par 15 {\cf17 extern} {\cf18 int} x;\par 16 \par 17 \par 18 {\cf20 /* -------------------------------------------------------------------------- */}\par 19 {\cf20 /* \'E7\'BB\'A7\'E6\'89\'BF\'E5\'9F\'BA\'E7\'B1\'BB */}\par 20 {\cf20 /* -------------------------------------------------------------------------- */}\par 21 {\cf17 typedef} {\cf17 struct }_TemplateFSM\par 22 \{ \par 23 FSM base;\par 24 \}TemplateFSM;\par 25 \par 26 {\cf20 /* -------------------------------------------------------------------------- */}\par 27 {\cf20 /* \'E7\'8A\'B6\'E6\'80\'81\'E5\'AE\'9A\'E4\'B9\'89 */}\par 28 {\cf20 /* -------------------------------------------------------------------------- */}\par 29 {\cf17 typedef} {\cf17 enum} _State\par 30 \{\par 31 Idle,\par 32 D,\par 33 E,\par 34 \par 35 Count_State,\par 36 \} State;\par 37 {\cf21 #define DEFAULT_STATE E}\par 38 \par 39 {\cf20 /* -------------------------------------------------------------------------- */}\par 40 {\cf20 /* \'E4\'B8\'8B\'E4\'B8\'80\'E4\'B8\'AA\'E7\'8A\'B6\'E6\'80\'81\'E9\'80\'89\'E6\'8B\'A9\'E5\'87\'BD\'E6\'95\'B0 */}\par 41 {\cf20 /* -------------------------------------------------------------------------- */}\par 42 \par 43 \par 44 {\cf17 static} State selectNextStateFcn(D)(TemplateFSMData *data, FSMSignals *signals)\{\par 45 {\cf19 if}(getSignal(signals, Signal_A))\{\par 46 signals->lastTriggeredSignal = Signal_A;\par 47 {\cf19 return} E;\par 48 \}\par 49 {\cf19 else} {\cf19 if}(arrindex == 0)\{\par 50 {\cf19 return} E;\par 51 \}\par 52 {\cf19 return} Idle;\par 53 \}\par 54 \par 55 {\cf17 static} State selectNextStateFcn(E)(TemplateFSMData *data, FSMSignals *signals)\{\par 56 {\cf19 if}(getSignal(signals, Signal_A))\{\par 57 signals->lastTriggeredSignal = Signal_A;\par 58 {\cf19 return} D;\par 59 \}\par 60 {\cf19 else} {\cf19 if}(x == 0)\{\par 61 {\cf19 return} D;\par 62 \}\par 63 {\cf19 return} Idle;\par 64 \}\par 65 \par 66 \par 67 \par 68 {\cf20 /* -------------------------------------------------------------------------- */}\par 69 {\cf20 /* \'E5\'AF\'B9\'E5\'BA\'94\'E7\'9A\'84 action, exit, during \'E5\'87\'BD\'E6\'95\'B0 */}\par 70 {\cf20 /* -------------------------------------------------------------------------- */}\par 71 {\cf17 static} {\cf18 void} actionFcn(enter, D)()\par 72 \{\par 73 FSM_LOG({\cf22 " enterD "});\par 74 \}\par 75 {\cf17 static} {\cf18 void} actionFcn(during, D)()\par 76 \{\par 77 FSM_LOG({\cf22 " duringD "});\par 78 \}\par 79 {\cf17 static} {\cf18 void} actionFcn(exit, D)()\par 80 \{\par 81 FSM_LOG({\cf22 " exitD "});\par 82 \}\par 83 \par 84 {\cf17 static} {\cf18 void} actionFcn(enter, E)()\par 85 \{\par 86 FSM_LOG({\cf22 " enterE "});\par 87 \}\par 88 {\cf17 static} {\cf18 void} actionFcn(during, E)()\par 89 \{\par 90 FSM_LOG({\cf22 " duringE "});\par 91 \}\par 92 {\cf17 static} {\cf18 void} actionFcn(exit, E)()\par 93 \{\par 94 FSM_LOG({\cf22 " exitE "});\par 95 \}\par 96 \par 97 \par 98 \par 99 {\cf20 /* -------------------------------------------------------------------------- */}\par 100 {\cf20 /* \'E8\'BD\'AC\'E7\'A7\'BB\'E5\'87\'BD\'E6\'95\'B0 */}\par 101 {\cf20 /* -------------------------------------------------------------------------- */}\par 102 {\cf17 static} {\cf18 void} transitionGeneralAction(TemplateFSMData *data)\{\par 103 FSM_LOG({\cf22 "general"});\par 104 \}\par 105 \par 106 {\cf17 static} {\cf18 void} transitionHandler(Idle, D)()\par 107 \{\par 108 FSM_LOG({\cf22 " Idle2D "});\par 109 \}\par 110 \par 111 {\cf17 static} {\cf18 void} transitionHandler(Idle, E)()\par 112 \{\par 113 FSM_LOG({\cf22 " Idle2E "});\par 114 \}\par 115 \par 116 {\cf17 static} {\cf18 void} transitionHandler(D, E)(TemplateFSMData *data, {\cf18 int} *delayedIndex)\par 117 \{\par 118 *delayedIndex = index(D, E);\par 119 FSM_LOG({\cf22 " D2E "});\par 120 \}\par 121 \par 122 {\cf17 static} {\cf18 void} transitionHandler(E, D)()\par 123 \{\par 124 FSM_LOG({\cf22 " E2D "});\par 125 \}\par 126 \par 127 \par 128 {\cf20 /* -------------------------------------------------------------------------- */}\par 129 {\cf20 /* \'E6\'89\'93\'E5\'8D\'B0\'E8\'B0\'83\'E8\'AF\'95 */}\par 130 {\cf20 /* -------------------------------------------------------------------------- */}\par 131 {\cf17 const} {\cf17 static} {\cf18 char} *stateStr[] = \{\par 132 {\cf22 "Idle"},\par 133 {\cf22 "D"},\par 134 {\cf22 "E"},\par 135 \};\par 136 \par 137 {\cf17 static} {\cf18 void} printFSM(TemplateFSM* pFSM)\{\par 138 FSM_LOG({\cf22 " \\tTemplateFSM: "});\par 139 FSM_LOG({\cf22 "\'E9\'A2\'84\'E8\'A3\'85\'E8\'BD\'BD\'E5\'99\'A8\'E6\'BA\'A2\'E5\'87\'BA:%d, \'E5\'BD\'93\'E5\'89\'8D\'E7\'8A\'B6\'E6\'80\'81:%s, \'E5\'8A\'A8\'E4\'BD\'9C\'EF\'BC\'9A"}, _getPreloaderOverFlag((FSM *)pFSM), stateStr[getFSMCurState((FSM *)pFSM)]);\par 140 \}\par 141 \par 142 \par 143 {\cf21 #endif}\par } \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Index\par \pard\plain {\tc \v Index} {\field\fldedit {\*\fldinst INDEX \\c2 \\*MERGEFORMAT}{\fldrslt INDEX}} }