Просмотр исходного кода

base-station: Return the local time for ValueType::Time requests.

Mathias Gottschlag 5 лет назад
Родитель
Сommit
9f462d41b3

+ 49
- 2
base-station/software/Cargo.lock Просмотреть файл

@@ -26,10 +26,17 @@ dependencies = [
26 26
  "winapi 0.3.8",
27 27
 ]
28 28
 
29
+[[package]]
30
+name = "autocfg"
31
+version = "1.0.0"
32
+source = "registry+https://github.com/rust-lang/crates.io-index"
33
+checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
34
+
29 35
 [[package]]
30 36
 name = "base-station"
31 37
 version = "0.1.0"
32 38
 dependencies = [
39
+ "chrono",
33 40
  "embedded-hal",
34 41
  "embedded-nrf24l01",
35 42
  "env_logger",
@@ -92,6 +99,17 @@ version = "0.1.10"
92 99
 source = "registry+https://github.com/rust-lang/crates.io-index"
93 100
 checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
94 101
 
102
+[[package]]
103
+name = "chrono"
104
+version = "0.4.11"
105
+source = "registry+https://github.com/rust-lang/crates.io-index"
106
+checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
107
+dependencies = [
108
+ "num-integer",
109
+ "num-traits",
110
+ "time",
111
+]
112
+
95 113
 [[package]]
96 114
 name = "crc16"
97 115
 version = "0.4.0"
@@ -338,9 +356,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
338 356
 
339 357
 [[package]]
340 358
 name = "libc"
341
-version = "0.2.68"
359
+version = "0.2.70"
342 360
 source = "registry+https://github.com/rust-lang/crates.io-index"
343
-checksum = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0"
361
+checksum = "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f"
344 362
 
345 363
 [[package]]
346 364
 name = "linux-embedded-hal"
@@ -479,6 +497,25 @@ dependencies = [
479 497
  "void",
480 498
 ]
481 499
 
500
+[[package]]
501
+name = "num-integer"
502
+version = "0.1.42"
503
+source = "registry+https://github.com/rust-lang/crates.io-index"
504
+checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
505
+dependencies = [
506
+ "autocfg",
507
+ "num-traits",
508
+]
509
+
510
+[[package]]
511
+name = "num-traits"
512
+version = "0.2.11"
513
+source = "registry+https://github.com/rust-lang/crates.io-index"
514
+checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
515
+dependencies = [
516
+ "autocfg",
517
+]
518
+
482 519
 [[package]]
483 520
 name = "num_cpus"
484 521
 version = "1.13.0"
@@ -796,6 +833,16 @@ dependencies = [
796 833
  "lazy_static",
797 834
 ]
798 835
 
836
+[[package]]
837
+name = "time"
838
+version = "0.1.43"
839
+source = "registry+https://github.com/rust-lang/crates.io-index"
840
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
841
+dependencies = [
842
+ "libc",
843
+ "winapi 0.3.8",
844
+]
845
+
799 846
 [[package]]
800 847
 name = "tokio"
801 848
 version = "0.2.20"

+ 1
- 0
base-station/software/Cargo.toml Просмотреть файл

@@ -22,6 +22,7 @@ futures = "0.3.5"
22 22
 futures-util = "0.3.5"
23 23
 nb = "0.1.2"
24 24
 gpio-cdev = { git = "https://github.com/mgottschlag/gpio-cdev", branch = "tokio", features = [ "async-tokio" ] }
25
+chrono = "0.4.11"
25 26
 
26 27
 [patch.crates-io]
27 28
 sysfs_gpio = { git = "https://github.com/mgottschlag/rust-sysfs-gpio", branch = "new-futures" }

+ 9
- 2
base-station/software/src/main.rs Просмотреть файл

@@ -6,8 +6,9 @@ use std::env;
6 6
 use std::sync::Arc;
7 7
 use std::time::{Duration, Instant};
8 8
 
9
+use chrono::offset::Local;
9 10
 use log::{error, info};
10
-use protocol::{GetValues, Packet, Report, Value, Values};
11
+use protocol::{GetValues, Packet, Report, Value, ValueType, Values};
11 12
 use rand::{rngs::ThreadRng, Rng};
12 13
 use tokio::sync::Mutex;
13 14
 use tokio::time::delay_for;
@@ -153,7 +154,13 @@ impl Application {
153 154
             values: [Value::Invalid; 8],
154 155
         };
155 156
         for i in 0..count {
156
-            match self.current.get(request.location, request.types_[i]) {
157
+            if request.types[i] == ValueType::Time {
158
+                response.values[response.count as usize] =
159
+                    Value::Time(Local::now().naive_local().timestamp() as u64);
160
+                response.count += 1;
161
+                continue;
162
+            }
163
+            match self.current.get(request.location, request.types[i]) {
157 164
                 Some(value) => {
158 165
                     // During deserialization, we made sure that count can never be larger than 7.
159 166
                     response.values[response.count as usize] = value;

Загрузка…
Отмена
Сохранить