|
23 | 23 |
|
24 | 24 | function GPS(board, rx, tx) { |
25 | 25 | Module.call(this); |
26 | | - |
27 | 26 | this._type = 'GPS'; |
28 | 27 | this._board = board; |
29 | 28 | this._rx = rx; |
30 | 29 | this._tx = tx; |
31 | 30 | this._longitude = null; |
32 | 31 | this._latitude = null; |
| 32 | + this._date = null; |
33 | 33 | this._time = null; |
34 | 34 | this._lastRecv = null; |
35 | 35 | this._readTimer = null; |
36 | 36 | this._readCallback = function () {}; |
37 | | - |
38 | 37 | this._board.on(BoardEvent.BEFOREDISCONNECT, this.stopRead.bind(this)); |
39 | 38 | this._messageHandler = onMessage.bind(this); |
40 | 39 | this._board.on(BoardEvent.ERROR, this.stopRead.bind(this)); |
| 40 | + board.send([0xF0, 0x04, 0x0C, 0x0 /*init*/ , rx, tx, 0xF7]); |
41 | 41 | } |
42 | 42 |
|
43 | 43 | function onMessage(event) { |
|
50 | 50 | } |
51 | 51 | } |
52 | 52 |
|
| 53 | + function toDateTime(date, time) { |
| 54 | + var t = Date.parse(date + ' ' + time) + 8 * 60 * 60 * 1000; //GMT+8 |
| 55 | + var date = new Date(t); |
| 56 | + var hours = date.getHours(); |
| 57 | + var minutes = "0" + date.getMinutes(); |
| 58 | + var seconds = "0" + date.getSeconds(); |
| 59 | + var time = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2); |
| 60 | + var mm = date.getMonth() + 1; |
| 61 | + var dd = "0" + date.getDate(); |
| 62 | + var yyyy = date.getFullYear(); |
| 63 | + var date = mm + '/' + dd.substr(-2) + '/' + yyyy; |
| 64 | + return [date, time]; |
| 65 | + } |
| 66 | + |
53 | 67 | function processGPSData(self, data) { |
54 | 68 | var str = ''; |
55 | | - for (var i = 4; i < data.length; i++) { |
| 69 | + for (var i = 3; i < data.length; i++) { |
56 | 70 | str += String.fromCharCode(data[i]); |
57 | 71 | } |
58 | 72 | str = str.split(' '); |
59 | 73 | var location = str[0].split(','); |
60 | 74 | self._lastRecv = Date.now(); |
61 | 75 | self._longitude = location[0]; |
62 | 76 | self._latitude = location[1]; |
63 | | - self._time = str[1]; |
64 | | - self.emit(GPSEvent.READ, location[0], location[1], str[1]); |
| 77 | + var date_time = toDateTime(str[1], str[2]); |
| 78 | + self._date = date_time[0]; |
| 79 | + self._time = date_time[1]; |
| 80 | + self.emit(GPSEvent.READ, location[0], location[1], date_time[0], date_time[1]); |
65 | 81 | } |
66 | 82 |
|
67 | 83 | GPS.prototype = proto = Object.create(Module.prototype, { |
|
78 | 94 | return this._latitude; |
79 | 95 | } |
80 | 96 | }, |
| 97 | + date: { |
| 98 | + get: function () { |
| 99 | + return this._date; |
| 100 | + } |
| 101 | + }, |
81 | 102 | time: { |
82 | 103 | get: function () { |
83 | 104 | return this._time; |
|
92 | 113 | self.stopRead(); |
93 | 114 |
|
94 | 115 | if (typeof callback === 'function') { |
95 | | - self._readCallback = function (longitude, latitude, time) { |
96 | | - self._location = location; |
| 116 | + self._readCallback = function (longitude, latitude, date, time) { |
| 117 | + self._date = date; |
97 | 118 | self._time = time; |
98 | 119 | callback({ |
99 | 120 | longitude: longitude, |
100 | 121 | latitude: latitude, |
| 122 | + date: date, |
101 | 123 | time: time |
102 | 124 | }); |
103 | 125 | }; |
104 | 126 | self._board.on(BoardEvent.SYSEX_MESSAGE, self._messageHandler); |
105 | 127 | self.on(GPSEvent.READ, self._readCallback); |
106 | 128 |
|
107 | 129 | timer = function () { |
108 | | - self._board.sendSysex(GPS_MESSAGE[0], [GPS_MESSAGE[1]]); |
| 130 | + self._board.sendSysex(GPS_MESSAGE[0], [GPS_MESSAGE[1], 1]); |
109 | 131 | if (interval) { |
110 | 132 | interval = Math.max(interval, MIN_READ_INTERVAL); |
111 | 133 | if (self._lastRecv === null || Date.now() - self._lastRecv < 5 * interval) { |
|
123 | 145 | } else { |
124 | 146 | return new Promise(function (resolve, reject) { |
125 | 147 | self.read(function (data) { |
126 | | - self._location = data.location; |
| 148 | + self._longitude = data.longitude; |
| 149 | + self._latitude = data.latitude; |
127 | 150 | self._time = data.time; |
| 151 | + self._date = data.date; |
128 | 152 | setTimeout(function () { |
129 | 153 | resolve(data); |
130 | 154 | }, MIN_RESPONSE_TIME); |
|
0 commit comments