Last active
February 14, 2024 00:35
-
-
Save xblax/2287bc83f399d2144952cd345518cf78 to your computer and use it in GitHub Desktop.
Flashfore AD5M Eboard MCU initialization
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <termio.h> | |
#include <fcntl.h> | |
#include <unistd.h> | |
#include <termios.h> | |
#include <errno.h> | |
#include <stdint.h> | |
#include <string.h> | |
#include <stdio.h> | |
void print_hex( uint8_t* buf, int len ) | |
{ | |
for( int i = 0; i < len; i++ ) | |
{ | |
printf("%02X", buf[i]); | |
} | |
} | |
/* Bootloader start code to trigger execution of Klipper firmware on Eboard-MCU for Flashforge 5M */ | |
int main() | |
{ | |
// Setup serial port | |
const char* tty = "/dev/ttyS1"; | |
int fd = open( tty, O_RDWR ); | |
if( fd < 0 ) | |
{ | |
printf( "Serial: open (%s) failed: %s\n", tty, strerror( errno ) ); | |
return -1; | |
} | |
struct termios termios_p; | |
if( tcgetattr( fd, &termios_p ) != 0 ) | |
{ | |
printf( "Serial: tcgetattr failed: %s\n", strerror( errno ) ); | |
return 1; | |
} | |
cfmakeraw( &termios_p ); | |
cfsetispeed( &termios_p, B115200 ); | |
cfsetospeed( &termios_p, B115200 ); | |
if( tcsetattr( fd, 0, &termios_p ) != 0 ) | |
{ | |
printf("Serial: tcsetattr failed: %s\n", strerror( errno )); | |
return 1; | |
} | |
// Actual initialization starts here | |
uint8_t buf[64]; | |
printf("Waiting for MCU to become ready ...\n"); | |
for( int i = 0; i < 15; i++ ) | |
{ | |
int len = read( fd, buf, 32 ); | |
if( len <= 0 ) | |
break; // EOF or error | |
// MCU bootloader sents 'Ready.' in a loop when started | |
printf("Recv: "); | |
print_hex( buf, len ); | |
printf("\n"); | |
buf[len] = 0; | |
if( strstr( (char*)buf, "Ready." ) != 0 ) | |
{ | |
printf("Eboard MCU sent 'Ready.'\n"); | |
break; | |
} | |
} | |
// Tell MCU to start execution of firmware with cmd 'A' 0x41 | |
uint8_t go_cmd = 'A'; | |
for( int i = 0; i < 15; i++ ) | |
{ | |
write( fd, &go_cmd, 1 ); | |
printf("Send: %02X\n", go_cmd); | |
int len = read( fd, &buf, 32 ); | |
if( len <= 0 ) | |
return 1; // EOF or error | |
// MCU acknowledges cmd with byte 0x06 (Ascii ACK) | |
printf("Recv: %02X\n", buf[0]); | |
if( buf[0] == '\x06' ) | |
{ | |
printf("Application is starting.\n"); | |
break; | |
} | |
} | |
close(fd); | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
************************************************************** | |
* bootSerialMainEboardMcu() * | |
************************************************************** | |
undefined bootSerialMainEboardMcu(void) | |
assume LRset = 0x0 | |
assume TMode = 0x1 | |
undefined r0:1 <RETURN> | |
undefined1 Stack[-0x3d]:1 local_3d XREF[1]: 00028c24(W) | |
undefined1 Stack[-0x3e]:1 local_3e XREF[1]: 00028c20(W) | |
undefined4 Stack[-0x48]:4 local_48 XREF[2]: 00028c46(R), | |
00028c64(W) | |
undefined4 Stack[-0x4c]:4 local_4c XREF[2]: 00028c36(R), | |
00028c5c(W) | |
undefined4 Stack[-0x50]:4 local_50 XREF[2]: 00028c3e(R), | |
00028c62(W) | |
undefined4 Stack[-0x54]:4 local_54 XREF[2]: 00028c3a(R), | |
00028c5e(W) | |
undefined2 Stack[-0x58]:2 local_58 XREF[1]: 00028c8c(W) | |
undefined4 Stack[-0x5c]:4 local_5c XREF[1]: 00028c8a(W) | |
undefined4 Stack[-0x60]:4 local_60 XREF[1]: 00028c88(W) | |
undefined4 Stack[-0x64]:4 local_64 XREF[1]: 00028c86(W) | |
undefined4 Stack[-0x68]:4 local_68 XREF[1]: 00028c84(W) | |
undefined4 Stack[-0x6c]:4 local_6c XREF[1]: 00028c82(W) | |
undefined4 Stack[-0x70]:4 local_70 XREF[1]: 00028c80(W) | |
undefined4 Stack[-0x74]:4 local_74 XREF[1]: 00028c7e(W) | |
undefined4 Stack[-0x78]:4 local_78 XREF[1]: 00028c7c(W) | |
undefined4 Stack[-0x7c]:4 local_7c XREF[1]: 00028c7a(W) | |
undefined4 Stack[-0x80]:4 local_80 XREF[1]: 00028c78(W) | |
undefined4 Stack[-0x84]:4 local_84 XREF[1]: 00028c76(W) | |
undefined4 Stack[-0x88]:4 local_88 XREF[1]: 00028c74(W) | |
undefined4 Stack[-0x8c]:4 local_8c XREF[5]: 00028cd8(W), | |
00028cf8(R), | |
00028d0e(R), | |
00028d9a(R), | |
00028da2(R) | |
undefined4 Stack[-0x90]:4 local_90 XREF[7]: 00028cc0(W), | |
00028d14(R), | |
00028d2e(R), | |
00028d4c(W), | |
00028d7a(R), | |
00028dd0(R), | |
00028de6(W) | |
undefined1 Stack[-0x94]:1 local_94 XREF[1]: 00028cf0(W) | |
_Z23bootSerialMainEboardMcuv XREF[2]: Entry Point(*), main:000250de(c) | |
bootSerialMainEboardMcu | |
00028bd0 45 f6 00 00 movw r0,#0x5800 | |
00028bd4 2d e9 f0 41 push {r4,r5,r6,r7,r8,lr} | |
00028bd8 02 21 movs r1,#0x2 | |
00028bda a0 b0 sub sp,#0x80 | |
00028bdc c0 f2 1b 00 movt r0=>s_/dev/ttyS1_001b5800,#0x1b = "/dev/ttyS1" | |
00028be0 f9 f7 64 ef blx <EXTERNAL>::open int open(char * __file, int __of | |
00028be4 06 1e subs r6,r0,#0x0 | |
00028be6 c0 f2 01 81 blt.w LAB_00028dec | |
00028bea 45 f2 f8 60 movw r0,#0x56f8 | |
00028bee 31 46 mov r1,r6 | |
00028bf0 c0 f2 1b 00 movt r0=>s_Serial:_serial_fd:_%d_001b56f8,#0x1b = "Serial: serial fd: %d\n" | |
00028bf4 f9 f7 1c e9 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028bf8 00 22 movs r2,#0x0 | |
00028bfa 04 21 movs r1,#0x4 | |
00028bfc 30 46 mov r0,r6 | |
00028bfe f9 f7 04 ea blx <EXTERNAL>::fcntl int fcntl(int __fd, int __cmd, . | |
00028c02 11 a9 add r1,sp,#0x44 | |
00028c04 30 46 mov r0,r6 | |
00028c06 fa f7 6a e9 blx <EXTERNAL>::tcgetattr int tcgetattr(int __fd, termios | |
00028c0a 00 28 cmp r0,#0x0 | |
00028c0c c0 f2 01 81 blt.w LAB_00028e12 | |
00028c10 11 a8 add r0,sp,#0x44 | |
00028c12 00 25 movs r5,#0x0 | |
00028c14 f9 f7 4e ed blx <EXTERNAL>::cfmakeraw void cfmakeraw(termios * __termi | |
00028c18 01 23 movs r3,#0x1 | |
00028c1a 41 f2 02 01 movw r1,#0x1002 | |
00028c1e 11 a8 add r0,sp,#0x44 | |
00028c20 8d f8 5a 30 strb.w r3,[sp,#local_3e] | |
00028c24 8d f8 5b 50 strb.w r5,[sp,#local_3d] | |
00028c28 fa f7 3a ec blx <EXTERNAL>::cfsetispeed int cfsetispeed(termios * __term | |
00028c2c 41 f2 02 01 movw r1,#0x1002 | |
00028c30 11 a8 add r0,sp,#0x44 | |
00028c32 fa f7 fc ef blx <EXTERNAL>::cfsetospeed int cfsetospeed(termios * __term | |
00028c36 13 9b ldr r3,[sp,#local_4c] | |
00028c38 11 aa add r2,sp,#0x44 | |
00028c3a 11 9f ldr r7,[sp,#local_54] | |
00028c3c 29 46 mov r1,r5 | |
00028c3e 12 9c ldr r4,[sp,#local_50] | |
00028c40 30 46 mov r0,r6 | |
00028c42 23 f0 00 4e bic lr,r3,#0x80000000 | |
00028c46 14 9b ldr r3,[sp,#local_48] | |
00028c48 2e f4 1c 7e bic lr,lr,#0x270 | |
00028c4c 27 f4 a0 6c bic r12,r7,#0x500 | |
00028c50 24 f0 01 04 bic r4,r4,#0x1 | |
00028c54 4e f4 0b 67 orr r7,lr,#0x8b0 | |
00028c58 23 f0 1b 03 bic r3,r3,#0x1b | |
00028c5c 13 97 str r7,[sp,#local_4c] | |
00028c5e cd f8 44 c0 str.w r12,[sp,#local_54] | |
00028c62 12 94 str r4,[sp,#local_50] | |
00028c64 14 93 str r3,[sp,#local_48] | |
00028c66 f9 f7 a6 ec blx <EXTERNAL>::tcsetattr int tcsetattr(int __fd, int __op | |
00028c6a a8 42 cmp r0,r5 | |
00028c6c c0 f2 e0 80 blt.w LAB_00028e30 | |
00028c70 2f 46 mov r7,r5 | |
00028c72 14 24 movs r4,#0x14 | |
00028c74 04 95 str r5,[sp,#local_88] | |
00028c76 05 95 str r5,[sp,#local_84] | |
00028c78 06 95 str r5,[sp,#local_80] | |
00028c7a 07 95 str r5,[sp,#local_7c] | |
00028c7c 08 95 str r5,[sp,#local_78] | |
00028c7e 09 95 str r5,[sp,#local_74] | |
00028c80 0a 95 str r5,[sp,#local_70] | |
00028c82 0b 95 str r5,[sp,#local_6c] | |
00028c84 0c 95 str r5,[sp,#local_68] | |
00028c86 0d 95 str r5,[sp,#local_64] | |
00028c88 0e 95 str r5,[sp,#local_60] | |
00028c8a 0f 95 str r5,[sp,#local_5c] | |
00028c8c ad f8 40 50 strh.w r5,[sp,#local_58] | |
00028c90 01 e0 b LAB_00028c96 | |
LAB_00028c92 XREF[1]: 00028cb4(j) | |
00028c92 01 3c subs r4,#0x1 | |
00028c94 52 d0 beq LAB_00028d3c | |
LAB_00028c96 XREF[2]: 00028c90(j), 00028d3a(j) | |
00028c96 32 22 movs r2,#0x32 | |
00028c98 04 a9 add r1,sp,#0x10 | |
00028c9a 30 46 mov r0,r6 | |
00028c9c fb f7 b6 e9 blx <EXTERNAL>::read ssize_t read(int __fd, void * __ | |
00028ca0 05 46 mov r5,r0 | |
00028ca2 02 46 mov r2,r0 | |
00028ca4 45 f2 50 70 movw r0,#0x5750 | |
00028ca8 04 a9 add r1,sp,#0x10 | |
00028caa c0 f2 1b 00 movt r0=>s_Serial:_serial_ready_recv:_%s_,_c_001b57 = "Serial: serial ready recv: %s | |
00028cae f9 f7 c0 e8 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028cb2 00 2d cmp r5,#0x0 | |
00028cb4 ed d0 beq LAB_00028c92 | |
00028cb6 4f f0 ff 31 mov.w r1,#0xffffffff | |
00028cba 04 a8 add r0,sp,#0x10 | |
00028cbc f9 f7 68 ed blx <EXTERNAL>::QString::fromAscii_helper undefined fromAscii_helper(char | |
00028cc0 02 90 str r0,[sp,#local_90] | |
00028cc2 45 f2 7c 70 movw r0,#0x577c | |
00028cc6 c0 f2 1b 00 movt r0=>s_Ready_001b577c,#0x1b = "Ready" | |
00028cca 4f f0 ff 31 mov.w r1,#0xffffffff | |
00028cce f9 f7 60 ed blx <EXTERNAL>::QString::fromAscii_helper undefined fromAscii_helper(char | |
00028cd2 20 af add r7,sp,#0x80 | |
00028cd4 0d f1 08 08 add.w r8,sp,#0x8 | |
00028cd8 47 f8 74 0d str.w r0,[r7,#-0x74]!=>local_8c | |
00028cdc 01 23 movs r3,#0x1 | |
00028cde 39 46 mov r1,r7 | |
00028ce0 40 46 mov r0,r8 | |
00028ce2 00 22 movs r2,#0x0 | |
00028ce4 f8 f7 fa ef blx <EXTERNAL>::QString::indexOf undefined indexOf(QString * para | |
00028ce8 01 30 adds r0,#0x1 | |
00028cea 01 ad add r5,sp,#0x4 | |
00028cec 18 bf it ne | |
00028cee 01 20 mov.ne r0,#0x1 | |
00028cf0 8d f8 04 00 strb.w r0,[sp,#local_94] | |
00028cf4 00 b9 cbnz r0,LAB_00028cf8 | |
00028cf6 05 46 mov r5,r0 | |
LAB_00028cf8 XREF[1]: 00028cf4(j) | |
00028cf8 03 9b ldr r3,[sp,#local_8c] | |
LAB_00028cfa XREF[1]: 00028d0a(j) | |
00028cfa 53 e8 00 2f ldrex r2,[r3,#0x0] | |
00028cfe a2 f1 01 02 sub.w r2,r2,#0x1 | |
00028d02 43 e8 00 21 strex r1,r2,[r3,#0x0] | |
00028d06 91 f0 00 0f teq r1,#0x0 | |
00028d0a f6 d1 bne LAB_00028cfa | |
00028d0c 12 b9 cbnz r2,LAB_00028d14 | |
00028d0e 03 98 ldr r0,[sp,#local_8c] | |
00028d10 fa f7 b6 ef blx <EXTERNAL>::QString::free void free(void * __ptr) | |
LAB_00028d14 XREF[1]: 00028d0c(j) | |
00028d14 02 9b ldr r3,[sp,#local_90] | |
00028d16 00 2d cmp r5,#0x0 | |
00028d18 50 d1 bne LAB_00028dbc | |
LAB_00028d1a XREF[1]: 00028d2a(j) | |
00028d1a 53 e8 00 2f ldrex r2,[r3,#0x0] | |
00028d1e a2 f1 01 02 sub.w r2,r2,#0x1 | |
00028d22 43 e8 00 21 strex r1,r2,[r3,#0x0] | |
00028d26 91 f0 00 0f teq r1,#0x0 | |
00028d2a f6 d1 bne LAB_00028d1a | |
00028d2c 12 b9 cbnz r2,LAB_00028d34 | |
00028d2e 02 98 ldr r0,[sp,#local_90] | |
00028d30 fa f7 a6 ef blx <EXTERNAL>::QString::free void free(void * __ptr) | |
LAB_00028d34 XREF[1]: 00028d2c(j) | |
00028d34 01 3c subs r4,#0x1 | |
00028d36 4f f0 01 07 mov.w r7,#0x1 | |
00028d3a ac d1 bne LAB_00028c96 | |
LAB_00028d3c XREF[1]: 00028c94(j) | |
00028d3c 45 f2 84 70 movw r0,#0x5784 | |
00028d40 39 46 mov r1,r7 | |
00028d42 c0 f2 1b 00 movt r0=>s_Serial:_serial_ready_end:_%d_001b5784,#0 = "Serial: serial ready end: %d\n" | |
00028d46 f9 f7 74 e8 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028d4a 41 23 movs r3,#0x41 | |
00028d4c 8d f8 08 30 strb.w r3,[sp,#local_90] | |
00028d50 3f b9 cbnz r7,LAB_00028d62 | |
00028d52 30 46 mov r0,r6 | |
00028d54 f9 f7 68 ed blx <EXTERNAL>::close int close(int __fd) | |
00028d58 4f f0 ff 30 mov.w r0,#0xffffffff | |
LAB_00028d5c XREF[3]: 00028e10(j), 00028e2e(j), | |
00028e4c(j) | |
00028d5c 20 b0 add sp,#0x80 | |
00028d5e bd e8 f0 81 pop.w {r4,r5,r6,r7,r8,pc} | |
LAB_00028d62 XREF[1]: 00028d50(j) | |
00028d62 03 af add r7,sp,#0xc | |
00028d64 0d f1 08 08 add.w r8,sp,#0x8 | |
LAB_00028d68 XREF[1]: 00028dea(j) | |
00028d68 14 24 movs r4,#0x14 | |
LAB_00028d6a XREF[1]: 00028dac(j) | |
00028d6a 01 22 movs r2,#0x1 | |
00028d6c 41 46 mov r1,r8 | |
00028d6e 30 46 mov r0,r6 | |
00028d70 f9 f7 0e e8 blx <EXTERNAL>::write ssize_t write(int __fd, void * _ | |
00028d74 02 46 mov r2,r0 | |
00028d76 45 f6 0c 00 movw r0,#0x580c | |
00028d7a 9d f8 08 10 ldrb.w r1,[sp,#local_90] | |
00028d7e c0 f2 1b 00 movt r0=>s_Serial:_serial_ACK_send:_%c_,_co_001b580 = "Serial: serial ACK send: %c , | |
00028d82 f9 f7 56 e8 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028d86 01 22 movs r2,#0x1 | |
00028d88 39 46 mov r1,r7 | |
00028d8a 30 46 mov r0,r6 | |
00028d8c fb f7 3e e9 blx <EXTERNAL>::read ssize_t read(int __fd, void * __ | |
00028d90 02 46 mov r2,r0 | |
00028d92 45 f2 d4 70 movw r0,#0x57d4 | |
00028d96 c0 f2 1b 00 movt r0=>s_Serial:_serial_ACK_recv:_%d_,_co_001b57d = "Serial: serial ACK recv: %d , | |
00028d9a 9d f8 0c 10 ldrb.w r1,[sp,#local_8c] | |
00028d9e f9 f7 48 e8 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028da2 9d f8 0c 30 ldrb.w r3,[sp,#local_8c] | |
00028da6 06 2b cmp r3,#0x6 | |
00028da8 01 d0 beq LAB_00028dae | |
00028daa 01 3c subs r4,#0x1 | |
00028dac dd d1 bne LAB_00028d6a | |
LAB_00028dae XREF[1]: 00028da8(j) | |
00028dae 30 46 mov r0,r6 | |
00028db0 f9 f7 3a ed blx <EXTERNAL>::close int close(int __fd) | |
00028db4 00 20 movs r0,#0x0 | |
00028db6 20 b0 add sp,#0x80 | |
00028db8 bd e8 f0 81 pop.w {r4,r5,r6,r7,r8,pc} | |
LAB_00028dbc XREF[2]: 00028d18(j), 00028dcc(j) | |
00028dbc 53 e8 00 2f ldrex r2,[r3,#0x0] | |
00028dc0 a2 f1 01 02 sub.w r2,r2,#0x1 | |
00028dc4 43 e8 00 21 strex r1,r2,[r3,#0x0] | |
00028dc8 91 f0 00 0f teq r1,#0x0 | |
00028dcc f6 d1 bne LAB_00028dbc | |
00028dce 12 b9 cbnz r2,LAB_00028dd6 | |
00028dd0 02 98 ldr r0,[sp,#local_90] | |
00028dd2 fa f7 56 ef blx <EXTERNAL>::QString::free void free(void * __ptr) | |
LAB_00028dd6 XREF[1]: 00028dce(j) | |
00028dd6 45 f2 84 70 movw r0,#0x5784 | |
00028dda 01 21 movs r1,#0x1 | |
00028ddc c0 f2 1b 00 movt r0=>s_Serial:_serial_ready_end:_%d_001b5784,#0 = "Serial: serial ready end: %d\n" | |
00028de0 f9 f7 26 e8 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028de4 41 23 movs r3,#0x41 | |
00028de6 8d f8 08 30 strb.w r3,[sp,#local_90] | |
00028dea bd e7 b LAB_00028d68 | |
LAB_00028dec XREF[1]: 00028be6(j) | |
00028dec f9 f7 18 eb blx <EXTERNAL>::__errno_location int * __errno_location(void) | |
00028df0 00 68 ldr r0,[r0,#0x0] | |
00028df2 f9 f7 f4 e9 blx <EXTERNAL>::strerror char * strerror(int __errnum) | |
00028df6 45 f6 00 01 movw r1,#0x5800 | |
00028dfa 02 46 mov r2,r0 | |
00028dfc 45 f2 d4 60 movw r0,#0x56d4 | |
00028e00 c0 f2 1b 01 movt r1=>s_/dev/ttyS1_001b5800,#0x1b = "/dev/ttyS1" | |
00028e04 c0 f2 1b 00 movt r0=>s_Serial:_serial_(%s)_open_fail,_%_001b56d = "Serial: serial (%s) open fail | |
00028e08 f9 f7 12 e8 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028e0c 4f f0 ff 30 mov.w r0,#0xffffffff | |
00028e10 a4 e7 b LAB_00028d5c | |
LAB_00028e12 XREF[1]: 00028c0c(j) | |
00028e12 f9 f7 06 eb blx <EXTERNAL>::__errno_location int * __errno_location(void) | |
00028e16 00 68 ldr r0,[r0,#0x0] | |
00028e18 f9 f7 e0 e9 blx <EXTERNAL>::strerror char * strerror(int __errnum) | |
00028e1c 01 46 mov r1,r0 | |
00028e1e 45 f2 10 70 movw r0,#0x5710 | |
00028e22 c0 f2 1b 00 movt r0=>s_Serial:_tcgetattr_error,_%s_001b5710,#0x1b = "Serial: tcgetattr error, %s\n" | |
00028e26 f9 f7 04 e8 blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028e2a 4f f0 ff 30 mov.w r0,#0xffffffff | |
00028e2e 95 e7 b LAB_00028d5c | |
LAB_00028e30 XREF[1]: 00028c6c(j) | |
00028e30 f9 f7 f6 ea blx <EXTERNAL>::__errno_location int * __errno_location(void) | |
00028e34 00 68 ldr r0,[r0,#0x0] | |
00028e36 f9 f7 d2 e9 blx <EXTERNAL>::strerror char * strerror(int __errnum) | |
00028e3a 01 46 mov r1,r0 | |
00028e3c 45 f2 30 70 movw r0,#0x5730 | |
00028e40 c0 f2 1b 00 movt r0=>s_Serial:_tcsetattr_error,_%s_001b5730,#0x1b = "Serial: tcsetattr error, %s\n" | |
00028e44 f8 f7 f4 ef blx <EXTERNAL>::printf int printf(char * __format, ...) | |
00028e48 4f f0 ff 30 mov.w r0,#0xffffffff | |
00028e4c 86 e7 b LAB_00028d5c | |
00028e4e 38 ?? 38h 8 | |
00028e4f 46 ?? 46h F | |
00028e50 01 ?? 01h | |
00028e51 f0 ?? F0h | |
00028e52 04 ?? 04h | |
00028e53 f9 ?? F9h | |
00028e54 40 ?? 40h @ | |
00028e55 46 ?? 46h F | |
00028e56 01 ?? 01h | |
00028e57 f0 ?? F0h | |
00028e58 01 ?? 01h | |
00028e59 f9 ?? F9h | |
00028e5a fa ?? FAh | |
00028e5b f7 ?? F7h | |
00028e5c 54 ?? 54h T | |
00028e5d ed ?? EDh | |
00028e5e 0d ?? 0Dh | |
00028e5f f1 ?? F1h | |
00028e60 08 ?? 08h | |
00028e61 08 ?? 08h | |
00028e62 f7 ?? F7h | |
00028e63 e7 ?? E7h |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
undefined4 bootSerialMainEboardMcu(void) | |
{ | |
bool bVar1; | |
int __fd; | |
int iVar2; | |
ssize_t sVar3; | |
int *piVar4; | |
char *pcVar5; | |
int iVar6; | |
undefined *puVar7; | |
int iVar8; | |
undefined local_94 [4]; | |
undefined4 local_90; | |
int *local_8c; | |
undefined4 local_88; | |
undefined4 local_84; | |
undefined4 local_80; | |
undefined4 local_7c; | |
undefined4 local_78; | |
undefined4 local_74; | |
undefined4 local_70; | |
undefined4 local_6c; | |
undefined4 local_68; | |
undefined4 local_64; | |
undefined4 local_60; | |
undefined4 local_5c; | |
undefined2 local_58; | |
termios local_54; | |
__fd = open("/dev/ttyS1",2); | |
if (__fd < 0) { | |
piVar4 = __errno_location(); | |
pcVar5 = strerror(*piVar4); | |
printf("Serial: serial (%s) open fail, %s\n","/dev/ttyS1",pcVar5); | |
} | |
else { | |
printf("Serial: serial fd: %d\n",__fd); | |
fcntl(__fd,4,0); | |
iVar2 = tcgetattr(__fd,&local_54); | |
if (iVar2 < 0) { | |
piVar4 = __errno_location(); | |
pcVar5 = strerror(*piVar4); | |
printf("Serial: tcgetattr error, %s\n",pcVar5); | |
} | |
else { | |
cfmakeraw(&local_54); | |
local_54.c_cc[5] = '\x01'; | |
local_54.c_cc[6] = '\0'; | |
cfsetispeed(&local_54,0x1002); | |
cfsetospeed(&local_54,0x1002); | |
local_54.c_iflag = local_54.c_iflag & 0xfffffaff; | |
local_54.c_oflag = local_54.c_oflag & 0xfffffffe; | |
local_54.c_cflag = local_54.c_cflag & 0x7ffffd8f | 0x8b0; | |
local_54.c_lflag = local_54.c_lflag & 0xffffffe4; | |
iVar2 = tcsetattr(__fd,0,&local_54); | |
if (iVar2 < 0) { | |
piVar4 = __errno_location(); | |
pcVar5 = strerror(*piVar4); | |
printf("Serial: tcsetattr error, %s\n",pcVar5); | |
} | |
else { | |
iVar2 = 0; | |
iVar6 = 0x14; | |
local_88 = 0; | |
local_84 = 0; | |
local_80 = 0; | |
local_7c = 0; | |
local_78 = 0; | |
local_74 = 0; | |
local_70 = 0; | |
local_6c = 0; | |
local_68 = 0; | |
local_64 = 0; | |
local_60 = 0; | |
local_5c = 0; | |
local_58 = 0; | |
do { | |
while( true ) { | |
sVar3 = read(__fd,&local_88,0x32); | |
printf("Serial: serial ready recv: %s , count: %d\n",&local_88,sVar3); | |
if (sVar3 == 0) break; | |
local_90 = (int *)QString::fromAscii_helper((char *)&local_88,-1); | |
local_8c = (int *)QString::fromAscii_helper("Ready",-1); | |
iVar2 = QString::indexOf((QString *)&local_90,(int)&local_8c,0); | |
iVar2 = iVar2 + 1; | |
puVar7 = local_94; | |
if (iVar2 != 0) { | |
iVar2 = 1; | |
} | |
local_94[0] = (undefined)iVar2; | |
if (iVar2 == 0) { | |
puVar7 = (undefined *)0x0; | |
} | |
do { | |
ExclusiveAccess(local_8c); | |
iVar2 = *local_8c; | |
bVar1 = (bool)hasExclusiveAccess(local_8c); | |
} while (!bVar1); | |
*local_8c = iVar2 + -1; | |
if (iVar2 + -1 == 0) { | |
QString::free(local_8c); | |
} | |
if (puVar7 != (undefined *)0x0) goto LAB_00028dbc; | |
do { | |
ExclusiveAccess(local_90); | |
iVar2 = *local_90; | |
bVar1 = (bool)hasExclusiveAccess(local_90); | |
} while (!bVar1); | |
*local_90 = iVar2 + -1; | |
if (iVar2 + -1 == 0) { | |
QString::free(local_90); | |
} | |
iVar6 = iVar6 + -1; | |
iVar2 = 1; | |
iVar8 = 1; | |
if (iVar6 == 0) goto LAB_00028d3c; | |
} | |
iVar6 = iVar6 + -1; | |
iVar8 = iVar2; | |
} while (iVar6 != 0); | |
LAB_00028d3c: | |
printf("Serial: serial ready end: %d\n",iVar8); | |
local_90 = (int *)CONCAT31(local_90._1_3_,0x41); | |
if (iVar8 != 0) goto LAB_00028d68; | |
close(__fd); | |
} | |
} | |
} | |
return 0xffffffff; | |
LAB_00028dbc: | |
do { | |
ExclusiveAccess(local_90); | |
iVar2 = *local_90; | |
bVar1 = (bool)hasExclusiveAccess(local_90); | |
} while (!bVar1); | |
*local_90 = iVar2 + -1; | |
if (iVar2 + -1 == 0) { | |
QString::free(local_90); | |
} | |
printf("Serial: serial ready end: %d\n",1); | |
local_90 = (int *)CONCAT31(local_90._1_3_,0x41); | |
LAB_00028d68: | |
iVar2 = 0x14; | |
do { | |
sVar3 = write(__fd,&local_90,1); | |
printf("Serial: serial ACK send: %c , count: %d\n",(uint)local_90 & 0xff,sVar3); | |
sVar3 = read(__fd,&local_8c,1); | |
printf("Serial: serial ACK recv: %d , count: %d\n",(uint)local_8c & 0xff,sVar3); | |
if ((char)local_8c == '\x06') break; | |
iVar2 = iVar2 + -1; | |
} while (iVar2 != 0); | |
close(__fd); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment