blob: a266ad656562737ae0c46555b0afb6d5f82dd95f [file] [log] [blame]
Brian Silverman4787a6e2018-10-06 16:00:54 -07001#include "motors/print/semihosting.h"
2
Austin Schuh7fe04492022-01-02 13:37:21 -08003#include "absl/types/span.h"
Philipp Schrader790cb542023-07-05 21:06:52 -07004
Brian Silverman4787a6e2018-10-06 16:00:54 -07005#include "motors/core/semihosting.h"
6
7namespace frc971 {
8namespace motors {
9
10::std::unique_ptr<PrintingImplementation> CreatePrinting(
11 const PrintingParameters & /*parameters*/) {
12 return ::std::unique_ptr<PrintingImplementation>(new SemihostingPrinting());
13}
14
15extern "C" int _write(const int /*file*/, char *const ptr, const int len) {
Austin Schuh7fe04492022-01-02 13:37:21 -080016 semihosting::Write operation{2 /* stderr */,
17 absl::Span<const char>(ptr, len)};
Brian Silverman4787a6e2018-10-06 16:00:54 -070018 return len - operation.Execute();
19}
20
Austin Schuh7fe04492022-01-02 13:37:21 -080021int SemihostingPrinting::WriteStdout(absl::Span<const char> buffer) {
Brian Silverman4787a6e2018-10-06 16:00:54 -070022 semihosting::Write operation{2 /* stderr */, buffer};
23 return buffer.size() - operation.Execute();
24}
25
26} // namespace motors
27} // namespace frc971