Rev 482 | Rev 486 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 482 | Rev 483 | ||
---|---|---|---|
Line 61... | Line 61... | ||
61 | #include "91x_lib.h" |
61 | #include "91x_lib.h" |
62 | #include "main.h" |
62 | #include "main.h" |
63 | #include "config.h" |
63 | #include "config.h" |
64 | #include "menu.h" |
64 | #include "menu.h" |
65 | #include "GPS.h" |
65 | #include "GPS.h" |
- | 66 | #include "i2c0.h" |
|
66 | #include "i2c.h" |
67 | #include "i2c1.h" |
67 | #include "uart0.h" |
68 | #include "uart0.h" |
68 | #include "uart1.h" |
69 | #include "uart1.h" |
69 | #include "uart2.h" |
70 | #include "uart2.h" |
70 | #include "timer1.h" |
71 | #include "timer1.h" |
71 | #include "timer2.h" |
72 | #include "timer2.h" |
Line 245... | Line 246... | ||
245 | UART_StructInit(&UART_InitStructure); |
246 | UART_StructInit(&UART_InitStructure); |
246 | UART_InitStructure.UART_WordLength = UART_WordLength_8D; |
247 | UART_InitStructure.UART_WordLength = UART_WordLength_8D; |
247 | UART_InitStructure.UART_StopBits = UART_StopBits_1; |
248 | UART_InitStructure.UART_StopBits = UART_StopBits_1; |
248 | UART_InitStructure.UART_Parity = UART_Parity_No ; |
249 | UART_InitStructure.UART_Parity = UART_Parity_No ; |
249 | UART_InitStructure.UART_BaudRate = UART1_BAUD_RATE; |
250 | UART_InitStructure.UART_BaudRate = UART1_BAUD_RATE; |
250 | UART_InitStructure. UART_HardwareFlowControl = UART_HardwareFlowControl_None; |
251 | UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None; |
251 | UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx; |
252 | UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx; |
252 | UART_InitStructure.UART_FIFO = UART_FIFO_Enable; |
253 | // UART_InitStructure.UART_FIFO = UART_FIFO_Enable; |
253 | UART_InitStructure.UART_TxFIFOLevel = UART_FIFOLevel_1_2; |
254 | UART_InitStructure.UART_FIFO = UART_FIFO_Disable; |
254 | UART_InitStructure.UART_RxFIFOLevel = UART_FIFOLevel_1_2; |
255 | // UART_InitStructure.UART_TxFIFOLevel = UART_FIFOLevel_1_2; |
- | 256 | UART_InitStructure.UART_TxFIFOLevel = UART_FIFOLevel_1_8; // FIFO size 16 bytes, FIFO level 2 bytes |
|
- | 257 | UART_InitStructure.UART_RxFIFOLevel = UART_FIFOLevel_1_2; // FIFO size 16 bytes, FIFO level 8 bytes |
|
Line 255... | Line 258... | ||
255 | 258 | ||
256 | UART_DeInit(UART1); // reset uart 1 to default |
259 | UART_DeInit(UART1); // reset uart 1 to default |
257 | UART_Init(UART1, &UART_InitStructure); // initialize uart 1 |
260 | UART_Init(UART1, &UART_InitStructure); // initialize uart 1 |
258 | // enable uart 1 interrupts selective |
261 | // enable uart 1 interrupts selective |
Line 650... | Line 653... | ||
650 | /**************************************************************/ |
653 | /**************************************************************/ |
651 | void UART1_Transmit(void) |
654 | void UART1_Transmit(void) |
652 | { |
655 | { |
653 | u8 tmp_tx; |
656 | u8 tmp_tx; |
654 | if(DebugUART != UART1) return; |
657 | if(DebugUART != UART1) return; |
- | 658 | if(I2C0_State != I2C_STATE_IDLE) return; |
|
655 | // if something has to be send and the txd fifo is not full |
659 | // if something has to be send and the txd fifo is not full |
656 | if(UART1_tx_buffer.Locked == TRUE) |
660 | if(UART1_tx_buffer.Locked == TRUE) |
657 | { |
661 | { |
658 | // while there is some space in the tx fifo |
662 | // while there is some space in the tx fifo |
659 | while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != SET) |
663 | while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != SET) |
Line 683... | Line 687... | ||
683 | //$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45 |
687 | //$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45 |
684 | //$GPGGA,092120.20,,,,,0,00,99.99,,,,,,*6C |
688 | //$GPGGA,092120.20,,,,,0,00,99.99,,,,,,*6C |
685 | //http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm |
689 | //http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm |
686 | void CreateNmeaGGA(void) |
690 | void CreateNmeaGGA(void) |
687 | { |
691 | { |
688 | u8 array[200], i = 0, crc = 0, x; |
692 | unsigned char array[200], i = 0, crc = 0, x; |
689 | s32 tmp1, tmp2; |
693 | long tmp1, tmp2; |
690 | - | ||
691 | i += sprintf(array, "$GPGGA,"); |
694 | i += sprintf(array, "$GPGGA,"); |
692 | // +++++++++++++++++++++++++++++++++++++++++++ |
695 | // +++++++++++++++++++++++++++++++++++++++++++ |
693 | if(SystemTime.Valid) |
696 | if(SystemTime.Valid) |
694 | { |
697 | { |
695 | i += sprintf(&array[i], "%02d%02d%02d.%02d,", SystemTime.Hour, SystemTime.Min, SystemTime.Sec, SystemTime.mSec/10); |
698 | i += sprintf(&array[i], "%02d%02d%02d.%02d,",SystemTime.Hour,SystemTime.Min,SystemTime.Sec,SystemTime.mSec/10); |
696 | } |
699 | } |
697 | else |
700 | else |
698 | { |
701 | { |
699 | i += sprintf(&array[i], ","); |
702 | i += sprintf(&array[i], ","); |
700 | } |
703 | } |
701 | // +++++++++++++++++++++++++++++++++++++++++++ |
704 | // +++++++++++++++++++++++++++++++++++++++++++ |
702 | if(GPSData.Flags & FLAG_GPSFIXOK) |
705 | if(GPSData.Flags & FLAG_GPSFIXOK) |
703 | { |
706 | { |
704 | tmp1 = abs(GPSData.Position.Latitude)/10000000L; |
707 | tmp1 = abs(GPSData.Position.Latitude)/10000000L; |
705 | i += sprintf(&array[i],"%02d",(s16)tmp1); |
708 | i += sprintf(&array[i],"%02d",(int)tmp1); |
706 | 709 | ||
707 | tmp1 = abs(GPSData.Position.Latitude)%10000000L; |
710 | tmp1 = abs(GPSData.Position.Latitude)%10000000L; |
708 | tmp1 *= 6; // in Minuten |
711 | tmp1 *= 6; // in Minuten |
709 | tmp2 = tmp1 / 1000000L; |
712 | tmp2 = tmp1 / 1000000L; |
710 | i += sprintf(&array[i],"%02d", (s16)tmp2); |
713 | i += sprintf(&array[i],"%02d",(int)tmp2); |
711 | tmp2 = tmp1 % 1000000L; |
714 | tmp2 = tmp1 % 1000000L; |
712 | tmp2 /= 10; // eine Stelle zu viel |
715 | tmp2 /= 10; // eine Stelle zu viel |
713 | i += sprintf(&array[i],".%05d,", (s16)tmp2); |
716 | i += sprintf(&array[i],".%05d,",(int)tmp2); |
714 | 717 | ||
715 | if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,"); |
718 | if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,"); |
716 | else i += sprintf(&array[i],"S,"); |
719 | else i += sprintf(&array[i],"S,"); |
717 | // +++++++++++++++++++++++++++++++++++++++++++ |
720 | // +++++++++++++++++++++++++++++++++++++++++++ |
718 | 721 | ||
719 | tmp1 = abs(GPSData.Position.Longitude)/10000000L; |
722 | tmp1 = abs(GPSData.Position.Longitude)/10000000L; |
720 | i += sprintf(&array[i],"%03d", (s16)tmp1); |
723 | i += sprintf(&array[i],"%03d",(int)tmp1); |
721 | 724 | ||
722 | tmp1 = abs(GPSData.Position.Longitude)%10000000L; |
725 | tmp1 = abs(GPSData.Position.Longitude)%10000000L; |
723 | tmp1 *= 6; // in Minuten |
726 | tmp1 *= 6; // in Minuten |
724 | tmp2 = tmp1 / 1000000L; |
727 | tmp2 = tmp1 / 1000000L; |
725 | i += sprintf(&array[i],"%02d", (s16)tmp2); |
728 | i += sprintf(&array[i],"%02d",(int)tmp2); |
726 | tmp2 = tmp1 % 1000000L; |
729 | tmp2 = tmp1 % 1000000L; |
727 | tmp2 /= 10; // eine Stelle zu viel |
730 | tmp2 /= 10; // eine Stelle zu viel |
728 | i += sprintf(&array[i],".%05d,", (s16)tmp2); |
731 | i += sprintf(&array[i],".%05d,",(int)tmp2); |
729 | 732 | ||
730 | 733 | ||
731 | if(GPSData.Position.Longitude >= 0) i += sprintf(&array[i],"E,"); |
734 | if(GPSData.Position.Longitude >= 0) i += sprintf(&array[i],"E,"); |
732 | else i += sprintf(&array[i],"W,"); |
735 | else i += sprintf(&array[i],"W,"); |
733 | i += sprintf(&array[i],"%d,",GPSData.SatFix); |
736 | i += sprintf(&array[i],"%d,",GPSData.SatFix); |
734 | i += sprintf(&array[i],"%d,",GPSData.NumOfSats); |
737 | i += sprintf(&array[i],"%d,",GPSData.NumOfSats); |
735 | i += sprintf(&array[i],"%d.%d,",(s16)(GPSData.Position_Accuracy/100),abs(GPSData.Position_Accuracy%100)); |
738 | i += sprintf(&array[i],"%d.%d,",GPSData.Position_Accuracy/100,abs(GPSData.Position_Accuracy%100)); |
736 | // i += sprintf(&array[i],"%d.%d,M,",GPSData.Position.Altitude/1000,abs(GPSData.Position.Altitude%1000)/100); |
739 | // i += sprintf(&array[i],"%d.%d,M,",GPSData.Position.Altitude/1000,abs(GPSData.Position.Altitude%1000)/100); |
737 | tmp1 = NaviData.Altimeter / 2; // in dm |
740 | tmp1 = NaviData.Altimeter / 2; // in dm |
738 | i += sprintf(&array[i],"%d.%d,M,",(s16)tmp1 / 10,abs((s16)tmp1 % 10)); |
741 | i += sprintf(&array[i],"%d.%d,M,",tmp1 / 10,abs(tmp1 % 10)); |
739 | i += sprintf(&array[i],",,,*"); |
742 | i += sprintf(&array[i],",,,*"); |
740 | } |
743 | } |
741 | else |
744 | else |
742 | { |
745 | { |
743 | i += sprintf(&array[i], ",,,,%d,00,99.99,,,,,,*",GPSData.NumOfSats); |
746 | i += sprintf(&array[i], ",,,,%d,00,99.99,,,,,,*",GPSData.NumOfSats); |
744 | } |
747 | } |
745 | for(x = 1; x < i-1; x++) |
748 | for(x=1; x<i-1; x++) |
746 | { |
749 | { |
747 | crc ^= array[x]; |
750 | crc ^= array[x]; |
748 | } |
751 | } |
749 | i += sprintf(&array[i], "%02x%c%c",crc,0x0d,0x0a); |
752 | i += sprintf(&array[i], "%02x%c%c",crc,0x0d,0x0a); |
750 | AddSerialData(&UART1_tx_buffer,array,i); |
753 | AddSerialData(&UART1_tx_buffer,array,i); |
Line 751... | Line 754... | ||
751 | 754 | ||
752 | // +++++++++++++++++++++++++++++++++++++++++++ |
755 | // +++++++++++++++++++++++++++++++++++++++++++ |
Line 753... | Line 756... | ||
753 | } |
756 | } |
754 | 757 | ||
Line 755... | Line 758... | ||
755 | //$GPRMC,162614.123,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13 |
758 | //$GPRMC,162614.123,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13 |
756 | //$GPRMC,HHMMSS.sss,A,BBBB.BBBB,b,LLLLL.LLLL,l,GG.G,RR.R,DDMMYY,M.M,m,F*PP |
759 | //$GPRMC,HHMMSS.sss,A,BBBB.BBBB,b,LLLLL.LLLL,l,GG.G,RR.R,DDMMYY,M.M,m,F*PP |
757 | 760 | ||
758 | void CreateNmeaRMC(void) |
761 | void CreateNmeaRMC(void) |
759 | { |
762 | { |
760 | u8 array[200], i = 0, crc = 0, x; |
763 | unsigned char array[200], i = 0, crc = 0, x; |
761 | s16 tmp_int; |
764 | int tmp_int; |
762 | s32 tmp1, tmp2; |
765 | long tmp1, tmp2; |
763 | // +++++++++++++++++++++++++++++++++++++++++++ |
766 | // +++++++++++++++++++++++++++++++++++++++++++ |
764 | i += sprintf(array, "$GPRMC,"); |
767 | i += sprintf(array, "$GPRMC,"); |
765 | // +++++++++++++++++++++++++++++++++++++++++++ |
768 | // +++++++++++++++++++++++++++++++++++++++++++ |
766 | if(SystemTime.Valid) |
769 | if(SystemTime.Valid) |
767 | { |
770 | { |
768 | i += sprintf(&array[i], "%02d%02d%02d.%03d,", SystemTime.Hour, SystemTime.Min, SystemTime.Sec, SystemTime.mSec); |
771 | i += sprintf(&array[i], "%02d%02d%02d.%03d,",SystemTime.Hour,SystemTime.Min,SystemTime.Sec,SystemTime.mSec); |
769 | } |
772 | } |
770 | else |
773 | else |
771 | { |
774 | { |
772 | i += sprintf(&array[i], ","); |
775 | i += sprintf(&array[i], ","); |
773 | } |
776 | } |
774 | if(GPSData.Flags & FLAG_GPSFIXOK) |
777 | if(GPSData.Flags & FLAG_GPSFIXOK) |
775 | { |
778 | { |
776 | // +++++++++++++++++++++++++++++++++++++++++++ |
779 | // +++++++++++++++++++++++++++++++++++++++++++ |
777 | tmp1 = abs(GPSData.Position.Latitude)/10000000L; |
780 | tmp1 = abs(GPSData.Position.Latitude)/10000000L; |
778 | i += sprintf(&array[i],"A,%02d", (s16)tmp1); // Status: A = Okay V = Warnung |
781 | i += sprintf(&array[i],"A,%02d",(int)tmp1); // Status: A = Okay V = Warnung |
779 | 782 | ||
780 | tmp1 = abs(GPSData.Position.Latitude)%10000000L; |
783 | tmp1 = abs(GPSData.Position.Latitude)%10000000L; |
781 | tmp1 *= 6; // in Minuten |
784 | tmp1 *= 6; // in Minuten |
782 | tmp2 = tmp1 / 1000000L; |
785 | tmp2 = tmp1 / 1000000L; |
783 | i += sprintf(&array[i],"%02d", (s16)tmp2); |
786 | i += sprintf(&array[i],"%02d",(int)tmp2); |
784 | tmp2 = tmp1 % 1000000L; |
787 | tmp2 = tmp1 % 1000000L; |
785 | tmp2 /= 10; // eine Stelle zu viel |
788 | tmp2 /= 10; // eine Stelle zu viel |
786 | i += sprintf(&array[i],".%05d,", (s16)tmp2); |
789 | i += sprintf(&array[i],".%05d,",(int)tmp2); |
787 | if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,"); |
790 | if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,"); |
788 | else i += sprintf(&array[i],"S,"); |
791 | else i += sprintf(&array[i],"S,"); |
789 | // +++++++++++++++++++++++++++++++++++++++++++ |
792 | // +++++++++++++++++++++++++++++++++++++++++++ |
790 | tmp1 = abs(GPSData.Position.Longitude)/10000000L; |
793 | tmp1 = abs(GPSData.Position.Longitude)/10000000L; |
791 | i += sprintf(&array[i],"%03d", (s16)tmp1); |
794 | i += sprintf(&array[i],"%03d",(int)tmp1); |
792 | 795 | ||
793 | tmp1 = abs(GPSData.Position.Longitude)%10000000L; |
796 | tmp1 = abs(GPSData.Position.Longitude)%10000000L; |
794 | tmp1 *= 6; // in Minuten |
797 | tmp1 *= 6; // in Minuten |
795 | tmp2 = tmp1 / 1000000L; |
798 | tmp2 = tmp1 / 1000000L; |
796 | i += sprintf(&array[i],"%02d", (s16)tmp2); |
799 | i += sprintf(&array[i],"%02d",(int)tmp2); |
797 | tmp2 = tmp1 % 1000000L; |
800 | tmp2 = tmp1 % 1000000L; |
798 | tmp2 /= 10; // eine Stelle zu viel |
801 | tmp2 /= 10; // eine Stelle zu viel |
799 | i += sprintf(&array[i],".%05d,", (s16)tmp2); |
802 | i += sprintf(&array[i],".%05d,",(int)tmp2); |
800 | if(GPSData.Position.Longitude >= 0) i += sprintf(&array[i],"E,"); |
803 | if(GPSData.Position.Longitude >= 0) i += sprintf(&array[i],"E,"); |
801 | else i += sprintf(&array[i],"W,"); |
804 | else i += sprintf(&array[i],"W,"); |
802 | // +++++++++++++++++++++++++++++++++++++++++++ |
805 | // +++++++++++++++++++++++++++++++++++++++++++ |
803 | tmp_int = GPSData.Speed_Ground; // in cm/sek |
806 | tmp_int = GPSData.Speed_Ground; // in cm/sek |
804 | tmp_int *= 90; |
807 | tmp_int *= 90; |
805 | tmp_int /= 463; |
808 | tmp_int /= 463; |
806 | i += sprintf(&array[i],"%02d.%d,",tmp_int/10,tmp_int%10); // in Knoten |
809 | i += sprintf(&array[i],"%02d.%d,",tmp_int/10,tmp_int%10); // in Knoten |
807 | // +++++++++++++++++++++++++++++++++++++++++++ |
810 | // +++++++++++++++++++++++++++++++++++++++++++ |
808 | i += sprintf(&array[i],"%03d.%d,",GyroCompassCorrected/10,GyroCompassCorrected%10); |
811 | i += sprintf(&array[i],"%03d.%d,",GyroCompassCorrected/10,GyroCompassCorrected%10); |
809 | // +++++++++++++++++++++++++++++++++++++++++++ |
812 | // +++++++++++++++++++++++++++++++++++++++++++ |
810 | if(SystemTime.Valid) |
813 | if(SystemTime.Valid) |
811 | { |
814 | { |
812 | i += sprintf(&array[i], "%02d%02d%02d,",SystemTime.Day,SystemTime.Month,SystemTime.Year); |
815 | i += sprintf(&array[i], "%02d%02d%02d,",SystemTime.Day,SystemTime.Month,SystemTime.Year); |
813 | } |
816 | } |
814 | else |
817 | else |
815 | { |
818 | { |
816 | i += sprintf(&array[i], ","); |
819 | i += sprintf(&array[i], ","); |
817 | } |
820 | } |
818 | // +++++++++++++++++++++++++++++++++++++++++++ |
821 | // +++++++++++++++++++++++++++++++++++++++++++ |
819 | i += sprintf(&array[i],"%d.%1d,", abs(GeoMagDec)/10,abs(GeoMagDec)%10); |
822 | i += sprintf(&array[i],"%d.%1d,", abs(GeoMagDec)/10,abs(GeoMagDec)%10); |
820 | if(GeoMagDec < 0) i += sprintf(&array[i], "W,"); else i += sprintf(&array[i], "E,"); |
823 | if(GeoMagDec < 0) i += sprintf(&array[i], "W,"); else i += sprintf(&array[i], "E,"); |
821 | // +++++++++++++++++++++++++++++++++++++++++++ |
824 | // +++++++++++++++++++++++++++++++++++++++++++ |
822 | if(GPSData.Flags & FLAG_DIFFSOLN) i += sprintf(&array[i], "D,"); |
825 | if(GPSData.Flags & FLAG_DIFFSOLN) i += sprintf(&array[i], "D,"); |
823 | else i += sprintf(&array[i], "A,"); |
826 | else i += sprintf(&array[i], "A,"); |
824 | } |
827 | } |
825 | else // kein Satfix |
828 | else // kein Satfix |
826 | { |
829 | { |
827 | i += sprintf(&array[i], "V,,,,,,,,,,N*"); |
830 | i += sprintf(&array[i], "V,,,,,,,,,,N*"); |
828 | } |
831 | } |
829 | // +++++++++++++++++++++++++++++++++++++++++++ |
832 | // +++++++++++++++++++++++++++++++++++++++++++ |
830 | // CRC |
833 | // CRC |
831 | // +++++++++++++++++++++++++++++++++++++++++++ |
834 | // +++++++++++++++++++++++++++++++++++++++++++ |
832 | for(x=1; x<i-1; x++) |
835 | for(x=1; x<i-1; x++) |
833 | { |
836 | { |
834 | crc ^= array[x]; |
837 | crc ^= array[x]; |
835 | } |
838 | } |
836 | i += sprintf(&array[i], "%02x%c%c",crc,0x0d,0x0a); |
839 | i += sprintf(&array[i], "%02x%c%c",crc,0x0d,0x0a); |
837 | // +++++++++++++++++++++++++++++++++++++++++++ |
840 | // +++++++++++++++++++++++++++++++++++++++++++ |
Line 838... | Line 841... | ||
838 | AddSerialData(&UART1_tx_buffer,array,i); |
841 | AddSerialData(&UART1_tx_buffer,array,i); |
839 | // +++++++++++++++++++++++++++++++++++++++++++ |
842 | // +++++++++++++++++++++++++++++++++++++++++++ |
840 | /* |
843 | /* |
841 | |
844 | |
842 | |
845 | |
843 | 846 | ||
844 | GPSData.Flags = (GPSData.Flags & 0xf0) | (UbxSol.Flags & 0x0f); // we take only the lower bits |
847 | GPSData.Flags = (GPSData.Flags & 0xf0) | (UbxSol.Flags & 0x0f); // we take only the lower bits |
845 | GPSData.NumOfSats = UbxSol.numSV; |
848 | GPSData.NumOfSats = UbxSol.numSV; |
846 | GPSData.SatFix = UbxSol.GPSfix; |
849 | GPSData.SatFix = UbxSol.GPSfix; |
847 | GPSData.Position_Accuracy = UbxSol.PAcc; |
850 | GPSData.Position_Accuracy = UbxSol.PAcc; |
848 | GPSData.Speed_Accuracy = UbxSol.SAcc; |
851 | GPSData.Speed_Accuracy = UbxSol.SAcc; |
849 | SetGPSTime(&SystemTime); // update system time |
852 | SetGPSTime(&SystemTime); // update system time |
850 | // NAV POSLLH |
853 | // NAV POSLLH |
851 | GPSData.Position.Status = INVALID; |
854 | GPSData.Position.Status = INVALID; |
852 | GPSData.Position.Longitude = UbxPosLlh.LON; |
855 | GPSData.Position.Longitude = UbxPosLlh.LON; |
853 | GPSData.Position.Latitude = UbxPosLlh.LAT; |
856 | GPSData.Position.Latitude = UbxPosLlh.LAT; |
854 | GPSData.Position.Altitude = UbxPosLlh.HMSL; |
857 | GPSData.Position.Altitude = UbxPosLlh.HMSL; |
855 | GPSData.Position.Status = NEWDATA; |
858 | GPSData.Position.Status = NEWDATA; |
856 | // NAV VELNED |
859 | // NAV VELNED |
857 | GPSData.Speed_East = UbxVelNed.VEL_E; |
860 | GPSData.Speed_East = UbxVelNed.VEL_E; |
858 | GPSData.Speed_North = UbxVelNed.VEL_N; |
861 | GPSData.Speed_North = UbxVelNed.VEL_N; |
859 | GPSData.Speed_Top = -UbxVelNed.VEL_D; |
862 | GPSData.Speed_Top = -UbxVelNed.VEL_D; |
860 | GPSData.Speed_Ground = UbxVelNed.GSpeed; |
863 | GPSData.Speed_Ground = UbxVelNed.GSpeed; |
861 | GPSData.Heading = UbxVelNed.Heading; |
864 | GPSData.Heading = UbxVelNed.Heading; |
862 | SystemTime.Year = 0; |
865 | SystemTime.Year = 0; |
863 | SystemTime.Month = 0; |
866 | SystemTime.Month = 0; |
Line 864... | Line 867... | ||
864 | SystemTime.Day = 0; |
867 | SystemTime.Day = 0; |
865 | SystemTime.Hour = 0; |
868 | SystemTime.Hour = 0; |
866 | SystemTime.Min = 0; |
869 | SystemTime.Min = 0; |
867 | SystemTime.Sec = 0; |
870 | SystemTime.Sec = 0; |
868 | SystemTime.mSec = 0; |
871 | SystemTime.mSec = 0; |
Line 869... | Line 872... | ||
869 | SystemTime.Valid = 0; |
872 | SystemTime.Valid = 0; |
870 | |
873 | |
871 | FromFlightCtrl.GyroHeading / 10;//NaviData.HomePositionDeviation.Bearing / 2; |
874 | FromFlightCtrl.GyroHeading / 10;//NaviData.HomePositionDeviation.Bearing / 2; |
872 | if(GPSData.Position.Latitude < 0) ToFlightCtrl.Param.Byte[5] = 1; // 1 = S |
875 | if(GPSData.Position.Latitude < 0) ToFlightCtrl.Param.Byte[5] = 1; // 1 = S |
873 | else ToFlightCtrl.Param.Byte[5] = 0; // 1 = S |
876 | else ToFlightCtrl.Param.Byte[5] = 0; // 1 = S |
874 | i1 = abs(GPSData.Position.Latitude)/10000000L; |
877 | i1 = abs(GPSData.Position.Latitude)/10000000L; |
875 | i2 = abs(GPSData.Position.Latitude)%10000000L; |
878 | i2 = abs(GPSData.Position.Latitude)%10000000L; |
876 | 879 | ||
877 | 880 | ||
878 | 881 | ||
879 | if(!(NCFlags & NC_FLAG_GPS_OK)) {i1 = 0; i2 = 0;} |
882 | if(!(NCFlags & NC_FLAG_GPS_OK)) {i1 = 0; i2 = 0;} |
880 | i1 *= 100; |
883 | i1 *= 100; |
881 | i1 += i2 / 100000; |
884 | i1 += i2 / 100000; |
882 | i2 = i2 % 100000; |
885 | i2 = i2 % 100000; |
883 | i2 /= 10; |
886 | i2 /= 10; |
884 | ToFlightCtrl.Param.Byte[6] = i1 % 256; |
887 | ToFlightCtrl.Param.Byte[6] = i1 % 256; |
885 | ToFlightCtrl.Param.Byte[7] = i1 / 256; |
888 | ToFlightCtrl.Param.Byte[7] = i1 / 256; |
886 | ToFlightCtrl.Param.Byte[8] = i2 % 256; |
889 | ToFlightCtrl.Param.Byte[8] = i2 % 256; |
887 | ToFlightCtrl.Param.Byte[9] = i2 / 256; |
890 | ToFlightCtrl.Param.Byte[9] = i2 / 256; |
Line 888... | Line 891... | ||
888 | break; |
891 | break; |
889 | case 1: |
892 | case 1: |