@@ -366,8 +366,12 @@ int16_t OpenLcbCore::findIndexOfEventID(EventID *key, int16_t startIndex)
366
366
// get the state of an event from the user program
367
367
extern uint8_t userState (uint16_t ) __attribute__((weak));
368
368
uint8_t getState (uint16_t index) {
369
- if (userState) return userState (index);
370
- return 7 ;
369
+ if (userState) {
370
+ uint8_t us = userState (index);
371
+ dP (" \n UserState=" ); dP (us);
372
+ return us;
373
+ }
374
+ return 7 ; // UNKNOWN
371
375
}
372
376
void OpenLcbCore::check () {
373
377
// see in any replies are waiting to send
@@ -460,7 +464,7 @@ void OpenLcbCore::sendTeach(EventID e) { /// DPH added for Clock
460
464
sendEvent = sendEvent < index ? sendEvent : index;
461
465
}
462
466
463
- bool OpenLcbCore::receivedFrame (OlcbCanInterface* rcv) {
467
+ bool OpenLcbCore::receivedFrame (OlcbCanInterface* rcv) {
464
468
// dP("\nIn receivedFrame");
465
469
// dP("\nIn OpenLcbCore::receivedFrame()");
466
470
EventID eventid;
@@ -473,9 +477,10 @@ void OpenLcbCore::sendTeach(EventID e) { /// DPH added for Clock
473
477
while ((index = findIndexOfEventID (&eventid, index)) != -1 )
474
478
{
475
479
// yes, we have to reply with ConsumerIdentified
476
- if (events[index].flags & Event::CAN_CONSUME_FLAG) {
477
- events[index].flags |= Event::IDENT_FLAG;
478
- sendEvent = sendEvent < index ? sendEvent : index;
480
+ uint16_t eindex = this ->eventsIndex [index];
481
+ if (events[eindex].flags & Event::CAN_CONSUME_FLAG) {
482
+ events[eindex].flags |= Event::IDENT_FLAG;
483
+ sendEvent = sendEvent < eindex ? sendEvent : eindex;
479
484
}
480
485
index++;
481
486
if (index>=numEvents) break ;
@@ -489,9 +494,10 @@ void OpenLcbCore::sendTeach(EventID e) { /// DPH added for Clock
489
494
while ((index = findIndexOfEventID (&eventid, index)) != -1 )
490
495
{
491
496
// yes, we have to reply with ProducerIdentified
492
- if (events[index].flags & Event::CAN_PRODUCE_FLAG) {
493
- events[index].flags |= Event::IDENT_FLAG;
494
- sendEvent = sendEvent < index ? sendEvent : index;
497
+ uint16_t eindex = this ->eventsIndex [index];
498
+ if (events[eindex].flags & Event::CAN_PRODUCE_FLAG) {
499
+ events[eindex].flags |= Event::IDENT_FLAG;
500
+ sendEvent = sendEvent < eindex ? sendEvent : eindex;
495
501
}
496
502
index++;
497
503
if (index>=numEvents) break ;
@@ -504,7 +510,7 @@ void OpenLcbCore::sendTeach(EventID e) { /// DPH added for Clock
504
510
for (int i = 0 ; i < numEvents; i++) {
505
511
events[i].flags |= Event::IDENT_FLAG;
506
512
}
507
- sendEvent = 0 ;
513
+ sendEvent = 0 ;
508
514
} else if (rcv->isPCEventReport ()) {
509
515
// found a PC Event Report, see if we consume it
510
516
handlePCEventReport (rcv);
@@ -514,7 +520,6 @@ void OpenLcbCore::sendTeach(EventID e) { /// DPH added for Clock
514
520
} else return false ;
515
521
return true ;
516
522
}
517
-
518
523
void OpenLcbCore::handlePCEventReport (OlcbCanInterface* rcv) {
519
524
// dP("\nIn handlePCEventReport");
520
525
EventID eventid;
0 commit comments