added enabling and disabling M0100 mouse, tested

This commit is contained in:
dekunukem
2022-08-03 04:51:03 +01:00
parent 83a6dd3497
commit 99b2dbd76a
19 changed files with 1285 additions and 1106 deletions

View File

@@ -37,15 +37,11 @@
#define BTN_SIDE 0x113
#define BTN_EXTRA 0x114
#define PROTOCOL_AT_PS2_KB 1
#define PROTOCOL_XT_KB 2
#define PROTOCOL_ADB_KB 3
#define PROTOCOL_PS2_MOUSE 4
#define PROTOCOL_MICROSOFT_SERIAL_MOUSE 5
#define PROTOCOL_ADB_MOUSE 6
#define PROTOCOL_GENERIC_GAMEPORT_GAMEPAD 7
#define PROTOCOL_GAMEPORT_GRAVIS_GAMEPAD 8
#define PROTOCOL_GAMEPORT_MICROSOFT_SIDEWINDER 9
#define PROTOCOL_M0100_MOUSE 9
#define PROTOCOL_M0110_KB 10
#define PROTOCOL_LISA_KB 11
#define MOUSE_EVENT_BUFFER_SIZE 16
#define KEYBOARD_EVENT_BUFFER_SIZE 8

View File

@@ -24,6 +24,9 @@ typedef struct
void quad_init(mouse_buf* mbuf, TIM_HandleTypeDef* avg_tim, TIM_HandleTypeDef* arr_tim_x, TIM_HandleTypeDef* arr_tim_y, GPIO_TypeDef* x1_port, uint16_t x1_pin, GPIO_TypeDef* x2_port, uint16_t x2_pin, GPIO_TypeDef* y1_port, uint16_t y1_pin, GPIO_TypeDef* y2_port, uint16_t y2_pin);
void quad_increment(quad_output *qo);
void quad_decrement(quad_output *qo);
void quad_enable(void);
void quad_disable(void);
#ifdef __cplusplus
}
#endif

View File

@@ -93,8 +93,8 @@
<flags>2</flags>
<showCmd>3</showCmd>
<MinPosition>
<xPos>-1</xPos>
<yPos>-1</yPos>
<xPos>-32000</xPos>
<yPos>-32000</yPos>
</MinPosition>
<MaxPosition>
<xPos>-1</xPos>
@@ -3615,9 +3615,9 @@
</Doc>
<Doc>
<Name>..\Src\helpers.c</Name>
<ColumnNumber>12</ColumnNumber>
<ColumnNumber>28</ColumnNumber>
<TopLine>100</TopLine>
<CurrentLine>129</CurrentLine>
<CurrentLine>126</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>

View File

Binary file not shown.

View File

@@ -27,13 +27,6 @@ Project File Date: 07/22/2022
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'apple_all'
compiling quad_encoder.c...
compiling helpers.c...
compiling m0110a.c...
compiling main.c...
linking...
Program Size: Code=10608 RO-data=568 RW-data=76 ZI-data=2188
FromELF: creating hex file...
"apple_all\apple_all.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2>
@@ -57,7 +50,7 @@ Package Vendor: Keil
<h2>Collection of Component Files used:</h2>
* Component: ARM::CMSIS:CORE:5.3.0
Build Time Elapsed: 00:00:02
Build Time Elapsed: 00:00:00
</pre>
</body>
</html>

View File

