-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgpsd.php
54 lines (48 loc) · 1.93 KB
/
gpsd.php
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
<?php
/* Функции для работы с источником данных gpsd */
$dataSourceHumanName = 'gpsd'; //
$dataSourceConnectionObject = createSocketClient($dataSourceHost,$dataSourcePort); // Соединение с источником данных
function dataSourceConnect($dataSock){
/* Return array(deviceID) of devices that return data */
return connectToGPSD($dataSock); // по историческим причинам
} // end function connectToDataSource
function dataSourceClose($dataSock){
$msg = '?WATCH={"enable":false}'."\n";
$res = @socket_write($dataSock, $msg, strlen($msg));
@socket_close($dataSock);
return true;
} // end function dataSourceClose
function instrumentsDataDecode($buf){
/* Делает из полученного из сокета $buf данные в формате $instrumentsData, т.е. приводит их к формату
массива ответов gpsd в режиме ?WATCH={"enable":true,"json":true};, когда оно передаёт поток отдельных сообщений, типа:
Array
(
[class] => TPV
[device] => tcp://localhost:2222
[mode] => 3
[lat] => 60.069966667
[lon] => 23.522883333
[altHAE] => 0
[altMSL] => 0
[alt] => 0
[track] => 204.46
[magtrack] => 204.76
[magvar] => 8.7
[speed] => 2.932
[geoidSep] => 0
[eph] => 0
)
*/
$buf = explode("\n",$buf);
array_walk($buf,function (&$oneBuf){$oneBuf=json_decode($oneBuf,TRUE);});
//echo "gpsd instrumentsDataDecode "; print_r($buf); echo "\n";
return $buf;
} // end function instrumentsDataDecode
//function altReadData($dataSourceConnectionObject){
/* Функция альтернативного чтения данных, вызывается перед ожиданием сокетов socket_select
возвращает true если данные были получены
Может не быть.
*/
//return false;
//} // end function altReadData
?>