1 // Copyright 2023 The Pigweed Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
5 // the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
13 // the License.
14
15 #include "pw_trace_tokenized/trace_service_pwpb.h"
16
17 #include "pw_chrono/system_clock.h"
18
19 namespace pw::trace {
20
TraceService(TokenizedTracer & tokenized_tracer,stream::Writer & trace_writer)21 TraceService::TraceService(TokenizedTracer& tokenized_tracer,
22 stream::Writer& trace_writer)
23 : BaseTraceService(tokenized_tracer, trace_writer) {}
24
Start(const proto::pwpb::StartRequest::Message &,proto::pwpb::StartResponse::Message &)25 Status TraceService::Start(
26 const proto::pwpb::StartRequest::Message& /*request*/,
27 proto::pwpb::StartResponse::Message& /*response*/) {
28 return BaseTraceService::Start();
29 }
30
Stop(const proto::pwpb::StopRequest::Message &,proto::pwpb::StopResponse::Message & response)31 Status TraceService::Stop(const proto::pwpb::StopRequest::Message& /*request*/,
32 proto::pwpb::StopResponse::Message& response) {
33 if (auto status = BaseTraceService::Stop(); status != pw::OkStatus()) {
34 return status;
35 }
36
37 response.file_id = transfer_id_;
38 return pw::OkStatus();
39 }
40
GetClockParameters(const proto::pwpb::ClockParametersRequest::Message &,proto::pwpb::ClockParametersResponse::Message & response)41 Status TraceService::GetClockParameters(
42 const proto::pwpb::ClockParametersRequest::Message& /*request*/,
43 proto::pwpb::ClockParametersResponse::Message& response) {
44 response.clock_parameters.tick_period_seconds_numerator =
45 PW_CHRONO_SYSTEM_CLOCK_PERIOD_SECONDS_NUMERATOR;
46 response.clock_parameters.tick_period_seconds_denominator =
47 PW_CHRONO_SYSTEM_CLOCK_PERIOD_SECONDS_DENOMINATOR;
48
49 switch (chrono::SystemClock::epoch) {
50 case chrono::Epoch::kUnknown:
51 response.clock_parameters.epoch_type =
52 chrono::pwpb::EpochType::Enum::kUnknown;
53 break;
54 case chrono::Epoch::kTimeSinceBoot:
55 response.clock_parameters.epoch_type =
56 chrono::pwpb::EpochType::Enum::kTimeSinceBoot;
57 break;
58 case chrono::Epoch::kUtcWallClock:
59 response.clock_parameters.epoch_type =
60 chrono::pwpb::EpochType::Enum::kUtcWallClock;
61 break;
62 case chrono::Epoch::kGpsWallClock:
63 response.clock_parameters.epoch_type =
64 chrono::pwpb::EpochType::Enum::kGpsWallClock;
65 break;
66 case chrono::Epoch::kTaiWallClock:
67 response.clock_parameters.epoch_type =
68 chrono::pwpb::EpochType::Enum::kTaiWallClock;
69 break;
70 }
71
72 return pw::OkStatus();
73 }
74
75 } // namespace pw::trace
76