// File: /workspace/github_cpp_makefile_star2_O2/goodix[P]gdix_hid_firmware_update/gtx3/gtx3.cpp
// Function: GTx3Device::SetBasicProperties()
int GTx3Device::SetBasicProperties()
{
	int ret;
	unsigned char fw_info[12] = {0};
	m_firmwareVersionMajor = 20;
	m_firmwareVersionMinor = 20;
	m_sensorID = 0xF;
	unsigned char cfg_ver = 0;
	int retry = 10;
	unsigned char chksum;

	if (!m_deviceOpen) {
		gdix_err("Please open device first\n");
		return -1;
	}
	do {
		ret = Read(0x8050, &cfg_ver, 1);
		if (ret < 0) {
			gdix_dbg("Failed read cfg VERSION, retry=%d\n", retry);
			continue;
		}
		gdix_dbg("cfg ver:%d\n", cfg_ver);
		ret = Read(0x8240, fw_info, sizeof(fw_info));
		if (ret < 0)
			gdix_dbg("Failed read VERSION, retry=%d\n", retry);
		else
			break;
	} while (--retry);
	gdix_dbg("Fw_info array\n");
	gdix_dbg("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x\n", fw_info[0], fw_info[1],
			 fw_info[2], fw_info[3], fw_info[4]);
	gdix_dbg("0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x\n", fw_info[5],
			 fw_info[6], fw_info[7], fw_info[8], fw_info[9], fw_info[10]);
	if (!retry)
		return -1;

	/*check fw version*/
	chksum = ChecksumU8(fw_info, sizeof(fw_info));
	if (chksum) {
		gdix_err("fw version check sum error:%d\n", chksum);
		return -2;
	}
	memcpy(m_pid, fw_info, 4);
	m_pid[4] = '\0';
	gdix_dbg("pid:%s\n", m_pid);
	m_sensorID = fw_info[10] & 0x0f;
	gdix_dbg("sensorID:%d\n", m_sensorID);

	m_firmwareVersionMajor = fw_info[5];
	m_firmwareVersionMinor = ((fw_info[6] << 16) | (fw_info[7]) << 8) | cfg_ver;

	gdix_dbg("version:0x%x,0x%x\n", m_firmwareVersionMajor,
			 m_firmwareVersionMinor);

	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
andl $0x0, 0x10(%rsp)
andq $0x0, 0x8(%rsp)
movabsq $0x1400000014, %rax     # imm = 0x1400000014
movq %rax, 0x10(%rdi)
movl $0xf, 0x18(%rdi)
movb $0x0, 0x7(%rsp)
cmpb $0x1, 0x8(%rdi)
jne 0xa271
movq %rdi, %rbx
pushq $0xa
popq %rbp
leaq 0x7(%rsp), %r14
pushq $0x1
popq %r15
leaq 0xbab4(%rip), %r13      # 0x15c59
pushq $0xc
popq %r12
movq (%rbx), %rax
movq %rbx, %rdi
movl $0x8050, %esi           # imm = 0x8050
movq %r14, %rdx
movl %r15d, %ecx
callq *0x20(%rax)
leaq 0x160cd(%rip), %rcx     # 0x20291
movb (%rcx), %cl
testl %eax, %eax
js 0xa236
testb %cl, %cl
je 0xa1f2
movq 0x15de3(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
movzbl 0x7(%rsp), %r8d
leaq 0xbb1e(%rip), %rsi      # 0x15d03
movq %r13, %rdx
pushq $0x2d
popq %rcx
xorl %eax, %eax
callq 0x5180
movq (%rbx), %rax
movq %rbx, %rdi
movl $0x8240, %esi           # imm = 0x8240
leaq 0x8(%rsp), %rdx
movl %r12d, %ecx
callq *0x20(%rax)
leaq 0x16082(%rip), %rcx     # 0x20291
movb (%rcx), %cl
testl %eax, %eax
jns 0xa2ab
testb $0x1, %cl
je 0xa25b
movq 0x15d93(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
leaq 0xbaf1(%rip), %rsi      # 0x15d20
movq %r13, %rdx
pushq $0x30
jmp 0xa250
testb %cl, %cl
je 0xa25b
movq 0x15d77(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
leaq 0xba84(%rip), %rsi      # 0x15ccf
movq %r13, %rdx
pushq $0x2a
popq %rcx
movl %ebp, %r8d
xorl %eax, %eax
callq 0x5180
decl %ebp
jne 0xa1a9
leaq 0x16027(%rip), %rax     # 0x20291
movb (%rax), %cl
movb $0x1, %bpl
jmp 0xa2ad
leaq 0x16019(%rip), %rax     # 0x20291
pushq $-0x1
popq %rbx
cmpb $0x1, (%rax)
jne 0xa4c6
movq 0x15d4d(%rip), %rax     # 0x1ffd8
movq (%rax), %rdi
leaq 0xb999(%rip), %rsi      # 0x15c2e
leaq 0xb9bd(%rip), %rdx      # 0x15c59
pushq $0x24
popq %rcx
xorl %eax, %eax
callq 0x5180
jmp 0xa4c6
xorl %ebp, %ebp
testb $0x1, %cl
je 0xa2dd
movq 0x15cff(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
leaq 0xba8d(%rip), %rsi      # 0x15d50
leaq 0xb98f(%rip), %rdx      # 0x15c59
pushq $0x34
popq %rcx
xorl %eax, %eax
callq 0x5180
leaq 0x15fb6(%rip), %rax     # 0x20291
movb (%rax), %cl
testb $0x1, %cl
je 0xa339
movq 0x15ccf(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
movzbl 0x8(%rsp), %r8d
movzbl 0x9(%rsp), %r9d
movzbl 0xa(%rsp), %r10d
movzbl 0xb(%rsp), %r11d
movzbl 0xc(%rsp), %r14d
subq $0x8, %rsp
leaq 0xba5b(%rip), %rsi      # 0x15d70
leaq 0xb93d(%rip), %rdx      # 0x15c59
pushq $0x36
popq %rcx
xorl %eax, %eax
pushq %r14
pushq %r11
pushq %r10
callq 0x5180
addq $0x20, %rsp
leaq 0x15f5a(%rip), %rax     # 0x20291
movb (%rax), %cl
testb $0x1, %cl
je 0xa390
movq 0x15c73(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
movzbl 0xd(%rsp), %r8d
movzbl 0xe(%rsp), %r9d
movzbl 0xf(%rsp), %r10d
movzbl 0x10(%rsp), %r11d
movzbl 0x11(%rsp), %r14d
movzbl 0x12(%rsp), %r15d
leaq 0xba32(%rip), %rsi      # 0x15da5
leaq 0xb8df(%rip), %rdx      # 0x15c59
pushq $0x38
popq %rcx
xorl %eax, %eax
pushq %r15
pushq %r14
pushq %r11
pushq %r10
callq 0x5180
addq $0x20, %rsp
testb %bpl, %bpl
je 0xa39d
pushq $-0x1
popq %rbx
jmp 0xa4c6
leaq 0x8(%rsp), %rsi
pushq $0xc
popq %rdx
movq %rbx, %rdi
callq 0xc54a
testb %al, %al
je 0xa3ef
pushq $-0x2
popq %rbx
leaq 0x15ed6(%rip), %rcx     # 0x20291
cmpb $0x1, (%rcx)
jne 0xa4c6
movq 0x15c0d(%rip), %rcx     # 0x1ffd8
movq (%rcx), %rdi
movzbl %al, %r8d
leaq 0xcb5e(%rip), %rsi      # 0x16f37
leaq 0xb879(%rip), %rdx      # 0x15c59
pushq $0x3f
popq %rcx
xorl %eax, %eax
callq 0x5180
jmp 0xa4c6
movl 0x8(%rsp), %eax
movl %eax, 0x1c(%rbx)
movb $0x0, 0x20(%rbx)
leaq 0x15e90(%rip), %rax     # 0x20291
movb (%rax), %al
cmpb $0x1, %al
jne 0xa436
leaq 0x1c(%rbx), %r8
movq 0x15ba6(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
leaq 0xb9fd(%rip), %rsi      # 0x15e19
leaq 0xb836(%rip), %rdx      # 0x15c59
pushq $0x44
popq %rcx
xorl %eax, %eax
callq 0x5180
leaq 0x15e5d(%rip), %rax     # 0x20291
movb (%rax), %al
movzbl 0x12(%rsp), %r8d
andl $0xf, %r8d
movl %r8d, 0x18(%rbx)
testb $0x1, %al
je 0xa473
movq 0x15b69(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
leaq 0xb9d9(%rip), %rsi      # 0x15e32
leaq 0xb7f9(%rip), %rdx      # 0x15c59
pushq $0x46
popq %rcx
xorl %eax, %eax
callq 0x5180
leaq 0x15e20(%rip), %rax     # 0x20291
movb (%rax), %al
movzbl 0xd(%rsp), %r8d
movl %r8d, 0x10(%rbx)
movzbl 0xe(%rsp), %ecx
shll $0x10, %ecx
movzbl 0xf(%rsp), %edx
shll $0x8, %edx
orl %ecx, %edx
movzbl 0x7(%rsp), %r9d
orl %edx, %r9d
movl %r9d, 0x14(%rbx)
xorl %ebx, %ebx
testb $0x1, %al
je 0xa4c6
movq 0x15b0f(%rip), %rax     # 0x1ffb8
movq (%rax), %rdi
leaq 0xb99d(%rip), %rsi      # 0x15e50
leaq 0xb79f(%rip), %rdx      # 0x15c59
xorl %ebx, %ebx
pushq $0x4c
popq %rcx
xorl %eax, %eax
callq 0x5180
movl %ebx, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop