@aircast-4g/mavlink 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/cli-generate-decoders.d.ts +4 -0
  2. package/dist/cli-generate-decoders.d.ts.map +1 -0
  3. package/dist/cli-generate-decoders.js +201 -0
  4. package/dist/cli-generate-decoders.js.map +1 -0
  5. package/dist/decoders/ardupilotmega.ts +11939 -0
  6. package/dist/decoders/common.ts +9107 -0
  7. package/dist/decoders/minimal.ts +76 -0
  8. package/dist/generator/generator.d.ts +1 -0
  9. package/dist/generator/generator.d.ts.map +1 -1
  10. package/dist/generator/generator.js +51 -0
  11. package/dist/generator/generator.js.map +1 -1
  12. package/dist/generator/template-engine.d.ts +1 -0
  13. package/dist/generator/template-engine.d.ts.map +1 -1
  14. package/dist/generator/template-engine.js +50 -0
  15. package/dist/generator/template-engine.js.map +1 -1
  16. package/dist/parser/decoders/ardupilotmega-decoder.d.ts +14 -0
  17. package/dist/parser/decoders/ardupilotmega-decoder.d.ts.map +1 -0
  18. package/dist/parser/decoders/ardupilotmega-decoder.js +11929 -0
  19. package/dist/parser/decoders/ardupilotmega-decoder.js.map +1 -0
  20. package/dist/parser/decoders/common-decoder.d.ts +14 -0
  21. package/dist/parser/decoders/common-decoder.d.ts.map +1 -0
  22. package/dist/parser/decoders/common-decoder.js +9097 -0
  23. package/dist/parser/decoders/common-decoder.js.map +1 -0
  24. package/dist/parser/decoders/minimal-decoder.d.ts +14 -0
  25. package/dist/parser/decoders/minimal-decoder.d.ts.map +1 -0
  26. package/dist/parser/decoders/minimal-decoder.js +66 -0
  27. package/dist/parser/decoders/minimal-decoder.js.map +1 -0
  28. package/dist/parser/generated-decoders.d.ts +15 -0
  29. package/dist/parser/generated-decoders.d.ts.map +1 -0
  30. package/dist/parser/generated-decoders.js +11938 -0
  31. package/dist/parser/generated-decoders.js.map +1 -0
  32. package/dist/parser/mavlink-parser.d.ts.map +1 -1
  33. package/dist/parser/mavlink-parser.js +17 -6
  34. package/dist/parser/mavlink-parser.js.map +1 -1
  35. package/dist/parser/message-decoder.d.ts +26 -5
  36. package/dist/parser/message-decoder.d.ts.map +1 -1
  37. package/dist/parser/message-decoder.js +406 -224
  38. package/dist/parser/message-decoder.js.map +1 -1
  39. package/dist/parser/test-decoder.d.ts +2 -0
  40. package/dist/parser/test-decoder.d.ts.map +1 -0
  41. package/dist/parser/test-decoder.js +54 -0
  42. package/dist/parser/test-decoder.js.map +1 -0
  43. package/dist/parser/types.d.ts +1 -0
  44. package/dist/parser/types.d.ts.map +1 -1
  45. package/dist/parser/types.js.map +1 -1
  46. package/package.json +24 -25
  47. package/types/ardupilotmega/enums.d.ts +0 -2427
  48. package/types/ardupilotmega/enums.d.ts.map +0 -1
  49. package/types/ardupilotmega/enums.js +0 -4636
  50. package/types/ardupilotmega/enums.js.map +0 -1
  51. package/types/ardupilotmega/index.d.ts +0 -4
  52. package/types/ardupilotmega/index.d.ts.map +0 -1
  53. package/types/ardupilotmega/index.js +0 -22
  54. package/types/ardupilotmega/index.js.map +0 -1
  55. package/types/ardupilotmega/messages.d.ts +0 -3719
  56. package/types/ardupilotmega/messages.d.ts.map +0 -1
  57. package/types/ardupilotmega/messages.js +0 -1281
  58. package/types/ardupilotmega/messages.js.map +0 -1
  59. package/types/ardupilotmega/types.d.ts +0 -221
  60. package/types/ardupilotmega/types.d.ts.map +0 -1
  61. package/types/ardupilotmega/types.js +0 -5
  62. package/types/ardupilotmega/types.js.map +0 -1
  63. package/types/common/enums.d.ts +0 -1843
  64. package/types/common/enums.d.ts.map +0 -1
  65. package/types/common/enums.js +0 -3636
  66. package/types/common/enums.js.map +0 -1
  67. package/types/common/index.d.ts +0 -4
  68. package/types/common/index.d.ts.map +0 -1
  69. package/types/common/index.js +0 -21
  70. package/types/common/index.js.map +0 -1
  71. package/types/common/messages.d.ts +0 -2805
  72. package/types/common/messages.d.ts.map +0 -1
  73. package/types/common/messages.js +0 -920
  74. package/types/common/messages.js.map +0 -1
  75. package/types/common/types.d.ts +0 -157
  76. package/types/common/types.d.ts.map +0 -1
  77. package/types/common/types.js +0 -4
  78. package/types/common/types.js.map +0 -1
  79. package/types/minimal/enums.d.ts +0 -244
  80. package/types/minimal/enums.d.ts.map +0 -1
  81. package/types/minimal/enums.js +0 -496
  82. package/types/minimal/enums.js.map +0 -1
  83. package/types/minimal/index.d.ts +0 -4
  84. package/types/minimal/index.d.ts.map +0 -1
  85. package/types/minimal/index.js +0 -21
  86. package/types/minimal/index.js.map +0 -1
  87. package/types/minimal/messages.d.ts +0 -25
  88. package/types/minimal/messages.d.ts.map +0 -1
  89. package/types/minimal/messages.js +0 -12
  90. package/types/minimal/messages.js.map +0 -1
  91. package/types/minimal/types.d.ts +0 -14
  92. package/types/minimal/types.d.ts.map +0 -1
  93. package/types/minimal/types.js +0 -4
  94. package/types/minimal/types.js.map +0 -1
  95. package/types/paparazzi/enums.ts +0 -3632
  96. package/types/paparazzi/index.ts +0 -6
  97. package/types/paparazzi/messages.ts +0 -6185
  98. package/types/paparazzi/types.ts +0 -2159
  99. package/types/python_array_test/enums.ts +0 -3632
  100. package/types/python_array_test/index.ts +0 -6
  101. package/types/python_array_test/messages.ts +0 -6258
  102. package/types/python_array_test/types.ts +0 -2159
  103. package/types/standard/enums.d.ts +0 -248
  104. package/types/standard/enums.d.ts.map +0 -1
  105. package/types/standard/enums.js +0 -505
  106. package/types/standard/enums.js.map +0 -1
  107. package/types/standard/enums.ts +0 -502
  108. package/types/standard/index.d.ts +0 -4
  109. package/types/standard/index.d.ts.map +0 -1
  110. package/types/standard/index.js +0 -22
  111. package/types/standard/index.js.map +0 -1
  112. package/types/standard/index.ts +0 -6
  113. package/types/standard/messages.d.ts +0 -25
  114. package/types/standard/messages.d.ts.map +0 -1
  115. package/types/standard/messages.js +0 -13
  116. package/types/standard/messages.js.map +0 -1
  117. package/types/standard/messages.ts +0 -63
  118. package/types/standard/types.d.ts +0 -15
  119. package/types/standard/types.d.ts.map +0 -1
  120. package/types/standard/types.js +0 -5
  121. package/types/standard/types.js.map +0 -1
  122. package/types/standard/types.ts +0 -278
  123. package/types/test/enums.ts +0 -2
  124. package/types/test/index.ts +0 -6
  125. package/types/test/messages.ts +0 -69
  126. package/types/test/types.ts +0 -11
  127. /package/{types → dist/types}/ardupilotmega/enums.ts +0 -0
  128. /package/{types → dist/types}/ardupilotmega/index.ts +0 -0
  129. /package/{types → dist/types}/ardupilotmega/messages.ts +0 -0
  130. /package/{types → dist/types}/ardupilotmega/types.ts +0 -0
  131. /package/{types → dist/types}/common/enums.ts +0 -0
  132. /package/{types → dist/types}/common/index.ts +0 -0
  133. /package/{types → dist/types}/common/messages.ts +0 -0
  134. /package/{types → dist/types}/common/types.ts +0 -0
  135. /package/{types → dist/types}/minimal/enums.ts +0 -0
  136. /package/{types → dist/types}/minimal/index.ts +0 -0
  137. /package/{types → dist/types}/minimal/messages.ts +0 -0
  138. /package/{types → dist/types}/minimal/types.ts +0 -0
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ declare function generateDecoders(): Promise<void>;
3
+ export { generateDecoders };
4
+ //# sourceMappingURL=cli-generate-decoders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-generate-decoders.d.ts","sourceRoot":"","sources":["../src/cli-generate-decoders.ts"],"names":[],"mappings":";AAsHA,iBAAe,gBAAgB,kBAmH9B;AAeD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,201 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.generateDecoders = generateDecoders;
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const xml_parser_1 = require("./generator/xml-parser");
8
+ const DIALECT_CONFIGS = [
9
+ {
10
+ dialectName: 'common',
11
+ xmlSource: 'https://raw.githubusercontent.com/mavlink/mavlink/master/message_definitions/v1.0/common.xml',
12
+ },
13
+ {
14
+ dialectName: 'ardupilotmega',
15
+ xmlSource: 'https://raw.githubusercontent.com/mavlink/mavlink/master/message_definitions/v1.0/ardupilotmega.xml',
16
+ },
17
+ {
18
+ dialectName: 'minimal',
19
+ xmlSource: 'https://raw.githubusercontent.com/mavlink/mavlink/master/message_definitions/v1.0/minimal.xml',
20
+ }
21
+ ];
22
+ function convertToDecoderDefinition(rawMessage) {
23
+ const fields = [];
24
+ for (const field of rawMessage.fields || []) {
25
+ let fieldType = field.type;
26
+ let arrayLength;
27
+ // Handle array types like uint8_t[4]
28
+ const arrayMatch = fieldType.match(/^([^[]+)\[(\d+)\]$/);
29
+ if (arrayMatch) {
30
+ fieldType = arrayMatch[1];
31
+ arrayLength = parseInt(arrayMatch[2]);
32
+ }
33
+ fields.push({
34
+ name: field.name,
35
+ type: fieldType,
36
+ arrayLength,
37
+ extension: field.extension
38
+ });
39
+ }
40
+ return {
41
+ id: rawMessage.id,
42
+ name: rawMessage.name,
43
+ fields
44
+ };
45
+ }
46
+ function generateDecoderCode(dialectName, messages) {
47
+ let code = `// Auto-generated decoder definitions for ${dialectName} dialect
48
+ // Generated from MAVLink XML definitions
49
+
50
+ interface MessageDefinition {
51
+ id: number;
52
+ name: string;
53
+ fields: FieldDefinition[];
54
+ }
55
+
56
+ interface FieldDefinition {
57
+ name: string;
58
+ type: string;
59
+ arrayLength?: number;
60
+ extension?: boolean;
61
+ }
62
+
63
+ export const ${dialectName.toUpperCase()}_MESSAGE_DEFINITIONS: MessageDefinition[] = [
64
+ `;
65
+ for (const message of messages) {
66
+ code += ` {\n`;
67
+ code += ` id: ${message.id},\n`;
68
+ code += ` name: '${message.name}',\n`;
69
+ code += ` fields: [\n`;
70
+ for (const field of message.fields) {
71
+ code += ` {\n`;
72
+ code += ` name: '${field.name}',\n`;
73
+ code += ` type: '${field.type}',\n`;
74
+ if (field.arrayLength) {
75
+ code += ` arrayLength: ${field.arrayLength},\n`;
76
+ }
77
+ if (field.extension) {
78
+ code += ` extension: ${field.extension},\n`;
79
+ }
80
+ code += ` },\n`;
81
+ }
82
+ code += ` ]\n`;
83
+ code += ` },\n`;
84
+ }
85
+ code += `];
86
+ `;
87
+ return code;
88
+ }
89
+ async function generateDecoders() {
90
+ console.log('Generating MAVLink message decoders...');
91
+ const xmlParser = new xml_parser_1.XMLParser();
92
+ const allMessages = [];
93
+ for (const config of DIALECT_CONFIGS) {
94
+ try {
95
+ console.log(`Processing ${config.dialectName} dialect...`);
96
+ let definition;
97
+ if (config.xmlSource.startsWith('http')) {
98
+ definition = await xmlParser.parseFromURL(config.xmlSource);
99
+ }
100
+ else {
101
+ definition = await xmlParser.parseFromFile(config.xmlSource);
102
+ }
103
+ // Convert raw definitions to decoder format
104
+ const decoderMessages = [];
105
+ for (const rawMessage of definition.messages || []) {
106
+ const decoderMessage = convertToDecoderDefinition(rawMessage);
107
+ decoderMessages.push(decoderMessage);
108
+ allMessages.push(decoderMessage);
109
+ }
110
+ // Generate decoder code for this dialect
111
+ const decoderCode = generateDecoderCode(config.dialectName, decoderMessages);
112
+ // Save individual dialect decoder
113
+ const dialectOutputPath = (0, path_1.join)(process.cwd(), 'generated', 'decoders', `${config.dialectName}.ts`);
114
+ await fs_1.promises.mkdir((0, path_1.join)(process.cwd(), 'generated', 'decoders'), { recursive: true });
115
+ await fs_1.promises.writeFile(dialectOutputPath, decoderCode);
116
+ console.log(`Generated decoder for ${config.dialectName}: ${dialectOutputPath}`);
117
+ }
118
+ catch (error) {
119
+ console.error(`Failed to process ${config.dialectName}:`, error);
120
+ }
121
+ // Reset parser state between dialects
122
+ xmlParser.reset();
123
+ }
124
+ // Generate combined decoder definitions
125
+ let allDecoderCode = `// Auto-generated decoder definitions from MAVLink XML
126
+ // This file contains all message definitions for decoding MAVLink payloads
127
+
128
+ interface MessageDefinition {
129
+ id: number;
130
+ name: string;
131
+ fields: FieldDefinition[];
132
+ }
133
+
134
+ interface FieldDefinition {
135
+ name: string;
136
+ type: string;
137
+ arrayLength?: number;
138
+ extension?: boolean;
139
+ }
140
+
141
+ export const ALL_MESSAGE_DEFINITIONS: MessageDefinition[] = [
142
+ `;
143
+ // Sort messages by ID to avoid duplicates and ensure consistent ordering
144
+ const uniqueMessages = new Map();
145
+ for (const message of allMessages) {
146
+ if (!uniqueMessages.has(message.id)) {
147
+ uniqueMessages.set(message.id, message);
148
+ }
149
+ }
150
+ const sortedMessages = Array.from(uniqueMessages.values()).sort((a, b) => a.id - b.id);
151
+ for (const message of sortedMessages) {
152
+ allDecoderCode += ` {\n`;
153
+ allDecoderCode += ` id: ${message.id},\n`;
154
+ allDecoderCode += ` name: '${message.name}',\n`;
155
+ allDecoderCode += ` fields: [\n`;
156
+ for (const field of message.fields) {
157
+ allDecoderCode += ` {\n`;
158
+ allDecoderCode += ` name: '${field.name}',\n`;
159
+ allDecoderCode += ` type: '${field.type}',\n`;
160
+ if (field.arrayLength) {
161
+ allDecoderCode += ` arrayLength: ${field.arrayLength},\n`;
162
+ }
163
+ if (field.extension) {
164
+ allDecoderCode += ` extension: ${field.extension},\n`;
165
+ }
166
+ allDecoderCode += ` },\n`;
167
+ }
168
+ allDecoderCode += ` ]\n`;
169
+ allDecoderCode += ` },\n`;
170
+ }
171
+ allDecoderCode += `];
172
+
173
+ // Helper function to create a message definitions map
174
+ export function createMessageDefinitionsMap(): Map<number, MessageDefinition> {
175
+ const map = new Map<number, MessageDefinition>();
176
+ for (const def of ALL_MESSAGE_DEFINITIONS) {
177
+ map.set(def.id, def);
178
+ }
179
+ return map;
180
+ }
181
+ `;
182
+ // Save combined decoder definitions
183
+ const combinedOutputPath = (0, path_1.join)(process.cwd(), 'generated', 'all-decoders.ts');
184
+ await fs_1.promises.writeFile(combinedOutputPath, allDecoderCode);
185
+ console.log(`Generated combined decoder definitions: ${combinedOutputPath}`);
186
+ console.log(`Generated ${sortedMessages.length} unique message definitions`);
187
+ console.log('Decoder generation completed!');
188
+ }
189
+ // Run if called directly
190
+ if (require.main === module) {
191
+ generateDecoders()
192
+ .then(() => {
193
+ console.log('All decoders generated successfully!');
194
+ process.exit(0);
195
+ })
196
+ .catch((error) => {
197
+ console.error('Error generating decoders:', error);
198
+ process.exit(1);
199
+ });
200
+ }
201
+ //# sourceMappingURL=cli-generate-decoders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-generate-decoders.js","sourceRoot":"","sources":["../src/cli-generate-decoders.ts"],"names":[],"mappings":"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"}