updated IBM PC P-card firmware to 0.2.0

This commit is contained in:
dekunukem
2022-04-07 02:50:05 +01:00
parent 375a446f5f
commit 11d6a19485
32 changed files with 3425 additions and 6192 deletions

View File

File diff suppressed because one or more lines are too long

View File

Binary file not shown.

View File

@@ -27,20 +27,7 @@ Project File Date: 03/28/2022
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'ibmpc'
compiling main.c...
../Src/main.c(466): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B1_GPIO_Port, GAMEPAD_B1_Pin, !(this_gamepad_event->button_1));
../Src/main.c(467): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B2_GPIO_Port, GAMEPAD_B2_Pin, !(this_gamepad_event->button_2));
../Src/main.c(468): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B3_GPIO_Port, GAMEPAD_B3_Pin, !(this_gamepad_event->button_3));
../Src/main.c(469): warning: #188-D: enumerated type mixed with another type
HAL_GPIO_WritePin(GAMEPAD_B4_GPIO_Port, GAMEPAD_B4_Pin, !(this_gamepad_event->button_4));
../Src/main.c: 4 warnings, 0 errors
linking...
Program Size: Code=15960 RO-data=428 RW-data=132 ZI-data=2180
FromELF: creating hex file...
"ibmpc\ibmpc.axf" - 0 Error(s), 4 Warning(s).
"ibmpc\ibmpc.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2>
@@ -63,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:01
Build Time Elapsed: 00:00:00
</pre>
</body>
</html>

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -160,7 +160,7 @@ F (..\Inc\ps2kb.h)(0x61BC5950)()
-IC:\Users\allen\AppData\Local\Arm\Packs\ARM\CMSIS\5.6.0\CMSIS\Core\Include
-IC:\Users\allen\AppData\Local\Arm\Packs\Keil\STM32F0xx_DFP\2.0.0\Drivers\CMSIS\Device\ST\STM32F0xx\Include
-IC:\Users\allen\AppData\Local\Arm\Packs\Keil\STM32F0xx_DFP\2.0.0\Drivers\CMSIS\Device\ST\STM32F0xx\Include
-D__UVISION_VERSION="529" -D_RTE_ -DSTM32F072xB -DUSE_HAL_DRIVER -DSTM32F072xB
@@ -239,7 +239,7 @@ I (../Inc/shared.h)(0x61B61A00)
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)
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_ex.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

@@ -68,8 +68,8 @@ UART_HandleTypeDef huart3;
/* Private variables ---------------------------------------------------------*/
const uint8_t board_id = 1;
const uint8_t version_major = 0;
const uint8_t version_minor = 1;
const uint8_t version_patch = 6;
const uint8_t version_minor = 2;
const uint8_t version_patch = 0;
uint8_t hw_revision;
uint8_t spi_transmit_buf[SPI_BUF_SIZE];
@@ -545,6 +545,7 @@ int main(void)
MX_USART3_UART_Init();
MX_IWDG_Init();
/* USER CODE BEGIN 2 */
HAL_IWDG_Refresh(&hiwdg);
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();
@@ -561,7 +562,6 @@ int main(void)
gamepad_buf_init(&my_gamepad_buf, 16);
mcp4451_reset();
HAL_Delay(1);
memset(spi_transmit_buf, 0, SPI_BUF_SIZE);
HAL_SPI_TransmitReceive_IT(&hspi1, spi_transmit_buf, spi_recv_buf, SPI_BUF_SIZE);
@@ -569,9 +569,19 @@ int main(void)
/* Infinite loop */
/* USER CODE BEGIN WHILE */
printf("flash_size: %d\n", flash_size);
if(!mcp4451_is_available())
{
printf("Digital pot not responding!\n");
for (int i = 0; i < 10; ++i)
{
HAL_GPIO_TogglePin(ERR_LED_GPIO_Port, ERR_LED_Pin);
HAL_Delay(50);
}
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_SET);
}
while (1)
{
HAL_IWDG_Refresh(&hiwdg);

View File

@@ -16,7 +16,9 @@ uint8_t mcp4451_is_available(void)
void mcp4451_reset(void)
{
HAL_GPIO_WritePin(POT_RESET_GPIO_Port, POT_RESET_Pin, GPIO_PIN_RESET);
HAL_Delay(1);
HAL_GPIO_WritePin(POT_RESET_GPIO_Port, POT_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(1);
}
uint8_t mcp4451_write_wiper(uint8_t wiper_id, uint8_t value)

View File

File diff suppressed because one or more lines are too long

View File

Binary file not shown.

View File

@@ -27,10 +27,6 @@ Project File Date: 04/07/2022
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'ibmpc'
compiling main.c...
linking...
Program Size: Code=6568 RO-data=252 RW-data=12 ZI-data=1212
FromELF: creating hex file...
"ibmpc\ibmpc.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2>
@@ -54,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:01
Build Time Elapsed: 00:00:00
</pre>
</body>
</html>

View File

@@ -410,7 +410,7 @@
:1019800001209CE701263146032000F051F8FFF7C3
:1019900063FF3146002000F04BF8FFF75DFF314652
:1019A000022000F045F8FFF757FF3146012000F014
:1019B0003FF8FFF751FFFF20F530FEF7C1FB98E736
:1019B0003FF8FFF751FFFA20FEF7C2FB99E700005E
:1019C0005553423456432049424D205043205465DC
:1019D000737465720A000000000800480014004893
:1019E0000004004810B56423012258210448FEF782

View File

@@ -3,7 +3,7 @@
<title>Static Call Graph - [ibmpc\ibmpc.axf]</title></head>
<body><HR>
<H1>Static Call Graph for image ibmpc\ibmpc.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Thu Apr 07 01:52:40 2022
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Thu Apr 07 02:15:20 2022
<BR><P>
<H3>Maximum Stack Usage = 196 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3>
@@ -554,7 +554,7 @@ Global Symbols
</UL>
<BR>[Address Reference Count : 1]<UL><LI> printfb.o(i.__0printf$bare)
</UL>
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 304 bytes, Stack size 0 bytes, main.o(i.main))
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 302 bytes, Stack size 0 bytes, main.o(i.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 196<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="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HAL_Init

View File

@@ -1272,7 +1272,7 @@ Image Symbol Table
__scatterload_zeroinit 0x0800182d Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
check_i2c_error 0x08001859 Thumb Code 26 main.o(i.check_i2c_error)
fputc 0x08001879 Thumb Code 18 main.o(i.fputc)
main 0x08001891 Thumb Code 304 main.o(i.main)
main 0x08001891 Thumb Code 302 main.o(i.main)
mcp4451_is_available 0x080019e5 Thumb Code 26 mcp4451.o(i.mcp4451_is_available)
mcp4451_reset 0x08001a05 Thumb Code 38 mcp4451.o(i.mcp4451_reset)
mcp4451_write_wiper 0x08001a31 Thumb Code 46 mcp4451.o(i.mcp4451_write_wiper)
@@ -1409,7 +1409,7 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
898 94 0 0 188 4796 main.o
898 96 0 0 188 4796 main.o
132 22 4 0 0 463935 mcp4451.o
28 8 192 0 1024 636 startup_stm32f072xb.o
122 18 0 4 0 3651 stm32f0xx_hal.o
@@ -1425,7 +1425,7 @@ Image component sizes
92 16 24 4 0 1151 system_stm32f0xx.o
----------------------------------------------------------------------
6388 424 252 8 1212 516644 Object Totals
6388 426 252 8 1212 516644 Object Totals
0 0 32 0 0 0 (incl. Generated)
16 0 0 0 0 0 (incl. Padding)
@@ -1467,9 +1467,9 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug
6568 448 252 12 1212 514660 Grand Totals
6568 448 252 12 1212 514660 ELF Image Totals
6568 448 252 12 0 0 ROM Totals
6568 450 252 12 1212 514660 Grand Totals
6568 450 252 12 1212 514660 ELF Image Totals
6568 450 252 12 0 0 ROM Totals
==============================================================================

View File

@@ -36,7 +36,7 @@ I (../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.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/Include/core_cm0.h)(0x5DFA0892)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5D9B4298)
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)

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -45,7 +45,6 @@
#include <string.h>
#include "mcp4451.h"
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
@@ -77,31 +76,6 @@ int fputc(int ch, FILE *f)
return ch;
}
// void gamepad_update(void)
// {
// gamepad_event* this_gamepad_event = gamepad_buf_peek(&my_gamepad_buf);
// if(this_gamepad_event != NULL)
// {
// // printf("%d %d %d %d %d %d %d %d\n---\n", this_gamepad_event->button_1, this_gamepad_event->button_2, this_gamepad_event->button_3, this_gamepad_event->button_4, this_gamepad_event->axis_x, this_gamepad_event->axis_y, this_gamepad_event->axis_rx, this_gamepad_event->axis_ry);
// /*
// X1 = Wiper 3
// Y1 = Wiper 0
// X2 = Wiper 2
// Y2 = Wiper 1
// */
// HAL_GPIO_WritePin(GAMEPAD_B1_GPIO_Port, GAMEPAD_B1_Pin, !(this_gamepad_event->button_1));
// HAL_GPIO_WritePin(GAMEPAD_B2_GPIO_Port, GAMEPAD_B2_Pin, !(this_gamepad_event->button_2));
// HAL_GPIO_WritePin(GAMEPAD_B3_GPIO_Port, GAMEPAD_B3_Pin, !(this_gamepad_event->button_3));
// HAL_GPIO_WritePin(GAMEPAD_B4_GPIO_Port, GAMEPAD_B4_Pin, !(this_gamepad_event->button_4));
// mcp4451_write_wiper(3, 255-this_gamepad_event->axis_x);
// mcp4451_write_wiper(0, 255-this_gamepad_event->axis_y);
// mcp4451_write_wiper(2, 255-this_gamepad_event->axis_rx);
// mcp4451_write_wiper(1, 255-this_gamepad_event->axis_ry);
// gamepad_buf_pop(&my_gamepad_buf);
// }
// }
/*
!!!!!!!!!!!!!!!!!!!!!! AFTER CODE RE-GENERATION
!!!!!!!!!!!!!!!!!!!!!! CHANGE THE FOLLOWING
@@ -208,7 +182,7 @@ int main(void)
check_i2c_error(mcp4451_write_wiper(2, pot_value));
check_i2c_error(mcp4451_write_wiper(1, pot_value));
HAL_Delay(500);
HAL_Delay(250);
}
/* USER CODE END 3 */

View File

@@ -1,682 +0,0 @@
:020000040800F2
:10000000E8070020D5000008ED120008591100088B
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000002B16000887
:100030000000000000000000351300082D16000825
:100040000501000805010008050100080501000878
:100050000501000805010008050100080501000868
:100060000501000805010008050100080501000858
:100070000501000805010008050100080501000848
:100080000501000800000000000000000501000854
:100090000000000005010008050100080501000836
:1000A00000000000391300080501000805010008E0
:1000B0000501000800000000050100080501000816
:1000C0000348854600F092F800480047792200086E
:1000D000E80700200C4880F308880C480168090EE6
:1000E0000B4A914205D10B480B4901600B480C4962
:1000F00001600C4880470C480047FEE7FEE7FEE73A
:10010000FEE7FEE7FEE70000E8070020040000002D
:100110001F00000018100240010000000000014014
:100120000000000095160008C100000830B50B461D
:10013000014600202022012409E00D46D5409D42C1
:1001400005D31D469540491B254695404019154647
:10015000521E002DF1DC30BD70B50024254600286C
:1001600001DA01244042002901DA01254942FFF762
:10017000DDFFAC4200D04042002C00D0494270BDAF
:100180000549064A08685043054A80180860400837
:1001900070470149086070473C0000206D4EC64121
:1001A0003930000003460B439B0703D009E008C920
:1001B000121F08C0042AFAD203E00B780370401C17
:1001C000491C521EF9D27047D2B201E00270401CA5
:1001D000491EFBD270470022F6E710B513460A46C7
:1001E00004461946FFF7F0FF204610BD064C0125D6
:1001F000064E05E0E36807CC2B430C3C98471034CF
:10020000B442F7D3FFF760FF042A0008242A00084D
:1002100070B50024014620314A78022A03D0042117
:100220008163012416E0026813680E25AB43136056
:10023000026813685B085B0013600122056C1346BB
:10024000AB40C56B6B604A7000220A70416B00299D
:1002500000D08847204670BD31B500F0B9F8009C49
:100260000546601C00D0641C00F0B2F8401BA042A0
:10027000FAD338BDF8B5002389E001249C402A4612
:10028000A44622407ED04C68022C01D0122C0CD106
:10029000DC08A40027183C6A5D07ED0E0F26AE406F
:1002A000B4430E69AE4026433E6205685E000324F7
:1002B000B4400F79A543BF07BF0FB7402F43076076
:1002C0004D68012D05D0022D03D0112D01D0122D26
:1002D0000ED18568CF68A543B7402F438760476834
:1002E0006546AF430D79ED06ED0F9D403D434560FA
:1002F000C568A5438C68B4402C43C4604C68E400D6
:1003000044D5264CA56901263543A561A4699D08FD
:1003100034400094224CAD002F19BC689D072E0F6D
:100320000F25B540AC430925ED06A84201D10025B3
:100330000AE01C4DA84201D1012505E01A4DA84252
:1003400001D1022500E00525B5402543BD60174CCD
:1003500025684E689543F60300D51543256065680A
:100360004E689543B60300D515436560A5684E6891
:100370009543F60200D51543A560E5684E689543A0
:10038000B60200E002E000D51543E5605B1C0A6898
:100390001546DA4000D070E7F8BD000000100240BA
:1003A000000001400004004800080048000401402B
:1003B0000069084000D00120704742694A4042610C
:1003C0007047002A01D08161704781627047000048
:1003D00001480068704700003400002070B5040038
:1003E00005D025466035687A002802D006E0012055
:1003F00070BD00202872204600F026FE242068727E
:1004000020680168490849000160204601F082FA2D
:100410000128EDD0606A002802D0204601F0E1F901
:10042000206841680922D2029143416020688168B6
:1004300022229143816020688168082211438160F3
:1004400020680168012211430160204601F02EFA64
:1004500070BD000002480168491C0160704700003F
:100460003400002010B506480168102211430160D5
:10047000002000F007F800F017F8002010BD000081
:100480000020024010B5044600F0F0F87D21C900BC
:10049000FFF74CFE00F0E8FC00222146501E00F061
:1004A00037F8002010BD000008B51248816901220C
:1004B00011438161816911400091C26901040A43BD
:1004C000C261C0690022084000901146501F00F030
:1004D0001FF800221146901E00F01AF80022114663
:1004E000501E00F015F80448016810221143016005
:1004F00008BD00000010024000000140C106C90E06
:1005000001208840014908607047000000E100E0D8
:1005100010B500F0EDFE10BDF8B505464E480E468C
:100520000068C007C00FB0420AD24B4801684908B2
:100530004900314301600068C007C00FB04270D16C
:100540002878464C800705D56068F0218843A96863
:10055000084360602878C00753D06868012817D026
:10056000022818D0032819D021688907002958DAF1
:1005700061688908890001436160FFF729FF6968A4
:100580000746012913D002291DD0032927D034E0C2
:1005900021688903EAE721688901E7E7616BC903FC
:1005A000E4E7FFF715FFC11B2D48814223D860689F
:1005B0000007800F0128F4D123E0FFF709FFC11BDA
:1005C0002748814217D860680007800F0228F4D1BD
:1005D00017E0FFF7FDFEC11B214881420BD8606880
:1005E0000007800F0328F4D10BE0FFF7F1FEC11BD9
:1005F0001B48814201D90320F8BD60680007800FC5
:10060000F3D115480168C907C90FB1420BD9016878
:1006100049084900314301600068C007C00FB0427B
:1006200001D00120F8BD2878400706D56068072171
:1006300009028843E9680843606000F02DF86168AA
:10064000084A0906090F515CC840074908600020A4
:10065000FFF718FF0020F8BD002002400010024004
:1006600088130000EB2900083800002001480068CA
:1006700070470000380000200448054900684968B8
:10068000044A4905490F515CC840704738000020B2
:1006900000100240FB29000830B516A30FCB89B02B
:1006A0006C460FC417A30FCB0FC41A494A680C201D
:1006B000144604401848042C05D0184B082C04D0CC
:1006C0000C2C00D1184609B030BD9402240F6D46A1
:1006D0002C5DC96A04AD0907090FD203695C920F4A
:1006E000022A02D0032A00D11846FFF71FFD6043FB
:1006F000E9E7000002030405060708090A0B0C0DD0
:100700000E0F10100102030405060708090A0B0C5E
:100710000D0E0F100010024000127A00006CDC0277
:10072000FEB504460078F04EF04DC00748D068682A
:100730000007800F01281FD068680007800F02287B
:1007400004D16868C003800F022815D061680129B0
:1007500019D001208004002901D0052917D029686B
:10076000B1432960296881432960606800281BD053
:10077000FFF72EFE074613E02868800320D5606847
:10078000002876D01CE0286830432860EDE729680F
:1007900001432960F7E7FFF71BFEC01B642869D8F7
:1007A00028688003F7D50BE0FFF712FE074604E048
:1007B000FFF70EFEC01B6428F1D828688003F7D429
:1007C000207880073ED568680007800F14D06868DD
:1007D0000007800F022804D16868C003800F012839
:1007E0000AD0E068002828681DD00121084328604D
:1007F000FFF7EEFD07460BE0286880070BD5E068A1
:10080000012836D107E0FFF7E3FDC01B0228C6D858
:1008100028688007F7D52868F82188432169C9002E
:10082000084328600EE0400840002860FFF7D0FD34
:10083000074604E0FFF7CCFDC01B0228AFD82868AC
:100840008007F7D42078000724D5E0690028686A7B
:1008500011D0012108436862FFF7BAFD074604E0A2
:10086000FFF7B6FDC01B022899D8686A8007F7D544
:1008700010E036E1D1E0400840006862FFF7A8FDD3
:10088000074604E0FFF7A4FDC01B022887D8686A6A
:100890008007F7D4207804274007002861DA002079
:1008A0000190E869C00008D4E969B8060143E9612C
:1008B000E96901400120009101908D480168C90556
:1008C00011D40168821511430160FFF781FD00908A
:1008D00005E0FFF77DFD0099401A642897D8844809
:1008E0000068C005F5D5A06801280AD0002801D00D
:1008F000052811D0286A400840002862286AB843B9
:1009000002E0286A012108432862A068002812D06A
:10091000FFF75EFD00900AE0286A38432862F0E79E
:10092000FFF756FD0099411A7248814275D8286A2E
:100930008007F5D50DE0FFF74BFD009006E0FFF7CF
:1009400047FD0099411A6B48814266D8286A8007A2
:10095000F5D40198002804D0E969012000078143FB
:10096000E9612078C00635D5606901280CD0401DAA
:10097000686B24D038436863686B40084000686344
:10098000FFF726FD074622E0686B38436863686B13
:10099000012108436863FFF71BFD074604E0FFF7EA
:1009A00017FDC01B022838D8686B8007F7D5686B25
:1009B000F8218843A169C900084368630AE0B84385
:1009C0006863F4E7FFF704FDC01B022825D8686BB5
:1009D0008007F7D42078800637D568680007800F35
:1009E000032813D068680007800F022804D16868C4
:1009F000C003800F032809D0206A0028686B16D036
:100A000030436863FFF7E4FC06460CE0686BC00304
:100A10001BD5206A012864D117E05BE0FFF7D8FC02
:100A2000801B022856D8686BC003F7D50DE0B04391
:100A30006863FFF7CDFC064604E0FFF7C9FC801BA6
:100A4000022847D8686BC003F7D4606A002846D0F4
:100A500069680907890F022943D001263606022852
:100A6000286805D0B0432860FFF7B2FC044633E0A5
:100A7000B0432860FFF7ACFC074604E0FFF7A8FC92
:100A8000C01B022826D828688001F7D4E86A216BA9
:100A9000000900010843E862A16AE06A0843696846
:100AA0007B22D20391430843686028683043286062
:100AB000FFF78EFC044604E0FFF78AFC001B0228C7
:100AC00008D828688001F7D509E0FFF781FC001BF2
:100AD000022801D90320FEBD28688001F5D400203A
:100AE000FEBD0120FEBD000000000100001002401C
:100AF000007000408813000070470000F8B50446FD
:100B00000068426881684B0605D4CB0703D05306C2
:100B100001D5E16C04E08B0705D5130603D5216DE3
:100B200020468847F8BDFF2361331942FAD0930667
:100B3000F8D523464D064033002D09DA5D7F032D9D
:100B40003CD0256E042635432566C568856800952A
:100B50008E060125002E08DA266E2E43266686684C
:100B6000009606684027BE430660C80506D5206E7D
:100B7000082108432066206880680090206E0028C5
:100B8000D0D020684168E026B14341605D7790078E
:100B900018D020684168890889004160A06D0B4D1C
:100BA000002803D04563A06DFFF732FB606D00287D
:100BB000B8D04563606DFFF72BFBF8BDC168806856
:100BC0000090F8BD2046FFF797FFF8BDAB14000872
:100BD000F8B5040007D0002625464035A662687F98
:100BE000002802D005E00120F8BD2E77204600F055
:100BF0004BF802236B772068016840229143016023
:100C00000721E0680902884201D9002201E001229F
:100C100012030F273F02B84202D0884200D0A662DA
:100C2000276B002F05D1884201D9236301E0012001
:100C30002063A16860686369084321691943084318
:100C40000123A1695B0219400843E1690843216A55
:100C50000843A16A084321680860616B606AA36960
:100C600008431B0C0427E1683B40194308432168F3
:100C7000104348602068C1697A029143C1612666C9
:100C8000012068770020F8BD00B50068114987B0E1
:100C900088421DD11048826981140A4382618069AB
:100CA00008400590F02000900220019000210320D0
:100CB00003900291049109206946C006FFF7DAFA11
:100CC000002211461920FFF723FC1920FFF716FC1C
:100CD00007B000BD00300140001002407047000026
:100CE000F0B504468C464034217F0025C7689646FF
:100CF00001290CD001212177667F4168012E0CD09B
:100D0000CA1FFD3A07D18168002904D101E0022001
:100D1000F0BD042E01D0022540E0614600291BD021
:100D20007146002918D0002B16D0617F042901D00C
:100D30000521617700210166614681638387C3874E
:100D400071460164A380E380072109028F4205D91F
:100D5000144AC264144A04E001251FE0134AC26425
:100D6000134A0265012212038F4202D8E188022948
:100D700003D301684B68934302E001684B68134357
:100D80004B6001684A68E0231A434A6000680168C2
:100D9000490603D4016840221143016000202077F6
:100DA0002846F0BD49130008DD1300087F13000832
:100DB0001114000870B501221F4E15022946304655
:100DC000FFF7FFFA1D4C1E482178DE2901D00121D2
:100DD00041701C490978002916D0A178082906D04D
:100DE0001649202208464830FFF7DCF90FE0144B83
:100DF000827821790C3399540833A1799954082ABF
:100E00000ED2521C82700BE00C4801F065FCA078F9
:100E1000032805D1092000220221C006FFF7D1FADC
:100E2000064A2023D11A0848FFF75AFF0022294614
:100E30003046FFF7C6FA70BD00040048800100206C
:100E400018000020020000204C0000200422044969
:100E50000428086902D09043086170471043FBE7FB
:100E600000E000E070470000094910B5401E8842CC
:100E700001D9012010BD074C60610321081F00F05B
:100E800037FA0020A06107202061002010BD00007B
:100E9000FFFFFF0000E000E010B5FFF7E3FF10BD2B
:100EA00070B502462032137F012B1BD0012313772C
:100EB00002245477046865687026B5436560046849
:100EC00065680E68354365600468A5688026B5438B
:100ED000A5600068846849680C43846053770020EB
:100EE000107770BD022070BD70B5040005D0254696
:100EF0002035687F002802D006E0012070BD002068
:100F00002877204600F00AF802206877211D206823
:100F100000F0EEFB01206877002070BD08B5006886
:100F200001218907884207D10448C1690122114380
:100F3000C161C0691040009008BD0000001002406F
:100F40000222014620314A770268136801200343D8
:100F50001360487700207047F8B5054604462035F1
:100F6000287F012817D001272F7702206877226871
:100F700090687726FF23B0431B029843906008686F
:100F8000502837D00EDC202857D006DC00284ED061
:100F9000102840D14EE00220F8BD302850D0402823
:100FA00039D13CE060282DD0702817D001221203DF
:100FB000801A0ED090422ED1CB684A68896820688A
:100FC00000F0D8FB20688168012292031143816000
:100FD00021E020688168C908C900F8E7CB684A6841
:100FE0008968206800F0C6FB21688868B0433043F8
:100FF000886010E0CA684968206800F0CEFB502184
:10100000206806E0CA684968206800F0D7FB6021C4
:10101000206800F0BAFB6F7700202877F8BDCA6817
:101020004968206800F0B9FB40212068F1E7002101
:101030002068EEE710212068EBE720212068E8E730
:1010400030212068E5E7000000B500680E4987B050
:10105000884216D10D48C269012149040A43C26180
:10106000C0690840059004200090122001900121E1
:10107000032003900291049109206946C006FFF7FE
:10108000F9F807B000BD0000004400400010024025
:10109000FFB5064604466036707A83B00D462028B8
:1010A00058D1002D0CD00598002809D00120A16846
:1010B0000003814207D12069002804D1E80702D04B
:1010C000012007B0F0BD307A012843D001203072F2
:1010D0000020E06621207072FFF77AF90190274620
:1010E0004037059838820598788218E0788A401E43
:1010F000788206980090002280212046019B00F013
:10110000A1FC002818D10120A1680003814202D16E
:101110002069002812D02168287808856D1C788AFB
:101120000028E3D106980090002240212046019B30
:1011300000F088FC002808D00320C2E72888216836
:10114000C005C00D0885AD1CE9E7202070720020A5
:101150003072B6E70220B4E7FEE70000F0B52D4894
:1011600087B04269012189040A43426142690A4009
:101170000592426949100A43426140694C12084095
:101180000590002221462448FFF71BF9012209207F
:101190001146C006FFF715F9204F092000223946F5
:1011A000C006FFF70EF9012202211B48FFF709F9DB
:1011B0000094002401250195029469461648039481
:1011C000FFF758F81126092002946946C0060196D7
:1011D00000950394FFF74EF8092002946946C00673
:1011E000009701950394FFF745F8082000900C48FC
:1011F00001900225092069460295C006FFF73AF8DA
:10120000029469460448019600950394FFF732F86A
:1012100007B0F0BD001002400004004802180000B2
:101220000000211010B50D480B49016000214160FC
:1012300081600161416181610722016212024162A4
:10124000C260816207220163C2624163FFF7C0FC92
:10125000002800D0FEE710BD003001404C00002007
:1012600010B50121124886B08907016000242F21A2
:10127000846041600461611E8461C160FFF734FED7
:10128000002800D0FEE701200003009069460848CE
:10129000FFF762FE002800D0FEE7049404A904488A
:1012A0000594FFF7FDFD002800D0FEE706B010BD55
:1012B000B000002010B50C480A490160E121490244
:1012C000416000218160C16001618161C1610822CA
:1012D000016242614162FFF781F8002800D0FEE719
:1012E00010BD000000440040F000002070470000E6
:1012F0008307FF22DB0E9A408907090E99400028D8
:101300000BDA0007000F0838830808489B001818FC
:10131000C36993430B43C3617047830804489B0030
:101320001B181868904308431860704700ED00E0F0
:1013300000E400E07047000010B50248FFF7DEFB54
:1013400010BD00004C00002010B50168C968026C97
:101350001180016C891C016401464031CA88521E0B
:10136000CA80C988002909D101684A6840239A4384
:101370004A60C18F002901D100F06EF810BD10B590
:1013800001464031CC880368026C012C11D9DB681E
:101390001380026C921C0264CA88921ECA80CA889A
:1013A000012A0DD1026853680124240323435360AA
:1013B00006E01C7B531C03641470CA88521ECA804A
:1013C000C988002909D101684A6860239A434A60A4
:1013D000C18F002901D100F03FF810BD10B5816B1D
:1013E00002680988D160816B891C8163C18F491EA5
:1013F000C187C18F00290AD101684A6880239A43B6
:101400004A604621095A002901D100F025F810BD93
:1014100010B5C38F0268816B022B07D30988D16096
:10142000816B891C8163C18F891E05E04B1C83631E
:1014300009781173C18F491EC187C18F00290AD154
:1014400001684A6880239A434A604621095A002964
:1014500001D100F001F810BD70B50446FEF7B8FFE9
:101460000246206841682025A94341606421204646
:1014700000F024F8002802D0206E28432066226E57
:10148000204601214030002A04D041772046FFF752
:1014900033FB70BD427F4177042A204602D0FFF71C
:1014A00089FC70BDFFF71AFC70BD10B5406A0021C1
:1014B00046221152C187FFF71FFB10BDF8B50F463A
:1014C0000B4615460092032104460022C90200F093
:1014D0001BF82026002812D13B46002280212046FE
:1014E000009500F05CF8002809D103213B4600225A
:1014F00049022046009500F007F8002803D0206E2E
:10150000304320660320F8BDF8B51D4617460E4649
:1015100004463DE0032149028E4205D1002F03D14C
:10152000017B684601700078681C31D0002D05D021
:10153000FEF74EFF0699401AA84229D32068416859
:10154000E022914341606068C11FFD390CD1012147
:10155000A068C903884202D04911884204D120689A
:1015600001684022914301600120A16A4003814249
:1015700007D121680A6882430A6021680A68024329
:101580000A60012040346077002020770320F8BDF6
:10159000206881683140B942BCD10020F8BDF8B55F
:1015A0001D4617460E46044633E0681C31D0002D18
:1015B00005D0FEF70DFF0699401AA84229D32068EE
:1015C0004168E022914341606068C11FFD390CD140
:1015D0000121A068C903884202D04911884204D180
:1015E000206801684022914301600120A16A400304
:1015F000814207D121680A6882430A6021680A682B
:1016000002430A60012040346077002020770320E5
:10161000F8BD206881683046884304D00020B84275
:10162000C3D10020F8BD0120F9E7704710B5FEF7DF
:1016300011FFFFF731FC10BD10B592B020200090D3
:1016400001200024089009946846FFF769F80028F3
:1016500000D0FEE707200D9003200E900F9401218B
:1016600010940DA8FEF758FF002800D0FEE7FEF703
:10167000FDFF7D21C900FEF759FDFFF7F5FB0420B2
:10168000FFF7E4FB00221146501EFEF741FF12B0A7
:1016900010BD000013480168012211430160416838
:1016A000114A114041600168104A1140016001680F
:1016B000012292049143016041683F221204914348
:1016C0004160C16A09090901C162016BFF22D4327C
:1016D00091430163416B49084900416300218160E6
:1016E00070470000001002400CB8FF08FFFFF6FE34
:1016F000F0B502681A4B0124A4071A4D984203D092
:10170000A04201D0A84203D17026B2434E683243B2
:10171000154E164F98420AD0A04208D0A84206D0D3
:10172000134CA04203D0B04201D0B84204D10324EC
:101730002402A243CC6822438024A2434C69224362
:1017400002608A68C2620A688262984203D0B0422C
:1017500001D0B84201D10969016301214161F0BDA5
:10176000002C0140000400400044014000480140BA
:101770000020004030B58468FF252D021B02134372
:10178000AC430B432343836030BD826870239A438C
:101790000A4307210A438260704730B5036A046A2E
:1017A0006408640004628469F025AC43120122439A
:1017B0000A24A3430B438261036230BD30B5036A40
:1017C0001024A34303628469036A0F252D031203C7
:1017D000AC432243A024A34309011943826101625F
:1017E00030BD10B5818CC90707D001684A68012354
:1017F0005B049A43836A1A434A60818C890707D540
:1018000001684A6801231B049A43C36A1A434A6069
:10181000818C490707D501684A6801239B049A43D4
:10182000036B1A434A60818C090707D501684A682F
:101830000123DB039A43436B1A434A60818CC90638
:1018400007D50268916801231B039943836B1943F1
:101850009160818C890607D501688A6801235B0342
:101860009A43C36B1A438A60818C490612D5036878
:101870005A6801210905046C8A4322435A60026CAC
:101880008A4207D10268516803235B059943436C80
:1018900019435160818C090607D501684A68012304
:1018A000DB04806C9A4302434A6010BDF8B5002601
:1018B0000446C666FEF78CFD05461449206888423A
:1018C0001DD10068124F000709D501212B460022C7
:1018D00049052046009700F0B5F800280DD1206892
:1018E000006840070BD501212B46002289052046C0
:1018F000009700F0A7F8002801D00320F8BD2020B1
:1019000060346072A07226720020F8BD0038014079
:10191000FFFFFF01F8B504462369A268E5691A4391
:10192000636910202B43002125681A432B680E465B
:101930003E4F3B4013432B6023685A6803252D0319
:10194000AA43E5682A435A60236AA26925681A43B4
:10195000AB680B273F02BB431343AB60344A256897
:10196000954210D1334A126B9207920F0ED0012A82
:1019700005D0022A05D0032A09D1022007E004205D
:1019800005E0082003E02C4A954200D10020012206
:10199000E369D203934224D100280CD002280DD051
:1019A000042813D0082817D001260A0912010807B5
:1019B000400F10432FE0FEF75FFE09E061681F4A09
:1019C00048088018FEF7B2FB81B2EEE7FEF764FE2E
:1019D000616840004A08F4E761680122480812047F
:1019E000EFE7002808D0022809D004280BD00828E7
:1019F00014D001263046F8BDFEF73EFE05E06168D2
:101A00000F4A48080CE0FEF747FE61684A08801854
:101A1000FEF78CFB80B22168C860EBE7616848087C
:101A20008018FEF783FB80B2E860E3E7F369FFEF1D
:101A30000038014000100240004400400024F4003F
:101A400000127A00FFB581B017460E4604460A9D83
:101A50001DE0681C1BD0002D05D0FEF7B9FC0499D1
:101A6000401AA84213D920680168FF22A13291438D
:101A70000160206881684908490081602020603445
:101A80006072A07200202072032005B0F0BD2068B3
:101A9000C1693046884304D00020B842D9D0002024
:101AA000F3E70120F9E700000FB410B503A9044BD8
:101AB000044A029800F018F810BC08BC04B018479B
:101AC000B92000084000002002E008C8121F08C129
:101AD000002AFAD170477047002001E001C1121FAF
:101AE000002AFBD170470000FFB58DB00F460546B8
:101AF000002606E025280AD0109A0F9990476D1C01
:101B0000761C28780028F5D1304611B0F0BD0024AD
:101B10000121674A009400E004436D1C2B780846BD
:101B2000203B98401042F7D128782E2815D1042068
:101B3000044368786D1C2A280AD101CF6D1C0090DF
:101B40000BE000990A225143303940186D1C009077
:101B50002878014630390929F3D92878692843D0F3
:101B600006DC0028D0D063280BD0642804D13BE0E9
:101B700073280FD075284CD0109A0F999047761C77
:101B800094E03878694608720020487202A80190F3
:101B9000012003E0386801900020C0433F1D610729
:101BA0000CD5002400E0641C00998C420FDA8442BA
:101BB000F9DB0199095D0029F5D108E0002400E076
:101BC000641C8442FCDB0199095D0029F8D13619B7
:101BD00007E0019801990078491C0191109A0F992A
:101BE0009047641EF5D261E00A20019001CF0028E1
:101BF00002DA40422D2102E0210504D52B216A465C
:101C00001172012103E0E10701D02021F7E70C91D7
:101C100004E00A20019001CF00210C910BA90B9147
:101C200008E00199FEF782FA0A460B993032491E04
:101C30000B910A700028F4D10B9803A9081A2030E0
:101C40000190600701D5009801E001200090019902
:101C5000884203DD01460198081A00E000200024B4
:101C6000009006E002A8109A005D0F999047641C4E
:101C7000761C0C988442F5DB04E0109A30200F9912
:101C80009047761C0099481E00900029F5DC08E07A
:101C90000B980B990078491C0B91109A0F9990475B
:101CA000761C0199481E01900029F1DC6D1C28E783
:101CB0000928010010B5044CE26023812061618194
:101CC00000F058F910BD0000000000201CB5454C84
:101CD0006A4601A9444800F07BFA002844D16846CE
:101CE0000079BA281BD24149095CFF2917D039294C
:101CF0000BD168460078012811D13D4AD078401CAC
:101D0000D070C007C00F6A4610706846007800287F
:101D100000D080244806400C204300F037F93248B8
:101D200000F066FA6846017932486F2906D03A29F0
:101D30000ED01D2919D0612917D01EE069460978F7
:101D40000029018801D02C4A08E00122920309E011
:101D5000694609780029018802D0284A114002E02A
:101D600001225203114301801CBD6A461278002AE9
:101D7000028807D0224B1A4002802A2906D0362931
:101D800004D00BE00123DB021A43F5E76A46127820
:101D9000002A028807D01B4B1A400280382906D03F
:101DA000642904D00BE001239B021A43F5E76A463D
:101DB0001278002A02880DD0134B1A4002807D2928
:101DC00001D07E29D0D1694609780029018805D043
:101DD0000E4AC3E701235B021A43EFE7FF220132F9
:101DE000C0E7000080800000A0010020F428000867
:101DF0001800002006000020FFBF0000FFDF0000E9
:101E0000FFF70000FFFB0000FFFD0000FFFE0000E9
:101E1000F8B5064600203080164841890069FEF773
:101E2000C7FA012823D1144C204600F041FD401C84
:101E30001DD0204600F03CFD401C18D0204600F08C
:101E400037FD401C13D000252C460F2700F03EF82C
:101E500005280BD0391B88402843641C85B2102C00
:101E6000F4DB054800F024FD35800020F8BD052096
:101E7000F8BD0000000000201027000010B5124837
:101E800000F089FB02001DD090790023002801D1C9
:101E90000123DB03107A002801D1802003430020B6
:101EA000105E00F03DF94406640E02201C43105EF3
:101EB00000F036F94006400C204300F067F8024875
:101EC00000F074FB10BD00001C00002070B50D4830
:101ED00041890069FEF76CFA00280FD10A4D2846A7
:101EE00000F0E6FC0446284600F0E2FC611C05D048
:101EF000411C03D0A04203DD012070BD052070BD50
:101F0000002070BD0000002010270000F8B5064634
:101F10000020307000F086F9012806D10C4800F04E
:101F2000C7FC3238292801D30520F8BD00252C46EE
:101F30000727FFF7CBFF0528F7D0391B8840284338
:101F4000641CC5B2082CF4DB35700020F8BD00001D
:101F50001027000010B5064C01222189E068FEF729
:101F600030FA012261892069FEF72BFA10BD0000CA
:101F70000000002010B504480221417003210170C7
:101F8000FFF7E8FF10BD00000000002070B5054617
:101F9000174C0120A070C82000F07CF80022618955
:101FA0002069FEF70EFA222000F074F80122618900
:101FB0002069FEF706FA402000F06CF8284600F091
:101FC00019F8002506280FD0002261892069FEF744
:101FD000F8F9402000F05EF8012261892069FEF7DF
:101FE000F0F9A570002070BDA570062070BD00003E
:101FF0000000002010B50446000A00F009F8062889
:1020000005D0E0B200F004F8062800D0002010BD92
:10201000F8B500251C4C06460727791B3046C840FA
:10202000C00714D0002261892069FEF7CAF9222076
:1020300000F030F8012261892069FEF7C2F9618958
:102040002069FEF7B5F9012814D1402015E00022DF
:1020500061892069FEF7B5F9402000F01BF80122E4
:1020600061892069FEF7ADF961892069FEF7A0F961
:10207000012801D00620F8BD222000F00BF86D1CCD
:10208000082DCADB0020F8BD000000200902014332
:1020900008B2704700B5014600F03AFA411800F066
:1020A00037FA8842FBD300BD10B502490860FEF73D
:1020B00047FF10BD1400002013B50A230122694612
:1020C0000248FEF7E5FF00981CBD0000F00000206C
:1020D00070B54406C109640EC901102C1AD20E4D08
:1020E000285D002816D0002910D0022812D1032C18
:1020F00002D0062C08D104E00748183800F084F814
:1021000002E0064800F052FA012002E0012801D165
:102110000220285570BD0000B80100201C000020DE
:10212000C11C062909D93E214010C9433F2801DBC3
:102130003F2002E0884200DC0846C0B27047000041
:10214000102803D20249085C012800D00020704703
:10215000B801002070B515460E46044600F02AF876
:10216000002801D0012070BD217860684654217894
:10217000A06845542078A178401CFDF7D7FF217056
:10218000002070BD70B50D4604468170284600F0F1
:1021900089F96060284600F085F9A060204600F0CB
:1021A00033F870BD41780078814201D10120704739
:1021B0000020704710B5044681780078401CFDF778
:1021C000B5FF6078814201D1012010BD002010BD13
:1021D00010B543780478A34201D1012010BD4468B2
:1021E000E35C0B7081684078085C1070002010BDC3
:1021F00010B5044640782178884204D0A178401C6C
:10220000FDF794FF617010BD10B5044600202070EA
:102210006070A1786068FDF7DEFFA178A068FDF727
:10222000DAFF10BD70B5124C61892069FEF7C0F865
:10223000104D012804D1284600F03AFB401C10D074
:102240000120A070284600F033FB7D21090188425F
:1022500009DC411C07D0FF21F531884205DA042052
:1022600070BDFF2070BD032070BD012070BD000057
:1022700000000020102700000EB5FEF7F3F8FFF76E
:10228000DBF9FEF76BFFFEF7CDFFFFF713F8FEF764
:10229000E7FF01200090724F019000233A787149C6
:1022A00071A0FFF701FC7548FFF7FEFE00F0A0FAF1
:1022B00072481021F030FFF765FF1021381D00F043
:1022C00048F90024092225460123D20602216C4840
:1022D000FFF7F0FC69482021B030FDF77CFF674A2A
:1022E00066482023D032D11A6438FEF7F9FC654ED7
:1022F0007878002801D000F09DFA00F059FA624881
:102300000078002806D0604800F0E6F920215E48F9
:10231000FDF761FF09200821C006FEF749F80028F3
:10232000E6D00320FFF70CFF584A10700620FFF795
:1023300007FF3070117801431BD002A8FFF7E6FDBC
:102340000021534A0328117016D00028D0D16846C6
:10235000007A000900904C482838FFF723FF002836
:102360000DD03F48001D00F000F9002810D00024D7
:1023700015E0FFF7FFFDBBE7FFF7FCFDE7E7454989
:1023800000980978884201D0012409E0002407E080
:10239000414900980978884201D0012500E00025D4
:1023A0002046284301D0012200E00022012109201B
:1023B000C902C006FEF705F8002C03D033480078A8
:1023C000002804D1002D05D03078002802D000F07C
:1023D0001DFA02E0314800F06BFA6846007A00F01E
:1023E000F1F8052819D002281DD0032822D004288E
:1023F000C1D1254820216838FDF7EDFE2249CD20C6
:10240000683908708120887025480088420701D407
:102410000122CA70C20716D017E030780028AAD06F
:10242000FFF72CFD64E7194800780028A3D0FFF7D8
:102430004DFC5DE71548007800289CD018480088BE
:10244000FFF7A4FD54E701220A71800701D401209F
:102450004871092001220221C006FDF7B2FF47E7BB
:1024600018000020AE29000825730A7265762564DD
:10247000207625642E25642E25640A00B0000020F5
:102480000004004804000020C801002003000020D0
:1024900002000020010000200000002010270000A2
:1024A00006000020F0B50B30C108C900144F00260B
:1024B000144A0FE003688B420BD38B4205D95C1A98
:1024C0004318456830C3083B00E04368136002C00E
:1024D00004E0021D10680028ECD13046002803D12A
:1024E0003868002801D00020F0BD064A0648106078
:1024F000064A121AD208D20044C001203860D7E739
:102500004800002044000020EC010020E8030020E7
:10251000024800680068406A70470000140000200C
:1025200070B50D46044600F028F8002801D00120BF
:1025300070BD20780C226168504308182946FDF7C9
:1025400031FE2078A178401CFDF7F0FD21700020BD
:1025500070BD10B5044681700C204843FFF7A2FF00
:102560006060204600F022F810BD4178007881427A
:1025700001D1012070470020704710B504468178D2
:102580000078401CFDF7D2FD6078814201D1012026
:1025900010BD002010BD41780278914201D1002089
:1025A000704740680C2251434018704710B5002115
:1025B0000170417081780C2251434068FDF70BFE99
:1025C00010BD0000F8B5010786070509890FB60F91
:1025D000002D58D03E4C0329207802D002292DD05E
:1025E00073E0032E02D0002E4BD022E085420ED1A4
:1025F000207900280BD0374FFDF7C2FD0F21FDF7E2
:10260000ABFD0806010C38460843FFF7BFFC6078B5
:1026100085420ED1E07800280BD02E4F3F1DFDF7EC
:10262000AFFD0F21FDF798FD0806000C3843FFF7BA
:10263000ADFC002E29D0022E2CD046E0032E02D075
:10264000022E2CD041E085420BD16846FFF7E0FB1B
:10265000684600880106490E7F2902D10005000F57
:1026600020706078854230D16846FFF7D1FB68461C
:1026700000880106490E7F2927D10005000F6070F0
:1026800023E0854201D10520F8BD607885421CD148
:102690000220F8BD6078854217D10320F8BD60782C
:1026A000854212D101220925D402ED062146284691
:1026B000FDF787FE0648801DFFF7AAFB0022214692
:1026C0002846FDF77EFE0420F8BD0020F8BD00007E
:1026D000000000200160000070B5044680780928E1
:1026E0000FD008282AD001282FD0022808D103258E
:1026F000605D002804D0FFF7EBFC6D1C202DF7DB9C
:1027000070BD61792079FFF7C1FC274A1080E1791B
:10271000A079FFF7BBFC5080207A2349404290808B
:10272000607B9071A07B1072E07BD071207C507236
:10273000607C90721D48FFF7F3FE70BD1A48A279C5
:1027400021790C38FFF706FD70BD174820214C3861
:10275000FDF741FD1448CD214C380170617841707E
:10276000802585700221C17010490822091F09784F
:1027700001710021417101218171C1710021044663
:102780005834635C002B0BD0022B02D0012B02D0FB
:1027900004E0815402E00B462B438354521CD2B216
:1027A000491C1029EDDB70BDAC0100201C0000208D
:1027B000F8B50D4DA878002815D02E460024143603
:1027C0002F460C3706E0325D395D0848FFF7C2FC42
:1027D000641CE4B2A8788442F5D30020A870E860B5
:1027E00028616861A861F8BD18000020A0010020E0
:1027F00005480021C16601674167816701216C308E
:10280000C1708171704700004C01002010B5084C68
:10281000002261892069FDF7D4FDFF202D30FFF7EC
:1028200039FC012261892069FDF7CBFD10BD000054
:102830000000002012A0FFF737F9144D0024295D95
:1028400013A0FFF731F9641C202CF8DB11A0FFF76F
:102850002BF90024FF25134E013529463046FDF79C
:10286000ACFD6420FDF7F8FC641C642CF5DBBFF3C1
:102870004F8F0E490C48C860BFF34F8F00BFFDE774
:10288000535049204552524F520A00008001002007
:10289000256420000A7265626F6F74696E672E2E60
:1028A0002E0A0000000400480400FA0500ED00E0D4
:1028B000F8B50746FFF72CFE0D4C009061892069A2
:1028C000FDF776FD05460AE0FFF722FE0099461A5D
:1028D000002F04D0BE4202D90020C043F8BD618958
:1028E0002069FDF765FDA842EED03046F8BD000036
:1028F00000000020FF351213141517161A1C191D9D
:102900001B1833300C0D0E0F111020221F23211E17
:10291000243600010203050426282529273238FF22
:10292000060708090B2D2E2B2F2C7B433A31397AC1
:1029300078637660616264656D47FF595B5C4E56F3
:102940005758455354555241FFFF0A676FFFFFFF29
:10295000FFFFFFFF4C7D4BFF7CFF733E743B3C77DA
:102960003D797275FFFFFFFFFF51FFFFFFFFFFFF84
:10297000FF37FFFFFFFFFFFFFFFFFFFFFFFFFFFF2F
:10298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57
:10299000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47
:1029A000FFFFFFFFFFFFFFFFFFFFFF696B71555345
:1029B000423456432050726F746F636F6C20426FC5
:1029C0006172640A4170706C65204465736B746F4A
:1029D00070204275732028414442290A64656B7552
:1029E0004E756B656D203230323200000000000001
:1029F00000000001020304060708090000000001AE
:102A000002030400242A0008000000204C000000FB
:102A1000C81A0008702A00084C0000209C0700001B
:102A2000D81A0008000000000000FFFF00000000AE
:102A30000000000000000000000000000000000096
:102A40000000000000000000000000000000000086
:102A500000000000000000000000000000127A00EA
:102A60000000000000000000000000000000000066
:04000005080000C12E
:00000001FF

