diff --git a/app/MDK-ARM/app.uvguix.h_zha b/app/MDK-ARM/app.uvguix.h_zha
index fda7856..b153bf4 100644
--- a/app/MDK-ARM/app.uvguix.h_zha
+++ b/app/MDK-ARM/app.uvguix.h_zha
@@ -110,8 +110,8 @@
0
- 2167
- 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000E0000000C000000010000005B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C6C6962746D63696D706C2E637070000000000E6C6962746D63696D706C2E63707000000000C5D4F200FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E63707000000000FFDC7800FFFFFFFF70443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C6C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000296C6E63756261746F725F74656D70657261747572655F636F6E74726F6C5F736572766963652E68707000000000BECEA100FFFFFFFF92443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C636F6D706F6E656E745C69666C79746F705F63616E5F736C6176655F76315C69666C79746F705F63616E5F736C6176652E687070000000001569666C79746F705F63616E5F736C6176652E68707000000000F0A0A100FFFFFFFF6F443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C7A7369676E616C2E687070000000000B7A7369676E616C2E68707000000000BCA8E100FFFFFFFF59443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E687070000000000C68617264776172652E687070000000009CC1B600FFFFFFFF64443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C4D444B2D41524D5C737461727475705F73746D33326634303778782E730000000015737461727475705F73746D33326634303778782E7300000000F7B88600FFFFFFFF50443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C756D61696E2E6370700000000009756D61696E2E63707000000000D9ADC200FFFFFFFF59443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000A5C2D700FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D4334333631415C544D4334333631412E63000000000A544D4334333631412E6300000000B3A6BE00FFFFFFFF5E443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000EAD6A300FFFFFFFF62443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C6465766963655F696F5F736572766963652E63707000000000156465766963655F696F5F736572766963652E63707000000000F6FA7D00FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C5F7265735F6D616E616765722E637070000000001973746D33325F68616C5F7265735F6D616E616765722E63707000000000B5E99D00FFFFFFFF62443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C66616E5F73746174655F6D6F6E69746F722E637070000000001566616E5F73746174655F6D6F6E69746F722E637070000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC0100006600000090060000C6020000
+ 435
+ 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000002000000010000000100000059443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C626F6172645C68617264776172652E637070000000000C68617264776172652E63707000000000C5D4F200FFFFFFFF71443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C2E637070000000000D73746D33325F68616C2E63707000000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FC010000660000009006000042020000
@@ -134,7 +134,7 @@
16
- 0AFBFFFF7C00000010FFFFFF06010000
+ D600000066000000DC040000F0000000
@@ -150,7 +150,7 @@
0
16
- 0300000066000000F501000096020000
+ 0300000066000000F501000012020000
16
@@ -170,7 +170,7 @@
0
16
- 0300000066000000F501000096020000
+ 0300000066000000F501000012020000
16
@@ -450,7 +450,7 @@
0
16
- 0300000066000000F501000096020000
+ 0300000066000000F501000012020000
16
@@ -470,7 +470,7 @@
0
16
- 0300000066000000F501000096020000
+ 0300000066000000F501000012020000
16
@@ -490,7 +490,7 @@
0
16
- 00000000C702000090060000C0030000
+ 000000004302000090060000C0030000
16
@@ -530,7 +530,7 @@
0
16
- 03000000CA02000039040000A7030000
+ 03000000460200008D060000E0030000
16
@@ -1150,7 +1150,7 @@
0
16
- 0300000066000000F501000076020000
+ 0300000066000000F5010000D9010000
16
@@ -1170,7 +1170,7 @@
0
16
- 03000000CA02000039040000A7030000
+ 03000000460200008D060000E0030000
16
@@ -1190,7 +1190,7 @@
0
16
- 03000000CA02000039040000A7030000
+ 03000000460200008D060000E0030000
16
@@ -1250,7 +1250,7 @@
0
16
- 03000000CA02000039040000A7030000
+ 03000000460200008D060000E0030000
16
@@ -1270,7 +1270,7 @@
0
16
- 03000000CA02000039040000A7030000
+ 03000000460200008D060000E0030000
16
@@ -1799,14 +1799,14 @@
3312
- 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000000AFBFFFF7C00000010FFFFFF06010000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000003EFEFFFF7C00000010FFFFFF400200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF80100004F000000FC010000AF0200000100000002000010040000000100000030FDFFFFB5030000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000034FAFFFF7C0000002CFCFFFFBC020000000000004F000000F8010000AF0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000034FAFFFF3002000010FFFFFFCE0200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000AF02000090060000B30200000100000001000010040000000100000030FDFFFF96000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000034FAFFFFC002000070FEFFFFCD03000000000000B302000090060000C00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
+ 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D600000066000000DC040000F0000000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002A0200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF80100004F000000FC0100002B0200000100000002000010040000000100000030FDFFFFB5030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F801000009020000000000004F000000F80100002B0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000001A020000DC040000B80200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002B020000900600002F0200000100000001000010040000000100000037FDFFFF9D000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000000D02000090060000D7030000000000002F02000090060000C00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
59392
File
2537
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -3603,129 +3603,21 @@
0
100
- 12
-
- ..\..\src\board\libtmcimpl.cpp
- 8
- 1
- 2
- 1
-
- 0
-
-
- ..\..\src\lncubator_temperature_control_service.cpp
- 47
- 1
- 1
- 1
-
- 0
-
-
- ..\..\src\lncubator_temperature_control_service.hpp
- 21
- 1
- 2
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp
- 0
- 44
- 63
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\basic\zsignal.hpp
- 0
- 77
- 78
- 1
-
- 0
-
-
- ..\..\src\board\hardware.hpp
- 0
- 1
- 27
- 1
-
- 0
-
-
- startup_stm32f407xx.s
- 0
- 167
- 174
- 1
-
- 0
-
-
- ..\..\src\umain.cpp
- 0
- 8
- 9
- 1
-
- 0
-
+ 1
..\..\src\board\hardware.cpp
0
- 109
- 118
- 1
-
- 0
-
-
- ..\..\dep\libtrinamic\IFLYTOP-TMC-API\tmc\ic\TMC4361A\TMC4361A.c
- 0
- 248
- 260
+ 350
+ 380
1
0
- ../Core/Src/stm32f4xx_it.c
- 0
- 81
- 89
- 1
-
- 0
-
-
- ..\..\src\board\device_io_service.cpp
- 3
- 16
- 29
- 1
-
- 0
-
-
- ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp
- 14
- 265
- 297
- 1
-
- 0
-
-
- ..\..\src\board\fan_state_monitor.cpp
- 0
- 1
- 21
+ ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal.cpp
+ 27
+ 346
+ 369
1
0
diff --git a/app/MDK-ARM/app.uvoptx b/app/MDK-ARM/app.uvoptx
index 54a488e..a3d6f61 100644
--- a/app/MDK-ARM/app.uvoptx
+++ b/app/MDK-ARM/app.uvoptx
@@ -203,7 +203,7 @@
0
0
1
- ..\..\src\board\device_io_service.cpp
+ D:\workspace\project_boditech_vidas_a8000\Incubator_control_system\src\board\device_io_service.cpp
\\app\../../src/board/device_io_service.cpp\142
@@ -897,8 +897,8 @@
0
0
0
- ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp
- stm32_hal_res_manager.cpp
+ ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal.cpp
+ stm32_hal.cpp
0
0
@@ -953,18 +953,6 @@
0
0
0
- ..\..\src\board\device_io_service.cpp
- device_io_service.cpp
- 0
- 0
-
-
- 6
- 42
- 8
- 0
- 0
- 0
..\..\src\board\fan_state_monitor.cpp
fan_state_monitor.cpp
0
@@ -972,7 +960,7 @@
6
- 43
+ 42
8
0
0
@@ -982,18 +970,6 @@
0
0
-
- 6
- 44
- 8
- 0
- 0
- 0
- ..\..\src\board\libtmcimpl.cpp
- libtmcimpl.cpp
- 0
- 0
-
@@ -1004,7 +980,7 @@
0
7
- 45
+ 43
1
0
0
@@ -1016,7 +992,7 @@
7
- 46
+ 44
1
0
0
@@ -1028,7 +1004,7 @@
7
- 47
+ 45
1
0
0
@@ -1040,7 +1016,7 @@
7
- 48
+ 46
1
0
0
@@ -1052,7 +1028,7 @@
7
- 49
+ 47
8
0
0
@@ -1064,7 +1040,7 @@
7
- 50
+ 48
1
0
0
@@ -1076,7 +1052,7 @@
7
- 51
+ 49
1
0
0
@@ -1088,7 +1064,7 @@
7
- 52
+ 50
8
0
0
@@ -1100,7 +1076,7 @@
7
- 53
+ 51
8
0
0
@@ -1112,7 +1088,7 @@
7
- 54
+ 52
8
0
0
@@ -1124,19 +1100,7 @@
7
- 55
- 8
- 0
- 0
- 0
- ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_utils.cpp
- stm32_hal_utils.cpp
- 0
- 0
-
-
- 7
- 56
+ 53
1
0
0
diff --git a/app/MDK-ARM/app.uvprojx b/app/MDK-ARM/app.uvprojx
index 3020990..c23f246 100644
--- a/app/MDK-ARM/app.uvprojx
+++ b/app/MDK-ARM/app.uvprojx
@@ -1196,9 +1196,9 @@
..\..\dep\libiflytop_micro\stm32\basic\basic.c
- stm32_hal_res_manager.cpp
+ stm32_hal.cpp
8
- ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp
+ ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal.cpp
iflytop_can_slave.cpp
@@ -1221,11 +1221,6 @@
..\..\src\lncubator_temperature_control_service.cpp
- device_io_service.cpp
- 8
- ..\..\src\board\device_io_service.cpp
-
-
fan_state_monitor.cpp
8
..\..\src\board\fan_state_monitor.cpp
@@ -1235,11 +1230,6 @@
8
..\..\src\board\hardware.cpp
-
- libtmcimpl.cpp
- 8
- ..\..\src\board\libtmcimpl.cpp
-
@@ -1296,11 +1286,6 @@
..\..\dep\libiflytop_micro\stm32\basic\zsignal.cpp
- stm32_hal_utils.cpp
- 8
- ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_utils.cpp
-
-
pid_ctrl.c
1
..\..\dep\libiflytop_micro\stm32\component\pid\pid_ctrl.c
diff --git a/dep/libiflytop_micro b/dep/libiflytop_micro
index 160fa66..ffc78e8 160000
--- a/dep/libiflytop_micro
+++ b/dep/libiflytop_micro
@@ -1 +1 @@
-Subproject commit 160fa668ad40f8abac72d2634ee54fa4f3ad9188
+Subproject commit ffc78e8dc163fe8baea44325f3aeaca9ee05c146
diff --git a/src/board/device_io_service.cpp b/src/board/device_io_service.cpp
deleted file mode 100644
index e19efe2..0000000
--- a/src/board/device_io_service.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-#include "device_io_service.hpp"
-
-#include "libiflytop_micro/stm32/basic/stm32_hal_utils.hpp"
-#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp"
-#include "project_board.hpp"
-#define TAG "DEVICE_IO_SERVICE"
-extern "C" {
-int fputc(int ch, FILE *stream) {
- uint8_t c = ch;
- HAL_UART_Transmit(&DEBUG_UART, &c, 1, 100);
- return ch;
-}
-}
-
-using namespace iflytop;
-namespace iflytop {}
-void DeviceIoService::initialize() { //
- // STM32_HAL.connect(this, &DeviceIoService::onGPIO_EXTI_Callback);
-}
-
-void DeviceIoService::onGPIO_EXTI_Callback(uint16_t gpioNum) {
- /**
- * @brief 赋予盘零位光电触发
- */
- if (gpioNum == TMC_HOME_REF_GPIO_PIN) {
- if (STM32_HAL_GPIO_IS_THIS_PIN_TRIGGER_IRQ(TMC_HOME_REF_GPIO)) {
- onHomeRefSwitch.trigger();
- }
- }
-}
-
-void DeviceIoService::debug_light_init() {
- STM32_HAL.gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
-}
-
-void DeviceIoService::fanInit(int freq) {
- STM32_HAL.setPWMFreq(&htim2, freq); // fan0->fan3
- STM32_HAL.setPWMFreq(&htim4, freq); // fan4
- STM32_HAL.setPWMFreq(&htim8, freq); // fan5
-
- // fan0 fan1 fan2 fan3
- STM32_HAL.gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
- // fan4
- STM32_HAL.gpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
- // fan5
- STM32_HAL.gpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
-}
-
-void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
- if (fanIndex > 5) {
- while (1) {
- ZLOGE(TAG, "fanIndex is out of range!");
- }
- }
-
- if (fanIndex <= 3) {
- STM32_HAL.setPWMDuty(&htim2, TIM_CHANNEL_2, dutyCycle);
- m_fanState[0] = dutyCycle > 0;
- m_fanState[1] = dutyCycle > 0;
- m_fanState[2] = dutyCycle > 0;
- m_fanState[3] = dutyCycle > 0;
-
- if (dutyCycle > 0) {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
- } else {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
- }
-
- } else if (fanIndex == 4) {
- STM32_HAL.setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle);
- m_fanState[4] = dutyCycle > 0;
-
- if (dutyCycle > 0) {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
- } else {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
- }
- } else if (fanIndex == 5) {
- STM32_HAL.setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle);
- m_fanState[5] = dutyCycle > 0;
-
- if (dutyCycle > 0) {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
- } else {
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
- }
- }
-}
-bool *DeviceIoService::fanGetPowerState(int fanIndex) {
- if (fanIndex >= 5) {
- while (1) {
- ZLOGE(TAG, "fanIndex is out of range!");
- }
- }
- return &m_fanState[fanIndex];
-}
-void DeviceIoService::fanSetState0to3(uint16_t dutyCycle) { fanSetDutyCycle(0, dutyCycle); }
-void DeviceIoService::fanSetState4(uint16_t dutyCycle) { fanSetDutyCycle(4, dutyCycle); }
-void DeviceIoService::fanSetState5(uint16_t dutyCycle) { fanSetDutyCycle(5, dutyCycle); }
-
-/*******************************************************************************
- * 帕尔贴驱动电路 *
- *******************************************************************************/
-void DeviceIoService::peltier_cold_ctr_pwm(int pwm) {
- __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm);
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
-}
-// PB0 HOT_CTR_PWM0
-void DeviceIoService::peltier_hot_ctr_pwm(int pwm) {
- __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, pwm);
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
-}
-void DeviceIoService::peltier_init() { //
- STM32_HAL.gpioInit(GPIOB, GPIO_PIN_1, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
- STM32_HAL.gpioInit(GPIOE, GPIO_PIN_10, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
-}
-void DeviceIoService::peltier_set_pwm(int pwm) {
- /**
- * @brief
- *
- * 待机状态
- * HOT_CTR_PWM0(AL) = 0
- * HOT_CTR(AH) = 0
- * COLD_CTR_PWM0(BL) = 0
- * COLD_CTR(BH) = 0
- * 加热时
- * HOT_CTR_PWM0(AL) = 1(PWM)
- * HOT_CTR(AH) = 0
- * COLD_CTR_PWM0(BL) = 0
- * COLD_CTR(BH) = 1(IO/保持)
- * 制冷时
- * HOT_CTR_PWM0(AL) = 0
- * HOT_CTR(AH) = 1(IO/保持)
- * COLD_CTR_PWM0(BL) = 1(PWM)
- * COLD_CTR(BH) = 0
- */
- pwm = pwm * 1000;
- if (pwm == 0) {
- peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
- peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
- HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
- } else if (pwm > 0) {
- peltier_hot_ctr_pwm(pwm); /*HOT_CTR_PWM0*/
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
- peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
- HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET); /*COLD_CTR*/
- } else {
- peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); /*HOT_CTR*/
- peltier_cold_ctr_pwm(-pwm); /*COLD_CTR_PWM0*/
- HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
- }
-}
-/*******************************************************************************
- * tmc芯片驱动相关 *
- *******************************************************************************/
-void DeviceIoService::tmc_init() {
- STM32_HAL.gpioInit( //
- GPIOA, GPIO_PIN_4, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
- STM32_HAL.gpioInit( //
- GPIOE, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
- STM32_HAL.gpioInit( //
- GPIOE, GPIO_PIN_11, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
-}
-
-void DeviceIoService::tmc_motor_spi_select(int channel, bool state) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, state ? GPIO_PIN_SET : GPIO_PIN_RESET); }
-void DeviceIoService::tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length) {
- if (channel == MOTOR_1_TMC4361A_CHANNEL) {
- tmc_motor_spi_select(channel, false);
- sleepus(10);
- HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000);
- tmc_motor_spi_select(channel, true);
- }
-}
-void DeviceIoService::tmc_extern_clk_enable() {
-#if 1
- /**
- * @brief TMC使用的外部时钟在stm32cubemx中已经进行配置,输出时钟为16MHZ
- * 配置可以参考https://iflytop1.feishu.cn/wiki/wikcnog3hFm6dGFLMRksnhLb7Aw
- */
-#endif
-}
-void DeviceIoService::tmc_nFREEZE_pin_set_state(uint8_t channel, bool state) {
- if (channel == MOTOR_1_TMC4361A_CHANNEL) {
- HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
- }
-}
-void DeviceIoService::tmc_ENN_pin_set_state(uint8_t channel, bool state) {}
-void DeviceIoService::tmc_subic_ENN_pin_set_state(uint8_t channel, bool state) {
- if (channel == MOTOR_1_TMC4361A_CHANNEL) {
- HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
- }
-}
-void DeviceIoService::tmc_nRESET_pin_set_state(uint8_t channel, bool state) {}
-
-void DeviceIoService::home_ref_switch_init() { //
- STM32_HAL.gpioInitAsEXIT(TMC_HOME_REF_GPIO_PORT, TMC_HOME_REF_GPIO_PIN, GPIO_NOPULL, TMC_HOME_REF_GPIO_IRQ_MODE);
-}
diff --git a/src/board/device_io_service.hpp b/src/board/device_io_service.hpp
deleted file mode 100644
index 765272f..0000000
--- a/src/board/device_io_service.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-#pragma once
-#include
-#include
-
-#include "board/project_board.hpp"
-#include "libiflytop_micro/stm32/basic/basic.h"
-#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp"
-#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp"
-#include "libtrinamic/src/ic/tmc2160.hpp"
-#include "libtrinamic\src\ic\tmc4361A.hpp"
-#include "main.h"
-#include "spi.h"
-#include "tim.h"
-#include "usart.h"
-
-namespace iflytop {
-using namespace std;
-
-class DeviceIoService : public IflytopMicroOS {
- private:
- /* data */
- bool m_fanState[6];
- ZSLOT1(DeviceIoService, onGPIO_EXTI_Callback, uint16_t); // GPIO中断回调
-
- public:
- DeviceIoService(/* args */) {}
- ~DeviceIoService() {}
-
- void initialize();
-
- /*******************************************************************************
- * 调试指示灯初始化 *
- *******************************************************************************/
-
- void debug_light_init();
-
- /*******************************************************************************
- * 风扇控制 *
- *******************************************************************************/
- void fanInit(int freq);
- void fanSetDutyCycle(int fanIndex, uint16_t dutyCycle);
- bool *fanGetPowerState(int fanIndex);
- void fanSetState0to3(uint16_t dutyCycle);
- void fanSetState4(uint16_t dutyCycle);
- void fanSetState5(uint16_t dutyCycle);
- /*******************************************************************************
- * 帕尔贴驱动电路 *
- *******************************************************************************/
- void peltier_init();
- void peltier_set_pwm(int pwm);
- /*******************************************************************************
- * tmc芯片驱动相关 *
- *******************************************************************************/
- void tmc_init();
- void tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length);
- void tmc_extern_clk_enable();
- void tmc_nFREEZE_pin_set_state(uint8_t channel, bool state);
- void tmc_ENN_pin_set_state(uint8_t channel, bool state);
- void tmc_subic_ENN_pin_set_state(uint8_t channel, bool state);
- void tmc_nRESET_pin_set_state(uint8_t channel, bool state);
-
- ZSignal0 onHomeRefSwitch;
- void home_ref_switch_init();
-
- /*******************************************************************************
- * OVERRIDE IflytopMicroOS *
- *******************************************************************************/
- virtual void sleepMS(int ms) { HAL_Delay(ms); };
- virtual uint32_t hasPassedMS(uint32_t ticket) { return sys_haspassedms(ticket); };
- virtual uint32_t getTicket() { return HAL_GetTick(); };
- virtual uint32_t getNowMS() { return HAL_GetTick(); };
- virtual void sleepus(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); }
-
- private:
- // PE9 COLD_CTR_PWM0
- void peltier_cold_ctr_pwm(int pwm);
- // PB0 HOT_CTR_PWM0
- void peltier_hot_ctr_pwm(int pwm);
-
- void tmc_motor_spi_select(int channel, bool state);
-};
-
-} // namespace iflytop
\ No newline at end of file
diff --git a/src/board/fan_state_monitor.cpp b/src/board/fan_state_monitor.cpp
index 33b2a5d..0574794 100644
--- a/src/board/fan_state_monitor.cpp
+++ b/src/board/fan_state_monitor.cpp
@@ -1,7 +1,7 @@
#include "fan_state_monitor.hpp"
#include "libiflytop_micro/stm32/basic/basic.h"
-#include "libiflytop_micro\stm32\basic/stm32_hal_res_manager.hpp"
+#include "libiflytop_micro\stm32\basic/stm32_hal.hpp"
using namespace iflytop;
@@ -18,7 +18,7 @@ void FanStateMonitor::initialize(IflytopMicroOS* os, GPIO_TypeDef* FB_GPIOx, uin
m_lastFanState = false;
m_fanError = false;
- STM32_HAL.gpioInitAsInput(FB_GPIOx, FB_GPIO_Pin);
+ STM32_HAL::gpioInitAsInput(FB_GPIOx, FB_GPIO_Pin);
m_lastPinState = HAL_GPIO_ReadPin(m_FB_GPIOx, m_FB_GPIO_Pin);
}
void FanStateMonitor::doFanStateCheckPeriodicJob() {
diff --git a/src/board/hardware.cpp b/src/board/hardware.cpp
index 63a00ed..e82b951 100644
--- a/src/board/hardware.cpp
+++ b/src/board/hardware.cpp
@@ -4,24 +4,38 @@
using namespace iflytop;
#define TAG "hardware"
#define ENABLE_CAN 0
+extern "C" {
+int fputc(int ch, FILE *stream) {
+ uint8_t c = ch;
+ HAL_UART_Transmit(&DEBUG_UART, &c, 1, 100);
+ return ch;
+}
+}
int32_t Hardware::port_tmc4361_get_version(uint8_t channel) {
int value;
uint8_t data[5];
data[0] = 0x7f;
- m_deviceIoService.tmc_motor_spi_write_and_read(channel, &data[0], 5);
+ tmc_motor_spi_write_and_read(channel, &data[0], 5);
value = ((uint32_t)data[1] << 24) | ((uint32_t)data[2] << 16) | (data[3] << 8) | data[4];
return value;
}
+void Hardware::registerListener(HardwareListener *listener) {
+ if (listener && m_listenerNum < MAX_HARDWARE_LISTENER_NUM) {
+ m_listener[m_listenerNum] = listener;
+ m_listenerNum++;
+ }
+}
void Hardware::hardwareinit() {
+ STM32_HAL::regListener(this);
+
m_canOnRxDataFlag = false;
- m_os = &m_deviceIoService;
/*******************************************************************************
* 调试指示灯初始化 *
*******************************************************************************/
- m_deviceIoService.debug_light_init();
+ debug_light_init();
/*******************************************************************************
* CANSLAVEService初始化 *
@@ -36,7 +50,7 @@ void Hardware::hardwareinit() {
* 帕尔贴初始化 *
*******************************************************************************/
#if 0
- m_deviceIoService.peltier_init();
+ peltier_init();
#endif
/*******************************************************************************
* 温度传感器初始化 *
@@ -52,8 +66,8 @@ void Hardware::hardwareinit() {
* 电机初始化 *
*******************************************************************************/
#if 1
- m_deviceIoService.tmc_init();
- m_deviceIoService.tmc_extern_clk_enable();
+ tmc_init();
+ tmc_extern_clk_enable();
// 4361初始化
TMC4361A::TMC4361AConfig_t *tmc4361aconfig = TMC4361A::createDeafultTMC4361AConfig(this);
tmc4361aconfig->encoder_config.diff_enc_in_disable = false;
@@ -93,7 +107,7 @@ void Hardware::hardwareinit() {
* 风扇初始化 *
*******************************************************************************/
#if 0
- m_deviceIoService.fanInit(1000);
+ fanInit(1000);
/**
* @brief 风扇反馈初始化
*
@@ -104,12 +118,12 @@ void Hardware::hardwareinit() {
* FAN4_FB_INT PC7
* FAN5_FB_INT PC10
*/
- m_fanStateMonitor[0].initialize(m_os, GPIOC, GPIO_PIN_1, m_deviceIoService.fanGetPowerState(0));
- m_fanStateMonitor[1].initialize(m_os, GPIOC, GPIO_PIN_4, m_deviceIoService.fanGetPowerState(1));
- m_fanStateMonitor[2].initialize(m_os, GPIOC, GPIO_PIN_5, m_deviceIoService.fanGetPowerState(2));
- m_fanStateMonitor[3].initialize(m_os, GPIOC, GPIO_PIN_6, m_deviceIoService.fanGetPowerState(3));
- m_fanStateMonitor[4].initialize(m_os, GPIOC, GPIO_PIN_7, m_deviceIoService.fanGetPowerState(4));
- m_fanStateMonitor[5].initialize(m_os, GPIOC, GPIO_PIN_10, m_deviceIoService.fanGetPowerState(5));
+ m_fanStateMonitor[0].initialize(m_os, GPIOC, GPIO_PIN_1, fanGetPowerState(0));
+ m_fanStateMonitor[1].initialize(m_os, GPIOC, GPIO_PIN_4, fanGetPowerState(1));
+ m_fanStateMonitor[2].initialize(m_os, GPIOC, GPIO_PIN_5, fanGetPowerState(2));
+ m_fanStateMonitor[3].initialize(m_os, GPIOC, GPIO_PIN_6, fanGetPowerState(3));
+ m_fanStateMonitor[4].initialize(m_os, GPIOC, GPIO_PIN_7, fanGetPowerState(4));
+ m_fanStateMonitor[5].initialize(m_os, GPIOC, GPIO_PIN_10, fanGetPowerState(5));
#endif
}
void Hardware::periodicJob() {
@@ -138,8 +152,8 @@ void Hardware::do_debug_light_state() {
*******************************************************************************/
void Hardware::testTmp117() {
static uint32_t lastcall;
- if (m_os->hasPassedMS(lastcall) > 1000) {
- lastcall = m_os->getTicket();
+ if (hasPassedMS(lastcall) > 1000) {
+ lastcall = getTicket();
for (size_t i = 0; i < 4; i++) {
float temp = tmp117[i].getTemperature();
if (tmp117[i].getLastCallStatus() == HAL_OK) {
@@ -158,8 +172,8 @@ void Hardware::testCanSlaveTxAndRx() {
{
static uint32_t lastcall;
static uint8_t tx[8] = {1, 2, 3, 4, 5, 6, 7, 8};
- if (m_os->hasPassedMS(lastcall) > 1000) {
- lastcall = m_os->getTicket();
+ if (hasPassedMS(lastcall) > 1000) {
+ lastcall = getTicket();
canSlaveService.translate(0x01, tx, 8, 2);
if (canSlaveService.getLastTransmitStatus() == HAL_OK) {
ZLOGI(TAG, "send ok");
@@ -184,10 +198,192 @@ void Hardware::testCanSlaveTxAndRx() {
// canSlaveService.activateRxIT();
}
}
-void Hardware::TMC4361APort_setResetPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_nRESET_pin_set_state(channel, state); }
-void Hardware::TMC4361APort_setFREEZEPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_nFREEZE_pin_set_state(channel, state); }
-void Hardware::TMC4361APort_setENNPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_ENN_pin_set_state(channel, state); }
+void Hardware::TMC4361APort_setResetPinState(uint16_t channel, bool state) { tmc_nRESET_pin_set_state(channel, state); }
+void Hardware::TMC4361APort_setFREEZEPinState(uint16_t channel, bool state) { tmc_nFREEZE_pin_set_state(channel, state); }
+void Hardware::TMC4361APort_setENNPinState(uint16_t channel, bool state) { tmc_ENN_pin_set_state(channel, state); }
bool Hardware::TMC4361APort_getTargetReachedPinState(uint16_t channel) { return false; }
-void Hardware::TMC4361APort_sleepus(int32_t us) { m_os->sleepus(us); }
-void Hardware::TMC4361APort_readWriteArray(uint8_t *data, size_t length) { m_deviceIoService.tmc_motor_spi_write_and_read(0, data, length); }
-void Hardware::TMC4361APort_setSubICENNPinState(uint16_t channel, bool state) { m_deviceIoService.tmc_subic_ENN_pin_set_state(channel, state); }
+void Hardware::TMC4361APort_sleepus(int32_t us) { sleepus(us); }
+void Hardware::TMC4361APort_readWriteArray(uint8_t *data, size_t length) { tmc_motor_spi_write_and_read(0, data, length); }
+void Hardware::TMC4361APort_setSubICENNPinState(uint16_t channel, bool state) { tmc_subic_ENN_pin_set_state(channel, state); }
+
+void Hardware::STM32_HAL_onGPIO_EXTI_Callback(uint16_t gpioNum) {
+ /**
+ * @brief 赋予盘零位光电触发
+ */
+ if (gpioNum == TMC_HOME_REF_GPIO_PIN) {
+ if (STM32_HAL_GPIO_IS_THIS_PIN_TRIGGER_IRQ(TMC_HOME_REF_GPIO)) {
+ for (size_t i = 0; i < m_listenerNum; i++) {
+ m_listener[i]->Hardware_onHomeRefSwitch();
+ }
+ }
+ }
+}
+
+void Hardware::debug_light_init() {
+ STM32_HAL::gpioInit(DEBUG_LIGHT_PORT, DEBUG_LIGHT_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+}
+
+void Hardware::fanInit(int freq) {
+ STM32_HAL::setPWMFreq(&htim2, freq); // fan0->fan3
+ STM32_HAL::setPWMFreq(&htim4, freq); // fan4
+ STM32_HAL::setPWMFreq(&htim8, freq); // fan5
+
+ // fan0 fan1 fan2 fan3
+ STM32_HAL::gpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+ // fan4
+ STM32_HAL::gpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+ // fan5
+ STM32_HAL::gpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+}
+
+void Hardware::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
+ if (fanIndex > 5) {
+ while (1) {
+ ZLOGE(TAG, "fanIndex is out of range!");
+ }
+ }
+
+ if (fanIndex <= 3) {
+ STM32_HAL::setPWMDuty(&htim2, TIM_CHANNEL_2, dutyCycle);
+ m_fanState[0] = dutyCycle > 0;
+ m_fanState[1] = dutyCycle > 0;
+ m_fanState[2] = dutyCycle > 0;
+ m_fanState[3] = dutyCycle > 0;
+
+ if (dutyCycle > 0) {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
+ } else {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
+ }
+
+ } else if (fanIndex == 4) {
+ STM32_HAL::setPWMDuty(&htim4, TIM_CHANNEL_3, dutyCycle);
+ m_fanState[4] = dutyCycle > 0;
+
+ if (dutyCycle > 0) {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
+ } else {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
+ }
+ } else if (fanIndex == 5) {
+ STM32_HAL::setPWMDuty(&htim8, TIM_CHANNEL_3, dutyCycle);
+ m_fanState[5] = dutyCycle > 0;
+
+ if (dutyCycle > 0) {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
+ } else {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
+ }
+ }
+}
+bool *Hardware::fanGetPowerState(int fanIndex) {
+ if (fanIndex >= 5) {
+ while (1) {
+ ZLOGE(TAG, "fanIndex is out of range!");
+ }
+ }
+ return &m_fanState[fanIndex];
+}
+void Hardware::fanSetState0to3(uint16_t dutyCycle) { fanSetDutyCycle(0, dutyCycle); }
+void Hardware::fanSetState4(uint16_t dutyCycle) { fanSetDutyCycle(4, dutyCycle); }
+void Hardware::fanSetState5(uint16_t dutyCycle) { fanSetDutyCycle(5, dutyCycle); }
+
+/*******************************************************************************
+ * 帕尔贴驱动电路 *
+ *******************************************************************************/
+void Hardware::peltier_cold_ctr_pwm(int pwm) {
+ __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm);
+ HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
+}
+// PB0 HOT_CTR_PWM0
+void Hardware::peltier_hot_ctr_pwm(int pwm) {
+ __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, pwm);
+ HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
+}
+void Hardware::peltier_init() { //
+ STM32_HAL::gpioInit(GPIOB, GPIO_PIN_1, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+ STM32_HAL::gpioInit(GPIOE, GPIO_PIN_10, GPIO_MODE_AF_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
+}
+void Hardware::peltier_set_pwm(int pwm) {
+ /**
+ * @brief
+ *
+ * 待机状态
+ * HOT_CTR_PWM0(AL) = 0
+ * HOT_CTR(AH) = 0
+ * COLD_CTR_PWM0(BL) = 0
+ * COLD_CTR(BH) = 0
+ * 加热时
+ * HOT_CTR_PWM0(AL) = 1(PWM)
+ * HOT_CTR(AH) = 0
+ * COLD_CTR_PWM0(BL) = 0
+ * COLD_CTR(BH) = 1(IO/保持)
+ * 制冷时
+ * HOT_CTR_PWM0(AL) = 0
+ * HOT_CTR(AH) = 1(IO/保持)
+ * COLD_CTR_PWM0(BL) = 1(PWM)
+ * COLD_CTR(BH) = 0
+ */
+ pwm = pwm * 1000;
+ if (pwm == 0) {
+ peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
+ peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
+ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
+ } else if (pwm > 0) {
+ peltier_hot_ctr_pwm(pwm); /*HOT_CTR_PWM0*/
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
+ peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
+ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET); /*COLD_CTR*/
+ } else {
+ peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); /*HOT_CTR*/
+ peltier_cold_ctr_pwm(-pwm); /*COLD_CTR_PWM0*/
+ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
+ }
+}
+/*******************************************************************************
+ * tmc芯片驱动相关 *
+ *******************************************************************************/
+void Hardware::tmc_init() {
+ STM32_HAL::gpioInit( //
+ GPIOA, GPIO_PIN_4, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
+ STM32_HAL::gpioInit( //
+ GPIOE, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
+ STM32_HAL::gpioInit( //
+ GPIOE, GPIO_PIN_11, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_SET);
+}
+
+void Hardware::tmc_motor_spi_select(int channel, bool state) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, state ? GPIO_PIN_SET : GPIO_PIN_RESET); }
+void Hardware::tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length) {
+ if (channel == MOTOR_1_TMC4361A_CHANNEL) {
+ tmc_motor_spi_select(channel, false);
+ sleepus(10);
+ HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000);
+ tmc_motor_spi_select(channel, true);
+ }
+}
+void Hardware::tmc_extern_clk_enable() {
+#if 1
+ /**
+ * @brief TMC使用的外部时钟在stm32cubemx中已经进行配置,输出时钟为16MHZ
+ * 配置可以参考https://iflytop1.feishu.cn/wiki/wikcnog3hFm6dGFLMRksnhLb7Aw
+ */
+#endif
+}
+void Hardware::tmc_nFREEZE_pin_set_state(uint8_t channel, bool state) {
+ if (channel == MOTOR_1_TMC4361A_CHANNEL) {
+ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
+ }
+}
+void Hardware::tmc_ENN_pin_set_state(uint8_t channel, bool state) {}
+void Hardware::tmc_subic_ENN_pin_set_state(uint8_t channel, bool state) {
+ if (channel == MOTOR_1_TMC4361A_CHANNEL) {
+ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
+ }
+}
+void Hardware::tmc_nRESET_pin_set_state(uint8_t channel, bool state) {}
+
+void Hardware::home_ref_switch_init() { //
+ STM32_HAL::gpioInitAsEXIT(TMC_HOME_REF_GPIO_PORT, TMC_HOME_REF_GPIO_PIN, GPIO_NOPULL, TMC_HOME_REF_GPIO_IRQ_MODE);
+}
diff --git a/src/board/hardware.hpp b/src/board/hardware.hpp
index 137fd8d..64947b5 100644
--- a/src/board/hardware.hpp
+++ b/src/board/hardware.hpp
@@ -1,13 +1,30 @@
#pragma once
-#include "board/device_io_service.hpp"
#include "board/fan_state_monitor.hpp"
-#include "board/libtmcimpl.hpp"
+#include "board/project_board.hpp"
+#include "libiflytop_micro/stm32/basic/basic.h"
+#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp"
+#include "libiflytop_micro\stm32\basic\stm32_hal.hpp"
#include "libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp"
#include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp"
-
+#include "libtrinamic/src/ic/tmc2160.hpp"
+#include "libtrinamic\src\ic\tmc4361A.hpp"
+#include "main.h"
+#include "spi.h"
+#include "tim.h"
+#include "usart.h"
namespace iflytop {
-class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
+#define MAX_HARDWARE_LISTENER_NUM 5
+class HardwareListener {
+ public:
+ virtual void Hardware_OnHardwareException(){};
+ virtual void Hardware_onHomeRefSwitch(){};
+};
+
+class Hardware : public IflytopCanSlaveListener, //
+ public TMC4361APort, //
+ public IflytopMicroOS, //
+ public STM32_HAL_LISTENER {
private:
/* data */
@@ -16,12 +33,16 @@ class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
TMP117 tmp117[4];
FanStateMonitor m_fanStateMonitor[6];
IflytopCanSlave canSlaveService;
- IflytopMicroOS *m_os;
- DeviceIoService m_deviceIoService;
+ bool m_canOnRxDataFlag;
- bool m_canOnRxDataFlag;
+ /* data */
+ bool m_fanState[6];
+
+ HardwareListener *m_listener[MAX_HARDWARE_LISTENER_NUM];
+ int m_listenerNum;
public:
+ public:
/*******************************************************************************
* ListenerImpl *
*******************************************************************************/
@@ -34,6 +55,8 @@ class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
Hardware(/* args */){};
~Hardware(){};
+ void registerListener(HardwareListener *listener);
+
void hardwareinit();
void periodicJob();
@@ -58,7 +81,42 @@ class Hardware : public IflytopCanSlaveListener, public TMC4361APort {
virtual void TMC4361APort_readWriteArray(uint8_t *data, size_t length);
virtual void TMC4361APort_setSubICENNPinState(uint16_t channel, bool state);
+ /*******************************************************************************
+ * OVERRIDE IflytopMicroOS *
+ *******************************************************************************/
+ virtual void sleepMS(int ms) { HAL_Delay(ms); };
+ virtual uint32_t hasPassedMS(uint32_t ticket) { return sys_haspassedms(ticket); };
+ virtual uint32_t getTicket() { return HAL_GetTick(); };
+ virtual uint32_t getNowMS() { return HAL_GetTick(); };
+ virtual void sleepus(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); }
+
+ /*******************************************************************************
+ * OVERRIDE STM32_HAL_LISTENER *
+ *******************************************************************************/
+ virtual void STM32_HAL_onGPIO_EXTI_Callback(uint16_t GPIO_Pin);
+
public:
+ void debug_light_init();
+ void fanInit(int freq);
+ void fanSetDutyCycle(int fanIndex, uint16_t dutyCycle);
+ void fanSetState0to3(uint16_t dutyCycle);
+ void fanSetState4(uint16_t dutyCycle);
+ void fanSetState5(uint16_t dutyCycle);
+ void peltier_cold_ctr_pwm(int pwm);
+ void peltier_hot_ctr_pwm(int pwm);
+ void peltier_init();
+ void peltier_set_pwm(int pwm);
+ void tmc_init();
+ void tmc_motor_spi_select(int channel, bool state);
+ void tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length);
+ void tmc_extern_clk_enable();
+ void tmc_nFREEZE_pin_set_state(uint8_t channel, bool state);
+ void tmc_ENN_pin_set_state(uint8_t channel, bool state);
+ void tmc_subic_ENN_pin_set_state(uint8_t channel, bool state);
+ void tmc_nRESET_pin_set_state(uint8_t channel, bool state);
+ bool *fanGetPowerState(int fanIndex);
+
+ void home_ref_switch_init();
};
} // namespace iflytop
diff --git a/src/board/libtmcimpl.cpp b/src/board/libtmcimpl.cpp
deleted file mode 100644
index 54d7dba..0000000
--- a/src/board/libtmcimpl.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-#include "libtmcimpl.hpp"
-
-#include "device_io_service.hpp"
diff --git a/src/board/libtmcimpl.hpp b/src/board/libtmcimpl.hpp
deleted file mode 100644
index 9285198..0000000
--- a/src/board/libtmcimpl.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-
-#include "board/device_io_service.hpp"
-#include "libiflytop_micro/stm32/basic/basic.h"
-#include "libtrinamic/src/ic/tmc2160.hpp"
-#include "libtrinamic\src\ic\tmc4361A.hpp"
diff --git a/src/lncubator_rotating_control_service.cpp b/src/lncubator_rotating_control_service.cpp
index b7c51a8..be950f9 100644
--- a/src/lncubator_rotating_control_service.cpp
+++ b/src/lncubator_rotating_control_service.cpp
@@ -22,7 +22,7 @@ LncubatorRotatingControlService::~LncubatorRotatingControlService() {}
void LncubatorRotatingControlService::initialize(Hardware* hardware) { //
m_hardware = hardware;
m_motor = &m_hardware->tmc4361motor1;
- m_os = &m_hardware->m_deviceIoService;
+ m_os = m_hardware;
m_workfinished = false;
m_dowhat = kidle;
m_maxVelocity = mc_default_velocity;
@@ -31,13 +31,13 @@ void LncubatorRotatingControlService::initialize(Hardware* hardware) { //
* @brief 电机必须工作在位置模式
*/
m_motor->setMotorInPositionMode();
- hardware->m_deviceIoService.onHomeRefSwitch.connect(this, onHomeSwitchKey);
+ hardware->registerListener(this);
}
void LncubatorRotatingControlService::moveToHome() {
m_dowhat = krotateToHome;
m_motor->moveTo(mc_onecircle_ustep_num * 2, m_maxVelocity);
}
-void LncubatorRotatingControlService::onHomeSwitchKey() {
+void LncubatorRotatingControlService::Hardware_onHomeRefSwitch() {
/**
* @brief 电机零点光电触发
*/
diff --git a/src/lncubator_rotating_control_service.hpp b/src/lncubator_rotating_control_service.hpp
index a8edbb1..8fcfe42 100644
--- a/src/lncubator_rotating_control_service.hpp
+++ b/src/lncubator_rotating_control_service.hpp
@@ -1,6 +1,6 @@
#pragma once
#include "board\hardware.hpp"
-#include "libiflytop_micro\stm32\basic\stm32_hal_res_manager.hpp"
+#include "libiflytop_micro\stm32\basic\stm32_hal.hpp"
#include "libiflytop_micro\stm32\component\state_machine\state_machine.hpp"
namespace iflytop {
@@ -30,7 +30,7 @@ class LncubatorRotatingControlServiceListener {
virtual void OnlncubatorRotatingControlServiceJobFinished() = 0;
};
-class LncubatorRotatingControlService {
+class LncubatorRotatingControlService : public HardwareListener {
public:
typedef enum {
REFPOINT_TYPE_OUTLET = 0, // 出口
@@ -65,8 +65,6 @@ class LncubatorRotatingControlService {
LncubatorRotatingControlServiceListener* m_listener;
private:
- ZSLOT0(LncubatorRotatingControlService, onHomeSwitchKey);
-
public:
LncubatorRotatingControlService();
~LncubatorRotatingControlService();
@@ -89,7 +87,12 @@ class LncubatorRotatingControlService {
*/
void calibrationPosition(refpoint_t refpoint, uint32_t positionIndex);
- void periodicJob();
+ void periodicJob();
+
+ /*******************************************************************************
+ * OVERRIDE HardwareListener *
+ *******************************************************************************/
+ virtual void Hardware_onHomeRefSwitch();
private:
void doRotateToHomeJob();
diff --git a/src/lncubator_temperature_control_service.cpp b/src/lncubator_temperature_control_service.cpp
index 7d9f478..3b4e80b 100644
--- a/src/lncubator_temperature_control_service.cpp
+++ b/src/lncubator_temperature_control_service.cpp
@@ -82,7 +82,7 @@ float LncubatorTemperatureControlService::getTemperature() {
temperature_median = (temperature[1] + temperature[2]) / 2;
return temperature_median;
}
-void LncubatorTemperatureControlService::setPwmOutput(float output) { m_hardware->m_deviceIoService.peltier_set_pwm(output); }
+void LncubatorTemperatureControlService::setPwmOutput(float output) { m_hardware->peltier_set_pwm(output); }
void LncubatorTemperatureControlService::start() {
pid_reset(m_pidblock);
@@ -99,7 +99,7 @@ void LncubatorTemperatureControlService::stop() {}
void LncubatorTemperatureControlService::periodicJob() {
if (!m_workingState) return;
- if (m_hardware->m_os->hasPassedMS(m_periodicJobLastExecuteTicket) < m_compute_periodms) {
+ if (m_hardware->hasPassedMS(m_periodicJobLastExecuteTicket) < m_compute_periodms) {
return;
}
m_periodicJobLastExecuteTicket = m_os->getTicket();
diff --git a/src/lncubator_temperature_control_service.hpp b/src/lncubator_temperature_control_service.hpp
index 542af8e..53ed83b 100644
--- a/src/lncubator_temperature_control_service.hpp
+++ b/src/lncubator_temperature_control_service.hpp
@@ -1,5 +1,4 @@
#pragma once
-#include "board/device_io_service.hpp"
#include "board\hardware.hpp"
#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp"
#include "libiflytop_micro\stm32\component\pid\pid_ctrl.h"
diff --git a/src/umain.cpp b/src/umain.cpp
index e17373a..5b92a6d 100644
--- a/src/umain.cpp
+++ b/src/umain.cpp
@@ -1,8 +1,6 @@
#include
#include
-#include "board/device_io_service.hpp"
-#include "board/libtmcimpl.hpp"
#include "board/project_board.hpp"
#include "libiflytop_micro\stm32\basic\basic.h"
#include "libtrinamic/src/ic/tmc2160.hpp"