Subversion Repositories Projects

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace MKLiveView
{
    static class Waypoints
    {

        enum pointType
        {
            INVALID= 255,
            WP =  0,
            POI = 1
        }

        enum status
        {
            INVALID= 255,
            NEW =  0,
            DONE = 1
        }

        static string CAMAngle(int iVal)
        {
            if (iVal == 255)
                return "Auto";
            if (iVal < 0)
                return "POI " + iVal.ToString();
            if (iVal == 0)
                return "- - -";

            return iVal.ToString();
        }

        static string WPSpeed(int iVal)
        {
            if (iVal == 0)
                return "MAX";
            if (iVal > 0 && iVal < 248)
                return ((double)iVal * 0.1).ToString("0.0 m/s");
            if (iVal < 247)
                return "Poti" + (256 - iVal).ToString();

            return iVal.ToString();
        }

       public static DataRow toDataRow(byte[]data, DataRow dr)
        {
            double longitude = 0, latitude = 0, altitude = 0;
            int pstatus = 0, heading = 0, tolRadius = 0, holdTime = 0, eventFlag = 0, index = 0, type = 0, WPeventChanVal = 0, altitudeRate = 0, speed = 0, camAngle = 0, autoTrigger=0;
            string name = "";

            if (data.Length >= 28)
            {
                int i_32, iVal;
                i_32 = data[5];
                iVal = i_32 << 24;
                i_32 = data[4];
                iVal += i_32 << 16;
                i_32 = data[3];
                iVal += i_32 << 8;
                iVal += data[2];

                longitude = (double)iVal / Math.Pow(10, 7);

                i_32 = data[9];
                iVal = i_32 << 24;
                i_32 = data[8];
                iVal += i_32 << 16;
                i_32 = data[7];
                iVal += i_32 << 8;
                iVal += data[6];
                latitude = (double)iVal / Math.Pow(10, 7);


                i_32 = data[13];
                iVal = i_32 << 24;
                i_32 = data[12];
                iVal += i_32 << 16;
                i_32 = data[11];
                iVal += i_32 << 8;
                iVal += data[10];
                altitude = (double)iVal / Math.Pow(10, 7);

                pstatus = data[14];

                i_32 = data[16];
                iVal = i_32 << 8;
                iVal += data[15];

                heading = iVal;
                tolRadius = data[17];
                holdTime = data[18];
                eventFlag = data[19];
                index = data[1];
//                index = data[20];
                type = data[21];
                WPeventChanVal = data[22];
                altitudeRate = data[23];
                speed = data[24];
                camAngle = data[25];

                name = new string(ASCIIEncoding.ASCII.GetChars(data, 26, 4)).Trim('\0');

                autoTrigger = data[30];

                dr.ItemArray = new object[] { data[1], ((pointType)type).ToString(), name, longitude, latitude, altitude, heading, WPSpeed(speed), altitudeRate, tolRadius, holdTime, autoTrigger, CAMAngle(camAngle), eventFlag, WPeventChanVal, ((status)pstatus).ToString() };
               // dr.ItemArray = new object[] {data[1],((pointType)type).ToString(),name,longitude,latitude,altitude,heading,speed,altitudeRate,tolRadius,holdTime,autoTrigger, CAMAngle(camAngle),((status)pstatus).ToString() };
                return dr;

            }
            return null;


        }


    }
}