-
Notifications
You must be signed in to change notification settings - Fork 0
/
meanings.module.js
117 lines (116 loc) · 4.8 KB
/
meanings.module.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
export const meanings = {
430: "GetInfo (about node)",
434: "GetTransportStatistics",
435: "ExecuteCommand",
7509: "Heartbeat",
7510: "List (ports)",
384: "Access (register)",
385: "List (registers)",
8184: "Record (diagnostic)",
405: "GetInfo (about a file)",
406: "List (files)",
407: "Modify (a file)",
408: "Read (a file)",
409: "Write (a file)",
8165: "NodeIDAllocationData.2.0",
8166: "NodeIDAllocationData.1.0",
390: "AppendEntries (to a pnp cluster)",
391: "RequestVote ( in a pnp cluster)",
8164: "Discovery (in a pnp cluster)",
510: "GetSynchronizationMasterInfo (time)",
7168: "Synchronization (time)",
500: "HandleIncomingPacket (udp)",
8174: "OutgoingPacket (udp)",
}
export function getLinkInfo(subject_id, node_id, yukon_state) {
let infos = [];
for (const avatar of yukon_state.current_avatars) {
if (avatar.node_id === node_id || !node_id) {
const registersKeys = Object.keys(avatar.registers_values);
for (let j = 0; j < registersKeys.length; j++) {
const register_name = registersKeys[j];
const register_name_split = register_name.split(".");
const link_name = register_name_split[register_name_split.length - 2];
const value = avatar.registers_values[register_name];
if (parseInt(value) === subject_id && register_name.endsWith(".id")) {
const datatype = registersKeys.find((a) => a.endsWith(link_name + ".type"));
infos.push({ name: link_name, type: avatar.registers_values[datatype] });
}
}
}
}
return Array.from(new Set(infos));
}
export function getRelatedLinks(port, port_type, yukon_state) {
let links = [];
for (const avatar of yukon_state.current_avatars) {
const registersKeys = Object.keys(avatar.registers_values);
for (let j = 0; j < registersKeys.length; j++) {
const register_name = registersKeys[j];
const regex = /uavcan\.(pub|sub|cln|srv)\.(.+?)\.id/;
// Use regex to extract the first and second ground, first group is link_type and second group is link_name from register_name
const results = register_name.match(regex);
if(!results) continue;
const link_type = results[1];
const link_name = results[2];
const value = avatar.registers_values[register_name];
if (parseInt(value) === parseInt(port) && register_name.endsWith(".id")) {
if((port_type === "pub" || port_type === "sub") && (link_type === "cln" || link_type === "srv")) continue;
const datatype_key = registersKeys.find((a) => a.endsWith(link_name + ".type"));
const datatype = avatar.registers_values[datatype_key];
links.push({ name: link_name, node_id: avatar.node_id, "port": port, type: link_type, "register_name": register_name, "datatype": datatype });
}
}
}
return Array.from(new Set(links));
}
export function decodeTelegaVSSC(vssc) {
const high_number = vssc / 16;
const low_number = vssc % 16;
if (low_number !== 0) {
if(high_number === 0) {
return "Fault in Standby, fault code: " + low_number;
} else if (high_number == 1) {
// self test
return "Fault in Self test, fault code: " + low_number;
} else if (high_number == 2) {
return "Fault in Motor ID, fault code: " + low_number;
} else if (high_number == 5) {
// drive
if(low_number === 1) {
return "Torque control mode";
} else if(low_number === 2) {
return "Voltage control mode";
} else if(low_number === 3) {
return "Velocity control mode";
} else if(low_number === 9) {
// Ratiometric torque control mode
return "Ratiometric torque control mode";
} else if (low_number === 10) {
// Ratiometric voltage control mode
return "Ratiometric voltage control mode";
} else {
return "Fault in Drive, fault code: " + low_number;
}
} else if (high_number == 7) {
// servo
return "Fault in Servo, fault code: " + low_number;
}
} else {
if (high_number === 0) {
return "Standby";
} else if (high_number == 1) {
// self test
return "Self test";
} else if (high_number == 2) {
return "Motor ID";
} else if (high_number == 5) {
// drive
return "Drive";
} else if (high_number == 7) {
// servo
return "Servo";
}
}
return "Unknown code";
}