View File

Binary file not shown.

View File

File diff suppressed because it is too large Load Diff

View File

Binary file not shown.

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -7,9 +7,11 @@ import RPi.GPIO as GPIO
PBOARD_RESET_PIN = 25
PBOARD_BOOT0_PIN = 12
SLAVE_REQ_PIN = 16
GPIO.setmode(GPIO.BCM)
GPIO.setup(PBOARD_RESET_PIN, GPIO.IN)
GPIO.setup(PBOARD_BOOT0_PIN, GPIO.IN)
GPIO.setup(SLAVE_REQ_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def enter_dfu():
# RESET LOW: Enter reset
@@ -35,26 +37,48 @@ def exit_dfu():
GPIO.setup(PBOARD_RESET_PIN, GPIO.IN)
time.sleep(0.5)
if(len(sys.argv) < 2):
print (__file__ + ' hex_file')
def flash_firmware(fw_path):
for x in range(5):
print(f"----------------- {fw_path.split('/')[-1]} -----------------")
enter_dfu()
exit_code = os.system(f'sudo stm32flash -w {fw_path} -a 0x3b /dev/i2c-1') >> 8
exit_dfu()
if exit_code != 0:
for x in range(5):
print("!!!!!!!!!!!!!!!!! TEST FLASH FAILED !!!!!!!!!!!!!!!!!")
exit()
if(len(sys.argv) < 3):
print (__file__ + ' payload_fw test_fw')
exit()
os.system("clear")
pcard_spi = spidev.SpiDev(0, 0)
pcard_spi.max_speed_hz = 2000000
fw_path = sys.argv[1]
for x in range(5):
print(f"----------------- {fw_path.split('/')[-1]} -----------------")
enter_dfu()
exit_code = os.system(f'sudo stm32flash -w {fw_path} -a 0x3b /dev/i2c-1') >> 8
exit_dfu()
payload_fw_path = sys.argv[1]
test_fw_path = sys.argv[2]
if exit_code != 0:
flash_firmware(test_fw_path)
req_result = []
for x in range(10):
req_result.append(GPIO.input(SLAVE_REQ_PIN))
time.sleep(0.1)
print(req_result)
if 0 not in req_result or 1 not in req_result or req_result.count(0) <= 3 or req_result.count(1) <= 3:
for x in range(5):
print("!!!!!!!!!!!!!!!!! FLASH FAILED !!!!!!!!!!!!!!!!!")
print("!!!!!!!!!!!!!!!!! SLAVE REQ ERROR !!!!!!!!!!!!!!!!!")
exit()
while 1:
if len(input("Press enter to continue\n")) == 0:
break;
flash_firmware(payload_fw_path)
SPI_MOSI_MAGIC = 0xde
SPI_MOSI_MSG_TYPE_INFO_REQUEST = 1

View File

@@ -6,7 +6,7 @@ scp ./* pi@169.254.194.124:~/usb4vc/rpi_app
# ssh -t pi@169.254.194.124 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_main.py"
# ssh -t pi@169.254.194.124 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_check_update.py"
# ssh -t pi@169.254.194.124 "pkill python3;cd ~/usb4vc/rpi_app;python3 firmware_flasher.py /home/pi/usb4vc/firmware/PBFW_IBMPC_PBID1_V0_1_5.hex"
ssh -t pi@169.254.194.124 "pkill python3;cd ~/usb4vc/rpi_app;python3 firmware_flasher.py /home/pi/usb4vc/firmware/PBFW_IBMPC_PBID1_V0_1_5.hex /home/pi/usb4vc/firmware/ibmpc_test.hex"
# ssh -t pi@169.254.194.124 "pkill python3;cd ~/usb4vc/rpi_app;python3 bb_tester.py"
# pi@169.254.245.21 bb_tester