summaryrefslogtreecommitdiff
path: root/src/pbx_escape.erl
blob: 9b2fad4af991e4d68aaf6e7b2031afdc52c6df23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
-module(pbx_escape).

-export([decode/1, encode/1, opcode/0]).
-export([privateData/1, device/1, pbxType/1]).

-include("opcodes.hrl").
-include("CSTA-escape-service.hrl").
-include("CSTA-device-identifiers.hrl").
-include("KME-specific-types.hrl").

opcode() ->
	?ESCAPE.

decode(Data) ->
	'CSTA-escape-service':decode('EscapeArgument', Data).

encode({lines, Device}) ->
	'CSTA-escape-service':encode('EscapeArgument', #'EscapeArgument'{
		privateData = {private, {kmeSystemData, {getSystemData, {request,
		{deviceList, {category, {standardDevice, Device}}}}}}}});
encode({deviceData, Device}) ->
	'CSTA-escape-service':encode('EscapeArgument', #'EscapeArgument'{
		privateData = {private, {kmeSystemData, {getSystemData, {request,
		{deviceData, #'KmeGetSystemDataReq_deviceData'{
		device = #'DeviceID'{deviceIdentifier = Device},
		sysData = {fcoKey, []}}}}}}}});
encode({deviceBasic, Device}) ->
	'CSTA-escape-service':encode('EscapeArgument', #'EscapeArgument'{
		privateData = {private, {kmeSystemData, {systemDataChanged,
		{deviceBasicInfo, #'DeviceID'{deviceIdentifier = Device}}}}}});
encode({pbxType}) ->
	'CSTA-escape-service':encode('EscapeArgument', #'EscapeArgument'{
		privateData = {private, {kmeSystemData, {getSystemData, {request,
		{systemData, pbxType}}}}}}).

privateData({ok, #'EscapeArgument'{privateData = Data}}) ->
	private(Data).

private({private, {kmeSystemData, Data}}) ->
	List = linked(Data),
	%Dev = lists:map(fun device/1, List),
	io:format("kmeSystemData ~p~n", [List]).

linked({systemDataLinkedReply, #'KmeSystemDataLinkedReply'{lastSegment = false, sysData = Data}}) ->
	stateEntry(Data);
linked({systemDataLinkedReply, #'KmeSystemDataLinkedReply'{lastSegment = true, sysData = Data}}) ->
	stateEntry(Data).

stateEntry(#'KmeGetSystemDataRsp'{deviceList = List}) when List =/= asn1_NOVALUE ->
	lists:filter(fun stateEntryFilter/1, List);
stateEntry(#'KmeGetSystemDataRsp'{pbxType = Type}) when Type =/= asn1_NOVALUE ->
	pbxType(Type).

stateEntryFilter(#'KmeDeviceStateEntry'{status = ins}) -> true;
stateEntryFilter(#'KmeDeviceStateEntry'{status = ous}) -> false.

device(#'KmeDeviceStateEntry'{device = #'DeviceID'{deviceIdentifier = Device}}) -> Device.

pbxType(Type) ->
	proplists:get_value(Type, [{0, tda100}, {1, tda200}, {2, tda30},
				   {3, tda50}, {5, tda15}, {6, tda600},
				   {7, tde100}, {8, tde200}, {9, tde600},
				   {10, ncp500}, {11, ncp1000}, {12, ncp3000}]).