@@ -1,27 +1,27 @@
:020000040800F2
:10000000D8080020D500000825160008651400084F
:10000000D8080020D5000008291600086914000847
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000631900084C
:1000300000000000000000006D16000865190008AF
:100020000000000000000000000000006719000848
:1000300000000000000000007116000869190008A7
:10004000E7000008E7000008E7000008E7000008F4
:10005000E7000008E7000008E7000008E7000008E4
:10006000E7000008E7000008E7000008E7000008D4
:10007000E7000008E7000008E7000008E7000008C4
:10008000E7000008E7000008E7000008391A000848
:10009000E7000008491A0008591A0008E70000089C
:1000A000E700000871160008E7000008E7000008F4
:10008000E7000008E7000008E70000083D1A000844
:10009000E70000084D1A00085D1A0008E700000894
:1000A000E700000875160008E7000008E7000008F0
:1000B000E7000008E7000008E7000008E700000884
:1000C0000348854600F03CF800480047C12400087A
:1000C0000348854600F03CF8004800473D250008FD
:1000D000D80800200448804704480047FEE7FEE7B0
:1000E000FEE7FEE7FEE7FEE7DD190008C1000008B5
:1000E000FEE7FEE7FEE7FEE7E1190008C1000008B1
:1000F00030B50B46014600202022012409E00D46C0
:10010000D5409D4205D31D469540491B2546954047
:1001100040191546521E002DF1DC30BDD2B201E06F
:100120000270401C491EFBD270470022F6E710B552
:1001300013460A4604461946FFF7F0FF204610BD55
:10014000064C0125064E05E0E36807CC2B430C3C2A
:1001500098471034B442F7D3FFF7B6FF882B000856
:10016000A82B000870B50024014620314A78022AE5
:1001500098471034B442F7D3FFF7B6FFB42C000829
:10016000D42C000870B50024014620314A78022AB8
:1001700003D004218163012416E0026813680E2570
:10018000AB431360026813685B085B0013600122D5
:10019000056C1346AB40C56B6B604A7000220A7059
@@ -51,8 +51,8 @@
:1003100000080048000C004800100048000401409C
:100320000069084000D00120704742694A4042619C
:100330007047002A01D081617047816270470000D8
:10034000014800687047000038000020024801683A
:10035000491C0160704700003800002010B50648B5
:1003400001480068704700003C0000200248016836
:10035000491C0160704700003C00002010B50648B1
:100360000168102211430160002000F007F800F03E
:1003700017F8002010BD00000020024010B5044610
:1003800000F078F97D21C900FFF7B2FE00F054FDBE
@@ -62,7 +62,7 @@
:1003C00000901146501F00F017F800221146901EB1
:1003D00000F012F800221146501E00F00DF808BD82
:1003E00000100240C106C90E012088400149086082
:1003F0007047000000E100E010B501F015F910BDF4
:1003F0007047000000E100E010B501F017F910BDF2
:10040000F8B504460068434DC00352D5E86900269C
:10041000C00007D4E96928040143E961E9690140A2
:10042000012600913C480168C90510D40168821575
@@ -101,10 +101,10 @@
:10063000400706D56068072109028843E968084336
:10064000606000F02DF86168084A0906090F515CE6
:10065000C840074908600020FFF790FE0020F8BD61
:100660000020024000100240881300006F2B000899
:100670003C00002001480068704700003C0000205A
:100660000020024000100240881300009B2C00086C
:100670004000002001480068704700004000002052
:100680000448054900684968044A4905490F515C16
:10069000C84070473C000020001002407F2B00083B
:10069000C84070474000002000100240AB2C00080A
:1006A00030B516A30FCB89B06C460FC417A30FCB80
:1006B0000FC41A494A680C20144604401848042CF8
:1006C00005D0184B082C04D00C2C00D1184609B0CA
@@ -188,7 +188,7 @@
:100BA00089004160A06D0B4D002803D04563A06D06
:100BB000FFF7D8FA606D0028B8D04563606DFFF785
:100BC000D1FAF8BDC16880680090F8BD2046FFF7F3
:100BD00097FFF8BDE3170008F8B5040007D000261A
:100BD00097FFF8BDE7170008F8B5040007D0002616
:100BE00025464035A662687F002802D005E0012036
:100BF000F8BD2E77204600F04BF802236B77206873
:100C000001684022914301600721E068090288429F
@@ -217,18 +217,18 @@
:100D70008F4202D8E188022903D301684B6893436C
:100D800002E001684B6813434B6001684A68E02346
:100D90001A434A6000680168490603D4016840228A
:100DA00011430160002020772846F0BD811600081D
:100DB00015170008B71600084917000870B501227A
:100DA00011430160002020772846F0BD8516000819
:100DB00019170008BB1600084D17000870B501226E
:100DC0000920D103C006FFF7B4FA0F4C0F4D20786D
:100DD000DE2801D00120E8700B4801F01BFDA0784F
:100DD000DE2801D00120E8700B4801F05BFDA0780F
:100DE000032805D10121002249030948FFF7A1FA90
:100DF000054A2023D11A0748FFF776FF01F0B8FC17
:100E000005494018A86070BD880200201800002025
:100E10000008004894000020C83200000422044961
:100DF000054A2023D11A0748FFF776FF01F0F8FCD7
:100E000005494018A86070BD8C0200201C0000201D
:100E10000008004898000020C8320000042204495D
:100E20000428086902D09043086170471043FBE72B
:100E300000E000E070470000094910B5401E8842FC
:100E400001D9012010BD074C60610321081F00F08B
:100E5000EBFB0020A06107202061002010BD0000F6
:100E5000EDFB0020A06107202061002010BD0000F4
:100E6000FFFFFF0000E000E010B5FFF7E3FF10BD5B
:100E70007047704770B502462032137F012B1BD09C
:100E80000123137702245477046865687026B543FC
@@ -237,7 +237,7 @@
:100EB00053770020107770BD022070BD70B504001C
:100EC00005D025462035687F002802D006E00120A5
:100ED00070BD00202877204600F00AF802206877CD
:100EE000211D206800F0C0FD01206877002070BD42
:100EE000211D206800F0C2FD01206877002070BD40
:100EF00008B50122016892072048914207D1C169D3
:100F000001221143C161C0691040009008BD1C4A14
:100F100091420DD1C26989150A43C261C06900229C
@@ -257,13 +257,13 @@
:100FF0004ED0102840D14EE00220F8BD302850D00D
:10100000402839D13CE060282DD0702817D001222B
:101010001203801A0ED090422ED1CB684A6889689C
:10102000206800F06BFD2068816801229203114363
:10102000206800F06DFD2068816801229203114361
:10103000816021E020688168C908C900F8E7CB68B1
:101040004A688968206800F059FD21688868B043C3
:101050003043886010E0CA684968206800F061FD8C
:101060005021206806E0CA684968206800F06AFDDF
:101070006021206800F04DFD6F7700202877F8BDD3
:10108000CA684968206800F04CFD40212068F1E7FB
:101040004A688968206800F05BFD21688868B043C1
:101050003043886010E0CA684968206800F063FD8A
:101060005021206806E0CA684968206800F06CFDDD
:101070006021206800F04FFD6F7700202877F8BDD1
:10108000CA684968206800F04EFD40212068F1E7F9
:1010900000212068EEE710212068EBE7202120687E
:1010A000E8E730212068E5E7704770B5044600683E
:1010B00001690025C9438907002915DBC168C943B7
@@ -285,423 +285,442 @@
:1011B00020680169C943090609D4C168C943090601
:1011C00005D48021C94301612046FFF751FE206804
:1011D0000169C943490609D4C168C943490605D410
:1011E0004021C9430161204600F07AF82068016976
:1011E0004021C9430161204600F07CF82068016974
:1011F000C943890609D4C168C943890605D4202199
:10120000C94301612046FFF734FE70BD7047704747
:10121000F8B52E4C074620682D4E874238D12D490F
:10122000E06800F082FF2B4D0090288801B2304624
:1012300000F020FFA88801B230461C3000F01AFFF1
:10124000304600F063FFB06130461C3000F05EFFB6
:1012500032461C329061B06900F01EFF6168096877
:10126000C862906900F018FFA1680968C862009818
:1012700000280DD02A7A012149031748002A02D1FB
:10128000AA7A002A01D0002200E00122FFF751F8DB
:101290006068874209D1B069002806D00C4802DD99
:1012A00001F01FFB01E001F013FBA068874208D1A9
:1012B00007481C308069002803D0084802DD01F08F
:1012C00010FBF8BD01F004FBF8BD00000400002095
:1012D0004C0000208400002000040048680000202A
:1012E000704770B5040005D025466035687A00283F
:1012F00002D006E0012070BD00202872204600F0D8
:1013000027F82420687220680168490849000160B4
:10131000204600F0C9FC0128EDD0606A002802D008
:10132000204600F022FC206841680922D202914345
:101330004160206881682A229143816020680168A9
:10134000012211430160204600F074FC70BD0000D2
:1013500000B500680F4987B0884218D10E488269ED
:10136000012189030A4382618069084005900320B6
:101370004002009002200190002002900320039080
:101380000120049009206946C006FEF71DFF07B042
:1013900000BD00000038014000100240FFB50646C5
:1013A00004466036707A83B00D46202858D1002D4F
:1013B0000CD00598002809D00120A16800038142C3
:1013C00007D12069002804D1E80702D0012007B026
:1013D000F0BD307A012843D0012030720020E06651
:1013E00021207072FEF7ACFF019027464037059828
:1013F00038820598788218E0788A401E78820698AC
:101400000090002280212046019B00F0FBFC002878
:1014100018D10120A1680003814202D1206900286F
:1014200012D02168287808856D1C788A0028E3D1BD
:1014300006980090002240212046019B00F0E2FC2B
:10144000002808D00320C2E728882168C005C00D05
:101450000885AD1CE9E72020707200203072B6E7E5
:101460000220B4E7FEE70000F0B5374887B04269D4
:101470000121C9040A43426142690A400592426956
:1014800089100A43426142690A4005924269490053
:101490000A43426140694C110840059000222146F0
:1014A0002A48FEF746FFFF26093609200122314669
:1014B000C006FEF73EFF00220A212548FEF739FF4D
:1014C000244F012239462248FEF733FF0022A100B3
:1014D0007806FEF72EFF0094002401250195029462
:1014E00069461A480394FEF76FFE0096112602948F
:1014F0006946780601960394FEF766FE164800904A
:1015000002200290019469461148FEF75DFE0A2010
:10151000009002946946019503940D48FEF754FE2D
:10152000029469460A48009701960394FEF74CFE20
:10153000E803009002946946019503947806FEF74B
:1015400043FE07B0F0BD0000001002400008004854
:101550000004004824F50000110A000010B50D48F1
:101560000B4901600021416081600161416181613D
:101570000722016212024162C26081620722016396
:10158000C2624163FFF728FB002800D0FEE710BDD0
:10159000003001409400002010B50121124886B0AF
:1015A0008907016000242F21846041600461611E6D
:1015B0008461C160FFF782FC002800D0FEE70120B3
:1015C0000003009069460848FFF7F7FC002800D0A8
:1015D000FEE7049404A904480594FFF74BFC002897
:1015E00000D0FEE706B010BDF800002010B50C4892
:1015F0000A490160E1214902416000218160C16026
:1016000001618161C1610C22016242614162FFF7A7
:1016100068FE002800D0FEE710BD00000038014041
:10162000F8010020704700008307FF22DB0E9A407C
:101630008907090E994000280BDA0007000F0838C7
:10164000830808489B001818C36993430B43C36180
:101650007047830804489B001B1818689043084390
:101660001860704700ED00E000E400E07047000003
:1016700010B50248FFF746FA10BD000094000020A4
:1016800010B50168C968026C1180016C891C016485
:1016900001464031CA88521ECA80C988002909D132
:1016A00001684A6840239A434A60C18F002901D1EA
:1016B00000F06EF810BD10B501464031CC880368CB
:1016C000026C012C11D9DB681380026C921C02643D
:1016D000CA88921ECA80CA88012A0DD1026853683E
:1016E000012424032343536006E01C7B531C036442
:1016F0001470CA88521ECA80C988002909D101689D
:101700004A6860239A434A60C18F002901D100F0E2
:101710003FF810BD10B5816B02680988D160816BFC
:10172000891C8163C18F491EC187C18F00290AD1DD
:1017300001684A6880239A434A604621095A002971
:1017400001D100F025F810BD10B5C38F0268816B80
:10175000022B07D30988D160816B891C8163C18FFB
:10176000891E05E04B1C836309781173C18F491EE4
:10177000C187C18F00290AD101684A6880239A4332
:101780004A604621095A002901D100F001F810BD34
:1017900070B50446FEF7D4FD024620684168202556
:1017A000A94341606421204600F024F8002802D0BB
:1017B000206E28432066226E204601214030002AF8
:1017C00004D041772046FFF79BF970BD427F4177F7
:1017D000042A204602D0FFF7F1FA70BDFFF782FA23
:1017E00070BD10B5406A002146221152C187FFF733
:1017F00087F910BDF8B50F460B4615460092032138
:1018000004460022C90200F01BF82026002812D14D
:101810003B46002280212046009500F05CF800281D
:1018200009D103213B46002249022046009500F0E1
:1018300007F8002803D0206E304320660320F8BD4F
:10184000F8B51D4617460E4604463DE00321490201
:101850008E4205D1002F03D1017B684601700078CC
:10186000681C31D0002D05D0FEF76AFD0699401A9C
:10187000A84229D320684168E02291434160606812
:10188000C11FFD390CD10121A068C903884202D0D3
:101890004911884204D120680168402291430160C7
:1018A0000120A16A4003814207D121680A6882436E
:1018B0000A6021680A6802430A60012040346077A8
:1018C000002020770320F8BD206881683140B942AC
:1018D000BCD10020F8BDF8B51D4617460E4604469B
:1018E00033E0681C31D0002D05D0FEF729FD0699A4
:1018F000401AA84229D320684168E0229143416000
:101900006068C11FFD390CD10121A068C90388425C
:1019100002D04911884204D12068016840229143D5
:1019200001600120A16A4003814207D121680A6851
:1019300082430A6021680A6802430A600120403439
:101940006077002020770320F8BD2068816830464A
:10195000884304D00020B842C3D10020F8BD012044
:10196000F9E7704710B5FEF7F1FCFFF77DFA10BDFF
:1019700030B599B0202001250024009008950994E5
:101980006846FEF7D1FE002800D0FEE707200D9044
:1019900003200E900F94012110940DA8FEF7C0FDB6
:1019A000002800D0FEE7119511A81395FEF728FD39
:1019B000002800D0FEE7FEF75DFE7D21C900FEF79E
:1019C00097FBFFF739FA0420FFF728FA00221146A7
:1019D000501EFEF711FD19B030BD0000124801681D
:1019E0000122114301604168104A114041600168C1
:1019F0000F4A114001600168012292049143016085
:101A000041683F22120491434160C16A09090901FA
:101A1000C162016B074A11400163416B49084900EB
:101A20004163002181607047001002400CB8FF083C
:101A3000FFFFF6FE2CFEFCFF10B50248FFF735FB5A
:101A400010BD00003801002010B50248FFF72DFB43
:101A500010BD00007801002010B50248FFF725FBFB
:101A600010BD0000B8010020F0B502681D4B012434
:101A7000A4071D4D984203D0A04201D0A84203D133
:101A80007026B2434E683243184E194F98420DD01B
:101A9000A0420BD0A84209D0164CA04206D0B042BA
:101AA00004D0B84202D0144CA04204D10324240232
:101AB000A243CC6822438024A2434C6922430260A3
:101AC0008A68C2620A688262984206D0B04204D034
:101AD000B84202D0084A904201D10969016301214C
:101AE0004161F0BD002C0140000400400040014075
:101AF00000440140002000400048014030B58468A7
:101B0000FF252D021B021343AC430B432343836089
:101B100030BD826870239A430A4307210A438260DA
:101B2000704730B5036A046A64086400046284691B
:101B3000F025AC43120122430A24A3430B438261E4
:101B4000036230BD30B5036A1024A3430362846985
:101B5000036A0F252D031203AC432243A024A343A1
:101B6000090119438261016230BD10B5818CC9073A
:101B700007D001684A6801235B049A43836A1A43C9
:101B80004A60818C890707D501684A6801231B04D4
:101B90009A43C36A1A434A60818C490707D5016892
:101BA0004A6801239B049A43036B1A434A60818C61
:101BB000090707D501684A680123DB039A43436B91
:101BC0001A434A60818CC90607D5026891680123CF
:101BD0001B039943836B19439160818C890607D558
:101BE00001688A6801235B039A43C36B1A438A60C6
:101BF000818C490612D503685A6801210905046CD5
:101C00008A4322435A60026C8A4207D102685168B3
:101C100003235B059943436C19435160818C09068A
:101C200007D501684A680123DB04806C9A430243AC
:101C30004A6010BDF8B500260446C666FEF780FB74
:101C4000054616492068884202D0154988421DD1B0
:101C50000068144F000709D501212B4600224905D1
:101C60002046009700F0CEF800280DD120680068CB
:101C700040070BD501212B460022890520460097FD
:101C800000F0C0F8002801D00320F8BD2020603407
:101C90006072A07226720020F8BD0000003801407A
:101CA00000440040FFFFFF01F8B504462369A26825
:101CB000E5691A43636910202B43002125681A4304
:101CC0002B680E46474F3B4013432B6023685A68EE
:101CD00003252D03AA43E5682A435A60236AA269B3
:101CE00025681A43AB680B273F02BB431343AB6025
:101CF0003D4F25683D4B0203BD420AD11B6B9B073C
:101D00009B0F20D0012B14D0022B14D0032B1BD1FE
:101D10000DE0374FBD4210D11B6B03273F043B4002
:101D200011D09B1A05D09B1A05D093420CD10220EA
:101D30000AE0042008E0082006E02E4B9D4202D075
:101D40002D4B9D4200D100200123E769DB039F4218
:101D500022D100280CD002280DD0042813D0082846
:101D600017D001260A0912010807400F10432EE080
:101D7000FEF786FC09E06168204A48088018FEF7F3
:101D8000B7F981B2EEE7FEF78BFC616840004A08C4
:101D9000F4E761684808F1E7002808D0022809D074
:101DA00004280CD0082815D001263046F8BDFEF7CF
:101DB00067FC06E06168124A480880180DE0FEF7EB
:101DC0006FFC61684A088018FEF792F980B22168BA
:101DD000C860EAE761684808C018FEF789F980B270
:101DE000E860E2E7F369FFEF0038014000100240CD
:101DF0000044004000480040004C00400024F40033
:101E000000127A00FFB581B017460E4604460A9DBF
:101E10001DE0681C1BD0002D05D0FEF791FA049937
:101E2000401AA84213D920680168FF22A1329143C9
:101E30000160206881684908490081602020603481
:101E40006072A07200202072032005B0F0BD2068EF
:101E5000C1693046884304D00020B842D9D0002060
:101E6000F3E70120F9E700000FB410B503A9044B14
:101E7000044A029800F018F810BC08BC04B01847D7
:101E8000F52000084000002002E008C8121F08C129
:101E9000002AFAD170477047002001E001C1121FEB
:101EA000002AFBD170470000FFB58DB00F460546F4
:101EB000002606E025280AD0109A0F9990476D1C3D
:101EC000761C28780028F5D1304611B0F0BD0024EA
:101ED0000121674A009400E004436D1C2B780846FA
:101EE000203B98401042F7D128782E2815D10420A5
:101EF000044368786D1C2A280AD101CF6D1C00901C
:101F00000BE000990A225143303940186D1C0090B3
:101F10002878014630390929F3D92878692843D02F
:101F200006DC0028D0D063280BD0642804D13BE025
:101F300073280FD075284CD0109A0F999047761CB3
:101F400094E03878694608720020487202A801902F
:101F5000012003E0386801900020C0433F1D610765
:101F60000CD5002400E0641C00998C420FDA8442F6
:101F7000F9DB0199095D0029F5D108E0002400E0B2
:101F8000641C8442FCDB0199095D0029F8D13619F3
:101F900007E0019801990078491C0191109A0F9966
:101FA0009047641EF5D261E00A20019001CF00281D
:101FB00002DA40422D2102E0210504D52B216A4698
:101FC0001172012103E0E10701D02021F7E70C9114
:101FD00004E00A20019001CF00210C910BA90B9184
:101FE00008E00199FEF784F80A460B993032491E41
:101FF0000B910A700028F4D10B9803A9081A20301D
:102000000190600701D5009801E00120009001993E
:10201000884203DD01460198081A00E000200024F0
:10202000009006E002A8109A005D0F999047641C8A
:10203000761C0C988442F5DB04E0109A30200F994E
:102040009047761C0099481E00900029F5DC08E0B6
:102050000B980B990078491C0B91109A0F99904797
:10206000761C0199481E01900029F1DC6D1C28E7BF
:1020700009280100027D520012181182017D491CBD
:10208000C9B20175022901D3002101757047090207
:10209000014308B270470000002800DA40420028DF
:1020A00001DD402802DBFF20F53070470149400088
:1020B000085A7047342A000802687F2A01DD7F2110
:1020C00003E07E21C9438A4200DA0160704700B50F
:1020D000014600F04DFB411800F04AFB8842FBD35B
:1020E00000BD000010B502490860FEF74FFF10BDAB
:1020F0000000002013B50A23012269460248FFF7B9
:102100004DF900981CBD0000F801002010B5002119
:102110000A4653001C181023E35E521C5918022A69
:10212000F7DBC80F4018401010BD30B500240C601C
:102130004C600C720B4605468C72284600F04CFB36
:10214000002815D019680268891819605968426812
:1021500089185960197A027A11431972997A807A2A
:1021600001439972284600F041FB641CE4B2E4E7A5
:102170001846FFF7A1FF181DFFF79EFF204630BD50
:1021800010B50C46034600F01FF8002801D00120CE
:1021900010BD1978586844541978986842541878D2
:1021A000401C4007400F1870002010BD10B50446B9
:1021B000082000F0A7FA6060082000F0A3FAA060F1
:1021C000204600F025F810BD41780078401C4007FB
:1021D000400F814201D1012070470020704710B5A7
:1021E00043780478A34201D1012010BD4468E35C28
:1021F0000B7081684078085C1070002010BD417839
:102200000278914203D0491C4907490F4170704739
:1022100010B5044600202070607008216068FDF74A
:1022200084FF0821A068FDF780FF10BD70B51D4C2C
:10223000207900282ED0FEF783F8E1680025401AA7
:10224000FA2803D97B2000F0FBF822E0207900284F
:1022500020D01448103000F046F8002817D020791C
:10226000002817D00F4A1048921D511EFFF7B7FFE4
:1022700000280FD10B48103000F05CF8094AA17912
:102280001032607900F0D2F9002804D006E000F0A6
:1022900007F9257170BD00F003F925710248FFF7B9
:1022A000AEFF70BD18000020A802002000B50B464C
:1022B000024600F020F8002801D0012000BD11786E
:1022C000506843541078401C8007800F1070002025
:1022D00000BD10B50446042000F014FA60602046EA
:1022E00000F028F810BD41780078814201D101202A
:1022F00070470020704741780078401C8007800FAD
:10230000814201D101207047002070474278037854
:102310009A4201D1012070474068805C087000201B
:10232000704741780278914203D0491C8907890F90
:102330004170704710B50021017041704068042160
:10234000FDF7F3FE10BD000070B5FDF7F9FF044680
:10235000084D07E004212846FDF7E2FF002801D0E0
:10236000012070BDFDF7ECFF001B0A28F2D302200C
:1023700070BD000000040048F1B500258024114F15
:10238000E600002231463846FDF7D3FFB420FFF7C0
:102390009EFE012231463846FDF7CBFF5020FFF765
:1023A00096FE04213846FDF7BBFF012800D12543E6
:1023B00064088C20FFF78BFE002CE2D1009805709A
:1023C0000020F8BD0004004870B50C460546FFF734
:1023D000BBFF012805D02846FFF7CEFF204600F0BE
:1023E0000FFB70BD10B54B21C9001448FFF7ECFF7F
:1023F000124C641EA07000280FD16078102807D0FE
:1024000014280BD0162814D0362806D17D2011E0D0
:1024100001202071FDF794FFE06010BD07480F30E8
:10242000FFF761FF002801D07B2003E000F038F8BF
:1024300010BD0B2000F004F810BD000019000020B2
:10244000F8B50122154E0746950229463046FDF79C
:1024500070FFC82000F0D4FA03281ED00724012002
:10246000A040384201D0012200E000220421304681
:10247000FDF75FFF002229463046FDF75AFFA020F6
:10248000FFF725FE012229463046FDF752FFAA201C
:10249000FFF71DFE641EE2D50020F8BD00040048D1
:1024A00008B569460548FFF731FF0448FFF739FFD3
:1024B00068460078FFF7C4FF08BD00002800002030
:1024C00088B0FDF74BFFFFF753FAFEF7CDFFFFF79C
:1024D00045F8FFF78BF8FFF75FF846480024464EB3
:1024E00084604349C6602F25046122C080270C30D8
:1024F00090C01C38FEF7E2FC002800D0FEE73D4803
:102500003E494030846022C08460C4603C4904611C
:1025100041600838FEF7D2FC002800D0FEE73548BD
:102520003849403884608761C660046122C0083839
:10253000FEF7C4FC002800D0FEE70120324D0190D8
:10254000009400232A78314931A0FFF78DFC2948F7
:102550008038FFF7C7FD28461030FFF7BAFE314834
:10256000FFF724FE2846183000F020F92D482021DE
:102570004038FDF7DAFD2B4A1E482023203AD11AB5
:10258000E438FEF7B1FB01200003C600079080008D
:10259000254C81110694174A0927164B0191039087
:1025A0000596FF06114628460494403B0097029486
:1025B0004031183000F09EF9E878002801D000F092
:1025C000E3F900F0D5F8A968884204D90022314621
:1025D0003846FDF7AEFE012189022046FDF7A0FE38
:1025E0000028E9D0FFF7FEFEFFF720FEE4E7000039
:1025F0000044014078010020FFFF00000048014036
:10260000102700000020004018000020342B000894
:1026100025730A7265762564207625642E25642E3E
:1026200025640A00A80200200004004870B50024B8
:102630001646802801D2314A145C02293BD0002C76
:1026400039D080253A282CD037283DD04E283BD091
:10265000622839D0452843D0472841D048283FD068
:1026600049283DD04A283BD04B2839D04C2837D078
:102670004D2835D04F2833D0502831D051282FD075
:1026800052282DD053282BD0602829D0672827D056
:10269000692825D06A2823D06C2821D0002908D1A8
:1026A0002AE0002907D016480121027891430170E1
:1026B00003D0214603E0042070BD21462943304663
:1026C000FFF7F4FD002070BD002904D071213046D1
:1026D000FFF7ECFD06E0F1213046FFF7E7FD06E0ED
:1026E000002904D079213046FFF7E0FDE1E77921A8
:1026F0003046FFF7DBFDE0E72C43DAE7B42A0008B9
:1027000014000020F0B50B30C108C900144F00269A
:10271000144A0FE003688B420BD38B4205D95C1A35
:102720004318456830C3083B00E04368136002C0AB
:1027300004E0021D10680028ECD13046002803D1C7
:102740003868002801D00020F0BD064A0648106015
:10275000064A121AD208D20044C001203860D7E7D6
:102760004800002044000020DC020020D8040020A3
:10277000024800680068406A7047000000000020BE
:1027800030B50B46024600F01CF8002801D00120AD
:1027900030BD11785068090140183ACB3AC0107822
:1027A000401C0007000F1070002030BD10B504461B
:1027B000FF200130FFF7A6FF6060204600F01FF801
:1027C00010BD41780078401C0007000F814201D104
:1027D000012070470020704741780278914201D172
:1027E000002070474068090140187047417802781E
:1027F000914203D0491C0907090F4170704710B579
:10280000002101704170FF2140680131FDF78DFC0E
:1028100010BD000070B504468078092824D008282F
:102820003FD001283CD120212748FDF77EFC2648D7
:10283000CD21017061784170802585700321C170C0
:102840002249082209780171002141718171012119
:10285000C171002104465C34635C002B2FD0022B35
:1028600026D0012B26D028E061792079FFF70FFCD4
:10287000154A4C321060E179A079FFF708FC5060EE
:10288000607B1072A07B9072E07B5072207CD072D3
:10289000607C10730C490D484C311830FFF770FF05
:1028A00070BD0948A27921794030FFF769FC70BDFD
:1028B000815402E00B462B438354521CD2B2491C74
:1028C0001029C9DB70BD000068020020180000203C
:1028D00010B5817B491E8907890F817300F03CF890
:1028E00010BD10B5817B491C8907890F817300F0E9
:1028F00033F810BDF8B506ACE0CC104C2560A680CE
:10290000A760099DA5811C340A9D25600B9DA580AB
:102910000C9DA5600D9DA581094CE0600EC4074883
:102920000C3C00F00FF82068FEF73CFB6068FEF7F7
:1029300039FBA068FEF736FBF8BD00004C00002014
:102940000400002010B500218173017581610182AE
:1029500000F002F810BD000070B50446807B094904
:102960000D5CA1882068EA0700D00122FDF7E1FC98
:10297000A807A189A06801D5012200E00022FDF787
:10298000D8FC70BD302A000811A0FFF76DFA134D76
:102990000024295D12A0FFF767FA641C202CF8DBE5
:1029A00010A0FFF761FA134D002408212846FDF717
:1029B000BCFC6420FDF7FAFB641C642CF5DBBFF360
:1029C0004F8F0E490C48C860BFF34F8F00BFFDE723
:1029D000535049204552524F520A000088020020AD
:1029E000256420000A7265626F6F74696E672E2E0F
:1029F0002E0A0000000400480400FA0500ED00E083
:102A000070B50546FDF79CFC0446084EFDF798FCA2
:102A1000001BA84201D9032070BD04213046FDF7F8
:102A20007FFC0128F2D1002070BD000000040048A6
:102A300000010302B92F01287D22141E661A4617D1
:102A4000E314AE12D710300FE60DCC0CE10B240BC3
:102A5000970A0A0A7D091F09C10863080408A60726
:102A600077071907EA06BB065D062E06FF05D005A7
:102A7000A105720543051405E404B5048604860423
:102A800057042804F903F903CA039B039B036C034F
:102A90006C033D033D030E030E03DF02DF02B002B1
:102AA000B0028102810281025202520252022302CA
:102AB0002302230200002527292B2F2D3539333BF4
:102AC00037316761191B1D1F232141453F47433D96
:102AD0004975010305070B094D514B534F6571555E
:102AE0000D0F1113175B5D575F5971056F6373000D
:102AF0000000000000000000000F003337391D2DDA
:102B00002F310D27292B2503000055000000000060
:102B10000000000019751B006F00001B000D050070
:102B20001100000000000000000000000000000094
:102B3000006F6F6F5553423456432050726F746F5D
:102B4000636F6C20426F6172640A4170706C652023
:102B50004C6973612C204D61632026204144420A58
:102B600064656B754E756B656D20323032320000D6
:102B7000000000000000000102030406070809002D
:102B80000000000102030400A82B00080000002040
:102B90004C000000881E0008F42B00084C000020A8
:102BA0008C080000981E00080000000000000000D3
:102BB0000000000000000000000000000000000015
:102BC0000000000000000000000000000000000005
:102BD00000000000000000000000000000000000F5
:102BE0000000000000127A00000000000000000059
:042BF00000000000E1
:10121000F8B52F4C07462078002855D060682D4E31
:10122000874238D12C49206900F08DFF2A4D00906B
:10123000288801B2304600F02BFFA88801B2304662
:101240001C3000F025FF304600F06EFFB0613046E4
:101250001C3000F069FF32461C329061B06900F02A
:1012600029FFA1680968C862906900F023FFE1685E
:101270000968C862009800280DD02A7A0121490324
:101280001648002A02D1AA7A002A01D0002200E0E2
:101290000122FFF74EF8A068874209D1B069002803
:1012A00006D00C4802DD01F0B1FB01E001F06EFB5D
:1012B000E068874208D107481C308069002803D0C5
:1012C000074802DD01F0A2FBF8BD01F05FFBF8BDAD
:1012D0000400002050000020880000200004004886
:1012E0006C000020704770B5040005D025466035BD
:1012F000687A002802D006E0012070BD0020287224
:10130000204600F027F82420687220680168490808
:1013100049000160204600F0C9FC0128EDD0606A58
:10132000002802D0204600F022FC206841680922F3
:10133000D20291434160206881682A2291438160F2
:1013400020680168012211430160204600F074FC0E
:1013500070BD000000B500680F4987B0884218D101
:101360000E488269012189030A438261806908402D
:10137000059003204002009002200190002002907E
:10138000032003900120049009206946C006FEF75F
:101390001BFF07B000BD00000038014000100240F4
:1013A000FFB5064604466036707A83B00D462028A5
:1013B00058D1002D0CD00598002809D00120A16833
:1013C0000003814207D12069002804D1E80702D038
:1013D000012007B0F0BD307A012843D001203072DF
:1013E0000020E06621207072FEF7AAFF01902746D8
:1013F0004037059838820598788218E0788A401E30
:10140000788206980090002280212046019B00F0FF
:10141000FBFC002818D10120A1680003814202D101
:101420002069002812D02168287808856D1C788AE8
:101430000028E3D106980090002240212046019B1D
:1014400000F0E2FC002808D00320C2E728882168C9
:10145000C005C00D0885AD1CE9E720207072002092
:101460003072B6E70220B4E7FEE70000F0B5374877
:1014700087B042690121C9040A43426142690A40B6
:101480000592426989100A43426142690A40059205
:10149000426949000A43426140694C110840059085
:1014A000002221462A48FEF744FFFF26093609207C
:1014B00001223146C006FEF73CFF00220A212548E2
:1014C000FEF737FF244F012239462248FEF731FF4D
:1014D0000022A1007806FEF72CFF009400240125CD
:1014E0000195029469461A480394FEF76DFE009632
:1014F000112602946946780601960394FEF764FE6D
:101500001648009002200290019469461148FEF7A7
:101510005BFE0A20009002946946019503940D48F1
:10152000FEF752FE029469460A480097019603941A
:10153000FEF74AFEE8030090029469460195039481
:101540007806FEF741FE07B0F0BD00000010024033
:10155000000800480004004824F50000110A0000BB
:1015600010B50D480B4901600021416081600161A7
:10157000416181610722016212024162C26081629F
:1015800007220163C2624163FFF726FB002800D0F7
:10159000FEE710BD003001409800002010B5012189
:1015A000124886B08907016000242F2184604160C1
:1015B0000461611E8461C160FFF780FC002800D0D7
:1015C000FEE701200003009069460848FFF7F5FC9C
:1015D000002800D0FEE7049404A904480594FFF70E
:1015E00049FC002800D0FEE706B010BDFC0000203A
:1015F00010B50C480A490160E1214902416000210F
:101600008160C16001618161C1610C22016242613E
:101610004162FFF768FE002800D0FEE710BD000021
:1016200000380140FC010020704700008307FF22C2
:10163000DB0E9A408907090E994000280BDA000753
:10164000000F0838830808489B001818C3699343A3
:101650000B43C3617047830804489B001B1818683C
:10166000904308431860704700ED00E000E400E09C
:101670007047000010B50248FFF744FA10BD0000A3
:101680009800002010B50168C968026C1180016CD7
:10169000891C016401464031CA88521ECA80C9882B
:1016A000002909D101684A6840239A434A60C18FE2
:1016B000002901D100F06EF810BD10B5014640318F
:1016C000CC880368026C012C11D9DB681380026C92
:1016D000921C0264CA88921ECA80CA88012A0DD14F
:1016E00002685368012424032343536006E01C7BF3
:1016F000531C03641470CA88521ECA80C98800290A
:1017000009D101684A6860239A434A60C18F002961
:1017100001D100F03FF810BD10B5816B0268098857
:10172000D160816B891C8163C18F491EC187C18FC4
:1017300000290AD101684A6880239A434A604621F9
:10174000095A002901D100F025F810BD10B5C38F4A
:101750000268816B022B07D30988D160816B891CD9
:101760008163C18F891E05E04B1C83630978117367
:10177000C18F491EC187C18F00290AD101684A68FB
:1017800080239A434A604621095A002901D100F07A
:1017900001F810BD70B50446FEF7D2FD0246206880
:1017A00041682025A94341606421204600F024F8C7
:1017B000002802D0206E28432066226E2046012198
:1017C0004030002A04D041772046FFF799F970BDD8
:1017D000427F4177042A204602D0FFF7EFFA70BD1E
:1017E000FFF780FA70BD10B5406A00214622115201
:1017F000C187FFF785F910BDF8B50F460B461546B2
:101800000092032104460022C90200F01BF82026A2
:10181000002812D13B46002280212046009500F08E
:101820005CF8002809D103213B46002249022046EA
:10183000009500F007F8002803D0206E30432066A2
:101840000320F8BDF8B51D4617460E4604463DE098
:10185000032149028E4205D1002F03D1017B684646
:1018600001700078681C31D0002D05D0FEF768FDAE
:101870000699401AA84229D320684168E022914382
:1018800041606068C11FFD390CD10121A068C90306
:10189000884202D04911884204D120680168402260
:1018A000914301600120A16A4003814207D1216870
:1018B0000A6882430A6021680A6802430A600120BC
:1018C00040346077002020770320F8BD20688168CD
:1018D0003140B942BCD10020F8BDF8B51D461746CD
:1018E0000E46044633E0681C31D0002D05D0FEF7CB
:1018F00027FD0699401AA84229D320684168E022B2
:10190000914341606068C11FFD390CD10121A0687D
:10191000C903884202D04911884204D12068016875
:101920004022914301600120A16A4003814207D116
:1019300021680A6882430A6021680A6802430A60D3
:10194000012040346077002020770320F8BD206814
:1019500081683046884304D00020B842C3D10020BB
:10196000F8BD0120F9E7704710B5FEF7EFFCFFF76F
:101970007BFA10BD30B599B02020012500240090DD
:10198000089509946846FEF7CFFE002800D0FEE7D0
:1019900007200D9003200E900F94012110940DA8A4
:1019A000FEF7BEFD002800D0FEE7119511A81395A3
:1019B000FEF726FD002800D0FEE7FEF75BFE7D2146
:1019C000C900FEF795FBFFF737FA0420FFF726FA68
:1019D00000221146501EFEF70FFD19B030BD000069
:1019E000124801680122114301604168104A114008
:1019F000416001680F4A11400160016801229204B0
:101A00009143016041683F22120491434160C16AE1
:101A100009090901C162016B074A11400163416B69
:101A2000490849004163002181607047001002406D
:101A30000CB8FF08FFFFF6FE2CFEFCFF10B50248B5
:101A4000FFF733FB10BD00003C01002010B5024839
:101A5000FFF72BFB10BD00007C01002010B50248F1
:101A6000FFF723FB10BD0000BC010020F0B50268A9
:101A70001D4B0124A4071D4D984203D0A04201D064
:101A8000A84203D17026B2434E683243184E194F14
:101A900098420DD0A0420BD0A84209D0164CA042CB
:101AA00006D0B04204D0B84202D0144CA04204D1B7
:101AB00003242402A243CC6822438024A2434C691D
:101AC000224302608A68C2620A688262984206D033
:101AD000B04204D0B84202D0084A904201D109690C
:101AE000016301214161F0BD002C01400004004070
:101AF00000400140004401400020004000480140F7
:101B000030B58468FF252D021B021343AC430B4301
:101B10002343836030BD826870239A430A430721C0
:101B20000A438260704730B5036A046A640864003F
:101B300004628469F025AC43120122430A24A343C2
:101B40000B438261036230BD30B5036A1024A343A6
:101B500003628469036A0F252D031203AC432243F9
:101B6000A024A343090119438261016230BD10B56D
:101B7000818CC90707D001684A6801235B049A4336
:101B8000836A1A434A60818C890707D501684A68CD
:101B900001231B049A43C36A1A434A60818C490794
:101BA00007D501684A6801239B049A43036B1A43D3
:101BB0004A60818C090707D501684A680123DB0365
:101BC0009A43436B1A434A60818CC90607D5026861
:101BD000916801231B039943836B19439160818CA6
:101BE000890607D501688A6801235B039A43C36BA2
:101BF0001A438A60818C490612D503685A6801210C
:101C00000905046C8A4322435A60026C8A4207D158
:101C10000268516803235B059943436C1943516083
:101C2000818C090607D501684A680123DB04806CB2
:101C30009A4302434A6010BDF8B500260446C666C2
:101C4000FEF77EFB054616492068884202D01549FA
:101C500088421DD10068144F000709D501212B4689
:101C6000002249052046009700F0CEF800280DD14B
:101C70002068006840070BD501212B46002289050A
:101C80002046009700F0C0F8002801D00320F8BDDE
:101C9000202060346072A07226720020F8BD00001F
:101CA0000038014000440040FFFFFF01F8B5044642
:101CB0002369A268E5691A43636910202B43002158
:101CC00025681A432B680E46474F3B4013432B6051
:101CD00023685A6803252D03AA43E5682A435A60FE
:101CE000236AA26925681A43AB680B273F02BB43EE
:101CF0001343AB603D4F25683D4B0203BD420AD103
:101D00001B6B9B079B0F20D0012B14D0022B14D0F0
:101D1000032B1BD10DE0374FBD4210D11B6B0327A6
:101D20003F043B4011D09B1A05D09B1A05D093422B
:101D30000CD102200AE0042008E0082006E02E4B27
:101D40009D4202D02D4B9D4200D100200123E76926
:101D5000DB039F4222D100280CD002280DD004289A
:101D600013D0082817D001260A0912010807400FCE
:101D700010432EE0FEF784FC09E06168204A480821
:101D80008018FEF7B5F981B2EEE7FEF789FC6168CD
:101D900040004A08F4E761684808F1E7002808D0E5
:101DA000022809D004280CD0082815D00126304676
:101DB000F8BDFEF765FC06E06168124A4808801825
:101DC0000DE0FEF76DFC61684A088018FEF790F997
:101DD00080B22168C860EAE761684808C018FEF769
:101DE00087F980B2E860E2E7F369FFEF003801406D
:101DF000001002400044004000480040004C0040F9
:101E00000024F40000127A00FFB581B017460E4698
:101E100004460A9D1DE0681C1BD0002D05D0FEF76E
:101E20008FFA0499401AA84213D920680168FF224A
:101E3000A1329143016020688168490849008160AE
:101E4000202060346072A07200202072032005B050
:101E5000F0BD2068C1693046884304D00020B842F4
:101E6000D9D00020F3E70120F9E700000FB410B546
:101E700003A9044B044A029800F024F810BC08BCE3
:101E800004B01847112100084400002030B4744603
:101E9000641E2578641CAB4200D21D46635D5B0066
:101EA000E31830BC184702E008C8121F08C1002A16
:101EB000FAD170477047002001E001C1121F002ACB
:101EC000FBD17047FFB58DB00F460546002606E0F2
:101ED00025280AD0109A0F9990476D1C761C2878F7
:101EE0000028F5D1304611B0F0BD00240121674A29
:101EF000009400E004436D1C2B780846203B98407A
:101F00001042F7D128782E2815D104200443687890
:101F10006D1C2A280AD101CF6D1C00900BE000999E
:101F20000A225143303940186D1C00902878014630
:101F300030390929F3D92878692843D006DC0028EC
:101F4000D0D063280BD0642804D13BE073280FD095
:101F500075284CD0109A0F999047761C94E03878E9
:101F6000694608720020487202A80190012003E02F
:101F7000386801900020C0433F1D61070CD5002444
:101F800000E0641C00998C420FDA8442F9DB01996D
:101F9000095D0029F5D108E0002400E0641C8442BA
:101FA000FCDB0199095D0029F8D1361907E0019899
:101FB00001990078491C0191109A0F999047641E6D
:101FC000F5D261E00A20019001CF002802DA4042F8
:101FD0002D2102E0210504D52B216A461172012131
:101FE00003E0E10701D02021F7E70C9104E00A208B
:101FF000019001CF00210C910BA90B9108E00199F0
:10200000FEF776F80A460B993032491E0B910A709A
:102010000028F4D10B9803A9081A2030019060071A
:1020200001D5009801E0012000900199884203DD6C
:1020300001460198081A00E000200024009006E004
:1020400002A8109A005D0F999047641C761C0C98AA
:102050008442F5DB04E0109A30200F999047761CFB
:102060000099481E00900029F5DC08E00B980B99B8
:102070000078491C0B91109A0F999047761C019992
:10208000481E01900029F1DC6D1C28E70928010099
:10209000027D520012181182017D491CC9B20175DE
:1020A000022901D30021017570470902014308B2DA
:1020B00070470000002800DA4042002801DD402877
:1020C00002DBFF20F530704701494000085A704795
:1020D000682B000802687F2A01DD7F2103E07E2152
:1020E000C9438A4200DA0160704700B5014600F03A
:1020F0007FFB411800F07CFB8842FBD300BD000051
:1021000010B502490860FEF741FF10BD0000002035
:1021100013B50A23012269460248FFF741F90098E6
:102120001CBD0000FC01002010B500210A46530030
:102130001C181023E35E521C5918022AF7DBC80F43
:102140004018401010BD30B500240C604C600C727B
:102150000B4605468C72284600F07EFB002815D001
:1021600019680268891819605968426889185960A5
:10217000197A027A11431972997A807A0143997215
:10218000284600F073FB641CE4B2E4E71846FFF74E
:10219000A1FF181DFFF79EFF204630BD70B5440615
:1021A000C209640ED201102C24D2134D295D0029DE
:1021B00020D04006400EC01E002A0DD0022919D1A1
:1021C0000300FFF763FE0707070707070705070078
:1021D00000F00CFC01200CE001290BD10300FFF7FB
:1021E00055FE0707070707070705070000F0D8FB9C
:1021F0000220285570BD0000C802002010B50C4612
:10220000034600F01FF8002801D0012010BD197806
:10221000586844541978986842541878401C40070C
:10222000400F1870002010BD10B50446082000F0C3
:10223000A9FA6060082000F0A5FAA060204600F02E
:1022400025F810BD41780078401C4007400F8142BE
:1022500001D1012070470020704710B54378047801
:10226000A34201D1012010BD4468E35C0B7081687A
:102270004078085C1070002010BD417802789142CF
:1022800003D0491C4907490F4170704710B50446F7
:1022900000202070607008216068FDF746FF08216B
:1022A000A068FDF742FF10BD70B51D4C20790028D5
:1022B0002ED0FEF745F8E1680025401AFA2803D928
:1022C0007B2000F0FBF822E02079002820D0144881
:1022D000103000F046F8002817D02079002817D0D9
:1022E0000F4A1048921D511EFFF7B7FF00280FD16B
:1022F0000B48103000F05CF8094AA179103260797F
:1023000000F0D4F9002804D006E000F007F92571A8
:1023100070BD00F003F925710248FFF7AEFF70BDF4
:102320001C000020AC02002000B50B46024600F065
:1023300020F8002801D0012000BD117850684354D6
:102340001078401C8007800F1070002000BD10B571
:102350000446042000F016FA6060204600F028F8D9
:1023600010BD41780078814201D1012070470020E2
:10237000704741780078401C8007800F814201D16E
:102380000120704700207047427803789A4201D1BB
:10239000012070474068805C0870002070474178D9
:1023A0000278914203D0491C8907890F4170704718
:1023B00010B500210170417040680421FDF7B5FEA1
:1023C00010BD000070B5FDF7BBFF0446084D07E0E7
:1023D00004212846FDF7A4FF002801D0012070BD8C
:1023E000FDF7AEFF001B0A28F2D3022070BD0000EB
:1023F00000040048F1B500258024114FE6000022BA
:1024000031463846FDF795FFB420FFF76EFE0122F6
:1024100031463846FDF78DFF5020FFF766FE042158
:102420003846FDF77DFF012800D1254364088C2044
:10243000FFF75BFE002CE2D1009805700020F8BD8C
:102440000004004870B50C460546FFF7BBFF0128A5
:1024500005D02846FFF7CEFF204600F06BFB70BD8D
:1024600010B54B21C9001448FFF7ECFF124C641E55
:10247000A07000280FD16078102807D014280BD046
:10248000162814D0362806D17D2011E001202071B5
:10249000FDF756FFE06010BD07480F30FFF761FF02
:1024A000002801D07B2003E000F038F810BD0B209D
:1024B00000F004F810BD00001D000020F8B5012256
:1024C000154E0746950229463046FDF732FFC820D3
:1024D00000F030FB03281ED007240120A040384222
:1024E00001D0012200E0002204213046FDF721FF47
:1024F000002229463046FDF71CFFA020FFF7F5FD1E
:10250000012229463046FDF714FFAA20FFF7EDFD12
:10251000641EE2D50020F8BD0004004808B56946F5
:102520000548FFF731FF0448FFF739FF6846007898
:10253000FFF7C4FF08BD00002C00002088B0FDF7A5
:102540000DFFFFF717FAFEF791FFFFF709F8FFF706
:102550004FF8FFF723F847480024474E846044496A
:10256000C6602F25046122C080270C3090C01C3823
:10257000FEF7A4FC002800D0FEE73E483F4940306B
:10258000846022C08460C4603D49046141600838B1
:10259000FEF794FC002800D0FEE736483949403861
:1025A00084608761C660046122C00838FEF786FC3B
:1025B000002800D0FEE70120334D01900094002355
:1025C0002A78324932A0FFF751FC2A488038FFF7B9
:1025D00097FD00F0C9F928461030FFF7B8FE3148E2
:1025E000FFF722FE2846183000F020F92D48202160
:1025F0004038FDF79AFD2B4A1E482023203AD11A75
:10260000E438FEF771FB01200003C600079080004C
:10261000254C81110694174A0927164B0191039006
:102620000596FF06114628460494403B0097029405
:102630004031183000F0F4F9E878002801D000F0BB
:102640003DFA00F0D5F8A968884204D90022314645
:102650003846FDF76EFE012189022046FDF760FE37
:102660000028E9D0FFF7FCFEFFF71EFEE4E70000BC
:10267000004401407C010020FFFF000000480140B1
:1026800010270000002000401C000020682C0008DB
:1026900025730A7265762564207625642E25642EBE
:1026A00025640A00AC0200200004004870B5002434
:1026B0001646802801D2314A145C02293BD0002CF6
:1026C00039D080253A282CD037283DD04E283BD011
:1026D000622839D0452843D0472841D048283FD0E8
:1026E00049283DD04A283BD04B2839D04C2837D0F8
:1026F0004D2835D04F2833D0502831D051282FD0F5
:1027000052282DD053282BD0602829D0672827D0D5
:10271000692825D06A2823D06C2821D0002908D127
:102720002AE0002907D01648012102789143017060
:1027300003D0214603E0042070BD214629433046E2
:10274000FFF7F2FD002070BD002904D07121304652
:10275000FFF7EAFD06E0F1213046FFF7E5FD06E070
:10276000002904D079213046FFF7DEFDE1E7792129
:102770003046FFF7D9FDE0E72C43DAE7E82B000805
:1027800018000020F0B50B30C108C900144F002616
:10279000144A0FE003688B420BD38B4205D95C1AB5
:1027A0004318456830C3083B00E04368136002C02B
:1027B00004E0021D10680028ECD13046002803D147
:1027C0003868002801D00020F0BD064A0648106095
:1027D000064A121AD208D20044C001203860D7E756
:1027E0004C00002048000020DC020020D80400201B
:1027F000024800680068406A70470000000000203E
:1028000030B50B46024600F01CF8002801D001202C
:1028100030BD11785068090140183ACB3AC01078A1
:10282000401C0007000F1070002030BD10B504469A
:10283000FF200130FFF7A6FF6060204600F01FF880
:1028400010BD41780078401C0007000F814201D183
:10285000012070470020704741780278914201D1F1
:10286000002070474068090140187047417802789D
:10287000914203D0491C0907090F4170704710B5F8
:10288000002101704170FF2140680131FDF74DFCCE
:1028900010BD000070B50446807809280FD00828C4
:1028A00027D001282CD0022808D10325605D0028FC
:1028B00004D0FFF773FC6D1C202DF7DB70BD617930
:1028C0002079FFF7F2FB264A1060E179A079FFF743
:1028D000ECFB5060607B1072A07B9072E07B5072CA
:1028E000207CD072607C10731D491E48FFF788FF62
:1028F00070BD1B48A27921790C38FFF77FFC70BDB1
:10290000174820214C38FDF710FC1548CD214C38D4
:10291000017061784170802585700321C170114973
:102920000822183909780171002141718171012152
:10293000C171002104465C34635C002B0BD0022B78
:1029400002D0012B02D004E0815402E00B462B435D
:102950008354521CD2B2491C1029EDDB70BD00001B
:10296000B8020020340000200748002101634163C1
:102970008163C16301213030C170817102214172D4
:102980008172C172704700009802002010B5817BEF
:10299000491E8907890F817300F078F810BD000087
:1029A00010B50F4900200F4C0870A1880122206843
:1029B000FDF7BFFCA1890122A068FDF7BAFC1C3419
:1029C000A18801222068FDF7B4FCA1890122A0683A
:1029D000FDF7AFFC012251030348FDF7AAFC10BD2F
:1029E00004000020500000200004004810B50548F5
:1029F00000F042F803481C3000F03EF80249012084
:102A0000087010BD500000200400002010B5817B2C
:102A1000491C8907890F817300F038F810BD000048
:102A2000F8B506ACE0CC124C2560A680A760099DE5
:102A3000A5811C340A9D25600B9DA5800C9DA56079
:102A40000D9DA5810B4C2061241D0EC40848103C2F
:102A500000F012F806481C3000F00EF86068FEF72F
:102A6000A1FAA068FEF79EFAE068FEF79BFAF8BDAF
:102A7000500000200400002010B500218173017572
:102A80008161018200F002F810BD000070B50446BB
:102A9000807B09490D5CA1882068EA0700D00122EB
:102AA000FDF747FCA807A189A06801D5012200E035
:102AB0000022FDF73EFC70BD642B000811A0FFF75B
:102AC000D5F9134D0024295D12A0FFF7CFF9641C3E
:102AD000202CF8DB10A0FFF7C9F9134D00240821C2
:102AE0002846FDF722FC6420FDF760FB641C642C83
:102AF000F5DBBFF34F8F0E490C48C860BFF34F8F13
:102B000000BFFDE7535049204552524F520A000082
:102B10008C020020256420000A7265626F6F746960
:102B20006E672E2E2E0A0000000400480400FA05ED
:102B300000ED00E070B50546FDF702FC0446084EC6
:102B4000FDF7FEFB001BA84201D9032070BD042144
:102B50003046FDF7E5FB0128F2D1002070BD0000F2
:102B60000004004800010302B92F01287D22141E31
:102B7000661A4617E314AE12D710300FE60DCC0CD0
:102B8000E10B240B970A0A0A7D091F09C108630893
:102B90000408A60777071907EA06BB065D062E0696
:102BA000FF05D005A105720543051405E404B5042D
:102BB0008604860457042804F903F903CA039B0317
:102BC0009B036C036C033D033D030E030E03DF0206
:102BD000DF02B002B002810281028102520252027F
:102BE000520223022302230200002527292B2F2D26
:102BF0003539333B37316761191B1D1F232141458F
:102C00003F47433D4975010305070B094D514B53A0
:102C10004F6571550D0F1113175B5D575F597105A6
:102C20006F6373000000000000000000000F00331D
:102C300037391D2D2F310D27292B25030000550075
:102C4000000000000000000019751B006F00001B51
:102C5000000D050011000000000000000000000051
:102C600000000000006F6F6F5553423456432050F0
:102C7000726F746F636F6C20426F6172640A41708F
:102C8000706C65205072652D5553420A64656B75F2
:102C90004E756B656D20323032320000000000004E
:102CA00000000001020304060708090000000001FB
:102CB00002030400D42C0008000000205000000093
:102CC000A61E0008242D00085000002088080000DF
:102CD000B61E000800000000000000000000000018
:102CE00000000000000000000000000000000000E4
:102CF00000000000000000000000000000000000D4
:102D000000000000000000000000000000000000C3
:102D10000000000000127A00000000000000000027
:042D200000000000AF
:04000005080000C12E
:00000001FF

