ArduPilot / node-mavlink

This project is providing native TypeScript bindings and tools for sending and receiving MavLink messages over a verity of medium

Repository from Github https://github.comArduPilot/node-mavlinkRepository from Github https://github.comArduPilot/node-mavlink

Issue with serializer uint8_t[]

thiensu1122 opened this issue · comments

Hi team,

I've got into a problem when creating GpsInjectData - this is my log of the message
{
targetSystem: 1,
targetComponent: 0,
len: 110,
data: <Buffer a0 a1 03 72 e5 01 e4 08 9b 0d a9 bd e0 03 e8 00 00 1c 05 0d c0 2a 41 82 1f 81 a4 63 b9 8c c1 98 f4 56 9e 92 00 00 44 c6 e0 00 00 00 00 00 07 00 00 02 ... 60 more bytes>
}

Yet when I try to send this message I got the error:

(node:1149) Error: Unknown field type uint8_t[]: serializer not found
at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:161:23
at Array.forEach ()
at MavLinkProtocolV2.serialize (/home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:158:27)
at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:649:37
at new Promise ()
at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:648:16
at Generator.next ()
at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:8:71
at new Promise ()
at __awaiter (/home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:4:12)

Can you tell me how to fix this?

Looks like somehow the type is wrong. It should be uint8[] - without that _t in the name. Let me check the definition and maybe I can do something about it.

Looks like you're trying to create a message that is originally a response. The difference is in the name of the types. I need to dig deeper to see how we can mitigate that. Thanks for reporting this.

Could you attach the piece of code that recreates the problem? As simple as it gets would be nice.

Hi Padcom,

Do you mean like this?
CODE

import { common, MavLinkProtocolV2, minimal, send } from 'node-mavlink';
import { connect } from 'net';

const port = connect({ host: '192.168.2.5', port: 5760 })

export async function SendMavlinktest(){
    // console.log("send message mavlink : ", msg)
    const data = [1,2,3,4,5,6];
    const msg = new common.GpsInjectData();
    msg.targetSystem = 1;
    msg.targetComponent = 0;
    msg.len = data.length;
    msg.data = data;
    console.log(msg);
    await send(port, msg, new MavLinkProtocolV2());
}

LOG :

GpsInjectData {
  targetSystem: 1,
  targetComponent: 0,
  len: 6,
  data: [ 1, 2, 3, 4, 5, 6 ]
}
(node:1178) UnhandledPromiseRejectionWarning: Error: Unknown field type uint8_t[]: serializer not found
    at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:161:23
    at Array.forEach (<anonymous>)
    at MavLinkProtocolV2.serialize (/home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:158:27)
    at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:649:37
    at new Promise (<anonymous>)
    at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:648:16
    at Generator.next (<anonymous>)
    at /home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/pi/companion/companion-nodejs/node_modules/node-mavlink/dist/lib/mavlink.js:4:12)

Ok, looks like it was a major issue with serialization of arrays! Good catch!

Please check out version 1.0.10-beta.1 - it should work.