Upgrade hope to 3.8.1
[erlang-x-plane-data.git] / src / x_plane_data.erl
CommitLineData
cfe4f77b
SK
1-module(x_plane_data).
2
3-include("x_plane_datum_defaults.hrl").
4
5-export_type(
6 [ t/0
7 ]).
8
9-export(
10 [ of_bin/1
11 ]).
12
13-type parsing_error() ::
14 packet_unrecognized
15 | packet_length_invalid
16 | x_plane_datum:parsing_error()
17 .
18
19-type t() ::
20 [x_plane_datum:t()].
21
22-define(BYTE_SIZE_OF_EACH_BLOCK, 36).
23
24-spec of_bin(binary()) ->
25 hope_result:t(t(), parsing_error()).
26of_bin(<<Packet/binary>>) ->
27 of_bin(Packet, ?DEFAULT_MAX_INDEX).
28
29-spec of_bin(binary(), non_neg_integer()) ->
30 hope_result:t(t(), parsing_error()).
31of_bin(<<"DATA", _PacketIndexByte:1/bytes, ContiguousBlocks/binary>>, MaxIndex) ->
0e7a4f60 32 % Packet index byte seems to be changing from X-Plane version to version.
cfe4f77b
SK
33 % What is it's meaning?
34 if byte_size(ContiguousBlocks) rem ?BYTE_SIZE_OF_EACH_BLOCK =:= 0 ->
35 Blocks = blocks_split(ContiguousBlocks),
36 ParseBlock = fun (B) -> x_plane_datum:of_bin(B, MaxIndex) end,
37 hope_list:map_result(Blocks, ParseBlock)
38 ; true ->
39 {error, packet_length_invalid}
40 end;
41of_bin(<<_/binary>>, _) ->
42 {error, packet_unrecognized}.
43
44-spec blocks_split(binary()) ->
45 [binary()].
46blocks_split(<<>>) ->
47 [];
48blocks_split(<<Block:?BYTE_SIZE_OF_EACH_BLOCK/bytes, Blocks/binary>>) ->
49 [Block | blocks_split(Blocks)].
This page took 0.03315 seconds and 4 git commands to generate.