|
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