Skip to content

Instantly share code, notes, and snippets.

@xblax
Last active February 14, 2024 00:35
Show Gist options
  • Save xblax/2287bc83f399d2144952cd345518cf78 to your computer and use it in GitHub Desktop.
Save xblax/2287bc83f399d2144952cd345518cf78 to your computer and use it in GitHub Desktop.
Flashfore AD5M Eboard MCU initialization
#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;
}
**************************************************************
* 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
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