View File

@@ -3,7 +3,7 @@
<title>Static Call Graph - [apple_all\apple_all.axf]</title></head>
<body><HR>
<H1>Static Call Graph for image apple_all\apple_all.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Tue Aug 02 14:35:31 2022
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Wed Aug 03 04:45:18 2022
<BR><P>
<H3>Maximum Stack Usage = 228 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3>
@@ -73,7 +73,7 @@ Global Symbols
<P><STRONG><a name="[28]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072xb.o(.text)
</UL>
<P><STRONG><a name="[a9]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
<P><STRONG><a name="[ae]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
<P><STRONG><a name="[2f]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
<BR><BR>[Calls]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
@@ -83,15 +83,15 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
</UL>
<P><STRONG><a name="[aa]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
<P><STRONG><a name="[af]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
<P><STRONG><a name="[ab]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
<P><STRONG><a name="[b0]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
<P><STRONG><a name="[ac]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
<P><STRONG><a name="[b1]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
<P><STRONG><a name="[ad]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
<P><STRONG><a name="[b2]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
<P><STRONG><a name="[ae]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
<P><STRONG><a name="[b3]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
<P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f072xb.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072xb.o(RESET)
@@ -184,7 +184,7 @@ Global Symbols
<P><STRONG><a name="[6]"></a>WWDG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f072xb.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072xb.o(RESET)
</UL>
<P><STRONG><a name="[af]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
<P><STRONG><a name="[b4]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
<P><STRONG><a name="[3b]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
@@ -201,24 +201,24 @@ Global Symbols
<LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<P><STRONG><a name="[b0]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[b5]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[b1]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[b6]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[31]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
</UL>
<BR>[Called By]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_reset
<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_reset
<BR>[Called By]<UL><LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_reset
<LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_reset
</UL>
<P><STRONG><a name="[9e]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
<P><STRONG><a name="[a3]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;parse_spi_buf
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
</UL>
<P><STRONG><a name="[b2]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[b7]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[33]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
@@ -230,7 +230,7 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload
</UL>
<P><STRONG><a name="[b3]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
<P><STRONG><a name="[b8]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
<P><STRONG><a name="[44]"></a>HAL_DMA_Abort_IT</STRONG> (Thumb, 72 bytes, Stack size 16 bytes, stm32f0xx_hal_dma.o(i.HAL_DMA_Abort_IT))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = HAL_DMA_Abort_IT
@@ -243,7 +243,7 @@ Global Symbols
</UL>
<BR>[Calls]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
</UL>
<BR>[Called By]<UL><LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<BR>[Called By]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
</UL>
<P><STRONG><a name="[48]"></a>HAL_GPIO_Init</STRONG> (Thumb, 314 bytes, Stack size 24 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_Init))
@@ -254,24 +254,25 @@ Global Symbols
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
</UL>
<P><STRONG><a name="[95]"></a>HAL_GPIO_ReadPin</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin))
<P><STRONG><a name="[99]"></a>HAL_GPIO_ReadPin</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_ReadPin))
<BR><BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_get_line_status
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
<LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_get_line_status
</UL>
<P><STRONG><a name="[a8]"></a>HAL_GPIO_TogglePin</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin))
<BR><BR>[Called By]<UL><LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<P><STRONG><a name="[ad]"></a>HAL_GPIO_TogglePin</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_TogglePin))
<BR><BR>[Called By]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
</UL>
<P><STRONG><a name="[4b]"></a>HAL_GPIO_WritePin</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_hal_gpio.o(i.HAL_GPIO_WritePin))
<BR><BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TxRxCpltCallback
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
<LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
<LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_disable
<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_PeriodElapsedCallback
</UL>
@@ -281,10 +282,10 @@ Global Symbols
<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCC_ClockConfig
<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_RCCEx_PeriphCLKConfig
<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_get_line_status
<LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_get_line_status
<LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_WaitFlagStateUntilTimeout
<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_WaitFifoStateUntilTimeout
<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_CloseRxTx_ISR
@@ -431,7 +432,7 @@ Global Symbols
</UL>
<P><STRONG><a name="[4a]"></a>HAL_SPI_TxRxCpltCallback</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, main.o(i.HAL_SPI_TxRxCpltCallback))
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = HAL_SPI_TxRxCpltCallback &rArr; parse_spi_buf &rArr; mouse_buf_add
<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = HAL_SPI_TxRxCpltCallback &rArr; parse_spi_buf &rArr; handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TransmitReceive_IT
<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;parse_spi_buf
@@ -503,8 +504,8 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us_init
</UL>
<P><STRONG><a name="[a7]"></a>HAL_TIM_Base_Start_IT</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT))
<BR><BR>[Called By]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_init
<P><STRONG><a name="[ac]"></a>HAL_TIM_Base_Start_IT</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, stm32f0xx_hal_tim.o(i.HAL_TIM_Base_Start_IT))
<BR><BR>[Called By]<UL><LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_init
</UL>
<P><STRONG><a name="[54]"></a>HAL_TIM_ConfigClockSource</STRONG> (Thumb, 238 bytes, Stack size 24 bytes, stm32f0xx_hal_tim.o(i.HAL_TIM_ConfigClockSource))
@@ -546,7 +547,7 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_IRQHandler
</UL>
<P><STRONG><a name="[5d]"></a>HAL_TIM_PeriodElapsedCallback</STRONG> (Thumb, 186 bytes, Stack size 24 bytes, quad_encoder.o(i.HAL_TIM_PeriodElapsedCallback))
<P><STRONG><a name="[5d]"></a>HAL_TIM_PeriodElapsedCallback</STRONG> (Thumb, 192 bytes, Stack size 24 bytes, quad_encoder.o(i.HAL_TIM_PeriodElapsedCallback))
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = HAL_TIM_PeriodElapsedCallback &rArr; quad_increment &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;get_consolidated_mouse_event
@@ -712,26 +713,32 @@ Global Symbols
<BR><BR>[Calls]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core
</UL>
<P><STRONG><a name="[b4]"></a>__1printf$3</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf3.o(i.__0printf$3), UNUSED)
<P><STRONG><a name="[b9]"></a>__1printf$3</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf3.o(i.__0printf$3), UNUSED)
<P><STRONG><a name="[9c]"></a>__2printf</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf3.o(i.__0printf$3))
<P><STRONG><a name="[a0]"></a>__2printf</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf3.o(i.__0printf$3))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __2printf
</UL>
<BR>[Called By]<UL><LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<BR>[Called By]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[b5]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
<P><STRONG><a name="[85]"></a>__ARM_common_switch8</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, main.o(i.__ARM_common_switch8))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __ARM_common_switch8
</UL>
<BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
</UL>
<P><STRONG><a name="[b6]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
<P><STRONG><a name="[ba]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
<P><STRONG><a name="[b7]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
<P><STRONG><a name="[bb]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
<P><STRONG><a name="[bc]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
<P><STRONG><a name="[62]"></a>avg_buf_add</STRONG> (Thumb, 26 bytes, Stack size 0 bytes, quad_encoder.o(i.avg_buf_add))
<BR><BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_PeriodElapsedCallback
</UL>
<P><STRONG><a name="[a4]"></a>byte_to_int16_t</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, main.o(i.byte_to_int16_t))
<P><STRONG><a name="[a9]"></a>byte_to_int16_t</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, main.o(i.byte_to_int16_t))
<BR><BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;parse_spi_buf
</UL>
@@ -748,8 +755,8 @@ Global Symbols
</UL>
<BR>[Calls]<UL><LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;micros
</UL>
<BR>[Called By]<UL><LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
<BR>[Called By]<UL><LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
</UL>
<P><STRONG><a name="[7f]"></a>delay_us_init</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, delay_us.o(i.delay_us_init))
@@ -783,208 +790,219 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_PeriodElapsedCallback
</UL>
<P><STRONG><a name="[84]"></a>kb_buf_add</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_add))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = kb_buf_add
<P><STRONG><a name="[84]"></a>handle_protocol_switch</STRONG> (Thumb, 90 bytes, Stack size 16 bytes, main.o(i.handle_protocol_switch))
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_is_full
<BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
<LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_enable
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_disable
</UL>
<BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;parse_spi_buf
</UL>
<P><STRONG><a name="[86]"></a>kb_buf_init</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_init))
<P><STRONG><a name="[88]"></a>kb_buf_add</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_add))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = kb_buf_add
</UL>
<BR>[Calls]<UL><LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_is_full
</UL>
<BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;parse_spi_buf
</UL>
<P><STRONG><a name="[8a]"></a>kb_buf_init</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = kb_buf_init &rArr; malloc
</UL>
<BR>[Calls]<UL><LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_reset
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;malloc
<BR>[Calls]<UL><LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_reset
<LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;malloc
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[85]"></a>kb_buf_is_full</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, helpers.o(i.kb_buf_is_full))
<BR><BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_add
<P><STRONG><a name="[89]"></a>kb_buf_is_full</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, helpers.o(i.kb_buf_is_full))
<BR><BR>[Called By]<UL><LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_add
</UL>
<P><STRONG><a name="[8c]"></a>kb_buf_peek</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_peek))
<P><STRONG><a name="[90]"></a>kb_buf_peek</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_peek))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = kb_buf_peek
</UL>
<BR>[Called By]<UL><LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<BR>[Called By]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
</UL>
<P><STRONG><a name="[90]"></a>kb_buf_pop</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, helpers.o(i.kb_buf_pop))
<BR><BR>[Called By]<UL><LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<P><STRONG><a name="[94]"></a>kb_buf_pop</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, helpers.o(i.kb_buf_pop))
<BR><BR>[Called By]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
</UL>
<P><STRONG><a name="[88]"></a>kb_buf_reset</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_reset))
<P><STRONG><a name="[8c]"></a>kb_buf_reset</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, helpers.o(i.kb_buf_reset))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = kb_buf_reset
</UL>
<BR>[Calls]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<BR>[Called By]<UL><LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_init
<BR>[Called By]<UL><LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_init
</UL>
<P><STRONG><a name="[89]"></a>m0100a_handle_inquiry</STRONG> (Thumb, 120 bytes, Stack size 16 bytes, main.o(i.m0100a_handle_inquiry))
<P><STRONG><a name="[8d]"></a>m0100a_handle_inquiry</STRONG> (Thumb, 120 bytes, Stack size 16 bytes, main.o(i.m0100a_handle_inquiry))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = m0100a_handle_inquiry &rArr; m0110a_write_1b_from_buf &rArr; m0110a_write &rArr; wait_for_data_idle
</UL>
<BR>[Calls]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<BR>[Calls]<UL><LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;make_m0110a_scancode
<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_reset
<LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_is_empty
<LI><a href="#[90]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_pop
<LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_peek
<LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;make_m0110a_scancode
<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_reset
<LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_is_empty
<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_pop
<LI><a href="#[90]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_peek
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[91]"></a>m0110a_cmd_buf_add</STRONG> (Thumb, 38 bytes, Stack size 4 bytes, m0110a.o(i.m0110a_cmd_buf_add))
<P><STRONG><a name="[95]"></a>m0110a_cmd_buf_add</STRONG> (Thumb, 38 bytes, Stack size 4 bytes, m0110a.o(i.m0110a_cmd_buf_add))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = m0110a_cmd_buf_add
</UL>
<BR>[Calls]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_is_full
<BR>[Calls]<UL><LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_is_full
</UL>
<BR>[Called By]<UL><LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;make_m0110a_scancode
<BR>[Called By]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;make_m0110a_scancode
</UL>
<P><STRONG><a name="[93]"></a>m0110a_cmd_buf_init</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, m0110a.o(i.m0110a_cmd_buf_init))
<P><STRONG><a name="[97]"></a>m0110a_cmd_buf_init</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, m0110a.o(i.m0110a_cmd_buf_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = m0110a_cmd_buf_init &rArr; malloc
</UL>
<BR>[Calls]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_reset
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;malloc
<BR>[Calls]<UL><LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_reset
<LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;malloc
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[8b]"></a>m0110a_cmd_buf_is_empty</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_is_empty))
<BR><BR>[Called By]<UL><LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<P><STRONG><a name="[8f]"></a>m0110a_cmd_buf_is_empty</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_is_empty))
<BR><BR>[Called By]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
</UL>
<P><STRONG><a name="[92]"></a>m0110a_cmd_buf_is_full</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_is_full))
<BR><BR>[Called By]<UL><LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_add
<P><STRONG><a name="[96]"></a>m0110a_cmd_buf_is_full</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_is_full))
<BR><BR>[Called By]<UL><LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_add
</UL>
<P><STRONG><a name="[9a]"></a>m0110a_cmd_buf_peek</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_peek))
<BR><BR>[Called By]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<P><STRONG><a name="[9e]"></a>m0110a_cmd_buf_peek</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_peek))
<BR><BR>[Called By]<UL><LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
</UL>
<P><STRONG><a name="[9b]"></a>m0110a_cmd_buf_pop</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_pop))
<BR><BR>[Called By]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<P><STRONG><a name="[9f]"></a>m0110a_cmd_buf_pop</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, m0110a.o(i.m0110a_cmd_buf_pop))
<BR><BR>[Called By]<UL><LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
</UL>
<P><STRONG><a name="[8d]"></a>m0110a_cmd_buf_reset</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, m0110a.o(i.m0110a_cmd_buf_reset))
<P><STRONG><a name="[91]"></a>m0110a_cmd_buf_reset</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, m0110a.o(i.m0110a_cmd_buf_reset))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = m0110a_cmd_buf_reset
</UL>
<BR>[Calls]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<BR>[Called By]<UL><LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_init
<BR>[Called By]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_init
</UL>
<P><STRONG><a name="[94]"></a>m0110a_get_line_status</STRONG> (Thumb, 42 bytes, Stack size 16 bytes, m0110a.o(i.m0110a_get_line_status))
<P><STRONG><a name="[98]"></a>m0110a_get_line_status</STRONG> (Thumb, 42 bytes, Stack size 16 bytes, m0110a.o(i.m0110a_get_line_status))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = m0110a_get_line_status
</UL>
<BR>[Calls]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL>
<BR>[Called By]<UL><LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
<BR>[Called By]<UL><LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
</UL>
<P><STRONG><a name="[96]"></a>m0110a_read</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, m0110a.o(i.m0110a_read))
<P><STRONG><a name="[9a]"></a>m0110a_read</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, m0110a.o(i.m0110a_read))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = m0110a_read &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<BR>[Calls]<UL><LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
<BR>[Called By]<UL><LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
</UL>
<P><STRONG><a name="[97]"></a>m0110a_read_host_cmd</STRONG> (Thumb, 28 bytes, Stack size 16 bytes, m0110a.o(i.m0110a_read_host_cmd))
<P><STRONG><a name="[9b]"></a>m0110a_read_host_cmd</STRONG> (Thumb, 28 bytes, Stack size 16 bytes, m0110a.o(i.m0110a_read_host_cmd))
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = m0110a_read_host_cmd &rArr; m0110a_read &rArr; delay_us
</UL>
<BR>[Calls]<UL><LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_get_line_status
<BR>[Calls]<UL><LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read
<LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_get_line_status
</UL>
<BR>[Called By]<UL><LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<BR>[Called By]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
</UL>
<P><STRONG><a name="[99]"></a>m0110a_update</STRONG> (Thumb, 86 bytes, Stack size 8 bytes, main.o(i.m0110a_update))
<P><STRONG><a name="[9d]"></a>m0110a_update</STRONG> (Thumb, 86 bytes, Stack size 8 bytes, main.o(i.m0110a_update))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = m0110a_update &rArr; m0110a_write_1b_from_buf &rArr; m0110a_write &rArr; wait_for_data_idle
</UL>
<BR>[Calls]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<BR>[Calls]<UL><LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
<LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_is_empty
<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
<LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_is_empty
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[8a]"></a>m0110a_write</STRONG> (Thumb, 92 bytes, Stack size 24 bytes, m0110a.o(i.m0110a_write))
<P><STRONG><a name="[8e]"></a>m0110a_write</STRONG> (Thumb, 92 bytes, Stack size 24 bytes, m0110a.o(i.m0110a_write))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = m0110a_write &rArr; wait_for_data_idle
</UL>
<BR>[Calls]<UL><LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<BR>[Calls]<UL><LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wait_for_data_idle
<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<BR>[Called By]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<BR>[Called By]<UL><LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write_1b_from_buf
<LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
</UL>
<P><STRONG><a name="[8f]"></a>m0110a_write_1b_from_buf</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, main.o(i.m0110a_write_1b_from_buf))
<P><STRONG><a name="[93]"></a>m0110a_write_1b_from_buf</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, main.o(i.m0110a_write_1b_from_buf))
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = m0110a_write_1b_from_buf &rArr; m0110a_write &rArr; wait_for_data_idle
</UL>
<BR>[Calls]<UL><LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_pop
<LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_peek
<BR>[Calls]<UL><LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_pop
<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_peek
</UL>
<BR>[Called By]<UL><LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<BR>[Called By]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
</UL>
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 302 bytes, Stack size 32 bytes, main.o(i.main))
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 306 bytes, Stack size 32 bytes, main.o(i.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 228<LI>Call Chain = main &rArr; SystemClock_Config &rArr; HAL_RCC_ClockConfig &rArr; HAL_RCC_GetSysClockFreq &rArr; __aeabi_uidivmod
</UL>
<BR>[Calls]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Init
<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TransmitReceive_IT
<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Init
<LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_error_dump_reboot
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;protocol_status_lookup_init
<LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_update
<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemClock_Config
<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_USART1_UART_Init
<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_TIM2_Init
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_SPI1_Init
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MX_GPIO_Init
<LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_init
<LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_init
<LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_init
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_init
<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_init
<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_init
<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_init
<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_init
<LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;micros
<LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us_init
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
<LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
</UL>
<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
</UL>
<P><STRONG><a name="[8e]"></a>make_m0110a_scancode</STRONG> (Thumb, 208 bytes, Stack size 16 bytes, m0110a.o(i.make_m0110a_scancode))
<P><STRONG><a name="[92]"></a>make_m0110a_scancode</STRONG> (Thumb, 208 bytes, Stack size 16 bytes, m0110a.o(i.make_m0110a_scancode))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = make_m0110a_scancode &rArr; m0110a_cmd_buf_add
</UL>
<BR>[Calls]<UL><LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_add
<BR>[Calls]<UL><LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_add
</UL>
<BR>[Called By]<UL><LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
<BR>[Called By]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0100a_handle_inquiry
</UL>
<P><STRONG><a name="[87]"></a>malloc</STRONG> (Thumb, 92 bytes, Stack size 20 bytes, malloc.o(i.malloc))
<P><STRONG><a name="[8b]"></a>malloc</STRONG> (Thumb, 92 bytes, Stack size 20 bytes, malloc.o(i.malloc))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = malloc
</UL>
<BR>[Called By]<UL><LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_init
<LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_init
<LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_init
<BR>[Called By]<UL><LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_cmd_buf_init
<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_init
<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_init
</UL>
<P><STRONG><a name="[4e]"></a>micros</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, delay_us.o(i.micros))
@@ -993,25 +1011,25 @@ Global Symbols
<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
</UL>
<P><STRONG><a name="[a1]"></a>mouse_buf_add</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, helpers.o(i.mouse_buf_add))
<P><STRONG><a name="[a6]"></a>mouse_buf_add</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, helpers.o(i.mouse_buf_add))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = mouse_buf_add
</UL>
<BR>[Calls]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_is_full
<BR>[Calls]<UL><LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_is_full
</UL>
<BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;parse_spi_buf
</UL>
<P><STRONG><a name="[9d]"></a>mouse_buf_init</STRONG> (Thumb, 22 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_init))
<P><STRONG><a name="[a2]"></a>mouse_buf_init</STRONG> (Thumb, 22 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = mouse_buf_init &rArr; malloc
</UL>
<BR>[Calls]<UL><LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;malloc
<BR>[Calls]<UL><LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_reset
<LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;malloc
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[a2]"></a>mouse_buf_is_full</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, helpers.o(i.mouse_buf_is_full))
<BR><BR>[Called By]<UL><LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_add
<P><STRONG><a name="[a7]"></a>mouse_buf_is_full</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, helpers.o(i.mouse_buf_is_full))
<BR><BR>[Called By]<UL><LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_add
</UL>
<P><STRONG><a name="[81]"></a>mouse_buf_peek</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, helpers.o(i.mouse_buf_peek))
@@ -1022,86 +1040,108 @@ Global Symbols
<BR><BR>[Called By]<UL><LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;get_consolidated_mouse_event
</UL>
<P><STRONG><a name="[a3]"></a>mouse_buf_reset</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_reset))
<P><STRONG><a name="[a8]"></a>mouse_buf_reset</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, helpers.o(i.mouse_buf_reset))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = mouse_buf_reset
</UL>
<BR>[Calls]<UL><LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
<BR>[Calls]<UL><LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
</UL>
<BR>[Called By]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_init
<BR>[Called By]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_init
</UL>
<P><STRONG><a name="[4c]"></a>parse_spi_buf</STRONG> (Thumb, 178 bytes, Stack size 16 bytes, main.o(i.parse_spi_buf))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = parse_spi_buf &rArr; mouse_buf_add
<P><STRONG><a name="[4c]"></a>parse_spi_buf</STRONG> (Thumb, 202 bytes, Stack size 16 bytes, main.o(i.parse_spi_buf))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = parse_spi_buf &rArr; handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;byte_to_int16_t
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_add
<LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_add
<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
<BR>[Calls]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
<LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;byte_to_int16_t
<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mouse_buf_add
<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;kb_buf_add
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
</UL>
<BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TxRxCpltCallback
</UL>
<P><STRONG><a name="[a1]"></a>protocol_status_lookup_init</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, main.o(i.protocol_status_lookup_init))
<BR><BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[66]"></a>quad_decrement</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, quad_encoder.o(i.quad_decrement))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = quad_decrement &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
<BR>[Calls]<UL><LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
</UL>
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_PeriodElapsedCallback
</UL>
<P><STRONG><a name="[87]"></a>quad_disable</STRONG> (Thumb, 64 bytes, Stack size 8 bytes, quad_encoder.o(i.quad_disable))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = quad_disable
</UL>
<BR>[Calls]<UL><LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
</UL>
<P><STRONG><a name="[86]"></a>quad_enable</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, quad_encoder.o(i.quad_enable))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[ab]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_reset
</UL>
<BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;handle_protocol_switch
</UL>
<P><STRONG><a name="[65]"></a>quad_increment</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, quad_encoder.o(i.quad_increment))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = quad_increment &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
<BR>[Calls]<UL><LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
</UL>
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_PeriodElapsedCallback
</UL>
<P><STRONG><a name="[9f]"></a>quad_init</STRONG> (Thumb, 70 bytes, Stack size 24 bytes, quad_encoder.o(i.quad_init))
<P><STRONG><a name="[a4]"></a>quad_init</STRONG> (Thumb, 80 bytes, Stack size 24 bytes, quad_encoder.o(i.quad_init))
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = quad_init &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Start_IT
<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_reset
<BR>[Calls]<UL><LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_TIM_Base_Start_IT
<LI><a href="#[ab]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_reset
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[a6]"></a>quad_reset</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, quad_encoder.o(i.quad_reset))
<P><STRONG><a name="[ab]"></a>quad_reset</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, quad_encoder.o(i.quad_reset))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
<BR>[Calls]<UL><LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_write
</UL>
<BR>[Called By]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_init
<BR>[Called By]<UL><LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_init
<LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_enable
</UL>
<P><STRONG><a name="[a5]"></a>quad_write</STRONG> (Thumb, 44 bytes, Stack size 16 bytes, quad_encoder.o(i.quad_write))
<P><STRONG><a name="[aa]"></a>quad_write</STRONG> (Thumb, 44 bytes, Stack size 16 bytes, quad_encoder.o(i.quad_write))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_WritePin
</UL>
<BR>[Called By]<UL><LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_reset
<BR>[Called By]<UL><LI><a href="#[ab]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_reset
<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_increment
<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;quad_decrement
</UL>
<P><STRONG><a name="[a0]"></a>spi_error_dump_reboot</STRONG> (Thumb, 72 bytes, Stack size 0 bytes, main.o(i.spi_error_dump_reboot))
<P><STRONG><a name="[a5]"></a>spi_error_dump_reboot</STRONG> (Thumb, 72 bytes, Stack size 0 bytes, main.o(i.spi_error_dump_reboot))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = spi_error_dump_reboot &rArr; __2printf
</UL>
<BR>[Calls]<UL><LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_TogglePin
<BR>[Calls]<UL><LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_TogglePin
<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Delay
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
</UL>
<BR>[Called By]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[98]"></a>wait_for_data_idle</STRONG> (Thumb, 42 bytes, Stack size 16 bytes, m0110a.o(i.wait_for_data_idle))
<P><STRONG><a name="[9c]"></a>wait_for_data_idle</STRONG> (Thumb, 42 bytes, Stack size 16 bytes, m0110a.o(i.wait_for_data_idle))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = wait_for_data_idle
</UL>
<BR>[Calls]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
<LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GPIO_ReadPin
</UL>
<BR>[Called By]<UL><LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
<BR>[Called By]<UL><LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_write
<LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;m0110a_read_host_cmd
</UL>
<P>
<H3>
@@ -1143,35 +1183,35 @@ Local Symbols
</UL>
<P><STRONG><a name="[2a]"></a>SPI_2linesRxISR_16BIT</STRONG> (Thumb, 54 bytes, Stack size 8 bytes, stm32f0xx_hal_spi.o(i.SPI_2linesRxISR_16BIT))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = SPI_2linesRxISR_16BIT &rArr; SPI_CloseRxTx_ISR &rArr; SPI_EndRxTxTransaction &rArr; SPI_WaitFlagStateUntilTimeout
<BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = SPI_2linesRxISR_16BIT &rArr; SPI_CloseRxTx_ISR &rArr; HAL_SPI_TxRxCpltCallback &rArr; parse_spi_buf &rArr; handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_CloseRxTx_ISR
</UL>
<BR>[Address Reference Count : 1]<UL><LI> stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_IT)
</UL>
<P><STRONG><a name="[2c]"></a>SPI_2linesRxISR_8BIT</STRONG> (Thumb, 94 bytes, Stack size 8 bytes, stm32f0xx_hal_spi.o(i.SPI_2linesRxISR_8BIT))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = SPI_2linesRxISR_8BIT &rArr; SPI_CloseRxTx_ISR &rArr; SPI_EndRxTxTransaction &rArr; SPI_WaitFlagStateUntilTimeout
<BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = SPI_2linesRxISR_8BIT &rArr; SPI_CloseRxTx_ISR &rArr; HAL_SPI_TxRxCpltCallback &rArr; parse_spi_buf &rArr; handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_CloseRxTx_ISR
</UL>
<BR>[Address Reference Count : 1]<UL><LI> stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_IT)
</UL>
<P><STRONG><a name="[2b]"></a>SPI_2linesTxISR_16BIT</STRONG> (Thumb, 52 bytes, Stack size 8 bytes, stm32f0xx_hal_spi.o(i.SPI_2linesTxISR_16BIT))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = SPI_2linesTxISR_16BIT &rArr; SPI_CloseRxTx_ISR &rArr; SPI_EndRxTxTransaction &rArr; SPI_WaitFlagStateUntilTimeout
<BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = SPI_2linesTxISR_16BIT &rArr; SPI_CloseRxTx_ISR &rArr; HAL_SPI_TxRxCpltCallback &rArr; parse_spi_buf &rArr; handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_CloseRxTx_ISR
</UL>
<BR>[Address Reference Count : 1]<UL><LI> stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_IT)
</UL>
<P><STRONG><a name="[2d]"></a>SPI_2linesTxISR_8BIT</STRONG> (Thumb, 72 bytes, Stack size 8 bytes, stm32f0xx_hal_spi.o(i.SPI_2linesTxISR_8BIT))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = SPI_2linesTxISR_8BIT &rArr; SPI_CloseRxTx_ISR &rArr; SPI_EndRxTxTransaction &rArr; SPI_WaitFlagStateUntilTimeout
<BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = SPI_2linesTxISR_8BIT &rArr; SPI_CloseRxTx_ISR &rArr; HAL_SPI_TxRxCpltCallback &rArr; parse_spi_buf &rArr; handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_CloseRxTx_ISR
</UL>
<BR>[Address Reference Count : 1]<UL><LI> stm32f0xx_hal_spi.o(i.HAL_SPI_TransmitReceive_IT)
</UL>
<P><STRONG><a name="[73]"></a>SPI_CloseRxTx_ISR</STRONG> (Thumb, 82 bytes, Stack size 16 bytes, stm32f0xx_hal_spi.o(i.SPI_CloseRxTx_ISR))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = SPI_CloseRxTx_ISR &rArr; SPI_EndRxTxTransaction &rArr; SPI_WaitFlagStateUntilTimeout
<BR><BR>[Stack]<UL><LI>Max Depth = 96<LI>Call Chain = SPI_CloseRxTx_ISR &rArr; HAL_SPI_TxRxCpltCallback &rArr; parse_spi_buf &rArr; handle_protocol_switch &rArr; quad_enable &rArr; quad_reset &rArr; quad_write
</UL>
<BR>[Calls]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_TxRxCpltCallback
<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_GetTick
@@ -1179,10 +1219,10 @@ Local Symbols
<LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_SPI_ErrorCallback
<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_EndRxTxTransaction
</UL>
<BR>[Called By]<UL><LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_2linesRxISR_16BIT
<LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_2linesTxISR_8BIT
<BR>[Called By]<UL><LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_2linesTxISR_8BIT
<LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_2linesTxISR_16BIT
<LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_2linesRxISR_8BIT
<LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI_2linesRxISR_16BIT
</UL>
<P><STRONG><a name="[29]"></a>SPI_DMAAbortOnError</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, stm32f0xx_hal_spi.o(i.SPI_DMAAbortOnError))

View File

File diff suppressed because it is too large Load Diff

View File

@@ -35,11 +35,11 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x5DFA0893)
I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x5DFA0892)
I (../Drivers/CMSIS/Include/core_cmFunc.h)(0x5DFA0892)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h)(0x5DFA0880)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h)(0x5DFA0893)
@@ -71,17 +71,17 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h)(0x5DFA0893)
I (C:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x5D9B429A)
I (../Inc/quad_encoder.h)(0x62E9EEF5)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h)(0x5DFA0893)
I (../Inc/stm32f0xx_hal_conf.h)(0x62D9F987)
I (../Inc/stm32f0xx_hal_conf.h)(0x62D9F987)
I (../Inc/main.h)(0x62D9F988)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h)(0x5DFA0893)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h)(0x5DFA0880)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f072xb.h)(0x5DFA0880)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f072xb.h)(0x5DFA0880)
I (../Drivers/CMSIS/Include/core_cm0.h)(0x5DFA0892)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5D9B4298)
I (../Drivers/CMSIS/Include/core_cmInstr.h)(0x5DFA0892)
I (../Drivers/CMSIS/Include/cmsis_armcc.h)(0x5DFA0892)
I (../Drivers/CMSIS/Include/core_cmFunc.h)(0x5DFA0892)
I (../Drivers/CMSIS/Include/core_cmFunc.h)(0x5DFA0892)
I (../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h)(0x5DFA0880)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h)(0x5DFA0893)
@@ -118,7 +118,7 @@ F (..\Src\m0110a.c)(0x62D9FB01)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O3 --a
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F072xB -DUSE_HAL_DRIVER -DSTM32F072xB
-o apple_all\helpers.o --omf_browse apple_all\helpers.crf --depend apple_all\helpers.d)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5D9B429A)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5D9B4298)
I (C:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x5D9B429A)
I (../Inc/helpers.h)(0x62E9EB08)
@@ -153,7 +153,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h)(0x5DFA0893)
I (../Inc/shared.h)(0x617487BD)
I (../Inc/shared.h)(0x617487BD)
F (..\Src\m0110a.c)(0x62D9FB01)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I ../Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc -I ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I ../Drivers/CMSIS/Include
-I.\RTE\_apple_all
@@ -190,8 +190,8 @@ I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5D9B4298)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h)(0x5DFA0893)
I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_spi.h)(0x5DFA0893)

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -114,6 +114,75 @@ int16_t byte_to_int16_t(uint8_t lsb, uint8_t msb)
return (int16_t)((msb << 8) | lsb);
}
void protocol_status_lookup_init(void)
{
memset(protocol_status_lookup, PROTOCOL_STATUS_NOT_AVAILABLE, PROTOCOL_LOOKUP_SIZE);
protocol_status_lookup[PROTOCOL_ADB_KB] = PROTOCOL_STATUS_ENABLED;
protocol_status_lookup[PROTOCOL_ADB_MOUSE] = PROTOCOL_STATUS_ENABLED;
protocol_status_lookup[PROTOCOL_M0100_MOUSE] = PROTOCOL_STATUS_DISABLED;
protocol_status_lookup[PROTOCOL_M0110_KB] = PROTOCOL_STATUS_DISABLED;
protocol_status_lookup[PROTOCOL_LISA_KB] = PROTOCOL_STATUS_DISABLED;
}
void handle_protocol_switch(uint8_t spi_byte)
{
uint8_t index = spi_byte & 0x7f;
uint8_t onoff = spi_byte & 0x80;
if(index >= PROTOCOL_LOOKUP_SIZE)
return;
// trying to change a protocol that is not available on this board
if(protocol_status_lookup[index] == PROTOCOL_STATUS_NOT_AVAILABLE)
return;
// switching protocol ON
if(onoff && protocol_status_lookup[index] == PROTOCOL_STATUS_DISABLED)
{
switch(index)
{
case PROTOCOL_ADB_KB:
break;
case PROTOCOL_ADB_MOUSE:
break;
case PROTOCOL_M0100_MOUSE:
quad_enable();
break;
case PROTOCOL_M0110_KB:
break;
case PROTOCOL_LISA_KB:
break;
}
protocol_status_lookup[index] = PROTOCOL_STATUS_ENABLED;
}
// switching protocol OFF
else if((onoff == 0) && protocol_status_lookup[index] == PROTOCOL_STATUS_ENABLED)
{
switch(index)
{
case PROTOCOL_ADB_KB:
break;
case PROTOCOL_ADB_MOUSE:
break;
case PROTOCOL_M0100_MOUSE:
quad_disable();
break;
case PROTOCOL_M0110_KB:
break;
case PROTOCOL_LISA_KB:
break;
}
protocol_status_lookup[index] = PROTOCOL_STATUS_DISABLED;
}
}
void parse_spi_buf(uint8_t* spibuf)
{
if(spibuf[SPI_BUF_INDEX_MSG_TYPE] == SPI_MOSI_MSG_TYPE_MOUSE_EVENT)
@@ -154,6 +223,15 @@ void parse_spi_buf(uint8_t* spibuf)
curr_index++;
}
}
else if(spibuf[SPI_BUF_INDEX_MSG_TYPE] == SPI_MOSI_MSG_TYPE_SET_PROTOCOL)
{
for (int i = 3; i < SPI_BUF_SIZE; ++i)
{
if(spibuf[i] == 0)
break;
handle_protocol_switch(spibuf[i]);
}
}
}
volatile uint32_t ACT_LED_off_ts;
@@ -307,6 +385,8 @@ int main(void)
/* USER CODE BEGIN 2 */
printf("%s\nrev%d v%d.%d.%d\n", boot_message, hw_revision, version_major, version_minor, version_patch);
delay_us_init(&htim2);
protocol_status_lookup_init();
m0110a_cmd_buf_init(&my_m0110a_buf);
kb_buf_init(&my_kb_buf);
mouse_buf_init(&my_mouse_buf);

