From 5bdc868b2ef673bbce5e0abbc2a7bf8f7f8fa55e Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期二, 27 四月 2021 11:59:30 +0800 Subject: [PATCH] V2.17 增加基站汇总模式,青岛待测试 --- 源码/核心板/Src/application/dw_app.h | 3 源码/核心板/Src/ExternalDevices/lis3dh_driver.h | 569 +++++++ 源码/核心板/MDK-ARM/Project.uvprojx | 15 源码/核心板/Src/ExternalDevices/lis3dh_driver.c | 1995 ++++++++++++++++++++++++++ 源码/核心板/Src/ExternalDevices/dps368_test.c | 108 + 源码/核心板/Src/application/global_param.c | 2 源码/核心板/Src/main.c | 35 源码/核心板/Src/ExternalDevices/dps310.c | 380 +++++ 源码/核心板/MDK-ARM/Project.uvoptx | 158 + 源码/核心板/Src/ExternalDevices/dps310.h | 341 ++++ 源码/核心板/MDK-ARM/Project.uvguix.Administrator | 720 +++++---- 源码/核心板/Src/ExternalDevices/led.c | 6 源码/核心板/Src/application/dw_app.c | 59 13 files changed, 4,010 insertions(+), 381 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.Administrator" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.Administrator" index 3a88b05..8fc8343 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.Administrator" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.Administrator" @@ -6,7 +6,7 @@ <Header>### uVision Project, (C) Keil Software</Header> <PrjGuiSettings> - <LastAddFilePath></LastAddFilePath> + <LastAddFilePath>E:\GIT\UWB_SmallModule\婧愮爜\鏍稿績鏉縗Src\ExternalDevices</LastAddFilePath> </PrjGuiSettings> <ViewPool/> @@ -15,17 +15,17 @@ <View> <WinId>38003</WinId> <ViewName>Registers</ViewName> - <TableColWidths>117 118</TableColWidths> + <TableColWidths>175 176</TableColWidths> </View> <View> <WinId>346</WinId> <ViewName>Code Coverage</ViewName> - <TableColWidths>500 100</TableColWidths> + <TableColWidths>675 100</TableColWidths> </View> <View> <WinId>204</WinId> <ViewName>Performance Analyzer</ViewName> - <TableColWidths>930 90 90 100</TableColWidths> + <TableColWidths>397 139 139 100</TableColWidths> </View> </SECTreeCtrl> @@ -90,8 +90,8 @@ <sActiveDebugView></sActiveDebugView> <WindowPosition> <length>44</length> - <flags>0</flags> - <showCmd>1</showCmd> + <flags>2</flags> + <showCmd>2</showCmd> <MinPosition> <xPos>-32000</xPos> <yPos>-32000</yPos> @@ -101,17 +101,17 @@ <yPos>-1</yPos> </MaxPosition> <NormalPosition> - <Top>2</Top> - <Left>-6</Left> - <Right>1541</Right> - <Bottom>829</Bottom> + <Top>0</Top> + <Left>0</Left> + <Right>1547</Right> + <Bottom>830</Bottom> </NormalPosition> </WindowPosition> <MDIClientArea> <RegID>0</RegID> <MDITabState> - <Len>1584</Len> - <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000F00000005000000010000002D453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E63000000000864775F6170702E6300000000FFDC7800FFFFFFFF3F453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C646563616472697665725C646563615F6465766963652E63000000000D646563615F6465766963652E6300000000BECEA100FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E68000000000864775F6170702E6800000000F0A0A100FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C73657269616C5F61745F636D645F6170702E63000000001373657269616C5F61745F636D645F6170702E6300000000BCA8E100FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E63000000000755736172742E63000000009CC1B600FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E68000000000755736172742E6800000000F7B88600FFFFFFFF3A453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C5370692E6300000000055370692E6300000000D9ADC200FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E63000000000E676C6F62616C5F706172616D2E6300000000A5C2D700FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E68000000000E676C6F62616C5F706172616D2E6800000000B3A6BE00FFFFFFFF43453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C626565705F6C6F6769635F6170702E630000000010626565705F6C6F6769635F6170702E6300000000EAD6A300FFFFFFFF61453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4C69627261726965735C53544D3332463130785F5374645065726970685F4472697665725C696E635C73746D3332663130785F75736172742E68000000001173746D3332663130785F75736172742E6800000000F6FA7D00FFFFFFFF5F453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4C69627261726965735C53544D3332463130785F5374645065726970685F4472697665725C696E635C73746D3332663130785F7263632E68000000000F73746D3332663130785F7263632E6800000000B5E99D00FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6C65642E6300000000056C65642E63000000005FC3CF00FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6C65642E6800000000056C65642E6800000000C1838300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000006D01000070000000FD05000050020000</Data> + <Len>2614</Len> + <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000001900000000000000010000002D453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E63000000000864775F6170702E6300000000FFDC7800FFFFFFFF3F453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C646563616472697665725C646563615F6465766963652E63000000000D646563615F6465766963652E6300000000BECEA100FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E68000000000864775F6170702E6800000000F0A0A100FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C73657269616C5F61745F636D645F6170702E63000000001373657269616C5F61745F636D645F6170702E6300000000BCA8E100FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E63000000000755736172742E63000000009CC1B600FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E68000000000755736172742E6800000000F7B88600FFFFFFFF3A453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C5370692E6300000000055370692E6300000000D9ADC200FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E63000000000E676C6F62616C5F706172616D2E6300000000A5C2D700FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E68000000000E676C6F62616C5F706172616D2E6800000000B3A6BE00FFFFFFFF43453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C626565705F6C6F6769635F6170702E630000000010626565705F6C6F6769635F6170702E6300000000EAD6A300FFFFFFFF61453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4C69627261726965735C53544D3332463130785F5374645065726970685F4472697665725C696E635C73746D3332663130785F75736172742E68000000001173746D3332663130785F75736172742E6800000000F6FA7D00FFFFFFFF5F453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4C69627261726965735C53544D3332463130785F5374645065726970685F4472697665725C696E635C73746D3332663130785F7263632E68000000000F73746D3332663130785F7263632E6800000000B5E99D00FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6C65642E6300000000056C65642E63000000005FC3CF00FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6C65642E6800000000056C65642E6800000000C1838300FFFFFFFF42453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C64775F6472697665722E63000000000B64775F6472697665722E6300000000CACAD500FFFFFFFF44453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6470733336385F746573742E63000000000D6470733336385F746573742E6300000000C5D4F200FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6C69733364685F6472697665722E68000000000F6C69733364685F6472697665722E6800000000FFDC7800FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6C69733364685F6472697665722E63000000000F6C69733364685F6472697665722E6300000000BECEA100FFFFFFFF60453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4C69627261726965735C53544D3332463130785F5374645065726970685F4472697665725C696E635C73746D3332663130785F6770696F2E68000000001073746D3332663130785F6770696F2E6800000000F0A0A100FFFFFFFF60453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4C69627261726965735C53544D3332463130785F5374645065726970685F4472697665725C7372635C73746D3332663130785F6770696F2E63000000001073746D3332663130785F6770696F2E6300000000BCA8E100FFFFFFFF3F453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6470733331302E6300000000086470733331302E63000000009CC1B600FFFFFFFF47453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C5263635F4E7669635F5379737469636B2E6300000000125263635F4E7669635F5379737469636B2E6300000000F7B88600FFFFFFFF3F453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C45787465726E616C446576696365735C6470733331302E6800000000086470733331302E6800000000D9ADC200FFFFFFFF35453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C73746D3332663130785F69742E63000000000E73746D3332663130785F69742E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000009584FFFF4F83FFFF0089FFFF4185FFFF</Data> </MDITabState> </MDIClientArea> <ViewEx> @@ -134,7 +134,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C60000007000000072040000DE000000</Data> + <Data>C40000006600000070040000D4000000</Data> </RectRecentFloat> </Window> <Window> @@ -150,11 +150,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000006401000016020000</Data> + <Data>03000000660000008E01000028020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -170,11 +170,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000006401000016020000</Data> + <Data>03000000660000008E01000028020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB0000008701000077020000</Data> + <Data>70000000870000005301000043020000</Data> </RectRecentFloat> </Window> <Window> @@ -194,7 +194,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -214,7 +214,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -234,7 +234,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -254,7 +254,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -274,7 +274,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -294,7 +294,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -314,7 +314,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -334,7 +334,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -354,7 +354,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -374,7 +374,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -394,7 +394,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -414,7 +414,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -434,7 +434,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -450,11 +450,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000006401000016020000</Data> + <Data>03000000660000008E01000028020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB0000008701000077020000</Data> + <Data>70000000870000005301000043020000</Data> </RectRecentFloat> </Window> <Window> @@ -470,11 +470,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000006401000016020000</Data> + <Data>03000000660000008E01000028020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB0000008701000077020000</Data> + <Data>70000000870000005301000043020000</Data> </RectRecentFloat> </Window> <Window> @@ -490,11 +490,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>030000004A020000F8050000E8020000</Data> + <Data>030000005C020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -514,7 +514,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -530,11 +530,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>030000004A020000F8050000E8020000</Data> + <Data>030000005C020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -554,7 +554,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -574,7 +574,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -614,7 +614,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -634,7 +634,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -654,7 +654,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -674,7 +674,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -694,7 +694,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -714,7 +714,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -734,7 +734,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -754,7 +754,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -774,7 +774,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -794,7 +794,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -814,7 +814,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -834,7 +834,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -854,7 +854,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -874,7 +874,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -894,7 +894,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -914,7 +914,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -934,7 +934,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -954,7 +954,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -974,7 +974,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -994,7 +994,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1014,7 +1014,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1034,7 +1034,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1054,7 +1054,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1074,7 +1074,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1094,7 +1094,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1114,7 +1114,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1134,7 +1134,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1150,17 +1150,17 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000006401000016020000</Data> + <Data>0300000066000000FD00000028020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB0000008701000077020000</Data> + <Data>70000000870000005301000043020000</Data> </RectRecentFloat> </Window> <Window> <RegID>38007</RegID> <PaneID>38007</PaneID> - <IsVisible>0</IsVisible> + <IsVisible>1</IsVisible> <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> @@ -1170,11 +1170,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>030000004A020000F8050000E8020000</Data> + <Data>030000005C020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -1190,11 +1190,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>030000004A020000F8050000E8020000</Data> + <Data>030000005C020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB0000008701000077020000</Data> + <Data>70000000870000005301000043020000</Data> </RectRecentFloat> </Window> <Window> @@ -1214,7 +1214,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1234,7 +1234,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1250,11 +1250,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>030000004A020000F8050000E8020000</Data> + <Data>030000005C020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB0000008701000077020000</Data> + <Data>70000000870000005301000043020000</Data> </RectRecentFloat> </Window> <Window> @@ -1270,11 +1270,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>030000004A020000F8050000E8020000</Data> + <Data>030000005C020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB0000008701000077020000</Data> + <Data>70000000870000005301000043020000</Data> </RectRecentFloat> </Window> <Window> @@ -1294,7 +1294,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000DC02000029010000</Data> + <Data>7000000087000000A8020000F5000000</Data> </RectRecentFloat> </Window> <Window> @@ -1314,7 +1314,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1334,13 +1334,13 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> <RegID>50002</RegID> <PaneID>50002</PaneID> - <IsVisible>1</IsVisible> + <IsVisible>0</IsVisible> <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> @@ -1350,11 +1350,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>C7000000660000006D04000081000000</Data> + <Data>B3030000660000006D0400008C010000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1374,7 +1374,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1394,7 +1394,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1414,7 +1414,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1434,7 +1434,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1454,7 +1454,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1474,7 +1474,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1494,7 +1494,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1514,7 +1514,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1534,7 +1534,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1554,7 +1554,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1574,7 +1574,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1594,7 +1594,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1614,7 +1614,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1634,7 +1634,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1654,7 +1654,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1674,7 +1674,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1694,7 +1694,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <Window> @@ -1730,7 +1730,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0000000001030000FB05000014030000</Data> + <Data>000000000E0300000006000021030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1794,19 +1794,19 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>A4000000BB000000640100005B010000</Data> + <Data>70000000870000003001000027010000</Data> </RectRecentFloat> </Window> <DockMan> <Len>3312</Len> - <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C60000007000000072040000DE000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B20300007000000072040000C6010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF670100004F0000006B0100002F0200000100000002000010040000000100000042FFFFFF32050000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000002000000700000006901000050020000000000004F000000670100002F0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000002000000B601000072040000380200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002F020000FB0500003302000001000000010000100400000001000000C5FDFFFF6C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000200000054020000FD050000220300000000000033020000FB050000010300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> + <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF910100004F00000095010000410200000100000002000010040000000100000002FFFFFFF7040000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000000001000058020000000000004F00000091010000410200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000410200000006000045020000010000000100001004000000010000007FFEFFFF33010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000005C02000000060000250300000000000045020000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> </DockMan> <ToolBar> <RegID>59392</RegID> <Name>File</Name> <Buttons> - <Len>2928</Len> - <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000116D5F45554152545F444D415F525850747296000000000000001400116D5F45554152545F444D415F52585074721145554152545F52585F4255465F53495A4518706F72745F7365745F6477313030305F736C6F77726174650B675F5265737474696D65720D554152545F506F704672616D650E55415254325F506F704672616D650E554152545F507573684672616D650F55415254325F507573684672616D650F45554152545F52585F444D415F43480A4750535F50494E5F454E1D6477745F636F6E666967636F6E74696E756F75736672616D656D6F64650870646F615F76616C11464C4153485F494150464C41475F4D41500B4750494F5F50494E5F31300844454D4F5F4C4F47076C5F62417574680D536F636B65745F4372656174650E554450436C69656E745F496E6974066F66667365740B6D6F746F725F73746174650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> + <Len>2975</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000114765745072657373416E6448656967687496000000000000001400054558544931114765745072657373416E644865696768740F75736172745F73656E645B3130305D0B75736172745F73656E645B0A75736172745F73656E6406627574746F6E0D6672616D655F7365715F6E62320D616E6369646C6973745F7265630A696D755F656E61626C6509494943325F496E6974075265616450696E0E6D5F7533324865616465724C656E10554450436C69656E745F55706C6F61640D6470733331305F726573756D651A4450533331305F4D4F44455F4241434B47524F554E445F414C4C224450533331305F4D4F44455F4241434B47524F554E445F54454D50455241545552451C4450533331305F4D4F44455F434F4D4D414E445F50524553535552451F4450533331305F4D4F44455F434F4D4D414E445F54454D50455241545552451F4450533331305F4D4F44455F4241434B47524F554E445F50524553535552450C6470733331305F73746174650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> </Buttons> <OriginalItems> <Len>1423</Len> @@ -1822,7 +1822,7 @@ <Name>Build</Name> <Buttons> <Len>970</Len> - <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000553544D3332960000000000000001000553544D3332000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000553544D3332960000000000000001000553544D3332000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data> </Buttons> <OriginalItems> <Len>583</Len> @@ -1861,7 +1861,7 @@ <Window> <RegID>-1</RegID> <PaneID>-1</PaneID> - <IsVisible>0</IsVisible> + <IsVisible>1</IsVisible> <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> @@ -1871,11 +1871,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>F40000004F00000056030000DF000000</Data> + <Data>6D0100004F0000007E04000094000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>F6000000700000005803000000010000</Data> + <Data>6D010000660000007E040000AB000000</Data> </RectRecentFloat> </Window> <Window> @@ -1891,11 +1891,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000F20000003E020000</Data> + <Data>0300000066000000660100002D020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -1911,11 +1911,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000F20000003E020000</Data> + <Data>0300000066000000660100002D020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000003D01000079020000</Data> + <Data>8A000000A10000004601000003020000</Data> </RectRecentFloat> </Window> <Window> @@ -1931,11 +1931,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -1951,11 +1951,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -1971,11 +1971,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -1991,11 +1991,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2011,11 +2011,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2031,11 +2031,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>F70000006600000053030000C6000000</Data> + <Data>70010000660000007B0400007B000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2051,11 +2051,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2071,11 +2071,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2091,11 +2091,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2111,11 +2111,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2131,11 +2131,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2151,11 +2151,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2171,11 +2171,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2191,11 +2191,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000F20000003E020000</Data> + <Data>0300000066000000660100002D020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000003D01000079020000</Data> + <Data>8A000000A10000004601000003020000</Data> </RectRecentFloat> </Window> <Window> @@ -2211,11 +2211,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000F20000003E020000</Data> + <Data>0300000066000000660100002D020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000003D01000079020000</Data> + <Data>8A000000A10000004601000003020000</Data> </RectRecentFloat> </Window> <Window> @@ -2231,11 +2231,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000072020000D9040000D2020000</Data> + <Data>03000000610200007B040000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2251,11 +2251,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>00000000EB020000FB050000CA030000</Data> + <Data>0000000053030000FE050000D0030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2271,17 +2271,17 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>00000000EB020000FB050000CD030000</Data> + <Data>00000000F802000000060000AE030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> <RegID>203</RegID> <PaneID>203</PaneID> - <IsVisible>0</IsVisible> + <IsVisible>1</IsVisible> <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> @@ -2291,11 +2291,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>F70000006600000053030000C6000000</Data> + <Data>6D010000630000007E04000094000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2311,11 +2311,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>F70000006600000053030000C6000000</Data> + <Data>70010000660000007B0400007B000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2351,11 +2351,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2371,11 +2371,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2391,11 +2391,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>F70000006600000053030000C6000000</Data> + <Data>70010000660000007B0400007B000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2411,11 +2411,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>F70000006600000053030000C6000000</Data> + <Data>70010000660000007B0400007B000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2431,11 +2431,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>A700000066000000AD0300009A000000</Data> + <Data>70010000660000007B0400007B000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2200000039000000C2000000BC000000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2451,11 +2451,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>F70000006600000053030000C6000000</Data> + <Data>70010000660000007B0400007B000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2471,11 +2471,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2491,11 +2491,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2511,11 +2511,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2531,11 +2531,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2551,11 +2551,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2571,11 +2571,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2591,11 +2591,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2611,11 +2611,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2631,11 +2631,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2651,11 +2651,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2671,11 +2671,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2691,11 +2691,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2711,11 +2711,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2731,11 +2731,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2751,11 +2751,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2771,11 +2771,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2791,11 +2791,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2811,11 +2811,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2831,11 +2831,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2851,11 +2851,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2871,11 +2871,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -2891,11 +2891,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000F20000003E020000</Data> + <Data>0300000066000000660100002D020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000003D01000079020000</Data> + <Data>8A000000A10000004601000003020000</Data> </RectRecentFloat> </Window> <Window> @@ -2907,15 +2907,15 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>000000006F020000DC040000EB020000</Data> + <Data>000000005E0200007E040000F8020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2100000037000000E9020000C7000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -2927,15 +2927,15 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000072020000D9040000D2020000</Data> + <Data>03000000610200007B040000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000003D01000079020000</Data> + <Data>8A000000A10000004601000003020000</Data> </RectRecentFloat> </Window> <Window> @@ -2951,11 +2951,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2971,11 +2971,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>E304000066000000F8050000D2020000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>C606000020020000820A0000FF020000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <Window> @@ -2987,15 +2987,15 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000031020000FD04000065020000</Data> + <Data>03000000610200007B040000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2200000039000000DE0000009B010000</Data> + <Data>8A000000A10000004601000003020000</Data> </RectRecentFloat> </Window> <Window> @@ -3007,15 +3007,15 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000031020000FD04000065020000</Data> + <Data>03000000610200007B040000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2200000039000000DE0000009B010000</Data> + <Data>8A000000A10000004601000003020000</Data> </RectRecentFloat> </Window> <Window> @@ -3031,11 +3031,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>A700000066000000AD0300009A000000</Data> + <Data>70010000660000007B0400007B000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2200000039000000FA01000091000000</Data> + <Data>8A000000A100000062020000F9000000</Data> </RectRecentFloat> </Window> <Window> @@ -3051,11 +3051,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3071,17 +3071,17 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> <RegID>50002</RegID> <PaneID>50002</PaneID> - <IsVisible>1</IsVisible> + <IsVisible>0</IsVisible> <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> @@ -3091,11 +3091,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>A700000066000000AD03000081000000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3111,7 +3111,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -3131,11 +3131,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3151,11 +3151,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3171,11 +3171,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3191,11 +3191,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3211,11 +3211,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3231,11 +3231,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3251,11 +3251,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3271,11 +3271,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3291,11 +3291,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3311,11 +3311,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3331,11 +3331,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3351,7 +3351,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -3371,11 +3371,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3391,11 +3391,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3411,11 +3411,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3431,11 +3431,11 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>ED02000066000000D703000044020000</Data> + <Data>80030000660000007C05000030030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>21000000370000001101000002010000</Data> + <Data>8A000000A10000002A01000024010000</Data> </RectRecentFloat> </Window> <Window> @@ -3445,13 +3445,13 @@ <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> - <MRUWidth>345</MRUWidth> + <MRUWidth>966</MRUWidth> <PinState>0</PinState> <RecentFrameAlignment>8192</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0000000000000000D10300001C000000</Data> + <Data>0400000000000000D50300001C000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -3471,7 +3471,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0000000001030000FB05000014030000</Data> + <Data>000000000E0300000006000021030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -3485,13 +3485,13 @@ <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> - <MRUWidth>463</MRUWidth> + <MRUWidth>476</MRUWidth> <PinState>0</PinState> <RecentFrameAlignment>8192</RecentFrameAlignment> <RecentRowIndex>1</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>000000001C000000DA01000038000000</Data> + <Data>000000001C000000E701000038000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -3505,17 +3505,17 @@ <IsFloating>0</IsFloating> <IsTabbed>0</IsTabbed> <IsActivated>0</IsActivated> - <MRUWidth>316</MRUWidth> + <MRUWidth>612</MRUWidth> <PinState>0</PinState> <RecentFrameAlignment>8192</RecentFrameAlignment> <RecentRowIndex>2</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>080000001C0000007702000038000000</Data> + <Data>030000001C0000007202000038000000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>0A0000000A0000006E0000006E000000</Data> + <Data>0A0000000A0000007602000042000000</Data> </RectRecentFloat> </Window> <Window> @@ -3527,27 +3527,27 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>00000000FDFFFFFF010000003C010000</Data> + <Data>8504000066000000FD050000DF020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>2200000039000000C2000000BC000000</Data> + <Data>BC0700009DFDFFFF780B0000D8FEFFFF</Data> </RectRecentFloat> </Window> <DockMan> - <Len>3875</Len> - <Data>0000000010000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000056030000E3000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000F6000000700000005803000000010000F40000004F00000056030000DF0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFE60200004F000000EA0200005D020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000EC02000070000000DC0300007E020000EA0200004F000000DA0300005D02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0352434300000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF50000004F000000F9000000570200000100000002000010040000000100000012FFFFFFE1020000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000200000070000000F700000078020000000000004F000000F5000000570200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000057020000DC0400005B020000010000000100001004000000010000008CFEFFFF1D010000FFFFFFFF03000000C5000000B40100007794000001800080000001000000020000007C020000DE0400000C030000000000005B020000DC040000EB0200000000000040820056030000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF02000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFFDC0400004F000000E0040000EB020000010000000200001004000000010000001FFDFFFF1901000000000000000000000000000001000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800040000001000000E204000070000000FD0500000C030000E00400004F000000FB050000EB02000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000020000000000000FFFFFFFFFFFFFFFFA4000000B3000000B0030000B7000000000000000100000004000000010000000000000000000000FFFFFFFF02000000D60100004589000001800020000000000000A600000070000000B2030000D4000000A40000004F000000B0030000B30000000000000040280046020000000F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFD601000001000000FFFFFFFFD6010000000000000080000000000000FFFFFFFFFFFFFFFF0000000037010000B00300003B0100000000000001000000040000000100000000000000000000000000000000000000000000000100000000000000FFFFFFFF010000003803000001800080000000000000020000000A000000930100005D01000000000000E9FFFFFF010000003C01000000000000404100460100000009554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFD80100003B010000DC010000A701000000000000020000000400000000000000000000000000000000000000000000000000000001000000FFFFFFFF3803000001000000FFFFFFFF38030000000000000080000000000000FFFFFFFFFFFFFFFF0000000016020000000500001A020000000000000100000004000000010000000000000000000000FFFFFFFF02000000D2010000CF01000001800080000000000000020000003B020000020500009F020000000000001A020000000500007E0200000000000040820046020000000E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFD201000001000000FFFFFFFFD20100000000000002000000C70000000080000001000000020000000C030000FD050000EE030000010000000100000001000000C60000000080000001000000020000000C030000FD050000EB03000001000000010000000100000000000000</Data> + <Len>3432</Len> + <Data>000000000C000000000000000020000001000000FFFFFFFFFFFFFFFF6D010000940000007E04000098000000010000000100001004000000010000009FFFFFFF3D020000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000010000006D010000660000007E040000AB0000006D0100004F0000007E040000940000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF790300004F0000007D0300004903000000000000020000000400000001000000CDF9FFFF9E000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000007D030000660000007F050000600300007D0300004F0000007F0500004903000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF084669726577616C6C00000000408C000001000000FFFFFFFFFFFFFFFF0655534152543100000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF690100004F0000006D010000460200000100000002000010040000000100000099FEFFFF0C030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000690100005D020000000000004F00000069010000460200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000004F030000FE0500005303000000000000010000000400000001000000ADFEFFFFD600000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFBF030000D0020000C30300004D03000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000460200007E0400004A02000001000000010000100400000001000000F8FEFFFF4D010000FFFFFFFF05000000C5000000B4010000D2010000CF010000779400000180008000000100000000000000610200007E0400000F030000000000004A0200007E040000F80200000000000040820056050000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFF7E0400004F00000082040000F80200000100000002000010040000000100000073FDFFFFFB01000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000400000010000008204000066000000000600000F030000820400004F00000000060000F802000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F0700000000000001000000C70000000080000001000000000000000F03000000060000C503000001000000010000000100000000000000</Data> </DockMan> <ToolBar> <RegID>59392</RegID> <Name>File</Name> <Buttons> - <Len>2928</Len> - <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000116D5F45554152545F444D415F525850747296000000000000001400116D5F45554152545F444D415F52585074721145554152545F52585F4255465F53495A4518706F72745F7365745F6477313030305F736C6F77726174650B675F5265737474696D65720D554152545F506F704672616D650E55415254325F506F704672616D650E554152545F507573684672616D650F55415254325F507573684672616D650F45554152545F52585F444D415F43480A4750535F50494E5F454E1D6477745F636F6E666967636F6E74696E756F75736672616D656D6F64650870646F615F76616C11464C4153485F494150464C41475F4D41500B4750494F5F50494E5F31300844454D4F5F4C4F47076C5F62417574680D536F636B65745F4372656174650E554450436C69656E745F496E6974066F66667365740B6D6F746F725F73746174650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6559010000</Data> + <Len>2930</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000067072696E746696000000000000001300067072696E74660D68617264776172655F74797065114765745072657373416E644865696768740F75736172745F73656E645B3130305D0B75736172745F73656E645B0A75736172745F73656E6406627574746F6E0D6672616D655F7365715F6E62320D616E6369646C6973745F7265630A696D755F656E61626C6509494943325F496E6974075265616450696E0E6D5F7533324865616465724C656E10554450436C69656E745F55706C6F61640D6470733331305F726573756D651A4450533331305F4D4F44455F4241434B47524F554E445F414C4C224450533331305F4D4F44455F4241434B47524F554E445F54454D50455241545552451C4450533331305F4D4F44455F434F4D4D414E445F50524553535552451F4450533331305F4D4F44455F434F4D4D414E445F54454D504552415455524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> </Buttons> <OriginalItems> <Len>1423</Len> @@ -3562,8 +3562,8 @@ <RegID>59399</RegID> <Name>Build</Name> <Buttons> - <Len>783</Len> - <Data>00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050050000000D53544D33323130422D4556414C960000000000000006000E53544D3332313030452D4556414C1053544D33323130452D4556414C5F584C0E53544D3332313030422D4556414C0D53544D33323130432D4556414C0D53544D33323130452D4556414C0D53544D33323130422D4556414C0000000000000000000000000000000000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64CF010000</Data> + <Len>970</Len> + <Data>00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000553544D3332960000000000000001000553544D3332000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data> </Buttons> <OriginalItems> <Len>583</Len> @@ -3579,7 +3579,7 @@ <Name>Debug</Name> <Buttons> <Len>2362</Len> - <Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020000002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7200000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C010000</Data> + <Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020000002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data> </Buttons> <OriginalItems> <Len>898</Len> @@ -3603,21 +3603,21 @@ <ActiveMDIGroup>0</ActiveMDIGroup> <MDIGroup> <Size>100</Size> - <ActiveTab>5</ActiveTab> + <ActiveTab>0</ActiveTab> <Doc> <Name>..\Src\main.c</Name> - <ColumnNumber>0</ColumnNumber> - <TopLine>231</TopLine> - <CurrentLine>240</CurrentLine> + <ColumnNumber>14</ColumnNumber> + <TopLine>76</TopLine> + <CurrentLine>77</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> </Doc> <Doc> <Name>..\Src\application\dw_app.c</Name> - <ColumnNumber>41</ColumnNumber> - <TopLine>1060</TopLine> - <CurrentLine>1077</CurrentLine> + <ColumnNumber>2</ColumnNumber> + <TopLine>1275</TopLine> + <CurrentLine>1292</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3625,8 +3625,8 @@ <Doc> <Name>..\Src\decadriver\deca_device.c</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>2753</TopLine> - <CurrentLine>2765</CurrentLine> + <TopLine>1021</TopLine> + <CurrentLine>1029</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3634,17 +3634,17 @@ <Doc> <Name>..\Src\application\dw_app.h</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>88</TopLine> - <CurrentLine>100</CurrentLine> + <TopLine>114</TopLine> + <CurrentLine>140</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> </Doc> <Doc> <Name>..\Src\application\serial_at_cmd_app.c</Name> - <ColumnNumber>50</ColumnNumber> + <ColumnNumber>16</ColumnNumber> <TopLine>110</TopLine> - <CurrentLine>123</CurrentLine> + <CurrentLine>128</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3652,7 +3652,7 @@ <Doc> <Name>..\Src\OnChipDevices\Usart.c</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>422</TopLine> + <TopLine>412</TopLine> <CurrentLine>431</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> @@ -3661,7 +3661,7 @@ <Doc> <Name>..\Src\OnChipDevices\Usart.h</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>29</TopLine> + <TopLine>30</TopLine> <CurrentLine>56</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> @@ -3670,7 +3670,7 @@ <Doc> <Name>..\Src\OnChipDevices\Spi.c</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>143</TopLine> + <TopLine>140</TopLine> <CurrentLine>161</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> @@ -3678,18 +3678,18 @@ </Doc> <Doc> <Name>..\Src\application\global_param.c</Name> - <ColumnNumber>20</ColumnNumber> - <TopLine>1</TopLine> - <CurrentLine>1</CurrentLine> + <ColumnNumber>37</ColumnNumber> + <TopLine>16</TopLine> + <CurrentLine>31</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> </Doc> <Doc> <Name>..\Src\application\global_param.h</Name> - <ColumnNumber>25</ColumnNumber> - <TopLine>24</TopLine> - <CurrentLine>48</CurrentLine> + <ColumnNumber>2</ColumnNumber> + <TopLine>31</TopLine> + <CurrentLine>50</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3723,18 +3723,108 @@ </Doc> <Doc> <Name>..\Src\ExternalDevices\led.c</Name> - <ColumnNumber>0</ColumnNumber> + <ColumnNumber>46</ColumnNumber> <TopLine>1</TopLine> - <CurrentLine>3</CurrentLine> + <CurrentLine>20</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> </Doc> <Doc> <Name>..\Src\ExternalDevices\led.h</Name> - <ColumnNumber>0</ColumnNumber> + <ColumnNumber>85</ColumnNumber> <TopLine>1</TopLine> - <CurrentLine>13</CurrentLine> + <CurrentLine>18</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\ExternalDevices\dw_driver.c</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>7</TopLine> + <CurrentLine>26</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\ExternalDevices\dps368_test.c</Name> + <ColumnNumber>23</ColumnNumber> + <TopLine>78</TopLine> + <CurrentLine>96</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\ExternalDevices\lis3dh_driver.h</Name> + <ColumnNumber>43</ColumnNumber> + <TopLine>39</TopLine> + <CurrentLine>51</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\ExternalDevices\lis3dh_driver.c</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>244</TopLine> + <CurrentLine>256</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_gpio.h</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>62</TopLine> + <CurrentLine>77</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>301</TopLine> + <CurrentLine>320</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\ExternalDevices\dps310.c</Name> + <ColumnNumber>23</ColumnNumber> + <TopLine>315</TopLine> + <CurrentLine>322</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</Name> + <ColumnNumber>23</ColumnNumber> + <TopLine>179</TopLine> + <CurrentLine>198</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\ExternalDevices\dps310.h</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>154</TopLine> + <CurrentLine>121</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\stm32f10x_it.c</Name> + <ColumnNumber>20</ColumnNumber> + <TopLine>39</TopLine> + <CurrentLine>52</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" index 77e72a1..6639eae 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" @@ -130,7 +130,7 @@ <SetRegEntry> <Number>0</Number> <Key>DLGUARM</Key> - <Name>d</Name> + <Name></Name> </SetRegEntry> <SetRegEntry> <Number>0</Number> @@ -155,7 +155,7 @@ <SetRegEntry> <Number>0</Number> <Key>DLGTARM</Key> - <Name>(1010=-1,-1,-1,-1,0)(1007=108,145,295,420,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=18,3,664,676,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=767,133,1188,538,1)(121=847,206,1268,611,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=150,26,744,720,0)(133=-1,-1,-1,-1,0)(160=475,231,923,645,0)(161=167,212,615,626,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=677,0,1280,634,0)(151=-1,-1,-1,-1,0)</Name> + <Name>(1010=-1,-1,-1,-1,0)(1007=108,145,295,420,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=18,3,664,676,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=767,133,1188,538,0)(121=1005,-825,1426,-420,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=150,26,744,720,0)(133=-1,-1,-1,-1,0)(160=475,231,923,645,0)(161=167,212,615,626,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=677,0,1280,634,0)(151=-1,-1,-1,-1,0)</Name> </SetRegEntry> <SetRegEntry> <Number>0</Number> @@ -180,6 +180,56 @@ <WinNumber>1</WinNumber> <ItemText>DMACnt</ItemText> </Ww> + <Ww> + <count>3</count> + <WinNumber>1</WinNumber> + <ItemText>frame_len,0x0A</ItemText> + </Ww> + <Ww> + <count>4</count> + <WinNumber>1</WinNumber> + <ItemText>rec_tagheight,0x0A</ItemText> + </Ww> + <Ww> + <count>5</count> + <WinNumber>1</WinNumber> + <ItemText>rx_buffer</ItemText> + </Ww> + <Ww> + <count>6</count> + <WinNumber>1</WinNumber> + <ItemText>frame_len,0x0A</ItemText> + </Ww> + <Ww> + <count>7</count> + <WinNumber>1</WinNumber> + <ItemText>frame_len</ItemText> + </Ww> + <Ww> + <count>8</count> + <WinNumber>1</WinNumber> + <ItemText>recnearbaselist_dist,0x0A</ItemText> + </Ww> + <Ww> + <count>9</count> + <WinNumber>1</WinNumber> + <ItemText>intheight,0x0A</ItemText> + </Ww> + <Ww> + <count>10</count> + <WinNumber>1</WinNumber> + <ItemText>tag_id_recv</ItemText> + </Ww> + <Ww> + <count>11</count> + <WinNumber>1</WinNumber> + <ItemText>pressure</ItemText> + </Ww> + <Ww> + <count>12</count> + <WinNumber>1</WinNumber> + <ItemText>temperature</ItemText> + </Ww> </WatchWindow1> <MemoryWindow1> <Mm> @@ -203,7 +253,7 @@ <DebugFlag> <trace>0</trace> <periodic>1</periodic> - <aLwin>0</aLwin> + <aLwin>1</aLwin> <aCover>0</aCover> <aSer1>0</aSer1> <aSer2>0</aSer2> @@ -403,7 +453,7 @@ <Group> <GroupName>ExternalDevices</GroupName> - <tvExp>0</tvExp> + <tvExp>1</tvExp> <tvExpOptDlg>0</tvExpOptDlg> <cbSel>0</cbSel> <RteFlg>0</RteFlg> @@ -443,6 +493,42 @@ <RteFlg>0</RteFlg> <bShared>0</bShared> </File> + <File> + <GroupNumber>5</GroupNumber> + <FileNumber>14</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\ExternalDevices\dps310.c</PathWithFileName> + <FilenameWithoutPath>dps310.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>5</GroupNumber> + <FileNumber>15</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\ExternalDevices\dps368_test.c</PathWithFileName> + <FilenameWithoutPath>dps368_test.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>5</GroupNumber> + <FileNumber>16</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\ExternalDevices\lis3dh_driver.c</PathWithFileName> + <FilenameWithoutPath>lis3dh_driver.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> </Group> <Group> @@ -453,7 +539,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>6</GroupNumber> - <FileNumber>14</FileNumber> + <FileNumber>17</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -465,7 +551,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>15</FileNumber> + <FileNumber>18</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -477,7 +563,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>16</FileNumber> + <FileNumber>19</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -489,7 +575,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>17</FileNumber> + <FileNumber>20</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -501,7 +587,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>18</FileNumber> + <FileNumber>21</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -513,7 +599,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>19</FileNumber> + <FileNumber>22</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -533,7 +619,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>7</GroupNumber> - <FileNumber>20</FileNumber> + <FileNumber>23</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -545,7 +631,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>21</FileNumber> + <FileNumber>24</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -557,7 +643,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>22</FileNumber> + <FileNumber>25</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -569,7 +655,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>23</FileNumber> + <FileNumber>26</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -581,7 +667,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>24</FileNumber> + <FileNumber>27</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -593,7 +679,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>25</FileNumber> + <FileNumber>28</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -605,7 +691,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>26</FileNumber> + <FileNumber>29</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -617,7 +703,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>27</FileNumber> + <FileNumber>30</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -629,7 +715,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>28</FileNumber> + <FileNumber>31</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -641,7 +727,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>29</FileNumber> + <FileNumber>32</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -653,7 +739,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>30</FileNumber> + <FileNumber>33</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -665,7 +751,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>31</FileNumber> + <FileNumber>34</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -677,7 +763,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>32</FileNumber> + <FileNumber>35</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -689,7 +775,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>33</FileNumber> + <FileNumber>36</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -701,7 +787,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>34</FileNumber> + <FileNumber>37</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -713,7 +799,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>35</FileNumber> + <FileNumber>38</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -725,7 +811,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>36</FileNumber> + <FileNumber>39</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -737,7 +823,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>37</FileNumber> + <FileNumber>40</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -749,7 +835,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>38</FileNumber> + <FileNumber>41</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -761,7 +847,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>39</FileNumber> + <FileNumber>42</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -773,7 +859,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>40</FileNumber> + <FileNumber>43</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -785,7 +871,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>41</FileNumber> + <FileNumber>44</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -797,7 +883,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>42</FileNumber> + <FileNumber>45</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -817,7 +903,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>8</GroupNumber> - <FileNumber>43</FileNumber> + <FileNumber>46</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -829,7 +915,7 @@ </File> <File> <GroupNumber>8</GroupNumber> - <FileNumber>44</FileNumber> + <FileNumber>47</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -841,7 +927,7 @@ </File> <File> <GroupNumber>8</GroupNumber> - <FileNumber>45</FileNumber> + <FileNumber>48</FileNumber> <FileType>2</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" index a30bbf1..dc54e29 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" @@ -467,6 +467,21 @@ <FileType>1</FileType> <FilePath>..\Src\ExternalDevices\beep.c</FilePath> </File> + <File> + <FileName>dps310.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dps310.c</FilePath> + </File> + <File> + <FileName>dps368_test.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dps368_test.c</FilePath> + </File> + <File> + <FileName>lis3dh_driver.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\lis3dh_driver.c</FilePath> + </File> </Files> </Group> <Group> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps310.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps310.c" new file mode 100644 index 0000000..4811e4c --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps310.c" @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2015-2016 Infineon Technologies AG + * + * Driver for Infineon DPS310 Digital Barometric Pressure Sensor + * + * + */ + +#include "dps310.h" + +/* Meaningful Default Configuration */ +#define IFX_DPS310_TEMPERATURE_OSR OSR_2 +#define IFX_DPS310_PRESSURE_OSR OSR_64 +#define IFX_DPS310_TEMPERATURE_MR TMP_MR_4 +#define IFX_DPS310_PRESSURE_MR PM_MR_8 + +/**/ + +static dps310_scaling_coeffs_e +dps310_get_scaling_coef (dps310_osr_e osr) +{ + dps310_scaling_coeffs_e scaling_coeff; + + switch (osr){ + + case OSR_1: + scaling_coeff = OSR_SF_1; + break; + case OSR_2: + scaling_coeff = OSR_SF_2; + break; + case OSR_4: + scaling_coeff = OSR_SF_4; + break; + case OSR_8: + scaling_coeff = OSR_SF_8; + break; + case OSR_16: + scaling_coeff = OSR_SF_16; + break; + case OSR_32: + scaling_coeff = OSR_SF_32; + break; + case OSR_64: + scaling_coeff = OSR_SF_64; + break; + case OSR_128: + scaling_coeff = OSR_SF_128; + break; + default: + scaling_coeff = OSR_SF_1; + break; + } + return scaling_coeff; +} + +static int dps310_read_calib_coeffs(struct dps310_state *drv_state) + +{ + s32 ret; + u8 read_buffer[IFX_DPS310_COEF_LEN] = {0}; + + if (drv_state == NULL) + return -EINVAL; + + ret = drv_state->io->read_block((u8)IFX_DPS310_COEF_REG_ADDR, + (u8)IFX_DPS310_COEF_LEN, read_buffer); + + if ( ret != IFX_DPS310_COEF_LEN ) + return ret; + + drv_state->calib_coeffs.C0 = (read_buffer[0] << 4) + ((read_buffer[1] >>4) & 0x0F); + + if(drv_state->calib_coeffs.C0 > POW_2_11_MINUS_1) + drv_state->calib_coeffs.C0 = drv_state->calib_coeffs.C0 - POW_2_12; + + drv_state->calib_coeffs.C1 = (read_buffer[2] + ((read_buffer[1] & 0x0F)<<8)); + + if(drv_state->calib_coeffs.C1 > POW_2_11_MINUS_1) + drv_state->calib_coeffs.C1 = drv_state->calib_coeffs.C1 - POW_2_12; + + drv_state->calib_coeffs.C00 = ((read_buffer[4]<<4) + (read_buffer[3]<<12)) + ((read_buffer[5]>>4) & 0x0F); + + if(drv_state->calib_coeffs.C00 > POW_2_19_MINUS_1) + drv_state->calib_coeffs.C00 = drv_state->calib_coeffs.C00 -POW_2_20; + + drv_state->calib_coeffs.C10 = ((read_buffer[5] & 0x0F)<<16) + read_buffer[7] + (read_buffer[6]<<8); + + if(drv_state->calib_coeffs.C10 > POW_2_19_MINUS_1) + drv_state->calib_coeffs.C10 = drv_state->calib_coeffs.C10 - POW_2_20; + + drv_state->calib_coeffs.C01 = (read_buffer[9] + (read_buffer[8]<<8)); + + if(drv_state->calib_coeffs.C01 > POW_2_15_MINUS_1) + drv_state->calib_coeffs.C01 = drv_state->calib_coeffs.C01 - POW_2_16; + + drv_state->calib_coeffs.C11 = (read_buffer[11] + (read_buffer[10]<<8)); + + if(drv_state->calib_coeffs.C11 > POW_2_15_MINUS_1) + drv_state->calib_coeffs.C11 = drv_state->calib_coeffs.C11 - POW_2_16; + + drv_state->calib_coeffs.C20 = (read_buffer[13] + (read_buffer[12]<<8)); + + if(drv_state->calib_coeffs.C20 > POW_2_15_MINUS_1) + drv_state->calib_coeffs.C20 = drv_state->calib_coeffs.C20 - POW_2_16; + + drv_state->calib_coeffs.C21 = (read_buffer[15] + (read_buffer[14]<<8)); + + if(drv_state->calib_coeffs.C21 > POW_2_15_MINUS_1) + drv_state->calib_coeffs.C21 = drv_state->calib_coeffs.C21 - POW_2_16; + + drv_state->calib_coeffs.C30 = (read_buffer[17] + (read_buffer[16]<<8)); + + if(drv_state->calib_coeffs.C30 > POW_2_15_MINUS_1) + drv_state->calib_coeffs.C30 = drv_state->calib_coeffs.C30 - POW_2_16; + + /* lets see which temperature diode is used for calibration and update state accordingly*/ + ret = drv_state->io->read_byte(IFX_DPS310_TMP_COEF_SRCE_REG_ADDR); + + if (ret < 0){ + return -EIO; + } + if ((ret >> IFX_DPS310_TMP_COEF_SRCE_REG_POS_MASK) & 1 ){ + drv_state->tmp_ext = TMP_EXT_MEMS; + } + else{ + drv_state->tmp_ext = TMP_EXT_ASIC; + } + return 0; +} + + +int dps310_resume(struct dps310_state *drv_state) +{ + s32 ret; + if (drv_state == NULL) + return -EINVAL; + + ret = drv_state->io->write_byte(IFX_DPS310_MEAS_CFG_REG_ADDR, + (u8)DPS310_MODE_BACKGROUND_ALL); + if (ret < 0) + return -EIO; + + drv_state->dev_mode = DPS310_MODE_BACKGROUND_ALL; + + return 0; + +} + + +int dps310_standby(struct dps310_state *drv_state) +{ + s32 ret; + if (drv_state == NULL) + return -EINVAL; + + ret = drv_state->io->write_byte(IFX_DPS310_MEAS_CFG_REG_ADDR, + (u8)DPS310_MODE_IDLE); + if (ret < 0) + return -EIO; + + drv_state->dev_mode = DPS310_MODE_IDLE; + + return 0; +} + +int dps310_config(struct dps310_state *drv_state, + dps310_osr_e osr_temp, + dps310_tmp_rate_e mr_temp, + dps310_osr_e osr_press, + dps310_pm_rate_e mr_press, + dps310_temperature_src_e temp_src) +{ + + s32 ret; + u8 config; + + if (drv_state == NULL) + return -EINVAL; + + /* configure temperature measurements first*/ + /*Prepare a configuration word for TMP_CFG register*/ + config = (u8) temp_src; + + /*First Set the TMP_RATE[2:0] -> 6:4 */ + config |= ((u8)mr_temp); + + /*Set the TMP_PRC[3:0] -> 2:0 */ + config |= ((u8)osr_temp); + + ret = drv_state->io->write_byte(IFX_DPS310_TMP_CFG_REG_ADDR, + config); + if (ret < 0) + return -EIO; + + /*Prepare a configuration word for PRS_CFG register*/ + /*First Set the PM_RATE[2:0] -> 6:4 */ + config = (u8) ( 0x00 ) | ((u8)mr_press); + + /*Set the PM_PRC[3:0] -> 3:0 */ + config |= ((u8)osr_press); + + ret = drv_state->io->write_byte(IFX_DPS310_PRS_CFG_REG_ADDR, + config); + if (ret < 0) + return -EIO; + + /* always take configuration word from state*/ + config = drv_state->cfg_word; + + /*If oversampling rate for temperature is greater than 8 times, then set TMP_SHIFT bit in CFG_REG */ + if ((u8)osr_temp > (u8) OSR_8){ + config |= (u8) IFX_DPS310_CFG_TMP_SHIFT_EN_SET_VAL; + } + + /*If oversampling rate for pressure is greater than 8 times, then set P_SHIFT bit in CFG_REG */ + if ((u8)osr_press > (u8) OSR_8){ + config |= (u8) IFX_DPS310_CFG_PRS_SHIFT_EN_SET_VAL; + } + + /* write CFG_REG */ + ret = drv_state->io->write_byte(IFX_DPS310_CFG_REG_ADDR, + config); + if (ret < 0) + return -EIO; + + /*Update state accordingly with proper scaling factors based on oversampling rates*/ + drv_state->tmp_osr_scale_coeff = dps310_get_scaling_coef(osr_temp); + + drv_state->prs_osr_scale_coeff = dps310_get_scaling_coef(osr_press); + + drv_state->press_mr = mr_press; + + drv_state->temp_mr = mr_temp; + + drv_state->temp_osr = osr_temp; + + drv_state->press_osr = osr_press; + + drv_state->tmp_ext = temp_src; + + return 0; + +} + + +int dps310_get_processed_data (struct dps310_state *drv_state, + f64 *pressure, + f64 *temperature) +{ + s32 ret; + u8 read_buffer[IFX_DPS310_PSR_TMP_READ_LEN] = {0}; + f64 press_raw; + f64 temp_raw; + + f64 temp_scaled; + f64 temp_final; + f64 press_scaled; + f64 press_final; + + if (drv_state == NULL) + return -EINVAL; + + ret = test_read_block(IFX_DPS310_PSR_TMP_READ_REG_ADDR, + IFX_DPS310_PSR_TMP_READ_LEN, + read_buffer); + + if (ret < IFX_DPS310_PSR_TMP_READ_LEN) + return -EINVAL; + + press_raw = (read_buffer[2]) + (read_buffer[1]<<8) + (read_buffer[0] <<16); + temp_raw = (read_buffer[5]) + (read_buffer[4]<<8) + (read_buffer[3] <<16); + + if(temp_raw > POW_2_23_MINUS_1){ + temp_raw = temp_raw - POW_2_24; + } + + if(press_raw > POW_2_23_MINUS_1){ + press_raw = press_raw - POW_2_24; + } + + temp_scaled = (double)temp_raw / (double) (drv_state->tmp_osr_scale_coeff); + + temp_final = (drv_state->calib_coeffs.C0 /2.0f) + drv_state->calib_coeffs.C1 * temp_scaled ; + + press_scaled = (double) press_raw / drv_state->prs_osr_scale_coeff; + + press_final = drv_state->calib_coeffs.C00 + + press_scaled * ( drv_state->calib_coeffs.C10 + press_scaled * + ( drv_state->calib_coeffs.C20 + press_scaled * drv_state->calib_coeffs.C30 ) ) + + temp_scaled * drv_state->calib_coeffs.C01 + + temp_scaled * press_scaled * ( drv_state->calib_coeffs.C11 + + press_scaled * drv_state->calib_coeffs.C21 ); + + press_final = press_final * 0.01f; //to convert it into mBar + + *temperature = temp_final; + *pressure = press_final; //press_final; + + return 0; +} + +int dps310_init(struct dps310_state *drv_state, dps310_bus_connection *io) +{ + s32 ret; + + if (!drv_state){ + return -EINVAL; + } + + if (!io){ + return -EINVAL; + } + + drv_state->cfg_word = 0; + drv_state->enable = 0; + + /*first verify chip by reading product and rev id*/ + ret = io->read_byte(IFX_DPS310_PROD_REV_ID_REG_ADDR); + + if (ret < 0){ + ret = -EIO; + goto err_handler_iio; + } + + if (ret != IFX_DSPS310_PROD_REV_ID_VAL){ + ret = -EINVAL; + goto err_handler_iio; + } + + /* attach bus connection instance to state*/ + drv_state->io = io; + + /* from here wait for about 40ms till calibration coefficients become available*/ + if (drv_state->io->delayms != NULL) + drv_state->io->delayms(40); + + /* read now the calibration coeffs, temperature coef source and store in driver state*/ + ret = dps310_read_calib_coeffs(drv_state); + + if (ret < 0){ + goto err_handler_iio; + } + + /* Now apply ADC Temperature gain settings*/ + /* First write valid signature on 0x0e and 0x0f + * to unlock address 0x62 */ + drv_state->io->write_byte((u8)0x0e,(u8)0xa5); + drv_state->io->write_byte((u8)0x0f,(u8)0x96); + /*Then update high gain value for Temperature*/ + drv_state->io->write_byte((u8)0x62,(u8)0x02); + + /*Finally lock back the location 0x62*/ + drv_state->io->write_byte((u8)0x0e,(u8)0x00); + drv_state->io->write_byte((u8)0x0f,(u8)0x00); + + + /* configure sensor for default ODR settings*/ + ret = dps310_config(drv_state, + IFX_DPS310_TEMPERATURE_OSR, + IFX_DPS310_TEMPERATURE_MR, + IFX_DPS310_PRESSURE_OSR, + IFX_DPS310_PRESSURE_MR, + drv_state->tmp_ext); + if (ret < 0){ + goto err_handler_iio; + } + + /* activate sensor*/ + ret = dps310_resume(drv_state); + if (ret < 0){ + goto err_handler_iio; + } + + return 0; + +err_handler_iio: + return ret; + +} diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps310.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps310.h" new file mode 100644 index 0000000..343374a --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps310.h" @@ -0,0 +1,341 @@ +/* + * Copyright (c) 2015-2016 Infineon Technologies AG + * + * Driver for Infineon DPS310 Digital Barometric Pressure Sensor + * + * + */ + +#ifndef DPS310_H_INCLUDED +#define DPS310_H_INCLUDED + +/* Attributes: Product identification and version */ + +#define VENDOR_NAME "Infineon" +#define DRIVER_NAME "IFXDD" +#define DEVICE_NAME "Digital Barometric Pressure Sensor" +#define DEVICE_MODEL_NAME "DPS310" +#define DEVICE_HW_VERSION 1.0 +#define DRIVER_VERSION 1.0 +#define DEVICE_PROD_REV_ID 0x10 + +/* Attributes: Device performance :Pressure Sensing */ +#define IFX_DPS310_PROD_REV_ID_REG_ADDR 0x0D +#define IFX_DPS310_PROD_REV_ID_LEN 1 +#define IFX_DSPS310_PROD_REV_ID_VAL DEVICE_PROD_REV_ID + +#define IFX_DPS310_SOFT_RESET_REG_ADDR 0x0C +#define IFX_DPS310_SOFT_RESET_REG_DATA 0x09 +#define IFX_DPS310_SOFT_RESET_REG_LEN 1 +#define IFX_DPS310_SOFT_RESET_VERIFY_REG_ADDR 0x06 + +#define IFX_DPS310_COEF_REG_ADDR 0x10 +#define IFX_DPS310_COEF_LEN 18 // Length in bytes + +#define IFX_DPS310_TMP_COEF_SRCE_REG_ADDR 0x28 +#define IFX_DPS310_TMP_COEF_SRCE_REG_LEN 1 // Length in bytes +#define IFX_DPS310_TMP_COEF_SRCE_REG_POS_MASK 7 // Length in bytes + +#define IFX_DPS310_PSR_TMP_READ_REG_ADDR 0x00 +#define IFX_DPS310_PSR_TMP_READ_LEN 6 + +#define IFX_DPS310_PRS_CFG_REG_ADDR 0x06 +#define IFX_DPS310_PRS_CFG_REG_LEN 1 + +#define IFX_DPS310_TMP_CFG_REG_ADDR 0x07 +#define IFX_DPS310_TMP_CFG_REG_LEN 1 + +#define IFX_DPS310_MEAS_CFG_REG_ADDR 0x08 +#define IFX_DPS310_MEAS_CFG_REG_LEN 1 + +#define IFX_DPS310_CFG_REG_ADDR 0x09 +#define IFX_DPS310_CFG_REG_LEN 1 + +#define IFX_DPS310_CFG_TMP_SHIFT_EN_SET_VAL 0x08 +#define IFX_DPS310_CFG_PRS_SHIFT_EN_SET_VAL 0x04 + + +#define IFX_DPS310_FIFO_READ_REG_ADDR 0x00 +#define IFX_DPS310_FIFO_REG_READ_LEN 3 +#define IFX_DPS310_FIFO_BYTES_PER_ENTRY 3 + +#define IFX_DPS310_FIFO_FLUSH_REG_ADDR 0x0C +#define IFX_DPS310_FIFO_FLUSH_REG_VAL 0b1000000U + +#define IFX_DPS310_CFG_SPI_MODE_POS 0 +#define IFX_DPS310_CFG_SPI_MODE_3_WIRE_VAL 1 +#define IFX_DPS310_CFG_SPI_MODE_4_WIRE_VAL 0 + +#define IFX_DPS310_CFG_FIFO_ENABLE_POS 1 +#define IFX_DPS310_CFG_FIFO_ENABLE_VAL 1 +#define IFX_DPS310_CFG_FIFO_DISABLE_VAL 0 + +#define IFX_DPS310_CFG_INTR_PRS_ENABLE_POS 4 +#define IFX_DPS310_CFG_INTR_PRS_ENABLE_VAL 1U +#define IFX_DPS310_CFG_INTR_PRS_DISABLE_VAL 0U + +#define IFX_DPS310_CFG_INTR_TEMP_ENABLE_POS 5 +#define IFX_DPS310_CFG_INTR_TEMP_ENABLE_VAL 1U +#define IFX_DPS310_CFG_INTR_TEMP_DISABLE_VAL 0U + +#define IFX_DPS310_CFG_INTR_FIFO_FULL_ENABLE_POS 6 +#define IFX_DPS310_CFG_INTR_FIFO_FULL_ENABLE_VAL 1U +#define IFX_DPS310_CFG_INTR_FIFO_FULL_DISABLE_VAL 0U + +#define IFX_DPS310_CFG_INTR_LEVEL_TYP_SEL_POS 7 +#define IFX_DPS310_CFG_INTR_LEVEL_TYP_ACTIVE_H 1U +#define IFX_DPS310_CFG_INTR_LEVEL_TYP_ACTIVE_L 0U + +#define IFX_DPS310_INTR_SOURCE_PRESSURE 0 +#define IFX_DPS310_INTR_SOURCE_TEMPERATURE 1 +#define IFX_DPS310_INTR_SOURCE_BOTH 2 + +#define IFX_DPS310_INTR_STATUS_REG_ADDR 0x0A +#define IFX_DPS310_INTR_STATUS_REG_LEN 1 +#define IFX_DPS310_INTR_DISABLE_ALL (uint8_t)0b10001111 + +#define EINVAL 1 +#define EIO 2 + +#ifndef NULL +#define NULL ((void*)0) +#endif // NULL + + +/* _______________________________________________________ */ + +#define POW_2_23_MINUS_1 0x7FFFFF //implies 2^23-1 +#define POW_2_24 0x1000000 +#define POW_2_15_MINUS_1 0x7FFF +#define POW_2_16 0x10000 +#define POW_2_11_MINUS_1 0x7FF +#define POW_2_12 0x1000 +#define POW_2_20 0x100000 +#define POW_2_19_MINUS_1 524287 + +/* _______________________________________________________ */ + +/*Some aliases*/ +typedef unsigned char u8; + +typedef char s8; + +typedef unsigned short u16; + +typedef short s16; + +typedef long s32; + +typedef long long s64; + +//typedef unsigned long u32; + +typedef unsigned long long u64; + +typedef float f32; + +typedef double f64; + +typedef u8 bool; + +#define false 0 +#define true 1 + +/* Struct to hold calibration coefficients read from device*/ +typedef struct +{ + /* calibration registers */ + + s16 C0; // 12bit + s16 C1; // 12bit + s32 C00; // 20bit + s32 C10; // 20bit + s16 C01; // 16bit + s16 C11; // 16bit + s16 C20; // 16bit + s16 C21; // 16bit + s16 C30; // 16bit + +}dps310_cal_coeff_regs_s; + + +/* enum for seeting/getting device operating mode*/ + +typedef enum + {DPS310_MODE_IDLE = 0, + DPS310_MODE_COMMAND_PRESSURE = 1, + DPS310_MODE_COMMAND_TEMPERATURE = 2, + DPS310_MODE_BACKGROUND_PRESSURE = 5, + DPS310_MODE_BACKGROUND_TEMPERATURE = 6, + DPS310_MODE_BACKGROUND_ALL = 7 + +}dps310_operating_modes_e; + + + +/* enum of scaling coefficients either Kp or Kt*/ +typedef enum +{ + OSR_SF_1 = 524288, + OSR_SF_2 = 1572864, + OSR_SF_4 = 3670016, + OSR_SF_8 = 7864320, + OSR_SF_16 = 253952, + OSR_SF_32 = 516096, + OSR_SF_64 = 1040384, + OSR_SF_128 = 2088960 + +} dps310_scaling_coeffs_e; + + + +/* enum of oversampling rates for pressure and temperature*/ +typedef enum +{ + OSR_1 = 0, + OSR_2 = 1, + OSR_4 = 2, + OSR_8 = 3, + OSR_16 = 4, + OSR_32 = 5, + OSR_64 = 6, + OSR_128 = 7 + +} dps310_osr_e; + + + +/* enum of measurement rates for pressure*/ + +typedef enum +{ + PM_MR_1 = 0, + PM_MR_2 = 0x10, + PM_MR_4 = 0x20, + PM_MR_8 = 0x30, + PM_MR_16 = 0x40, + PM_MR_32 = 0x50, + PM_MR_64 = 0x60, + PM_MR_128 = 0x70 + +} dps310_pm_rate_e; + + + +/* enum of measurement rates for temperature*/ + +typedef enum +{ + TMP_MR_1 = 0, + TMP_MR_2 = 0x10, + TMP_MR_4 = 0x20, + TMP_MR_8 = 0x30, + TMP_MR_16 = 0x40, + TMP_MR_32 = 0x50, + TMP_MR_64 = 0x60, + TMP_MR_128 = 0x70 + +} dps310_tmp_rate_e; + +/* enum of oversampling and measurement rates*/ + +typedef enum + +{ + TMP_EXT_ASIC = 0x00, + TMP_EXT_MEMS = 0x80, + +}dps310_temperature_src_e; + + +/*Please update callbacks for bus communication +* callbacks are protocol agnostic/abstract so +* as to wrap around I2C or SPI low level protocols +*/ + +typedef struct { + + /*Provide a wrapper for single byte read/write and multi byte read + * all callbacks return negative values to indicate error + * however, read_byte must return the content in case of successful read + * and read_block shall return number of bytes read successfully + * For write_byte non zero return value shall indicate successful write + */ + s16 (*read_byte)(u8 address); + + s16 (*read_block)(u8 address, u8 length, u8 *read_buffer); + + s16 (*write_byte)(u8 address, u8 data); + + /*It is expected to provide a wrapper for incorporating delay + * the delay shall be in milliseconds. This is required as + * after powering up the sensor, it takes 40ms until fused + * calibration coefficients are ready to read. + * in case this delay is handled appropriately by caller by other mechanism + * please set this callback to NULL + */ + void (*delayms)(u8 duration); + +}dps310_bus_connection; + + +struct dps310_state { + + dps310_scaling_coeffs_e tmp_osr_scale_coeff; /* Temperature scaling coefficient*/ + dps310_scaling_coeffs_e prs_osr_scale_coeff; /* Pressure scaling coefficient*/ + dps310_cal_coeff_regs_s calib_coeffs; /* Calibration coefficients index */ + dps310_operating_modes_e dev_mode; /* Current operating mode of device */ + dps310_pm_rate_e press_mr; /* Current measurement readout rate (ODR) for pressure */ + dps310_tmp_rate_e temp_mr; /* Current measurement readout rate (ODR) for temperature */ + dps310_osr_e temp_osr; /* Current oversampling rate (OSR) for temperature */ + dps310_osr_e press_osr; /* Current oversampling rate (OSR) for pressure */ + dps310_temperature_src_e tmp_ext; /* Temperature ASIC or MEMS. Should always be set MEMS*/ + u8 cfg_word; /* Keep the contents of CFG register as it gets configured + to avoid excessive bus transactions */ + bool enable; + dps310_bus_connection *io; /*To access bus communication call backs */ +}; + + +/* public function prototypes */ +int +dps310_init +( + struct dps310_state *drv_state, + dps310_bus_connection *io +); + + +int dps310_get_processed_data +( + struct dps310_state *drv_state, + f64 *pressure, + f64 *temperature + ); + + +int +dps310_config +( + struct dps310_state *drv_state, + dps310_osr_e osr_temp, + dps310_tmp_rate_e mr_temp, + dps310_osr_e osr_press, + dps310_pm_rate_e mr_press, + dps310_temperature_src_e temp_src + ); + +int +dps310_standby +( + struct dps310_state *drv_state +); + +int +dps310_resume +( + struct dps310_state *drv_state +); + + +#endif // DPS310_H_INCLUDED diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps368_test.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps368_test.c" new file mode 100644 index 0000000..0344486 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dps368_test.c" @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015-2016 Infineon Technologies AG + * + * Driver for Infineon DPS310 Digital Barometric Pressure Sensor + * + * + */ +#include <stdio.h> +#include <stdlib.h> +#include "dps310.h" + +#include "lis3dh_driver.h" +/*bus communication protocol stubs +* Please wrap around platform specific implementation +* for low level bus handling (I2C or SPI), that matches +* prototypes provided by dps310_bus_connection structure +* in dps310.h +*/ +void delay_us(uint32_t nTimer); +/* Should return -1 in case of failure otherwise valid contents*/ +s16 test_read_byte(u8 ReadAddr) +{ + + uint8_t temp=0; + IIC2_Start(); + IIC2_Send_Byte(0xee); //发送写命令 + IIC2_Wait_Ack(); + IIC2_Send_Byte(ReadAddr); //发送读地址 + IIC2_Wait_Ack(); + IIC2_Start(); + IIC2_Send_Byte(0xef); //发送读命令,进入接收模式 + IIC2_Wait_Ack(); + temp=IIC2_Read_Byte(0); + IIC2_Stop(); //产生一个停止条件 + return temp; +} + +/* Should return -1 or negative value in case of failure otherwise length of +* read contents in read_buffer +* and shall place read contents in read_buffer +*/ +s16 test_read_block(u8 ReadAddr, u8 Len, u8 *read_buffer) +{ + uint8_t t; + uint32_t temp=0; + for(t=0;t<Len;t++) + { + *read_buffer=test_read_byte(ReadAddr+t); + read_buffer++; + } + //return temp; + return Len; +} + +/* Should return -1 in case of failure otherwise non negative number*/ +s16 test_write_byte(u8 WriteAddr, u8 DataToWrite) +{ + IIC2_Start(); + IIC2_Send_Byte(0xee); //发送写命令 + IIC2_Wait_Ack(); + IIC2_Send_Byte(WriteAddr); //发送地址 + IIC2_Wait_Ack(); + IIC2_Send_Byte(DataToWrite); //发送字节 + IIC2_Wait_Ack(); + IIC2_Stop();//产生一个停止条件 + delay_us(10); +} + +/* Shall implement delay in milliseconds*/ +void test_wait_ms(u8 delay) +{ + printf("Waiting for %dms\n",delay); +} +struct dps310_state drv_state; +f64 pressure,temperature; +int BarInit(void) +{ + + /*Instantiate driver state*/ + + + /*Instantiate bus connection callback holder*/ + dps310_bus_connection cnn; + IIC2_Init(); + /* Assign/register platform specific bus handlers*/ + cnn.read_byte=&test_read_byte; + cnn.read_block=&test_read_block; + cnn.write_byte=&test_write_byte; + cnn.delayms = &test_wait_ms; + int ret = dps310_init(&drv_state,&cnn); + + // ret = dps310_get_processed_data(&drv_state,&pressure,&temperature); + return ret; +} +float Height; +float GetPressAndHeight(void) +{ u8 ret; + + + /*Instantiate driver state*/ + + ret = dps310_get_processed_data(&drv_state,&pressure,&temperature); + Height = 44330 * (1.0 - pow((pressure / 1013.25), (1 / 5.255))); + + return Height; + //height=PressToHeight(pressure,temperature); + // printf("get_processed_data ret val = %d, pressure = %lf, temp = %lf\n",ret,pressure,temperature); + } \ No newline at end of file diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.c" index d04ee55..dba856a 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.c" @@ -16,6 +16,12 @@ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); + + GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_SET); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOB, &GPIO_InitStructure); } void GPIO_Toggle(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/lis3dh_driver.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/lis3dh_driver.c" new file mode 100644 index 0000000..bba165e --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/lis3dh_driver.c" @@ -0,0 +1,1995 @@ +/******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** +* File Name : LIS3DH_driver.c +* Author : MSH Application Team +* Author : Fabio Tota +* Version : $Revision:$ +* Date : $Date:$ +* Description : LIS3DH driver file +* +* HISTORY: +* Date | Modification | Author +* 24/06/2011 | Initial Revision | Fabio Tota +* 11/06/2012 | Support for multiple drivers in the same program | Abhishek Anand + +******************************************************************************** +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. +* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +* THIS SOFTWARE IS SPECIFICALLY DESIGNED FOR EXCLUSIVE USE WITH ST PARTS. +* +*******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ + +#include "lis3dh_driver.h" +#include "stdlib.h" +#include "math.h" +#include "stm32f10x_it.h" +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +//int main(void) +//{ +// delay_init(); //延时函数初始化 +// uart_init(115200); //串口初始化为115200 +// IIC2_Init(); +// delay_ms(100); +// while(1) +// { +// LIS3DH_Data_Init(); +// delay_ms(1000); +// } +// +//} +//void delay_us(uint32_t nTimer) +//{ +// uint32_t i=0; +// for(i=0;i<nTimer;i++){ +// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); +// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); +// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); +// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); +// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); +// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); +// __NOP();__NOP();__NOP();__NOP(); +// } +//} +AxesRaw_t lis2dhdata; + +//OLED初始化IIC +void IIC2_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + SDA_1; + SCL_1; + GPIO_InitStructure.GPIO_Pin = SDA_Pin|SCL_Pin; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOB, &GPIO_InitStructure); +} + + +void LIS3DH_Data_Init() +{ + //uint8_t buffer[26]; + + uint8_t lisid,response; + uint8_t lisidtemp; + + LIS3DH_WriteReg(LIS3DH_CTRL_REG1, 0x37); /* CTRL_REG1(20h): ??sensor,???????? ODR 25HZ */ + LIS3DH_WriteReg(LIS3DH_CTRL_REG2, 0x03); /* CTRL_REG2(21h): IA1?IA2 ?????? bc */ + + LIS3DH_WriteReg(LIS3DH_CTRL_REG3, 0x40); /* CTRL_REG3(22h): 0x80 ???????INT_1 INT_2 */ + LIS3DH_WriteReg(LIS3DH_CTRL_REG4, 0x08); /* CTRL_REG4(23h): ???,????,???+/-2G,?????? */ + LIS3DH_WriteReg(LIS3DH_INT1_CFG, 0xaa); /* INT1_CFG(30h): ??,6D X/Y/Z???????? */ + +// LIS3DH_WriteReg(LIS3DH_INT1_THS, (uint8_t)g_com_map[IMU_THRES]); /* INT1_THS(32h): ?????? 0x10: 16*2(FS) 0x20: 32*16(FS) */ + LIS3DH_WriteReg(LIS3DH_INT1_DURATION, 0x02); /* INT1_DURATION(33h): 1LSB=1/ODR ??ODR=100HZ ??1LSB=10ms ???? 1s,??100->0x64 */ + /* Start sensor */ + LIS3DH_WriteReg(0x20, 0x5f); /* CTRL_REG1(20h): Start sensor at ODR 100Hz Low-power mode */ + // Read ID + LIS3DH_GetWHO_AM_I(&lisidtemp); +// lisid=(uint16_t)lisidtemp; +// printf("LIS3DH ID: %x \r\n",lisid); + //get Acceleration Raw data +// response=LIS3DH_GetAccAxesRaw(&data); + //print data values + delay_us(10); +// if(response==1) +// { +// +// printf("传感器原始值:x=%d, y=%d, z=%d\r\n", lis2dhdata.AXIS_X, lis2dhdata.AXIS_Y, lis2dhdata.AXIS_Z); +// printf( "处理后的加速度值Accel:[x]%dmg,[y]%dmg,[z]%dmg\r\n", +// (int16_t)((float)lis2dhdata.AXIS_X*4/65536*1000), +// (int16_t)((float)lis2dhdata.AXIS_Y*4/65536*1000), +// (int16_t)((float)lis2dhdata.AXIS_Z*4/65536*1000)); +// +// } + +} +void LIS3DH_ENTER_STY_Init() +{ + //uint8_t buffer[26]; + + uint8_t lisid,response; + uint8_t lisidtemp; + //set ODR (turn ON device) + LIS3DH_SetODR(LIS3DH_ODR_10Hz); + //set PowerMode + LIS3DH_SetMode(LIS3DH_POWER_DOWN); + //set Fullscale + LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2); + LIS3DH_SetInt2Pin(LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE); +//LIS3DH_SetTriggerInt(LIS3DH_TRIG_INT2); +// LIS3DH_WriteReg(0x34,0xff); +// LIS3DH_WriteReg(0x35,0x7f); +// LIS3DH_WriteReg(0x36,0x20); + //set axis Enable + LIS3DH_SetAxis(LIS3DH_X_DISABLE | LIS3DH_Y_DISABLE | LIS3DH_Y_DISABLE); + // Read ID + //LIS3DH_GetWHO_AM_I(&lisidtemp); +// lisid=(uint16_t)lisidtemp; +// printf("LIS3DH ID: %x \r\n",lisid); + //get Acceleration Raw data +// response=LIS3DH_GetAccAxesRaw(&data); + //print data values +// HAL_Delay(100); +// if(response==1) +// { +// +// printf("传感器原始值:x=%d, y=%d, z=%d\r\n", lis2dhdata.AXIS_X, lis2dhdata.AXIS_Y, lis2dhdata.AXIS_Z); +// printf( "处理后的加速度值Accel:[x]%dmg,[y]%dmg,[z]%dmg\r\n", +// (int16_t)((float)lis2dhdata.AXIS_X*4/65536*1000), +// (int16_t)((float)lis2dhdata.AXIS_Y*4/65536*1000), +// (int16_t)((float)lis2dhdata.AXIS_Z*4/65536*1000)); +// +// } + +} +//获取数据 +float drv_lis2dh12_get_angle(void) +{ + float acc_x, acc_y, acc_z, acc_g; + float angle_x, angle_y, angle_z, angle_xyz; + int8_t data[6]; + uint8_t i; + uint8_t lisid,response; + uint8_t lisidtemp; + //set ODR (turn ON device) + LIS3DH_SetODR(LIS3DH_ODR_100Hz); + //set PowerMode + LIS3DH_SetMode(LIS3DH_NORMAL); + //set Fullscale + LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2); + //set axis Enable + LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE); + // Read ID + LIS3DH_GetWHO_AM_I(&lisidtemp); + lisid=(uint16_t)lisidtemp; +// printf("LIS3DH ID: %x \r\n",lisid); + //get Acceleration Raw data + response=LIS3DH_GetAccAxesRaw(&lis2dhdata); + //print data values + delay_us(10); +// LIS3DH_GetAccAxesRaw(&lis2dhdata); +// for (i=0; i<6; i++) +// drv_lis2dh12_iic_read_byte(0x28 + i, data+i); + if(response==1) + { + /* x, y, z ???? */ + acc_x = abs(lis2dhdata.AXIS_X); + acc_y = abs(lis2dhdata.AXIS_Y); + acc_z = abs(lis2dhdata.AXIS_Z); + + /* ????? */ + acc_g = sqrt(pow(acc_x, 2) + pow(acc_y, 2) + pow(acc_z, 2)); + + if (acc_z > acc_g) + acc_z = acc_g; + + /* angle_z/90 = asin(acc_z/acc_g)/p/2 */ + angle_z = asin(acc_z/acc_g) * 2 / 3.14 * 90; + angle_z = 90 - angle_z; + if(angle_z < 0) + angle_z = 0; + } + return acc_g; +} + + +//产生IIC起始信号 +void IIC2_Start(void) +{ +// IIC2_SDA_OUT(); //sda线输出 + SDA_1; + delay_us(10); + SCL_1; + delay_us(10); + SDA_0;//START:when CLK is high,DATA change form high to low + delay_us(10); + SCL_0;//钳住I2C总线,准备发送或接收数据 +} +//产生IIC停止信号 +void IIC2_Stop(void) +{ +// IIC2_SDA_OUT();//sda线输出 + SCL_0; +// delay_us(10); + SDA_0;//STOP:when CLK is high DATA change form low to high + delay_us(10); + SCL_1; +// delay_us(10); + SDA_1;//发送I2C总线结束信号 + delay_us(10); + +} + +//等待应答信号到来 +//返回值:1,接收应答失败 +// 0,接收应答成功 +uint8_t IIC2_Wait_Ack(void) +{ + uint8_t ucErrTime=0; +// IIC2_SDA_IN(); //SDA设置为输入 + SDA_1; + delay_us(6); + SCL_1; + delay_us(6); + + while(IIC2_READ_SDA) + { + ucErrTime++; + if(ucErrTime>250) + { + IIC2_Stop(); + return 1; + } + } + SCL_0;//时钟输出0 + return 0; +} +//产生ACK应答 +void IIC2_Ack(void) +{ + SCL_0; +// IIC2_SDA_OUT(); + SDA_0; + delay_us(10); + SCL_1; + delay_us(10); + SCL_0; +} +//不产生ACK应答 +void IIC2_NAck(void) +{ + SCL_0; +// IIC2_SDA_OUT(); + SDA_1; + delay_us(10); + SCL_1; + delay_us(10); + SCL_0; +} + + +//IIC发送一个字节,WRITE +//返回从机有无应答 +//1,有应答 +//0,无应答 +void IIC2_Send_Byte(uint8_t txd) +{ + uint8_t t; +// IIC2_SDA_OUT(); + SCL_0;//拉低时钟开始数据传输 + for(t=0;t<8;t++) + { + if((txd&0x80)>>7) + { + SDA_1; + } + else + { + SDA_0; + } + txd <<= 1; + delay_us(10); + SCL_1; + delay_us(10); + SCL_0; + delay_us(10); + } +} + +//读1个字节,ack=1时,发送ACK,ack=0,发送nACK +uint8_t IIC2_Read_Byte(unsigned char ack) +{ + unsigned char i,receive=0; +// IIC2_SDA_IN();//SDA设置为输入 + for(i=0;i<8;i++ ) + { + SCL_0; + delay_us(10); + SCL_1; + receive<<=1; + if(IIC2_READ_SDA)receive++; + delay_us(5); + } + if (!ack) + IIC2_NAck();//发送nACK + else + IIC2_Ack(); //发送ACK + return receive; +} + +//在LIS3DH里面的指定地址开始读一字节数据 +//ReadAddr :读出的地址 +//返回值 :读出的数据 +uint8_t LIS3DH_ReadOneByte(uint16_t ReadAddr) +{ + uint8_t temp=0; + IIC2_Start(); + IIC2_Send_Byte(0X32); //发送写命令 + IIC2_Wait_Ack(); + IIC2_Send_Byte(ReadAddr); //发送读地址 + IIC2_Wait_Ack(); + IIC2_Start(); + IIC2_Send_Byte(0X33); //发送读命令,进入接收模式 + IIC2_Wait_Ack(); + temp=IIC2_Read_Byte(0); + IIC2_Stop(); //产生一个停止条件 + return temp; +} +//在LIS3DH指定地址写入一个数据 +//WriteAddr :写入数据的目的地址 +//DataToWrite:要写入的数据 +void LIS3DH_WriteOneByte(uint16_t WriteAddr,uint8_t DataToWrite) +{ + IIC2_Start(); + IIC2_Send_Byte(0X32); //发送写命令 + IIC2_Wait_Ack(); + IIC2_Send_Byte(WriteAddr); //发送地址 + IIC2_Wait_Ack(); + IIC2_Send_Byte(DataToWrite); //发送字节 + IIC2_Wait_Ack(); + IIC2_Stop();//产生一个停止条件 + delay_us(10); + +} +//在AT24CXX里面的指定地址开始写入长度为Len的数据 +//该函数用于写入16bit或者32bit的数据. +//WriteAddr :开始写入的地址 +//DataToWrite:数据数组首地址 +//Len :要写入数据的长度2,4 +void LIS3DH_WriteLenByte(uint16_t WriteAddr,uint32_t DataToWrite,uint8_t Len) +{ + uint8_t t; + for(t=0;t<Len;t++) + { + LIS3DH_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff); + } +} + +//在AT24CXX里面的指定地址开始读出长度为Len的数据 +//该函数用于读出16bit或者32bit的数据. +//ReadAddr :开始读出的地址 +//返回值 :数据 +//Len :要读出数据的长度2,4 +uint32_t LIS3DH_ReadLenByte(uint16_t ReadAddr,uint8_t Len) +{ + uint8_t t; + uint32_t temp=0; + for(t=0;t<Len;t++) + { + temp<<=8; + temp+=LIS3DH_ReadOneByte(ReadAddr+Len-t-1); + } + return temp; +} + +/******************************************************************************* +* Function Name : LIS3DH_ReadReg +* Description : Generic Reading function. It must be fullfilled with either +* : I2C or SPI reading functions +* Input : Register Address +* Output : Data REad +* Return : None +*******************************************************************************/ +uint8_t LIS3DH_ReadReg(uint8_t Reg, uint8_t* Data) { + + //To be completed with either I2c or SPI reading function + //i.e. *Data = SPI_Mems_Read_Reg( Reg ); + *Data = LIS3DH_ReadOneByte(Reg); + return 1; +} + + +/******************************************************************************* +* Function Name : LIS3DH_WriteReg +* Description : Generic Writing function. It must be fullfilled with either +* : I2C or SPI writing function +* Input : Register Address, Data to be written +* Output : None +* Return : None +*******************************************************************************/ +uint8_t LIS3DH_WriteReg(uint8_t WriteAddr, uint8_t Data) { + + //To be completed with either I2c or SPI writing function + //i.e. SPI_Mems_Write_Reg(WriteAddr, Data); + LIS3DH_WriteOneByte(WriteAddr,Data); + + return 1; +} + +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************* +* Function Name : LIS3DH_GetWHO_AM_I +* Description : Read identification code by WHO_AM_I register +* Input : Char to empty by Device identification Value +* Output : None +* Return : Status [value of FSS] +*******************************************************************************/ +status_t LIS3DH_GetWHO_AM_I(uint8_t* val){ + + if( !LIS3DH_ReadReg(LIS3DH_WHO_AM_I, val) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + +/******************************************************************************* +* Function Name : LIS3DH_GetStatusAUX +* Description : Read the AUX status register +* Input : Char to empty by status register buffer +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetStatusAUX(uint8_t* val) { + + if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, val) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + + +/******************************************************************************* +* Function Name : LIS3DH_GetStatusAUXBIT +* Description : Read the AUX status register BIT +* Input : LIS3DH_STATUS_AUX_321OR, LIS3DH_STATUS_AUX_3OR, LIS3DH_STATUS_AUX_2OR, LIS3DH_STATUS_AUX_1OR, + LIS3DH_STATUS_AUX_321DA, LIS3DH_STATUS_AUX_3DA, LIS3DH_STATUS_AUX_2DA, LIS3DH_STATUS_AUX_1DA +* Output : None +* Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetStatusAUXBit(uint8_t statusBIT, uint8_t* val) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, &value) ) + return MEMS_ERROR; + + if(statusBIT == LIS3DH_STATUS_AUX_321OR){ + if(value &= LIS3DH_STATUS_AUX_321OR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_STATUS_AUX_3OR){ + if(value &= LIS3DH_STATUS_AUX_3OR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_STATUS_AUX_2OR){ + if(value &= LIS3DH_STATUS_AUX_2OR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_STATUS_AUX_1OR){ + if(value &= LIS3DH_STATUS_AUX_1OR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_STATUS_AUX_321DA){ + if(value &= LIS3DH_STATUS_AUX_321DA) { + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_STATUS_AUX_3DA){ + if(value &= LIS3DH_STATUS_AUX_3DA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_STATUS_AUX_2DA){ + if(value &= LIS3DH_STATUS_AUX_2DA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_STATUS_AUX_1DA){ + if(value &= LIS3DH_STATUS_AUX_1DA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + return MEMS_ERROR; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetODR +* Description : Sets LIS3DH Output Data Rate +* Input : Output Data Rate +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetODR(LIS3DH_ODR_t ov){ + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) + return MEMS_ERROR; + + value &= 0x0f; + value |= ov<<LIS3DH_ODR_BIT; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetTemperature +* Description : Sets LIS3DH Output Temperature +* Input : MEMS_ENABLE, MEMS_DISABLE +* Output : None +* Note : For Read Temperature by LIS3DH_OUT_AUX_3, LIS3DH_SetADCAux and LIS3DH_SetBDU + functions must be ENABLE +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetTemperature(State_t state){ + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) + return MEMS_ERROR; + + value &= 0xBF; + value |= state<<LIS3DH_TEMP_EN; + + if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetADCAux +* Description : Sets LIS3DH Output ADC +* Input : MEMS_ENABLE, MEMS_DISABLE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetADCAux(State_t state){ + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) + return MEMS_ERROR; + + value &= 0x7F; + value |= state<<LIS3DH_ADC_PD; + + if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetAuxRaw +* Description : Read the Aux Values Output Registers +* Input : Buffer to empty +* Output : Aux Values Registers buffer +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetAuxRaw(LIS3DH_Aux123Raw_t* buff) { + uint8_t valueL; + uint8_t valueH; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_1_L, &valueL) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_1_H, &valueH) ) + return MEMS_ERROR; + + buff->AUX_1 = (uint16_t)( (valueH << 8) | valueL )/16; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_2_L, &valueL) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_2_H, &valueH) ) + return MEMS_ERROR; + + buff->AUX_2 = (uint16_t)( (valueH << 8) | valueL )/16; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) ) + return MEMS_ERROR; + + buff->AUX_3 = (uint16_t)( (valueH << 8) | valueL )/16; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetTempRaw +* Description : Read the Temperature Values by AUX Output Registers OUT_3_H +* Input : Buffer to empty +* Output : Temperature Values Registers buffer +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetTempRaw(int8_t* buff) { + uint8_t valueL; + uint8_t valueH; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) ) + return MEMS_ERROR; + + *buff = (int8_t)( valueH ); + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetMode +* Description : Sets LIS3DH Operating Mode +* Input : Modality (LIS3DH_NORMAL, LIS3DH_LOW_POWER, LIS3DH_POWER_DOWN) +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetMode(LIS3DH_Mode_t md) { + uint8_t value; + uint8_t value2; + static uint8_t ODR_old_value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value2) ) + return MEMS_ERROR; + + if((value & 0xF0)==0) + value = value | (ODR_old_value & 0xF0); //if it comes from POWERDOWN + + switch(md) { + + case LIS3DH_POWER_DOWN: + ODR_old_value = value; + value &= 0x0F; + break; + + case LIS3DH_NORMAL: + value &= 0xF7; + value |= (MEMS_RESET<<LIS3DH_LPEN); + value2 &= 0xF7; + value2 |= (MEMS_SET<<LIS3DH_HR); //set HighResolution_BIT + break; + + case LIS3DH_LOW_POWER: + value &= 0xF7; + value |= (MEMS_SET<<LIS3DH_LPEN); + value2 &= 0xF7; + value2 |= (MEMS_RESET<<LIS3DH_HR); //reset HighResolution_BIT + break; + + default: + return MEMS_ERROR; + } + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) + return MEMS_ERROR; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value2) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetAxis +* Description : Enable/Disable LIS3DH Axis +* Input : LIS3DH_X_ENABLE/DISABLE | LIS3DH_Y_ENABLE/DISABLE | LIS3DH_Z_ENABLE/DISABLE +* Output : None +* Note : You MUST use all input variable in the argument, as example +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetAxis(LIS3DH_Axis_t axis) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) + return MEMS_ERROR; + value &= 0xF8; + value |= (0x07 & axis); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetFullScale +* Description : Sets the LIS3DH FullScale +* Input : LIS3DH_FULLSCALE_2/LIS3DH_FULLSCALE_4/LIS3DH_FULLSCALE_8/LIS3DH_FULLSCALE_16 +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetFullScale(LIS3DH_Fullscale_t fs) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) + return MEMS_ERROR; + + value &= 0xCF; + value |= (fs<<LIS3DH_FS); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetBDU +* Description : Enable/Disable Block Data Update Functionality +* Input : ENABLE/DISABLE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetBDU(State_t bdu) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) + return MEMS_ERROR; + + value &= 0x7F; + value |= (bdu<<LIS3DH_BDU); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetBLE +* Description : Set Endianess (MSB/LSB) +* Input : BLE_LSB / BLE_MSB +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetBLE(LIS3DH_Endianess_t ble) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) + return MEMS_ERROR; + + value &= 0xBF; + value |= (ble<<LIS3DH_BLE); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetSelfTest +* Description : Set Self Test Modality +* Input : LIS3DH_SELF_TEST_DISABLE/ST_0/ST_1 +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetSelfTest(LIS3DH_SelfTest_t st) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) + return MEMS_ERROR; + + value &= 0xF9; + value |= (st<<LIS3DH_ST); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_HPFClick +* Description : Enable/Disable High Pass Filter for click +* Input : MEMS_ENABLE/MEMS_DISABLE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_HPFClickEnable(State_t hpfe) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) + return MEMS_ERROR; + + value &= 0xFB; + value |= (hpfe<<LIS3DH_HPCLICK); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_HPFAOI1 +* Description : Enable/Disable High Pass Filter for AOI on INT_1 +* Input : MEMS_ENABLE/MEMS_DISABLE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_HPFAOI1Enable(State_t hpfe) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) + return MEMS_ERROR; + + value &= 0xFE; + value |= (hpfe<<LIS3DH_HPIS1); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_HPFAOI2 +* Description : Enable/Disable High Pass Filter for AOI on INT_2 +* Input : MEMS_ENABLE/MEMS_DISABLE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_HPFAOI2Enable(State_t hpfe) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) + return MEMS_ERROR; + + value &= 0xFD; + value |= (hpfe<<LIS3DH_HPIS2); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetHPFMode +* Description : Set High Pass Filter Modality +* Input : LIS3DH_HPM_NORMAL_MODE_RES/LIS3DH_HPM_REF_SIGNAL/ + LIS3DH_HPM_NORMAL_MODE/LIS3DH_HPM_AUTORESET_INT +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetHPFMode(LIS3DH_HPFMode_t hpm) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) + return MEMS_ERROR; + + value &= 0x3F; + value |= (hpm<<LIS3DH_HPM); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetHPFCutOFF +* Description : Set High Pass CUT OFF Freq +* Input : HPFCF [0,3] +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetHPFCutOFF(LIS3DH_HPFCutOffFreq_t hpf) { + uint8_t value; + + if (hpf > 3) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) + return MEMS_ERROR; + + value &= 0xCF; + value |= (hpf<<LIS3DH_HPCF); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; + +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetFilterDataSel +* Description : Set Filter Data Selection bypassed or sent to FIFO OUT register +* Input : MEMS_SET, MEMS_RESET +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetFilterDataSel(State_t state) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) + return MEMS_ERROR; + + value &= 0xF7; + value |= (state<<LIS3DH_FDS); + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; + +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetInt1Pin +* Description : Set Interrupt1 pin Function +* Input : LIS3DH_CLICK_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE/DISABLE | + LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_DRDY1_ON_INT1_ENABLE/DISABLE | + LIS3DH_I1_DRDY2_ON_INT1_ENABLE/DISABLE | LIS3DH_WTM_ON_INT1_ENABLE/DISABLE | + LIS3DH_INT1_OVERRUN_ENABLE/DISABLE +* example : SetInt1Pin(LIS3DH_CLICK_ON_PIN_INT1_ENABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE | + LIS3DH_I1_INT2_ON_PIN_INT1_DISABLE | LIS3DH_I1_DRDY1_ON_INT1_ENABLE | LIS3DH_I1_DRDY2_ON_INT1_ENABLE | + LIS3DH_WTM_ON_INT1_DISABLE | LIS3DH_INT1_OVERRUN_DISABLE ) +* Note : To enable Interrupt signals on INT1 Pad (You MUST use all input variable in the argument, as example) +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetInt1Pin(LIS3DH_IntPinConf_t pinConf) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG3, &value) ) + return MEMS_ERROR; + + value &= 0x00; + value |= pinConf; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG3, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetInt2Pin +* Description : Set Interrupt2 pin Function +* Input : LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | + LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | + LIS3DH_INT_ACTIVE_HIGH/LOW +* example : LIS3DH_SetInt2Pin(LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | + LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | + LIS3DH_INT_ACTIVE_HIGH/LOW) +* Note : To enable Interrupt signals on INT2 Pad (You MUST use all input variable in the argument, as example) +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetInt2Pin(LIS3DH_IntPinConf_t pinConf) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG6, &value) ) + return MEMS_ERROR; + + value &= 0x00; + value |= pinConf; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG6, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetClickCFG +* Description : Set Click Interrupt config Function +* Input : LIS3DH_ZD_ENABLE/DISABLE | LIS3DH_ZS_ENABLE/DISABLE | LIS3DH_YD_ENABLE/DISABLE | + LIS3DH_YS_ENABLE/DISABLE | LIS3DH_XD_ENABLE/DISABLE | LIS3DH_XS_ENABLE/DISABLE +* example : LIS3DH_SetClickCFG( LIS3DH_ZD_ENABLE | LIS3DH_ZS_DISABLE | LIS3DH_YD_ENABLE | + LIS3DH_YS_DISABLE | LIS3DH_XD_ENABLE | LIS3DH_XS_ENABLE) +* Note : You MUST use all input variable in the argument, as example +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetClickCFG(uint8_t status) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CLICK_CFG, &value) ) + return MEMS_ERROR; + + value &= 0xC0; + value |= status; + + if( !LIS3DH_WriteReg(LIS3DH_CLICK_CFG, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetClickTHS +* Description : Set Click Interrupt threshold +* Input : Click-click Threshold value [0-127] +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetClickTHS(uint8_t ths) { + + if(ths>127) + return MEMS_ERROR; + + if( !LIS3DH_WriteReg(LIS3DH_CLICK_THS, ths) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetClickLIMIT +* Description : Set Click Interrupt Time Limit +* Input : Click-click Time Limit value [0-127] +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetClickLIMIT(uint8_t t_limit) { + + if(t_limit>127) + return MEMS_ERROR; + + if( !LIS3DH_WriteReg(LIS3DH_TIME_LIMIT, t_limit) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetClickLATENCY +* Description : Set Click Interrupt Time Latency +* Input : Click-click Time Latency value [0-255] +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetClickLATENCY(uint8_t t_latency) { + + if( !LIS3DH_WriteReg(LIS3DH_TIME_LATENCY, t_latency) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetClickWINDOW +* Description : Set Click Interrupt Time Window +* Input : Click-click Time Window value [0-255] +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetClickWINDOW(uint8_t t_window) { + + if( !LIS3DH_WriteReg(LIS3DH_TIME_WINDOW, t_window) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetClickResponse +* Description : Get Click Interrupt Response by CLICK_SRC REGISTER +* Input : char to empty by Click Response Typedef +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetClickResponse(uint8_t* res) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CLICK_SRC, &value) ) + return MEMS_ERROR; + + value &= 0x7F; + + if((value & LIS3DH_IA)==0) { + *res = LIS3DH_NO_CLICK; + return MEMS_SUCCESS; + } + else { + if (value & LIS3DH_DCLICK){ + if (value & LIS3DH_CLICK_SIGN){ + if (value & LIS3DH_CLICK_Z) { + *res = LIS3DH_DCLICK_Z_N; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_Y) { + *res = LIS3DH_DCLICK_Y_N; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_X) { + *res = LIS3DH_DCLICK_X_N; + return MEMS_SUCCESS; + } + } + else{ + if (value & LIS3DH_CLICK_Z) { + *res = LIS3DH_DCLICK_Z_P; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_Y) { + *res = LIS3DH_DCLICK_Y_P; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_X) { + *res = LIS3DH_DCLICK_X_P; + return MEMS_SUCCESS; + } + } + } + else{ + if (value & LIS3DH_CLICK_SIGN){ + if (value & LIS3DH_CLICK_Z) { + *res = LIS3DH_SCLICK_Z_N; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_Y) { + *res = LIS3DH_SCLICK_Y_N; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_X) { + *res = LIS3DH_SCLICK_X_N; + return MEMS_SUCCESS; + } + } + else{ + if (value & LIS3DH_CLICK_Z) { + *res = LIS3DH_SCLICK_Z_P; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_Y) { + *res = LIS3DH_SCLICK_Y_P; + return MEMS_SUCCESS; + } + if (value & LIS3DH_CLICK_X) { + *res = LIS3DH_SCLICK_X_P; + return MEMS_SUCCESS; + } + } + } + } + return MEMS_ERROR; +} + + +/******************************************************************************* +* Function Name : LIS3DH_Int1LatchEnable +* Description : Enable Interrupt 1 Latching function +* Input : ENABLE/DISABLE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_Int1LatchEnable(State_t latch) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) + return MEMS_ERROR; + + value &= 0xF7; + value |= latch<<LIS3DH_LIR_INT1; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_ResetInt1Latch +* Description : Reset Interrupt 1 Latching function +* Input : None +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_ResetInt1Latch(void) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetIntConfiguration +* Description : Interrupt 1 Configuration (without LIS3DH_6D_INT) +* Input : LIS3DH_INT1_AND/OR | LIS3DH_INT1_ZHIE_ENABLE/DISABLE | LIS3DH_INT1_ZLIE_ENABLE/DISABLE... +* Output : None +* Note : You MUST use all input variable in the argument, as example +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetIntConfiguration(LIS3DH_Int1Conf_t ic) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) + return MEMS_ERROR; + + value &= 0x40; + value |= ic; + + if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetIntMode +* Description : Interrupt 1 Configuration mode (OR, 6D Movement, AND, 6D Position) +* Input : LIS3DH_INT_MODE_OR, LIS3DH_INT_MODE_6D_MOVEMENT, LIS3DH_INT_MODE_AND, + LIS3DH_INT_MODE_6D_POSITION +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetIntMode(LIS3DH_Int1Mode_t int_mode) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) + return MEMS_ERROR; + + value &= 0x3F; + value |= (int_mode<<LIS3DH_INT_6D); + + if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetInt6D4DConfiguration +* Description : 6D, 4D Interrupt Configuration +* Input : LIS3DH_INT1_6D_ENABLE, LIS3DH_INT1_4D_ENABLE, LIS3DH_INT1_6D_4D_DISABLE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetInt6D4DConfiguration(LIS3DH_INT_6D_4D_t ic) { + uint8_t value; + uint8_t value2; + + if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) + return MEMS_ERROR; + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value2) ) + return MEMS_ERROR; + + if(ic == LIS3DH_INT1_6D_ENABLE){ + value &= 0xBF; + value |= (MEMS_ENABLE<<LIS3DH_INT_6D); + value2 &= 0xFB; + value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); + } + + if(ic == LIS3DH_INT1_4D_ENABLE){ + value &= 0xBF; + value |= (MEMS_ENABLE<<LIS3DH_INT_6D); + value2 &= 0xFB; + value2 |= (MEMS_ENABLE<<LIS3DH_D4D_INT1); + } + + if(ic == LIS3DH_INT1_6D_4D_DISABLE){ + value &= 0xBF; + value |= (MEMS_DISABLE<<LIS3DH_INT_6D); + value2 &= 0xFB; + value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); + } + + if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) + return MEMS_ERROR; + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value2) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_Get6DPosition +* Description : 6D, 4D Interrupt Position Detect +* Input : Byte to empty by POSITION_6D_t Typedef +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_Get6DPosition(uint8_t* val){ + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) + return MEMS_ERROR; + + value &= 0x7F; + + switch (value){ + case LIS3DH_UP_SX: + *val = LIS3DH_UP_SX; + break; + case LIS3DH_UP_DX: + *val = LIS3DH_UP_DX; + break; + case LIS3DH_DW_SX: + *val = LIS3DH_DW_SX; + break; + case LIS3DH_DW_DX: + *val = LIS3DH_DW_DX; + break; + case LIS3DH_TOP: + *val = LIS3DH_TOP; + break; + case LIS3DH_BOTTOM: + *val = LIS3DH_BOTTOM; + break; + } + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetInt1Threshold +* Description : Sets Interrupt 1 Threshold +* Input : Threshold = [0,31] +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetInt1Threshold(uint8_t ths) { + if (ths > 127) + return MEMS_ERROR; + + if( !LIS3DH_WriteReg(LIS3DH_INT1_THS, ths) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetInt1Duration +* Description : Sets Interrupt 1 Duration +* Input : Duration value +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetInt1Duration(LIS3DH_Int1Conf_t id) { + + if (id > 127) + return MEMS_ERROR; + + if( !LIS3DH_WriteReg(LIS3DH_INT1_DURATION, id) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_FIFOModeEnable +* Description : Sets Fifo Modality +* Input : LIS3DH_FIFO_DISABLE, LIS3DH_FIFO_BYPASS_MODE, LIS3DH_FIFO_MODE, + LIS3DH_FIFO_STREAM_MODE, LIS3DH_FIFO_TRIGGER_MODE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_FIFOModeEnable(LIS3DH_FifoMode_t fm) { + uint8_t value; + + if(fm == LIS3DH_FIFO_DISABLE) { + if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) + return MEMS_ERROR; + + value &= 0x1F; + value |= (LIS3DH_FIFO_BYPASS_MODE<<LIS3DH_FM); + + if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) //fifo mode bypass + return MEMS_ERROR; + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) + return MEMS_ERROR; + + value &= 0xBF; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo disable + return MEMS_ERROR; + } + + if(fm == LIS3DH_FIFO_BYPASS_MODE) { + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) + return MEMS_ERROR; + + value &= 0xBF; + value |= MEMS_SET<<LIS3DH_FIFO_EN; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable + return MEMS_ERROR; + if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) + return MEMS_ERROR; + + value &= 0x1f; + value |= (fm<<LIS3DH_FM); //fifo mode configuration + + if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) + return MEMS_ERROR; + } + + if(fm == LIS3DH_FIFO_MODE) { + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) + return MEMS_ERROR; + + value &= 0xBF; + value |= MEMS_SET<<LIS3DH_FIFO_EN; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable + return MEMS_ERROR; + if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) + return MEMS_ERROR; + + value &= 0x1f; + value |= (fm<<LIS3DH_FM); //fifo mode configuration + + if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) + return MEMS_ERROR; + } + + if(fm == LIS3DH_FIFO_STREAM_MODE) { + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) + return MEMS_ERROR; + + value &= 0xBF; + value |= MEMS_SET<<LIS3DH_FIFO_EN; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable + return MEMS_ERROR; + if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) + return MEMS_ERROR; + + value &= 0x1f; + value |= (fm<<LIS3DH_FM); //fifo mode configuration + + if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) + return MEMS_ERROR; + } + + if(fm == LIS3DH_FIFO_TRIGGER_MODE) { + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) + return MEMS_ERROR; + + value &= 0xBF; + value |= MEMS_SET<<LIS3DH_FIFO_EN; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable + return MEMS_ERROR; + if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) + return MEMS_ERROR; + + value &= 0x1f; + value |= (fm<<LIS3DH_FM); //fifo mode configuration + + if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) + return MEMS_ERROR; + } + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetTriggerInt +* Description : Trigger event liked to trigger signal INT1/INT2 +* Input : LIS3DH_TRIG_INT1/LIS3DH_TRIG_INT2 +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetTriggerInt(LIS3DH_TrigInt_t tr) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) + return MEMS_ERROR; + + value &= 0xDF; + value |= (tr<<LIS3DH_TR); + + if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetWaterMark +* Description : Sets Watermark Value +* Input : Watermark = [0,31] +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetWaterMark(uint8_t wtm) { + uint8_t value; + + if(wtm > 31) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) + return MEMS_ERROR; + + value &= 0xE0; + value |= wtm; + + if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetStatusReg +* Description : Read the status register +* Input : char to empty by Status Reg Value +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetStatusReg(uint8_t* val) { + if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, val) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetStatusBIT +* Description : Read the status register BIT +* Input : LIS3DH_STATUS_REG_ZYXOR, LIS3DH_STATUS_REG_ZOR, LIS3DH_STATUS_REG_YOR, LIS3DH_STATUS_REG_XOR, + LIS3DH_STATUS_REG_ZYXDA, LIS3DH_STATUS_REG_ZDA, LIS3DH_STATUS_REG_YDA, LIS3DH_STATUS_REG_XDA, + LIS3DH_DATAREADY_BIT + val: Byte to be filled with the status bit +* Output : status register BIT +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetStatusBit(uint8_t statusBIT, uint8_t* val) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, &value) ) + return MEMS_ERROR; + + switch (statusBIT){ + case LIS3DH_STATUS_REG_ZYXOR: + if(value &= LIS3DH_STATUS_REG_ZYXOR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + case LIS3DH_STATUS_REG_ZOR: + if(value &= LIS3DH_STATUS_REG_ZOR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + case LIS3DH_STATUS_REG_YOR: + if(value &= LIS3DH_STATUS_REG_YOR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + case LIS3DH_STATUS_REG_XOR: + if(value &= LIS3DH_STATUS_REG_XOR){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + case LIS3DH_STATUS_REG_ZYXDA: + if(value &= LIS3DH_STATUS_REG_ZYXDA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + case LIS3DH_STATUS_REG_ZDA: + if(value &= LIS3DH_STATUS_REG_ZDA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + case LIS3DH_STATUS_REG_YDA: + if(value &= LIS3DH_STATUS_REG_YDA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + case LIS3DH_STATUS_REG_XDA: + if(value &= LIS3DH_STATUS_REG_XDA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + + } + return MEMS_ERROR; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetAccAxesRaw +* Description : Read the Acceleration Values Output Registers +* Input : buffer to empity by AxesRaw_t Typedef +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetAccAxesRaw(AxesRaw_t* buff) { + int16_t value; + uint8_t *valueL = (uint8_t *)(&value); + uint8_t *valueH = ((uint8_t *)(&value)+1); + + if( !LIS3DH_ReadReg(LIS3DH_OUT_X_L, valueL) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_X_H, valueH) ) + return MEMS_ERROR; + + buff->AXIS_X = value; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_L, valueL) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_H, valueH) ) + return MEMS_ERROR; + + buff->AXIS_Y = value; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_L, valueL) ) + return MEMS_ERROR; + + if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_H, valueH) ) + return MEMS_ERROR; + + buff->AXIS_Z = value; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetInt1Src +* Description : Reset Interrupt 1 Latching function +* Input : Char to empty by Int1 source value +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetInt1Src(uint8_t* val) { + + if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, val) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetInt1SrcBit +* Description : Reset Interrupt 1 Latching function +* Input : statusBIT: LIS3DH_INT_SRC_IA, LIS3DH_INT_SRC_ZH, LIS3DH_INT_SRC_ZL..... +* val: Byte to be filled with the status bit +* Output : None +* Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetInt1SrcBit(uint8_t statusBIT, uint8_t* val) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) + return MEMS_ERROR; + + if(statusBIT == LIS3DH_INT1_SRC_IA){ + if(value &= LIS3DH_INT1_SRC_IA){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_INT1_SRC_ZH){ + if(value &= LIS3DH_INT1_SRC_ZH){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_INT1_SRC_ZL){ + if(value &= LIS3DH_INT1_SRC_ZL){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_INT1_SRC_YH){ + if(value &= LIS3DH_INT1_SRC_YH){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_INT1_SRC_YL){ + if(value &= LIS3DH_INT1_SRC_YL){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + if(statusBIT == LIS3DH_INT1_SRC_XH){ + if(value &= LIS3DH_INT1_SRC_XH){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_INT1_SRC_XL){ + if(value &= LIS3DH_INT1_SRC_XL){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + return MEMS_ERROR; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetFifoSourceReg +* Description : Read Fifo source Register +* Input : Byte to empty by FIFO source register value +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetFifoSourceReg(uint8_t* val) { + + if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, val) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetFifoSourceBit +* Description : Read Fifo WaterMark source bit +* Input : statusBIT: LIS3DH_FIFO_SRC_WTM, LIS3DH_FIFO_SRC_OVRUN, LIS3DH_FIFO_SRC_EMPTY +* val: Byte to fill with the bit value +* Output : None +* Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_GetFifoSourceBit(uint8_t statusBIT, uint8_t* val){ + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) ) + return MEMS_ERROR; + + + if(statusBIT == LIS3DH_FIFO_SRC_WTM){ + if(value &= LIS3DH_FIFO_SRC_WTM){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + + if(statusBIT == LIS3DH_FIFO_SRC_OVRUN){ + if(value &= LIS3DH_FIFO_SRC_OVRUN){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + if(statusBIT == LIS3DH_FIFO_SRC_EMPTY){ + if(value &= statusBIT == LIS3DH_FIFO_SRC_EMPTY){ + *val = MEMS_SET; + return MEMS_SUCCESS; + } + else{ + *val = MEMS_RESET; + return MEMS_SUCCESS; + } + } + return MEMS_ERROR; +} + + +/******************************************************************************* +* Function Name : LIS3DH_GetFifoSourceFSS +* Description : Read current number of unread samples stored in FIFO +* Input : Byte to empty by FIFO unread sample value +* Output : None +* Return : Status [value of FSS] +*******************************************************************************/ +status_t LIS3DH_GetFifoSourceFSS(uint8_t* val){ + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) ) + return MEMS_ERROR; + + value &= 0x1F; + + *val = value; + + return MEMS_SUCCESS; +} + + +/******************************************************************************* +* Function Name : LIS3DH_SetSPIInterface +* Description : Set SPI mode: 3 Wire Interface OR 4 Wire Interface +* Input : LIS3DH_SPI_3_WIRE, LIS3DH_SPI_4_WIRE +* Output : None +* Return : Status [MEMS_ERROR, MEMS_SUCCESS] +*******************************************************************************/ +status_t LIS3DH_SetSPIInterface(LIS3DH_SPIMode_t spi) { + uint8_t value; + + if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) + return MEMS_ERROR; + + value &= 0xFE; + value |= spi<<LIS3DH_SIM; + + if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) + return MEMS_ERROR; + + return MEMS_SUCCESS; +} +/******************* (C) COPYRIGHT 2012 STMicroelectronics *****END OF FILE****/ + diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/lis3dh_driver.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/lis3dh_driver.h" new file mode 100644 index 0000000..49cdbae --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/lis3dh_driver.h" @@ -0,0 +1,569 @@ +/******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** +* File Name : lis3dh_driver.h +* Author : MSH Application Team +* Author : Abhishek Anand, Fabio Tota +* Version : $Revision:$ +* Date : $Date:$ +* Description : Descriptor Header for lis3dh_driver.c driver file +* +* HISTORY: +* Date | Modification | Author +* 24/06/2011 | Initial Revision | Fabio Tota +* 07/06/2012 | Support for multiple drivers in the same program | Abhishek Anand +* +******************************************************************************** +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. +* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +* THIS SOFTWARE IS SPECIFICALLY DESIGNED FOR EXCLUSIVE USE WITH ST PARTS. +* +*******************************************************************************/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __LIS3DH_DRIVER__H +#define __LIS3DH_DRIVER__H + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +#include "math.h" +#include "stdint.h" + +//#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) +//#define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) +//#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) +//#define GPIOA_ODR_Addr (GPIOA_BASE+0x14) //0x4001080C +//#define GPIOA_IDR_Addr (GPIOA_BASE+0x10) //0x40010808 + +//#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出 +//#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入 + +////IO操作函数 +//#define IIC2_SCL PAout(2) //SCL +//#define IIC2_SDA PAout(3) //SDA +//#define IIC2_READ_SDA PAin(3) //输入SDA +#define SDA_Pin GPIO_Pin_13 +#define SCL_Pin GPIO_Pin_12 + +#define IIC2_READ_SDA GPIO_ReadInputDataBit(GPIOB, SDA_Pin) +#define SDA_1 GPIO_SetBits(GPIOB, SDA_Pin) +#define SCL_1 GPIO_SetBits(GPIOB, SCL_Pin) + +#define SDA_0 GPIO_ResetBits(GPIOB, SDA_Pin) +#define SCL_0 GPIO_ResetBits(GPIOB, SCL_Pin) +//IIC所有操作函数 +void IIC2_Init(void); //初始化IIC的IO口 +uint8_t LIS3DH_WriteReg(uint8_t WriteAddr, uint8_t Data); +void IIC2_Start(void); //发送IIC开始信号 +void IIC2_Stop(void); //发送IIC停止信号 +void IIC2_Send_Byte(uint8_t txd); //IIC发送一个字节 +uint8_t IIC2_Read_Byte(unsigned char ack);//IIC读取一个字节 +uint8_t IIC2_Wait_Ack(void); //IIC等待ACK信号 +void IIC2_Ack(void); //IIC发送ACK信号 +void IIC2_NAck(void); //IIC不发送ACK信号 +float drv_lis2dh12_get_angle(void); +//these could change accordingly with the architecture +void LIS3DH_Data_Init(void); +void LIS3DH_ENTER_STY_Init(); + //初始化,并操作 +#ifndef __ARCHDEP__TYPES +#define __ARCHDEP__TYPES + +//为兼容HAL_Cube库,使用统一命名 +//typedef unsigned char uint8_t; +//typedef unsigned short int uint16_t; +//typedef short int int16_t; +//typedef signed char int8_t; + + + + +#endif /*__ARCHDEP__TYPES*/ + +typedef uint8_t LIS3DH_IntPinConf_t; +typedef uint8_t LIS3DH_Axis_t; +typedef uint8_t LIS3DH_Int1Conf_t; + + +//define structure +#ifndef __SHARED__TYPES +#define __SHARED__TYPES + +typedef enum { + MEMS_SUCCESS = 0x01, + MEMS_ERROR = 0x00 +} status_t; + +typedef enum { + MEMS_ENABLE = 0x01, + MEMS_DISABLE = 0x00 +} State_t; + +typedef struct { + int16_t AXIS_X; + int16_t AXIS_Y; + int16_t AXIS_Z; +} AxesRaw_t; + +#endif /*__SHARED__TYPES*/ + +typedef enum { + LIS3DH_ODR_1Hz = 0x01, + LIS3DH_ODR_10Hz = 0x02, + LIS3DH_ODR_25Hz = 0x03, + LIS3DH_ODR_50Hz = 0x04, + LIS3DH_ODR_100Hz = 0x05, + LIS3DH_ODR_200Hz = 0x06, + LIS3DH_ODR_400Hz = 0x07, + LIS3DH_ODR_1620Hz_LP = 0x08, + LIS3DH_ODR_1344Hz_NP_5367HZ_LP = 0x09 +} LIS3DH_ODR_t; + +typedef enum { + LIS3DH_POWER_DOWN = 0x00, + LIS3DH_LOW_POWER = 0x01, + LIS3DH_NORMAL = 0x02 +} LIS3DH_Mode_t; + +typedef enum { + LIS3DH_HPM_NORMAL_MODE_RES = 0x00, + LIS3DH_HPM_REF_SIGNAL = 0x01, + LIS3DH_HPM_NORMAL_MODE = 0x02, + LIS3DH_HPM_AUTORESET_INT = 0x03 +} LIS3DH_HPFMode_t; + +typedef enum { + LIS3DH_HPFCF_0 = 0x00, + LIS3DH_HPFCF_1 = 0x01, + LIS3DH_HPFCF_2 = 0x02, + LIS3DH_HPFCF_3 = 0x03 +} LIS3DH_HPFCutOffFreq_t; + +typedef struct { + uint16_t AUX_1; + uint16_t AUX_2; + uint16_t AUX_3; +} LIS3DH_Aux123Raw_t; + +typedef enum { + LIS3DH_FULLSCALE_2 = 0x00, + LIS3DH_FULLSCALE_4 = 0x01, + LIS3DH_FULLSCALE_8 = 0x02, + LIS3DH_FULLSCALE_16 = 0x03 +} LIS3DH_Fullscale_t; + +typedef enum { + LIS3DH_BLE_LSB = 0x00, + LIS3DH_BLE_MSB = 0x01 +} LIS3DH_Endianess_t; + +typedef enum { + LIS3DH_SELF_TEST_DISABLE = 0x00, + LIS3DH_SELF_TEST_0 = 0x01, + LIS3DH_SELF_TEST_1 = 0x02 +} LIS3DH_SelfTest_t; + +typedef enum { + LIS3DH_FIFO_BYPASS_MODE = 0x00, + LIS3DH_FIFO_MODE = 0x01, + LIS3DH_FIFO_STREAM_MODE = 0x02, + LIS3DH_FIFO_TRIGGER_MODE = 0x03, + LIS3DH_FIFO_DISABLE = 0x04 +} LIS3DH_FifoMode_t; + +typedef enum { + LIS3DH_TRIG_INT1 = 0x00, + LIS3DH_TRIG_INT2 = 0x01 +} LIS3DH_TrigInt_t; + +typedef enum { + LIS3DH_SPI_4_WIRE = 0x00, + LIS3DH_SPI_3_WIRE = 0x01 +} LIS3DH_SPIMode_t; + +typedef enum { + LIS3DH_X_ENABLE = 0x01, + LIS3DH_X_DISABLE = 0x00, + LIS3DH_Y_ENABLE = 0x02, + LIS3DH_Y_DISABLE = 0x00, + LIS3DH_Z_ENABLE = 0x04, + LIS3DH_Z_DISABLE = 0x00 +} LIS3DH_AXISenable_t; + +typedef enum { + LIS3DH_INT1_6D_4D_DISABLE = 0x00, + LIS3DH_INT1_6D_ENABLE = 0x01, + LIS3DH_INT1_4D_ENABLE = 0x02 +} LIS3DH_INT_6D_4D_t; + +typedef enum { + LIS3DH_UP_SX = 0x44, + LIS3DH_UP_DX = 0x42, + LIS3DH_DW_SX = 0x41, + LIS3DH_DW_DX = 0x48, + LIS3DH_TOP = 0x60, + LIS3DH_BOTTOM = 0x50 +} LIS3DH_POSITION_6D_t; + +typedef enum { + LIS3DH_INT_MODE_OR = 0x00, + LIS3DH_INT_MODE_6D_MOVEMENT = 0x01, + LIS3DH_INT_MODE_AND = 0x02, + LIS3DH_INT_MODE_6D_POSITION = 0x03 +} LIS3DH_Int1Mode_t; + + +//interrupt click response +// b7 = don't care b6 = IA b5 = DClick b4 = Sclick b3 = Sign +// b2 = z b1 = y b0 = x +typedef enum { +LIS3DH_DCLICK_Z_P = 0x24, +LIS3DH_DCLICK_Z_N = 0x2C, +LIS3DH_SCLICK_Z_P = 0x14, +LIS3DH_SCLICK_Z_N = 0x1C, +LIS3DH_DCLICK_Y_P = 0x22, +LIS3DH_DCLICK_Y_N = 0x2A, +LIS3DH_SCLICK_Y_P = 0x12, +LIS3DH_SCLICK_Y_N = 0x1A, +LIS3DH_DCLICK_X_P = 0x21, +LIS3DH_DCLICK_X_N = 0x29, +LIS3DH_SCLICK_X_P = 0x11, +LIS3DH_SCLICK_X_N = 0x19, +LIS3DH_NO_CLICK = 0x00 +} LIS3DH_Click_Response; + +//TODO: start from here and manage the shared macros etc before this + +/* Exported constants --------------------------------------------------------*/ + +#ifndef __SHARED__CONSTANTS +#define __SHARED__CONSTANTS + +#define MEMS_SET 0x01 +#define MEMS_RESET 0x00 + +#endif /*__SHARED__CONSTANTS*/ + + +//Register Definition +#define LIS3DH_WHO_AM_I 0x0F // device identification register + +// CONTROL REGISTER 1 +#define LIS3DH_CTRL_REG1 0x20 +#define LIS3DH_ODR_BIT BIT(4) +#define LIS3DH_LPEN BIT(3) +#define LIS3DH_ZEN BIT(2) +#define LIS3DH_YEN BIT(1) +#define LIS3DH_XEN BIT(0) + +//CONTROL REGISTER 2 +#define LIS3DH_CTRL_REG2 0x21 +#define LIS3DH_HPM BIT(6) +#define LIS3DH_HPCF BIT(4) +#define LIS3DH_FDS BIT(3) +#define LIS3DH_HPCLICK BIT(2) +#define LIS3DH_HPIS2 BIT(1) +#define LIS3DH_HPIS1 BIT(0) + +//CONTROL REGISTER 3 +#define LIS3DH_CTRL_REG3 0x22 +#define LIS3DH_I1_CLICK BIT(7) +#define LIS3DH_I1_AOI1 BIT(6) +#define LIS3DH_I1_AOI2 BIT(5) +#define LIS3DH_I1_DRDY1 BIT(4) +#define LIS3DH_I1_DRDY2 BIT(3) +#define LIS3DH_I1_WTM BIT(2) +#define LIS3DH_I1_ORUN BIT(1) + +//CONTROL REGISTER 6 +#define LIS3DH_CTRL_REG6 0x25 +#define LIS3DH_I2_CLICK BIT(7) +#define LIS3DH_I2_INT1 BIT(6) +#define LIS3DH_I2_BOOT BIT(4) +#define LIS3DH_H_LACTIVE BIT(1) + +//TEMPERATURE CONFIG REGISTER +#define LIS3DH_TEMP_CFG_REG 0x1F +#define LIS3DH_ADC_PD BIT(7) +#define LIS3DH_TEMP_EN BIT(6) + +//CONTROL REGISTER 4 +#define LIS3DH_CTRL_REG4 0x23 +#define LIS3DH_BDU BIT(7) +#define LIS3DH_BLE BIT(6) +#define LIS3DH_FS BIT(4) +#define LIS3DH_HR BIT(3) +#define LIS3DH_ST BIT(1) +#define LIS3DH_SIM BIT(0) + +//CONTROL REGISTER 5 +#define LIS3DH_CTRL_REG5 0x24 +#define LIS3DH_BOOT BIT(7) +#define LIS3DH_FIFO_EN BIT(6) +#define LIS3DH_LIR_INT1 BIT(3) +#define LIS3DH_D4D_INT1 BIT(2) + +//REFERENCE/DATA_CAPTURE +#define LIS3DH_REFERENCE_REG 0x26 +#define LIS3DH_REF BIT(0) + +//STATUS_REG_AXIES +#define LIS3DH_STATUS_REG 0x27 +#define LIS3DH_ZYXOR BIT(7) +#define LIS3DH_ZOR BIT(6) +#define LIS3DH_YOR BIT(5) +#define LIS3DH_XOR BIT(4) +#define LIS3DH_ZYXDA BIT(3) +#define LIS3DH_ZDA BIT(2) +#define LIS3DH_YDA BIT(1) +#define LIS3DH_XDA BIT(0) + +//STATUS_REG_AUX +#define LIS3DH_STATUS_AUX 0x07 + +//INTERRUPT 1 CONFIGURATION +#define LIS3DH_INT1_CFG 0x30 +#define LIS3DH_ANDOR BIT(7) +#define LIS3DH_INT_6D BIT(6) +#define LIS3DH_ZHIE BIT(5) +#define LIS3DH_ZLIE BIT(4) +#define LIS3DH_YHIE BIT(3) +#define LIS3DH_YLIE BIT(2) +#define LIS3DH_XHIE BIT(1) +#define LIS3DH_XLIE BIT(0) + +//FIFO CONTROL REGISTER +#define LIS3DH_FIFO_CTRL_REG 0x2E +#define LIS3DH_FM BIT(6) +#define LIS3DH_TR BIT(5) +#define LIS3DH_FTH BIT(0) + +//CONTROL REG3 bit mask +#define LIS3DH_CLICK_ON_PIN_INT1_ENABLE 0x80 +#define LIS3DH_CLICK_ON_PIN_INT1_DISABLE 0x00 +#define LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE 0x40 +#define LIS3DH_I1_INT1_ON_PIN_INT1_DISABLE 0x00 +#define LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE 0x20 +#define LIS3DH_I1_INT2_ON_PIN_INT1_DISABLE 0x00 +#define LIS3DH_I1_DRDY1_ON_INT1_ENABLE 0x10 +#define LIS3DH_I1_DRDY1_ON_INT1_DISABLE 0x00 +#define LIS3DH_I1_DRDY2_ON_INT1_ENABLE 0x08 +#define LIS3DH_I1_DRDY2_ON_INT1_DISABLE 0x00 +#define LIS3DH_WTM_ON_INT1_ENABLE 0x04 +#define LIS3DH_WTM_ON_INT1_DISABLE 0x00 +#define LIS3DH_INT1_OVERRUN_ENABLE 0x02 +#define LIS3DH_INT1_OVERRUN_DISABLE 0x00 + +//CONTROL REG6 bit mask +#define LIS3DH_CLICK_ON_PIN_INT2_ENABLE 0x80 +#define LIS3DH_CLICK_ON_PIN_INT2_DISABLE 0x00 +#define LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE 0x40 +#define LIS3DH_I2_INT1_ON_PIN_INT2_DISABLE 0x00 +#define LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE 0x20 +#define LIS3DH_I2_INT2_ON_PIN_INT2_DISABLE 0x00 +#define LIS3DH_I2_BOOT_ON_INT2_ENABLE 0x10 +#define LIS3DH_I2_BOOT_ON_INT2_DISABLE 0x00 +#define LIS3DH_INT_ACTIVE_HIGH 0x00 +#define LIS3DH_INT_ACTIVE_LOW 0x02 + +//INT1_CFG bit mask +#define LIS3DH_INT1_AND 0x80 +#define LIS3DH_INT1_OR 0x00 +#define LIS3DH_INT1_ZHIE_ENABLE 0x20 +#define LIS3DH_INT1_ZHIE_DISABLE 0x00 +#define LIS3DH_INT1_ZLIE_ENABLE 0x10 +#define LIS3DH_INT1_ZLIE_DISABLE 0x00 +#define LIS3DH_INT1_YHIE_ENABLE 0x08 +#define LIS3DH_INT1_YHIE_DISABLE 0x00 +#define LIS3DH_INT1_YLIE_ENABLE 0x04 +#define LIS3DH_INT1_YLIE_DISABLE 0x00 +#define LIS3DH_INT1_XHIE_ENABLE 0x02 +#define LIS3DH_INT1_XHIE_DISABLE 0x00 +#define LIS3DH_INT1_XLIE_ENABLE 0x01 +#define LIS3DH_INT1_XLIE_DISABLE 0x00 + +//INT1_SRC bit mask +#define LIS3DH_INT1_SRC_IA 0x40 +#define LIS3DH_INT1_SRC_ZH 0x20 +#define LIS3DH_INT1_SRC_ZL 0x10 +#define LIS3DH_INT1_SRC_YH 0x08 +#define LIS3DH_INT1_SRC_YL 0x04 +#define LIS3DH_INT1_SRC_XH 0x02 +#define LIS3DH_INT1_SRC_XL 0x01 + +//INT1 REGISTERS +#define LIS3DH_INT1_THS 0x32 +#define LIS3DH_INT1_DURATION 0x33 + +//INTERRUPT 1 SOURCE REGISTER +#define LIS3DH_INT1_SRC 0x31 + +//FIFO Source Register bit Mask +#define LIS3DH_FIFO_SRC_WTM 0x80 +#define LIS3DH_FIFO_SRC_OVRUN 0x40 +#define LIS3DH_FIFO_SRC_EMPTY 0x20 + +//INTERRUPT CLICK REGISTER +#define LIS3DH_CLICK_CFG 0x38 +//INTERRUPT CLICK CONFIGURATION bit mask +#define LIS3DH_ZD_ENABLE 0x20 +#define LIS3DH_ZD_DISABLE 0x00 +#define LIS3DH_ZS_ENABLE 0x10 +#define LIS3DH_ZS_DISABLE 0x00 +#define LIS3DH_YD_ENABLE 0x08 +#define LIS3DH_YD_DISABLE 0x00 +#define LIS3DH_YS_ENABLE 0x04 +#define LIS3DH_YS_DISABLE 0x00 +#define LIS3DH_XD_ENABLE 0x02 +#define LIS3DH_XD_DISABLE 0x00 +#define LIS3DH_XS_ENABLE 0x01 +#define LIS3DH_XS_DISABLE 0x00 + +//INTERRUPT CLICK SOURCE REGISTER +#define LIS3DH_CLICK_SRC 0x39 +//INTERRUPT CLICK SOURCE REGISTER bit mask +#define LIS3DH_IA 0x40 +#define LIS3DH_DCLICK 0x20 +#define LIS3DH_SCLICK 0x10 +#define LIS3DH_CLICK_SIGN 0x08 +#define LIS3DH_CLICK_Z 0x04 +#define LIS3DH_CLICK_Y 0x02 +#define LIS3DH_CLICK_X 0x01 + +//Click-click Register +#define LIS3DH_CLICK_THS 0x3A +#define LIS3DH_TIME_LIMIT 0x3B +#define LIS3DH_TIME_LATENCY 0x3C +#define LIS3DH_TIME_WINDOW 0x3D + +//OUTPUT REGISTER +#define LIS3DH_OUT_X_L 0x28 +#define LIS3DH_OUT_X_H 0x29 +#define LIS3DH_OUT_Y_L 0x2A +#define LIS3DH_OUT_Y_H 0x2B +#define LIS3DH_OUT_Z_L 0x2C +#define LIS3DH_OUT_Z_H 0x2D + +//AUX REGISTER +#define LIS3DH_OUT_1_L 0x08 +#define LIS3DH_OUT_1_H 0x09 +#define LIS3DH_OUT_2_L 0x0A +#define LIS3DH_OUT_2_H 0x0B +#define LIS3DH_OUT_3_L 0x0C +#define LIS3DH_OUT_3_H 0x0D + +//STATUS REGISTER bit mask +#define LIS3DH_STATUS_REG_ZYXOR 0x80 // 1 : new data set has over written the previous one + // 0 : no overrun has occurred (default) +#define LIS3DH_STATUS_REG_ZOR 0x40 // 0 : no overrun has occurred (default) + // 1 : new Z-axis data has over written the previous one +#define LIS3DH_STATUS_REG_YOR 0x20 // 0 : no overrun has occurred (default) + // 1 : new Y-axis data has over written the previous one +#define LIS3DH_STATUS_REG_XOR 0x10 // 0 : no overrun has occurred (default) + // 1 : new X-axis data has over written the previous one +#define LIS3DH_STATUS_REG_ZYXDA 0x08 // 0 : a new set of data is not yet avvious one + // 1 : a new set of data is available +#define LIS3DH_STATUS_REG_ZDA 0x04 // 0 : a new data for the Z-Axis is not availvious one + // 1 : a new data for the Z-Axis is available +#define LIS3DH_STATUS_REG_YDA 0x02 // 0 : a new data for the Y-Axis is not available + // 1 : a new data for the Y-Axis is available +#define LIS3DH_STATUS_REG_XDA 0x01 // 0 : a new data for the X-Axis is not available + +#define LIS3DH_DATAREADY_BIT LIS3DH_STATUS_REG_ZYXDA + + +//STATUS AUX REGISTER bit mask +#define LIS3DH_STATUS_AUX_321OR 0x80 +#define LIS3DH_STATUS_AUX_3OR 0x40 +#define LIS3DH_STATUS_AUX_2OR 0x20 +#define LIS3DH_STATUS_AUX_1OR 0x10 +#define LIS3DH_STATUS_AUX_321DA 0x08 +#define LIS3DH_STATUS_AUX_3DA 0x04 +#define LIS3DH_STATUS_AUX_2DA 0x02 +#define LIS3DH_STATUS_AUX_1DA 0x01 + +#define LIS3DH_MEMS_I2C_ADDRESS 0x33 + +//FIFO REGISTERS +#define LIS3DH_FIFO_CTRL_REG 0x2E +#define LIS3DH_FIFO_SRC_REG 0x2F + + +/* Exported macro ------------------------------------------------------------*/ + +#ifndef __SHARED__MACROS + +#define __SHARED__MACROS +#define ValBit(VAR,Place) (VAR & (1<<Place)) +#define BIT(x) ( (x) ) + +#endif /*__SHARED__MACROS*/ + +/* Exported functions --------------------------------------------------------*/ +//Sensor Configuration Functions +status_t LIS3DH_SetODR(LIS3DH_ODR_t ov); +status_t LIS3DH_SetMode(LIS3DH_Mode_t md); +status_t LIS3DH_SetAxis(LIS3DH_Axis_t axis); +status_t LIS3DH_SetFullScale(LIS3DH_Fullscale_t fs); +status_t LIS3DH_SetBDU(State_t bdu); +status_t LIS3DH_SetBLE(LIS3DH_Endianess_t ble); +status_t LIS3DH_SetSelfTest(LIS3DH_SelfTest_t st); +status_t LIS3DH_SetTemperature(State_t state); +status_t LIS3DH_SetADCAux(State_t state); + +//Filtering Functions +status_t LIS3DH_HPFClickEnable(State_t hpfe); +status_t LIS3DH_HPFAOI1Enable(State_t hpfe); +status_t LIS3DH_HPFAOI2Enable(State_t hpfe); +status_t LIS3DH_SetHPFMode(LIS3DH_HPFMode_t hpf); +status_t LIS3DH_SetHPFCutOFF(LIS3DH_HPFCutOffFreq_t hpf); +status_t LIS3DH_SetFilterDataSel(State_t state); + +//Interrupt Functions +status_t LIS3DH_SetInt1Pin(LIS3DH_IntPinConf_t pinConf); +status_t LIS3DH_SetInt2Pin(LIS3DH_IntPinConf_t pinConf); +status_t LIS3DH_Int1LatchEnable(State_t latch); +status_t LIS3DH_ResetInt1Latch(void); +status_t LIS3DH_SetIntConfiguration(LIS3DH_Int1Conf_t ic); +status_t LIS3DH_SetInt1Threshold(uint8_t ths); +status_t LIS3DH_SetInt1Duration(LIS3DH_Int1Conf_t id); +status_t LIS3DH_SetIntMode(LIS3DH_Int1Mode_t ic); +status_t LIS3DH_SetClickCFG(uint8_t status); +status_t LIS3DH_SetInt6D4DConfiguration(LIS3DH_INT_6D_4D_t ic); +status_t LIS3DH_GetInt1Src(uint8_t* val); +status_t LIS3DH_GetInt1SrcBit(uint8_t statusBIT, uint8_t* val); + +//FIFO Functions +status_t LIS3DH_FIFOModeEnable(LIS3DH_FifoMode_t fm); +status_t LIS3DH_SetWaterMark(uint8_t wtm); +status_t LIS3DH_SetTriggerInt(LIS3DH_TrigInt_t tr); +status_t LIS3DH_GetFifoSourceReg(uint8_t* val); +status_t LIS3DH_GetFifoSourceBit(uint8_t statusBIT, uint8_t* val); +status_t LIS3DH_GetFifoSourceFSS(uint8_t* val); + +//Other Reading Functions +status_t LIS3DH_GetStatusReg(uint8_t* val); +status_t LIS3DH_GetStatusBit(uint8_t statusBIT, uint8_t* val); +status_t LIS3DH_GetStatusAUXBit(uint8_t statusBIT, uint8_t* val); +status_t LIS3DH_GetStatusAUX(uint8_t* val); +status_t LIS3DH_GetAccAxesRaw(AxesRaw_t* buff); +status_t LIS3DH_GetAuxRaw(LIS3DH_Aux123Raw_t* buff); +status_t LIS3DH_GetClickResponse(uint8_t* val); +status_t LIS3DH_GetTempRaw(int8_t* val); +status_t LIS3DH_GetWHO_AM_I(uint8_t* val); +status_t LIS3DH_Get6DPosition(uint8_t* val); + +//Generic +// i.e. uint8_t LIS3DH_ReadReg(uint8_t Reg, uint8_t* Data); +// i.e. uint8_t LIS3DH_WriteReg(uint8_t Reg, uint8_t Data); + + +#endif /* __LIS3DH_H */ + +/******************* (C) COPYRIGHT 2012 STMicroelectronics *****END OF FILE****/ + + + diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" index 088b3aa..c9eaf86 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" @@ -165,7 +165,7 @@ } u16 tag_time_recv[TAG_NUM_IN_SYS]; -u8 usart_send[100],usart_send_anc[100]; +u8 usart_send[150],usart_send_anc[100]; u8 battary,button,tag_frequency,tag_slotpos; extern uint8_t g_pairstart; void tag_sleep_configuraion(void) @@ -863,8 +863,7 @@ dwt_writetxfctrl(sizeof(tx_resp_msg), 0);//设定发送长度 result = dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//延迟发送,等待接收 - battary = rx_buffer[BATTARY_IDX]; - button = rx_buffer[BUTTON_IDX]; + frame_seq_nb2 = rx_buffer[SEQUENCE_IDX]; if(result==0) { @@ -988,11 +987,6 @@ result = dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//延迟发送,等待接收 - battary = rx_buffer[BATTARY_IDX]; - button = rx_buffer[BUTTON_IDX]; - frame_seq_nb2 = rx_buffer[SEQUENCE_IDX]; - tag_frequency = rx_buffer[NEARP_TAGFREQ_INDEX]; - tag_slotpos = rx_buffer[NEARP_TAGSLOTPOS_INDEX]; if(result==0) { while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_sync_flag)///不断查询芯片状态直到接收成功或者出现错误 @@ -1074,7 +1068,7 @@ usart_send[18] = tag_slotpos; checksum = Checksum_u16(&usart_send[2],17); memcpy(&usart_send[19],&checksum,2); - UART_PushFrame(usart_send,21); + // UART_PushFrame(usart_send,21); #else memcpy(&usart_send_anc[4+6*anc_report_num],&tag_id_recv,2); memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4); @@ -1108,12 +1102,15 @@ dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); } } - +extern int32_t intheight; extern u16 synclost_count; uint32_t current_syncid=0xffffffff,synclost_timer; extern u8 flag_syncbase,waitsync_flag; u8 tagpos_rec[50],tagpos_send[50],ancidlist_num; u16 ancidlist_rec[20],ancidlist_send[20]; +u16 recnearbaselist_id[30]; +int32_t recnearbaselist_dist[30]; +int16_t rec_tagheight; void Anchor_App(void) { @@ -1218,7 +1215,8 @@ } break; case NEAR_POLL: - // GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_SET); + // GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_SET); + memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2); taglist_pos=CmpTagInList(tag_id_recv); if(taglist_pos==taglist_num) @@ -1231,10 +1229,42 @@ new_tagid=0; } tagofflinetime[taglist_pos]=0; - temp_tagpos=round((float)(sync_timer%g_com_map[COM_INTERVAL])/slottime); + temp_tagpos=round((float)(sync_timer%g_com_map[COM_INTERVAL])/slottime); tagpos_rec[(u8)temp_tagpos]=1; rec_nearbase_num=rx_buffer[NEARBASENUM_INDEX]; - + battary = rx_buffer[BATTARY_IDX]; + button = rx_buffer[BUTTON_IDX]; + frame_seq_nb2 = rx_buffer[SEQUENCE_IDX]; + tag_frequency = rx_buffer[NEARP_TAGFREQ_INDEX]; + tag_slotpos = rx_buffer[NEARP_TAGSLOTPOS_INDEX]; + ////////////////基站汇总模式数据 + memcpy(&rec_tagheight,&rx_buffer[NEARBASEID_INDEX+rec_nearbase_num*6+4],2); + memcpy(&recnearbaselist_id,&rx_buffer[NEARBASEID_INDEX],rec_nearbase_num*2); + memcpy(&recnearbaselist_dist,&rx_buffer[NEARBASEID_INDEX+rec_nearbase_num*2],rec_nearbase_num*4+4); + usart_send[2] = 0x0c;//正常模式 + usart_send[3] = 15+8*(rec_nearbase_num+1);//数据段长度 + memcpy(&usart_send[4],&tag_id_recv,2); + usart_send[6] = rx_buffer[SEQUENCE_IDX]; + usart_send[7] = rx_buffer[SEQUENCEH_IDX]; + usart_send[8] = battary; + usart_send[9] = button; + memcpy(&usart_send[10],&rec_tagheight,2); + usart_send[12] = tag_frequency; + usart_send[13] = tag_slotpos; + usart_send[14] = 0; + usart_send[15] = 0; + usart_send[16] = rec_nearbase_num+1; + memcpy(&usart_send[17],&anc_id_recv,2); + memcpy(&usart_send[19],&recnearbaselist_id,2*rec_nearbase_num); + memcpy(&usart_send[19+rec_nearbase_num*2],&recnearbaselist_dist,4*rec_nearbase_num+4); + + checksum = Checksum_u16(&usart_send[2],23+8*rec_nearbase_num); + memcpy(&usart_send[25+8*rec_nearbase_num],&checksum,2); + UART_PushFrame(usart_send,27+8*rec_nearbase_num); + + ////////////////////////////////////////////////////////////// + + GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_SET); if(anc_id_recv==dev_id) { @@ -1259,7 +1289,8 @@ // seize_anchor=1; //抢占anchor // Anchor_RecNearPoll(i); // } - +// if(tag_id_recv==0x4008) +// printf("标签高度: %d,基站高度: %d,高度差: %d. \r\n",rec_tagheight,intheight,intheight-rec_tagheight); break; default: diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h" index 411bd5b..60791e3 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.h" @@ -114,6 +114,7 @@ #define SEQUENCE_IDX 3 #define BATTARY_IDX 4 #define BUTTON_IDX 7 +#define SEQUENCEH_IDX 8 #define NEARP_TAGFREQ_INDEX 10 #define NEARP_TAGSLOTPOS_INDEX 12 //REG RESPONSE @@ -136,7 +137,7 @@ extern uint32_t g_UWB_com_interval; extern float dis_after_filter; extern LPFilter_Frac* p_Dis_Filter; //测距用的低通滤波器 -extern u8 usart_send[100],usart_send_anc[100],flag_syncbase,remotesend_state, remotetag_para[30];; +extern u8 usart_send[150],usart_send_anc[100],flag_syncbase,remotesend_state, remotetag_para[30];; void IdleTask(void); uint16_t Checksum_u16(uint8_t* pdata, uint32_t len); diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/global_param.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/global_param.c" index e659858..fcace1f 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/global_param.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/global_param.c" @@ -41,7 +41,7 @@ g_com_map[NEARSWITCH_DISTANCE_INDEX] = 0; //默认报警距离50cm g_com_map[ALARM_DISTANCE2] = 0; //默认报警距离50cm g_com_map[ALARM_DISTANCE3] = 0; //默认报警距离50cm - g_com_map[HEARTBEAT]=0; + g_com_map[HEARTBEAT]=1; g_com_map[CNT_RESTART]=0; g_com_map[CNT_REBOOT]=0; g_com_map[CNT_UPDATE]=0; diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" index 8857175..9e0215c 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" @@ -94,7 +94,7 @@ #endif OUT485_ENABLE; ComMapCheck(); - g_com_map[VERSION] = 0x0210; + g_com_map[VERSION] = 0x0211; dev_id = g_com_map[DEV_ID]; slottime=ceil((double)g_com_map[MAX_REPORT_ANC_NUM]*SLOT_SCALE)+3; max_slotpos=g_com_map[COM_INTERVAL]/slottime; @@ -136,15 +136,21 @@ * * @return none */ +extern float GetPressAndHeight(void); extern u16 synclost_count; +extern float Height; +int32_t intheight; void HeatBeat(void) { u16 checksum; + GetPressAndHeight(); + intheight = Height*100+g_com_map[MAX_REPORT_ANC_NUM]; if(synclost_count>5) { hbsend[6] = 0; }else{ hbsend[6] = 1; } + memcpy(&hbsend[7],&intheight,4); checksum = Checksum_u16(&hbsend[2],12); memcpy(&hbsend[14],&checksum,2); UART_PushFrame(hbsend,16); @@ -169,19 +175,19 @@ if(g_com_map[HEARTBEAT]&&g_com_map[DEV_ROLE]==0) HeatBeat(); } - if(flag_newsecond) - { - flag_newsecond=0; - tagpos_binary=0; - memcpy(ancidlist_send,ancidlist_rec,ancidlist_num*2); - ancidlist_num=0; - for(u8 i=0;i<max_slotpos;i++) - { - if(tagpos_rec[i]) - tagpos_binary|=1<<i; - tagpos_rec[i] = 0; - } - } +// if(flag_newsecond) +// { +// flag_newsecond=0; +// tagpos_binary=0; +// memcpy(ancidlist_send,ancidlist_rec,ancidlist_num*2); +// ancidlist_num=0; +// for(u8 i=0;i<max_slotpos;i++) +// { +// if(tagpos_rec[i]) +// tagpos_binary|=1<<i; +// tagpos_rec[i] = 0; +// } +// } if(target_time>1000) {target_time-=1000;} #ifdef USART_INTEGRATE_OUTPUT @@ -240,6 +246,7 @@ Device_Init(); Program_Init(); Dw1000_Init(); + BarInit(); delay_ms(10); Dw1000_App_Init(); /* Loop forever initiating ranging exchanges. */ -- Gitblit v1.9.3