yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
proto_converter.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EMU_PROTO_CONVERTER_H_
2#define YAZE_APP_EMU_PROTO_CONVERTER_H_
3
4#ifdef YAZE_WITH_GRPC
5
7#include "protos/emulator_service.pb.h"
8
9namespace yaze {
10namespace emu {
11
12// =============================================================================
13// Proto -> Native conversions
14// =============================================================================
15
16inline InputButton FromProtoButton(agent::Button button) {
17 switch (button) {
18 case agent::A: return InputButton::kA;
19 case agent::B: return InputButton::kB;
20 case agent::X: return InputButton::kX;
21 case agent::Y: return InputButton::kY;
22 case agent::L: return InputButton::kL;
23 case agent::R: return InputButton::kR;
24 case agent::SELECT: return InputButton::kSelect;
25 case agent::START: return InputButton::kStart;
26 case agent::UP: return InputButton::kUp;
27 case agent::DOWN: return InputButton::kDown;
28 case agent::LEFT: return InputButton::kLeft;
29 case agent::RIGHT: return InputButton::kRight;
30 default: return InputButton::kUnspecified;
31 }
32}
33
34inline BreakpointKind FromProtoBreakpointType(agent::BreakpointType type) {
35 switch (type) {
36 case agent::EXECUTE: return BreakpointKind::kExecute;
37 case agent::READ: return BreakpointKind::kRead;
38 case agent::WRITE: return BreakpointKind::kWrite;
39 case agent::ACCESS: return BreakpointKind::kAccess;
40 case agent::CONDITIONAL: return BreakpointKind::kConditional;
41 default: return BreakpointKind::kUnspecified;
42 }
43}
44
45inline CpuKind FromProtoCpuType(agent::CpuType cpu) {
46 switch (cpu) {
47 case agent::CPU_65816: return CpuKind::k65816;
48 case agent::SPC700: return CpuKind::kSpc700;
49 default: return CpuKind::kUnspecified;
50 }
51}
52
53// =============================================================================
54// Native -> Proto conversions
55// =============================================================================
56
57inline agent::Button ToProtoButton(InputButton button) {
58 switch (button) {
59 case InputButton::kA: return agent::A;
60 case InputButton::kB: return agent::B;
61 case InputButton::kX: return agent::X;
62 case InputButton::kY: return agent::Y;
63 case InputButton::kL: return agent::L;
64 case InputButton::kR: return agent::R;
65 case InputButton::kSelect: return agent::SELECT;
66 case InputButton::kStart: return agent::START;
67 case InputButton::kUp: return agent::UP;
68 case InputButton::kDown: return agent::DOWN;
69 case InputButton::kLeft: return agent::LEFT;
70 case InputButton::kRight: return agent::RIGHT;
71 default: return agent::BUTTON_UNSPECIFIED;
72 }
73}
74
75inline agent::BreakpointType ToProtoBreakpointType(BreakpointKind kind) {
76 switch (kind) {
77 case BreakpointKind::kExecute: return agent::EXECUTE;
78 case BreakpointKind::kRead: return agent::READ;
79 case BreakpointKind::kWrite: return agent::WRITE;
80 case BreakpointKind::kAccess: return agent::ACCESS;
81 case BreakpointKind::kConditional: return agent::CONDITIONAL;
82 default: return agent::BREAKPOINT_TYPE_UNSPECIFIED;
83 }
84}
85
86inline agent::CpuType ToProtoCpuType(CpuKind kind) {
87 switch (kind) {
88 case CpuKind::k65816: return agent::CPU_65816;
89 case CpuKind::kSpc700: return agent::SPC700;
90 default: return agent::CPU_TYPE_UNSPECIFIED;
91 }
92}
93
94// =============================================================================
95// Struct conversions
96// =============================================================================
97
98inline void ToProtoCpuState(const CpuStateSnapshot& src,
99 agent::CPUState* dst) {
100 dst->set_a(src.a);
101 dst->set_x(src.x);
102 dst->set_y(src.y);
103 dst->set_sp(src.sp);
104 dst->set_pc(src.pc);
105 dst->set_db(src.db);
106 dst->set_pb(src.pb);
107 dst->set_d(src.d);
108 dst->set_status(src.status);
109 dst->set_flag_n(src.flag_n);
110 dst->set_flag_v(src.flag_v);
111 dst->set_flag_z(src.flag_z);
112 dst->set_flag_c(src.flag_c);
113 dst->set_cycles(src.cycles);
114}
115
116inline void ToProtoBreakpointInfo(const BreakpointSnapshot& src,
117 agent::BreakpointInfo* dst) {
118 dst->set_id(src.id);
119 dst->set_address(src.address);
120 dst->set_type(ToProtoBreakpointType(src.kind));
121 dst->set_cpu(ToProtoCpuType(src.cpu));
122 dst->set_enabled(src.enabled);
123 dst->set_condition(src.condition);
124 dst->set_description(src.description);
125 dst->set_hit_count(src.hit_count);
126}
127
128inline void ToProtoBreakpointHitResponse(
129 const BreakpointHitResult& src,
130 agent::BreakpointHitResponse* dst) {
131 dst->set_hit(src.hit);
132 ToProtoBreakpointInfo(src.breakpoint, dst->mutable_breakpoint());
133 ToProtoCpuState(src.cpu_state, dst->mutable_cpu_state());
134}
135
136inline void ToProtoGameState(const GameSnapshot& src,
137 agent::GameStateResponse* dst) {
138 dst->set_game_mode(src.game_mode);
139 dst->set_link_state(src.link_state);
140 dst->set_link_pos_x(src.link_pos_x);
141 dst->set_link_pos_y(src.link_pos_y);
142 dst->set_link_health(src.link_health);
143 if (!src.screenshot_png.empty()) {
144 dst->set_screenshot_png(src.screenshot_png.data(),
145 src.screenshot_png.size());
146 }
147}
148
149} // namespace emu
150} // namespace yaze
151
152#endif // YAZE_WITH_GRPC
153
154#endif // YAZE_APP_EMU_PROTO_CONVERTER_H_