@@ -282,14 +282,14 @@ bool IsDefaultSingleFrameMessage(unsigned long PGN) {
282
282
case 127245L : // Rudder, pri=2, period=100
283
283
case 127250L : // Vessel Heading, pri=2, period=100
284
284
case 127251L : // Rate of Turn, pri=2, period=100
285
- case 127252L : // Heave, pri=3, period=100
285
+ case 127252L : // Heave, pri=3, period=100
286
286
case 127257L : // Attitude, pri=3, period=1000
287
287
case 127488L : // Engine parameters rapid, rapid Update, pri=2, period=100
288
288
case 127493L : // Transmission parameters: dynamic, pri=2, period=100
289
289
case 127501L : // Binary status report, pri=3, period=NA
290
290
case 127505L : // Fluid level, pri=6, period=2500
291
291
case 127508L : // Battery Status, pri=6, period=1500
292
- case 127750L : // Charger status new, pri=6, period=1500
292
+ case 127750L : // Charger status new, pri=6, period=1500
293
293
case 128259L : // Boat speed, pri=2, period=1000
294
294
case 128267L : // Water depth, pri=3, period=1000
295
295
case 129025L : // Lat/lon rapid, pri=2, period=100
@@ -405,6 +405,9 @@ bool IsMandatoryFastPacketMessage(unsigned long PGN) {
405
405
* - 129811L: AIS Single Slot Binary Message, pri=5, period=NA
406
406
* - 129812L: AIS Multi Slot Binary Message, pri=5, period=NA
407
407
* - 129813L: AIS Long-Range Broadcast Message, pri=5, period=NA
408
+ * - 129814L: AIS single slot binary message, pri=5, period=NA
409
+ * - 129815L: AIS multi slot binary message, pri=5, period=NA
410
+ * - 129816L: AIS acknowledge, pri=7, period=NA
408
411
* - 130052L: Loran-C TD Data, pri=3, period=1000
409
412
* - 130053L: Loran-C Range Data, pri=3, period=1000
410
413
* - 130054L: Loran-C Signal Data, pri=3, period=1000
@@ -522,6 +525,9 @@ bool IsDefaultFastPacketMessage(unsigned long PGN) {
522
525
case 129811L : // AIS Single Slot Binary Message, pri=5, period=NA
523
526
case 129812L : // AIS Multi Slot Binary Message, pri=5, period=NA
524
527
case 129813L : // AIS Long-Range Broadcast Message, pri=5, period=NA
528
+ case 129814L : // AIS single slot binary message, pri=5, period=NA
529
+ case 129815L : // AIS multi slot binary message, pri=5, period=NA
530
+ case 129816L : // AIS acknowledge, pri=7, period=NA
525
531
case 130052L : // Loran-C TD Data, pri=3, period=1000
526
532
case 130053L : // Loran-C Range Data, pri=3, period=1000
527
533
case 130054L : // Loran-C Signal Data, pri=3, period=1000
@@ -588,6 +594,24 @@ bool tNMEA2000::IsProprietaryMessage(unsigned long PGN) {
588
594
return IsProprietaryFastPacketMessage (PGN) || ( PGN==61184L ) || ( 65280L <=PGN && PGN<=65535L );
589
595
}
590
596
597
+ bool IgnoreBroadcastISORequest (unsigned long RequestedPGN) {
598
+ switch (RequestedPGN) {
599
+ case 127500L :
600
+ case 130060L :
601
+ case 130061L :
602
+ case 130330L :
603
+ case 130561L :
604
+ case 130562L :
605
+ case 130563L :
606
+ case 130564L :
607
+ case 130565L :
608
+ case 130566L :
609
+ return true ;
610
+ }
611
+
612
+ return false ;
613
+ }
614
+
591
615
/* ***********************************************************************/ /* *
592
616
* \brief Default Product Information
593
617
*
@@ -2298,7 +2322,7 @@ bool tNMEA2000::SendConfigurationInformation(int DeviceIndex) {
2298
2322
}
2299
2323
2300
2324
// *****************************************************************************
2301
- void tNMEA2000::RespondISORequest (const tN2kMsg &N2kMsg, unsigned long RequestedPGN, int iDev) {
2325
+ void tNMEA2000::RespondISORequest (const tN2kMsg &N2kMsg, bool Addressed, unsigned long RequestedPGN, int iDev) {
2302
2326
if ( IsAddressClaimStarted (iDev) ) return ; // We do not respond any queries during address claiming.
2303
2327
2304
2328
switch (RequestedPGN) {
@@ -2318,18 +2342,24 @@ void tNMEA2000::RespondISORequest(const tN2kMsg &N2kMsg, unsigned long Requested
2318
2342
default :
2319
2343
/* If user has established a handler */
2320
2344
if (ISORqstHandler!=0 ) {
2345
+ // Do not respond to broadcast request for some messages
2346
+ if ( !Addressed && IgnoreBroadcastISORequest (RequestedPGN) ) return ;
2347
+
2321
2348
/* and if it handled the request, we are done */
2322
2349
if (ISORqstHandler (RequestedPGN,N2kMsg.Source ,iDev)) {
2323
2350
return ;
2324
2351
}
2325
2352
}
2326
2353
2327
- tN2kMsg N2kMsgR;
2328
- // No user handler, or there was one and it returned FALSE. Send NAK
2329
- SetN2kPGNISOAcknowledgement (N2kMsgR,1 ,0xff ,RequestedPGN);
2330
- // Direct the response to original requester.
2331
- N2kMsgR.Destination = N2kMsg.Source ;
2332
- SendMsg (N2kMsgR,iDev);
2354
+ // Respond NAK only for addressed messages
2355
+ if ( Addressed ) {
2356
+ tN2kMsg N2kMsgR;
2357
+ // No user handler, or there was one and it retured FALSE. Send NAK
2358
+ SetN2kPGNISOAcknowledgement (N2kMsgR,1 ,0xff ,RequestedPGN);
2359
+ // Direct the response to original requester.
2360
+ N2kMsgR.Destination = N2kMsg.Source ;
2361
+ SendMsg (N2kMsgR,iDev);
2362
+ }
2333
2363
}
2334
2364
}
2335
2365
@@ -2343,9 +2373,9 @@ void tNMEA2000::HandleISORequest(const tN2kMsg &N2kMsg) {
2343
2373
ParseN2kPGNISORequest (N2kMsg,RequestedPGN);
2344
2374
N2kMsgDbgStart (" ISO request: " ); N2kMsgDbgln (RequestedPGN);
2345
2375
if (tNMEA2000::IsBroadcast (N2kMsg.Destination )) { // broadcast -> respond from all devices
2346
- for (iDev=0 ; iDev<DeviceCount; iDev++) RespondISORequest (N2kMsg,RequestedPGN,iDev);
2376
+ for (iDev=0 ; iDev<DeviceCount; iDev++) RespondISORequest (N2kMsg,false , RequestedPGN,iDev);
2347
2377
} else {
2348
- RespondISORequest (N2kMsg,RequestedPGN,iDev);
2378
+ RespondISORequest (N2kMsg,true , RequestedPGN,iDev);
2349
2379
}
2350
2380
}
2351
2381
0 commit comments