forked from IDI-Systems/acre2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfnc_setCurrentChannel.sqf
82 lines (71 loc) · 2.6 KB
/
fnc_setCurrentChannel.sqf
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "..\script_component.hpp"
/*
* Author: ACRE2Team
* SHORT DESCRIPTION
*
* Arguments:
* 0: ARGUMENT ONE <TYPE>
* 1: ARGUMENT TWO <TYPE>
*
* Return Value:
* RETURN VALUE <TYPE>
*
* Example:
* [ARGUMENTS] call acre_sys_sem70_fnc_setCurrentChannel
*
* Public: No
*/
/*
* This function sets the current channel
*
* Type of Event:
* Data
* Event:
* setCurrentChannel
* Event raised by:
* - Several functions
*
* Parsed parameters:
* 0: Radio ID
* 1: Event (-> "setCurrentChannel")
* 2: Eventdata (-> Number (New Channel))
* 3: Radiodata
* 4: Remote Call (-> false)
*
* Returned parameters:
* nothing
*/
params ["_radioId", "", "_eventData", "_radioData"];
TRACE_2("setCurrentChannel",_radioID,_eventData);
private _manualChannel = HASH_GET(_radioData,"manualChannelSelection");
TRACE_1("ManualChannel",_manualChannel);
if (_manualChannel isEqualTo 1) then {
private _channels = HASH_GET(_radioData,"channels");
private _channel = HASHLIST_SELECT(_channels,GVAR(manualChannel));
if (_eventData isEqualType []) then { // if event data comes from a setChannel-type API in the [MHzKnobPos,KHzKnobPos] format
private _newFreq = ((_eventData select 0) + 30) + ((_eventData select 1) * 25 / 1000);
HASH_SET(_channel,"frequencyTX",_newFreq);
HASH_SET(_channel,"frequencyRX",_newFreq);
TRACE_1("",_newFreq);
HASH_SET(_radioData,"MHzKnobPosition",(_eventData select 0));
HASH_SET(_radioData,"kHzKnobPosition",(_eventData select 1));
} else {
private _currentMHzFrequency = HASH_GET(_radioData,"MHzKnobPosition");
_currentMHzFrequency = _currentMHzFrequency + 30;
private _currentkHzFrequency = HASH_GET(_radioData,"kHzKnobPosition");
_currentkHzFrequency = _currentkHzFrequency * 25 / 1000;
private _newFreq = _currentMHzFrequency + _currentkHzFrequency;
HASH_SET(_channel,"frequencyTX",_newFreq);
HASH_SET(_channel,"frequencyRX",_newFreq);
TRACE_3("",_currentMHzFrequency,_currentkHzFrequency,_newFreq);
};
[_radioID,"setChannelData", [GVAR(manualChannel), _channel]] call EFUNC(sys_data,dataEvent);
HASH_SET(_radioData,"currentChannel",GVAR(manualChannel));
} else {
// First, we check how many channels are available in total
private _channelCount = count (HASH_GET(_radioData,"channels")) - 1;
// Then we define our upper and lower limits
// And write the new channel to the radioData hash
private _newChannel = (0 max _eventData) min _channelCount;
HASH_SET(_radioData,"currentChannel",_newChannel);
};