View File

@@ -14,6 +14,8 @@ TIM_HandleTypeDef* arr_timer_y;
mouse_buf* mouse_buffer;
uint8_t quad_mouse_is_enabled;
#define ARR_LOOKUP_SIZE 64
const uint16_t arr_lookup[ARR_LOOKUP_SIZE] = {
12217, 10241, 8829, 7700, 6758, 5958, 5347, 4782, 4311, 3888, 3558, 3276, 3041, 2852, 2711, 2570, 2429, 2335, 2241, 2147, 2052, 1958, 1911, 1817, 1770, 1723, 1629, 1582, 1535, 1488, 1441, 1394, 1347, 1300, 1252, 1205, 1158, 1158, 1111, 1064, 1017, 1017, 970, 923, 923, 876, 876, 829, 829, 782, 782, 735, 735, 688, 688, 641, 641, 641, 594, 594, 594, 547, 547, 547
@@ -102,6 +104,7 @@ void quad_init(mouse_buf* mbuf, TIM_HandleTypeDef* avg_tim, TIM_HandleTypeDef* a
arr_timer_y = arr_tim_y;
mouse_buffer = mbuf;
quad_reset(&quad_x);
quad_reset(&quad_y);
HAL_TIM_Base_Start_IT(avg_timer);
HAL_TIM_Base_Start_IT(arr_timer_x);
HAL_TIM_Base_Start_IT(arr_timer_y);
@@ -119,6 +122,23 @@ void quad_decrement(quad_output *qo)
quad_write(qo);
}
void quad_enable(void)
{
quad_reset(&quad_x);
quad_reset(&quad_y);
quad_mouse_is_enabled = 1;
}
void quad_disable(void)
{
quad_mouse_is_enabled = 0;
HAL_GPIO_WritePin(quad_x.A_port, quad_x.A_pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(quad_x.B_port, quad_x.B_pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(quad_y.A_port, quad_y.A_pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(quad_y.B_port, quad_y.B_pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
}
/*
this gets called every 10ms, fetches mouse event and put them into a running buffer
a window average is calculated, used to adjust the timer autoreload register
@@ -127,6 +147,8 @@ void quad_decrement(quad_output *qo)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
uint8_t cme_count;
if(quad_mouse_is_enabled == 0)
return;
// every 10ms
if(htim == avg_timer)
{
@@ -166,5 +188,3 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
}
}
// HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_15);