// File: probonopd[P]decodeir/DecodeIR.cpp
// Function: Signal::trySomfy()
void Signal::trySomfy()
{
    if (   nFrameL < 10
        || nFrameL > 19 )
    {
        return;
    }
    float firstBurst = pFrame[0] + pFrame[1];
    if (   firstBurst < 1.6 * sortBurst.max2
        || sortBurst.max1 > pFrameEnd[0] )
    {
        return;
    }
    float bitTotal = nTotDur - firstBurst;
    if ( bitTotal > 8.7 * sortBurst.max2 )
        return;
    if ( bitTotal < 7. * sortBurst.max2 )
        return;
    cBits[0] = cBits[1] = 0;
	pBit = pFrame+2;
	nBit = 0;
    for (;;)
    {
        float burst = pBit[0] + pBit[1];
        if ( burst * 1.6 > sortBurst.max2 )
        {
            if ( pBit+1 >= pFrameEnd )
            {
                if ( nBit != 8 )
                    return;
                if ( pBit[0] * 2.1 > sortBurst.max2 )
    			    cBits[nBit>>3] |= 1 << (nBit & 7);
                break;
            }
            if ( pBit[0] > pBit[1] )
    			cBits[nBit>>3] |= 1 << (nBit & 7);
            pBit += 2;
        }
        else
        {
            pBit += 2;
            burst += pBit[0];
            if ( pBit+1 >= pFrameEnd )
            {
                if ( nBit != 8 )
                    return;
                if ( burst *2.1 < sortBurst.max2 )
                    return;
                if ( burst > sortBurst.max2 )
                    return;
  			    cBits[nBit>>3] |= 1 << (nBit & 7);
                break;
            }
            burst += pBit[1];
            if (   burst *1.3 < sortBurst.max2
                || burst *.8 > sortBurst.max2
                || burst *.5 < pBit[1] )
            {
                return;
            }
    		cBits[nBit>>3] |= 1 << (nBit & 7);
            pBit += 2;
        }
        if ( ++nBit == 9 )
        {
            return;
        }
    }
    int cmd = getLsb(0,2);
    int dev = getLsb(2,3);
    if ( ( (cmd*4+dev+3) & 15 ) == getLsb(5,4) )
    {
	    strcpy(pProtocol, "Somfy");
	    *pOBC = cmd;
        *pDevice = dev;
    }

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
cmpl $0xa, 0x48(%rax)
jl 0x8694
movq -0x28(%rbp), %rax
cmpl $0x13, 0x48(%rax)
jle 0x8699
jmp 0x8b30
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movss (%rcx), %xmm0
movq 0x38(%rax), %rcx
addss 0x4(%rcx), %xmm0
movss %xmm0, -0xc(%rbp)
movss -0xc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movss 0x1e0(%rax), %xmm0
cvtss2sd %xmm0, %xmm2
movsd 0x11c48(%rip), %xmm0    # 0x1a318
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
ja 0x86ef
movq -0x28(%rbp), %rax
movss 0x1dc(%rax), %xmm0
movq 0x40(%rax), %rax
ucomiss (%rax), %xmm0
jbe 0x86f4
jmp 0x8b30
movq -0x28(%rbp), %rax
movss 0x98(%rax), %xmm0
subss -0xc(%rbp), %xmm0
movss %xmm0, -0x10(%rbp)
movss -0x10(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss 0x1e0(%rax), %xmm1
cvtss2sd %xmm1, %xmm2
movsd 0x11bf9(%rip), %xmm1    # 0x1a320
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x8736
jmp 0x8b30
movq -0x28(%rbp), %rax
movss -0x10(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movss 0x1e0(%rax), %xmm0
cvtss2sd %xmm0, %xmm2
movsd 0x11bd1(%rip), %xmm0    # 0x1a328
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x8766
jmp 0x8b30
movq -0x28(%rbp), %rax
movb $0x0, 0xa1(%rax)
movb $0x0, 0xa0(%rax)
movq 0x38(%rax), %rcx
addq $0x8, %rcx
movq %rcx, 0xc8(%rax)
movl $0x0, 0xc0(%rax)
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rcx
movss (%rcx), %xmm0
movq 0xc8(%rax), %rcx
addss 0x4(%rcx), %xmm0
movss %xmm0, -0x14(%rbp)
movss -0x14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x11b56(%rip), %xmm1    # 0x1a318
mulsd %xmm1, %xmm0
movss 0x1e0(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x88d2
movq -0x28(%rbp), %rcx
movq 0xc8(%rcx), %rax
addq $0x4, %rax
cmpq 0x40(%rcx), %rax
jb 0x886a
movq -0x28(%rbp), %rax
cmpl $0x8, 0xc0(%rax)
je 0x8803
jmp 0x8b30
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rcx
movss (%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x11b22(%rip), %xmm1    # 0x1a340
mulsd %xmm1, %xmm0
movss 0x1e0(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x8865
movq -0x28(%rbp), %rax
movl 0xc0(%rax), %ecx
andl $0x7, %ecx
movl $0x1, %esi
shll %cl, %esi
movl 0xc0(%rax), %ecx
sarl $0x3, %ecx
movslq %ecx, %rcx
movzbl 0xa0(%rax,%rcx), %edx
orl %esi, %edx
movb %dl, 0xa0(%rax,%rcx)
jmp 0x8aa6
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rcx
movss (%rcx), %xmm0
movq 0xc8(%rax), %rax
ucomiss 0x4(%rax), %xmm0
jbe 0x88b7
movq -0x28(%rbp), %rax
movl 0xc0(%rax), %ecx
andl $0x7, %ecx
movl $0x1, %esi
shll %cl, %esi
movl 0xc0(%rax), %ecx
sarl $0x3, %ecx
movslq %ecx, %rcx
movzbl 0xa0(%rax,%rcx), %edx
orl %esi, %edx
movb %dl, 0xa0(%rax,%rcx)
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rcx
addq $0x8, %rcx
movq %rcx, 0xc8(%rax)
jmp 0x8a84
movq -0x28(%rbp), %rcx
movq 0xc8(%rcx), %rax
addq $0x8, %rax
movq %rax, 0xc8(%rcx)
movq 0xc8(%rcx), %rax
movss (%rax), %xmm0
addss -0x14(%rbp), %xmm0
movss %xmm0, -0x14(%rbp)
movq 0xc8(%rcx), %rax
addq $0x4, %rax
cmpq 0x40(%rcx), %rax
jb 0x89a1
movq -0x28(%rbp), %rax
cmpl $0x8, 0xc0(%rax)
je 0x8924
jmp 0x8b30
movq -0x28(%rbp), %rax
movss -0x14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x11a07(%rip), %xmm0    # 0x1a340
mulsd %xmm0, %xmm1
movss 0x1e0(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x8954
jmp 0x8b30
movq -0x28(%rbp), %rax
movss -0x14(%rbp), %xmm0
ucomiss 0x1e0(%rax), %xmm0
jbe 0x896b
jmp 0x8b30
movq -0x28(%rbp), %rax
movl 0xc0(%rax), %ecx
andl $0x7, %ecx
movl $0x1, %esi
shll %cl, %esi
movl 0xc0(%rax), %ecx
sarl $0x3, %ecx
movslq %ecx, %rcx
movzbl 0xa0(%rax,%rcx), %edx
orl %esi, %edx
movb %dl, 0xa0(%rax,%rcx)
jmp 0x8aa6
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rcx
movss 0x4(%rcx), %xmm0
addss -0x14(%rbp), %xmm0
movss %xmm0, -0x14(%rbp)
movss -0x14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x11964(%rip), %xmm0    # 0x1a330
mulsd %xmm0, %xmm1
movss 0x1e0(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
ucomisd %xmm1, %xmm0
ja 0x8a3c
movq -0x28(%rbp), %rax
movss -0x14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x11941(%rip), %xmm1    # 0x1a338
mulsd %xmm1, %xmm0
movss 0x1e0(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
ja 0x8a3c
movq -0x28(%rbp), %rax
movss -0x14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x1179e(%rip), %xmm0    # 0x1a1c0
mulsd %xmm0, %xmm1
movq 0xc8(%rax), %rax
movss 0x4(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x8a41
jmp 0x8b30
movq -0x28(%rbp), %rax
movl 0xc0(%rax), %ecx
andl $0x7, %ecx
movl $0x1, %esi
shll %cl, %esi
movl 0xc0(%rax), %ecx
sarl $0x3, %ecx
movslq %ecx, %rcx
movzbl 0xa0(%rax,%rcx), %edx
orl %esi, %edx
movb %dl, 0xa0(%rax,%rcx)
movq 0xc8(%rax), %rcx
addq $0x8, %rcx
movq %rcx, 0xc8(%rax)
movq -0x28(%rbp), %rcx
movl 0xc0(%rcx), %eax
addl $0x1, %eax
movl %eax, 0xc0(%rcx)
cmpl $0x9, %eax
jne 0x8aa1
jmp 0x8b30
jmp 0x8791
movq -0x28(%rbp), %rdi
xorl %esi, %esi
movl $0x2, %edx
callq 0x16030
movq -0x28(%rbp), %rdi
movl %eax, -0x18(%rbp)
movl $0x2, %esi
movl $0x3, %edx
callq 0x16030
movq -0x28(%rbp), %rdi
movl %eax, -0x1c(%rbp)
movl -0x18(%rbp), %eax
shll $0x2, %eax
addl -0x1c(%rbp), %eax
addl $0x3, %eax
andl $0xf, %eax
movl %eax, -0x2c(%rbp)
movl $0x5, %esi
movl $0x4, %edx
callq 0x16030
movl %eax, %ecx
movl -0x2c(%rbp), %eax
cmpl %ecx, %eax
jne 0x8b30
movq -0x28(%rbp), %rax
movq 0x148(%rax), %rdi
leaq 0x124f0(%rip), %rsi     # 0x1afff
callq 0x2120
movq -0x28(%rbp), %rax
movl -0x18(%rbp), %edx
movq 0x170(%rax), %rcx
movl %edx, (%rcx)
movl -0x1c(%rbp), %ecx
movq 0x160(%rax), %rax
movl %ecx, (%rax)
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)