Completed
Push — master ( 67eeeb...b488c0 )
by Chris
04:41
created

FrameAddressEncoder::encodeFlags()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 6
ccs 4
cts 4
cp 1
crap 1
rs 9.4285
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace DaveRandom\LibLifxLan\Encoding;
4
5
use DaveRandom\LibLifxLan\Header\FrameAddress;
6
7
final class FrameAddressEncoder
8
{
9 3
    private function encodeTarget(FrameAddress $frameAddress): string
10
    {
11 3
        $target = $frameAddress->getTarget();
12
13 3
        return \pack(
14 3
            'C6',
15 3
            $target->getOctet1(),
16 3
            $target->getOctet2(),
17 3
            $target->getOctet3(),
18 3
            $target->getOctet4(),
19 3
            $target->getOctet5(),
20 3
            $target->getOctet6()
21 3
        ) . "\x00\x00";
22
    }
23
24 3
    private function encodeFlags(FrameAddress $frameAddress): string
25
    {
26 3
        $ackRequired = ((int)$frameAddress->isAckRequired()) << 1;
27 3
        $responseRequired = (int)$frameAddress->isResponseRequired();
28
29 3
        return "\x00\x00\x00\x00\x00\x00" . \chr($ackRequired | $responseRequired);
30
    }
31
32
    /**
33
     * @param FrameAddress $frameAddress
34
     * @return string
35
     */
36 3
    private function encodeSequenceNo(FrameAddress $frameAddress): string
37
    {
38 3
        return \chr($frameAddress->getSequenceNo());
39
    }
40
41
    /**
42
     * @param FrameAddress $frameAddress
43
     * @return string
44
     */
45 3
    public function encodeFrameAddress(FrameAddress $frameAddress): string
46
    {
47 3
        return $this->encodeTarget($frameAddress)
48 3
            . $this->encodeFlags($frameAddress)
49 3
            . $this->encodeSequenceNo($frameAddress);
50
    }
51
}
52