@@ -649,63 +649,168 @@ void AudioManagerClient::Notify(const std::string &signalName, const std::string
649
649
}
650
650
}
651
651
652
+ extern NaviData *navi_data;
653
+ extern std::mutex hudmutex;
654
+
652
655
void MazdaEventCallbacks::HandleNaviStatus (IHUConnectionThreadInterface& stream, const HU::NAVMessagesStatus &request){
656
+ if (request.status () == HU::NAVMessagesStatus_STATUS_STOP) {
657
+ hudmutex.lock ();
658
+ navi_data->event_name = " " ;
659
+ navi_data->turn_event = 0 ;
660
+ navi_data->turn_side = 0 ;
661
+ navi_data->turn_number = -1 ;
662
+ navi_data->turn_angle = -1 ;
663
+ navi_data->changed = 1 ;
664
+ navi_data->previous_msg = navi_data->previous_msg + 1 ;
665
+ if (navi_data->previous_msg == 8 ){
666
+ navi_data->previous_msg = 1 ;
667
+ }
668
+ hudmutex.unlock ();
669
+ }
653
670
}
654
671
655
- extern NaviData *navi_data;
656
- extern std::mutex hudmutex;
672
+ void logUnknownFields (const ::google::protobuf::UnknownFieldSet& fields);
657
673
658
674
void MazdaEventCallbacks::HandleNaviTurn (IHUConnectionThreadInterface& stream, const HU::NAVTurnMessage &request){
675
+ logw (" NAVTurnMessage: turn_side: %d, turn_event: %d, turn_number: %d, turn_angle: %d, event_name: %s" ,
676
+ request.turn_side (),
677
+ request.turn_event (),
678
+ request.turn_number (),
679
+ request.turn_angle (),
680
+ request.event_name ().c_str ()
681
+ );
682
+ logUnknownFields (request.unknown_fields ());
683
+
659
684
hudmutex.lock ();
660
685
int changed = 0 ;
661
- if (navi_data->event_name != request.event_name ()){
686
+ if (navi_data->event_name != request.event_name ()) {
662
687
navi_data->event_name = request.event_name ();
663
688
changed = 1 ;
664
689
}
665
- if (navi_data->turn_event != request.turn_event ()){
690
+ if (navi_data->turn_event != request.turn_event ()) {
666
691
navi_data->turn_event = request.turn_event ();
667
692
changed = 1 ;
668
693
}
669
- if (navi_data->turn_side != request.turn_side ()){
694
+ if (navi_data->turn_side != request.turn_side ()) {
670
695
navi_data->turn_side = request.turn_side ();
671
696
changed = 1 ;
672
697
}
673
- if (navi_data->turn_number != request.turn_number ()){
698
+ if (navi_data->turn_number != request.turn_number ()) {
674
699
navi_data->turn_number = request.turn_number ();
675
700
changed = 1 ;
676
701
}
677
- if (navi_data->turn_angle != request.turn_angle ()){
702
+ if (navi_data->turn_angle != request.turn_angle ()) {
678
703
navi_data->turn_angle = request.turn_angle ();
679
704
changed = 1 ;
680
705
}
681
- if (changed){
706
+ if (changed) {
682
707
navi_data->changed = 1 ;
683
708
navi_data->previous_msg = navi_data->previous_msg +1 ;
684
- if (navi_data->previous_msg == 8 ){
709
+ if (navi_data->previous_msg == 8 ) {
685
710
navi_data->previous_msg = 1 ;
686
711
}
687
712
}
688
713
hudmutex.unlock ();
689
714
}
690
715
691
- void MazdaEventCallbacks::HandleNaviTurnDistance (IHUConnectionThreadInterface& stream, const HU::NAVDistanceMessage &request){
716
+ void MazdaEventCallbacks::HandleNaviTurnDistance (IHUConnectionThreadInterface& stream, const HU::NAVDistanceMessage &request) {
692
717
hudmutex.lock ();
693
- if (request.distance () > 1000 ){
694
- int now_distance = request.distance ()/100 ;
695
- if (now_distance != navi_data->distance ){
696
- navi_data->distance_unit = 3 ;
697
- navi_data->distance = now_distance;
698
- navi_data->changed = 1 ;
699
- }
718
+ int now_distance;
719
+ HudDistanceUnit now_unit;
720
+ switch (request.display_distance_unit ()) {
721
+ case HU::NAVDistanceMessage_DISPLAY_DISTANCE_UNIT_METERS:
722
+ now_distance = request.display_distance () / 100 ;
723
+ now_unit = HudDistanceUnit::METERS;
724
+ break ;
725
+ case HU::NAVDistanceMessage_DISPLAY_DISTANCE_UNIT_KILOMETERS10:
726
+ case HU::NAVDistanceMessage_DISPLAY_DISTANCE_UNIT_KILOMETERS:
727
+ now_distance = request.display_distance () / 100 ;
728
+ now_unit = HudDistanceUnit::KILOMETERS;
729
+ break ;
730
+ case HU::NAVDistanceMessage_DISPLAY_DISTANCE_UNIT_MILES10:
731
+ case HU::NAVDistanceMessage_DISPLAY_DISTANCE_UNIT_MILES:
732
+ now_distance = request.display_distance () / 100 ;
733
+ now_unit = HudDistanceUnit::MILES;
734
+ break ;
735
+ case HU::NAVDistanceMessage_DISPLAY_DISTANCE_UNIT_FEET:
736
+ now_distance = request.display_distance () / 100 ;
737
+ now_unit = HudDistanceUnit::FEET;
738
+ break ;
739
+ default : // not sure, use SI and log
740
+ logw (" NAVDistanceMessage: distance: %d, time: %d, display_distance: %u, display_distance_unit: %d" ,
741
+ request.distance (),
742
+ request.time_until (),
743
+ request.display_distance (),
744
+ request.display_distance_unit ()
745
+ );
746
+ logUnknownFields (request.unknown_fields ());
747
+
748
+ if (request.distance () > 1000 ) {
749
+ now_distance = request.distance () / 100 ;
750
+ now_unit = HudDistanceUnit::KILOMETERS;
751
+ } else {
752
+ now_distance = (((request.distance () + 5 ) / 10 ) * 10 ) * 10 ;
753
+ now_unit = HudDistanceUnit::METERS;
754
+ }
700
755
}
701
- else {
702
- int now_distance = (((request.distance () + 5 ) / 10 )*10 )*10 ;
703
- if (now_distance != navi_data->distance ){
704
- navi_data->distance_unit = 1 ;
705
- navi_data->distance = now_distance;
706
- navi_data->changed = 1 ;
707
- }
756
+
757
+ if (now_distance != navi_data->distance || now_unit != navi_data->distance_unit ) {
758
+ navi_data->distance_unit = now_unit;
759
+ navi_data->distance = now_distance;
760
+ navi_data->changed = 1 ;
761
+ }
762
+
763
+ if (navi_data->time_until != request.time_until ()) {
764
+ navi_data->time_until = request.time_until ();
765
+ navi_data->changed = 1 ;
708
766
}
709
- navi_data-> time_until = request. time_until ();
767
+
710
768
hudmutex.unlock ();
711
769
}
770
+
771
+ void logUnknownFields (const ::google::protobuf::UnknownFieldSet& fields) {
772
+ for (int i = 0 ; i < fields.field_count (); i++) {
773
+ switch (fields.field (i).type ()) {
774
+ case 0 : // TYPE_VARINT
775
+ logw (" ExtraField: number: %d, type: %d, value: %d" ,
776
+ fields.field (i).number (),
777
+ 0 ,
778
+ fields.field (i).varint ()
779
+ );
780
+ break ;
781
+ case 1 : // TYPE_FIXED32
782
+ logw (" ExtraField: number: %d, type: %d, value: %d" ,
783
+ fields.field (i).number (),
784
+ 1 ,
785
+ fields.field (i).fixed32 ()
786
+ );
787
+ break ;
788
+ case 2 : // TYPE_FIXED64
789
+ logw (" ExtraField: number: %d, type: %d, value: %d" ,
790
+ fields.field (i).number (),
791
+ 2 ,
792
+ fields.field (i).fixed64 ()
793
+ );
794
+ break ;
795
+ case 3 : // TYPE_LENGTH_DELIMITED
796
+ logw (" ExtraField: number: %d, type: %d, value: %s" ,
797
+ fields.field (i).number (),
798
+ 3 ,
799
+ &(fields.field (i).length_delimited ())
800
+ );
801
+ break ;
802
+ case 4 : // TYPE_GROUP
803
+ logw (" ExtraField: number: %d, type: %d" ,
804
+ fields.field (i).number (),
805
+ 4
806
+ );
807
+ break ;
808
+ default :
809
+ logw (" ExtraField: number: %d, type: %d" ,
810
+ fields.field (i).number (),
811
+ fields.field (i).type ()
812
+ );
813
+ break ;
814
+ }
815
+ }
816
+ }
0 commit comments